diff --git a/.editorconfig b/.editorconfig
index 12bcb27e4ee7bbca7f74423a87d205926d2ad1d2..686c443ceca7e4aaccd384ba6b36afe43337104f 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -13,5 +13,5 @@ charset = utf-8
 trim_trailing_whitespace = true
 insert_final_newline = true
 
-[{composer.json,composer.lock}]
+[composer.{json,lock}]
 indent_size = 4
diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000000000000000000000000000000000000..a37894e8e43bf14c2e77e71c713fa0c4f714be38
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,61 @@
+# Drupal git normalization
+# @see https://www.kernel.org/pub/software/scm/git/docs/gitattributes.html
+# @see https://www.drupal.org/node/1542048
+
+# Normally these settings would be done with macro attributes for improved
+# readability and easier maintenance. However macros can only be defined at the
+# repository root directory. Drupal avoids making any assumptions about where it
+# is installed.
+
+# Define text file attributes.
+# - Treat them as text.
+# - Ensure no CRLF line-endings, neither on checkout nor on checkin.
+# - Detect whitespace errors.
+#   - Exposed by default in `git diff --color` on the CLI.
+#   - Validate with `git diff --check`.
+#   - Deny applying with `git apply --whitespace=error-all`.
+#   - Fix automatically with `git apply --whitespace=fix`.
+
+*.config  text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
+*.css     text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
+*.dist    text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
+*.engine  text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php
+*.html    text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=html
+*.inc     text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php
+*.install text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php
+*.js      text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
+*.json    text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
+*.lock    text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
+*.map     text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
+*.md      text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
+*.module  text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php
+*.php     text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php
+*.po      text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
+*.profile text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php
+*.script  text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
+*.sh      text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php
+*.sql     text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
+*.svg     text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
+*.theme   text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php
+*.twig    text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
+*.txt     text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
+*.xml     text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
+*.yml     text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
+
+# 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
+*.svgz    -text diff
+*.ttf     -text diff
+*.woff    -text diff
+*.woff2   -text diff
diff --git a/composer.json b/composer.json
index 7db00e6f53ecc69d1144421a849b5679778c2ac8..8adadea0753e8fd615c31c2dba31f1dd0a68db65 100644
--- a/composer.json
+++ b/composer.json
@@ -81,11 +81,11 @@
         "php": ">=7.3",
         "browserstate/history.js": "1.8",
         "ckeditor/indentblock": "4.8.0",
-        "cweagans/composer-patches": "^1.0",
+        "composer/installers": "^1.9",
+        "cweagans/composer-patches": "^1.7",
         "desandro/imagesloaded": "4.1.4",
         "desandro/masonry": "4.2",
         "dimsemenov/magnific-popup": "1.1",
-        "drupal-composer/drupal-scaffold": "2.5.4",
         "drupal/address": "1.1",
         "drupal/addtocalendar": "3.2",
         "drupal/admin_toolbar": "2.4",
@@ -103,9 +103,10 @@
         "drupal/config_ignore": "2.2",
         "drupal/config_installer": "1.8",
         "drupal/config_update": "1.5",
-        "drupal/console": "1.8",
+        "drupal/console": "1.9.7",
         "drupal/content_access": "1.0-alpha1",
-        "drupal/core-recommended": "8.9.6",
+        "drupal/core-composer-scaffold": "^9.0",
+        "drupal/core-recommended": "8.9.10",
         "drupal/crop": "2.1",
         "drupal/ctools": "3.4",
         "drupal/devel": "2.0",
@@ -130,7 +131,7 @@
         "drupal/honeypot": "1.30",
         "drupal/image_popup": "1.1",
         "drupal/inline_entity_form": "1.0-rc7",
-        "drupal/libraries": "3.0.0-alpha1",
+        "drupal/libraries": "3.0.0-alpha6",
         "drupal/link_attributes": "1.11",
         "drupal/linkit": "5.0-beta11",
         "drupal/magnific_popup": "1.3",
@@ -186,13 +187,11 @@
         "drupal/webform": "5.19",
         "drupal/webform_views": "5.0-alpha2",
         "drush-ops/behat-drush-endpoint": "0.0.5",
-        "drush/drush": "9.7.1",
+        "drush/drush": "9.7.2",
         "enyo/dropzone": "5.1.1",
         "gdsmith/jquery.easing": "1.4.1",
-        "oomphinc/composer-installers-extender": "1.1.2",
-        "pantheon-systems/quicksilver-pushback": "1.0.1",
-        "rvtraveller/qs-composer-installer": "1.1",
-        "zaporylie/composer-drupal-optimizations": "1.1"
+        "oomphinc/composer-installers-extender": "2.0",
+        "pantheon-systems/quicksilver-pushback": "1.0.1"
     },
     "require-dev": {},
     "conflict": {
@@ -236,7 +235,6 @@
         ]
     },
     "extra": {
-        "installer-types": ["library"],
         "installer-paths": {
             "web/core": ["type:drupal-core"],
             "web/libraries/{$name}": ["type:drupal-library", "enyo/dropzone", "desandro/masonry", "dimsemenov/magnific-popup"],
@@ -255,18 +253,19 @@
         },
         "drupal-scaffold": {
             "source": "https://raw.githubusercontent.com/pantheon-systems/drops-8-scaffolding/{version}/{path}",
-            "includes": [
-                "sites/default/default.services.pantheon.preproduction.yml",
-                "sites/default/settings.pantheon.php"
-            ],
-            "excludes": [
-                ".csslintrc",
-                ".editorconfig",
-                ".eslintignore",
-                ".eslintrc.json",
-                ".htaccess",
-                "web.config"
-            ]
+            "locations": {
+              "web-root": "web/"
+            },
+            "file-mapping": {
+              "[web-root]/INSTALL.txt": false,
+              "[web-root]/README.txt": false,
+              "[web-root]/example.gitignore": false,
+              "[web-root]/modules/README.txt": false,
+              "[web-root]/profiles/README.txt": false,
+              "[web-root]/sites/README.txt": false,
+              "[web-root]/themes/README.txt": false,
+              "[web-root]/web.config": false
+            }
         },
         "patches": {
             "drupal/core": {
@@ -295,6 +294,9 @@
             },
             "mehrpadin/superfish": {
                 "Fontawesome Tags": "patches/superfish-fontawesome-tags.patch"
+            },
+            "drupal/views_ajax_history": {
+                "3028400": "https://www.drupal.org/files/issues/2019-05-16/wrong-url-with-infinit-scroll-3028400-1.patch"
             }
         }
     },
diff --git a/composer.lock b/composer.lock
index fe8e4cf6c6a128cc890cd73ecfacd329953e477e..3deb64c6bda0ac88450506b496d58d6fc8d85ffa 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,35 +4,35 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "This file is @generated automatically"
     ],
-    "content-hash": "3a0a689eb38e0df625ca5642da5bcf83",
+    "content-hash": "05c3df16b95e0ab7c48b01e1c2443a8b",
     "packages": [
         {
             "name": "alchemy/zippy",
-            "version": "0.4.3",
+            "version": "0.4.9",
             "source": {
                 "type": "git",
                 "url": "https://github.com/alchemy-fr/Zippy.git",
-                "reference": "5ffdc93de0af2770d396bf433d8b2667c77277ea"
+                "reference": "59fbeefb9a249122867ef25e53addfcce31850d7"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/alchemy-fr/Zippy/zipball/5ffdc93de0af2770d396bf433d8b2667c77277ea",
-                "reference": "5ffdc93de0af2770d396bf433d8b2667c77277ea",
+                "url": "https://api.github.com/repos/alchemy-fr/Zippy/zipball/59fbeefb9a249122867ef25e53addfcce31850d7",
+                "reference": "59fbeefb9a249122867ef25e53addfcce31850d7",
                 "shasum": ""
             },
             "require": {
                 "doctrine/collections": "~1.0",
-                "ext-mbstring": "*",
                 "php": ">=5.5",
-                "symfony/filesystem": "^2.0.5|^3.0",
-                "symfony/process": "^2.1|^3.0"
+                "symfony/filesystem": "^2.0.5 || ^3.0 || ^4.0",
+                "symfony/polyfill-mbstring": "^1.3",
+                "symfony/process": "^2.1 || ^3.0 || ^4.0"
             },
             "require-dev": {
                 "ext-zip": "*",
                 "guzzle/guzzle": "~3.0",
                 "guzzlehttp/guzzle": "^6.0",
-                "phpunit/phpunit": "^4.0|^5.0",
-                "symfony/finder": "^2.0.5|^3.0"
+                "phpunit/phpunit": "^4.0 || ^5.0",
+                "symfony/finder": "^2.0.5 || ^3.0 || ^4.0"
             },
             "suggest": {
                 "ext-zip": "To use the ZipExtensionAdapter",
@@ -68,7 +68,7 @@
                 "tar",
                 "zip"
             ],
-            "time": "2016-11-03T16:10:31+00:00"
+            "time": "2018-02-22T13:58:36+00:00"
         },
         {
             "name": "asm89/stack-cors",
@@ -134,16 +134,16 @@
         },
         {
             "name": "chi-teck/drupal-code-generator",
-            "version": "1.30.3",
+            "version": "1.32.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/Chi-teck/drupal-code-generator.git",
-                "reference": "1da9f06843b6bf2b0e7d28fea4b6c1d79aead197"
+                "reference": "8abba7131ed4c89c1e8fc6dca0d05a4b6d0b2749"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/Chi-teck/drupal-code-generator/zipball/1da9f06843b6bf2b0e7d28fea4b6c1d79aead197",
-                "reference": "1da9f06843b6bf2b0e7d28fea4b6c1d79aead197",
+                "url": "https://api.github.com/repos/Chi-teck/drupal-code-generator/zipball/8abba7131ed4c89c1e8fc6dca0d05a4b6d0b2749",
+                "reference": "8abba7131ed4c89c1e8fc6dca0d05a4b6d0b2749",
                 "shasum": ""
             },
             "require": {
@@ -151,7 +151,7 @@
                 "php": ">=5.5.9",
                 "symfony/console": "^3.4 || ^4.0",
                 "symfony/filesystem": "^2.7 || ^3.4 || ^4.0",
-                "twig/twig": "^1.38.2 || ^2.10"
+                "twig/twig": "^1.41 || ^2.12"
             },
             "bin": [
                 "bin/dcg"
@@ -175,7 +175,7 @@
                 "GPL-2.0-or-later"
             ],
             "description": "Drupal code generator",
-            "time": "2019-06-29T10:29:45+00:00"
+            "time": "2020-07-15T06:08:04+00:00"
         },
         {
             "name": "ckeditor/indentblock",
@@ -485,25 +485,25 @@
         },
         {
             "name": "consolidation/annotated-command",
-            "version": "2.12.0",
+            "version": "2.12.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/consolidation/annotated-command.git",
-                "reference": "512a2e54c98f3af377589de76c43b24652bcb789"
+                "reference": "0ee361762df2274f360c085e3239784a53f850b5"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/consolidation/annotated-command/zipball/512a2e54c98f3af377589de76c43b24652bcb789",
-                "reference": "512a2e54c98f3af377589de76c43b24652bcb789",
+                "url": "https://api.github.com/repos/consolidation/annotated-command/zipball/0ee361762df2274f360c085e3239784a53f850b5",
+                "reference": "0ee361762df2274f360c085e3239784a53f850b5",
                 "shasum": ""
             },
             "require": {
-                "consolidation/output-formatters": "^3.4",
+                "consolidation/output-formatters": "^3.5.1",
                 "php": ">=5.4.5",
                 "psr/log": "^1",
                 "symfony/console": "^2.8|^3|^4",
                 "symfony/event-dispatcher": "^2.5|^3|^4",
-                "symfony/finder": "^2.5|^3|^4"
+                "symfony/finder": "^2.5|^3|^4|^5"
             },
             "require-dev": {
                 "g1a/composer-test-scenarios": "^3",
@@ -514,6 +514,16 @@
             "type": "library",
             "extra": {
                 "scenarios": {
+                    "finder5": {
+                        "require": {
+                            "symfony/finder": "^5"
+                        },
+                        "config": {
+                            "platform": {
+                                "php": "7.2.5"
+                            }
+                        }
+                    },
                     "symfony4": {
                         "require": {
                             "symfony/console": "^4.0"
@@ -577,7 +587,7 @@
                 }
             ],
             "description": "Initialize Symfony Console commands from annotated command class methods.",
-            "time": "2019-03-08T16:55:03+00:00"
+            "time": "2020-10-11T04:30:03+00:00"
         },
         {
             "name": "consolidation/config",
@@ -819,23 +829,23 @@
         },
         {
             "name": "consolidation/output-formatters",
-            "version": "3.5.0",
+            "version": "3.5.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/consolidation/output-formatters.git",
-                "reference": "99ec998ffb697e0eada5aacf81feebfb13023605"
+                "reference": "0d38f13051ef05c223a2bb8e962d668e24785196"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/consolidation/output-formatters/zipball/99ec998ffb697e0eada5aacf81feebfb13023605",
-                "reference": "99ec998ffb697e0eada5aacf81feebfb13023605",
+                "url": "https://api.github.com/repos/consolidation/output-formatters/zipball/0d38f13051ef05c223a2bb8e962d668e24785196",
+                "reference": "0d38f13051ef05c223a2bb8e962d668e24785196",
                 "shasum": ""
             },
             "require": {
                 "dflydev/dot-access-data": "^1.1.0",
                 "php": ">=5.4.0",
                 "symfony/console": "^2.8|^3|^4",
-                "symfony/finder": "^2.5|^3|^4"
+                "symfony/finder": "^2.5|^3|^4|^5"
             },
             "require-dev": {
                 "g1a/composer-test-scenarios": "^3",
@@ -851,6 +861,16 @@
             "type": "library",
             "extra": {
                 "scenarios": {
+                    "finder5": {
+                        "require": {
+                            "symfony/finder": "^5"
+                        },
+                        "config": {
+                            "platform": {
+                                "php": "7.2.5"
+                            }
+                        }
+                    },
                     "symfony4": {
                         "require": {
                             "symfony/console": "^4.0"
@@ -916,54 +936,48 @@
                 }
             ],
             "description": "Format text by applying transformations provided by plug-in formatters.",
-            "time": "2019-05-30T23:16:01+00:00"
+            "time": "2020-10-11T04:15:32+00:00"
         },
         {
             "name": "consolidation/robo",
-            "version": "1.4.9",
+            "version": "1.4.13",
             "source": {
                 "type": "git",
                 "url": "https://github.com/consolidation/Robo.git",
-                "reference": "5c6b3840a45afda1cbffbb3bb1f94dd5f9f83345"
+                "reference": "fd28dcca1b935950ece26e63541fbdeeb09f7343"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/consolidation/Robo/zipball/5c6b3840a45afda1cbffbb3bb1f94dd5f9f83345",
-                "reference": "5c6b3840a45afda1cbffbb3bb1f94dd5f9f83345",
+                "url": "https://api.github.com/repos/consolidation/Robo/zipball/fd28dcca1b935950ece26e63541fbdeeb09f7343",
+                "reference": "fd28dcca1b935950ece26e63541fbdeeb09f7343",
                 "shasum": ""
             },
             "require": {
-                "consolidation/annotated-command": "^2.10.2",
-                "consolidation/config": "^1.2",
-                "consolidation/log": "~1",
-                "consolidation/output-formatters": "^3.1.13",
-                "consolidation/self-update": "^1",
-                "grasmash/yaml-expander": "^1.3",
-                "league/container": "^2.2",
+                "consolidation/annotated-command": "^2.12.1|^4.1",
+                "consolidation/config": "^1.2.1",
+                "consolidation/log": "^1.1.1|^2",
+                "consolidation/output-formatters": "^3.5.1|^4.1",
+                "consolidation/self-update": "^1.1.5",
+                "grasmash/yaml-expander": "^1.4",
+                "league/container": "^2.4.1",
                 "php": ">=5.5.0",
                 "symfony/console": "^2.8|^3|^4",
                 "symfony/event-dispatcher": "^2.5|^3|^4",
                 "symfony/filesystem": "^2.5|^3|^4",
-                "symfony/finder": "^2.5|^3|^4",
+                "symfony/finder": "^2.5|^3|^4|^5",
                 "symfony/process": "^2.5|^3|^4"
             },
             "replace": {
                 "codegyre/robo": "< 1.0"
             },
             "require-dev": {
-                "codeception/aspect-mock": "^1|^2.1.1",
-                "codeception/base": "^2.3.7",
-                "codeception/verify": "^0.3.2",
                 "g1a/composer-test-scenarios": "^3",
-                "goaop/framework": "~2.1.2",
-                "goaop/parser-reflection": "^1.1.0",
                 "natxet/cssmin": "3.0.4",
-                "nikic/php-parser": "^3.1.5",
-                "patchwork/jsqueeze": "~2",
+                "patchwork/jsqueeze": "^2",
                 "pear/archive_tar": "^1.4.4",
                 "php-coveralls/php-coveralls": "^1",
-                "phpunit/php-code-coverage": "~2|~4",
-                "squizlabs/php_codesniffer": "^2.8"
+                "phpunit/phpunit": "^5.7.27",
+                "squizlabs/php_codesniffer": "^3"
             },
             "suggest": {
                 "henrikbjorn/lurker": "For monitoring filesystem changes in taskWatch",
@@ -977,6 +991,16 @@
             "type": "library",
             "extra": {
                 "scenarios": {
+                    "finder5": {
+                        "require": {
+                            "symfony/finder": "^5"
+                        },
+                        "config": {
+                            "platform": {
+                                "php": "7.2.5"
+                            }
+                        }
+                    },
                     "symfony4": {
                         "require": {
                             "symfony/console": "^4"
@@ -991,8 +1015,11 @@
                         "require": {
                             "symfony/console": "^2.8"
                         },
+                        "require-dev": {
+                            "phpunit/phpunit": "^4.8.36"
+                        },
                         "remove": [
-                            "goaop/framework"
+                            "php-coveralls/php-coveralls"
                         ],
                         "config": {
                             "platform": {
@@ -1005,7 +1032,7 @@
                     }
                 },
                 "branch-alias": {
-                    "dev-master": "2.x-dev"
+                    "dev-master": "1.x-dev"
                 }
             },
             "autoload": {
@@ -1024,26 +1051,26 @@
                 }
             ],
             "description": "Modern task runner",
-            "time": "2019-03-19T18:07:19+00:00"
+            "time": "2020-10-11T04:51:34+00:00"
         },
         {
             "name": "consolidation/self-update",
-            "version": "1.1.5",
+            "version": "1.2.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/consolidation/self-update.git",
-                "reference": "a1c273b14ce334789825a09d06d4c87c0a02ad54"
+                "reference": "dba6b2c0708f20fa3ba8008a2353b637578849b4"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/consolidation/self-update/zipball/a1c273b14ce334789825a09d06d4c87c0a02ad54",
-                "reference": "a1c273b14ce334789825a09d06d4c87c0a02ad54",
+                "url": "https://api.github.com/repos/consolidation/self-update/zipball/dba6b2c0708f20fa3ba8008a2353b637578849b4",
+                "reference": "dba6b2c0708f20fa3ba8008a2353b637578849b4",
                 "shasum": ""
             },
             "require": {
                 "php": ">=5.5.0",
-                "symfony/console": "^2.8|^3|^4",
-                "symfony/filesystem": "^2.5|^3|^4"
+                "symfony/console": "^2.8|^3|^4|^5",
+                "symfony/filesystem": "^2.5|^3|^4|^5"
             },
             "bin": [
                 "scripts/release"
@@ -1064,46 +1091,45 @@
                 "MIT"
             ],
             "authors": [
-                {
-                    "name": "Greg Anderson",
-                    "email": "greg.1.anderson@greenknowe.org"
-                },
                 {
                     "name": "Alexander Menk",
                     "email": "menk@mestrona.net"
+                },
+                {
+                    "name": "Greg Anderson",
+                    "email": "greg.1.anderson@greenknowe.org"
                 }
             ],
             "description": "Provides a self:update command for Symfony Console applications.",
-            "time": "2018-10-28T01:52:03+00:00"
+            "time": "2020-04-13T02:49:20+00:00"
         },
         {
             "name": "consolidation/site-alias",
-            "version": "3.0.0",
+            "version": "3.0.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/consolidation/site-alias.git",
-                "reference": "8cfd3b6ab6d541086fc970bf850864293b284e6f"
+                "reference": "fd40a03f80f8fd4684b10bef8c8c4ec5a9a9bf26"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/consolidation/site-alias/zipball/8cfd3b6ab6d541086fc970bf850864293b284e6f",
-                "reference": "8cfd3b6ab6d541086fc970bf850864293b284e6f",
+                "url": "https://api.github.com/repos/consolidation/site-alias/zipball/fd40a03f80f8fd4684b10bef8c8c4ec5a9a9bf26",
+                "reference": "fd40a03f80f8fd4684b10bef8c8c4ec5a9a9bf26",
                 "shasum": ""
             },
             "require": {
-                "consolidation/config": "^1.2.1",
+                "consolidation/config": "^1.2.1|^2",
                 "php": ">=5.5.0"
             },
             "require-dev": {
-                "consolidation/robo": "^1.2.3",
+                "consolidation/robo": "^1.2.3|^2",
                 "g1a/composer-test-scenarios": "^3",
                 "knplabs/github-api": "^2.7",
-                "php-coveralls/php-coveralls": "^1",
+                "php-coveralls/php-coveralls": "^2.2",
                 "php-http/guzzle6-adapter": "^1.1",
                 "phpunit/phpunit": "^6",
                 "squizlabs/php_codesniffer": "^2.8",
-                "symfony/console": "^2.8|^3|^4",
-                "symfony/yaml": "~2.3|^3"
+                "symfony/yaml": "~2.3|^3|^4.4|^5"
             },
             "type": "library",
             "extra": {
@@ -1136,30 +1162,30 @@
                 "MIT"
             ],
             "authors": [
-                {
-                    "name": "Moshe Weitzman",
-                    "email": "weitzman@tejasa.com"
-                },
                 {
                     "name": "Greg Anderson",
                     "email": "greg.1.anderson@greenknowe.org"
+                },
+                {
+                    "name": "Moshe Weitzman",
+                    "email": "weitzman@tejasa.com"
                 }
             ],
             "description": "Manage alias records for local and remote sites.",
-            "time": "2019-03-12T17:31:48+00:00"
+            "time": "2020-05-28T00:33:41+00:00"
         },
         {
             "name": "consolidation/site-process",
-            "version": "2.0.3",
+            "version": "2.1.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/consolidation/site-process.git",
-                "reference": "e25265f4a48c13284ebb6f9e0906ecd415d451df"
+                "reference": "f3211fa4c60671c6f068184221f06f932556e443"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/consolidation/site-process/zipball/e25265f4a48c13284ebb6f9e0906ecd415d451df",
-                "reference": "e25265f4a48c13284ebb6f9e0906ecd415d451df",
+                "url": "https://api.github.com/repos/consolidation/site-process/zipball/f3211fa4c60671c6f068184221f06f932556e443",
+                "reference": "f3211fa4c60671c6f068184221f06f932556e443",
                 "shasum": ""
             },
             "require": {
@@ -1208,17 +1234,17 @@
                 "MIT"
             ],
             "authors": [
-                {
-                    "name": "Moshe Weitzman",
-                    "email": "weitzman@tejasa.com"
-                },
                 {
                     "name": "Greg Anderson",
                     "email": "greg.1.anderson@greenknowe.org"
+                },
+                {
+                    "name": "Moshe Weitzman",
+                    "email": "weitzman@tejasa.com"
                 }
             ],
             "description": "A thin wrapper around the Symfony Process Component that allows applications to use the Site Alias library to specify the target for a remote call.",
-            "time": "2019-06-04T22:23:52+00:00"
+            "time": "2019-09-10T17:56:24+00:00"
         },
         {
             "name": "container-interop/container-interop",
@@ -1254,24 +1280,24 @@
         },
         {
             "name": "cweagans/composer-patches",
-            "version": "1.6.5",
+            "version": "1.7.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/cweagans/composer-patches.git",
-                "reference": "2ec4f00ff5fb64de584c8c4aea53bf9053ecb0b3"
+                "reference": "ae02121445ad75f4eaff800cc532b5e6233e2ddf"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/cweagans/composer-patches/zipball/2ec4f00ff5fb64de584c8c4aea53bf9053ecb0b3",
-                "reference": "2ec4f00ff5fb64de584c8c4aea53bf9053ecb0b3",
+                "url": "https://api.github.com/repos/cweagans/composer-patches/zipball/ae02121445ad75f4eaff800cc532b5e6233e2ddf",
+                "reference": "ae02121445ad75f4eaff800cc532b5e6233e2ddf",
                 "shasum": ""
             },
             "require": {
-                "composer-plugin-api": "^1.0",
+                "composer-plugin-api": "^1.0 || ^2.0",
                 "php": ">=5.3.0"
             },
             "require-dev": {
-                "composer/composer": "~1.0",
+                "composer/composer": "~1.0 || ~2.0",
                 "phpunit/phpunit": "~4.6"
             },
             "type": "composer-plugin",
@@ -1294,7 +1320,7 @@
                 }
             ],
             "description": "Provides a way to patch Composer packages.",
-            "time": "2018-05-11T18:00:16+00:00"
+            "time": "2020-09-30T17:56:20+00:00"
         },
         {
             "name": "desandro/imagesloaded",
@@ -1317,16 +1343,16 @@
         },
         {
             "name": "dflydev/dot-access-configuration",
-            "version": "v1.0.2",
+            "version": "v1.0.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/dflydev/dflydev-dot-access-configuration.git",
-                "reference": "ae6e7138b1d9063d343322cca63994ee1ac5161d"
+                "reference": "2e6eb0c8b8830b26bb23defcfc38d4276508fc49"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-configuration/zipball/ae6e7138b1d9063d343322cca63994ee1ac5161d",
-                "reference": "ae6e7138b1d9063d343322cca63994ee1ac5161d",
+                "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-configuration/zipball/2e6eb0c8b8830b26bb23defcfc38d4276508fc49",
+                "reference": "2e6eb0c8b8830b26bb23defcfc38d4276508fc49",
                 "shasum": ""
             },
             "require": {
@@ -1373,7 +1399,7 @@
                 "config",
                 "configuration"
             ],
-            "time": "2016-12-12T17:43:40+00:00"
+            "time": "2018-09-08T23:00:17+00:00"
         },
         {
             "name": "dflydev/dot-access-data",
@@ -1508,25 +1534,25 @@
         },
         {
             "name": "dnoegel/php-xdg-base-dir",
-            "version": "0.1",
+            "version": "v0.1.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/dnoegel/php-xdg-base-dir.git",
-                "reference": "265b8593498b997dc2d31e75b89f053b5cc9621a"
+                "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/dnoegel/php-xdg-base-dir/zipball/265b8593498b997dc2d31e75b89f053b5cc9621a",
-                "reference": "265b8593498b997dc2d31e75b89f053b5cc9621a",
+                "url": "https://api.github.com/repos/dnoegel/php-xdg-base-dir/zipball/8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd",
+                "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd",
                 "shasum": ""
             },
             "require": {
                 "php": ">=5.3.2"
             },
             "require-dev": {
-                "phpunit/phpunit": "@stable"
+                "phpunit/phpunit": "~7.0|~6.0|~5.0|~4.8.35"
             },
-            "type": "project",
+            "type": "library",
             "autoload": {
                 "psr-4": {
                     "XdgBaseDir\\": "src/"
@@ -1537,7 +1563,7 @@
                 "MIT"
             ],
             "description": "implementation of xdg base directory specification for php",
-            "time": "2014-10-24T07:27:01+00:00"
+            "time": "2019-12-04T15:06:13+00:00"
         },
         {
             "name": "doctrine/annotations",
@@ -1944,51 +1970,6 @@
             ],
             "time": "2019-06-08T11:03:04+00:00"
         },
-        {
-            "name": "drupal-composer/drupal-scaffold",
-            "version": "2.5.4",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/drupal-composer/drupal-scaffold.git",
-                "reference": "fc6bf4ceecb5d47327f54d48d4d4f67b17da956d"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/drupal-composer/drupal-scaffold/zipball/fc6bf4ceecb5d47327f54d48d4d4f67b17da956d",
-                "reference": "fc6bf4ceecb5d47327f54d48d4d4f67b17da956d",
-                "shasum": ""
-            },
-            "require": {
-                "composer-plugin-api": "^1.0.0",
-                "composer/semver": "^1.4",
-                "php": ">=5.4.5"
-            },
-            "require-dev": {
-                "composer/composer": "dev-master",
-                "g1a/composer-test-scenarios": "^2.1.0",
-                "phpunit/phpunit": "^6",
-                "squizlabs/php_codesniffer": "^2.8"
-            },
-            "type": "composer-plugin",
-            "extra": {
-                "class": "DrupalComposer\\DrupalScaffold\\Plugin",
-                "branch-alias": {
-                    "dev-master": "2.0.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "DrupalComposer\\DrupalScaffold\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "GPL-2.0-or-later"
-            ],
-            "description": "Composer Plugin for updating the Drupal scaffold files when using drupal/core",
-            "abandoned": "drupal/core-composer-scaffold",
-            "time": "2018-07-27T10:07:07+00:00"
-        },
         {
             "name": "drupal/address",
             "version": "1.1.0",
@@ -3065,35 +3046,34 @@
         },
         {
             "name": "drupal/console",
-            "version": "1.8.0",
+            "version": "1.9.7",
             "source": {
                 "type": "git",
                 "url": "https://github.com/hechoendrupal/drupal-console.git",
-                "reference": "368bbfa44dc6b957eb4db01977f7c39e83032d18"
+                "reference": "90053d30f52427edb4e4941a9063acb65b5a2c1e"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/hechoendrupal/drupal-console/zipball/368bbfa44dc6b957eb4db01977f7c39e83032d18",
-                "reference": "368bbfa44dc6b957eb4db01977f7c39e83032d18",
+                "url": "https://api.github.com/repos/hechoendrupal/drupal-console/zipball/90053d30f52427edb4e4941a9063acb65b5a2c1e",
+                "reference": "90053d30f52427edb4e4941a9063acb65b5a2c1e",
                 "shasum": ""
             },
             "require": {
-                "alchemy/zippy": "0.4.3",
+                "alchemy/zippy": "~0.4",
                 "composer/installers": "~1.0",
                 "doctrine/annotations": "^1.2",
                 "doctrine/collections": "^1.3",
-                "drupal/console-core": "1.8.0",
-                "drupal/console-extend-plugin": "~0",
-                "guzzlehttp/guzzle": "~6.1",
-                "php": "^5.5.9 || ^7.0",
+                "drupal/console-core": "1.9.7",
+                "drupal/console-extend-plugin": "~0.9.5",
+                "php": ">=7.0.8",
                 "psy/psysh": "0.6.* || ~0.8",
-                "symfony/css-selector": "~2.8|~3.0",
-                "symfony/dom-crawler": "~2.8|~3.0",
-                "symfony/http-foundation": "~2.8|~3.0"
+                "symfony/css-selector": "~3.0|~4.0",
+                "symfony/dom-crawler": "~3.0|~4.0",
+                "symfony/http-foundation": "~3.0|~4.0"
             },
             "suggest": {
-                "symfony/thanks": "Thank your favorite PHP projects on Github using the CLI!",
-                "vlucas/phpdotenv": "Loads environment variables from .env to getenv(), $_ENV and $_SERVER automagically."
+                "symfony/thanks": "Thank your favorite PHP projects on GitHub using the CLI",
+                "vlucas/phpdotenv": "Loads environment variables from .env to getenv(), $_ENV and $_SERVER automagically"
             },
             "bin": [
                 "bin/drupal"
@@ -3141,38 +3121,45 @@
                 "drupal",
                 "symfony"
             ],
-            "time": "2018-03-21T20:50:16+00:00"
+            "funding": [
+                {
+                    "url": "https://opencollective.com/drupalconsole",
+                    "type": "open_collective"
+                }
+            ],
+            "time": "2020-11-30T02:09:53+00:00"
         },
         {
             "name": "drupal/console-core",
-            "version": "1.8.0",
+            "version": "1.9.7",
             "source": {
                 "type": "git",
                 "url": "https://github.com/hechoendrupal/drupal-console-core.git",
-                "reference": "bf1fb4a6f689377acec1694267f674178d28e5d1"
+                "reference": "ab3abc2631761c9588230ba88189d9ba4eb9ed63"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/hechoendrupal/drupal-console-core/zipball/bf1fb4a6f689377acec1694267f674178d28e5d1",
-                "reference": "bf1fb4a6f689377acec1694267f674178d28e5d1",
+                "url": "https://api.github.com/repos/hechoendrupal/drupal-console-core/zipball/ab3abc2631761c9588230ba88189d9ba4eb9ed63",
+                "reference": "ab3abc2631761c9588230ba88189d9ba4eb9ed63",
                 "shasum": ""
             },
             "require": {
                 "dflydev/dot-access-configuration": "^1.0",
-                "drupal/console-en": "1.8.0",
-                "php": "^5.5.9 || ^7.0",
+                "drupal/console-en": "1.9.7",
+                "guzzlehttp/guzzle": "~6.1",
+                "php": ">=7.0.8",
                 "stecman/symfony-console-completion": "~0.7",
-                "symfony/config": "~2.8|~3.0",
-                "symfony/console": "~2.8|~3.0",
-                "symfony/debug": "~2.8|~3.0",
-                "symfony/dependency-injection": "~2.8|~3.0",
-                "symfony/event-dispatcher": "~2.8|~3.0",
-                "symfony/filesystem": "~2.8|~3.0",
-                "symfony/finder": "~2.8|~3.0",
-                "symfony/process": "~2.8|~3.0",
-                "symfony/translation": "~2.8|~3.0",
-                "symfony/yaml": "~2.8|~3.0",
-                "twig/twig": "^1.23.1",
+                "symfony/config": "~3.0|^4.4",
+                "symfony/console": "~3.0|^4.4",
+                "symfony/debug": "~3.0|^4.4",
+                "symfony/dependency-injection": "~3.0|^4.4",
+                "symfony/event-dispatcher": "~3.0|^4.4",
+                "symfony/filesystem": "~3.0|^4.4",
+                "symfony/finder": "~3.0|^4.4",
+                "symfony/process": "~3.0|^4.4",
+                "symfony/translation": "~3.0|^4.4",
+                "symfony/yaml": "~3.0|^4.4",
+                "twig/twig": "^1.38.2|^2.12.0",
                 "webflo/drupal-finder": "^1.0",
                 "webmozart/path-util": "^2.3"
             },
@@ -3200,10 +3187,6 @@
                     "email": "jesus.olivas@gmail.com",
                     "homepage": "http://jmolivas.com"
                 },
-                {
-                    "name": "Drupal Console Contributors",
-                    "homepage": "https://github.com/hechoendrupal/DrupalConsole/graphs/contributors"
-                },
                 {
                     "name": "Eduardo Garcia",
                     "email": "enzo@enzolutions.com",
@@ -3212,6 +3195,10 @@
                 {
                     "name": "Omar Aguirre",
                     "email": "omersguchigu@gmail.com"
+                },
+                {
+                    "name": "Drupal Console Contributors",
+                    "homepage": "https://github.com/hechoendrupal/DrupalConsole/graphs/contributors"
                 }
             ],
             "description": "Drupal Console Core",
@@ -3222,23 +3209,23 @@
                 "drupal",
                 "symfony"
             ],
-            "time": "2018-03-21T19:33:23+00:00"
+            "time": "2020-11-30T01:45:57+00:00"
         },
         {
             "name": "drupal/console-en",
-            "version": "1.8.0",
+            "version": "v1.9.7",
             "source": {
                 "type": "git",
                 "url": "https://github.com/hechoendrupal/drupal-console-en.git",
-                "reference": "ea956ddffab04f519a89858810e5f695b9def92b"
+                "reference": "7594601fff153c2799a62bd678ff80749baeee0c"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/hechoendrupal/drupal-console-en/zipball/ea956ddffab04f519a89858810e5f695b9def92b",
-                "reference": "ea956ddffab04f519a89858810e5f695b9def92b",
+                "url": "https://api.github.com/repos/hechoendrupal/drupal-console-en/zipball/7594601fff153c2799a62bd678ff80749baeee0c",
+                "reference": "7594601fff153c2799a62bd678ff80749baeee0c",
                 "shasum": ""
             },
-            "type": "drupal-console-language",
+            "type": "library",
             "notification-url": "https://packagist.org/downloads/",
             "license": [
                 "GPL-2.0-or-later"
@@ -3254,10 +3241,6 @@
                     "email": "jesus.olivas@gmail.com",
                     "homepage": "http://jmolivas.com"
                 },
-                {
-                    "name": "Drupal Console Contributors",
-                    "homepage": "https://github.com/hechoendrupal/DrupalConsole/graphs/contributors"
-                },
                 {
                     "name": "Eduardo Garcia",
                     "email": "enzo@enzolutions.com",
@@ -3266,6 +3249,10 @@
                 {
                     "name": "Omar Aguirre",
                     "email": "omersguchigu@gmail.com"
+                },
+                {
+                    "name": "Drupal Console Contributors",
+                    "homepage": "https://github.com/hechoendrupal/DrupalConsole/graphs/contributors"
                 }
             ],
             "description": "Drupal Console English Language",
@@ -3276,26 +3263,27 @@
                 "drupal",
                 "symfony"
             ],
-            "time": "2018-03-21T19:16:27+00:00"
+            "time": "2020-08-15T03:34:54+00:00"
         },
         {
             "name": "drupal/console-extend-plugin",
-            "version": "0.9.2",
+            "version": "0.9.5",
             "source": {
                 "type": "git",
                 "url": "https://github.com/hechoendrupal/drupal-console-extend-plugin.git",
-                "reference": "f3bac233fd305359c33e96621443b3bd065555cc"
+                "reference": "eff6da99cfb5fe1fc60990672d2667c402eb3585"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/hechoendrupal/drupal-console-extend-plugin/zipball/f3bac233fd305359c33e96621443b3bd065555cc",
-                "reference": "f3bac233fd305359c33e96621443b3bd065555cc",
+                "url": "https://api.github.com/repos/hechoendrupal/drupal-console-extend-plugin/zipball/eff6da99cfb5fe1fc60990672d2667c402eb3585",
+                "reference": "eff6da99cfb5fe1fc60990672d2667c402eb3585",
                 "shasum": ""
             },
             "require": {
-                "composer-plugin-api": "^1.0",
-                "symfony/finder": "~2.7|~3.0",
-                "symfony/yaml": "~2.7|~3.0"
+                "composer-plugin-api": "^1.0 || ^2.0",
+                "composer/installers": "^1.2",
+                "symfony/finder": "~3.0|^4.4",
+                "symfony/yaml": "~3.0|^4.4"
             },
             "type": "composer-plugin",
             "extra": {
@@ -3317,7 +3305,7 @@
                 }
             ],
             "description": "Drupal Console Extend Plugin",
-            "time": "2017-07-28T17:11:54+00:00"
+            "time": "2020-11-18T00:15:28+00:00"
         },
         {
             "name": "drupal/content_access",
@@ -3376,16 +3364,16 @@
         },
         {
             "name": "drupal/core",
-            "version": "8.9.6",
+            "version": "8.9.10",
             "source": {
                 "type": "git",
                 "url": "https://github.com/drupal/core.git",
-                "reference": "caf4e756d31dfb0c2e52cd0748e900efe4b57766"
+                "reference": "e725c01cdf6fb6d8b330a27fa75caab91034805a"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/drupal/core/zipball/caf4e756d31dfb0c2e52cd0748e900efe4b57766",
-                "reference": "caf4e756d31dfb0c2e52cd0748e900efe4b57766",
+                "url": "https://api.github.com/repos/drupal/core/zipball/e725c01cdf6fb6d8b330a27fa75caab91034805a",
+                "reference": "e725c01cdf6fb6d8b330a27fa75caab91034805a",
                 "shasum": ""
             },
             "require": {
@@ -3412,7 +3400,7 @@
                 "laminas/laminas-diactoros": "^1.8",
                 "laminas/laminas-feed": "^2.12",
                 "masterminds/html5": "^2.1",
-                "pear/archive_tar": "^1.4.9",
+                "pear/archive_tar": "^1.4.11",
                 "php": ">=7.0.8",
                 "psr/log": "^1.0",
                 "stack/builder": "^1.0",
@@ -3608,20 +3596,67 @@
                 "GPL-2.0-or-later"
             ],
             "description": "Drupal is an open source content management platform powering millions of websites and applications.",
-            "time": "2020-09-16T11:22:21+00:00"
+            "time": "2020-11-26T01:49:15+00:00"
+        },
+        {
+            "name": "drupal/core-composer-scaffold",
+            "version": "9.0.9",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/drupal/core-composer-scaffold.git",
+                "reference": "c017751a6bb9b2ffe56f0fab607ba67c21604bfd"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/drupal/core-composer-scaffold/zipball/c017751a6bb9b2ffe56f0fab607ba67c21604bfd",
+                "reference": "c017751a6bb9b2ffe56f0fab607ba67c21604bfd",
+                "shasum": ""
+            },
+            "require": {
+                "composer-plugin-api": "^1 || ^2",
+                "php": ">=7.3.0"
+            },
+            "conflict": {
+                "drupal-composer/drupal-scaffold": "*"
+            },
+            "require-dev": {
+                "composer/composer": "^1.8@stable"
+            },
+            "type": "composer-plugin",
+            "extra": {
+                "class": "Drupal\\Composer\\Plugin\\Scaffold\\Plugin",
+                "branch-alias": {
+                    "dev-master": "1.0.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Drupal\\Composer\\Plugin\\Scaffold\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "GPL-2.0-or-later"
+            ],
+            "description": "A flexible Composer project scaffold builder.",
+            "homepage": "https://www.drupal.org/project/drupal",
+            "keywords": [
+                "drupal"
+            ],
+            "time": "2020-08-07T22:30:24+00:00"
         },
         {
             "name": "drupal/core-recommended",
-            "version": "8.9.6",
+            "version": "8.9.10",
             "source": {
                 "type": "git",
                 "url": "https://github.com/drupal/core-recommended.git",
-                "reference": "6c5c4739afc5549e6089ef34b59c712c8872f154"
+                "reference": "106e2a3e6f00f8867d1867e9d7b1376961a264f7"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/drupal/core-recommended/zipball/6c5c4739afc5549e6089ef34b59c712c8872f154",
-                "reference": "6c5c4739afc5549e6089ef34b59c712c8872f154",
+                "url": "https://api.github.com/repos/drupal/core-recommended/zipball/106e2a3e6f00f8867d1867e9d7b1376961a264f7",
+                "reference": "106e2a3e6f00f8867d1867e9d7b1376961a264f7",
                 "shasum": ""
             },
             "require": {
@@ -3633,7 +3668,7 @@
                 "doctrine/common": "v2.7.3",
                 "doctrine/inflector": "v1.2.0",
                 "doctrine/lexer": "1.0.2",
-                "drupal/core": "8.9.6",
+                "drupal/core": "8.9.10",
                 "easyrdf/easyrdf": "0.9.1",
                 "egulias/email-validator": "2.1.17",
                 "guzzlehttp/guzzle": "6.5.4",
@@ -3646,7 +3681,7 @@
                 "laminas/laminas-zendframework-bridge": "1.0.4",
                 "masterminds/html5": "2.3.0",
                 "paragonie/random_compat": "v9.99.99",
-                "pear/archive_tar": "1.4.9",
+                "pear/archive_tar": "1.4.11",
                 "pear/console_getopt": "v1.4.3",
                 "pear/pear-core-minimal": "v1.10.10",
                 "pear/pear_exception": "v1.0.1",
@@ -3690,7 +3725,7 @@
                 "GPL-2.0-or-later"
             ],
             "description": "Locked core dependencies; require this project INSTEAD OF drupal/core.",
-            "time": "2020-09-16T11:22:21+00:00"
+            "time": "2020-11-26T01:49:15+00:00"
         },
         {
             "name": "drupal/crop",
@@ -5400,29 +5435,26 @@
         },
         {
             "name": "drupal/libraries",
-            "version": "3.0.0-alpha1",
+            "version": "3.0.0-alpha6",
             "source": {
                 "type": "git",
                 "url": "https://git.drupalcode.org/project/libraries.git",
-                "reference": "8.x-3.0-alpha1"
+                "reference": "8.x-3.0-alpha6"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://ftp.drupal.org/files/projects/libraries-8.x-3.0-alpha1.zip",
-                "reference": "8.x-3.0-alpha1",
-                "shasum": "bb07036b1eaeea7d736fc7e72416238830cd8d67"
+                "url": "https://ftp.drupal.org/files/projects/libraries-8.x-3.0-alpha6.zip",
+                "reference": "8.x-3.0-alpha6",
+                "shasum": "d2aaf7f0968a1864457a7741b7e38ab11ef83e2c"
             },
             "require": {
-                "drupal/core": "~8.0"
+                "drupal/core": "^8 || ^9"
             },
             "type": "drupal-module",
             "extra": {
-                "branch-alias": {
-                    "dev-3.x": "3.x-dev"
-                },
                 "drupal": {
-                    "version": "8.x-3.0-alpha1",
-                    "datestamp": "1517046484",
+                    "version": "8.x-3.0-alpha6",
+                    "datestamp": "1608099124",
                     "security-coverage": {
                         "status": "not-covered",
                         "message": "Alpha releases are not covered by Drupal security advisories."
@@ -5438,6 +5470,10 @@
                     "name": "Pol",
                     "homepage": "https://www.drupal.org/user/47194"
                 },
+                {
+                    "name": "joseph.olstad",
+                    "homepage": "https://www.drupal.org/user/1321830"
+                },
                 {
                     "name": "rjacobs",
                     "homepage": "https://www.drupal.org/user/422459"
@@ -8129,6 +8165,9 @@
                         "status": "covered",
                         "message": "Covered by Drupal's security advisory policy"
                     }
+                },
+                "patches_applied": {
+                    "3028400": "https://www.drupal.org/files/issues/2019-05-16/wrong-url-with-infinit-scroll-3028400-1.patch"
                 }
             },
             "notification-url": "https://packages.drupal.org/8/downloads",
@@ -8735,16 +8774,16 @@
         },
         {
             "name": "drush/drush",
-            "version": "9.7.1",
+            "version": "9.7.2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/drush-ops/drush.git",
-                "reference": "6f9a8d235daec06fd6f47b2d84da675750566479"
+                "reference": "ab5e345a72c9187a7d770486a09691f6526826aa"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/drush-ops/drush/zipball/6f9a8d235daec06fd6f47b2d84da675750566479",
-                "reference": "6f9a8d235daec06fd6f47b2d84da675750566479",
+                "url": "https://api.github.com/repos/drush-ops/drush/zipball/ab5e345a72c9187a7d770486a09691f6526826aa",
+                "reference": "ab5e345a72c9187a7d770486a09691f6526826aa",
                 "shasum": ""
             },
             "require": {
@@ -8764,7 +8803,7 @@
                 "psr/log": "~1.0",
                 "psy/psysh": "~0.6",
                 "symfony/console": "^3.4",
-                "symfony/event-dispatcher": "^3.4",
+                "symfony/event-dispatcher": "^3.4 || ^4.0",
                 "symfony/finder": "^3.4 || ^4.0",
                 "symfony/process": "^3.4",
                 "symfony/var-dumper": "^3.4 || ^4.0",
@@ -8880,7 +8919,7 @@
             ],
             "description": "Drush is a command line shell and scripting interface for Drupal, a veritable Swiss Army knife designed to make life easier for those of us who spend some of our working hours hacking away at the command prompt.",
             "homepage": "http://www.drush.org",
-            "time": "2019-06-30T19:46:39+00:00"
+            "time": "2020-02-09T17:29:51+00:00"
         },
         {
             "name": "easyrdf/easyrdf",
@@ -9642,96 +9681,6 @@
             "abandoned": "simplesamlphp/twig-configurable-i18n",
             "time": "2019-06-07T11:03:28+00:00"
         },
-        {
-            "name": "jakub-onderka/php-console-color",
-            "version": "v0.2",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/JakubOnderka/PHP-Console-Color.git",
-                "reference": "d5deaecff52a0d61ccb613bb3804088da0307191"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/JakubOnderka/PHP-Console-Color/zipball/d5deaecff52a0d61ccb613bb3804088da0307191",
-                "reference": "d5deaecff52a0d61ccb613bb3804088da0307191",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.4.0"
-            },
-            "require-dev": {
-                "jakub-onderka/php-code-style": "1.0",
-                "jakub-onderka/php-parallel-lint": "1.0",
-                "jakub-onderka/php-var-dump-check": "0.*",
-                "phpunit/phpunit": "~4.3",
-                "squizlabs/php_codesniffer": "1.*"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "JakubOnderka\\PhpConsoleColor\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-2-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Jakub Onderka",
-                    "email": "jakub.onderka@gmail.com"
-                }
-            ],
-            "abandoned": "php-parallel-lint/php-console-color",
-            "time": "2018-09-29T17:23:10+00:00"
-        },
-        {
-            "name": "jakub-onderka/php-console-highlighter",
-            "version": "v0.4",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/JakubOnderka/PHP-Console-Highlighter.git",
-                "reference": "9f7a229a69d52506914b4bc61bfdb199d90c5547"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/JakubOnderka/PHP-Console-Highlighter/zipball/9f7a229a69d52506914b4bc61bfdb199d90c5547",
-                "reference": "9f7a229a69d52506914b4bc61bfdb199d90c5547",
-                "shasum": ""
-            },
-            "require": {
-                "ext-tokenizer": "*",
-                "jakub-onderka/php-console-color": "~0.2",
-                "php": ">=5.4.0"
-            },
-            "require-dev": {
-                "jakub-onderka/php-code-style": "~1.0",
-                "jakub-onderka/php-parallel-lint": "~1.0",
-                "jakub-onderka/php-var-dump-check": "~0.1",
-                "phpunit/phpunit": "~4.0",
-                "squizlabs/php_codesniffer": "~1.5"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "JakubOnderka\\PhpConsoleHighlighter\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Jakub Onderka",
-                    "email": "acci@acci.cz",
-                    "homepage": "http://www.acci.cz/"
-                }
-            ],
-            "description": "Highlight PHP code in terminal",
-            "abandoned": "php-parallel-lint/php-console-highlighter",
-            "time": "2018-09-29T18:48:56+00:00"
-        },
         {
             "name": "laminas/laminas-diactoros",
             "version": "1.8.7p2",
@@ -10241,16 +10190,16 @@
         },
         {
             "name": "nikic/php-parser",
-            "version": "v4.2.2",
+            "version": "v4.10.2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/nikic/PHP-Parser.git",
-                "reference": "1bd73cc04c3843ad8d6b0bfc0956026a151fc420"
+                "reference": "658f1be311a230e0907f5dfe0213742aff0596de"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/1bd73cc04c3843ad8d6b0bfc0956026a151fc420",
-                "reference": "1bd73cc04c3843ad8d6b0bfc0956026a151fc420",
+                "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/658f1be311a230e0907f5dfe0213742aff0596de",
+                "reference": "658f1be311a230e0907f5dfe0213742aff0596de",
                 "shasum": ""
             },
             "require": {
@@ -10258,7 +10207,8 @@
                 "php": ">=7.0"
             },
             "require-dev": {
-                "phpunit/phpunit": "^6.5 || ^7.0"
+                "ircmaxell/php-yacc": "^0.0.7",
+                "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0"
             },
             "bin": [
                 "bin/php-parse"
@@ -10266,7 +10216,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "4.2-dev"
+                    "dev-master": "4.9-dev"
                 }
             },
             "autoload": {
@@ -10288,25 +10238,31 @@
                 "parser",
                 "php"
             ],
-            "time": "2019-05-25T20:07:01+00:00"
+            "time": "2020-09-26T10:30:38+00:00"
         },
         {
             "name": "oomphinc/composer-installers-extender",
-            "version": "v1.1.2",
+            "version": "2.0.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/oomphinc/composer-installers-extender.git",
-                "reference": "ca1c4b16b0905c81d1e77e608f36a2eff1a56f56"
+                "reference": "8d3fe38a1723e0e91076920c8bb946b1696e28ca"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/oomphinc/composer-installers-extender/zipball/ca1c4b16b0905c81d1e77e608f36a2eff1a56f56",
-                "reference": "ca1c4b16b0905c81d1e77e608f36a2eff1a56f56",
+                "url": "https://api.github.com/repos/oomphinc/composer-installers-extender/zipball/8d3fe38a1723e0e91076920c8bb946b1696e28ca",
+                "reference": "8d3fe38a1723e0e91076920c8bb946b1696e28ca",
                 "shasum": ""
             },
             "require": {
-                "composer-plugin-api": "^1.0",
-                "composer/installers": "^1.0"
+                "composer-plugin-api": "^1.1 || ^2.0",
+                "composer/installers": "^1.0",
+                "php": ">=7.1"
+            },
+            "require-dev": {
+                "composer/composer": "^2.0",
+                "phpunit/phpunit": "^7.2",
+                "squizlabs/php_codesniffer": "^3.3"
             },
             "type": "composer-plugin",
             "extra": {
@@ -10326,11 +10282,16 @@
                     "name": "Stephen Beemsterboer",
                     "email": "stephen@oomphinc.com",
                     "homepage": "https://github.com/balbuf"
+                },
+                {
+                    "name": "Nathan Dentzau",
+                    "email": "nate@oomphinc.com",
+                    "homepage": "http://oomph.is/ndentzau"
                 }
             ],
             "description": "Extend the composer/installers plugin to accept any arbitrary package type.",
             "homepage": "http://www.oomphinc.com/",
-            "time": "2017-03-31T16:57:39+00:00"
+            "time": "2020-08-11T21:06:11+00:00"
         },
         {
             "name": "pantheon-systems/quicksilver-pushback",
@@ -10404,16 +10365,16 @@
         },
         {
             "name": "pear/archive_tar",
-            "version": "1.4.9",
+            "version": "1.4.11",
             "source": {
                 "type": "git",
                 "url": "https://github.com/pear/Archive_Tar.git",
-                "reference": "c5b00053770e1d72128252c62c2c1a12c26639f0"
+                "reference": "17d355cb7d3c4ff08e5729f29cd7660145208d9d"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/pear/Archive_Tar/zipball/c5b00053770e1d72128252c62c2c1a12c26639f0",
-                "reference": "c5b00053770e1d72128252c62c2c1a12c26639f0",
+                "url": "https://api.github.com/repos/pear/Archive_Tar/zipball/17d355cb7d3c4ff08e5729f29cd7660145208d9d",
+                "reference": "17d355cb7d3c4ff08e5729f29cd7660145208d9d",
                 "shasum": ""
             },
             "require": {
@@ -10466,7 +10427,7 @@
                 "archive",
                 "tar"
             ],
-            "time": "2019-12-04T10:17:28+00:00"
+            "time": "2020-11-19T22:10:24+00:00"
         },
         {
             "name": "pear/console_getopt",
@@ -10879,32 +10840,30 @@
         },
         {
             "name": "psy/psysh",
-            "version": "v0.9.9",
+            "version": "v0.10.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/bobthecow/psysh.git",
-                "reference": "9aaf29575bb8293206bb0420c1e1c87ff2ffa94e"
+                "reference": "a8aec1b2981ab66882a01cce36a49b6317dc3560"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/bobthecow/psysh/zipball/9aaf29575bb8293206bb0420c1e1c87ff2ffa94e",
-                "reference": "9aaf29575bb8293206bb0420c1e1c87ff2ffa94e",
+                "url": "https://api.github.com/repos/bobthecow/psysh/zipball/a8aec1b2981ab66882a01cce36a49b6317dc3560",
+                "reference": "a8aec1b2981ab66882a01cce36a49b6317dc3560",
                 "shasum": ""
             },
             "require": {
-                "dnoegel/php-xdg-base-dir": "0.1",
+                "dnoegel/php-xdg-base-dir": "0.1.*",
                 "ext-json": "*",
                 "ext-tokenizer": "*",
-                "jakub-onderka/php-console-highlighter": "0.3.*|0.4.*",
-                "nikic/php-parser": "~1.3|~2.0|~3.0|~4.0",
-                "php": ">=5.4.0",
-                "symfony/console": "~2.3.10|^2.4.2|~3.0|~4.0",
-                "symfony/var-dumper": "~2.7|~3.0|~4.0"
+                "nikic/php-parser": "~4.0|~3.0|~2.0|~1.3",
+                "php": "^8.0 || ^7.0 || ^5.5.9",
+                "symfony/console": "~5.0|~4.0|~3.0|^2.4.2|~2.3.10",
+                "symfony/var-dumper": "~5.0|~4.0|~3.0|~2.7"
             },
             "require-dev": {
                 "bamarni/composer-bin-plugin": "^1.2",
-                "hoa/console": "~2.15|~3.16",
-                "phpunit/phpunit": "~4.8.35|~5.0|~6.0|~7.0"
+                "hoa/console": "3.17.*"
             },
             "suggest": {
                 "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)",
@@ -10919,7 +10878,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-develop": "0.9.x-dev"
+                    "dev-master": "0.10.x-dev"
                 }
             },
             "autoload": {
@@ -10949,7 +10908,7 @@
                 "interactive",
                 "shell"
             ],
-            "time": "2018-10-13T15:16:03+00:00"
+            "time": "2020-05-03T19:32:03+00:00"
         },
         {
             "name": "ralouphie/getallheaders",
@@ -11029,44 +10988,6 @@
             ],
             "time": "2020-04-22T17:19:51+00:00"
         },
-        {
-            "name": "rvtraveller/qs-composer-installer",
-            "version": "1.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/rvtraveller/qs-composer-installer.git",
-                "reference": "20d6f4397e4b77599646767ad030092a60f5f92a"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/rvtraveller/qs-composer-installer/zipball/20d6f4397e4b77599646767ad030092a60f5f92a",
-                "reference": "20d6f4397e4b77599646767ad030092a60f5f92a",
-                "shasum": ""
-            },
-            "require": {
-                "composer-plugin-api": "~1.0",
-                "composer/installers": "~1.0"
-            },
-            "require-dev": {
-                "composer/composer": "~1.0@dev"
-            },
-            "type": "composer-plugin",
-            "extra": {
-                "class": "rvtraveller\\QuicksilverComposerInstaller\\QuicksilverComposerInstallerPlugin"
-            },
-            "autoload": {
-                "psr-4": {
-                    "rvtraveller\\QuicksilverComposerInstaller\\": "src"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "description": "Install Quicksilver modules for Pantheon into custom locations.",
-            "homepage": "https://github.com/rvtraveller/qs-composer-installer",
-            "time": "2017-01-27T20:40:31+00:00"
-        },
         {
             "name": "simplesamlphp/saml2",
             "version": "v3.4.5",
@@ -11269,21 +11190,21 @@
         },
         {
             "name": "stecman/symfony-console-completion",
-            "version": "0.8.0",
+            "version": "0.11.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/stecman/symfony-console-completion.git",
-                "reference": "cd738867503477e91dbe84173dfabd431c883431"
+                "reference": "a9502dab59405e275a9f264536c4e1cb61fc3518"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/stecman/symfony-console-completion/zipball/cd738867503477e91dbe84173dfabd431c883431",
-                "reference": "cd738867503477e91dbe84173dfabd431c883431",
+                "url": "https://api.github.com/repos/stecman/symfony-console-completion/zipball/a9502dab59405e275a9f264536c4e1cb61fc3518",
+                "reference": "a9502dab59405e275a9f264536c4e1cb61fc3518",
                 "shasum": ""
             },
             "require": {
                 "php": ">=5.3.2",
-                "symfony/console": "~2.3 || ~3.0 || ~4.0"
+                "symfony/console": "~2.3 || ~3.0 || ~4.0 || ~5.0"
             },
             "require-dev": {
                 "phpunit/phpunit": "~4.8.36 || ~5.7 || ~6.4"
@@ -11291,7 +11212,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "0.6.x-dev"
+                    "dev-master": "0.10.x-dev"
                 }
             },
             "autoload": {
@@ -11310,7 +11231,7 @@
                 }
             ],
             "description": "Automatic BASH completion for Symfony Console Component based applications.",
-            "time": "2018-02-10T04:28:01+00:00"
+            "time": "2019-11-24T17:03:06+00:00"
         },
         {
             "name": "symfony-cmf/routing",
@@ -11429,42 +11350,37 @@
         },
         {
             "name": "symfony/config",
-            "version": "v3.4.42",
+            "version": "v4.4.17",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/config.git",
-                "reference": "cd61db31cbd19cbe4ba9f6968f13c9076e1372ab"
+                "reference": "4da4a6b07cc7d8d7d3e29842bc9c20401d555065"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/config/zipball/cd61db31cbd19cbe4ba9f6968f13c9076e1372ab",
-                "reference": "cd61db31cbd19cbe4ba9f6968f13c9076e1372ab",
+                "url": "https://api.github.com/repos/symfony/config/zipball/4da4a6b07cc7d8d7d3e29842bc9c20401d555065",
+                "reference": "4da4a6b07cc7d8d7d3e29842bc9c20401d555065",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.5.9|>=7.0.8",
-                "symfony/filesystem": "~2.8|~3.0|~4.0",
+                "php": ">=7.1.3",
+                "symfony/filesystem": "^3.4|^4.0|^5.0",
                 "symfony/polyfill-ctype": "~1.8"
             },
             "conflict": {
-                "symfony/dependency-injection": "<3.3",
-                "symfony/finder": "<3.3"
+                "symfony/finder": "<3.4"
             },
             "require-dev": {
-                "symfony/dependency-injection": "~3.3|~4.0",
-                "symfony/event-dispatcher": "~3.3|~4.0",
-                "symfony/finder": "~3.3|~4.0",
-                "symfony/yaml": "~3.0|~4.0"
+                "symfony/event-dispatcher": "^3.4|^4.0|^5.0",
+                "symfony/finder": "^3.4|^4.0|^5.0",
+                "symfony/messenger": "^4.1|^5.0",
+                "symfony/service-contracts": "^1.1|^2",
+                "symfony/yaml": "^3.4|^4.0|^5.0"
             },
             "suggest": {
                 "symfony/yaml": "To use the yaml reference dumper"
             },
             "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.4-dev"
-                }
-            },
             "autoload": {
                 "psr-4": {
                     "Symfony\\Component\\Config\\": ""
@@ -11489,7 +11405,21 @@
             ],
             "description": "Symfony Config Component",
             "homepage": "https://symfony.com",
-            "time": "2020-05-22T10:56:48+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-11-16T11:15:53+00:00"
         },
         {
             "name": "symfony/console",
@@ -11565,27 +11495,22 @@
         },
         {
             "name": "symfony/css-selector",
-            "version": "v3.4.14",
+            "version": "v4.4.17",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/css-selector.git",
-                "reference": "edda5a6155000ff8c3a3f85ee5c421af93cca416"
+                "reference": "5e6efcb6e5d120249da366417e2517c55b50c931"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/css-selector/zipball/edda5a6155000ff8c3a3f85ee5c421af93cca416",
-                "reference": "edda5a6155000ff8c3a3f85ee5c421af93cca416",
+                "url": "https://api.github.com/repos/symfony/css-selector/zipball/5e6efcb6e5d120249da366417e2517c55b50c931",
+                "reference": "5e6efcb6e5d120249da366417e2517c55b50c931",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.5.9|>=7.0.8"
+                "php": ">=7.1.3"
             },
             "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.4-dev"
-                }
-            },
             "autoload": {
                 "psr-4": {
                     "Symfony\\Component\\CssSelector\\": ""
@@ -11599,14 +11524,14 @@
                 "MIT"
             ],
             "authors": [
-                {
-                    "name": "Jean-François Simon",
-                    "email": "jeanfrancois.simon@sensiolabs.com"
-                },
                 {
                     "name": "Fabien Potencier",
                     "email": "fabien@symfony.com"
                 },
+                {
+                    "name": "Jean-François Simon",
+                    "email": "jeanfrancois.simon@sensiolabs.com"
+                },
                 {
                     "name": "Symfony Community",
                     "homepage": "https://symfony.com/contributors"
@@ -11614,7 +11539,21 @@
             ],
             "description": "Symfony CssSelector Component",
             "homepage": "https://symfony.com",
-            "time": "2018-07-26T09:06:28+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-10-28T20:42:29+00:00"
         },
         {
             "name": "symfony/debug",
@@ -11745,25 +11684,25 @@
         },
         {
             "name": "symfony/dom-crawler",
-            "version": "v3.4.14",
+            "version": "v4.2.12",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/dom-crawler.git",
-                "reference": "452bfc854b60134438e3824b159b0d24a5892331"
+                "reference": "ba1da8fb10291714b8db153fcf7ac515e1a217bb"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/452bfc854b60134438e3824b159b0d24a5892331",
-                "reference": "452bfc854b60134438e3824b159b0d24a5892331",
+                "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/ba1da8fb10291714b8db153fcf7ac515e1a217bb",
+                "reference": "ba1da8fb10291714b8db153fcf7ac515e1a217bb",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.5.9|>=7.0.8",
+                "php": "^7.1.3",
                 "symfony/polyfill-ctype": "~1.8",
                 "symfony/polyfill-mbstring": "~1.0"
             },
             "require-dev": {
-                "symfony/css-selector": "~2.8|~3.0|~4.0"
+                "symfony/css-selector": "~3.4|~4.0"
             },
             "suggest": {
                 "symfony/css-selector": ""
@@ -11771,7 +11710,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "3.4-dev"
+                    "dev-master": "4.2-dev"
                 }
             },
             "autoload": {
@@ -11798,7 +11737,7 @@
             ],
             "description": "Symfony DomCrawler Component",
             "homepage": "https://symfony.com",
-            "time": "2018-07-26T10:03:52+00:00"
+            "time": "2019-06-13T10:57:15+00:00"
         },
         {
             "name": "symfony/event-dispatcher",
@@ -11865,28 +11804,23 @@
         },
         {
             "name": "symfony/filesystem",
-            "version": "v3.4.42",
+            "version": "v4.4.17",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/filesystem.git",
-                "reference": "0f625d0cb1e59c8c4ba61abb170125175218ff10"
+                "reference": "17b83e36a911aefa2cfe04bbf6328ec4c040c1b2"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/filesystem/zipball/0f625d0cb1e59c8c4ba61abb170125175218ff10",
-                "reference": "0f625d0cb1e59c8c4ba61abb170125175218ff10",
+                "url": "https://api.github.com/repos/symfony/filesystem/zipball/17b83e36a911aefa2cfe04bbf6328ec4c040c1b2",
+                "reference": "17b83e36a911aefa2cfe04bbf6328ec4c040c1b2",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.5.9|>=7.0.8",
+                "php": ">=7.1.3",
                 "symfony/polyfill-ctype": "~1.8"
             },
             "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.4-dev"
-                }
-            },
             "autoload": {
                 "psr-4": {
                     "Symfony\\Component\\Filesystem\\": ""
@@ -11911,31 +11845,40 @@
             ],
             "description": "Symfony Filesystem Component",
             "homepage": "https://symfony.com",
-            "time": "2020-05-30T17:48:24+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-11-11T22:20:15+00:00"
         },
         {
             "name": "symfony/finder",
-            "version": "v3.4.28",
+            "version": "v4.4.17",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/finder.git",
-                "reference": "fa5d962a71f2169dfe1cbae217fa5a2799859f6c"
+                "reference": "9f1d1d883b79a91ef320c0c6e803494e042ef36e"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/finder/zipball/fa5d962a71f2169dfe1cbae217fa5a2799859f6c",
-                "reference": "fa5d962a71f2169dfe1cbae217fa5a2799859f6c",
+                "url": "https://api.github.com/repos/symfony/finder/zipball/9f1d1d883b79a91ef320c0c6e803494e042ef36e",
+                "reference": "9f1d1d883b79a91ef320c0c6e803494e042ef36e",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.5.9|>=7.0.8"
+                "php": ">=7.1.3"
             },
             "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.4-dev"
-                }
-            },
             "autoload": {
                 "psr-4": {
                     "Symfony\\Component\\Finder\\": ""
@@ -11960,7 +11903,21 @@
             ],
             "description": "Symfony Finder Component",
             "homepage": "https://symfony.com",
-            "time": "2019-05-24T12:25:55+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-11-17T19:45:34+00:00"
         },
         {
             "name": "symfony/http-foundation",
@@ -12991,16 +12948,16 @@
         },
         {
             "name": "symfony/var-dumper",
-            "version": "v3.4.28",
+            "version": "v3.4.47",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/var-dumper.git",
-                "reference": "ca5fef348a0440411bbca0f9ec14e9a11625bd6a"
+                "reference": "0719f6cf4633a38b2c1585140998579ce23b4b7d"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/var-dumper/zipball/ca5fef348a0440411bbca0f9ec14e9a11625bd6a",
-                "reference": "ca5fef348a0440411bbca0f9ec14e9a11625bd6a",
+                "url": "https://api.github.com/repos/symfony/var-dumper/zipball/0719f6cf4633a38b2c1585140998579ce23b4b7d",
+                "reference": "0719f6cf4633a38b2c1585140998579ce23b4b7d",
                 "shasum": ""
             },
             "require": {
@@ -13020,11 +12977,6 @@
                 "ext-symfony_debug": ""
             },
             "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.4-dev"
-                }
-            },
             "autoload": {
                 "files": [
                     "Resources/functions/dump.php"
@@ -13056,7 +13008,21 @@
                 "debug",
                 "dump"
             ],
-            "time": "2019-05-01T09:52:10+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-10-24T10:57:07+00:00"
         },
         {
             "name": "symfony/yaml",
@@ -13289,18 +13255,21 @@
         },
         {
             "name": "webflo/drupal-finder",
-            "version": "1.1.0",
+            "version": "1.2.2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/webflo/drupal-finder.git",
-                "reference": "8a7886c575d6eaa67a425dceccc84e735c0b9637"
+                "reference": "c8e5dbe65caef285fec8057a4c718a0d4138d1ee"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/webflo/drupal-finder/zipball/8a7886c575d6eaa67a425dceccc84e735c0b9637",
-                "reference": "8a7886c575d6eaa67a425dceccc84e735c0b9637",
+                "url": "https://api.github.com/repos/webflo/drupal-finder/zipball/c8e5dbe65caef285fec8057a4c718a0d4138d1ee",
+                "reference": "c8e5dbe65caef285fec8057a4c718a0d4138d1ee",
                 "shasum": ""
             },
+            "require": {
+                "ext-json": "*"
+            },
             "require-dev": {
                 "mikey179/vfsstream": "^1.6",
                 "phpunit/phpunit": "^4.8"
@@ -13313,7 +13282,7 @@
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "GPL-2.0+"
+                "GPL-2.0-or-later"
             ],
             "authors": [
                 {
@@ -13322,7 +13291,7 @@
                 }
             ],
             "description": "Helper class to locate a Drupal installation from a given path.",
-            "time": "2017-10-24T08:12:11+00:00"
+            "time": "2020-10-27T09:42:17+00:00"
         },
         {
             "name": "webmozart/assert",
@@ -13462,49 +13431,6 @@
                 "apr1"
             ],
             "time": "2015-02-11T11:06:42+00:00"
-        },
-        {
-            "name": "zaporylie/composer-drupal-optimizations",
-            "version": "1.1.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/zaporylie/composer-drupal-optimizations.git",
-                "reference": "173c198fd7c9aefa5e5b68cd755ee63eb0abf7e8"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/zaporylie/composer-drupal-optimizations/zipball/173c198fd7c9aefa5e5b68cd755ee63eb0abf7e8",
-                "reference": "173c198fd7c9aefa5e5b68cd755ee63eb0abf7e8",
-                "shasum": ""
-            },
-            "require": {
-                "composer-plugin-api": "^1.1"
-            },
-            "require-dev": {
-                "composer/composer": "^1.6",
-                "phpunit/phpunit": "^6"
-            },
-            "type": "composer-plugin",
-            "extra": {
-                "class": "zaporylie\\ComposerDrupalOptimizations\\Plugin"
-            },
-            "autoload": {
-                "psr-4": {
-                    "zaporylie\\ComposerDrupalOptimizations\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "GPL-2.0-or-later"
-            ],
-            "authors": [
-                {
-                    "name": "Jakub Piasecki",
-                    "email": "jakub@piaseccy.pl"
-                }
-            ],
-            "description": "Composer plugin to improve composer performance for Drupal projects",
-            "time": "2019-02-20T10:00:17+00:00"
         }
     ],
     "packages-dev": [],
@@ -13519,5 +13445,6 @@
     "platform-dev": [],
     "platform-overrides": {
         "php": "7.3"
-    }
+    },
+    "plugin-api-version": "1.1.0"
 }
diff --git a/console/language/console-en/.gitignore b/console/language/console-en/.gitignore
deleted file mode 100644
index e336886a96f9887667aec1ca1334b577f5992d8c..0000000000000000000000000000000000000000
--- a/console/language/console-en/.gitignore
+++ /dev/null
@@ -1,35 +0,0 @@
-# deprecation-detector
-/.rules
-
-# Composer
-/vendor
-/bin/phpunit
-/bin/jsonlint
-/bin/phpcbf
-/bin/phpcs
-/bin/validate-json
-/bin/pdepend
-/bin/php-cs-fixer
-/bin/phpmd
-PATCHES.txt
-
-# Develop
-autoload.local.php
-
-# Binaries
-/box.phar
-/console.phar
-/drupal.phar
-/drupal.phar.version
-
-# Test
-/phpunit.xml
-
-# Drupal
-/core
-/nbproject/
-
-# Splitsh
-/config/
-/PATCHES.txt
-
diff --git a/console/language/console-en/README.md b/console/language/console-en/README.md
deleted file mode 100644
index 4e0ddb433dca7b7ea574e4d1bba2b51a757e343b..0000000000000000000000000000000000000000
--- a/console/language/console-en/README.md
+++ /dev/null
@@ -1,41 +0,0 @@
-# drupal-console-en
-
-## Usage
-
-Drupal Console project it's installed per each Drupal 8 website with English language by default.
-
-To install Drupal Console package in other languages check the packages available at [https://packagist.org](https://packagist.org)
-
-
-### Install Drupal Console
-
-To install the appropriate version of Drupal Console project for your drupal installation, run the following composer command
-
-```
-$ composer require drupal/console:~1.0 --prefer-dist --optimize-autoloader
-```
-
-### Install Drupal Console launcher
-
-Drupal Console launcher was created to avoid conflicts between major and minor releases. Drupal Console binary commands are available to every Drupal 8 instance on the machine.
- 
-To install Drupal Console launcher globally follow the instruction below. 
-
-```
-$ curl https://drupalconsole.com/installer -L -o drupal.phar
-# Or 
-$ php -r "readfile('https://drupalconsole.com/installer');" > drupal.phar
-
-$mv drupal.phar /usr/local/bin/drupal
-$ chmod +x /usr/local/bin/drupal
-```
-
-### Contribute
-
-Follow these steps to contribute to the current translation:
-
-- [Project requirements](https://docs.drupalconsole.com/en/contributing/project-requirements.html)
-- [Getting the project](https://docs.drupalconsole.com/en/contributing/getting-the-project.html)
-- [Running the project](https://docs.drupalconsole.com/en/contributing/running-the-project.html)
-
-N.B: Push your changes to your forked repository in order to create PR per day to avoid any conflicts with other contributors.
diff --git a/console/language/console-en/composer.json b/console/language/console-en/composer.json
deleted file mode 100644
index 05abf44884fc146d9bbb1d4a0652412ae6b6141b..0000000000000000000000000000000000000000
--- a/console/language/console-en/composer.json
+++ /dev/null
@@ -1,38 +0,0 @@
-{
-    "name": "drupal/console-en",
-    "description": "Drupal Console English Language",
-    "keywords": ["Drupal", "Console", "Development", "Symfony"],
-    "homepage": "http://drupalconsole.com/",
-    "type": "drupal-console-language",
-    "license": "GPL-2.0-or-later",
-    "authors": [
-        {
-            "name":      "David Flores",
-            "email":     "dmousex@gmail.com",
-            "homepage":  "http://dmouse.net"
-        },
-        {
-            "name":      "Jesus Manuel Olivas",
-            "email":     "jesus.olivas@gmail.com",
-            "homepage":  "http://jmolivas.com"
-        },
-        {
-            "name":      "Eduardo Garcia",
-            "email":     "enzo@enzolutions.com",
-            "homepage":  "http://enzolutions.com/"
-        },
-        {
-            "name":      "Omar Aguirre",
-            "email":     "omersguchigu@gmail.com"
-        },
-        {
-            "name":      "Drupal Console Contributors",
-            "homepage":  "https://github.com/hechoendrupal/DrupalConsole/graphs/contributors"
-        }
-    ],
-    "support": {
-        "issues": "https://github.com/hechoendrupal/DrupalConsole/issues",
-        "forum": "https://gitter.im/hechoendrupal/DrupalConsole",
-        "docs": "https://docs.drupalconsole.com"
-    }
-}
diff --git a/console/language/console-en/translations/about.yml b/console/language/console-en/translations/about.yml
deleted file mode 100644
index a23c1a418b0393056b9eb8673b7207e87e7c6c06..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/about.yml
+++ /dev/null
@@ -1,13 +0,0 @@
-description: 'Displays basic information about Drupal Console project'
-messages:
-    welcome: 'The Drupal Console is a suite of tools that you run on the CLI to:'
-    welcome-feature-generate: 'Generate boilerplate code.'
-    welcome-feature-interact: 'Interact with a Drupal 8 installation.'
-    welcome-feature-learn: 'Learn Drupal 8.'
-    links: 'Project links'
-    landing: 'Landing page - "%s"'
-    change-log: 'Change log at - "%s"'
-    documentation: 'Documentation at - "%s"'
-    support: 'Support chat room - "%s"'
-    supporting-organizations: 'Supporting organizations'
-    version-supported: 'Drupal supported version <info>"%s"</info>'
diff --git a/console/language/console-en/translations/application.yml b/console/language/console-en/translations/application.yml
deleted file mode 100644
index cf197981131ce3b32716eb6989baf3891615a134..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/application.yml
+++ /dev/null
@@ -1,93 +0,0 @@
-options:
-    env: 'The Environment name'
-    debug: 'Switches on debug mode'
-    learning: 'Generate a verbose code output'
-    generate-chain: 'Shows command options and arguments as yaml output to be used in chain command'
-    generate-inline: 'Shows command options and arguments as inline command'
-    generate-doc: 'Shows command options and arguments as markdown'
-    root: 'Define the Drupal root to be used in command execution'
-    uri: 'URI of the Drupal site to use (for multi-site environments or when running on an alternate port)'
-    yes: 'Skip confirmation and proceed'
-    target: 'Site name you want to interact with (for local or remote sites)'
-    help: 'Display this help message'
-    quiet: 'Suppress all output from the command'
-    verbose: 'Increase the verbosity of messages: 1 for normal output, 2 for more verbose output, and 3 for debug'
-    version: 'Display this application version'
-    ansi: 'Force ANSI output'
-    no-ansi: 'Disable ANSI output'
-    no-interaction: 'Do not ask any interactive question'
-    check-fix: 'Attempt to fix any missing configuration.'
-arguments:
-    command: 'The command to execute'
-messages:
-    completed: 'The command was executed successfully!'
-    chain:
-        generated: 'Yaml representation of this command, usage copy in i.e. `~/.console/chain/sample.yml` to execute using `chain` command, make sure your yaml file start with a `commands` root key:'
-    inline:
-        generated: 'Inline representation of this command:'
-    generated: 'You can now start using the generated code!'
-    files:
-        generated: 'Generated or updated files'
-        copied: 'Copied files'
-    lines-code: 'Generated lines: "%s"'
-    path: 'Generation path'
-    learning:
-        route: "In order to to create pages it is necessary to define routes for them.\nA route maps a URL path to a controller. It defines what function\nor method will be called when a URL is accessed.\nIf the user accesses http://drupal8.dev/{{ route.path }}, the routing\nsystem will look for a route with that path. In this case it will find a\nmatch, and execute the _controller callback. In this case the callback is\ndefined as a classname\n(\"\\Drupal\\{{ module }}\\Controller\\{{ class_name }}\")\nand a method (\"{{ route.method }}\")."
-    autocomplete: |
-                Bash: Bash support depends on the http://bash-completion.alioth.debian.org/
-                project which can be installed with your package manager of choice. Then add
-                this line to your shell configuration file.
-                <info>source "$HOME/.console/console.rc" 2>/dev/null</info>
-
-                Bash or Zsh: Add this line to your shell configuration file:
-                <info>source "$HOME/.console/console.rc" 2>/dev/null</info>
-
-                Fish: Create a symbolic link
-                <info>ln -s ~/.console/drupal.fish ~/.config/fish/completions/drupal.fish</info>
-    version: '<info>"%s"</info> version <comment>"%s"</comment>'
-    disable:
-      command:
-        error: 'Command: "%s" is deprecated.'
-        extra: 'You must execute: "%s" instead'
-errors:
-    invalid-command: 'Command "%s", is not a valid command name.'
-    renamed-command: 'Command "%s" was renamed, use "%s" instead.'
-    drush-command: 'Command "%s" is a Drush command (deprecated). Drupal Console equivalent "%s" was executed instead.'
-site:
-    messages:
-        path: 'Site path'
-    errors:
-        settings: 'In order to list all of the available commands you should install drupal first.'
-        directory: 'In order to list all of the available commands, you should run this against a drupal root directory.'
-        not-installed: 'Drupal Console is not installed at: "%s"'
-        execute-composer: 'You must execute the following composer commands:'
-        missing-config-file: 'Missing configuration file, possible paths:'
-        missing-config-file-command: 'Execute "drupal init" command to generate one'
-user:
-    messages:
-        path: 'User home path'
-
-remote:
-  errors:
-    passphrase-missing: 'Passphrase file is missing'
-    passphrase-empty: 'Passphrase file is empty'
-    private-missing: 'Private file is missing'
-    private-empty: 'Private file is empty'
-    private-invalid: 'Private file is invalid'
-    invalid-root: 'Invalid root directory'
-    console-not-found: 'Drupal Console not found on this site'
-
-gitbook:
-  messages:
-    title: 'Available Drupal Console Commands'
-    note: 'Note'
-    note-description: 'Drupal Console commands *must* be run from the root of a Drupal 8 installation'
-    command: 'Drupal Console Command'
-    command_description: 'The **"%s"** command "%s"'
-    usage: 'Usage'
-    options: 'Available options'
-    option: 'Option'
-    details: 'Details'
-    arguments: 'Available arguments'
-    argument: 'Argument'
-    examples: 'Examples'
diff --git a/console/language/console-en/translations/cache.rebuild.yml b/console/language/console-en/translations/cache.rebuild.yml
deleted file mode 100644
index 3e1b5ff1d4eb5efa689d8c7a0fb376963873b2f6..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/cache.rebuild.yml
+++ /dev/null
@@ -1,15 +0,0 @@
-description: 'Rebuild and clear all site caches.'
-options:
-    cache: 'Only clear a specific cache.'
-messages:
-    welcome: 'Welcome to the cache:rebuild command'
-    rebuild: 'Rebuilding cache(s), wait a moment please.'
-    completed: 'Done clearing cache(s).'
-    invalid-cache: 'Cache "%s" is invalid.'
-questions:
-    cache: 'Select cache.'
-examples:
-    - description: Rebuild all caches
-      execution: drupal cr all
-    - description: Rebuild discovery cache
-      execution: drupal cr discovery
diff --git a/console/language/console-en/translations/cache.tag.invalidate.yml b/console/language/console-en/translations/cache.tag.invalidate.yml
deleted file mode 100644
index dbe22a2468d588d0d37ea886f4b5366cc6073640..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/cache.tag.invalidate.yml
+++ /dev/null
@@ -1,11 +0,0 @@
-description: 'Invalidate cache tags.'
-options:
-    tag: 'One or more tags to invalidate.'
-messages:
-    start: 'Invalidating tag(s) "%s".'
-    completed: 'Done invalidating tag(s).'
-examples:
-    - description: Invalidate routes
-      execution: drupal cti routes
-    - description: Invalidate a specific node
-      execution: drupal cti node:1 node_list
diff --git a/console/language/console-en/translations/chain.yml b/console/language/console-en/translations/chain.yml
deleted file mode 100644
index f292475a4b534984e175a34b6ed0d42340c8882c..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/chain.yml
+++ /dev/null
@@ -1,25 +0,0 @@
-description: 'Chain command execution'
-options:
-    file: 'User defined file containing commands to get executed.'
-questions:
-    chain-file: 'Select chain file to execute'
-messages:
-    missing-file: 'You must provide a valid file path and name.'
-    invalid-file: 'The file "%s" does not exist.'
-    module-install: 'module:install command is not runnable inside a chain queue and must be run independently.'
-    missing-environment-placeholders: 'Missing environment placeholder(s) "%s"'
-    set-environment-placeholders: 'Set environment placeholders as:'
-    missing-inline-placeholders: 'Missing inline placeholder(s) "%s"'
-    set-inline-placeholders: 'Pass inline placeholders as:'
-    select-value-for-placeholder: 'Select value for "%s" placeholder'
-    enter-value-for-placeholder: 'Enter value for "%s" placeholder'
-    legacy-inline: 'Update inline legacy placeholders from %{{name}} to {{name}}.'
-    legacy-environment: 'Update environment legacy placeholders from ${{(NAME}} or %env(NAME)% to {{env("NAME")}}.'
-    metadata-registration: |
-      You should register your chain file as command by providing metadata, more info at:
-         https://docs.drupalconsole.com/en/chains/registering.html
-examples:
-    - description: 'Providing a file option using full path. (DEPRECATED'
-      execution: |
-        drupal chain \
-          --file="/path/to/file/chain-file.yml"
diff --git a/console/language/console-en/translations/check.yml b/console/language/console-en/translations/check.yml
deleted file mode 100644
index b98c5bc52e5f5cfe940224636ea0c12aaf10f39a..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/check.yml
+++ /dev/null
@@ -1,9 +0,0 @@
-description: 'System requirement checker'
-messages:
-  file: 'Checking requirements using file at:'
-  php-invalid: 'The current installed version "%s" is invalid, it requires "%s" or higher'
-  configuration-missing: 'The configuration "%s" is missing.'
-  configuration-overwritten: 'The PHP-Configuration (php.ini) "%s" was missing and overwritten with "%s".'
-  extension-missing: 'The extension "%s" is missing.'
-  extension-recommended: 'The extension "%s" is recommended to install.'
-  success: 'Checks passed.'
diff --git a/console/language/console-en/translations/common.yml b/console/language/console-en/translations/common.yml
deleted file mode 100644
index abc9c4c1c698fb6b6beed2232d1fbc7ffdcbe8b8..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/common.yml
+++ /dev/null
@@ -1,57 +0,0 @@
-options:
-    class: 'Class name'
-    events: 'Load events from the container'
-    module: 'The Module name.'
-    extension: 'The extension name.'
-    extension-type: 'The extension type.'
-    services: 'Load services from the container.'
-    tags: 'Set service tags from the container.'
-    inputs: 'Create inputs in a form.'
-    permissions: 'Create permissions.'
-questions:
-    class: 'Enter the Class name'
-    module: 'Enter the module name'
-    extension: 'Enter the extension name'
-    extension-type: 'Enter the extension type'
-    confirm: 'Do you want proceed with the operation?'
-    canceled: 'The operation was cancelled.'
-    events:
-        message: "\nType the event name or use keyup or keydown.\nThis is optional, press <info>enter</info> to <info>continue</info>\n"
-        name: 'Enter event name'
-    services:
-        confirm: 'Do you want to load services from the container?'
-        message: "\nType the service name or use keyup or keydown.\nThis is optional, press <info>enter</info> to <info>continue</info>\n"
-        name: 'Enter your service'
-    roles:
-        message: "\nType the role name or use keyup or keydown.\nThis is optional, press <info>enter</info> to <info>continue</info>\n"
-        name: 'Enter your role'
-    inputs:
-        confirm: 'Do you want to generate a form structure?'
-        label: 'Input label'
-        machine-name: 'Input machine name'
-        permission: 'Do you want to generate permissions?'
-        type: 'New field type (press <return> to stop adding fields)'
-        invalid: 'Field Type "%s" is invalid.'
-        description: Description
-        default-value:
-            default-value: 'Default value'
-            checkboxes: 'Default value(s) separated by commas'
-        weight: 'Weight for input item'
-        title: 'Title'
-        fieldset: 'Fieldset'
-        new-field: 'Enter a new field properties'
-errors:
-    module-dependency: 'Missing module dependency "%s" is not installed. Try module:install to install it.'
-    class-name-empty: 'The Class name can not be empty'
-    invalid-file-path: 'You must provide a valid file path'
-    module-exist: 'Module "%s" already exist.'
-    machine-name-duplicated: 'Machine name "%s" is duplicated.'
-status:
-    enabled: Enabled
-    disabled: Disabled
-messages:
-    canceled: 'The generation was cancelled'
-    drupal-core: 'Drupal Core'
-    move-phar: 'Accessing console from anywhere on your system'
-    quick-start: 'Download, install and serve Drupal 8'
-    available-field-types: 'Available types: <comment>%s</comment>'
diff --git a/console/language/console-en/translations/complete.yml b/console/language/console-en/translations/complete.yml
deleted file mode 100644
index f36c530184237ee6c3294441ef35622c2b21d87e..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/complete.yml
+++ /dev/null
@@ -1 +0,0 @@
-description: 'Shell completion command list'
diff --git a/console/language/console-en/translations/composerize.yml b/console/language/console-en/translations/composerize.yml
deleted file mode 100644
index babb4c1085e366dde7089e4c0d2bfc3b949e7561..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/composerize.yml
+++ /dev/null
@@ -1,14 +0,0 @@
-description: 'Converts Drupal codebase to composer.'
-options:
-  show-packages: 'Show list of packages.'
-  include-version: 'Include version on suggested result command.'
-messages:
-  name: 'Name'
-  version: 'Version'
-  dependencies: 'Dependencies'
-  profile: 'Profile(s) detected'
-  module: 'Module(s) detected'
-  theme: 'Theme(s) detected'
-  from: 'From your project root:'
-  execute: 'Execute this command:'
-  ignore: 'To ignore third party libraries, profiles, modules and themes add to your .gitignore file:'
diff --git a/console/language/console-en/translations/config.delete.yml b/console/language/console-en/translations/config.delete.yml
deleted file mode 100644
index 08e4e37749f17b3f45e0bffaa2c486a886018865..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/config.delete.yml
+++ /dev/null
@@ -1,20 +0,0 @@
-description: 'Delete configuration'
-arguments:
-    type: 'Configuration type.'
-    name: 'Configuration name.'
-messages:
-    all: 'All configuration sucessfully deleted.'
-    deleted: 'Configuration "%s" sucessfully deleted.'
-errors:
-    config-storage: 'Configuration type would not be loaded.'
-    name: 'Configuration name must contain a value.'
-    type: 'Configuration type is missing.'
-    not-exists: 'The configuration "%s" does not exist.'
-warnings:
-    undo: 'This action will delete all configuration permanently.'
-questions:
-    sure: 'Are you sure to delete all configuration'
-examples:
-    - description: 'Provide a config type and a config name'
-      execution: drupal config:delete active all
-
diff --git a/console/language/console-en/translations/config.diff.yml b/console/language/console-en/translations/config.diff.yml
deleted file mode 100644
index 7b3b81ff7c8e0cc00d078efd53978b2966d4d545..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/config.diff.yml
+++ /dev/null
@@ -1,18 +0,0 @@
-description: 'Output configuration items that are different in active configuration compared with a directory.'
-arguments:
-    directory: 'The directory to diff against. If omitted, choose from Drupal config directories.'
-options:
-    reverse: 'See the changes in reverse (i.e diff a directory to the active configuration).'
-questions:
-    directories: 'Config directory:'
-table:
-    headers:
-      collection: 'Collection'
-      config-name: 'Configuration item'
-      operation: 'Operation'
-messages:
-    no-changes: 'There are no changes.'
-examples:
-    - description: 'Provide a config directory'
-      execution: drupal config:diff ../config/path
-
diff --git a/console/language/console-en/translations/config.edit.yml b/console/language/console-en/translations/config.edit.yml
deleted file mode 100644
index 282e4f27881fb1edc038654a8fba2c2c92370d1d..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/config.edit.yml
+++ /dev/null
@@ -1,15 +0,0 @@
-description: 'Change a configuration object with a text editor.'
-arguments:
-    config-name: 'Configuration object name, for example "user.settings".'
-    editor: 'Editor, for example "vim" or "gedit".'
-questions:
-    config-name: 'Choose a configuration Object'
-messages:
-    no-directory: 'An error occurred while creating your directory at: "%s"'
-    choose-configuration: 'Choose a configuration'
-examples:
-    - description: 'Edit system cron configurations with "vim" (default editor).'
-      execution: 'drupal config:edit system.cron'
-    - description: 'Edit system cron configurations with "gedit".'
-      execution: 'drupal config:edit system.cron gedit'
-
diff --git a/console/language/console-en/translations/config.export.content.type.yml b/console/language/console-en/translations/config.export.content.type.yml
deleted file mode 100644
index 488f2f961d5a94e9264db8735923ae1b26308039..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/config.export.content.type.yml
+++ /dev/null
@@ -1,23 +0,0 @@
-description: 'Export a specific content type and their fields.'
-arguments:
-    content-type: 'Content Type to be exported'
-questions:
-    content-type: 'Content Type to be exported'
-    optional-config: 'Export content type in module as an optional configuration'
-messages:
-    content-type-exported: 'Exporting content type'
-options:
-    optional-config: 'Export content type as an optional YAML configuration in your module'
-    remove-uuid: 'If set, the configuration will be exported without uuid key.'
-    remove-config-hash: 'If set, the configuration will be exported without the default site hash key.'
-examples:
-    - description: 'Provide a content type  and module name'
-      execution: |
-        drupal config:export:content:type page \
-          --module="demo"
-    - description: 'If you want export content type provide the optional config'
-      execution: |
-        drupal config:export:content:type page \
-          --module="demo" \
-          --optional-config 
-
diff --git a/console/language/console-en/translations/config.export.single.yml b/console/language/console-en/translations/config.export.single.yml
deleted file mode 100644
index 102cffe072fbd82b764b1873b02b2fbd02b2a1e5..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/config.export.single.yml
+++ /dev/null
@@ -1,32 +0,0 @@
-description: 'Export a single configuration or a list of configurations as yml file(s).'
-arguments:
-    name: 'Configuration name.'
-options:
-    include-dependencies: 'Export dependencies of the configuration as well.'
-    simple-configuration: 'Simple configuration'
-    optional: 'Export config as an optional YAML configuration in your module'
-    remove-uuid: 'If set, the configuration will be exported without uuid key.'
-    remove-config-hash: 'If set, the configuration will be exported without the default site hash key.'
-questions:
-    config-type: 'Configuration type'
-    name: 'Configuration name'
-    optional: 'Export config in module as an optional configuration'
-    remove-uuid: 'Do you want to remove the uuid from this export?'
-    remove-config-hash: 'Do you want to remove the default site hash from this export?'
-messages:
-    config-not-found: 'Configuration name not found.'
-    export: 'Configuration was exported at file "%s".'
-    invalid-config-type: 'Invalid config type, please select one of the list'
-    invalid-config-name: 'Invalid config name, please select one of the list'
-    config-exported: 'Configuration(s) exported successfully'
-examples:
-    - description: 'Provide config settings name to be exported'
-      execution: |
-        drupal config:export:single \
-          --name=config.settings.name
-    - description: 'if uuid and/or config hashes will be removed.'
-      execution: |
-        drupal config:export:single \
-          --name=config.settings.name \
-          --remove-uuid \
-          --remove-config-hash
diff --git a/console/language/console-en/translations/config.export.view.yml b/console/language/console-en/translations/config.export.view.yml
deleted file mode 100644
index ede70183372ae904d6742bfc516f18967130d829..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/config.export.view.yml
+++ /dev/null
@@ -1,23 +0,0 @@
-description: 'Export a view in YAML format inside a provided module to reuse in other website.'
-messages:
-    view_exported: 'View exported sucessfully'
-    depencies-included: 'The following module dependencies were included at "%s"'
-questions:
-    view: 'View to be exported'
-    optional-config: 'Export view in module as an optional configuration'
-    include-module-dependencies: 'Include view module dependencies in module info YAML file'
-arguments:
-    view-id: 'View ID'
-options:
-    optional-config: 'Export view as an optional YAML configuration in your module'
-    include-module-dependencies: 'Include module dependencies in module info YAML file'
-examples:
-    - description: 'Provide a view id'
-      execution: drupal config:export:view viewid
-    - description: 'You can provide the interactive values like parameter.'
-      execution: |
-        drupal config:export:view viewid \
-          --module="modulename" \
-          --optional-config \
-          --include-module-dependencies
-
diff --git a/console/language/console-en/translations/config.export.yml b/console/language/console-en/translations/config.export.yml
deleted file mode 100644
index 66f83289da533949fdde93b7984020c6e4b0aa42..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/config.export.yml
+++ /dev/null
@@ -1,22 +0,0 @@
-description: 'Export current application configuration.'
-options:
-    directory: 'Define the export directory to save the configuration output.'
-    tar: 'If set, the configuration will be exported to an archive file.'
-    remove-uuid: 'If set, the configuration will be exported without uuid key.'
-    remove-config-hash: 'If set, the configuration will be exported without the default site hash key.'
-messages:
-    directory: 'The configuration was exported at "%s"'
-    error: 'An error occurred while creating your directory at "%s"'
-examples:
-    - description: 'Optional you can add the path to export'
-      execution: |
-        drupal config:export  \
-          --directory="path/to/export"
-    - description: 'If export will be in a compressed file and/or if uuid and config hashes will be removed.'
-      execution: |
-        drupal config:export  \
-          --directory="path/to/export" \
-          --tar \
-          --remove-uuid \
-          --remove-config-hash
-
diff --git a/console/language/console-en/translations/config.import.single.yml b/console/language/console-en/translations/config.import.single.yml
deleted file mode 100644
index 02e9569fe211d85ce9e64b04b893f0aa592ba635..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/config.import.single.yml
+++ /dev/null
@@ -1,21 +0,0 @@
-description: 'Import a single configuration or a list of configurations.'
-options:
-    file: 'The file(s) name or file(s) absolute path to import'
-    directory: 'The path from where to import file(s).'
-questions:
-    file: 'Enter file name or file absolute path to import'
-    directory: 'Enter path from where to import files.'
-messages:
-    missing-file: 'File option is missing.'
-    empty-value: 'Value can not be empty'
-    success: 'Configuration(s) "%s", has been imported successfully.'
-examples:
-    - description: 'Providing a file option using full path.'
-      execution: |
-        drupal config:import:single \
-          --file="/path/to/file/block.block.default_block.yml"
-    - description: 'Providing file and directory options'
-      execution: |
-        drupal config:import:single  \
-          --file="block.block.default_block.yml" \
-          --directory="/path/to/directory"
diff --git a/console/language/console-en/translations/config.import.yml b/console/language/console-en/translations/config.import.yml
deleted file mode 100644
index 30e1a8848b0ee34c966be0aa8e422e94564acd58..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/config.import.yml
+++ /dev/null
@@ -1,21 +0,0 @@
-description: 'Import configuration to current application.'
-options:
-    file: 'Path to an archive file of configuration to import.'
-    directory: 'Path to a directory of configuration to import.'
-    remove-files: 'Remove files after synchronization.'
-messages:
-    config_files_imported: 'List of config files.'
-    imported: 'Configuration imported successfully.'
-    importing: 'Importing configuration.'
-    already-imported: 'Another request may be synchronizing configuration already.'
-    nothing-to-do: 'There are no changes to import.'
-examples:
-    - description: 'Provide a configuration file'
-      execution: |
-        drupal config:import \
-          --file=/path/to/config/file
-    - description: 'Provide a configuration directory'
-      execution: |
-        drupal config:import  \
-          --directory=/path/to/config/dir
-
diff --git a/console/language/console-en/translations/config.override.yml b/console/language/console-en/translations/config.override.yml
deleted file mode 100644
index 94d0e37d5f45aa3057eec4ee1dc5509561f016f1..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/config.override.yml
+++ /dev/null
@@ -1,19 +0,0 @@
-description: 'Override config value in active configuration.'
-questions:
-    name: 'Enter configuration name'
-    key: 'Enter the configuration key'
-    value: 'Enter the configuration value'
-arguments:
-    name: 'Configuration name'
-    key: 'Key'
-    value: 'Value'
-messages:
-    configuration: 'Configuration name'
-    configuration-key: 'Configuration key'
-    original: 'Original Value'
-    updated: 'Override Value'
-    invalid-name: 'Config object "%s" does not exist.'
-examples:
-    - description: 'Set the Contact module flood limit to 10.'
-      execution: 'drupal config:override contact.settings flood.limit 10'
-
diff --git a/console/language/console-en/translations/config.validate.yml b/console/language/console-en/translations/config.validate.yml
deleted file mode 100644
index b34ac21bea9647db65b074aef6d614dd0dac2316..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/config.validate.yml
+++ /dev/null
@@ -1,10 +0,0 @@
-description: 'Validate a drupal config against its schema'
-options: {}
-arguments: {}
-messages:
-    success: 'Config was successfully validated'
-    no-conf: 'Config with this name does not exist'
-examples:
-    - description: 'Provide the configuration name.'
-      execution: 'drupal config:validate configuration.name'
-
diff --git a/console/language/console-en/translations/create.comments.yml b/console/language/console-en/translations/create.comments.yml
deleted file mode 100644
index f3a7a6539c9c2058e1f5d76b935138aa1acbb4be..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/create.comments.yml
+++ /dev/null
@@ -1,41 +0,0 @@
-description: 'Create dummy comments for your Drupal 8 application.'
-help: 'The <info>create:comments</info> command helps you create dummy comments.'
-welcome: 'Welcome to the Drupal comments generator'
-arguments:
-  node-id: 'Node ID where the comments will be created'
-options:
-    limit: 'How many comments would you like to create'
-    title-words: 'Maximum number of words in comment titles'
-    time-range: 'How far back in time should the comments be dated'
-questions:
-    node-id: 'Node ID where the comments will be created'
-    content-type: 'Select content type(s) to be used on comment creation'
-    limit: 'Enter how many comments would you like to generate'
-    title-words: 'Enter the maximum number of words in titles'
-    time-range: 'How far back in time should the comments be dated?'
-    time-ranges:
-        - 'Now'
-        - '1 hour ago'
-        - '1 day ago'
-        - '1 week ago'
-        - '1 month ago'
-        - '1 year ago'
-messages:
-    node-id: 'Node Id'
-    comment-id: 'Comment Id'
-    content-type: 'Content type'
-    title: 'Title'
-    created: 'Created Time'
-    invalid-content-types: 'Content types "%s" are invalid'
-    created-comments: 'Created "%s" comments successfully'
-    error: 'Error creating comments: "%s"'
-examples:
-    - description: 'Provide the node id where the comments will be generated.'
-      execution: drupal create:comments  node-id
-    - description: 'Provide number of comments to generate, max title words and time range.'
-      execution: |
-        drupal create:comments  node-id \
-          --limit="2" \
-          --title-words="5" \
-          --time-range="1"
-
diff --git a/console/language/console-en/translations/create.nodes.yml b/console/language/console-en/translations/create.nodes.yml
deleted file mode 100644
index 34cdc2666d5258d1c32cd26a4a3253810fd9c2f9..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/create.nodes.yml
+++ /dev/null
@@ -1,40 +0,0 @@
-description: 'Create dummy nodes for your Drupal 8 application.'
-help: 'The <info>create:nodes</info> command helps you create dummy nodes.'
-welcome: 'Welcome to the Drupal nodes generator'
-arguments:
-  content-types: 'Content type(s) to be used in node creation'
-options:
-    limit: 'How many nodes would you like to create'
-    title-words: 'Maximum number of words in node titles'
-    time-range: 'How far back in time should the nodes be dated'
-questions:
-    content-type: 'Select content type(s) to be used on node creation'
-    limit: 'Enter how many nodes would you like to generate'
-    title-words: 'Enter the maximum number of words in titles'
-    time-range: 'How far back in time should the nodes be dated?'
-    time-ranges:
-        - 'Now'
-        - '1 hour ago'
-        - '1 day ago'
-        - '1 week ago'
-        - '1 month ago'
-        - '1 year ago'
-messages:
-    node-id: 'Node Id'
-    content-type: 'Content type'
-    title: 'Title'
-    created: 'Created Time'
-    invalid-content-types: 'Content types "%s" are invalid'
-    created-nodes: 'Created "%s" nodes successfully'
-    error: 'Error creating nodes: "%s"'
-examples:
-    - description: 'Provide the content type name.'
-      execution: drupal create:nodes content-name
-    - description: 'Provide the limit of publications, limit of title words, time range and language.'
-      execution: |
-        drupal create:nodes content-name \
-          --limit="5" \
-          --title-words="5" \
-          --time-range="1" \
-          --language="und"
-
diff --git a/console/language/console-en/translations/create.roles.yml b/console/language/console-en/translations/create.roles.yml
deleted file mode 100644
index 7584c5d9e492aa6d8d8f1f0ea7d9bd14578b235b..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/create.roles.yml
+++ /dev/null
@@ -1,19 +0,0 @@
-description: 'Create dummy roles for your Drupal 8 application.'
-help: 'The <info>create:roles</info> command helps you create dummy roles.'
-welcome: 'Welcome to the Drupal roles generator'
-options:
-    limit: 'How many roles would you like to create'
-questions:
-    limit: 'Enter how many roles would you like to create'
-messages:
-    role-id: 'Role Id'
-    role-name: 'Rolename'
-    created-roles: 'Created "%s" roles successfully'
-    error: 'Error creating roles: "%s"'
-examples:
-    - description: 'Provide roles.'
-      execution: drupal create:roles
-    - description: 'Provide the number of roles to create'
-      execution: |
-        drupal create:roles
-
diff --git a/console/language/console-en/translations/create.terms.yml b/console/language/console-en/translations/create.terms.yml
deleted file mode 100644
index be26f06cc34b94533e790e311524c44537301bd3..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/create.terms.yml
+++ /dev/null
@@ -1,28 +0,0 @@
-description: 'Create dummy terms for your Drupal 8 application.'
-help: 'The <info>create:terms</info> command helps you create dummy terms.'
-welcome: 'Welcome to the Drupal terms creator'
-arguments:
-  vocabularies: 'Vocabulary(s) to be used in terms creation'
-options:
-    limit: 'How many terms would you like to create'
-    name-words: 'Maximum number of words in term names'
-questions:
-    vocabularies: 'Select vocabulary(s) to be used on terms creation'
-    limit: 'Enter how many terms would you like to create'
-    name-words: 'Enter the maximum number of words in term names'
-messages:
-    term-id: 'Term Id'
-    vocabulary: 'Vocabulary'
-    name: 'Name'
-    invalid-vocabularies: 'Vocabulary(s) "%s" are invalid'
-    created-terms: 'Created "%s" terms successfully'
-    error: 'Error creating terms: "%s"'
-examples:
-    - description: 'Provide the vocabulary term name.'
-      execution: drupal create:terms vocabulary
-    - description: 'Provide the limit of terms to add and limit of title words.'
-      execution: |
-        drupal create:terms tags \
-          --limit="10" \
-          --name-words="5"
-
diff --git a/console/language/console-en/translations/create.users.yml b/console/language/console-en/translations/create.users.yml
deleted file mode 100644
index 3225da4baa62272d67c7d65e0c1d27322ed7020a..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/create.users.yml
+++ /dev/null
@@ -1,38 +0,0 @@
-description: 'Create dummy users for your Drupal 8 application.'
-help: 'The <info>create:users</info> command helps you create dummy users.'
-welcome: 'Welcome to the Drupal users generator'
-arguments:
-  roles: 'Role(s) to be used in user creation'
-options:
-    limit: 'How many users would you like to create'
-    password: 'Password to be set to users created'
-    time-range: 'How far back in time should the users be dated'
-questions:
-    roles: 'Select role(s) to be used on user creation'
-    limit: 'Enter how many users would you like to generate'
-    password: 'Enter the password to be set to users created'
-    time-range: 'How far back in time should the users be dated?'
-    time-ranges:
-        - 'Now'
-        - '1 hour ago'
-        - '1 day ago'
-        - '1 week ago'
-        - '1 month ago'
-        - '1 year ago'
-messages:
-    user-id: 'User Id'
-    roles: 'Roles'
-    username: 'Username'
-    created: 'Created Time'
-    created-users: 'Created "%s" users successfully'
-    error: 'Error creating users: "%s"'
-examples:
-    - description: 'Provide the user role.'
-      execution: drupal create:users role
-    - description: 'Provide the number of users to create, password and time range to create.'
-      execution: |
-        drupal create:users role \
-          --limit="5" \
-          --password="usersnewpassword" \
-          --time-range="1"
-
diff --git a/console/language/console-en/translations/create.vocabularies.yml b/console/language/console-en/translations/create.vocabularies.yml
deleted file mode 100644
index ca70cf4dc6643d5c41555b79144f79ab7eedd03d..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/create.vocabularies.yml
+++ /dev/null
@@ -1,21 +0,0 @@
-description: 'Create dummy vocabularies for your Drupal 8 application.'
-help: 'The <info>create:vocabularies</info> command helps you create dummy vocabularies.'
-welcome: 'Welcome to the Drupal vocabularies creator'
-options:
-    limit: 'How many vocabularies would you like to create'
-    name-words: 'Maximum number of words in vocabulary names'
-questions:
-    limit: 'Enter how many vocabularies would you like to create'
-    name-words: 'Enter the maximum number of words in vocabulary names'
-messages:
-    vocabulary-id: 'Vocabulary Id'
-    name: 'Name'
-    created-terms: 'Created "%s" vocabularies successfully'
-    error: 'Error creating vocabularies: "%s"'
-examples:
-    - description: 'Provide the number of vocabularies to create and maximum number of words in vocabulary names'
-      execution: |
-        drupal create:vocabularies \
-          --limit="5" \
-          --name-words="5"
-    
diff --git a/console/language/console-en/translations/cron.execute.yml b/console/language/console-en/translations/cron.execute.yml
deleted file mode 100644
index a4f2b78be27e78fa89c6ae7c2e4c508704ee123e..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/cron.execute.yml
+++ /dev/null
@@ -1,14 +0,0 @@
-description: 'Execute cron implementations by module or execute all crons'
-messages:
-    module-invalid: 'Module "%s" doesn''t have an implementation of cron'
-    executing-cron: 'Executing cron function of module "%s"'
-    success: 'All cron implementations requested were executed successfully'
-    lock: 'Attempting to re-run cron while it is already running'
-examples:
-    - description: 'Execute the cron globally'
-      execution: |
-        drupal cron:execute
-    - description: 'Execute the cron on the specified module'
-      execution: |
-        drupal cron:execute \
-          <module>
diff --git a/console/language/console-en/translations/cron.release.yml b/console/language/console-en/translations/cron.release.yml
deleted file mode 100644
index c7a8313f006badcd4d5b95525699fe60d0527a72..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/cron.release.yml
+++ /dev/null
@@ -1,8 +0,0 @@
-description: 'Release cron system lock to run cron again'
-messages:
-    released: 'Cron lock was released successfully'
-examples:
-    - description: 'Execute the cron globally'
-      execution: |
-        drupal cron:execute
-
diff --git a/console/language/console-en/translations/database.add.yml b/console/language/console-en/translations/database.add.yml
deleted file mode 100644
index 2fb04a14b84e7263ef42441d0ae2a7062de83fd0..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/database.add.yml
+++ /dev/null
@@ -1,25 +0,0 @@
-description: 'Add a database to settings.php'
-options:
-  database: 'The database name'
-  username: 'The database username'
-  password: 'The database password'
-  prefix: 'The database prefix'
-  host: 'The database host address'
-  port: 'The database host port'
-  driver: 'The database driver'
-questions:
-  database: 'Enter the database name'
-  username: 'Enter the username to access the database'
-  password: 'Enter password for the database user'
-  prefix: 'Enter the database prefix'
-  host: 'Enter the database host address'
-  port: 'Enter the database host port'
-  driver: 'Enter the database driver'
-error: 'Could not write the site settings file. Either run this command as sudo or temporarily change permissions to allow write access to settings.php.'
-examples:
-    - description: 'Add a database to the settings.php'
-      execution: |
-        drupal database:add \
-          --database=DATABASE \
-          --username=USERNAME \
-          --password=PASSWORD
diff --git a/console/language/console-en/translations/database.client.yml b/console/language/console-en/translations/database.client.yml
deleted file mode 100644
index b2c9a4bd7c36519a966d135618ba86627ca4a936..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/database.client.yml
+++ /dev/null
@@ -1,9 +0,0 @@
-description: 'Launch a DB client if it''s available'
-arguments:
-    database: "Database key from settings.php"
-messages:
-    connection: 'Connection: "%s"'
-examples:
-    - description: 'Launch the default client or could launch another regarding the specification on the argument'
-      execution: |
-        drupal database:client <database>
diff --git a/console/language/console-en/translations/database.connect.yml b/console/language/console-en/translations/database.connect.yml
deleted file mode 100644
index a771d7d219f91d2b7536a4e4f4951e433913867a..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/database.connect.yml
+++ /dev/null
@@ -1,13 +0,0 @@
-description: "Shows DB connection"
-arguments:
-  database: "Database key from settings.php"
-messages:
-    database-not-found: 'Database "%s" connection info wasn''t found'
-    database-not-supported: 'Database type "%s" is not supported yet'
-    database-client-not-found: 'Database client "%s" wasn''t found'
-    connection: 'Connection: "%s"'
-examples:
-    - description: 'Connects to an specified database, or the default if not arguments passed'
-      execution: |
-        drupal database:connect \
-          <database>
diff --git a/console/language/console-en/translations/database.drop.yml b/console/language/console-en/translations/database.drop.yml
deleted file mode 100644
index 6f71d05bd5eaaf704acb3c96c6fd570dee78b153..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/database.drop.yml
+++ /dev/null
@@ -1,14 +0,0 @@
-description: "Drop all tables in a given database."
-help: 'The <info>database:drop</info> command helps you drop database tables.'
-arguments:
-  database: 'Database key from settings.php'
-question:
-    drop-tables: 'Confirm you really want to drop all tables in the database "%s"?'
-messages:
-    table: 'Table'
-    table-drop: 'Drop "%s" tables successfully'
-examples:
-    - description: 'Drop the tables on the database specified on the argument'
-      execution: |
-        drupal database:drop \
-          <database>
diff --git a/console/language/console-en/translations/database.dump.yml b/console/language/console-en/translations/database.dump.yml
deleted file mode 100644
index 4abeb0a642f815bc366f170d08242b685d7d5ba8..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/database.dump.yml
+++ /dev/null
@@ -1,17 +0,0 @@
-description: 'Dump structure and contents of a database'
-arguments:
-  database: 'Database key from settings.php'
-options:
-  file: 'The filename for your database backup'
-  gz: 'Pass this option if you want the sql result file gzipped'
-messages:
-    success: 'Database exported to:'
-examples:
-    - description: 'Dump default database or the one specified on the argument'
-      execution: |
-        drupal database:dump \
-          <database>
-    - description: 'Dump in gz compressed format'
-      execution: |
-        drupal database:dump \
-          --gz
\ No newline at end of file
diff --git a/console/language/console-en/translations/database.log.clear.yml b/console/language/console-en/translations/database.log.clear.yml
deleted file mode 100644
index a5812dccb391dc83b9c4a9bcc51e22b89beaabba..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/database.log.clear.yml
+++ /dev/null
@@ -1,22 +0,0 @@
-description: 'Remove events from DBLog table, filters are available'
-arguments:
-    event-id: 'DBLog event ID'
-options:
-    type: 'Filter events by a specific type'
-    severity: 'Filter events by a specific level of severity'
-    user-id: 'Filter events by a specific user id'
-messages:
-    event-deleted: 'Event "%s" was deleted'
-    clear-error: 'Clear process fail, please check used filters'
-    clear-sucess: 'Clear of events was successfully'
-examples:
-    - description: 'Clear the database log from DBLog table'
-      execution: |
-        drupal database:log:clear \
-          <database>
-    - description: 'Clear the database log from DBLog table using filters'
-      execution: |
-        drupal database:log:clear \
-          <database> \
-          --type=TYPE \
-          --severity=SEVERITY
\ No newline at end of file
diff --git a/console/language/console-en/translations/database.log.common.yml b/console/language/console-en/translations/database.log.common.yml
deleted file mode 100644
index a0afaf323e0ab4c0f07950f3917dc69a2371580e..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/database.log.common.yml
+++ /dev/null
@@ -1,12 +0,0 @@
-options:
-    type: 'Filter events by a specific type'
-    severity: 'Filter events by a specific level of severity'
-    user-id: 'Filter events by a specific user id'
-messages:
-    event-id: 'Event ID'
-    type: Type
-    date: Date
-    message: Message
-    user: User
-    severity: Severity
-    invalid-severity: 'Severity type is invalid, filter was ignored'
\ No newline at end of file
diff --git a/console/language/console-en/translations/database.log.poll.yml b/console/language/console-en/translations/database.log.poll.yml
deleted file mode 100644
index d7d80c6146562da2774b0b5bdd27f789281c5bc8..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/database.log.poll.yml
+++ /dev/null
@@ -1,14 +0,0 @@
-description: 'Poll the watchdog and print new log entries every x seconds'
-arguments:
-    duration: 'Duration in seconds which to sleep between database reads'
-messages:
-    warning: | 
-                Do not use in production environments
-                As this script blocks you are advised to only run it on vm's with multiple cores for performance reasons
-                Stop this polling mechanism before you clean/truncate the watchdog table!
-                Quit with ^C
-examples:
-    - description: 'Print the log entries on screen every x seconds'
-      execution: |
-        drupal database:log:poll \
-          100
diff --git a/console/language/console-en/translations/database.query.yml b/console/language/console-en/translations/database.query.yml
deleted file mode 100644
index 4e010a3939b69abc035affdaa356cafb84b54f8b..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/database.query.yml
+++ /dev/null
@@ -1,19 +0,0 @@
-description: 'Executes a SQL statement directly as argument'
-arguments:
-    query: 'The SQL statement to execute'
-    database: 'Database key from settings.php'
-options:
-    quick: 'Do not cache each query result, print each row as it is received'
-    debug: 'Prints debugging information and memory and CPU usage statistics when the program exits'
-    html: 'Produce HTML output'
-    xml: 'Produce XML output'
-    raw: 'Special characters are not escaped in the output.'
-    vertical: 'Print query output rows vertically'
-    batch: 'Print results using tab as the column separator, with each row on a new line. With this option, mysql does not use the history file'
-messages:
-    connection: 'Connection: "%s"'
-help: 'First argument should be the SQL statement. Second argument could be the name of the affected database.'
-examples:
-    - description: 'Send a database query'
-      execution: |
-        drupal database:query 'select * from node limit 0,1'
diff --git a/console/language/console-en/translations/database.restore.yml b/console/language/console-en/translations/database.restore.yml
deleted file mode 100644
index b11d5f2b84ae065549ecf899785bc4b2f4ef28dd..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/database.restore.yml
+++ /dev/null
@@ -1,14 +0,0 @@
-description: 'Restore structure and contents of a database.'
-arguments:
-  database: 'Database key from settings.php'
-options:
-  file: 'The filename for your database backup file. If using a .sql.gz file, the gunzip command needs to be installed.'
-messages:
-    success: 'Database imported from:'
-    no-file: 'Missing file option'
-help: 'Restore structure and contents of a database.'
-examples:
-    - description: 'Restore the database file dump to the database default or another one specified'
-      execution: |
-        drupal database:restore \
-          --file='/srv/dump/db.sql'
diff --git a/console/language/console-en/translations/debug.breakpoints.yml b/console/language/console-en/translations/debug.breakpoints.yml
deleted file mode 100644
index e88c54fed2bb475fc1f8c774d94bae2d26a1689e..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/debug.breakpoints.yml
+++ /dev/null
@@ -1,12 +0,0 @@
-description: 'Displays breakpoints available in application'
-options:
-  group-name: 'Enter Breakpoint Group Name'
-messages:
-  name: 'Extensions with breakpoints'
-examples:
-    - description: 'Provide a group name.'
-      execution: drupal debug:breakpoints bartik
-examples:
-    - description: 'Displays the breakpoints available on the site'
-      execution: |
-        drupal debug:breakpoints
diff --git a/console/language/console-en/translations/debug.cache.context.yml b/console/language/console-en/translations/debug.cache.context.yml
deleted file mode 100644
index be9ec82e8ff5a68c03ed66f27a10e33606d7045e..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/debug.cache.context.yml
+++ /dev/null
@@ -1,9 +0,0 @@
-description: 'Displays current cache context for the application.'
-messages:
-    code: 'Context ID'
-    label: 'Label'
-    class: 'Class path'
-examples:
-    - description: 'Displays cache context'
-      execution: |
-        drupal debug:cache:context
diff --git a/console/language/console-en/translations/debug.chain.yml b/console/language/console-en/translations/debug.chain.yml
deleted file mode 100644
index a74e31df155150dc2b589ac563a6f689dbfd144e..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/debug.chain.yml
+++ /dev/null
@@ -1,6 +0,0 @@
-description: 'List available chain files.'
-messages:
-    directory: 'Directory'
-    file: 'File name.'
-    command: 'Command name.'
-    no-files: 'No chain files found.'
diff --git a/console/language/console-en/translations/debug.config.settings.yml b/console/language/console-en/translations/debug.config.settings.yml
deleted file mode 100644
index 34087fbe4f8c7cc65e7161aa710e281d4b736de4..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/debug.config.settings.yml
+++ /dev/null
@@ -1,9 +0,0 @@
-description: 'Displays current key:value on settings file.'
-help: 'The <info>debug:config:settings</info> command helps you displaying current key:value on settings file.'
-welcome: 'Welcome to the Drupal Config Settings Debug command'
-messages:
-    current: 'Current Key:value on settings file'
-examples:
-    - description: 'Displays key:value as per the settings file'
-      execution: |
-        drupal debug:config:settings
diff --git a/console/language/console-en/translations/debug.config.validate.yml b/console/language/console-en/translations/debug.config.validate.yml
deleted file mode 100644
index e6d78eb066431545743fd44000c78a5a185a3133..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/debug.config.validate.yml
+++ /dev/null
@@ -1,14 +0,0 @@
-description: 'Validate a schema implementation before a module is installed.'
-help: 'Helper function to validate a schema implementation before a module is installed. Specify the config and the schema file paths as arguments and validation will be run against them, making schema easier to debug without time consuming installs'
-options: {}
-arguments: {}
-messages:
-    noConfFile: 'Config file at the specified path does not exist'
-    noConfSchema: 'Config schema at the specified path does not exist'
-    noSchemaName: 'Could not find schema definition in schema file. Using definition name:'
-examples:
-    - description: 'Validates a schema'
-      execution: |
-        drupal debug:config:validate \
-          /path/to/file \
-          /path/to/schema-filepath
diff --git a/console/language/console-en/translations/debug.config.yml b/console/language/console-en/translations/debug.config.yml
deleted file mode 100644
index d471355f4be71150a490d673cc0f7f67bfda1e9b..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/debug.config.yml
+++ /dev/null
@@ -1,17 +0,0 @@
-description: 'List configuration objects names and single configuration object.'
-arguments:
-    name: 'Configuration object name, for example "system.site".'
-options:
-    show-overridden: 'Show overridden configurations.'
-errors:
-    not-exists: 'The configuration "%s" does not exist.'
-
-examples:
-    - description: 'List all configuration object names.'
-      execution: 'drupal debug:config'
-    - description: 'Display system site configurations values.'
-      execution: 'drupal debug:config system.site'
-    - description: 'List all system configuration names.'
-      execution: 'drupal debug:config | grep system'
-    - description: 'List all configuration including overridden values.'
-      execution: 'drupal debug:config --show-overridden'
diff --git a/console/language/console-en/translations/debug.container.yml b/console/language/console-en/translations/debug.container.yml
deleted file mode 100644
index 9a2e740019e6d504b82bcc534bc46c024dee0f25..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/debug.container.yml
+++ /dev/null
@@ -1,25 +0,0 @@
-description: 'Displays current services for an application.'
-arguments:
-    service: 'Service name.'
-    method: 'Method name.'
-    arguments: 'Array of Arguments in CSV or JSON format.'
-options:
-  tag: 'Service tag '
-messages:
-    service-id: 'Service ID'
-    class-name: 'Class Name'
-    service: 'Service'
-    class: 'Class'
-    interface: 'Interface(s)'
-    parent: 'Parent class'
-    variables: 'Variables'
-    methods: 'Methods'
-    arguments: 'Arguments'
-    method: 'Method'
-    return: 'Return'
-errors:
-    method-not-exists: 'This method doesn''t exists in this service.'
-examples:
-    - description: 'Displays the views.views_data_helper services'
-      execution: |
-        drupal debug:container views.views_data_helper
diff --git a/console/language/console-en/translations/debug.cron.yml b/console/language/console-en/translations/debug.cron.yml
deleted file mode 100644
index cf931e60fb4af513f756087cfcac8eb16424a22a..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/debug.cron.yml
+++ /dev/null
@@ -1,8 +0,0 @@
-description: 'List of modules implementing a cron'
-messages:
-    module-list: 'Modules implementing a cron method'
-    module: Module
-examples:
-    - description: 'This will show a list with modules implementing the cron hook'
-      execution: |
-        drupal debug:cron
diff --git a/console/language/console-en/translations/debug.database.log.yml b/console/language/console-en/translations/debug.database.log.yml
deleted file mode 100644
index fb23aaf64a3be0398a8ba91eb1602d0b75823745..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/debug.database.log.yml
+++ /dev/null
@@ -1,17 +0,0 @@
-description: 'Displays current log events for the application'
-arguments:
-  event-id: 'DBLog event ID'
-options:
-  asc: 'List events in ascending order'
-  limit: 'Limit results to a specific number'
-  offset: 'Starting point of a limit'
-  yml: 'Print in a yml style'
-messages:
-  not-found: 'DBLog event "%s" wasn''t found'
-examples:
-  - description: 'List all the entries on the log'
-    execution: |
-      drupal debug:database:log
-  - description: 'List specific log entry by Event ID'
-    execution: |
-      drupal debug:database:log 21228
diff --git a/console/language/console-en/translations/debug.database.table.yml b/console/language/console-en/translations/debug.database.table.yml
deleted file mode 100644
index 8258c29b757fb0ae78e111d2d0d3cce0e61c5cf3..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/debug.database.table.yml
+++ /dev/null
@@ -1,18 +0,0 @@
-description: 'Show all tables in a given database.'
-help: 'The <info>debug:database:table</info> command helps you debug database tables.'
-arguments:
-  table: 'Table to debug'
-options:
-  database: 'Database key from settings.php'
-messages:
-  table-show: 'Showing tables for "%s" database'
-  table: 'Table'
-  column: 'Column'
-  type: 'Type'
-examples:
-    - description: 'Show all tables in a database'
-      execution: |
-        drupal debug:database:table
-    - description: 'Show fields in the node table or another specified in the argument'
-      execution: |
-        drupal debug:database:table node
diff --git a/console/language/console-en/translations/debug.entity.yml b/console/language/console-en/translations/debug.entity.yml
deleted file mode 100644
index f217073ba9dc3040ca616d68c535542e22ca68cd..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/debug.entity.yml
+++ /dev/null
@@ -1,12 +0,0 @@
-description: 'Debug entities available in the system'
-help: 'The <info>debug:entity</info> command helps get a list of entities.'
-arguments:
-questions:
-messages:
-table-headers:
-  entity-name: 'Entity name'
-  entity-type: 'Entity type'
-examples:
-    - description: 'Displays the available entities'
-      execution: |
-        drupal debug:entity
diff --git a/console/language/console-en/translations/debug.event.yml b/console/language/console-en/translations/debug.event.yml
deleted file mode 100644
index e9197b33f058fcc3d35eb4e8585f5cadf5e763be..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/debug.event.yml
+++ /dev/null
@@ -1,16 +0,0 @@
-description: 'Displays current events '
-help: 'The <info>debug:event</info> command helps you debug events.'
-arguments:
-  event: 'Event to debug'
-messages:
-  event: Event Name
-  class: 'Class'
-  method: 'Method'
-  no-events: 'This event does not exist, try to execute command: debug:event'
-examples:
-    - description: 'List all the events that could be debugged'
-      execution: |
-        drupal debug:evet
-    - description: 'Show the information for the kernel.request event'
-      execution: |
-        drupal debug:event kernel.request
\ No newline at end of file
diff --git a/console/language/console-en/translations/debug.features.yml b/console/language/console-en/translations/debug.features.yml
deleted file mode 100644
index 5ef07c5d8a8b4bd0a3fedecbcafb8cb015ad463b..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/debug.features.yml
+++ /dev/null
@@ -1,11 +0,0 @@
-description: 'List registered features.'
-help: 'List registered features.'
-arguments:
-  bundle: 'Bundle name'
-messages:
-  bundle: 'Bundle'
-  name: 'Name'
-  machine-name: 'Machine Name'
-  status: 'Status'
-  state: 'State'
-
diff --git a/console/language/console-en/translations/debug.image.styles.yml b/console/language/console-en/translations/debug.image.styles.yml
deleted file mode 100644
index 0aff9195506bb7ffdc8ffa63474f88b7bbd59086..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/debug.image.styles.yml
+++ /dev/null
@@ -1,9 +0,0 @@
-description: 'List image styles on the site'
-messages:
-    styles-list: 'Image Styles defined in the site'
-    styles-label: 'Label'
-    styles-name: 'Machine Name'
-examples:
-    - description: 'List all images styles on the site'
-      execution: |
-        drupal debug:image:styles
diff --git a/console/language/console-en/translations/debug.libraries.yml b/console/language/console-en/translations/debug.libraries.yml
deleted file mode 100644
index c431b65c98c39e63d56299bcdfa6e26bb01c06a2..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/debug.libraries.yml
+++ /dev/null
@@ -1,17 +0,0 @@
-description: 'Displays libraries available in application'
-options:
-  name: 'Extension or Library Name'
-messages:
-   extension: 'Extension'
-   library: 'Library'
-   info: 'Library Information'
-examples:
-    - description: 'List all extensions with libraries'
-      execution: |
-        drupal debug:libraries
-    - description: 'List block extension libraries'
-      execution: |
-        drupal debug:libraries block
-    - description: 'List block/drupal.block library'
-      execution: |
-        drupal debug:libraries block/drupal.block
diff --git a/console/language/console-en/translations/debug.migrate.yml b/console/language/console-en/translations/debug.migrate.yml
deleted file mode 100644
index 779730f35db3e25cbcc7aa52b67843c0006bd74c..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/debug.migrate.yml
+++ /dev/null
@@ -1,12 +0,0 @@
-description: 'Display current migration available for the application'
-arguments:
-    tag: 'Migrate tag'
-messages:
-    id: 'Migration Id'
-    description: Description
-    no-migrations: 'There aren''t migrations available try to execute command: migrate:setup:migrations'
-    tags: Tags
-examples:
-    - description: 'Displays current migration'
-      execution: |
-        drupal debug:migrate
diff --git a/console/language/console-en/translations/debug.module.yml b/console/language/console-en/translations/debug.module.yml
deleted file mode 100644
index 034d88adfa2d48b3c4cf223a2d72fc8641aa89ce..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/debug.module.yml
+++ /dev/null
@@ -1,24 +0,0 @@
-description: 'Displays current modules available for application'
-module: 'Module name'
-options:
-    status: 'Module status [installed|uninstalled]'
-    type: 'Module type [core|no-core]'
-messages:
-    id: ID
-    name: Name
-    status: Status
-    origin: Origin
-    package: Package
-    installed: Installed
-    uninstalled: Uninstalled
-    version: Version
-    schema-version: 'Schema version'
-    total-downloads: 'Total installs'
-    total-monthly: 'Monthly installs'
-    total-daily: 'Daily installs'
-    no-results: 'Module "%s" was not found in the repository'
-examples:
-    - description: 'Display all installed modules'
-      execution: 'drupal mod --status=installed'
-    - description: 'Display all installed and no core modules'
-      execution: 'drupal mod --status=installed --type=no-core'
diff --git a/console/language/console-en/translations/debug.multisite.yml b/console/language/console-en/translations/debug.multisite.yml
deleted file mode 100644
index 4e1fbb40e9a9cc342ffc7ac818a9f7373a27b7ee..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/debug.multisite.yml
+++ /dev/null
@@ -1,11 +0,0 @@
-description: 'List all multi-sites available in system'
-help: 'The <info>debug:multisite</info> list all known multi-sites.'
-messages:
-  no-multisites: 'No multi-sites configured'
-  site: 'Site'
-  directory: 'Directory'
-  site-format: 'Sites are written using the format: <port>.<domain>.<path>'
-examples:
-    - description: 'Displays multi-site information'
-      execution: |
-        drupal debug:multisite
diff --git a/console/language/console-en/translations/debug.permission.yml b/console/language/console-en/translations/debug.permission.yml
deleted file mode 100644
index aade16bdc32115741c8649e0cc68cfdc35969866..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/debug.permission.yml
+++ /dev/null
@@ -1,22 +0,0 @@
-description: 'Displays all user permissions.'
-help: |
-  Display all user permissions and also list all user permissions from a specific user role.
-
-  List all user permissions:
-  <info>drupal debug:permission</info>
-
-  List all user permissions from a user role
-  <info>drupal debug:permission authenticated</info>
-
-arguments:
-    role: 'User role'
-messages:
-    role-error: 'Role "%s" does not exist. Please use an existing user role.'
-table-headers:
-    permission-name: 'Permission name'
-    permission-label: 'Permission Label'
-    permission-role: 'Role'
-examples:
-    - description: 'Displays all the permissions availables on the site'
-      execution: |
-        drupal debug:permission
diff --git a/console/language/console-en/translations/debug.plugin.yml b/console/language/console-en/translations/debug.plugin.yml
deleted file mode 100644
index 8553725ed5abb6f4e10db39bb0f3806c4105942a..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/debug.plugin.yml
+++ /dev/null
@@ -1,39 +0,0 @@
-description: 'Displays all plugin types.'
-help: |
-  Display all plugin types, plugin instances of a specific type, or the definition for a specific plugin.
-
-  List all plugin types:
-  <info>drupal debug:plugin</info>
-
-  List all instances of the image effect plugin type:
-  <info>drupal debug:plugin image.effect</info>
-
-  Show the definition for the image convert plugin:
-  <info>drupal debug:plugin image.effect image_convert</info>
-
-  <comment>NOTE: Only plugin types exposed through services are supported.</comment> When developing a custom plugin type, expose it as a service by adding it to modulename.services.yml with the name "plugin.manager.PLUGIN_TYPE".
-arguments:
-    type: 'Plugin type'
-    id: 'Plugin ID'
-errors:
-    plugin-type-not-found: 'Plugin type "%s" not found. No service available for that type.'
-messages:
-    plugin-info: 'Plugin additional information'
-table-headers:
-    plugin-type-name: 'Plugin type'
-    plugin-type-class: 'Plugin manager class'
-    plugin-id: 'Plugin ID'
-    plugin-class: 'Plugin class'
-    definition-key: 'Key'
-    definition-value: 'Value'
-    setting: 'Setting'
-examples:
-    - description: 'Displays a list with all the plugins on the current site'
-      execution: |
-        drupal debug:plugin
-    - description: 'Displays block plugin information'
-      execution: |
-        drupal debug:plugin block
-    - description: 'Displays block broken information'
-      execution: |
-        drupal debug:plugin block broken
diff --git a/console/language/console-en/translations/debug.queue.yml b/console/language/console-en/translations/debug.queue.yml
deleted file mode 100644
index 667e352281fa4552ea94784b0f5974e2ae3737e6..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/debug.queue.yml
+++ /dev/null
@@ -1,9 +0,0 @@
-description: 'Displays the queues of your application'
-messages:
-  queue: 'Queue'
-  items: 'Items'
-  class: 'Class'
-examples:
-    - description: 'Displays the queues of the application'
-      execution: |
-        drupal debug:queue
diff --git a/console/language/console-en/translations/debug.rest.yml b/console/language/console-en/translations/debug.rest.yml
deleted file mode 100644
index 6c6f101cdcd0e07a5f3138eca8eb77882c07c75f..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/debug.rest.yml
+++ /dev/null
@@ -1,21 +0,0 @@
-description: 'Display current rest resource for the application'
-arguments:
-    resource-id: 'Rest ID'
-options:
-    status: 'Rest resource status enabled | disabled'
-messages:
-    id: 'Rest ID'
-    label: Label
-    canonical-url: 'Canonical URL'
-    status: Status
-    provider: Provider
-    enabled: Enabled
-    disabled: Disabled
-    rest-state: 'REST States'
-    supported-formats: 'Supported Formats'
-    supported-auth: 'Supported Authentication Providers'
-    not-found: 'Rest resource "%s" not found'
-examples:
-    - description: 'Displays rest hooks'
-      execution: |
-        drupal debug:rest
diff --git a/console/language/console-en/translations/debug.roles.yml b/console/language/console-en/translations/debug.roles.yml
deleted file mode 100644
index b1bb15ae29810e7685710a02fc4e1493ba399970..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/debug.roles.yml
+++ /dev/null
@@ -1,10 +0,0 @@
-description: 'Displays current roles for the application'
-help: 'The <info>debug:roles</info> command helps you get current roles.'
-welcome: 'Welcome to the Drupal roles debug'
-messages:
-    role-id: 'Role ID'
-    role-name: 'Role Name'
-examples:
-    - description: 'Roles list on the site'
-      execution: |
-        drupal debug:roles
diff --git a/console/language/console-en/translations/debug.router.yml b/console/language/console-en/translations/debug.router.yml
deleted file mode 100644
index 1341a87eeeaae3655a39592db0f47e1d8e9652ce..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/debug.router.yml
+++ /dev/null
@@ -1,23 +0,0 @@
-description: 'Displays current routes for the application or information for a particular route'
-arguments:
-    route-name: 'Route names'
-messages:
-    name: 'Route name'
-    class: 'Class path'
-    route: Route
-    path: Path
-    defaults: Defaults
-    requirements: Requirements
-    options: Options
-examples:
-    - description: 'Displays current routes for the application'
-      execution: 'drupal rod'
-    - description: 'Displays details for the route user.page (/user)'
-      execution: 'drupal rod user.page'
-examples:
-    - description: 'Shows the routes list on the site'
-      execution: |
-        drupal debug:router
-    - description: 'Display information on the user.login'
-      execution: |
-        drupal debug:router user.login
\ No newline at end of file
diff --git a/console/language/console-en/translations/debug.settings.yml b/console/language/console-en/translations/debug.settings.yml
deleted file mode 100644
index 725bf0f116f948df0b08f742f1f312fccee12200..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/debug.settings.yml
+++ /dev/null
@@ -1,9 +0,0 @@
-description: 'List user Drupal Console settings.'
-messages:
-    config-key: 'Config key'
-    config-value: 'Config value'
-    config-file: 'Config file'
-examples:
-    - description: 'List user Drupal Console settings.'
-      execution: |
-        drupal debug:settings
diff --git a/console/language/console-en/translations/debug.site.yml b/console/language/console-en/translations/debug.site.yml
deleted file mode 100644
index e7f37b8853cacaa2f2af8b87a3716a5bc92efd81..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/debug.site.yml
+++ /dev/null
@@ -1,20 +0,0 @@
-description: 'List all known local and remote sites.'
-help: 'The <info>debug:site</info> list all known local and remote sites.'
-messages:
-  site: 'Site'
-  host: 'Host'
-  root: 'Root'
-  invalid-sites: 'No sites defined.'
-  invalid-sites-using: |
-    Using a site alias requires local configuration, more info at:
-       https://docs.drupalconsole.com/en/alias/using-site-alias.html
-  invalid-site: 'Invalid site name'
-  private-key: 'Error with private key'
-  connect-error: 'Error connecting to remote machine'
-options:
-  target: 'Target'
-  property: 'Property'
-examples:
-    - description: 'List all known local and remote sites.'
-      execution: |
-        drupal debug:site
diff --git a/console/language/console-en/translations/debug.state.yml b/console/language/console-en/translations/debug.state.yml
deleted file mode 100644
index 9d995a2f4b6f8df24a2fe6b0a93fb7bc4cedcb29..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/debug.state.yml
+++ /dev/null
@@ -1,13 +0,0 @@
-description: 'Show the current State keys.'
-help: 'Show the current State keys.'
-arguments:
-  key: 'The State key to debug.'
-messages:
-  key: 'The State key'
-examples:
-    - description: 'List of the states on the site'
-      execution: |
-        drupal debug:state
-    - description: 'Displays a detail of the state install_task tok from the list of states'
-      execution: |
-        drupal debug:state install_task
diff --git a/console/language/console-en/translations/debug.test.yml b/console/language/console-en/translations/debug.test.yml
deleted file mode 100644
index 3299674aad41d7f9538d631b56f036df03eddec8..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/debug.test.yml
+++ /dev/null
@@ -1,20 +0,0 @@
-description: 'List Test Units available for the application.'
-help: 'List Test Units available for the application.'
-arguments:
-    test-class: 'Test Class'
-options:
-    group: Group
-messages:
-    class: 'Test Class'
-    description: Description
-    group: Group
-    type: 'Test Type'
-    missing-dependency: 'Missing dependency'
-    methods: 'Test methods'
-    not-found: 'Debug wasn''t found, try enclosure test id between double quotes.'
-    success-groups: 'All testing groups were listed sucessfully, use the group argument to filter Test unit by group i.e $ drupal debug:test Url'
-    success-group: 'All test units for group "%s" were listed sucessfully'
-examples:
-    - description: ''
-      execution: |
-        drupal debug:test
diff --git a/console/language/console-en/translations/debug.theme.keys.yml b/console/language/console-en/translations/debug.theme.keys.yml
deleted file mode 100644
index 976ce004c89c3ef84cb162336edcdb20549853c1..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/debug.theme.keys.yml
+++ /dev/null
@@ -1,22 +0,0 @@
-description: 'Displays all theme keys provided by hook_theme functions'
-help: |
-  Display all theme keys, or the definition for a specific theme key.
-
-  List all theme keys:
-  <info>drupal debug:theme:keys</info>
-
-  Show the definition for the item_list theme key:
-  <info>drupal debug:theme:keys item_list</info>
-arguments:
-    key: 'Key'
-table-headers:
-    key: 'Key'
-    provider-type: 'Provider type'
-    provider: 'Provider'
-    value: 'Value'
-provider-types:
-    module: 'Module'
-    base-theme-engine: 'Base theme engine'
-    base-theme: 'Base theme'
-    theme-engine: 'Theme engine'
-    theme: 'Theme'
diff --git a/console/language/console-en/translations/debug.theme.yml b/console/language/console-en/translations/debug.theme.yml
deleted file mode 100644
index fac0258006dbdb6a05dba6f551e69d51826c2659..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/debug.theme.yml
+++ /dev/null
@@ -1,22 +0,0 @@
-description: 'Displays current themes for the application'
-arguments:
-    theme: 'Specific theme to debug'
-messages:
-    theme-id: 'Id'
-    theme-name: 'Name'
-    status: 'Status'
-    version: 'Version'
-    installed: 'Installed'
-    uninstalled: 'Uninstalled'
-    default-theme: 'Default theme'
-    properties: 'Properties'
-    regions: 'Regions'
-    invalid-theme: 'Theme "%s" is invalid'
-    theme-properties: 'Properties'
-examples:
-    - description: 'List of themes on the site'
-      execution: |
-        drupal debug:theme
-    - description: 'Bartik theme information'
-      execution: |
-        drupal debug:theme bartik
\ No newline at end of file
diff --git a/console/language/console-en/translations/debug.update.yml b/console/language/console-en/translations/debug.update.yml
deleted file mode 100644
index 9ed7fc781e3c8923d79ee31befddbce065070e25..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/debug.update.yml
+++ /dev/null
@@ -1,17 +0,0 @@
-description: 'Displays current updates available for the application'
-messages:
-    no-updates: 'No pending updates'
-    severity: 'Severity'
-    title: 'Title'
-    value: 'Value'
-    description: 'Description'
-    requirements-error: 'The following requirement weren''t completed'
-    module-list: 'Modules with pending updates'
-    module-list-post-update: 'Modules with pending post updates'
-    module: 'Module'
-    update-n: 'Update N'
-    post-update: 'Post update function'
-examples:
-    - description: 'List of pending updates'
-      execution: |
-        drupal debug:update
diff --git a/console/language/console-en/translations/debug.user.yml b/console/language/console-en/translations/debug.user.yml
deleted file mode 100644
index 29cb406f160e41fe731e68989001cbef5344b5fa..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/debug.user.yml
+++ /dev/null
@@ -1,21 +0,0 @@
-description: 'Displays current users for the application'
-help: 'The <info>debug:user</info> command helps you get current users.'
-welcome: 'Welcome to the Drupal user debug'
-options:
-    roles: 'Roles to filter debug'
-    limit: 'How many users would you like to be listed in debug'
-    uid: 'Filters the result list by uids [between quotes separated by spaces]'
-    username: 'Filters the result list by user-names [between quotes separated by spaces]'
-    mail: 'Filters the result list by user''s e-mail [between quotes separated by spaces]'
-questions:
-    roles: 'Select role(s) to be used to filter user debug list'
-    limit: 'Enter how many users would you like to show'
-messages:
-    user-id: 'User ID'
-    username: 'Username'
-    roles: 'Roles'
-    status: 'Status'
-examples:
-    - description: 'Users list on the site'
-      execution: |
-        drupal debug:user
diff --git a/console/language/console-en/translations/debug.views.plugins.yml b/console/language/console-en/translations/debug.views.plugins.yml
deleted file mode 100644
index b3b9b42a3b400557f109ee6782b75d1bb6c5d055..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/debug.views.plugins.yml
+++ /dev/null
@@ -1,12 +0,0 @@
-description: 'Displays current views plugins for the application'
-arguments:
-    type: 'Filter views plugins by type'
-messages:
-  type: 'Type'
-  name: 'Name'
-  provider: 'Provider'
-  views: 'Views'
-examples:
-    - description: 'List of views plugins'
-      execution: |
-        drupal debug:views:plugins
diff --git a/console/language/console-en/translations/debug.views.yml b/console/language/console-en/translations/debug.views.yml
deleted file mode 100644
index 91b877ede287504275f47052bb3ec78a21c3ebcd..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/debug.views.yml
+++ /dev/null
@@ -1,22 +0,0 @@
-description: 'Displays current views resources for the application'
-arguments:
-    view-id: 'View ID'
-    view-tag: 'View tag'
-    view-status: 'View status (Enabled|Disabled)'
-messages:
-    view-id: 'View ID'
-    view-name: 'View name'
-    description: Description
-    tag: Tag
-    status: Status
-    path: Path
-    not-found: 'View "%s" wasn''t found.'
-    display-list: 'Display list'
-    display-id: ID
-    display-name: Name
-    display-description: Description
-    display-paths: Paths
-examples:
-    - description: 'List of views on the site'
-      execution: |
-        drupal debug:views
diff --git a/console/language/console-en/translations/devel.dumper.yml b/console/language/console-en/translations/devel.dumper.yml
deleted file mode 100644
index e27a51881ff1c6f510c1c966bff36f5d09bbb438..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/devel.dumper.yml
+++ /dev/null
@@ -1,7 +0,0 @@
-messages:
-  change-devel-dumper-plugin: 'Change the devel dumper plugin'
-  name-devel-dumper-plugin: 'Name of the devel dumper plugin'
-  devel-must-be-installed: 'Devel must be installed'
-  select-debug-dumper: 'Select a Debug Dumper'
-  dumper-not-exist: 'Dumper does not exist'
-  devel-dumper-set: 'Devel Dumper set to: "%s"'
diff --git a/console/language/console-en/translations/docker.init.yml b/console/language/console-en/translations/docker.init.yml
deleted file mode 100644
index 95f79c02d24d1229b3d0253bf5ec1a476b97eb93..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/docker.init.yml
+++ /dev/null
@@ -1 +0,0 @@
-description: 'Create a docker-compose.yml file'
diff --git a/console/language/console-en/translations/dotenv.init.yml b/console/language/console-en/translations/dotenv.init.yml
deleted file mode 100644
index deec7eeea046145157eb54a3dba3d78b3862de51..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/dotenv.init.yml
+++ /dev/null
@@ -1,38 +0,0 @@
-description: 'Add support and required config to work with an .env file'
-messages:
-  template-env: |
-    This file is a "template" of which env vars need to be defined
-    for your application, use only on development stages.
-    Create real environment variables when deploying to production.
-  load-from-env: |
-    If not using real environment variables.
-    Make sure you add the dependency using composer
-
-    Drupal 8.5 and up versions `composer require symfony/dotenv`
-    if (file_exists(dirname(DRUPAL_ROOT) . '/.env')) {
-      $dotenv = new \Symfony\Component\Dotenv\Dotenv(dirname(DRUPAL_ROOT));
-      $dotenv->load();
-    }
-
-    Drupal 8.4 and minor versions `composer require vlucas/phpdotenv`
-    if (file_exists(dirname(DRUPAL_ROOT) . '/.env')) {
-      $dotenv = new \Dotenv\Dotenv(dirname(DRUPAL_ROOT));
-      $dotenv->load();
-    }
-  load-settings: |
-    # Load key/value settings
-    $settings_drupal = array_filter(
-        $_SERVER,
-        function($key) {
-            return  strpos($key, 'SETTINGS_') === 0;
-        },
-        ARRAY_FILTER_USE_KEY
-    );
-
-    # Set key/value settings
-    foreach ($settings_drupal as $name => $value) {
-      if (substr($name, 0, 9) === 'SETTINGS_') {
-        $key = strtolower(substr($name, 9));
-        $settings['settings'][$key] = $value;
-      }
-    }
diff --git a/console/language/console-en/translations/drush.yml b/console/language/console-en/translations/drush.yml
deleted file mode 100644
index 7a398a911055f9c3baf7f25623ac889c5c3bfbc4..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/drush.yml
+++ /dev/null
@@ -1,3 +0,0 @@
-description: 'Drupal Console equivalents'
-messages:
-  not-found: 'Drush command not found'
diff --git a/console/language/console-en/translations/elephpant.yml b/console/language/console-en/translations/elephpant.yml
deleted file mode 100644
index d9e4499b6c772d43634316ac7c1e3e3d8a53a426..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/elephpant.yml
+++ /dev/null
@@ -1 +0,0 @@
-description: 'Elephpants are cute ...'
diff --git a/console/language/console-en/translations/entity.delete.yml b/console/language/console-en/translations/entity.delete.yml
deleted file mode 100644
index e465677e2debb055930d35ea385d034de121f2cc..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/entity.delete.yml
+++ /dev/null
@@ -1,19 +0,0 @@
-description: 'Delete an specific entity'
-help: 'The <info>entity:delete</info> command helps you delete entities.'
-arguments:
-  entity-definition-id: 'Entity definition id'
-  entity-id: 'Entity ID to be deleted'
-options:
-  all: 'Delete all entities of the given type.'
-questions:
-  entity-type: 'Enter the Entity type'
-  entity-definition-id: 'Enter the  Entity definitin id'
-  entity-id: 'Enter the  Entity ID to be deleted'
-messages:
-  confirm-delete-all: 'Do you want to delete all entities of type "%s" ("%d")?'
-  deleted: 'Entity "%s" with id "%s" was deleted successfully'
-  deleted-all: 'All entities of type "%s" ("%d") were deleted.'
-examples:
-  - description: 'Delete entity type content using node id'
-    execution: |
-      drupal entity:delete node 1
diff --git a/console/language/console-en/translations/exec.yml b/console/language/console-en/translations/exec.yml
deleted file mode 100644
index 9f4d52c33876b037fec851541f9042ea45b8a8e0..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/exec.yml
+++ /dev/null
@@ -1,13 +0,0 @@
-description: 'Execute an external command.'
-arguments:
-  bin: 'Executable command.'
-options:
-  working-directory: 'The current working directory.'
-messages:
-  success: 'Executed the command.'
-  invalid-bin: 'Error executing the command.'
-  missing-bin: 'Provide an executable command.'
-  binary-not-found: 'Unable to find the binary "%s" to execute.'
-  working-directory: 'Working directory'
-  executing-command: 'Executing command'
-
diff --git a/console/language/console-en/translations/features.import.yml b/console/language/console-en/translations/features.import.yml
deleted file mode 100644
index 1de3642308ea936a14f1443d1ade9edc443a68e3..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/features.import.yml
+++ /dev/null
@@ -1,15 +0,0 @@
-description: 'Import module config.'
-help: ''
-options:
-  bundle: 'Bundle name'
-arguments:
-  packages: 'Package name'
-questions:
-  packages: 'Enter package name to import'
-messages:
-  no-packages: 'No packages available.'
-  not-available: 'Package "%s", not available.'
-  importing: 'Importing package "%s".'
-  uninstall: 'Package "%s" already installed.'
-  reverting: 'Reverting package "%s".'
-  nothing: 'Nothing to import.'
diff --git a/console/language/console-en/translations/field.info.yml b/console/language/console-en/translations/field.info.yml
deleted file mode 100644
index adcacbc17853fa77547e3d984c071ca4b3017a7f..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/field.info.yml
+++ /dev/null
@@ -1,18 +0,0 @@
-description: 'View information about fields.'
-help: 'View information about fields.'
-options:
-    detailed: 'Extended output with machine names and descriptions'
-    entity: 'Restrict to a specific fieldabe entity type, for example: node, comment, taxonomy_term, shortcut, block_content, contact_message'
-    bundle: 'Restrict to a specific bundle type, for example: article'
-messages:
-    fields-none: 'No fields found'
-    entity-type: 'Fieldable entity type'
-    bundle-type: 'Bundle type'
-    not-found: 'not found'
-    in-entity-type: 'in entity type'
-    in-bundle-type: 'in bundle type'
-table:
-    header-name: 'Field label'
-    header-type: 'Field type'
-    header-desc: 'Field description'
-    header-usage: 'Also used in'
diff --git a/console/language/console-en/translations/generate.ajax.command.yml b/console/language/console-en/translations/generate.ajax.command.yml
deleted file mode 100644
index 39836810d0282a7d27da35401d384065baf1ea13..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/generate.ajax.command.yml
+++ /dev/null
@@ -1,13 +0,0 @@
-description: 'Generate & Register a custom ajax command'
-help: 'The <info>generate:ajax:command</info> command helps you generate a new custom ajax command.'
-welcome: 'Welcome to the Drupal Ajax generator'
-options:
-  module: 'The Module name.'
-  class: 'Ajax Class name'
-  method: 'Custom ajax method'
-  js-name: 'Custom javascript name'
-questions:
-  module: 'Enter the module name'
-  class: 'Enter the Ajax class name'
-  method: 'Enter the render method name'
-  js-name: 'Enter a custom javascript name'
\ No newline at end of file
diff --git a/console/language/console-en/translations/generate.authentication.provider.yml b/console/language/console-en/translations/generate.authentication.provider.yml
deleted file mode 100644
index a867018baa6438726f8ef439c3972276d7608708..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/generate.authentication.provider.yml
+++ /dev/null
@@ -1,18 +0,0 @@
-description: 'Generate an Authentication Provider'
-help: 'The <info>generate:authentication:provider</info> command helps you generate a new Authentication Provider.'
-welcome: 'Welcome to the Drupal Authentication Provider generator'
-options:
-  module: 'The Module name.'
-  class: 'Authentication Provider class'
-  provider-id: 'Provider ID'
-questions:
-  module: 'Enter the module name'
-  class: 'Enter the Authentication Provider class'
-  provider-id: 'Enter the Provider ID'
-examples:
-  - description: 'Generate an authentication provider specifying the module, the class and the provider id'
-    execution: |
-      drupal generate:authentication:provider  \
-        --module="modulename"  \
-        --class="DefaultAuthenticationProvider"  \
-        --provider-id="default_authentication_provider"
diff --git a/console/language/console-en/translations/generate.breakpoint.yml b/console/language/console-en/translations/generate.breakpoint.yml
deleted file mode 100644
index 9b79cbdd15d012761ecd3f6fbf75f484c9aeacb5..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/generate.breakpoint.yml
+++ /dev/null
@@ -1,20 +0,0 @@
-description: 'Generate breakpoint'
-help: 'The <info>generate:breakpoint</info> command helps you generates a new breakpoint'
-welcome: 'Welcome to the Drupal breakpoint generator'
-options:
-  theme: 'Theme name'
-  breakpoints: Breakpoints
-questions:
-  theme: 'Enter the theme name (i.e. classy, stable)'
-  breakpoint-name: 'Enter breakpoint name'
-  breakpoint-label: 'Enter breakpoint label'
-  breakpoint-media-query: 'Enter breakpoint media query'
-  breakpoint-weight: 'Enter breakpoint weight'
-  breakpoint-multipliers: 'Enter breakpoint multipliers'
-  breakpoint-add: 'Do you want to add another breakpoint?'
-examples:
-  - description: 'Generate a breakpoint specifying the theme, a breakpoint name, its label, the media query, its weight and multipliers'
-    execution: |
-      drupal generate:breakpoint  \
-        --theme="classy"  \
-        --breakpoints='"breakpoint_name":"narrow", "breakpoint_label":"narrow", "breakpoint_media_query":"all and (min-width: 560px) and (max-width: 850px)", "breakpoint_weight":"1", "breakpoint_multipliers":"1x"'
\ No newline at end of file
diff --git a/console/language/console-en/translations/generate.cache.context.yml b/console/language/console-en/translations/generate.cache.context.yml
deleted file mode 100644
index 6058d4af6d13e5dabff2b88b83e09a5f40586621..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/generate.cache.context.yml
+++ /dev/null
@@ -1,18 +0,0 @@
-description: 'Generate a cache context'
-help: 'The <info>generate:cache:context</info> command helps you generates a new cache context'
-welcome: 'Welcome to the Drupal Cache Context generator'
-options:
-  module: 'The Module name.'
-  name: 'The cache context name'
-  class: 'Cache context class name'
-questions:
-  module: 'Enter the module name'
-  name: 'Enter the cache context name'
-  class: 'Cache context class name'
-examples:
-  - description: 'Generate cache for a context specifying the module, the context name and its class'
-    execution: |
-      drupal generate:cache:context  \
-        --module="modulename"  \
-        --cache-context="ContextName"  \
-        --class="DefaultCacheContext"
\ No newline at end of file
diff --git a/console/language/console-en/translations/generate.command.yml b/console/language/console-en/translations/generate.command.yml
deleted file mode 100644
index 745203475b2924102a2bf908ed1e3f3f2f5d5caf..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/generate.command.yml
+++ /dev/null
@@ -1,31 +0,0 @@
-description: 'Generate commands for the console.'
-help: 'The <info>generate:command</info> command helps you generate a new command.'
-welcome: 'Welcome to the Drupal Command generator'
-options:
-  extension: 'The name of the Extension (that will contain the command).'
-  class: 'The Class that describes the command. (Must end with the word ''Command'').'
-  name: 'The Command name.'
-  interact: 'Add interact method.'
-  initialize: 'Add initialize method.'
-  container-aware: 'Is the command aware of the drupal site installation when executed?'
-  services: 'Load services from the container.'
-  generator: 'Add a Generator class for this command.'
-questions:
-  extension: 'Enter the extension name'
-  class: 'Enter the Command Class. (Must end with the word ''Command'').'
-  name: 'Enter the Command name.'
-  interact: 'Do you want to add the interact method?'
-  initialize: 'Do you want to add the initialize method?'
-  container-aware: 'Is the command aware of the drupal site installation when executed?'
-  services: 'Enter your service'
-  generator: 'Do you want to add a Generator class?.'
-messages:
-  title-not-empty: 'Title cannot be empty'
-examples:
-  - description: 'Generate a command specifying the extension name and type, its class and the name.'
-    execution: |
-      drupal generate:command  \
-        --extension="ExtensionName"  \
-        --extension-type="module"  \
-        --class="DefaultCommand"  \
-        --name="CommandName"
\ No newline at end of file
diff --git a/console/language/console-en/translations/generate.controller.yml b/console/language/console-en/translations/generate.controller.yml
deleted file mode 100644
index 5b05332f92ca8187850783fac12a1f56042c008e..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/generate.controller.yml
+++ /dev/null
@@ -1,30 +0,0 @@
-description: 'Generate & Register a controller'
-help: 'The <info>generate:controller</info> command helps you generate a new controller.'
-welcome: 'Welcome to the Drupal Controller generator'
-options:
-  module: 'The Module name.'
-  class: 'Controller Class name'
-  routes: 'The routes, must be an array containing [title, method, path]'
-  services: 'Load services from the container.'
-  test: 'Generate a test class'
-questions:
-  module: 'Enter the module name'
-  class: 'Enter the Controller class name'
-  title: 'Enter the Controller method title (to stop adding more methods, leave this empty)'
-  method: 'Enter the action method name'
-  path: 'Enter the route path'
-  services: 'Enter your service'
-  test: 'Do you want to generate a unit test class?'
-messages:
-  title-empty: 'Title must contain a value (you must enter at least one method)'
-  title-already-added: 'Title was already added'
-  method-name-already-added: 'Method name was already added'
-  path-already-added: 'Path was already added'
-examples:
-  - description: 'Generate controller specifying the module name, the class name and its routes'
-    execution: |
-      drupal generate:controller  \
-        --module="modulename"  \
-        --class="DefaultController"  \
-        --routes='"title":"ControllerMethod", "name":"modulename.default_controller_hello", "method":"hello", "path":"/modulename/hello/{name}"'  \
-        --test
\ No newline at end of file
diff --git a/console/language/console-en/translations/generate.entity.bundle.yml b/console/language/console-en/translations/generate.entity.bundle.yml
deleted file mode 100644
index f3106b3fc31f988a746a4046295d120f43d16b0a..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/generate.entity.bundle.yml
+++ /dev/null
@@ -1,20 +0,0 @@
-description: 'Generate a new content type (node / entity bundle)'
-help: 'The <info>generate:contenttype</info> command helps you generate a new content type.'
-welcome: 'Welcome to the Drupal Content Type generator'
-options:
-  module: 'The Module name.'
-  bundle-name: 'The content type''s machine name'
-  bundle-title: 'The content type''s human-readable name'
-questions:
-  module: 'Enter the module name'
-  bundle-name: 'Enter the machine name of your new content type'
-  bundle-title: 'Enter the human-readable name of your new content type'
-message:
-  error-state1: placeholder
-examples:
-  - description: 'Generate bundle entity specifying the module, the bundle name and its title'
-    execution: |
-      drupal generate:entity:bundle  \
-        --module="modulename"  \
-        --bundle-name="default"  \
-        --bundle-title="default"
\ No newline at end of file
diff --git a/console/language/console-en/translations/generate.entity.config.yml b/console/language/console-en/translations/generate.entity.config.yml
deleted file mode 100644
index 67b06b4cf9c81483ae7387a57889c8bff05aa17b..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/generate.entity.config.yml
+++ /dev/null
@@ -1,26 +0,0 @@
-description: 'Generate a new config entity'
-help: 'The <info>generate:config:entity</info> command helps you generate a new config entity.'
-welcome: 'Welcome to the Drupal Config Entity generator'
-options:
-  module: 'The Module name.'
-  entity-class: 'The config entity class'
-  entity-name: 'The config entity name'
-  label: 'The label'
-  bundle-of: 'Acts as bundle for content entities'
-  base-path: 'The base-path for the config entity routes'
-questions:
-  module: 'Enter the module name'
-  entity-class: 'Enter the class of your new config entity'
-  entity-name: 'Enter the name of your new config entity'
-  label: 'Enter the label of your new config entity'
-  bundle-of: 'Name of the content entity you want this (config) entity to act as a bundle for'
-  base-path: 'Enter the base-path for the config entity routes'
-examples:
-  - description: 'Generate config entity specifying the module, the entity class, the entity name, its path and label'
-    execution: |
-      drupal generate:entity:config  \
-        --module="modulename"  \
-        --entity-class="DefaultEntity"  \
-        --entity-name="default_entity"  \
-        --base-path="/admin/structure"  \
-        --label="Default entity"
\ No newline at end of file
diff --git a/console/language/console-en/translations/generate.entity.content.yml b/console/language/console-en/translations/generate.entity.content.yml
deleted file mode 100644
index 8be970c5256af4bf7e5704315ad3b6d4c0f434cb..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/generate.entity.content.yml
+++ /dev/null
@@ -1,39 +0,0 @@
-description: 'Generate a new content entity'
-help: 'The <info>generate:content:entity</info> command helps you generate a new content entity.'
-welcome: 'Welcome to the Drupal Content Entity generator'
-options:
-  module: 'The Module name.'
-  entity-class: 'The content entity class'
-  entity-name: 'The content entity name'
-  label: 'The label'
-  has-bundles: 'Entity has bundles'
-  base-path: 'The base-path for the content entity routes'
-  is-translatable: 'Content entity translatable'
-questions:
-  module: 'Enter the module name'
-  entity-class: 'Enter the class of your new content entity'
-  entity-name: 'Enter the machine name of your new content entity'
-  label: 'Enter the label of your new content entity'
-  has-bundles: 'Do you want this (content) entity to have bundles?'
-  base-path: 'Enter the base-path for the content entity routes'
-  is-translatable: 'Is your entity translatable?'
-  revisionable: 'Is your entity revisionable?'
-examples:
-  - description: 'Generate a content entity specifying the module, the entity class, the entity name, its path and label'
-    execution: |
-      drupal generate:entity:content  \
-        --module="modulename"  \
-        --entity-class="DefaultEntity"  \
-        --entity-name="default_entity"  \
-        --base-path="/admin/structure"  \
-        --label="Default entity"
-  - description: 'Generate a translatable and revisionable content entity specifying the module, the entity class, the entity name, its path and label'
-    execution: |
-      drupal generate:entity:content  \
-        --module="modulename"  \
-        --entity-class="DefaultEntity"  \
-        --entity-name="default_entity"  \
-        --base-path="/admin/structure"  \
-        --label="Default entity"  \
-        --is-translatable  \
-        --revisionable
\ No newline at end of file
diff --git a/console/language/console-en/translations/generate.event.subscriber.yml b/console/language/console-en/translations/generate.event.subscriber.yml
deleted file mode 100644
index 25561494054401086f6efcad80511d5768f83234..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/generate.event.subscriber.yml
+++ /dev/null
@@ -1,25 +0,0 @@
-description: 'Generate an event subscriber'
-help: 'The <info>generate:event:subscriber</info> command helps you generate a new event subscriber.'
-welcome: 'Welcome to the Drupal Event Subscriber generator'
-options:
-  module: 'The Module name.'
-  name: 'Service name'
-  class: 'Class name'
-  services: 'Load services from the container.'
-  event-name: 'Enter event name'
-  callback-name: 'Callback function name to handle event'
-questions:
-  module: 'Enter the module name'
-  name: 'Enter the service name'
-  class: 'Enter the class name'
-  services: 'Enter your service'
-  event-name: 'Enter event name'
-  callback-name: 'Enter the callback function name to handle event'
-examples:
-  - description: 'Generate an event subscriber specifying the module name, its name, the class and the events to subscribe'
-    execution: |
-      drupal generate:event:subscriber  \
-        --module="modulename"  \
-        --name="modulename.default"  \
-        --class="DefaultSubscriber"  \
-        --events='kernel_request'
diff --git a/console/language/console-en/translations/generate.form.alter.yml b/console/language/console-en/translations/generate.form.alter.yml
deleted file mode 100644
index afd16b83d67137d3739a1395b0c5f04e4efbb1d2..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/generate.form.alter.yml
+++ /dev/null
@@ -1,31 +0,0 @@
-description: 'Generate an implementation of hook_form_alter() or hook_form_FORM_ID_alter'
-help: 'The <info>"%s"</info> command helps you generate a new "%s"'
-welcome: 'Welcome to the Drupal Form Alter generator'
-options:
-  module: 'The Module name.'
-  form-id: 'Form ID to alter'
-  inputs: 'Create inputs in a form.'
-questions:
-  module: 'Enter the module name'
-  form-id: 'Enter the Form ID to alter'
-  type: 'Enter New field type'
-  label: 'Input label'
-  description: 'Description'
-  default-value: 'Default value'
-  weight: 'Weight for input item'
-messages:
-  inputs: "You can add form fields to modify form.\nThis is optional, press <info>enter</info> to <info>continue</info>"
-  loading-forms: 'Loading forms definition from Webprofiler module'
-  hide-form-elements: 'Optionally you can select form items for hide'
-  help-already-implemented: 'The hook form alter was already implemented in module "%s"'
-examples:
-  - description: 'Generate a hook form alter for an empty form specifying the module name'
-    execution: |
-      drupal generate:form:alter  \
-        --module="modulename"
-  - description: 'Generate a hook form alter with 2 fields specifying the module name and the inputs'
-    execution: |
-      drupal generate:form:alter  \
-        --module="modulename"  \
-        --inputs='"name":"inputtext", "type":"text_format", "label":"InputText", "options":"", "description":"Just an input text", "maxlength":"", "size":"", "default_value":"", "weight":"0", "fieldset":""'  \
-        --inputs='"name":"email", "type":"email", "label":"Email", "options":"", "description":"Just an email input", "maxlength":"", "size":"", "default_value":"", "weight":"0", "fieldset":""'
\ No newline at end of file
diff --git a/console/language/console-en/translations/generate.form.config.yml b/console/language/console-en/translations/generate.form.config.yml
deleted file mode 100644
index 7590be71868bed690e10ba401863231d0b9cfefb..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/generate.form.config.yml
+++ /dev/null
@@ -1,57 +0,0 @@
-description: 'Generate a new form config'
-help: 'The <info>generate:form:config</info> command helps you generate a new form config'
-welcome: 'Welcome to the Drupal Form Config generator'
-options:
-  module: 'The Module name.'
-  class: 'The form class name'
-  form-id: 'The Form id'
-  services: 'Load services from the container.'
-  config-file: 'Add a config file'
-  inputs: 'Create inputs in a form.'
-  path: 'Enter the form path'
-  menu-link-gen: 'Generate a menu link'
-  menu-link-title: 'A title for the menu link'
-  menu-parent: 'Menu parent'
-  menu-link-desc: 'A description for the menu link'
-questions:
-  module: 'Enter the module name'
-  class: 'Enter the Form Class name'
-  form-id: 'Enter the Form id'
-  services: 'Enter your service'
-  config-file: 'Do you want to generate a config file?'
-  routing: 'Would you like to register a route for this form?'
-  path: 'Enter the route path'
-  max-amount-characters: 'Maximum amount of characters'
-  textfield-width-in-chars: 'Width of the textfield (in characters)'
-  multiselect-size-in-lines: 'Size of multiselect box (in lines)'
-  input-options: 'Input options separated by comma'
-  menu-link-gen: 'Generate a menu link'
-  menu-link-title: 'Enter a title for the menu link'
-  menu-parent: 'Enter Menu parent'
-  menu-link-desc: 'Enter a description for the menu link'
-  type: 'Enter New field type'
-  label: 'Input label'
-  description: 'Description'
-  default-value: 'Default value'
-  weight: 'Weight for input item'
-suggestions:
-  description-for-menu: 'A description for the menu entry'
-examples:
-  - description: 'Generate an empty form with config file specifying the module name, the class, a form id and the path'
-    execution: |
-      drupal generate:form:config  \
-        --module="modulename"  \
-        --class="DefaultForm"  \
-        --form-id="default_form"  \
-        --config-file  \
-        --path="/modulename/form/default"
-  - description: 'Generate a form with 2 fields and a config file specifying the module name, the class, a form id, the inputs and the path'
-    execution: |
-      drupal generate:form:config  \
-        --module="modulename"  \
-        --class="DefaultForm"  \
-        --form-id="default_form"  \
-        --config-file  \
-        --inputs='"name":"inputname", "type":"text_format", "label":"InputName", "options":"", "description":"Just a text input", "maxlength":"", "size":"", "default_value":"", "weight":"0", "fieldset":""'  \
-        --inputs='"name":"email", "type":"email", "label":"Email", "options":"", "description":"Just an email input", "maxlength":"", "size":"", "default_value":"", "weight":"0", "fieldset":""'  \
-        --path="/modulename/form/default"
diff --git a/console/language/console-en/translations/generate.form.yml b/console/language/console-en/translations/generate.form.yml
deleted file mode 100644
index 75ec09e6387681f5598446c8c26654c0e89409c1..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/generate.form.yml
+++ /dev/null
@@ -1,57 +0,0 @@
-description: 'Generate a new "%s"'
-help: 'The <info>"%s"</info> command helps you generate a new "%s"'
-welcome: 'Welcome to the Drupal Form generator'
-options:
-  module: 'The Module name.'
-  class: 'The form class name'
-  form-id: 'The Form id'
-  services: 'Load services from the container.'
-  config-file: 'Add a config file'
-  inputs: 'Create inputs in a form.'
-  path: 'Enter the form path'
-  menu-link-gen: 'Generate a menu link'
-  menu-link-title: 'A title for the menu link'
-  menu-parent: 'Menu parent'
-  menu-link-desc: 'A description for the menu link'
-questions:
-  module: 'Enter the module name'
-  class: 'Enter the Form Class name'
-  form-id: 'Enter the Form id'
-  services: 'Enter your service'
-  config-file: 'Do you want to generate a config file?'
-  routing: 'Would you like to register a route for this form?'
-  path: 'Enter the route path'
-  max-amount-characters: 'Maximum amount of characters'
-  textfield-width-in-chars: 'Width of the textfield (in characters)'
-  multiselect-size-in-lines: 'Size of multiselect box (in lines)'
-  input-options: 'Input options separated by comma'
-  menu-link-gen: 'Generate a menu link'
-  menu-link-title: 'Enter a title for the menu link'
-  menu-parent: 'Enter Menu parent'
-  menu-link-desc: 'Enter a description for the menu link'
-  type: 'Enter New field type'
-  label: 'Input label'
-  description: 'Description'
-  default-value: 'Default value'
-  weight: 'Weight for input item'
-suggestions:
-  description-for-menu: 'A description for the menu entry'
-examples:
-  - description: 'Generate an empty form with config file specifying the module name, the class, a form id and the path'
-    execution: |
-      drupal generate:form  \
-        --module="modulename"  \
-        --class="DefaultForm"  \
-        --form-id="default_form"  \
-        --config-file  \
-        --path="/modulename/form/default"
-  - description: 'Generate a form with 2 fields and a config file specifying the module name, the class, a form id, the inputs and the path'
-    execution: |
-      drupal generate:form  \
-        --module="modulename"  \
-        --class="DefaultForm"  \
-        --form-id="default_form"  \
-        --config-file  \
-        --inputs='"name":"inputname", "type":"text_format", "label":"InputName", "options":"", "description":"Just a text input", "maxlength":"", "size":"", "default_value":"", "weight":"0", "fieldset":""'  \
-        --inputs='"name":"email", "type":"email", "label":"Email", "options":"", "description":"Just an email input", "maxlength":"", "size":"", "default_value":"", "weight":"0", "fieldset":""'  \
-        --path="/modulename/form/default"
diff --git a/console/language/console-en/translations/generate.help.yml b/console/language/console-en/translations/generate.help.yml
deleted file mode 100644
index 7f04a2d6e26087d620acfcb50e45ee1a8a862dd3..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/generate.help.yml
+++ /dev/null
@@ -1,17 +0,0 @@
-description: 'Generate an implementation of hook_help()'
-help: 'The <info>"%s"</info> command helps you generate a hook help "%s"'
-welcome: 'Welcome to the Drupal Help generator'
-options:
-  module: 'The Module name.'
-  description: 'Module description'
-questions:
-  module: 'Enter the module name'
-  description: 'Enter module description'
-messages:
-  help-already-implemented: 'The hook help was already implemented in module "%s"'
-examples:
-  - description: 'Generate a hook help specifying the module name and the description'
-    execution: |
-      drupal generate:help  \
-        --module="modulename"  \
-        --description="My Awesome Module"
\ No newline at end of file
diff --git a/console/language/console-en/translations/generate.jstest.yml b/console/language/console-en/translations/generate.jstest.yml
deleted file mode 100644
index 3d6f828a8ddc4a3ad610df2d01a4642da1f9c175..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/generate.jstest.yml
+++ /dev/null
@@ -1,22 +0,0 @@
-description: 'Generate a JavaScript test.'
-help: 'The <info>generate:jstest</info> command helps you to generate a new JavaScript test.'
-welcome: 'Welcome to the Drupal module generator'
-options:
-  class: 'JavaScript test Class name'
-questions:
-  module: common.questions.module
-  class: 'Enter the JavaScript test class name'
-examples:
-  - description: 'Generate a module specifying the module name, machine name, the path, its description, drupal core and the package name. In this example the composer file, the unit test and twig template are generated too'
-    execution: |
-      drupal generate:module  \
-        --module="modulename"  \
-        --machine-name="modulename"  \
-        --module-path="/modules/custom"  \
-        --description="My Awesome Module"  \
-        --core="8.x"  \
-        --package="Custom"  \
-        --module-file  \
-        --composer  \
-        --test  \
-        --twigtemplate
diff --git a/console/language/console-en/translations/generate.module.file.yml b/console/language/console-en/translations/generate.module.file.yml
deleted file mode 100644
index abaedd57b103a9e7975702acc5856c0bdc6e71d3..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/generate.module.file.yml
+++ /dev/null
@@ -1,12 +0,0 @@
-description: 'Generate a .module file'
-help: 'The <info>generate:module:file</info> command helps you to generate a new .module file'
-welcome: 'Welcome to the Drupal Module File generator'
-options:
-  module: 'The Module name'
-questions:
-  module: 'Enter the new module name'
-examples:
-  - description: 'Generate the .module file specifying the module name'
-    execution: |
-      drupal generate:module:file  \
-        --module="modulename"
\ No newline at end of file
diff --git a/console/language/console-en/translations/generate.module.yml b/console/language/console-en/translations/generate.module.yml
deleted file mode 100644
index 12925f2fe64c58f51f4d2e4e1ad3540e82fee8f8..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/generate.module.yml
+++ /dev/null
@@ -1,51 +0,0 @@
-description: 'Generate a module.'
-help: 'The <info>generate:module</info> command helps you generates a new module.'
-welcome: 'Welcome to the Drupal module generator'
-options:
-  module: 'The Module name'
-  machine-name: 'The machine name (lowercase and underscore only)'
-  module-path: 'The path of the module'
-  description: 'Module description'
-  core: 'Core version'
-  features-bundle: 'Define module as feature using the given Features bundle name'
-  package: 'Module package'
-  module-file: 'Add a .module file'
-  composer: 'Add a composer.json file'
-  dependencies: 'Module dependencies separated by commas (i.e. context, panels)'
-  test: 'Generate a test class'
-  twigtemplate: 'Generate theme template'
-questions:
-  module: 'Enter the new module name'
-  machine-name: 'Enter the module machine name'
-  module-path: 'Enter the module Path'
-  description: 'Enter module description'
-  core: 'Enter Drupal Core version'
-  package: 'Enter package name'
-  features-support: 'Define module as feature'
-  features-bundle: 'Enter Features bundle name'
-  module-file: 'Do you want to generate a .module file?'
-  composer: 'Do you want to add a composer.json file to your module?'
-  dependencies: 'Would you like to add module dependencies?'
-  test: 'Do you want to generate a unit test class?'
-  twigtemplate: 'Do you want to generate a themeable template?'
-suggestions:
-  my-awesome-module: 'My Awesome Module'
-warnings:
-  module-unavailable: 'Warning The following modules are not available "%s"'
-errors:
-  invalid-core: 'The core version "%s" is invalid.'
-  directory-exists: 'The target directory "%s" is not empty.'
-examples:
-  - description: 'Generate a module specifying the module name, machine name, the path, its description, drupal core and the package name. In this example the composer file, the unit test and twig template are generated too'
-    execution: |
-      drupal generate:module  \
-        --module="modulename"  \
-        --machine-name="modulename"  \
-        --module-path="/modules/custom"  \
-        --description="My Awesome Module"  \
-        --core="8.x"  \
-        --package="Custom"  \
-        --module-file  \
-        --composer  \
-        --test  \
-        --twigtemplate
diff --git a/console/language/console-en/translations/generate.permissions.yml b/console/language/console-en/translations/generate.permissions.yml
deleted file mode 100644
index 83a30fbb6a1e471ae7d25ffaacf93b4f053f6a89..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/generate.permissions.yml
+++ /dev/null
@@ -1,15 +0,0 @@
-description: 'Generate module permissions'
-help: 'The <info>generate:permissions</info> command helps you generate new permissions'
-welcome: 'Welcome to the Drupal Permission generator'
-options:
-  module: 'The Module name.'
-questions:
-  module: 'Enter the module name'
-  permission: 'Enter a permission'
-  title: 'Enter a title for the permission'
-  description: 'Enter a description for the permission'
-  restrict-access: 'Restrict Access'
-  add: 'Do you want to add another permission?'
-suggestions:
-  access-content: 'Access content'
-  allow-access-content: 'Allow access to my content'
diff --git a/console/language/console-en/translations/generate.plugin.block.yml b/console/language/console-en/translations/generate.plugin.block.yml
deleted file mode 100644
index 6510194d09ab14b859ee14734139238710d7b2a2..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/generate.plugin.block.yml
+++ /dev/null
@@ -1,36 +0,0 @@
-description: 'Generate a plugin block'
-help: 'The <info>generate:plugin:block</info> command helps you generate a new Plugin block.'
-welcome: 'Welcome to the Drupal Plugin Block generator'
-options:
-  module: 'The Module name.'
-  class: 'Plugin class name'
-  label: 'Plugin label'
-  plugin-id: 'Plugin id'
-  inputs: 'Create inputs in a form.'
-  services: 'Load services from the container.'
-  theme-region: 'Theme region to render Plugin Block'
-questions:
-  module: 'Enter the module name'
-  class: 'Enter the plugin class name'
-  label: 'Enter the plugin label'
-  plugin-id: 'Enter the plugin id'
-  services: 'Enter your service'
-  theme-region: 'Enter the theme region to render the Plugin Block.'
-  type: 'Enter New field type'
-  label: 'Input label'
-  description: 'Description'
-  default-value: 'Default value'
-  weight: 'Weight for input item'
-messages:
-  inputs: "\nYou can add input fields to create special configurations in the block.\nThis is optional, press <info>enter</info> to <info>continue</info>"
-  invalid-theme-region: 'Region "%s" is invalid'
-examples:
-  - description: 'Generate a plugin block in the header region with an input field specifying the module name, the class, the label, its id, the region and the input'
-    execution: |
-      drupal generate:plugin:block  \
-        --module="modulename"  \
-        --class="DefaultBlock"  \
-        --label="Default block"  \
-        --plugin-id="default_block"  \
-        --theme-region="header"  \
-        --inputs='"name":"inputtext", "type":"text_format", "label":"InputText", "options":"", "description":"Just an input text", "maxlength":"", "size":"", "default_value":"", "weight":"0", "fieldset":""'
\ No newline at end of file
diff --git a/console/language/console-en/translations/generate.plugin.ckeditorbutton.yml b/console/language/console-en/translations/generate.plugin.ckeditorbutton.yml
deleted file mode 100644
index 36d5c7f61e385ee526d4801c944c0f82c242df0c..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/generate.plugin.ckeditorbutton.yml
+++ /dev/null
@@ -1,27 +0,0 @@
-description: 'Generate CKEditor button plugin.'
-help: 'The <info>generate:plugin:ckeditorbutton</info> command helps you generate a new CKEditor button plugin.'
-welcome: 'Welcome to the Drupal CKEditor Button Plugin generator'
-options:
-  module: 'The Module name.'
-  class: 'Plugin class name'
-  label: 'Plugin label'
-  plugin-id: 'Plugin ID. NOTE: This corresponds to the CKEditor plugin name. It is the first argument of the CKEDITOR.plugins.add() function in the plugin.js file.'
-  button-name: 'Button name. NOTE: This corresponds to the CKEditor button name. They are the first argument of the editor.ui.addButton() or editor.ui.addRichCombo() functions in the plugin.js file.'
-  button-icon-path: 'Button icon path. This is the path to the icon/image of the button.'
-questions:
-  module: 'Enter the module name'
-  class: 'Enter the plugin class name'
-  label: 'Enter the plugin label'
-  plugin-id: 'Enter the plugin ID. NOTE: This corresponds to the CKEditor plugin name. It is the first argument of the CKEDITOR.plugins.add() function in the plugin.js file.'
-  button-name: 'Enter the button name. NOTE: This corresponds to the CKEditor button name. They are the first argument of the editor.ui.addButton() or editor.ui.addRichCombo() functions in the plugin.js file.'
-  button-icon-path: 'Enter the button icon path'
-examples:
-  - description: 'Generate plugin CKEditor button specifying the module name, the class, the label, its id, the button name and the icon path'
-    execution: |
-      drupal generate:plugin:ckeditorbutton  \
-        --module="modulename"  \
-        --class="DefaultCKEditorButton"  \
-        --label="Default ckeditor button"  \
-        --plugin-id="default ckeditor button"  \
-        --button-name="Default ckeditor button"  \
-        --button-icon-path="modules/custom/modulename/js/plugins/default ckeditor button/images/icon.png"
\ No newline at end of file
diff --git a/console/language/console-en/translations/generate.plugin.condition.yml b/console/language/console-en/translations/generate.plugin.condition.yml
deleted file mode 100644
index 0f8d78bb733b1184041a5de22f7599f14e1c2e8e..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/generate.plugin.condition.yml
+++ /dev/null
@@ -1,52 +0,0 @@
-description: 'Generate a plugin condition.'
-help: 'The <info>generate:plugin:conditon</info> command helps you generate a plugin condition.'
-welcome: 'Welcome to the Drupal Plugin Condition generator'
-options:
-  module: 'The Module name.'
-  class: 'Plugin condition class name'
-  label: 'Plugin condition label'
-  plugin-id: 'Plugin condition id'
-  context-definition-id: 'Context definition ID'
-  context-definition-label: 'Context definition label'
-  context-definition-required: 'Context definition is required (TRUE/FALSE)'
-questions:
-  module: 'Enter the module name'
-  class: 'Enter the plugin condition class name'
-  label: 'Enter the plugin condition label'
-  plugin-id: 'Enter the plugin condition id'
-  context-type: 'Context type'
-  context-entity-type: 'Context entity type'
-  context-definition-id: 'Context definition ID'
-  context-definition-label: 'Context definition label'
-  context-definition-required: 'Context definition is required'
-examples:
-  - description: 'Generate a plugin condition for a node entity type specifying the module name, the class, the label, its id and the context definition'
-    execution: |
-      drupal generate:plugin:condition  \
-        --module="modulename"  \
-        --class="ExampleCondition"  \
-        --label="Example condition"  \
-        --plugin-id="example_condition"  \
-        --context-definition-id="entity:node"  \
-        --context-definition-label="node"  \
-        --context-definition-required
-  - description: 'Generate a plugin condition for language specifying the module name, the class, the label, its id and the context definition'
-    execution: |
-      drupal generate:plugin:condition  \
-        --module="modulename"  \
-        --class="ExampleCondition"  \
-        --label="Example condition"  \
-        --plugin-id="example_condition"  \
-        --context-definition-id="language"  \
-        --context-definition-label="Language"  \
-        --context-definition-required
-  - description: 'Generate a plugin condition for role configuration specifying the module name, the class, the label, its id and the context definition'
-    execution: |
-      drupal generate:plugin:condition  \
-        --module="modulename"  \
-        --class="ExampleCondition"  \
-        --label="Example condition"  \
-        --plugin-id="example_condition"  \
-        --context-definition-id="entity:user_role"  \
-        --context-definition-label="user_role"  \
-        --context-definition-required
diff --git a/console/language/console-en/translations/generate.plugin.field.yml b/console/language/console-en/translations/generate.plugin.field.yml
deleted file mode 100644
index 343506876836ce7193905e4d9915825a5e36f0c3..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/generate.plugin.field.yml
+++ /dev/null
@@ -1,53 +0,0 @@
-description: 'Generate field type, widget and formatter plugins.'
-help: 'The <info>generate:plugin:field</info> command helps you generate a full set of field plugin: field type, field formatter and field widget.'
-welcome: 'Welcome to the Drupal Field Plugin generator'
-options:
-  module: 'The Module name.'
-  type-class: 'Field type plugin class name'
-  type-label: 'Field type plugin label'
-  type-plugin-id: 'Field type plugin id'
-  type-description: 'Field type plugin description'
-  formatter-class: 'Field formatter plugin class name'
-  formatter-label: 'Field formatter plugin label'
-  formatter-plugin-id: 'Field formatter plugin id'
-  widget-class: 'Field widget plugin class name'
-  widget-label: 'Field widget plugin label'
-  widget-plugin-id: 'Field widget plugin id'
-  field-type: 'Field type the formatter and widget plugin can be used with'
-  default-widget: 'Default field widget of the field type plugin'
-  default-formatter: 'Default field formatter of field type plugin'
-questions:
-  module: 'Enter the module name'
-  type-class: 'Enter field type plugin class name'
-  type-label: 'Enter the field type plugin label'
-  type-plugin-id: 'Enter the field type plugin id'
-  type-description: 'Enter the field type plugin description'
-  formatter-class: 'Enter the field formatter plugin class name'
-  formatter-label: 'Enter the field formatter plugin label'
-  formatter-plugin-id: 'Enter the field formatter plugin id'
-  widget-class: 'Enter the field widget plugin class name'
-  widget-label: 'Enter the field widget plugin label'
-  widget-plugin-id: 'Enter the field widget plugin id'
-  field-type: 'Enter the field type the formatter and widget plugin can be used with'
-  default-widget: 'Enter the default field widget of the field type plugin'
-  default-formatter: 'Enter the default field formatter of field type plugin'
-suggestions:
-  my-field-type: 'My Field Type'
-examples:
-  - description: 'Generate field type, widget and formatter plugins specifying the module name, the type (class, label, plugin id and description), the formatter (class, label, plugin id) and the widget (class, label and plugin id)'
-    execution: |
-      drupal generate:plugin:field  \
-        --module="modulename"  \
-        --type-class="ExampleFieldType"  \
-        --type-label="Example field type"  \
-        --type-plugin-id="example_field_type"  \
-        --type-description="My Field Type"  \
-        --formatter-class="ExampleFormatterType"  \
-        --formatter-label="Example formatter type"  \
-        --formatter-plugin-id="example_formatter_type"  \
-        --widget-class="ExampleWidgetType"  \
-        --widget-label="Example widget type"  \
-        --widget-plugin-id="example_widget_type"  \
-        --field-type="example_field_type"  \
-        --default-widget="example_widget_type"  \
-        --default-formatter="example_formatter_type"
diff --git a/console/language/console-en/translations/generate.plugin.fieldformatter.yml b/console/language/console-en/translations/generate.plugin.fieldformatter.yml
deleted file mode 100644
index b8189e8e79067958ff8c5f20b5135abe60bd9723..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/generate.plugin.fieldformatter.yml
+++ /dev/null
@@ -1,24 +0,0 @@
-description: 'Generate field formatter plugin.'
-help: 'The <info>generate:plugin:fieldformatter</info> command helps you generate a new field formatter plugin.'
-welcome: 'Welcome to the Drupal Field Formatter Plugin generator'
-options:
-  module: 'The Module name.'
-  class: 'Plugin class name'
-  label: 'Plugin label'
-  plugin-id: 'Plugin id'
-  field-type: 'Field type the plugin can be used with'
-questions:
-  module: 'Enter the module name'
-  class: 'Enter the plugin class name'
-  label: 'Enter the plugin label'
-  plugin-id: 'Enter the plugin id'
-  field-type: 'Enter the field type the plugin can be used with'
-examples:
-  - description: 'Generate a text field formatter plugin specifying the module name, the class, the label its plugin id and the field type'
-    execution: |
-      drupal generate:plugin:fieldformatter  \
-        --module="modulename"  \
-        --class="ExampleFieldFormatter"  \
-        --label="Example field formatter"  \
-        --plugin-id="example_field_formatter"  \
-        --field-type="text"
diff --git a/console/language/console-en/translations/generate.plugin.fieldtype.yml b/console/language/console-en/translations/generate.plugin.fieldtype.yml
deleted file mode 100644
index e2c5b3ead8338869d51fa5ebd18e46c19631c20a..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/generate.plugin.fieldtype.yml
+++ /dev/null
@@ -1,40 +0,0 @@
-description: 'Generate field type plugin.'
-help: 'The <info>generate:plugin:fieldtype</info> command helps you generate a new field type plugin.'
-welcome: 'Welcome to the Drupal Field Type Plugin generator'
-options:
-  module: 'The Module name.'
-  class: 'Plugin class name'
-  label: 'Plugin label'
-  plugin-id: 'Plugin id'
-  description: 'Plugin Description'
-  default-widget: 'Default field widget of this plugin'
-  default-formatter: 'Default field formatter of this plugin'
-questions:
-  module: 'Enter the module name'
-  class: 'Enter the plugin class name'
-  label: 'Enter the plugin label'
-  plugin-id: 'Enter the plugin id'
-  description: 'Enter the plugin Description'
-  default-widget: 'Enter the default field widget of this plugin'
-  default-formatter: 'Enter the default field formatter of this plugin'
-suggestions:
-  my-field-type: 'My Field Type'
-examples:
-  - description: 'Generate a field type plugin specifying the module name, the class, its label, the plugin id and a description'
-    execution: |
-      drupal generate:plugin:fieldtype  \
-        --module="modulename"  \
-        --class="ExampleFieldType"  \
-        --label="Example field type"  \
-        --plugin-id="example_field_type"  \
-        --description="My Field Type"
-  - description: 'Generate a field type plugin with a default widget and formatter specifying the module name, the class, its label, the plugin id and a description'
-    execution: |
-      drupal generate:plugin:fieldtype  \
-        --module="modulename"  \
-        --class="ExampleFieldType"  \
-        --label="Example field type"  \
-        --plugin-id="example_field_type"  \
-        --description="My Field Type"  \
-        --default-widget="DefaultWidget"  \
-        --default-formatter="DefaultFormatter"
diff --git a/console/language/console-en/translations/generate.plugin.fieldwidget.yml b/console/language/console-en/translations/generate.plugin.fieldwidget.yml
deleted file mode 100644
index 3b284693500ff537d88473b36f4767e80aca340d..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/generate.plugin.fieldwidget.yml
+++ /dev/null
@@ -1,24 +0,0 @@
-description: 'Generate field widget plugin.'
-help: 'The <info>generate:plugin:fieldwidget</info> command helps you generate a new field widget plugin.'
-welcome: 'Welcome to the Drupal Field Widget Plugin generator'
-options:
-  module: 'The Module name.'
-  class: 'Plugin class name'
-  label: 'Plugin label'
-  plugin-id: 'Plugin id'
-  field-type: 'Field type the plugin can be used with'
-questions:
-  module: 'Enter the module name'
-  class: 'Enter the plugin class name'
-  label: 'Enter the plugin label'
-  plugin-id: 'Enter the plugin id'
-  field-type: 'Enter the field type the plugin can be used with'
-examples:
-  - description: 'Generate a text type field widget plugin specifying the module name, the class, its label, the plugin id and the field type'
-    execution: |
-      drupal generate:plugin:fieldwidget  \
-        --module="modulename"  \
-        --class="ExampleFieldWidget"  \
-        --label="Example field widget"  \
-        --plugin-id="example_field_widget"  \
-        --field-type="text"
diff --git a/console/language/console-en/translations/generate.plugin.imageeffect.yml b/console/language/console-en/translations/generate.plugin.imageeffect.yml
deleted file mode 100644
index f03b61eefe326671e5b22b252d2d543070e6c270..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/generate.plugin.imageeffect.yml
+++ /dev/null
@@ -1,26 +0,0 @@
-description: 'Generate image effect plugin.'
-help: 'The <info>generate:plugin:imageeffect</info> command helps you generate a new image effect plugin.'
-welcome: 'Welcome to the Drupal Image Effect Plugin generator'
-options:
-  module: 'The Module name.'
-  class: 'Plugin class name'
-  label: 'Plugin label'
-  plugin-id: 'Plugin id'
-  description: 'Plugin Description'
-questions:
-  module: 'Enter the module name'
-  class: 'Enter the plugin class name'
-  label: 'Enter the plugin label'
-  plugin-id: 'Enter the plugin id'
-  description: 'Enter the plugin Description'
-suggestions:
-  my-image-effect: 'My Image Effect'
-examples:
-  - description: 'Generate a image effect plugin specifying the module name, the class, its label, the plugin id and a description'
-    execution: |
-      drupal generate:plugin:imageeffect  \
-        --module="modulename"  \
-        --class="DefaultImageEffect"  \
-        --label="Default image effect"  \
-        --plugin-id="default_image_effect"  \
-        --description="My Image Effect"
diff --git a/console/language/console-en/translations/generate.plugin.imageformatter.yml b/console/language/console-en/translations/generate.plugin.imageformatter.yml
deleted file mode 100644
index 9505b8f191267a63401a5a2c97fc376b714402d7..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/generate.plugin.imageformatter.yml
+++ /dev/null
@@ -1,21 +0,0 @@
-description: 'Generate image formatter plugin.'
-help: 'The <info>generate:plugin:imageformatter</info> command helps you generate a new image formatter plugin.'
-welcome: 'Welcome to the Drupal Image Formatter Plugin generator'
-options:
-  module: 'The Module name.'
-  class: 'Plugin class name'
-  label: 'Plugin label'
-  plugin-id: 'Plugin id'
-questions:
-  module: 'Enter the module name'
-  class: 'Enter the plugin class name'
-  label: 'Enter the plugin label'
-  plugin-id: 'Enter the plugin id'
-examples:
-  - description: 'Generate a image formatter plugin specifying the module name, the class, its label and the plugin id'
-    execution: |
-      drupal generate:plugin:imageformatter  \
-        --module="modulename"  \
-        --class="ExampleImageFormatter"  \
-        --label="Example image formatter"  \
-        --plugin-id="example_image_formatter"
diff --git a/console/language/console-en/translations/generate.plugin.mail.yml b/console/language/console-en/translations/generate.plugin.mail.yml
deleted file mode 100644
index b44e937b2f322d26236b659da49a92d7d61c2ad4..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/generate.plugin.mail.yml
+++ /dev/null
@@ -1,25 +0,0 @@
-description: 'Generate a plugin mail'
-help: 'The <info>generate:plugin:mail</info> command helps you generate a new Plugin mail.'
-welcome: 'Welcome to the Drupal Plugin Mail generator'
-options:
-  module: 'The Module name.'
-  class: 'Plugin class name'
-  label: 'Plugin label'
-  plugin-id: 'Plugin id'
-  inputs: 'Create inputs in a form.'
-  services: 'Load services from the container.'
-questions:
-  module: 'Enter the module name'
-  class: 'Enter the plugin class name'
-  label: 'Enter the plugin label'
-  plugin-id: 'Enter the plugin id'
-  inputs: common.questions.inputs
-  services: 'Enter your service'
-examples:
-  - description: 'Generate an email plugin specifying the module name, the class, its label and the plugin id'
-    execution: |
-      drupal generate:plugin:mail  \
-        --module="modulename"  \
-        --class="HtmlFormatterMail"  \
-        --label="Html formatter mail"  \
-        --plugin-id="html_formatter_mail"
diff --git a/console/language/console-en/translations/generate.plugin.migrate.process.yml b/console/language/console-en/translations/generate.plugin.migrate.process.yml
deleted file mode 100644
index 1990ba01eddb99f5c92afe706ff66d6332ec4e3e..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/generate.plugin.migrate.process.yml
+++ /dev/null
@@ -1,18 +0,0 @@
-description: 'Generate a migrate process plugin'
-help: 'Creates new process plugin for the migration.'
-welcome: 'Welcome to the Drupal Migrate Process Plugin generator'
-options:
-  module: 'The Module name.'
-  class: 'Plugin class name'
-  plugin-id: 'Plugin id'
-questions:
-  module: 'Enter the module name'
-  class: 'Enter the migration process plugin class name'
-  plugin-id: 'Enter the migration process plugin id'
-examples:
-  - description: 'Generate a migration plugin process specifying the module name, the class and its id'
-    execution: |
-      drupal generate:plugin:migrate:process  \
-        --module="modulename"  \
-        --class="MigrationProcess"  \
-        --plugin-id="migrationprocess"
diff --git a/console/language/console-en/translations/generate.plugin.migrate.source.yml b/console/language/console-en/translations/generate.plugin.migrate.source.yml
deleted file mode 100644
index 081b5204fcf11929b3ac70913d68612adbaac006..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/generate.plugin.migrate.source.yml
+++ /dev/null
@@ -1,41 +0,0 @@
-description: 'Generate a migrate source plugin'
-help: 'The <info>generate:migrate:plugin:source</info> command helps you generate a new migrate source plugin.'
-welcome: 'Welcome to the Drupal Migrate Source Plugin generator'
-options:
-  module: 'The Module name.'
-  class: 'Plugin class name'
-  plugin-id: 'Plugin id'
-  table: 'Table to query'
-  alias: 'Short alias to refer to the table as'
-  group-by: 'Field to group results by'
-  fields: 'Fields to export'
-questions:
-  module: 'Enter the module name'
-  class: 'Enter the plugin class name'
-  plugin-id: 'Enter the plugin id'
-  table: 'Enter the table name'
-  alias: 'Enter the alias for the table'
-  group-by: 'Enter a field to group by if desired'
-  id: 'Enter the field id or press <info>enter</enter> if done'
-  description: 'Enter the field description'
-examples:
-  - description: 'Generate a migration source plugin specifying the module name, the class, its plugin id, the table and its alias'
-    execution: |
-      drupal generate:plugin:migrate:source  \
-        --module="modulename"  \
-        --class="PluginClassName"  \
-        --plugin-id="plugin_class_name"  \
-        --table="DefaultTableName"  \
-        --alias="D"
-  - description: 'Generate a migration source plugin for specific fields of the users table specifying the module name, the class, its plugin id, the table, its alias and the fields'
-    execution: |
-      drupal generate:plugin:migrate:source  \
-        --module="modulename"  \
-        --class="DefaultPluginClass"  \
-        --plugin-id="default_plugin_class"  \
-        --table="users"  \
-        --alias="u"  \
-        --fields='"id":"id", "description":"the user id"'  \
-        --fields='"id":"username", "description":"the username"'  \
-        --fields='"id":"password", "description":"the user password"'  \
-        --fields='"id":"email", "description":"the user email"'
diff --git a/console/language/console-en/translations/generate.plugin.rest.resource.yml b/console/language/console-en/translations/generate.plugin.rest.resource.yml
deleted file mode 100644
index aa56387869a1257c11e4b11940c379a7f3aff348..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/generate.plugin.rest.resource.yml
+++ /dev/null
@@ -1,29 +0,0 @@
-description: 'Generate plugin rest resource'
-help: 'The <info>generate:plugin:rest:resource</info> command helps you generate a new rest resource.'
-welcome: 'Welcome to the Drupal Plugin Rest Resource generator'
-options:
-  module: 'The Module name.'
-  class: 'Plugin Rest Resource class'
-  plugin-id: 'Plugin Rest Resource id'
-  plugin-label: 'Plugin Rest Resource Label'
-  plugin-url: 'Plugin Rest Resource URL'
-  plugin-states: 'Plugin Rest Resource States'
-questions:
-  module: 'Enter the module name'
-  class: 'Enter the plugin rest resource class name'
-  plugin-id: 'Enter the plugin rest resource id'
-  plugin-label: 'Enter the plugin rest resource label'
-  plugin-url: 'Enter the plugin rest resource url'
-  plugin-states: 'Please select what REST States implement in your resource (GET is selected by default)'
-messages:
-  selected-states: 'States selected'
-examples:
-  - description: 'Generate a rest resource plugin using GET specifying the module name, the class, the plugin id, its label, the target url and the request type'
-    execution: |
-      drupal generate:plugin:rest:resource  \
-        --module="modulename"  \
-        --class="DefaultRestResource"  \
-        --plugin-id="default_rest_resource"  \
-        --plugin-label="Default rest resource"  \
-        --plugin-url="http://rest.resources.example.com"  \
-        --plugin-states='GET'
diff --git a/console/language/console-en/translations/generate.plugin.skeleton.yml b/console/language/console-en/translations/generate.plugin.skeleton.yml
deleted file mode 100644
index 1bf61e7359dd7bfc9d9df51c51d938241403d70c..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/generate.plugin.skeleton.yml
+++ /dev/null
@@ -1,24 +0,0 @@
-description: 'Generate an implementation of a skeleton plugin'
-help: 'The <info>"%s"</info> command helps you generate a skeleton plugin "%s".'
-welcome: 'Welcome to the Drupal Skeleton Plugin generator'
-
-options:
-  module: 'The Module name.'
-  plugin: 'The Plugin Id.'
-  class: 'Plugin class name'
-  services: 'Load services from the container.'
-questions:
-  module: 'Enter the module name'
-  plugin: 'Enter the Plugin Id'
-  class: 'Enter the plugin class name'
-  services: 'Enter your service'
-messages:
-  plugin-dont-exist: 'The plugin "%s" does not exist.'
-  plugin-generator-implemented: 'Plugin "%s" already has an advanced command generator, please use "%s"'
-examples:
-  - description: 'Generate a plugin skeleton specifying module name, the plugin id and the class'
-    execution: |
-      drupal generate:plugin:skeleton  \
-        --module="modulename"  \
-        --plugin-id="link_relation_type"  \
-        --class="DefaultLinkRelationType"
diff --git a/console/language/console-en/translations/generate.plugin.type.annotation.yml b/console/language/console-en/translations/generate.plugin.type.annotation.yml
deleted file mode 100644
index b75e064252f8264c711061e52d11b699dca9097d..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/generate.plugin.type.annotation.yml
+++ /dev/null
@@ -1,21 +0,0 @@
-description: 'Generate a plugin type with annotation discovery'
-help: 'The <info>generate:plugin:type:annotation</info> command helps you generate a new Plugin type that uses annotation discovery.'
-welcome: 'Welcome to the Drupal Plugin Type Annotation generator'
-options:
-  module: common.options.module
-  class: 'Plugin type class name'
-  machine-name: 'Plugin type machine name'
-  label: 'Plugin type label'
-questions:
-  module: common.questions.module
-  class: 'Enter the plugin type class name'
-  machine-name: 'Enter the plugin type machine name'
-  label: 'Enter the plugin type label'
-examples:
-  - description: 'Generate a plugin with annotation discovery specifying module name, class name, machine name and label'
-    execution: |
-      drupal generate:plugin:type:annotation  \
-        --module="modulename"  \
-        --class="ExamplePlugin"  \
-        --machine-name="example_plugin"  \
-        --label="Example plugin"
diff --git a/console/language/console-en/translations/generate.plugin.type.yaml.yml b/console/language/console-en/translations/generate.plugin.type.yaml.yml
deleted file mode 100644
index 63f0963b91174fa0f848a30961b64e018ed73a66..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/generate.plugin.type.yaml.yml
+++ /dev/null
@@ -1,21 +0,0 @@
-description: 'Generate a plugin type with Yaml discovery'
-help: 'The <info>generate:plugin:type:yaml</info> command helps you generate a new Plugin type that uses Yaml discovery.'
-welcome: 'Welcome to the Drupal Plugin Type Yaml generator'
-options:
-  module: 'The Module name.'
-  class: 'Plugin type class name'
-  plugin-name: 'Plugin type machine name'
-  plugin-file-name: 'Plugin file name'
-questions:
-  module: 'Enter the module name'
-  class: 'Enter the plugin type class name'
-  plugin-name: 'Enter the plugin type machine name'
-  plugin-file-name: 'Enter the plugin file name (e.g. MODULE.plugin.filename.yml)'
-examples:
-  - description: 'Generate a plugin with Yaml discovery specifying module name, class name, plugin name and plugin file name'
-    execution: |
-      drupal generate:plugin:type:yaml  \
-        --module="modulename"  \
-        --class="ExamplePlugin"  \
-        --plugin-name="example_plugin"  \
-        --plugin-file-name="example.plugin"
diff --git a/console/language/console-en/translations/generate.plugin.views.field.yml b/console/language/console-en/translations/generate.plugin.views.field.yml
deleted file mode 100644
index 5d8675471385e9a3ae5ed1c973baf3c2e50d0dc3..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/generate.plugin.views.field.yml
+++ /dev/null
@@ -1,22 +0,0 @@
-description: 'Generate a custom plugin view field.'
-help: 'The <info>generate:plugin:views:field</info> command helps you generate a new custom views field plugin.'
-welcome: 'Welcome to the Drupal Plugin View Field generator'
-options:
-  module: 'The Module name.'
-  class: 'Views plugin field class name'
-  title: 'Views plugin field title'
-  description: 'Views plugin field description'
-questions:
-  module: 'Enter the module name'
-  class: 'Enter the views plugin field class name'
-  title: 'Enter the views plugin field title'
-  description: 'Enter the views plugin field description'
-  description_default: 'My awesome custom views field plugin.'
-examples:
-  - description: 'Generate a custom view field plugin specifying the module name, the class, a title and its description'
-    execution: |
-      drupal generate:plugin:views:field  \
-        --module="modulename"  \
-        --class="CustomViewsField"  \
-        --title="Custom views field"  \
-        --description="My awesome custom views field plugin."
diff --git a/console/language/console-en/translations/generate.post.update.yml b/console/language/console-en/translations/generate.post.update.yml
deleted file mode 100644
index 6957876cd81293324e8721e7d796223a1ba6fdbc..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/generate.post.update.yml
+++ /dev/null
@@ -1,18 +0,0 @@
-description: 'Generate an implementation of hook_post_update_NAME()'
-help: 'The <info>"%s"</info> command helps you generate a hook post update NAME "%s"'
-welcome: 'Welcome to the Drupal Post Updat generator'
-options:
-  module: 'The Module name.'
-  post-update-name: 'Post Update Name'
-questions:
-  module: 'Enter the module name'
-  post-update-name: 'Please provide the Post Update Name to be implemeted'
-messages:
-  wrong-post-update-name: 'The post update name "%s" is invalid'
-  post-update-name-already-implemented: 'The post update name "%s" was already implemented'
-examples:
-  - description: 'Generate an implementation of post update hook specifying the module name and the post update name'
-    execution: |
-      drupal generate:post:update  \
-        --module="modulename"  \
-        --post-update-name="PostUpdateName"
diff --git a/console/language/console-en/translations/generate.profile.yml b/console/language/console-en/translations/generate.profile.yml
deleted file mode 100644
index c0375696eae34c4a53c2834d0e6bb3b90f6d5897..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/generate.profile.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-description: 'Generate a profile.'
-help: 'The <info>generate:profile</info> command helps you generate a new installation profile.'
-welcome: 'Welcome to the Drupal installation profile generator'
-options:
-  profile: 'The profile name'
-  machine-name: 'The machine name (lowercase and underscore only)'
-  profile-path: 'The path of the profile'
-  description: 'Profile description'
-  core: 'Core version'
-  dependencies: 'Module dependencies separated by commas (i.e. context, panels)'
-  themes: 'the theme name'
-  distribution: 'The distribution name'
-questions:
-  profile: 'Enter the name of the new profile'
-  machine-name: 'Enter the machine name'
-  profile-path: 'Enter the profile Path'
-  description: 'Enter the description'
-  core: 'Enter Drupal Core version'
-  dependencies: 'Would you like to add module dependencies?'
-  themes: 'Enter theme name'
-  distribution: 'Is this install profile intended to be a distribution?'
-suggestions:
-  my-useful-profile: 'My Useful Profile'
-  my-kick-ass-distribution: 'My Kick-ass Distribution'
-warnings:
-  module-unavailable: 'Warning: The following modules are not available in your local environment "%s"'
-errors:
-  directory-exists: 'The target directory "%s" is not empty.'
-examples:
-  - description: 'Generate a profile specifying the profile name, the machine name, a description, the core and its module dependencies'
-    execution: |
-      drupal generate:profile  \
-        --profile="NewProfileName"  \
-        --machine-name="newprofilename"  \
-        --description="My Useful Profile"  \
-        --core="8.x"  \
-        --dependencies="modulename"
diff --git a/console/language/console-en/translations/generate.routesubscriber.yml b/console/language/console-en/translations/generate.routesubscriber.yml
deleted file mode 100644
index f509067a1cb808083e437398dd409b888dafd5df..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/generate.routesubscriber.yml
+++ /dev/null
@@ -1,18 +0,0 @@
-description: 'Generate a RouteSubscriber'
-help: 'The <info>generate:service</info> command helps you generate a new RouteSubscriber.'
-welcome: 'Welcome to the Drupal RouteSubscriber generator.'
-options:
-  module: 'The Module name.'
-  name: 'Service name'
-  class: 'Class name'
-questions:
-  module: 'Enter the module name'
-  name: 'Enter the service name'
-  class: 'Enter the Class name'
-examples:
-  - description: 'Generate a route subscriber specifying the module name, the route name and its class'
-    execution: |
-      drupal generate:routesubscriber  \
-        --module="modulename"  \
-        --name="modulename.route_subscriber"  \
-        --class="RouteSubscriber"
diff --git a/console/language/console-en/translations/generate.service.yml b/console/language/console-en/translations/generate.service.yml
deleted file mode 100644
index 567907b14b50c4121fc787b3a460fa2b27d04784..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/generate.service.yml
+++ /dev/null
@@ -1,38 +0,0 @@
-description: 'Generate service'
-help: 'The <info>generate:service</info> command helps you generate a new service.'
-welcome: 'Welcome to the Drupal service generator'
-options:
-  module: 'The Module name.'
-  service-name: 'Service name'
-  class: 'Class name'
-  interface: 'Interface'
-  interface-name: 'Interface name'
-  services: 'Load services from the container.'
-  path-service:  'Path'
-questions:
-  module: 'Enter the module name'
-  service-name: 'Enter the service name'
-  class: 'Enter the Class name'
-  interface: 'Create an interface'
-  interface-name: 'Enter the interface name'
-  services: 'Enter your service'
-  path-service: 'Enter the path for the services'
-messages:
-  service-already-taken: 'The service name has been already taken in module "%s"'
-examples:
-  - description: 'Generate a services without interface specifying the module name, the service name, the class and its path'
-    execution: |
-      drupal generate:service  \
-        --module="modulename"  \
-        --name="modulename.default"  \
-        --class="DefaultService"  \
-        --path-service="/modules/custom/modulename/src/"
-  - description: 'Generate a services with interface specifying the module name, the service name, the class, the interface name and its path'
-    execution: |
-      drupal generate:service  \
-        --module="modulename"  \
-        --name="modulename.default"  \
-        --class="DefaultService"  \
-        --interface  \
-        --interface-name="InterfaceName"  \
-        --path-service="/modules/custom/modulename/src/"
diff --git a/console/language/console-en/translations/generate.site.alias.yml b/console/language/console-en/translations/generate.site.alias.yml
deleted file mode 100644
index ca3a7c179db84c6b2456d6d07472b2c729cfabb7..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/generate.site.alias.yml
+++ /dev/null
@@ -1,25 +0,0 @@
-description: 'Generates a site alias.'
-help: 'The <info>generate:site:alias</info> command helps you generate a new site alias.'
-options:
-  name: 'Site name.'
-  environment: 'Environment name.'
-  type: 'The site type.'
-  composer-root: 'The Drupal root project directory.'
-  host: 'The ip/domain name of the remote system. Not required on local sites.'
-  port: 'The port to use when connecting via ssh.'
-  user: 'The username to use when connecting via ssh.'
-  extra-options: 'Used only when the target requires extra options, such as alternative authentication method and/or alternative identity file.'
-  site-uri: 'Drupal uri (for multi-sites).'
-  directory: 'Directory to store the generated site alias.'
-  site: 'Use local site as destination.'
-questions:
-  name: 'Select or enter the site name'
-  environment: 'Enter the environment name (dev, test, prod, qa, dev.uri, test.uri, etc...)'
-  type: 'Select site type. Allowed options [local, ssh or container].'
-  composer-root: 'Enter the Drupal root project directory.'
-  host: 'Enter the ip/domain name of the remote system.'
-  port: 'Enter the port to use when connecting via ssh.'
-  user: 'Enter the username to use when connecting via ssh.'
-  extra-options: 'Select or enter a valid extra option.'
-  site-uri: 'Enter the Drupal uri (for multi-sites).'
-  directory: 'Select the directory to store the generated site alias.'
diff --git a/console/language/console-en/translations/generate.theme.yml b/console/language/console-en/translations/generate.theme.yml
deleted file mode 100644
index 9b54abd9430995c87813164b3a975b8d9b1697ec..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/generate.theme.yml
+++ /dev/null
@@ -1,73 +0,0 @@
-description: 'Generate a theme.'
-help: 'The <info>generate:theme</info> command helps you generates a new theme.'
-welcome: 'Welcome to the Drupal theme generator'
-options:
-  theme: 'The theme name'
-  machine-name: 'The machine name (lowercase and underscore only)'
-  theme-path: 'The path of the theme'
-  description: 'Theme description'
-  core: 'Core version'
-  package: 'Theme package'
-  composer: 'Add a composer.json file'
-  base-theme: 'Base theme (i.e. classy, stable)'
-  global-library: 'Global styling library name'
-  libraries: 'Libraries'
-  regions: Regions
-  breakpoints: Breakpoints
-questions:
-  theme: 'Enter the new theme name'
-  machine-name: 'Enter the theme machine name'
-  theme-path: 'Enter the theme Path'
-  description: 'Enter theme description'
-  core: 'Enter Drupal Core version'
-  package: 'Enter package name'
-  dependencies: 'Would you like to add module dependencies?'
-  invalid-theme: 'Invalid "%s" theme was selected'
-  global-library: 'Enter the global styling library name'
-  library-add: 'Do you want to add another library?'
-  library-name: 'Enter library name'
-  library-version: 'Enter library version'
-  regions: 'Do you want to generate the theme regions?'
-  region-name: 'Enter region name'
-  region-machine-name: 'Enter region machine name'
-  region-add: 'Do you want to add another region?'
-  breakpoints: 'Do you want to generate the theme breakpoints?'
-  breakpoint-name: 'Enter breakpoint name'
-  breakpoint-label: 'Enter breakpoint label'
-  breakpoint-media-query: 'Enter breakpoint media query'
-  breakpoint-weight: 'Enter breakpoint weight'
-  breakpoint-multipliers: 'Enter breakpoint multipliers'
-  breakpoint-add: 'Do you want to add another breakpoint?'
-suggestions:
-  my-awesome-theme: 'My Awesome theme'
-  other: 'Other'
-warnings:
-  module-unavailable: 'Warning The following modules are not available in your local environment "%s"'
-errors:
-  directory-exists: 'The target directory "%s" is not empty.'
-examples:
-  - description: 'Generate a theme without region and without breakpoint specifying the theme name, its machine name, the theme path, a description, the drupal core, the package name and the global library'
-    execution: |
-      drupal generate:theme  \
-        --theme="AnotherTheme"  \
-        --machine-name="anothertheme"  \
-        --theme-path="themes/custom"  \
-        --description="My Awesome theme"  \
-        --core="8.x"  \
-        --package="PackageName"  \
-        --global-library="global-styling"  \
-        --base-theme="false"
-  - description: 'Generate a theme base on stable theme with two region defined and one breakpoint specifying the theme name, its machine name, the theme path, a description, the drupal core, the package name, a global library, its base, the regions and the breakpoint'
-    execution: |
-      drupal generate:theme \
-        --theme="MyTheme" \
-        --machine-name="mytheme" \
-        --theme-path="themes/custom" \
-        --description="My Awesome theme" \
-        --core="8.x" \
-        --package="MyThemePackage" \
-        --global-library="global-styling" \
-        --base-theme="stable" \
-        --regions='"region_name":"Content", "region_machine_name":"content"' \
-        --regions='"region_name":"Panel", "region_machine_name":"panel"' \
-        --breakpoints='"breakpoint_name":"narrow", "breakpoint_label":"narrow", "breakpoint_media_query":"all and (min-width: 560px) and (max-width: 850px)", "breakpoint_weight":"1", "breakpoint_multipliers":"1x"'
diff --git a/console/language/console-en/translations/generate.twig.extension.yml b/console/language/console-en/translations/generate.twig.extension.yml
deleted file mode 100644
index ae84a7e492873a45558be0151bc6f8335d725934..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/generate.twig.extension.yml
+++ /dev/null
@@ -1,20 +0,0 @@
-description: 'Generate a Twig extension.'
-help: 'The <info>generate:twig:extension</info> command helps you to generate a Twig extension.'
-welcome: 'Welcome to the Drupal Twig Extension generator'
-options:
-  module: 'The Module name.'
-  name: 'Twig Extension name'
-  class: 'Class name'
-  services: 'Load services from the container.'
-questions:
-  module: 'Enter the module name'
-  name: 'Enter the twig Extension name'
-  class: 'Class name'
-  services: 'Enter your service'
-examples:
-  - description: 'Generate a twig extension specifying the module name, the extension name and its class'
-    execution: |
-      drupal generate:twig:extension  \
-        --module="modulename"  \
-        --name="modulename.twig.extension"  \
-        --class="DefaultTwigExtension"
diff --git a/console/language/console-en/translations/generate.update.yml b/console/language/console-en/translations/generate.update.yml
deleted file mode 100644
index 614b4216dac9a3fb624e0bd8c2d029243d634623..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/generate.update.yml
+++ /dev/null
@@ -1,17 +0,0 @@
-description: 'Generate an implementation of hook_update_N()'
-help: 'The <info>"%s"</info> command helps you generate a hook update N "%s"'
-welcome: 'Welcome to the Drupal Update generator'
-options:
-  module: 'The Module name.'
-  update-n: 'Update Number'
-questions:
-  module: 'Enter the module name'
-  update-n: 'Please provide the Update N to be implemeted'
-messages:
-  wrong-update-n: 'The update number "%s" is invalid'
-examples:
-  - description: 'Generate an update N hook implementation specifying the module name and the N value'
-    execution: |
-      drupal generate:update  \
-        --module="modulename"  \
-        --update-n="8001"
diff --git a/console/language/console-en/translations/help.yml b/console/language/console-en/translations/help.yml
deleted file mode 100644
index d8deefc5b1f7e96a4c90aac500d84fab91b38d71..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/help.yml
+++ /dev/null
@@ -1,19 +0,0 @@
-description: 'Displays help for a command'
-help: |
-        The <info>%command.name%</info> command displays help for a given command:
-
-        <info>php %command.full_name% list</info>
-
-        You can also output the help in other formats by using the <comment>--format</comment> option:
-
-        <info>php %command.full_name% --format=xml list</info>
-
-        To display the list of available commands, please use the <info>list</info> command.
-arguments:
-    command-name: 'The command name'
-options:
-    xml: 'To output list as XML'
-    raw: 'To output raw command list'
-    format: 'The output format (txt, xml, json, or md)'
-messages:
-    deprecated: 'The <comment>--xml</comment> option was deprecated in version 2.7 and will be removed in version 3.0. Use the <comment>--format</comment> option instead'
diff --git a/console/language/console-en/translations/image.styles.flush.yml b/console/language/console-en/translations/image.styles.flush.yml
deleted file mode 100644
index f613fad83aa350dc11e33af84dd27c1b8516845c..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/image.styles.flush.yml
+++ /dev/null
@@ -1,15 +0,0 @@
-description: 'Execute flush function by image style or execute all flush images styles'
-messages:
-  executing-flush: 'Executing flush function on image style "%s"'
-  success: 'All flush functions requested were executed successfully'
-options:
-  image-style: 'The Images Styles name.'
-questions:
-  image-style: 'Select Images Styles to flush.'
-examples:
-  - description: 'Flush large image style'
-    execution: |
-      drupal image:styles:flush  large
-  - description: 'Flush thumbnail image style'
-    execution: |
-      drupal image:styles:flush  thumbnail
diff --git a/console/language/console-en/translations/init.yml b/console/language/console-en/translations/init.yml
deleted file mode 100644
index d2bc26a8aa6a46d951df57f86c5fd488649918a6..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/init.yml
+++ /dev/null
@@ -1,17 +0,0 @@
-description: 'Copy configuration files.'
-options:
-  destination: 'Destination directory to copy files'
-  override: 'Override configurations files flag'
-  autocomplete: 'Autocomplete tool files flag.'
-  site: 'Use local site as destination.'
-questions:
-  destination: 'Select destination to copy configuration'
-  autocomplete: 'Generate autocomplete files'
-  language: 'Select language'
-  temp: 'Enter temporary file path'
-  chain: 'Copy chain files examples'
-  sites: 'Copy site alias files examples'
-  temp: 'Enter temporary file path'
-  learning: 'Shows information for learning purposes?'
-  generate-inline: 'Show inline representation of the executed command?'
-  generate-chain: 'Show chain representation of the executed command?'
diff --git a/console/language/console-en/translations/list.yml b/console/language/console-en/translations/list.yml
deleted file mode 100644
index 7683426e1f7a16cd7dd447f552a8f22e0d8799a8..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/list.yml
+++ /dev/null
@@ -1,25 +0,0 @@
-description: 'Lists all available commands'
-help: |
-  The <info>%command.name%</info> command lists all commands:
-  <info>php %command.full_name%</info>
-  You can also display the commands for a specific namespace:
-  <info>php %command.full_name% test</info>
-  You can also output the information in other formats by using the <comment>--format</comment> option:
-  <info>php %command.full_name% --format=xml</info>
-  It's also possible to get raw list of commands (useful for embedding command runner):
-  <info>php %command.full_name% --raw</info>
-arguments:
-  namespace: 'The namespace name'
-options:
-  xml: 'To output list as XML'
-  raw: 'To output raw command list'
-  format: 'The output format (txt, xml, json, or md)'
-
-messages:
-  usage: "<comment>Usage:</comment>\n"
-  usage-details: "  command [options] [arguments]\n\n"
-  arguments: '<comment>Arguments:</comment>'
-  options: '<comment>Options:</comment>'
-  help: '<comment>Help:</comment>'
-  comment: '<comment>Available commands for the "%s" namespace:</comment>'
-  available-commands: '<comment>Available commands:</comment>'
diff --git a/console/language/console-en/translations/locale.language.add.yml b/console/language/console-en/translations/locale.language.add.yml
deleted file mode 100644
index 29fa09e8f71c10165e9c70e4a07370396f555028..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/locale.language.add.yml
+++ /dev/null
@@ -1,8 +0,0 @@
-description: 'Add languages to be supported by your site'
-messages:
-  invalid-language: 'Language "%s" is an invalid language'
-  invalid-languages: 'Languages "%s" are invalid'
-  language-add-successfully: 'Language "%s" was added successfully.'
-  languages-add-successfully: 'Languages "%s" were added successfully.'
-  language-installed: 'Language "%s" is already installed.'
-  languages-installed: 'Languages "%s" are already installed.'
diff --git a/console/language/console-en/translations/locale.language.delete.yml b/console/language/console-en/translations/locale.language.delete.yml
deleted file mode 100644
index df219c2cad37ad5f6e400b96c5a3ae3e4379c9b2..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/locale.language.delete.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-description: 'Delete a language to be supported by your site'
-messages:
-  invalid-language: 'Language "%s" it''s an invalid language'
-  language-deleted-successfully: 'Language "%s" was deleted successfully.'
diff --git a/console/language/console-en/translations/locale.translation.status.yml b/console/language/console-en/translations/locale.translation.status.yml
deleted file mode 100644
index e1e219cbecba6f5fca2a4cb33fe7d8f2e6293822..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/locale.translation.status.yml
+++ /dev/null
@@ -1,18 +0,0 @@
-description: 'List available translation updates'
-arguments:
-  language: 'Language for instance es or Spanish'
-messages:
-  no-languages: 'No translatable languages available. Add a language first.'
-  up-to-date: 'All translations up to date.'
-  no-translations: 'No translation status available. Check manually'
-  project: 'Project'
-  version: 'Version'
-  local-age: 'Local age'
-  remote-age: 'Remote age'
-  info: Information
-  no-translation-files: 'No translation files are provided for development releases.'
-  file-not-found: 'File not found at "%s" nor at "%s"'
-  local-file-not-found: 'File not found at "%s"'
-  translation-not-determined: 'Translation file location could not be determined.'
-  translation-project-updated: 'Updated'
-  translation-project-available: 'New translation available'
diff --git a/console/language/console-en/translations/migrate.debug.yml b/console/language/console-en/translations/migrate.debug.yml
deleted file mode 100644
index be97f1186dfebb89e3c3f22cc8a11e4d061ded05..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/migrate.debug.yml
+++ /dev/null
@@ -1,8 +0,0 @@
-description: 'Displays current migration available for the application'
-arguments:
-    tag: 'Migrate tag'
-messages:
-    id: 'Migration Id'
-    description: Description
-    no-migrations: 'There aren''t migrations available try to execute command: migrate:setup:migrations'
-    tags: Tags
diff --git a/console/language/console-en/translations/migrate.execute.yml b/console/language/console-en/translations/migrate.execute.yml
deleted file mode 100644
index 393e0895cd222109343e97b5f86dd329bdb6c947..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/migrate.execute.yml
+++ /dev/null
@@ -1,40 +0,0 @@
-description: 'Execute a migration available for application'
-arguments:
-    id: 'Migration id(s)'
-options:
-    site-url: 'Site Source URL'
-    db-file: 'Database File'
-    db-host: 'Database Host'
-    db-name: 'Database Name'
-    db-user: 'Database User'
-    db-pass: 'Database Pass'
-    db-prefix: 'Database Prefix'
-    db-port: 'Database Port'
-    exclude: 'Migration id(s) to exclude'
-    source-base-path:  'Local file directory containing your source site (e.g. /var/www/docroot), or your site address (for example http://example.com)'
-questions:
-    id: 'Migration Id'
-    exclude-id: 'Migration Id to exclude (press <return> to stop adding migrations to exclude)'
-    other-id: 'Other migration id (press <return> to stop adding migrations)'
-    site-url: 'Source Site URL'
-    db-file: 'Database File'
-    db-host: 'Database Host'
-    db-name: 'Database Name'
-    db-user: 'Database User'
-    db-pass: 'Database Pass'
-    db-prefix: 'Database Prefix'
-    db-port: 'Database Port'
-    invalid-migration-id: 'Migration Id "%s" is invalid'
-    source-base-path:  'Local file directory containing your source site (e.g. /var/www/docroot), or your site address (for example http://example.com)'
-messages:
-    processing: 'Processing Migration "%s"'
-    imported: 'Migration "%s" was imported correctly'
-    fail-load: 'Migration "%s" can''t be loaded'
-    importing-incomplete: 'Importing migration "%s"'
-    import-stopped: 'Import "%s" stopped by request'
-    import-fail: 'Import "%s" failed'
-    import-skipped: 'Import "%s" was skipped due to unfulfilled dependencies'
-    wrong-source: 'Upgrading from this version of Drupal is not supported.'
-    destination-error: 'Database destination error'
-    source-error: 'Database source error'
-    no-migrations: 'There are not migrations available to be executed'
diff --git a/console/language/console-en/translations/migrate.rollback.yml b/console/language/console-en/translations/migrate.rollback.yml
deleted file mode 100644
index 36666266ff2bc7a57564e189788a4b0daa811fbd..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/migrate.rollback.yml
+++ /dev/null
@@ -1,6 +0,0 @@
-description: 'Rollback one or multiple migrations'
-arguments:
-    id: 'Migration id(s)'
-messages:
-    not-available: 'Migration Id "%s" is invalid.Skipping'
-    processing: 'Rollback "%s" completed'
\ No newline at end of file
diff --git a/console/language/console-en/translations/migrate.setup.yml b/console/language/console-en/translations/migrate.setup.yml
deleted file mode 100644
index 70d61207e5c8de90b8f0bc45f82be4ca4b080fbd..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/migrate.setup.yml
+++ /dev/null
@@ -1,24 +0,0 @@
-description: 'Load and create the relevant migrations for a provided legacy database'
-options:
-    db-type: 'Drupal Database type'
-    db-host: 'Database Host'
-    db-name: 'Database Name'
-    db-user: 'Database User'
-    db-pass: 'Database Pass'
-    db-prefix: 'Database Prefix'
-    db-port: 'Database Port'
-    source-base-path:  'Local file directory containing your source site (e.g. /var/www/docroot), or your site address (for example http://example.com)'
-questions:
-    db-type: 'Drupal Database type'
-    db-host: 'Database Host'
-    db-name: 'Database Name'
-    db-user: 'Database User'
-    db-pass: 'Database Pass'
-    db-prefix: 'Database Prefix'
-    db-port: 'Database Port'
-    source-base-path:  'Local file directory containing your source site (e.g. /var/www/docroot), or your site address (for example http://example.com)'
-messages:
-    not-drupal: 'Source database does not contain a recognizable Drupal version.'
-    migrations-created: '"%s" migrations were created successfully for "%s".'
-    migrations-not-found: 'There aren''t migrations available'
-    migrations-already-exist: 'All migrations available are already created'
diff --git a/console/language/console-en/translations/module.dependency.install.yml b/console/language/console-en/translations/module.dependency.install.yml
deleted file mode 100644
index f8ccae9b87ba2bc3f0f7c4e39857cfe01e5e2ba4..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/module.dependency.install.yml
+++ /dev/null
@@ -1,11 +0,0 @@
-description: 'Install dependencies module in the application'
-arguments:
-  module: 'Module or modules to be enabled should be separated by a space'
-messages:
-  no-depencies: 'Nothing to do. This module does not have any dependencies to install'
-  installing: 'Installing module(s) "%s"'
-  success: 'The following module(s) were installed successfully: "%s"'
-examples:
-    - description: 'Install the dependencies of the specfied module'
-      execution: |
-        drupal module:dependency:install  modulename
diff --git a/console/language/console-en/translations/module.download.yml b/console/language/console-en/translations/module.download.yml
deleted file mode 100644
index 03e3c478ef2182723454184bf71aace154c854f8..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/module.download.yml
+++ /dev/null
@@ -1,25 +0,0 @@
-description: 'Download module or modules in application'
-arguments:
-  module: 'Module or modules to be enabled should be separated by a space'
-options:
-  latest: 'Default to download most recent version'
-  path: 'The path of the contrib project'
-  composer: 'Option to point out that the module will be downloaded, managed & installed by Composer'
-  unstable: 'Module unstable'
-questions:
-  path: 'Enter the contrib project Path'
-messages:
-  no-releases: 'There aren''t any releases for module "%s"'
-  getting-releases: 'Getting releases for module "%s"'
-  downloading: 'Downloading module "%s" release "%s"'
-  downloaded: 'Module "%s" version "%s" was downloaded successfully at "%s"'
-  select-release: 'Please select your favorite release'
-  outside-drupal: 'Drupal root can''t be determined. Use --root to set the destination, current folder will be used instead of.'
-  error-creating-folder: 'Error creating folder "%s", please check your permissions'
-  no-composer-repo: 'Please, configure Composer in ~/.console/config.yml'
-  composer: 'Module "%s" was downloaded successfully using Composer'
-examples:
-  - description: 'Download module specifying module name and its path'
-    execution: |
-      drupal module:download  modulename  \
-        --path="modules/contrib"
diff --git a/console/language/console-en/translations/module.install.yml b/console/language/console-en/translations/module.install.yml
deleted file mode 100644
index 8aa35ec1af8c6ff6315e9b533cd54ddd74dcc206..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/module.install.yml
+++ /dev/null
@@ -1,35 +0,0 @@
-description: 'Install module or modules in the application'
-arguments:
-  module: 'Module or modules to be enabled should be separated by a space'
-options:
-  latest: 'Default to download most recent version'
-  composer: 'Download the module using Composer'
-questions:
-  module: 'Module name (press <return> to stop adding modules)'
-  invalid-module: 'Invalid module "%s"'
-messages:
-  no-modules: 'You must provide module or modules to enable.'
-  missing: 'Unable to install module(s) "%s" due to missing module(s) "%s"'
-  missing-dependencies: 'Unable to install modules "%s" due to missing dependencies "%s"'
-  nothing: 'Nothing to do. All modules are already installed'
-  dependencies: 'Are you sure you want to install dependencies: "%s"?'
-  success: 'The following module(s) were installed successfully: "%s"'
-  disabled-modules: 'Only disabled modules will be listed in autocomplete'
-  config-conflict-overwrite: 'These configuration objects will be overwritten in your active configuration'
-  config-conflict: 'These configuration objects already exist in active configuration, installation is not possible'
-  getting-missing-modules: 'One or more modules "%s" are not available, running download process to get those modules'
-  getting-releases: 'Getting releases for module "%s"'
-  select-release: 'Please select your favorite release'
-  downloading: 'Downloading module "%s" release "%s"'
-  downloaded: 'Module "%s" version "%s" was downloaded successfully at "%s"'
-  no-releases: 'There aren''t any releases for module "%s"'
-  installing: 'Installing module(s) "%s"'
-  composer: 'The module was installed successfully with Composer'
-  error-creating-folder: 'Error creating folder "%s", please check your permissions'
-  download-with-composer: 'Module "%s" was downloaded with Composer.'
-  not-installed-with-composer: 'Module "%s" seems not to be installed with Composer. Halting.'
-  invalid-name: 'Invalid module name: "%s"'
-examples:
-  - description: 'Install module specifying the module name'
-    execution: |
-      drupal module:install  modulename
diff --git a/console/language/console-en/translations/module.path.yml b/console/language/console-en/translations/module.path.yml
deleted file mode 100644
index 70407ffa3e8ac4724529bbe8132f01978caecab2..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/module.path.yml
+++ /dev/null
@@ -1,10 +0,0 @@
-description: 'Returns the relative path to the module (or absolute path)'
-arguments:
-  module: 'The Module name (machine name)'
-options:
-  absolute: 'Return module absolute path'
-messages:
-examples:
-  - description: 'Get the relative path of the module specifying the module name'
-    execution: |
-      drupal module:path  modulename
diff --git a/console/language/console-en/translations/module.uninstall.yml b/console/language/console-en/translations/module.uninstall.yml
deleted file mode 100644
index 3b6d6a822590dfd4f3825b98454defb4286b7b9e..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/module.uninstall.yml
+++ /dev/null
@@ -1,19 +0,0 @@
-description: 'Uninstall module or modules in the application'
-questions:
-  module: 'Module name (press <return> to stop adding modules)'
-  invalid-module: 'Invalid module "%s"'
-options:
-  module: 'Module or modules to be uninstalled should be separated by a space'
-  force: 'Do you want to ignore dependencies and forcefully uninstall the module?'
-  composer: 'Uninstalls the module using Composer'
-messages:
-  no-modules: 'You must provide module or modules to uninstall.'
-  dependents: 'Unable to uninstall modules "%s" because are required by "%s"'
-  nothing: 'Nothing to do. All modules are already uninstalled'
-  success: 'The following module(s) were uninstalled successfully: "%s"'
-  missing: 'Unable to uninstall modules "%s" due to missing modules "%s"'
-  composer-success: 'You should execute now the following command: "composer remove vendor/package"'
-examples:
-  - description: 'Uninstall the module specifying the module name'
-    execution: |
-      drupal module:uninstall  modulename
diff --git a/console/language/console-en/translations/module.update.yml b/console/language/console-en/translations/module.update.yml
deleted file mode 100644
index 0bd1729eaee99d7d049e8e4810a0196671437bce..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/module.update.yml
+++ /dev/null
@@ -1,19 +0,0 @@
-description: 'Update core, module or modules in the application'
-arguments:
-  module: 'Module or modules to be updated should be separated by a space. Leave empty for updating the core and all your modules managed by Composer.'
-options:
-  composer: 'Update the module using Composer'
-  simulate: 'Simulate the update process with Composer'
-questions:
-  module: 'Module name (press <return> to stop adding modules)'
-  invalid-module: 'Invalid module "%s"'
-messages:
-  success: 'The following module(s) were installed successfully: "%s"'
-  composer: 'The module "%s" was managed successfully with Composer'
-  only-composer: 'This command only updates modules via Composer. Use --composer option.'
-  missing-module: 'Enter a module(s) name(s) to update.'
-examples:
-    - description: 'Update module specifying module name and composer parameter'
-      execution: |
-        drupal module:update  modulename  \
-          --composer
diff --git a/console/language/console-en/translations/multisite.new.yml b/console/language/console-en/translations/multisite.new.yml
deleted file mode 100644
index 0f361ba2a3d89dd2c09842fa10ce0cc687aff970..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/multisite.new.yml
+++ /dev/null
@@ -1,28 +0,0 @@
-description: 'Sets up the files for a new multisite install.'
-help: 'The <info>multisite:new</info> command assists in setting up new multisite installs by creating the needed subdirectory and files, and can optionally copy an existing ''default'' installation.'
-arguments:
-  directory: 'Name of directory under ''sites'' which should be created.'
-  uri: 'Site URI to add to sites.php.'
-options:
-  copy-default: 'Copies existing site from the default install.'
-errors:
-  subdir-empty: 'You must specify a multisite subdirectory to create.'
-  subdir-exists: 'The "sites/%s" directory already exists.'
-  default-missing: 'The sites/default directory is missing.'
-  mkdir-fail: 'Unable to create "sites/%s". Please check the sites directory permissions and try again.'
-  sites-invalid: 'The sites.php file located is either not readable or not a file.'
-  sites-missing: 'No sites.php or example.sites.php to copy from.'
-  sites-other: 'A problem was encountered when attempting to write sites.php'
-  file-missing: 'The file "%s" was not found for copying.'
-  copy-fail: 'Unable to copy "%s" to "%s". Please check permissions and try again.'
-  write-fail: 'Unable to write to the file "%s". Please check the file permissions and try again.'
-  chmod-fail: 'Unable to change permissions on the file "%s". Please ensure that the permissions on that file are correct.'
-warnings:
-  missing-files: 'No sites/default/files directory found. The files directory will need to be created by hand.'
-messages:
-  copy-default: 'The default install was successfully copied to "sites/%s".'
-  fresh-site: 'The new multisite structure was successfully created at "sites/%s" and is ready for installation.'
-examples:
-  - description: 'Set up files for a multisite install specifying destination path and uri'
-    execution: |
-      drupal multisite:new  vendor/newsite http://mysite.example.com
diff --git a/console/language/console-en/translations/multisite.update.yml b/console/language/console-en/translations/multisite.update.yml
deleted file mode 100644
index 0da5c900db7068081718a96162b5d2ce6503634e..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/multisite.update.yml
+++ /dev/null
@@ -1,22 +0,0 @@
-description: 'Update the files for a multisite installed.'
-help: 'The <info>multisite:new</info> command assists in setting up new multisite installs by creating the needed subdirectory and files, and can optionally copy an existing ''default'' installation.'
-options:
-  uri: 'Name of old directory under ''sites'' which should be updated.'
-  directory: 'Name of new directory for multisite installed. (You could create subdir separated by ''/'')'
-questions:
-  uri: 'Choice the multisite to update'
-  directory: 'Enter the new name (You could use subdir separated by ''/'')'
-errors:
-  invalid-uri: 'The --uri="%s" does not exist'
-  uri-dir-empty: 'You must specify a old multisite directory to update.'
-  new-dir-empty: 'You must specify a new name to update multisite.'
-  subdir-exists: 'The "sites/%s" directory already exists.'
-  mkdir-fail: 'Unable to create "sites/%s". Please check the sites directory permissions and try again.'
-  copy-fail: 'Unable to copy "%s" to "%s". Please check permissions and try again.'
-  write-fail: 'Unable to write to the file "%s". Please check the file permissions and try again.'
-messages:
-  move-settings: 'The file settings.php was successfully movied to "sites/%s".'
-examples:
-  - description: 'Update the files for a multisite installed specifying old path and new path'
-    execution: |
-      drupal multisite:update
diff --git a/console/language/console-en/translations/node.access.rebuild.yml b/console/language/console-en/translations/node.access.rebuild.yml
deleted file mode 100644
index c18b6da1230bcb606eaa6b08cb9ec56ba7a3d920..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/node.access.rebuild.yml
+++ /dev/null
@@ -1,12 +0,0 @@
-description: 'Rebuild node access permissions.'
-help: 'Rebuilding will remove all privileges to content and replace them with permissions based on the current modules and settings.'
-options:
-  batch: 'Process in batch mode.'
-messages:
-  rebuild: 'Rebuilding node access permissions, one moment please.'
-  completed: 'Done rebuilding permissions.'
-  failed: 'Rebuilding permissions was not successful.'
-examples:
-  - description: Rebuild node access permissions
-    execution:
-      drupal node:access:rebuild --batch
diff --git a/console/language/console-en/translations/queue.run.yml b/console/language/console-en/translations/queue.run.yml
deleted file mode 100644
index 0411433d816e165227b48f4690ba5f0bc5484831..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/queue.run.yml
+++ /dev/null
@@ -1,9 +0,0 @@
-description: 'Process the selected queue.'
-arguments:
-  name: 'Queue name.'
-messages:
-  success: 'Processed "%s": "%s"/"%s" items in "%s" seconds.'
-  failed: '"%s" failed: "%s".'
-  missing-name: 'Provide a valid queue name.'
-  invalid-name: 'Invalid queue name "%s" provided.'
-
diff --git a/console/language/console-en/translations/rest.debug.yml b/console/language/console-en/translations/rest.debug.yml
deleted file mode 100644
index 6fc9fc811a135fc9b2325a4902b6afe7acb1b314..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/rest.debug.yml
+++ /dev/null
@@ -1,17 +0,0 @@
-description: 'Displays current rest resource for the application'
-arguments:
-    resource-id: 'Rest ID'
-options:
-    status: 'Rest resource status enabled | disabled'
-messages:
-    id: 'Rest ID'
-    label: Label
-    canonical-url: 'Canonical URL'
-    status: Status
-    provider: Provider
-    enabled: Enabled
-    disabled: Disabled
-    rest-state: 'REST States'
-    supported-formats: 'Supported Formats'
-    supported-auth: 'Supported Authentication Providers'
-    not-found: 'Rest resource "%s" not found'
diff --git a/console/language/console-en/translations/rest.disable.yml b/console/language/console-en/translations/rest.disable.yml
deleted file mode 100644
index a1f7360e94d8400ae68a25d013be311300b460a3..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/rest.disable.yml
+++ /dev/null
@@ -1,10 +0,0 @@
-description: 'Disable a rest resource for the application'
-arguments:
-    resource-id: 'Rest ID'
-    states: 'REST States to disable for Rest resource'
-questions:
-    resource-id: 'Rest ID'
-messages:
-    invalid-rest-id: 'Rest ID "%s" is invalid'
-    success: 'Rest ID "%s" disabled'
-    already-disabled: 'Rest ID "%s" was already disabled'
diff --git a/console/language/console-en/translations/rest.enable.yml b/console/language/console-en/translations/rest.enable.yml
deleted file mode 100644
index 4b7a5bf2eeee7893183dd8963fed2b5e667b2114..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/rest.enable.yml
+++ /dev/null
@@ -1,16 +0,0 @@
-description: 'Enable a rest resource for the application'
-arguments:
-    resource-id: 'Rest ID'
-    states: 'REST States to enable for Rest resource'
-    authorizations: 'Authorizations providers enabled for Rest Resource'
-questions:
-    resource-id: 'Rest ID'
-messages:
-    invalid-rest-id: 'Rest ID "%s" is invalid'
-    formats: 'Available serialization formats'
-    methods: 'Available methods'
-    authentication-providers: 'Available Authentication Providers'
-    selected-method: 'Selected Method'
-    selected-formats: 'Selected formats'
-    selected-authentication-providers: 'Selected Authentication Providers'
-    success: 'Rest ID "%s" enabled'
diff --git a/console/language/console-en/translations/role.delete.yml b/console/language/console-en/translations/role.delete.yml
deleted file mode 100644
index 1eeb54578a8a32f47ad6239414be375637329a65..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/role.delete.yml
+++ /dev/null
@@ -1,14 +0,0 @@
-description: 'Delete roles for the application'
-help: 'The <info>role:delete</info> command helps you delete roles.'
-welcome: 'Welcome to the Drupal role delete'
-arguments:
-  rolename: 'Roles name to be deleted'
-messages:
-  role-id: 'Role Id'
-  role-name: 'Role Name'
-  role-created: 'Roles was deleted successfully'
-  invalid-machine-name: 'Role does not exist'
-examples:
-  - description: 'Delete role specifying rolename'
-    execution: |
-      drupal role:delete  moderator
diff --git a/console/language/console-en/translations/role.new.yml b/console/language/console-en/translations/role.new.yml
deleted file mode 100644
index 54303a33c83ca9eea5fb914eba6b43fb09111084..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/role.new.yml
+++ /dev/null
@@ -1,18 +0,0 @@
-description: 'Create roles for the application'
-help: 'The <info>role:new</info> command helps you create roles.'
-welcome: 'Welcome to the Drupal role create'
-arguments:
-  rolename: 'Role name to be created'
-  machine-name: 'Role machine name'
-questions:
-  rolename: 'Role name to be created'
-  machine-name: 'Role machine name'
-messages:
-  role-id: 'Role Id'
-  role-name: 'Role Name'
-  role-created: 'Role "%s" was created successfully'
-  invalid-machine-name: 'The machine name is already exist'
-examples:
-  - description: 'Create role specifying rolename and machine-name'
-    execution: |
-      drupal role:new  moderator moderator
diff --git a/console/language/console-en/translations/router.rebuild.yml b/console/language/console-en/translations/router.rebuild.yml
deleted file mode 100644
index bc0fbc17e361b12e8afe2034c6ad74805287e2f8..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/router.rebuild.yml
+++ /dev/null
@@ -1,10 +0,0 @@
-description: 'Rebuild routes for the application'
-arguments:
-  route-name: 'Route names'
-messages:
-  rebuilding: 'Rebuilding routes, wait a moment please'
-  completed: 'Done rebuilding route(s).'
-examples:
-  - description: 'Rebuild routes'
-    execution:
-      drupal router:rebuild
diff --git a/console/language/console-en/translations/self-update.yml b/console/language/console-en/translations/self-update.yml
deleted file mode 100644
index 72014fd3a1b00c7f602a4dc6af4ee1574b8f1d07..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/self-update.yml
+++ /dev/null
@@ -1,20 +0,0 @@
-description: 'Update project to the latest version.'
-help: 'Update project to the latest version.'
-options:
-  major: 'Update to a new major version, if available.'
-  manifest: 'Override the manifest file path.'
-  current-version: 'Override the version to update from.'
-questions:
-  update: 'Update from version "%s" to version "%s".'
-messages:
-  not-phar: 'This instance of the CLI was not installed as a Phar archive.'
-  update: 'Updating to version "%s".'
-  success: 'Updated from version "%s" to version "%s".'
-  check: 'Checking for updates from version: "%s"'
-  current-version: 'The latest version "%s", was already installed on your system.'
-  instructions: |
-   Update using: composer global update
-   Or you can switch to a Phar install recommended
-   composer global remove drupal/console
-   curl https://drupalconsole.com/installer -L -o drupal.phar
-
diff --git a/console/language/console-en/translations/server.yml b/console/language/console-en/translations/server.yml
deleted file mode 100644
index 86d5ca0c96cd5a4fe83dd334f1741ca4b2f82bd0..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/server.yml
+++ /dev/null
@@ -1,15 +0,0 @@
-description: 'Runs PHP built-in web server'
-arguments:
-  address: 'The address:port values'
-messages:
-  executing: 'Executing php from "%s".'
-  listening: 'Listening on "%s".'
-errors:
-  binary: 'Unable to find PHP binary to run server.'
-examples:
-  - description: 'Run using default address argument value 127.0.0.1:8088'
-    execution: 'drupal server'
-  - description: 'Passing address argument to use a different port number'
-    execution: 'drupal server 127.0.0.1:8089'
-  - description: 'Running default address argument values, using --root option to define the Drupal root'
-    execution: 'drupal --root=/var/www/drupal8.dev server'
diff --git a/console/language/console-en/translations/settings.set.yml b/console/language/console-en/translations/settings.set.yml
deleted file mode 100644
index b7150bc69a07f81436a803de8c09a880a86855bb..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/settings.set.yml
+++ /dev/null
@@ -1,15 +0,0 @@
-description: 'Change a specific setting value in DrupalConsole config file'
-arguments:
-  name: 'Setting name in YAML flatten format to set a value in Drupal Console config file'
-  value: 'Setting value to set in Drupal Console config file'
-messages:
-  error-parsing: 'An error occurs during parsing of YAML file "%s".'
-  error-generating: 'Error setting new language in config file.'
-  error-writing: 'Error writing config file.'
-  success: 'Setting "%s" was set to "%s"'
-  missing-file: 'The "%s" config file is missing, try executing `drupal init`'
-  missing-language: 'Provided language: "%s", not found'
-examples:
-  - description: 'Set application language setting value to "es"'
-    execution:
-      drupal settings:set  application.language es
diff --git a/console/language/console-en/translations/shell.yml b/console/language/console-en/translations/shell.yml
deleted file mode 100644
index 89587a8cd26c0b30719661ac5d41561673c7be16..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/shell.yml
+++ /dev/null
@@ -1,2 +0,0 @@
-description: 'Open a shell providing an interactive REPL (Read–Eval–Print-Loop).'
-help: 'This command provides a wrapper for psysh. A runtime developer console, interactive debugger and REPL for PHP.'
diff --git a/console/language/console-en/translations/site.import.local.yml b/console/language/console-en/translations/site.import.local.yml
deleted file mode 100644
index 39a43b979637da38ddbf1a2e90f064e6e6120003..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/site.import.local.yml
+++ /dev/null
@@ -1,20 +0,0 @@
-description: 'Import/Configure an existing local Drupal project'
-help: 'The <info>site:import:local</info> does create the yaml configuration file for a local existing site.'
-arguments:
-  directory: 'Existing Drupal root directory'
-  name: 'Name that will be used to generate the site config'
-options:
-  environment: 'Name of the environment that is going to be imported'
-messages:
-  imported: 'The site has been imported successfully. You might want to run `drupal debug:site` to confirm that everything went well.'
-  error-missing: 'The directory "%s" does not exist.'
-  error-not-drupal: 'This is not a valid drupal root: "%s"'
-  error-writing: 'An error occurred while trying to write the config file: "%s"'
-questions:
-  directory: 'Enter the directory name where to install Drupal'
-  name: 'Enter the name of the site'
-  environment: 'Enter the site environment name'
-examples:
-  - description: 'Import local drupal project specifying the site name and the path'
-    execution:
-      drupal site:import:local  SiteName /private/var/www/vhost/anexusit/drupal8.dev/web
diff --git a/console/language/console-en/translations/site.install.yml b/console/language/console-en/translations/site.install.yml
deleted file mode 100644
index a831470393659177065c1b6e545bb26a91068120..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/site.install.yml
+++ /dev/null
@@ -1,48 +0,0 @@
-description: 'Install a Drupal project'
-arguments:
-  profile: 'Drupal Profile to be installed'
-  langcode: 'Drupal language'
-  db-type: 'Drupal Database type to be used in install'
-  db-file: 'Drupal Database file to be used in install'
-  site-name: 'Drupal site name'
-  site-mail: 'Drupal site mail'
-  account-name: 'Drupal administrator account name'
-  account-mail: 'Drupal administrator account mail'
-  account-pass: 'Drupal administrator account password'
-  force: 'Force to reinstall the site'
-questions:
-  profile: 'Select Drupal profile to be installed'
-  langcode: 'Select language for your Drupal installation'
-  db-type: 'Select Drupal Database type to be used in install'
-  site-name: 'Provide your Drupal site name'
-  site-mail: 'Provide your Drupal site mail'
-  account-name: 'Provide your Drupal administrator account name'
-  account-mail: 'Provide your Drupal administrator account mail'
-  account-pass: 'Provide your Drupal administrator account password'
-suggestions:
-  site-name: 'My awesome site'
-messages:
-  installing: 'Starting Drupal 8 install process'
-  installed: 'Your Drupal 8 installation was completed successfully'
-  using-current-database: 'Using "%s" database with name "%s" and user "%s"'
-  already-installed: 'Drupal is already installed, try dropping your database executing database:drop or install executing site:install --force --no-interaction'
-  sites-backup: 'The sites.php file has temporarily been renamed to backup.sites.php while Drupal installs.'
-  sites-restore: 'The backup of sites.php has been been restored to sites.php.'
-  invalid-multisite: 'Invalid multisite, please create multisite using command drupal multisite:new "%s" "%s"'
-examples:
-  - description: 'Install a drupal project specifying installation type, language code, database configuration, site name, site email and admin credential settings'
-    execution: |
-      drupal site:install  standard  \
-        --langcode="en"  \
-        --db-type="mysql"  \
-        --db-host="127.0.0.1"  \
-        --db-name="drupal8"  \
-        --db-user="u53rn4m3"  \
-        --db-pass="dbp455"  \
-        --db-port="3306"  \
-        --site-name="Drupal 8"  \
-        --site-mail="admin@example.com"  \
-        --account-name="admin"  \
-        --account-mail="admin@example.com"  \
-        --account-pass="p455w0rd"
-
diff --git a/console/language/console-en/translations/site.maintenance.yml b/console/language/console-en/translations/site.maintenance.yml
deleted file mode 100644
index 1c535e2819708fcff974d663f1f8ba24191d076f..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/site.maintenance.yml
+++ /dev/null
@@ -1,15 +0,0 @@
-description: 'Switch site into maintenance mode'
-arguments:
-  mode: 'Site maintenance mode [on/off]'
-messages:
-  maintenance-on: 'Operating in maintenance mode on'
-  maintenance-off: 'Operating in maintenance mode off'
-errors:
-  invalid-mode: 'Invalid maintenance mode'
-examples:
-  - description: 'Switch on maintenance'
-    execution: |
-      drupal site:maintenance  on
-  - description: 'Switch off maintenance'
-    execution: |
-      drupal site:maintenance  off
diff --git a/console/language/console-en/translations/site.mode.yml b/console/language/console-en/translations/site.mode.yml
deleted file mode 100644
index 92deb6479d9070728af4dba5cdf06f0490d91e1b..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/site.mode.yml
+++ /dev/null
@@ -1,25 +0,0 @@
-description: 'Switch system performance configuration'
-arguments:
-  environment: 'Environment name [dev, prod]'
-options:
-  local: 'Use this option for testing PROD config, but using settings.local.php for connect to your local environment'
-messages:
-  configuration: 'Configuration name'
-  configuration-key: 'Configuration key'
-  original: 'Original Value'
-  updated: 'Override Value'
-  invalid-env: 'Invalid environment'
-  new-services-settings: 'New services settings'
-  service: 'Service'
-  service-parameter: 'Parameter'
-  service-value: 'Value'
-  error-copying-file: 'Error copying file'
-  error-writing-file: 'Error copying file'
-  services-file-overwritten: 'Services files "%s" was overwritten'
-examples:
-  - description: 'Switch system to prod'
-    execution: |
-      drupal site:mode  prod
-  - description: 'Switch system to dev'
-    execution: |
-      drupal site:mode  dev
diff --git a/console/language/console-en/translations/site.new.yml b/console/language/console-en/translations/site.new.yml
deleted file mode 100644
index 14385f5c822bd01c76706a1574973f67f6147c83..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/site.new.yml
+++ /dev/null
@@ -1,24 +0,0 @@
-description: 'Create a new Drupal project'
-arguments:
-    directory: 'Directory where to install Drupal'
-    version: 'Drupal version to download'
-options:
-    composer: 'Install Drupal with Composer'
-    latest: 'Use this option to select automatically the latest version'
-    unstable: 'Use this option to download unstable releases. If not used, you only can install stable releases. Do not use this with latest nor version.'
-messages:
-    select-release: 'Select a core release'
-    getting-releases: 'Getting releases for Drupal'
-    downloading: 'Downloading "%s" "%s"'
-    extracting: 'Extracting files for Drupal "%s"'
-    no-releases: 'There aren''t any releases available for Drupal'
-    downloaded: 'Drupal "%s" was downloaded in directory "%s"'
-    error-copying: 'An error occurred while renaming directory as "%s"'
-    composer: 'Drupal "%s" was installed successfully using Composer at "%s"'
-    executing: 'Executing composer command:'
-    missing-directory: 'Missing directory argument'
-    missing-version: 'Missing version argument'
-questions:
-    directory: 'Enter the directory name where to install Drupal'
-    composer-release: 'Please, choose a release for "%s"'
-    stable: 'Do you want to use stable releases?'
diff --git a/console/language/console-en/translations/site.statistics.yml b/console/language/console-en/translations/site.statistics.yml
deleted file mode 100644
index 6375041015cccc7b8b1311b4727bb83d5e8630c6..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/site.statistics.yml
+++ /dev/null
@@ -1,16 +0,0 @@
-description: 'Show the current statistics of website.'
-help: 'Show the current statistics of website.'
-messages:
-  stat-name: 'Name'
-  stat-quantity: 'Quantity'
-  node-type: 'Node:"%s"'
-  comments: 'Comments'
-  vocabulary: 'Vocabularies'
-  taxonomy-terms: 'Taxonomy terms'
-  files: 'Files'
-  users: 'Users'
-  modules-enabled: 'Modules enabled'
-  modules-disabled: 'Modules disabled'
-  themes-enabled: 'Themes enabled'
-  themes-disabled: 'Themes disabled'
-  views: 'Views (Not system views)'
diff --git a/console/language/console-en/translations/site.status.yml b/console/language/console-en/translations/site.status.yml
deleted file mode 100644
index 8d8dffde9951b656461ee65a566a7a6bf41e1505..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/site.status.yml
+++ /dev/null
@@ -1,28 +0,0 @@
-description: 'View current Drupal Installation status'
-messages:
-  application: Application
-  system: 'System Info'
-  hash-salt: 'Hash salt'
-  console: 'Drupal Console'
-  database: 'Database connection'
-  driver: 'Driver'
-  host: 'Host'
-  port: 'Port'
-  username: 'Username'
-  password: 'Password'
-  theme: 'Themes'
-  connection: 'Connection'
-  theme-default: 'Default theme'
-  theme-admin: 'Admin theme'
-  directory: 'Directories'
-  directory-root: 'Site root directory'
-  directory-temporary: 'Site temporary directory'
-  directory-theme-default: 'Default theme directory'
-  directory-theme-admin: 'Admin theme directory'
-  current-version: 'Current Drupal ("%s")'
-  not-installed: 'Drupal is not installed'
-examples:
-  - description: 'Get drupal installation status specifying the output format as table'
-    execution: |
-      drupal site:status  \
-        --format="table"
diff --git a/console/language/console-en/translations/state.delete.yml b/console/language/console-en/translations/state.delete.yml
deleted file mode 100644
index eab626fac957fad9b4081ca43a84ac67887e289e..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/state.delete.yml
+++ /dev/null
@@ -1,11 +0,0 @@
-description: 'Delete State'
-arguments:
-  name: 'State name.'
-messages:
-  enter-name: 'State name must contain a value.'
-  state-not-exists: 'The state "%s" does not exist.'
-  deleted: 'State "%s" sucessfully deleted.'
-examples:
-  - description: 'Delete state specifying the state name'
-    execution: |
-      drupal state:delete  comment.maintain_entity_statistics
diff --git a/console/language/console-en/translations/state.override.yml b/console/language/console-en/translations/state.override.yml
deleted file mode 100644
index 8511d1a43c5176bb22e1ab03c830169c0403489f..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/state.override.yml
+++ /dev/null
@@ -1,16 +0,0 @@
-description: 'Override a State key.'
-help: 'Override a State key.'
-arguments:
-  key: 'The State key to override.'
-  value: 'The State value to set.'
-messages:
-  key: 'State key'
-  original: 'Original value'
-  override: 'Override value'
-errors:
-  no-key: 'You must provide a State key to override.'
-  no-value: 'You must provide a State value to set.'
-examples:
-  - description: 'Override state value specifying the state name and the new value'
-    execution: |
-      drupal state:override  comment.node_comment_statistics_scale "!!float 1"
diff --git a/console/language/console-en/translations/taxonomy.term.delete.yml b/console/language/console-en/translations/taxonomy.term.delete.yml
deleted file mode 100644
index 5ebd28c54017f78ac1075460b2809876aa4e4726..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/taxonomy.term.delete.yml
+++ /dev/null
@@ -1,11 +0,0 @@
-description: 'Delete taxonomy terms from a vocabulary'
-vid: 'Enter vocabulary id'
-help: 'This command takes the VID as argument or all which will delete every term from every vocabulary'
-messages:
-  nothing: 'All taxonomy terms from "%s" vocabulary already deleted.'
-  processing: 'Deleting "%s" taxonomy term.'
-  invalid-vocabulary: 'Invalid "%s" vocabulary.'
-examples:
-  - description: 'Delete all terms of the "tags" vocabulary'
-    execution: |
-      drupal taxonomy:term:delete  tags
diff --git a/console/language/console-en/translations/test.run.yml b/console/language/console-en/translations/test.run.yml
deleted file mode 100644
index 70efff5520f4385f6435391c2d9a75ab6bbb562f..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/test.run.yml
+++ /dev/null
@@ -1,23 +0,0 @@
-description: 'Run Test unit from tests available for application'
-arguments:
-    test-class: 'Test Class'
-    test-methods: 'Test method(s) to be run'
-    url: 'Test url'
-messages:
-    missing-dependency: 'Test can''t be executed due a missing dependency'
-    phpunit-pending: 'Logic to execute PHPUnit test is not implemented yet.'
-    starting-test: 'Starting test'
-    test-duration: 'Test duration'
-    test-pass: 'Test passes'
-    test-fail: 'Test fails'
-    test-exception: 'Test exceptions'
-    test-debug: 'Test debugs'
-    url-required: 'URL option is required to run test'
-    test-summary: 'Test Summary'
-    group: Group
-    status: Status
-    file: File
-    method: Method
-    line: Line
-    message: Message
-    invalid-class: 'Testing class "%s" does not exist.'
diff --git a/console/language/console-en/translations/theme.download.yml b/console/language/console-en/translations/theme.download.yml
deleted file mode 100644
index 6fff4d5d08e98102f3e5be37ae34826448e59ed7..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/theme.download.yml
+++ /dev/null
@@ -1,18 +0,0 @@
-description: 'Download theme in application'
-arguments:
-  version: 'Theme version i.e 1.x-dev'
-  theme: 'the Theme name'
-options:
-  composer: 'Use --composer option for manage the theme download with Composer'
-messages:
-  no-releases: 'There aren''t any releases for theme "%s"'
-  getting-releases: 'Getting releases for theme "%s"'
-  downloading: 'Downloading theme "%s" release "%s"'
-  downloaded: 'Theme "%s" version "%s" was downloaded successfully at "%s"'
-  select-release: 'Please select your favorite release'
-  outside-drupal: 'Drupal root can''t be determined. Use --root to set the destination, current folder will be used instead of.'
-  error-creating-folder: 'Error creating folder "%s", please check your permissions'
-examples:
-  - description: 'Download theme specifying name and version'
-    execution: |
-      drupal theme:download  Alina 7.x-1.2
diff --git a/console/language/console-en/translations/theme.install.yml b/console/language/console-en/translations/theme.install.yml
deleted file mode 100644
index 44605a78d300c45a71707b4c3939725e01787bcf..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/theme.install.yml
+++ /dev/null
@@ -1,25 +0,0 @@
-description: 'Install theme or themes in the application'
-questions:
-  theme: 'theme name (press <return> to stop adding themes)'
-  invalid-theme: 'Invalid theme "%s"'
-options:
-  theme: 'theme or themes to be installed should be separated by a space'
-  overwrite-config: 'Overwrite active configuration if necessary'
-  set-default: 'Set theme as default theme'
-messages:
-  no-themes: 'You must provide theme or themes to install.'
-  themes-missing: 'Unable to install themes "%s" due they aren''t available'
-  theme-missing: 'Unable to install theme "%s" due is not available'
-  missing-dependencies: 'Unable to install themes "%s" due to missing dependencies "%s"'
-  themes-nothing: 'Nothing to do. All themes "%s" are already installed'
-  theme-nothing: 'Nothing to do. Theme "%s" is already installed'
-  dependencies: 'There are some unmet dependencies: "%s"?'
-  theme-success: 'The "%s" theme has been installed successfully'
-  themes-success: 'The themes "%s" were installed successfully'
-  theme-default-success: 'The "%s" theme has been installed successfully as default theme'
-  disabled-themes: 'Only uninstalled themes will be listed in autocomplete'
-  invalid-theme-default: 'Option default is only valid for one theme'
-examples:
-  - description: 'Install theme specifying the name'
-    execution: |
-      drupal theme:install  mytheme
diff --git a/console/language/console-en/translations/theme.path.yml b/console/language/console-en/translations/theme.path.yml
deleted file mode 100644
index 07a0593a2a8cba36e183f0169feb8f3613312fb8..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/theme.path.yml
+++ /dev/null
@@ -1,11 +0,0 @@
-description: 'Returns the relative path to the theme (or absolute path)'
-arguments:
-  theme: 'Theme name'
-options:
-  absolute: 'Return theme absolute path'
-messages:
-  invalid-theme-name: 'Invalid theme name: "%s"'
-examples:
-  - description: 'Get the path of mytheme'
-    execution: |
-      drupal theme:path  mytheme
diff --git a/console/language/console-en/translations/theme.uninstall.yml b/console/language/console-en/translations/theme.uninstall.yml
deleted file mode 100644
index 36cb10a11dee6195b1eaac5c6e95481750af9c25..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/theme.uninstall.yml
+++ /dev/null
@@ -1,24 +0,0 @@
-description: 'Uninstall theme or themes in the application'
-questions:
-  theme: 'theme name (press <return> to stop adding themes)'
-  invalid-theme: 'Invalid theme "%s"'
-options:
-  theme: 'theme or themes to be uninstalled should be separated by a space'
-messages:
-  no-themes: 'You must provide theme or themes to uninstall.'
-  themes-missing: 'Unable to uninstall themes "%s", because they aren''t available'
-  theme-missing: 'Unable to uninstall theme "%s", because it is not available'
-  missing-dependencies: 'Unable to uninstall themes "%s" due to missing dependencies "%s"'
-  themes-nothing: 'Nothing to do. All themes are already uninstalled: "%s"'
-  theme-nothing: 'Nothing to do. Theme "%s" is already uninstalled'
-  dependencies: 'There are some unmet dependencies: "%s"?'
-  theme-success: 'The "%s" theme has been uninstalled successfully'
-  themes-success: 'The themes "%s" were uninstalled successfully'
-  installed-themes: 'Only installed themes will be listed in autocomplete'
-  invalid-theme-default: 'Option default is only valid for one theme'
-  error-default-theme:  'Theme "%s" is the default theme and cannot be uninstalled.'
-  error-admin-theme: 'Theme "%s" is the admin theme and cannot be uninstalled.'
-examples:
-  - description: 'Uninstall theme specifying the name'
-    execution: |
-      drupal theme:uninstall  mytheme
diff --git a/console/language/console-en/translations/update.entities.yml b/console/language/console-en/translations/update.entities.yml
deleted file mode 100644
index 9be4b3631fe50526cf2deb6ce02cffb094d01c02..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/update.entities.yml
+++ /dev/null
@@ -1,9 +0,0 @@
-description: 'Applying Entity Updates'
-messages:
-  start: 'Starting the entity updates'
-  end: 'Finished the entity updates'
-  error: 'Error on Entity Updates'
-examples:
-  - description: 'Update entities'
-    execution: |
-      drupal update:entities
diff --git a/console/language/console-en/translations/update.execute.yml b/console/language/console-en/translations/update.execute.yml
deleted file mode 100644
index 590a12153ca536238042ac34ec9bb76f180a558b..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/update.execute.yml
+++ /dev/null
@@ -1,17 +0,0 @@
-description: 'Execute a specific Update N function in a module, or execute all'
-arguments:
-  module: 'Module name'
-  update-n: 'Specific Update N function to be executed'
-messages:
-  no-module-updates: 'There aren''t updates available for module "%s"'
-  executing-update: 'Executing update function "%s" of module "%s"'
-  module-update-function-not-found: 'Module "%s" doesn''t have a function update for "%s"'
-  executing-required-previous-updates: 'Executing required previous updates'
-  no-pending-updates: 'There aren''t updates available'
-examples:
-  - description: 'Execute all updates'
-    execution: |
-      drupal update:execute
-  - description: 'Execute updates for system module'
-    execution: |
-      drupal update:execute system
diff --git a/console/language/console-en/translations/user.create.yml b/console/language/console-en/translations/user.create.yml
deleted file mode 100644
index 0adc15a1c286e0bb29ea42093622fb281d0a2f8a..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/user.create.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-description: 'Create users for the application'
-help: 'The <info>user:create</info> command helps you create users.'
-welcome: 'Welcome to the Drupal user create'
-options:
-  username: 'User name to be created'
-  password: 'User password'
-  roles: 'User roles'
-  email: 'User email'
-  status: 'User status'
-questions:
-  username: 'User name to be created'
-  password: 'User password (empty to auto-generate)'
-  roles: 'User roles (empty to skip)'
-  email: 'User e-mail (empty to skip)'
-  status: 'User status (empty to skip)'
-messages:
-  user-id: 'User ID'
-  username: 'Username'
-  password: 'Password'
-  email: 'E-mail'
-  roles: 'Roles'
-  created: 'Created'
-  status: 'Status'
-  user-created: 'User "%s" was created successfully'
-examples:
-  - description: 'Create user specifying username, password, role, email and status'
-    execution: |
-      drupal user:create  john p455w0rd  \
-        --roles='authenticated'  \
-        --email="john@anexusit.com"  \
-        --status="1"
-  - description: 'Create admin user specifying username, password, role, email and status'
-    execution: |
-      drupal user:create  doe p455w0rd  \
-        --roles='administrator'  \
-        --email="doe@anexusit.com"  \
-        --status="1"
diff --git a/console/language/console-en/translations/user.delete.yml b/console/language/console-en/translations/user.delete.yml
deleted file mode 100644
index f186320f9053371385cfecd24389dfd5a05983d8..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/user.delete.yml
+++ /dev/null
@@ -1,29 +0,0 @@
-description: 'Delete users from the application'
-help: 'The <info>user:delete</info> command helps you delete users.'
-welcome: 'Welcome to the Drupal user delete'
-options:
-  user: 'User name/id to be deleted'
-  roles: 'Users with the listed roles to be deleted'
-questions:
-  user: 'User name/id to be deleted (empty to skip)'
-  roles: 'Select role(s) associated with users to be deleted'
-messages:
-  user-id: 'User ID'
-  username: 'Username'
-  user-deleted: 'User "%s" was deleted successfully'
-  users-deleted: '"%s" users were deleted successfully'
-errors:
-  invalid-user: 'User name/id "%s" is invalid'
-examples:
-  - description: 'Delete user with the id number 2'
-    execution: |
-      drupal user:delete  \
-        --user="2"
-  - description: 'Delete user with the username "jmolivas"'
-    execution: |
-      drupal user:delete  \
-        --user="jmolivas"
-  - description: 'Delete users with the role "authenticated"'
-    execution: |
-      drupal user:delete  \
-        --role="authenticated"
diff --git a/console/language/console-en/translations/user.login.clear.attempts.yml b/console/language/console-en/translations/user.login.clear.attempts.yml
deleted file mode 100644
index 14402a60ab68b6518c9c760775fae3acb3fb5191..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/user.login.clear.attempts.yml
+++ /dev/null
@@ -1,11 +0,0 @@
-description: 'Clear failed login attempts for an account.'
-help: 'The <info>user:login:clear:attempts</info> command resets the failed login attempts for an account.'
-arguments:
-    user: 'User name/id.'
-questions:
-    user: 'Enter User name/id'
-messages:
-    successful: 'Login attempts were successfully cleared for user: "%s".'
-errors:
-    invalid-user: 'Cannot load user entity using: "%s".'
-    no-flood: 'No flood table on the system.'
diff --git a/console/language/console-en/translations/user.login.url.yml b/console/language/console-en/translations/user.login.url.yml
deleted file mode 100644
index 174e98e2201f90647e97d31fc4add1ed91261cc9..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/user.login.url.yml
+++ /dev/null
@@ -1,14 +0,0 @@
-description: 'Returns a one-time user login url.'
-options:
-  user: 'User name/id.'
-messages:
-  url: 'One-time login for "%s"'
-questions:
-  user: 'Enter User name/id'
-errors:
-  invalid-user: 'Cannot load user entity using: "%s".'
-examples:
-  - description: 'Get one time login url for user id 10'
-    execution: drupal user:login:url  10
-  - description: 'Get one time login url for username jmolivas'
-    execution: drupal user:login:url jmolivas
\ No newline at end of file
diff --git a/console/language/console-en/translations/user.password.hash.yml b/console/language/console-en/translations/user.password.hash.yml
deleted file mode 100644
index a37d9a00aa5bfac209d0b7913a7f68e5f0c3ac39..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/user.password.hash.yml
+++ /dev/null
@@ -1,17 +0,0 @@
-description: 'Generate a hash from a plaintext password.'
-help: 'The <info>password:hash</info> command helps you to generate hashes password from plaintext passwords.'
-welcome: 'Welcome to the Drupal password hash generator'
-options:
-  password: 'Password(s) in text format'
-questions:
-  invalid-pass: 'Password can''t be empty'
-  password: 'Enter password'
-  other-password: 'Other password (press <return> to stop adding passwords)'
-messages:
-  password: Password
-  hash: Hash
-errors: null
-examples:
-  - description: 'Get hash of the word "p455w0rd"'
-    execution: |
-      drupal user:password:hash p455w0rd
diff --git a/console/language/console-en/translations/user.password.reset.yml b/console/language/console-en/translations/user.password.reset.yml
deleted file mode 100644
index 60f63ea0da2d360b6c398d33216e473c4c78886f..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/user.password.reset.yml
+++ /dev/null
@@ -1,24 +0,0 @@
-description: 'Reset password for a specific user.'
-help: 'The <info>password:reset</info> command helps you to reset password for a specific user.'
-welcome: 'Welcome to the Drupal password reset'
-options:
-  password: 'Password in text format'
-  user: 'User name/id'
-questions:
-  invalid-user: 'Invalid user name/id "%s", user id must be an integer'
-  invalid-pass: 'Password can''t be empty'
-  user: 'Enter User name/id'
-  password: 'Enter password'
-  other-password: 'Other password (press <return> to stop adding passwords)'
-messages:
-  reset-successful: 'Password was updated successfully for user id "%s"'
-errors:
-  invalid-user: 'Invalid user name/id "%s"'
-  empty-password: 'Password can not be empty'
-examples:
-  - description: 'Update password specifying the user id and the new password'
-    execution: |
-      drupal user:password:reset 2 p455w0rd
-  - description: 'Update password specifying the user jmolivas and the new password'
-    execution: |
-      drupal user:password:reset jmolivas p455w0rd
diff --git a/console/language/console-en/translations/user.role.yml b/console/language/console-en/translations/user.role.yml
deleted file mode 100644
index 36fff83d4886d2c34203744b9cdbbff8c920e093..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/user.role.yml
+++ /dev/null
@@ -1,20 +0,0 @@
-description: 'Adds/removes a role for a given user'
-help: 'The <info>user:role</info> command helps you to add or remove a role to a user.'
-welcome: 'Welcome to the Drupal user rule'
-arguments:
-  roles: 'Roles to add or remove. Please provide the machine name (only one)'
-  operation: 'Add or remove'
-  user: 'The affected user (only one)'
-messages:
-  bad-arguments: 'Some arguments are missing! Please, provide all the following arguments: [add/remove] [username] [role]'
-  no-user-found: 'Username "%s" was not found!'
-  no-role-found: 'Role "%s" was not found!'
-  add-success: 'Username %1$s was added role %2$s sucessfully'
-  remove-success: 'Username %1$s was removed role %2$s sucessfully'
-examples:
-  - description: 'Add administrator role to the user admin specifying the username and the role'
-    execution: |
-      drupal user:role  add admin administrator
-  - description: 'Remove administrator role from the user admin specifying the username and the role'
-    execution: |
-      drupal user:role  remove admin administrator
diff --git a/console/language/console-en/translations/views.disable.yml b/console/language/console-en/translations/views.disable.yml
deleted file mode 100644
index e8dd354d2565e01e693255de8ef09b35ab7154f7..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/views.disable.yml
+++ /dev/null
@@ -1,10 +0,0 @@
-description: 'Disable a View'
-messages:
-  disabled-successfully: 'View "%s" was disabled successfully.'
-examples:
-  - description: 'Disable content view'
-    execution: |
-      drupal views:disable  content
-  - description: 'Disable frontpage view'
-    execution: |
-      drupal views:disable  frontpage
diff --git a/console/language/console-en/translations/views.enable.yml b/console/language/console-en/translations/views.enable.yml
deleted file mode 100644
index 4531768b7fb954020652cc700573f4d220368887..0000000000000000000000000000000000000000
--- a/console/language/console-en/translations/views.enable.yml
+++ /dev/null
@@ -1,10 +0,0 @@
-description: 'Enable a View'
-messages:
-  enabled-successfully: 'View "%s" was enabled successfully.'
-examples:
-  - description: 'Enable content view'
-    execution: |
-      drupal views:enable  content
-  - description: 'Enable frontpage view'
-    execution: |
-      drupal views:enable  frontpage
diff --git a/pantheon.upstream.yml b/pantheon.upstream.yml
index bae7d740a6ecde89af4e1ba4584aa9456ea6d140..cf639b4133101babf2dbeedabaf55360d74e4e87 100644
--- a/pantheon.upstream.yml
+++ b/pantheon.upstream.yml
@@ -3,4 +3,4 @@
 # Override the defaults specified here in a site-specific `pantheon.yml` file.
 # For more information see: https://pantheon.io/docs/pantheon-upstream-yml
 api_version: 1
-php_version: 7.0
+php_version: 7.3
diff --git a/pantheon.yml b/pantheon.yml
index a94478e4ce780f816acf8607960221f1ea3b3fc3..eb3a23e273ac9170b62f62d7c2e1e5664fe93450 100644
--- a/pantheon.yml
+++ b/pantheon.yml
@@ -1,3 +1,3 @@
 api_version: 1
 web_docroot: true
-php_version: 7.2
+php_version: 7.3
diff --git a/vendor/alchemy/zippy/composer.json b/vendor/alchemy/zippy/composer.json
index 0305868f396d67b425dbe02efc4d7dc4aa00c399..0e21e8d1bff6e74fdc58b8648b7331a67bcca097 100644
--- a/vendor/alchemy/zippy/composer.json
+++ b/vendor/alchemy/zippy/composer.json
@@ -13,17 +13,17 @@
     ],
     "require": {
         "php": ">=5.5",
-        "ext-mbstring": "*",
         "doctrine/collections": "~1.0",
-        "symfony/filesystem": "^2.0.5|^3.0",
-        "symfony/process": "^2.1|^3.0"
+        "symfony/filesystem": "^2.0.5 || ^3.0 || ^4.0",
+        "symfony/process": "^2.1 || ^3.0 || ^4.0",
+        "symfony/polyfill-mbstring": "^1.3"
     },
     "require-dev": {
         "ext-zip": "*",
         "guzzle/guzzle": "~3.0",
         "guzzlehttp/guzzle": "^6.0",
-        "phpunit/phpunit": "^4.0|^5.0",
-        "symfony/finder": "^2.0.5|^3.0"
+        "phpunit/phpunit": "^4.0 || ^5.0",
+        "symfony/finder": "^2.0.5 || ^3.0 || ^4.0"
     },
     "suggest": {
         "ext-zip": "To use the ZipExtensionAdapter",
diff --git a/vendor/alchemy/zippy/src/Adapter/ZipExtensionAdapter.php b/vendor/alchemy/zippy/src/Adapter/ZipExtensionAdapter.php
index e55ed342cf2772ef7a9656b51f122a1ab8ad4d89..d29972907b4b9fe0a85102123b5be8f43a66f89e 100644
--- a/vendor/alchemy/zippy/src/Adapter/ZipExtensionAdapter.php
+++ b/vendor/alchemy/zippy/src/Adapter/ZipExtensionAdapter.php
@@ -300,7 +300,7 @@ private function addEntries(ResourceInterface $zipResource, array $files, $recur
     }
 
     /**
-     * @info is public for PHP 5.3 compatibility, should be private
+     * Is public for PHP 5.3 compatibility, should be private
      *
      * @param \ZipArchive $zip
      * @param string      $file
@@ -316,7 +316,7 @@ public function checkReadability(\ZipArchive $zip, $file)
     }
 
     /**
-     * @info is public for PHP 5.3 compatibility, should be private
+     * Is public for PHP 5.3 compatibility, should be private
      *
      * @param \ZipArchive $zip
      * @param string      $file
@@ -332,7 +332,7 @@ public function addFileToZip(\ZipArchive $zip, $file)
     }
 
     /**
-     * @info is public for PHP 5.3 compatibility, should be private
+     * Is public for PHP 5.3 compatibility, should be private
      *
      * @param \ZipArchive $zip
      * @param string      $dir
diff --git a/vendor/alchemy/zippy/src/Archive/Archive.php b/vendor/alchemy/zippy/src/Archive/Archive.php
index 088b476f86b1a970e17373f28e34823c2258f4b5..f7ece48532c3a35be4c5fbf08e19ac5104c9bf50 100644
--- a/vendor/alchemy/zippy/src/Archive/Archive.php
+++ b/vendor/alchemy/zippy/src/Archive/Archive.php
@@ -79,7 +79,7 @@ public function count()
      *
      * This method implements the IteratorAggregate interface.
      *
-     * @return \ArrayIterator An iterator
+     * @return \ArrayIterator|MemberInterface[] An iterator
      */
     public function getIterator()
     {
@@ -117,12 +117,12 @@ public function removeMembers($sources)
     /**
      * @inheritdoc
      */
-        public function extract($toDirectory)
-        {
+    public function extract($toDirectory)
+    {
         $this->adapter->extract($this->resource, $toDirectory);
 
         return $this;
-        }
+    }
 
     /**
      * @inheritdoc
diff --git a/vendor/alchemy/zippy/src/Archive/Member.php b/vendor/alchemy/zippy/src/Archive/Member.php
index 7ae2adbee4bef92c9030515561ff8a7f979e270a..24691c6d6e0cdc430c26a888ef6aaa23983a9ad0 100644
--- a/vendor/alchemy/zippy/src/Archive/Member.php
+++ b/vendor/alchemy/zippy/src/Archive/Member.php
@@ -134,7 +134,7 @@ public function extract($to = null, $overwrite = false)
     {
         $this->adapter->extractMembers($this->resource, $this->location, $to, (bool) $overwrite);
 
-        return new \SplFileInfo(sprintf('%s%s', rtrim(null === $to ? getcwd() : $to, '/'), $this->location));
+        return new \SplFileInfo(sprintf('%s/%s', rtrim(null === $to ? getcwd() : $to, '/'), ltrim($this->location, '/')));
     }
 
     /**
diff --git a/vendor/alchemy/zippy/src/Parser/ZipOutputParser.php b/vendor/alchemy/zippy/src/Parser/ZipOutputParser.php
index 11f98a27d6422a5d8204a6fd61ff13adb7087484..a0ca6a229febcae302a107bfe26390972f5e57b0 100644
--- a/vendor/alchemy/zippy/src/Parser/ZipOutputParser.php
+++ b/vendor/alchemy/zippy/src/Parser/ZipOutputParser.php
@@ -60,10 +60,21 @@ public function parseFileListing($output)
                 continue;
             }
 
+            $mtime = \DateTime::createFromFormat($this->dateFormat, $chunks[2]);
+
+            if ($mtime === false) {
+                // See https://github.com/alchemy-fr/Zippy/issues/111#issuecomment-251668427
+                $mtime = \DateTime::createFromFormat('H:i Y-m-d', $chunks[2]);
+            }
+
+            if ($mtime === false) {
+                $mtime = new \DateTime($chunks[2]);
+            }
+
             $members[] = array(
                 'location'  => $chunks[3],
                 'size'      => $chunks[1],
-                'mtime'     => \DateTime::createFromFormat($this->dateFormat, $chunks[2]),
+                'mtime'     => $mtime,
                 'is_dir'    => '/' === substr($chunks[3], -1)
             );
         }
diff --git a/vendor/alchemy/zippy/src/Zippy.php b/vendor/alchemy/zippy/src/Zippy.php
index 70defe997c97e9a60408321904be1b25c6add8d9..e9f2f66063224225939c499bbeff9d36422eeb69 100644
--- a/vendor/alchemy/zippy/src/Zippy.php
+++ b/vendor/alchemy/zippy/src/Zippy.php
@@ -80,9 +80,11 @@ public function create($path, $files = null, $recursive = true, $type = null)
      *
      * @throws RuntimeException In case of failure
      */
-    public function open($path)
+    public function open($path, $type = null)
     {
-        $type = $this->guessAdapterExtension($path);
+        if (null === $type) {
+            $type = $this->guessAdapterExtension($path);
+        }
 
         try {
             return $this
diff --git a/vendor/chi-teck/drupal-code-generator/composer.json b/vendor/chi-teck/drupal-code-generator/composer.json
index 07a1cc5e8c20b4aa05147eb10bcd958463542e37..398db7c0362ecb3c1403055db3151e78bed60286 100644
--- a/vendor/chi-teck/drupal-code-generator/composer.json
+++ b/vendor/chi-teck/drupal-code-generator/composer.json
@@ -6,7 +6,7 @@
     "ext-json": "*",
     "symfony/console": "^3.4 || ^4.0",
     "symfony/filesystem": "^2.7 || ^3.4 || ^4.0",
-    "twig/twig": "^1.38.2 || ^2.10"
+    "twig/twig": "^1.41 || ^2.12"
   },
   "bin": [
     "bin/dcg"
diff --git a/vendor/chi-teck/drupal-code-generator/src/ApplicationFactory.php b/vendor/chi-teck/drupal-code-generator/src/ApplicationFactory.php
index 40c3f3f79f324e590adb5a346077e0ee63286fb9..f3160e47532e7bb0d3b29dbc93c0f14a94251dc1 100644
--- a/vendor/chi-teck/drupal-code-generator/src/ApplicationFactory.php
+++ b/vendor/chi-teck/drupal-code-generator/src/ApplicationFactory.php
@@ -44,12 +44,7 @@ public static function create() {
     $helper_set = new HelperSet([
       new QuestionHelper(),
       new Dumper(new Filesystem()),
-      // We cannot reference the TwigEnvironment class with use statement
-      // because of a PHP bug.
-      // @see https://bugs.php.net/bug.php?id=66773
-      // @codingStandardsIgnoreStart
-      new Renderer(new \DrupalCodeGenerator\Twig\TwigEnvironment(new \Twig_Loader_Filesystem())),
-      // @codingStandardsIgnoreEnd
+      new Renderer(dcg_get_twig_environment(new \Twig_Loader_Filesystem())),
       new InputHandler(),
       new OutputHandler(),
     ]);
diff --git a/vendor/chi-teck/drupal-code-generator/src/Command/Drupal_7/Hook.php b/vendor/chi-teck/drupal-code-generator/src/Command/Drupal_7/Hook.php
index 2739fc32d08c7be8a2fdde23359cbc33bf1bc8e1..98ad01155619b064d2944417c0b9ca2dc4f4e42c 100644
--- a/vendor/chi-teck/drupal-code-generator/src/Command/Drupal_7/Hook.php
+++ b/vendor/chi-teck/drupal-code-generator/src/Command/Drupal_7/Hook.php
@@ -24,7 +24,7 @@ protected function interact(InputInterface $input, OutputInterface $output) {
     $questions['hook_name'] = new Question('Hook name');
     $questions['hook_name']->setValidator(function ($value) {
       if (!in_array($value, $this->getSupportedHooks())) {
-        throw new \UnexpectedValueException('The value is not correct class name.');
+        throw new \UnexpectedValueException('The value is not correct hook name.');
       }
       return $value;
     });
diff --git a/vendor/chi-teck/drupal-code-generator/src/Command/Drupal_8/Hook.php b/vendor/chi-teck/drupal-code-generator/src/Command/Drupal_8/Hook.php
index 64dc1a66729965a8772b8a6d95f4f6cb58b37c59..0d5bbd77827774465ffeec9024b17eb422d21d65 100644
--- a/vendor/chi-teck/drupal-code-generator/src/Command/Drupal_8/Hook.php
+++ b/vendor/chi-teck/drupal-code-generator/src/Command/Drupal_8/Hook.php
@@ -25,7 +25,7 @@ protected function interact(InputInterface $input, OutputInterface $output) {
     $questions['hook_name'] = new Question('Hook name');
     $questions['hook_name']->setValidator(function ($value) {
       if (!in_array($value, $this->supportedHooks())) {
-        throw new \UnexpectedValueException('The value is not correct class name.');
+        throw new \UnexpectedValueException('The value is not correct hook name.');
       }
       return $value;
     });
diff --git a/vendor/chi-teck/drupal-code-generator/src/Command/Drupal_8/PhpStormMetadata.php b/vendor/chi-teck/drupal-code-generator/src/Command/Drupal_8/PhpStormMetadata.php
new file mode 100644
index 0000000000000000000000000000000000000000..f7b52125ff18e7613432c049020fdaa766f56060
--- /dev/null
+++ b/vendor/chi-teck/drupal-code-generator/src/Command/Drupal_8/PhpStormMetadata.php
@@ -0,0 +1,72 @@
+<?php
+
+namespace DrupalCodeGenerator\Command\Drupal_8;
+
+use DrupalCodeGenerator\Command\BaseGenerator;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+
+/**
+ * Implements d8:phpstorm-metadata command.
+ */
+class PhpStormMetadata extends BaseGenerator {
+
+  protected $name = 'd8:phpstorm-metadata';
+  protected $description = 'Generates PhpStorm metadata';
+  protected $label = 'PhpStorm metadata';
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function interact(InputInterface $input, OutputInterface $output) {
+
+    if (!class_exists('Drupal') || !\Drupal::hasContainer()) {
+      throw new \RuntimeException('Could not bootstrap Drupal to fetch metadata.');
+    }
+    $container = \Drupal::getContainer();
+
+    $vars = &$this->vars;
+
+    $service_definitions = $container
+      ->get('kernel')
+      ->getCachedContainerDefinition()['services'];
+    $service_definitions = array_map('unserialize', $service_definitions);
+
+    foreach ($service_definitions as $service_id => $service_definition) {
+      if ($service_definition['class']) {
+        $vars['services'][$service_id] = $service_definition['class'];
+      }
+    }
+
+    $entity_type_manager = $container->get('entity_type.manager');
+    $vars['storages'] = [];
+    $vars['view_builders'] = [];
+    $vars['list_builders'] = [];
+    $vars['access_controls'] = [];
+    $vars['entity_classes'] = [];
+    foreach ($entity_type_manager->getDefinitions() as $type => $definition) {
+      /** @var \Drupal\Core\Entity\EntityTypeInterface $definition  */
+      $vars['entity_classes'][] = $definition->getClass();
+      $vars['storages'][$type] = $definition->getStorageClass();
+      $vars['access_controls'][$type] = $definition->getAccessControlClass();
+      if ($definition->hasViewBuilderClass()) {
+        $vars['view_builders'][$type] = $definition->getViewBuilderClass();
+      }
+      if ($definition->hasListBuilderClass()) {
+        $vars['list_builders'][$type] = $definition->getListBuilderClass();
+      }
+    }
+
+    // Some classes does not have leading slash.
+    array_walk_recursive($vars, function (string &$class): void {
+      if ($class[0] != '\\') {
+        $class = '\\' . $class;
+      }
+    });
+
+    $this->addFile()
+      ->path('.phpstorm.meta.php')
+      ->template('d8/phpstorm-meta.twig');
+  }
+
+}
diff --git a/vendor/chi-teck/drupal-code-generator/src/Command/Drupal_8/Project.php b/vendor/chi-teck/drupal-code-generator/src/Command/Drupal_8/Project.php
index 21c59a7f43fcb11539f5f205c2a6e62003d34574..6192361b1e0584db831c89bd27776e98c1db0706 100644
--- a/vendor/chi-teck/drupal-code-generator/src/Command/Drupal_8/Project.php
+++ b/vendor/chi-teck/drupal-code-generator/src/Command/Drupal_8/Project.php
@@ -20,14 +20,33 @@ class Project extends BaseGenerator {
   protected $description = 'Generates a composer project';
   protected $alias = 'project';
 
-  const DRUPAL_DEFAULT_VERSION = '~8.7.0';
+  /**
+   * Array of packages to check versions for.
+   *
+   * The key is package name and the value is allowable major version.
+   */
+  const PACKAGES = [
+    'composer/installers' => '^1.8',
+    'cweagans/composer-patches' => '^1.6',
+    'drupal/core' => '^8.8',
+    'drupal/core-composer-scaffold' => '^8.8',
+    'drush/drush' => '^10.2',
+    'oomphinc/composer-installers-extender' => '^1.1',
+    'symfony/dotenv' => '^4.4',
+    'drupal/core-recommended' => '^8.8',
+    'drupal/core-dev' => '^8.8',
+    'zaporylie/composer-drupal-optimizations' => '^1.1',
+    'weitzman/drupal-test-traits' => '^1.3',
+  ];
 
   /**
    * {@inheritdoc}
    */
   protected function interact(InputInterface $input, OutputInterface $output) {
 
-    $name_validator = function ($value) {
+    $vars = &$this->vars;
+
+    $name_validator = function (?string $value): ?string {
       if (!preg_match('#[^/]+/[^/]+$#i', $value)) {
         throw new \UnexpectedValueException('The value is not correct project name.');
       }
@@ -69,78 +88,38 @@ protected function interact(InputInterface $input, OutputInterface $output) {
       'httpdocs',
       'html',
     ];
-    $questions['document_root'] = new Question('Document root directory, type single dot to use Composer root', 'docroot');
-    $questions['document_root']->setNormalizer(function ($value) {
-      return $value == '.' ? '' : $value;
-    });
+    $questions['document_root'] = new Question('Document root directory', 'docroot');
     $questions['document_root']->setAutocompleterValues($document_roots);
 
     $questions['php'] = new Question('PHP version', '>=' . PHP_MAJOR_VERSION . '.' . PHP_MINOR_VERSION);
-    $questions['drupal'] = new Question('Drupal version', self::DRUPAL_DEFAULT_VERSION);
-    $questions['drupal_core_strict'] = new ConfirmationQuestion('Would you like to get the same versions of Drupal core\'s dependencies as in Drupal core\'s composer.lock file?', FALSE);
 
-    $this->collectVars($input, $output, $questions);
+    $questions['drupal_core_recommended'] = new ConfirmationQuestion('Would you like to install recommended Drupal core dependencies?', FALSE);
+    $questions['drupal_core_dev'] = new ConfirmationQuestion('Would you like to install Drupal core development dependencies?', FALSE);
 
-    $sections = ['require', 'require-dev'];
+    $questions['drush'] = new ConfirmationQuestion('Would you like to install Drush?');
 
-    $questions['drush'] = new ConfirmationQuestion('Would you like to install Drush?', TRUE);
-    $vars = $this->collectVars($input, $output, $questions);
-    if ($vars['drush']) {
-      $questions['drush_installation'] = new Question('Drush installation (require|require-dev)', 'require');
-      $questions['drush_installation']->setValidator(Utils::getOptionsValidator($sections));
-      $questions['drush_installation']->setAutocompleterValues($sections);
-      $this->collectVars($input, $output, $questions);
-    }
-
-    $questions['drupal_console'] = new ConfirmationQuestion('Would you like to install Drupal Console?', !$vars['drush']);
-    $vars = $this->collectVars($input, $output, $questions);
-    if ($vars['drupal_console']) {
-      $questions['drupal_console_installation'] = new Question('Drupal Console installation (require|require-dev)', 'require-dev');
-      $questions['drupal_console_installation']->setValidator(Utils::getOptionsValidator($sections));
-      $questions['drupal_console_installation']->setAutocompleterValues($sections);
-      $this->collectVars($input, $output, $questions);
-    }
-
-    $questions['composer_patches'] = new ConfirmationQuestion('Would you like to install Composer patches plugin?', TRUE);
-    $questions['composer_merge'] = new ConfirmationQuestion('Would you like to install Composer merge plugin?', FALSE);
-    $questions['behat'] = new ConfirmationQuestion('Would you like to create Behat tests?', FALSE);
+    $questions['composer_patches'] = new ConfirmationQuestion('Would you like to install Composer patches plugin?');
     $questions['env'] = new ConfirmationQuestion('Would you like to load environment variables from .env files?', FALSE);
     $questions['asset_packagist'] = new ConfirmationQuestion('Would you like to add asset-packagist repository?', FALSE);
 
-    $vars = &$this->collectVars($input, $output, $questions);
+    $questions['tests'] = new ConfirmationQuestion('Would you like to create tests?', FALSE);
 
-    $vars['document_root_path'] = $vars['document_root'] ?
-      $vars['document_root'] . '/' : $vars['document_root'];
+    $this->collectVars($input, $output, $questions);
+    $vars['document_root_path'] = $vars['document_root'] . '/';
+    if ($vars['tests']) {
+      // @codingStandardsIgnoreStart
+      [$vendor, $short_name] = explode('/', $vars['name']);
+      $vars['namespace'] = Utils::camelize($vendor == $short_name ? $vendor : $vars['name']);
+      // @codingStandardsIgnoreEnd
+    }
 
-    $this->addFile('composer.json')
-      ->content(self::buildComposerJson($vars));
+    $this->addFile('composer.json')->content($this->buildComposerJson($vars));
 
     $this->addFile('.gitignore')
       ->template('d8/_project/gitignore.twig');
-
     $this->addFile('phpcs.xml')
       ->template('d8/_project/phpcs.xml.twig');
 
-    $this->addFile('scripts/composer/create_required_files.php')
-      ->template('d8/_project/scripts/composer/create_required_files.php.twig');
-
-    if ($vars['behat']) {
-      $this->addFile('tests/behat/behat.yml')
-        ->template('d8/_project/tests/behat/behat.yml.twig');
-
-      $this->addFile('tests/behat/local.behat.yml')
-        ->template('d8/_project/tests/behat/local.behat.yml.twig');
-
-      $this->addFile('tests/behat/bootstrap/BaseContext.php')
-        ->template('d8/_project/tests/behat/bootstrap/BaseContext.php.twig');
-
-      $this->addFile('tests/behat/bootstrap/ExampleContext.php')
-        ->template('d8/_project/tests/behat/bootstrap/ExampleContext.php.twig');
-
-      $this->addFile('tests/behat/features/example/user_forms.feature')
-        ->template('d8/_project/tests/behat/features/example/user_forms.feature.twig');
-    }
-
     if ($vars['env']) {
       $this->addFile('.env.example')
         ->template('d8/_project/env.example.twig');
@@ -153,8 +132,6 @@ protected function interact(InputInterface $input, OutputInterface $output) {
     }
 
     if ($vars['drush']) {
-      $this->addFile('drush/drush.yml')
-        ->template('d8/_project/drush/drush.yml.twig');
       $this->addFile('drush/Commands/PolicyCommands.php')
         ->template('d8/_project/drush/Commands/PolicyCommands.php.twig');
       $this->addFile('drush/sites/self.site.yml')
@@ -164,11 +141,18 @@ protected function interact(InputInterface $input, OutputInterface $output) {
         ->mode(0544);
     }
 
+    if ($vars['tests']) {
+      $this->addFile('phpunit.xml')
+        ->template('d8/_project/phpunit.xml.twig');
+      $this->addFile('tests/src/HomePageTest.php')
+        ->template('d8/_project/tests/src/HomePageTest.php.twig');
+    }
+
     $this->addFile('patches/.keep')->content('');
-    $this->addDirectory($vars['document_root_path'] . 'modules/contrib');
-    $this->addDirectory($vars['document_root_path'] . 'modules/custom');
-    $this->addDirectory($vars['document_root_path'] . 'modules/custom');
-    $this->addDirectory($vars['document_root_path'] . 'libraries');
+    $this->addDirectory('{document_root}/modules/contrib');
+    $this->addDirectory('{document_root}/modules/custom');
+    $this->addDirectory('{document_root}/themes/custom');
+    $this->addDirectory('{document_root}/libraries');
   }
 
   /**
@@ -196,14 +180,14 @@ protected function execute(InputInterface $input, OutputInterface $output) {
    * @return string
    *   Encoded JSON content.
    */
-  protected static function buildComposerJson(array $vars) {
+  protected function buildComposerJson(array $vars) {
 
     $document_root_path = $vars['document_root_path'];
 
     $composer_json = [];
 
     $composer_json['name'] = $vars['name'];
-    $composer_json['description'] = $vars['description'];
+    $composer_json['description'] = (string) $vars['description'];
     $composer_json['type'] = 'project';
     $composer_json['license'] = $vars['license'];
 
@@ -221,48 +205,41 @@ protected static function buildComposerJson(array $vars) {
     $require = [];
     $require_dev = [];
 
-    self::addPackage($require, 'drupal/core');
-    $require['drupal/core'] = $vars['drupal'];
-    self::addPackage($require, 'composer/installers');
-    self::addPackage($require, 'drupal-composer/drupal-scaffold');
-    self::addPackage($require, 'zaporylie/composer-drupal-optimizations');
-    $require_dev['webflo/drupal-core-require-dev'] = $vars['drupal'];
+    $this->addPackage($require, 'drupal/core-composer-scaffold');
+    $this->addPackage($require, 'zaporylie/composer-drupal-optimizations');
 
     if ($vars['asset_packagist']) {
-      self::addPackage($require, 'oomphinc/composer-installers-extender');
+      $this->addPackage($require, 'oomphinc/composer-installers-extender');
     }
 
-    if ($vars['drupal_core_strict']) {
-      $require['webflo/drupal-core-strict'] = $vars['drupal'];
+    if ($vars['drupal_core_recommended']) {
+      $this->addPackage($require, 'drupal/core-recommended');
     }
-
-    if ($vars['drush']) {
-      $vars['drush_installation'] == 'require'
-        ? self::addPackage($require, 'drush/drush')
-        : self::addPackage($require_dev, 'drush/drush');
+    else {
+      $this->addPackage($require, 'drupal/core');
+      $this->addPackage($require, 'composer/installers');
     }
 
-    if ($vars['drupal_console']) {
-      $vars['drupal_console_installation'] == 'require'
-        ? self::addPackage($require, 'drupal/console')
-        : self::addPackage($require_dev, 'drupal/console');
+    if ($vars['drupal_core_dev']) {
+      $this->addPackage($require_dev, 'drupal/core-dev');
     }
 
-    if ($vars['composer_patches']) {
-      self::addPackage($require, 'cweagans/composer-patches');
+    if ($vars['drush']) {
+      $this->addPackage($require, 'drush/drush');
     }
 
-    if ($vars['composer_merge']) {
-      self::addPackage($require, 'wikimedia/composer-merge-plugin');
+    if ($vars['composer_patches']) {
+      $this->addPackage($require, 'cweagans/composer-patches');
     }
 
-    if ($vars['behat']) {
-      // Behat and Mink drivers are Drupal core dev dependencies.
-      self::addPackage($require_dev, 'drupal/drupal-extension');
+    if ($vars['env']) {
+      $this->addPackage($require, 'symfony/dotenv');
+      $composer_json['autoload']['files'][] = 'load.environment.php';
     }
 
-    if ($vars['env']) {
-      self::addPackage($require, 'symfony/dotenv');
+    if ($vars['tests']) {
+      $this->addPackage($require_dev, 'weitzman/drupal-test-traits');
+      $composer_json['autoload-dev']['psr-4'][$vars['namespace'] . '\\Tests\\'] = 'tests/src';
     }
 
     $composer_json['require'] = [
@@ -275,17 +252,9 @@ protected static function buildComposerJson(array $vars) {
     $composer_json['require'] += $require;
 
     ksort($require_dev);
-    $composer_json['require-dev'] = $require_dev;
+    $composer_json['require-dev'] = (object) $require_dev;
 
-    // PHPUnit is core dev dependency.
-    $composer_json['scripts']['phpunit'] = 'phpunit --colors=always --configuration ' . $document_root_path . 'core ' . $document_root_path . 'modules/custom';
-    if ($vars['behat']) {
-      $composer_json['scripts']['behat'] = 'behat --colors --config=tests/behat/local.behat.yml';
-    }
     $composer_json['scripts']['phpcs'] = 'phpcs --standard=phpcs.xml';
-    $composer_json['scripts']['post-install-cmd'][] = '@php ./scripts/composer/create_required_files.php';
-    $composer_json['scripts']['post-update-cmd'][] = '@php ./scripts/composer/create_required_files.php';
-
     $composer_json['minimum-stability'] = 'dev';
     $composer_json['prefer-stable'] = TRUE;
 
@@ -294,14 +263,12 @@ protected static function buildComposerJson(array $vars) {
       'bin-dir' => 'bin',
     ];
 
-    if ($vars['env']) {
-      $composer_json['autoload']['files'][] = 'load.environment.php';
-    }
-
     if ($vars['composer_patches']) {
       $composer_json['extra']['composer-exit-on-patch-failure'] = TRUE;
     }
 
+    $composer_json['extra']['drupal-scaffold']['locations']['web-root'] = $vars['document_root_path'];
+
     if ($vars['asset_packagist']) {
       $composer_json['extra']['installer-types'] = [
         'bower-asset',
@@ -315,45 +282,12 @@ protected static function buildComposerJson(array $vars) {
       $document_root_path . 'themes/{$name}' => ['type:drupal-theme'],
       'drush/{$name}' => ['type:drupal-drush'],
     ];
+
     if ($vars['asset_packagist']) {
       $composer_json['extra']['installer-paths'][$document_root_path . 'libraries/{$name}'][] = 'type:bower-asset';
       $composer_json['extra']['installer-paths'][$document_root_path . 'libraries/{$name}'][] = 'type:npm-asset';
     }
 
-    $composer_json['extra']['drupal-scaffold']['excludes'] = [
-      '.csslintrc',
-      '.editorconfig',
-      '.eslintignore',
-      '.eslintrc.json',
-      '.gitattributes',
-      '.ht.router.php',
-      '.htaccess',
-      'robots.txt',
-      'update.php',
-      'web.config',
-    ];
-    // Initial files are created but never updated.
-    $composer_json['extra']['drupal-scaffold']['initial'] = [
-      '.htaccess' => '.htaccess',
-      'robots.txt' => 'robots.txt',
-    ];
-
-    // Move these files to Composer root.
-    if ($vars['document_root']) {
-      $composer_json['extra']['drupal-scaffold']['initial']['.editorconfig'] = '../.editorconfig';
-      $composer_json['extra']['drupal-scaffold']['initial']['.gitattributes'] = '../.gitattributes';
-    }
-    ksort($composer_json['extra']['drupal-scaffold']['initial']);
-
-    if ($vars['composer_merge']) {
-      $composer_json['extra']['merge-plugin'] = [
-        'include' => [
-          $document_root_path . 'modules/custom/*/composer.json',
-        ],
-        'recurse' => TRUE,
-      ];
-    }
-
     return json_encode($composer_json, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) . "\n";
   }
 
@@ -364,26 +298,12 @@ protected static function buildComposerJson(array $vars) {
    *   Section for the package (require|require-dev)
    * @param string $package
    *   A package to be added.
-   *
-   * @todo Find a way to track versions automatically.
    */
-  protected static function addPackage(array &$section, $package) {
-    $versions = [
-      'composer/installers' => '^1.4',
-      'cweagans/composer-patches' => '^1.6',
-      'drupal-composer/drupal-scaffold' => '^2.5',
-      'drupal/console' => '^1.0',
-      'drupal/core' => self::DRUPAL_DEFAULT_VERSION,
-      'drupal/drupal-extension' => '^3.4',
-      'drush/drush' => '^9.6',
-      'oomphinc/composer-installers-extender' => '^1.1',
-      'symfony/dotenv' => '^3.4',
-      'webflo/drupal-core-require-dev' => self::DRUPAL_DEFAULT_VERSION,
-      'webflo/drupal-core-strict' => self::DRUPAL_DEFAULT_VERSION,
-      'wikimedia/composer-merge-plugin' => '^1.4',
-      'zaporylie/composer-drupal-optimizations' => '^1.1',
-    ];
-    $section[$package] = $versions[$package];
+  private function addPackage(array &$section, $package) {
+    if (!array_key_exists($package, self::PACKAGES)) {
+      throw new \InvalidArgumentException("Package $package is unknown.");
+    }
+    $section[$package] = self::PACKAGES[$package];
   }
 
 }
diff --git a/vendor/chi-teck/drupal-code-generator/src/Command/Drupal_8/Service/EventSubscriber.php b/vendor/chi-teck/drupal-code-generator/src/Command/Drupal_8/Service/EventSubscriber.php
index a83ed8016aab670c6c0fab9cd751a368135ad86d..3f065576ac57e78a7582c6f76dbc6c0dc5036624 100644
--- a/vendor/chi-teck/drupal-code-generator/src/Command/Drupal_8/Service/EventSubscriber.php
+++ b/vendor/chi-teck/drupal-code-generator/src/Command/Drupal_8/Service/EventSubscriber.php
@@ -6,6 +6,7 @@
 use DrupalCodeGenerator\Utils;
 use Symfony\Component\Console\Input\InputInterface;
 use Symfony\Component\Console\Output\OutputInterface;
+use Symfony\Component\Console\Question\Question;
 
 /**
  * Implements d8:service:event-subscriber command.
@@ -22,8 +23,13 @@ class EventSubscriber extends BaseGenerator {
   protected function interact(InputInterface $input, OutputInterface $output) {
     $questions = Utils::defaultQuestions();
 
-    $vars = &$this->collectVars($input, $output, $questions);
-    $vars['class'] = Utils::camelize($vars['machine_name']) . 'Subscriber';
+    $default_class = function ($vars) {
+      return Utils::camelize($vars['machine_name']) . 'Subscriber';
+    };
+    $questions['class'] = new Question('Class', $default_class);
+    $questions['class']->setValidator([Utils::class, 'validateClassName']);
+
+    $this->collectVars($input, $output, $questions);
 
     $this->addFile()
       ->path('src/EventSubscriber/{class}.php')
diff --git a/vendor/chi-teck/drupal-code-generator/src/Command/Drupal_8/Service/Middleware.php b/vendor/chi-teck/drupal-code-generator/src/Command/Drupal_8/Service/Middleware.php
index c51aac4cd314cabfadc46477eee1cefc08788081..efeff4288887b98d2e73c088dd373d27ad15666e 100644
--- a/vendor/chi-teck/drupal-code-generator/src/Command/Drupal_8/Service/Middleware.php
+++ b/vendor/chi-teck/drupal-code-generator/src/Command/Drupal_8/Service/Middleware.php
@@ -6,6 +6,7 @@
 use DrupalCodeGenerator\Utils;
 use Symfony\Component\Console\Input\InputInterface;
 use Symfony\Component\Console\Output\OutputInterface;
+use Symfony\Component\Console\Question\Question;
 
 /**
  * Implements d8:service:middleware command.
@@ -20,9 +21,14 @@ class Middleware extends BaseGenerator {
    * {@inheritdoc}
    */
   protected function interact(InputInterface $input, OutputInterface $output) {
-    $questions = Utils::defaultQuestions();
-    $vars = &$this->collectVars($input, $output, $questions);
-    $vars['class'] = Utils::camelize($vars['machine_name']) . 'Middleware';
+    $questions = Utils::moduleQuestions();
+
+    $default_class = function ($vars) {
+      return Utils::camelize($vars['machine_name']) . 'Middleware';
+    };
+    $questions['class'] = new Question('Class', $default_class);
+    $questions['class']->setValidator([Utils::class, 'validateClassName']);
+    $this->collectVars($input, $output, $questions);
 
     $this->addFile()
       ->path('src/{class}.php')
diff --git a/vendor/chi-teck/drupal-code-generator/src/Command/Drupal_8/Service/RouteSubscriber.php b/vendor/chi-teck/drupal-code-generator/src/Command/Drupal_8/Service/RouteSubscriber.php
index 8382b555ecb803549b9a06dcd1d3bbc5f1cc7358..bb99145d735ec2a47e718d9b21e46bcd59873257 100644
--- a/vendor/chi-teck/drupal-code-generator/src/Command/Drupal_8/Service/RouteSubscriber.php
+++ b/vendor/chi-teck/drupal-code-generator/src/Command/Drupal_8/Service/RouteSubscriber.php
@@ -6,6 +6,7 @@
 use DrupalCodeGenerator\Utils;
 use Symfony\Component\Console\Input\InputInterface;
 use Symfony\Component\Console\Output\OutputInterface;
+use Symfony\Component\Console\Question\Question;
 
 /**
  * Implements d8:service:route-subscriber command.
@@ -20,10 +21,15 @@ class RouteSubscriber extends BaseGenerator {
    * {@inheritdoc}
    */
   protected function interact(InputInterface $input, OutputInterface $output) {
-    $questions = Utils::defaultQuestions();
+    $questions = Utils::moduleQuestions();
 
-    $vars = &$this->collectVars($input, $output, $questions);
-    $vars['class'] = Utils::camelize($vars['machine_name']) . 'RouteSubscriber';
+    $default_class = function ($vars) {
+      return Utils::camelize($vars['machine_name']) . 'RouteSubscriber';
+    };
+    $questions['class'] = new Question('Class', $default_class);
+    $questions['class']->setValidator([Utils::class, 'validateClassName']);
+
+    $this->collectVars($input, $output, $questions);
 
     $this->addFile()
       ->path('src/EventSubscriber/{class}.php')
diff --git a/vendor/chi-teck/drupal-code-generator/src/Helper/Renderer.php b/vendor/chi-teck/drupal-code-generator/src/Helper/Renderer.php
index a9256998b1a1c93bc1d763eae097cfdadfa5b6cb..df81f21e2e0e5d54fb41b2024e169922ac8e05bc 100644
--- a/vendor/chi-teck/drupal-code-generator/src/Helper/Renderer.php
+++ b/vendor/chi-teck/drupal-code-generator/src/Helper/Renderer.php
@@ -3,7 +3,7 @@
 namespace DrupalCodeGenerator\Helper;
 
 use Symfony\Component\Console\Helper\Helper;
-use Twig_Environment;
+use Twig\Environment;
 
 /**
  * Output dumper form generators.
@@ -13,17 +13,17 @@ class Renderer extends Helper {
   /**
    * The twig environment.
    *
-   * @var \Twig_Environment
+   * @var \Twig\Environment
    */
   protected $twig;
 
   /**
    * Constructs a generator command.
    *
-   * @param \Twig_Environment $twig
+   * @param \Twig\Environment $twig
    *   The twig environment.
    */
-  public function __construct(Twig_Environment $twig) {
+  public function __construct(Environment $twig) {
     $this->twig = $twig;
   }
 
diff --git a/vendor/chi-teck/drupal-code-generator/src/bootstrap.php b/vendor/chi-teck/drupal-code-generator/src/bootstrap.php
index 78f0049d8c39d43cd7900a65041123d15dc843f4..0cfb078a11df6cde4f411693fd8f4b33c7f15bc6 100644
--- a/vendor/chi-teck/drupal-code-generator/src/bootstrap.php
+++ b/vendor/chi-teck/drupal-code-generator/src/bootstrap.php
@@ -6,6 +6,9 @@
  */
 
 use DrupalCodeGenerator\ApplicationFactory;
+use DrupalCodeGenerator\Twig\Twig1Environment;
+use DrupalCodeGenerator\Twig\Twig2Environment;
+use Twig\Environment;
 
 /**
  * DCG root.
@@ -30,17 +33,40 @@ function dcg_create_application() {
   return ApplicationFactory::create();
 }
 
+/**
+ * Creates an Twig environment.
+ */
+function dcg_get_twig_environment($loader) {
+  switch (Environment::MAJOR_VERSION) {
+    case 1:
+      $environment = new Twig1Environment($loader);
+      break;
+
+    case 2:
+      $environment = new Twig2Environment($loader);
+      break;
+
+    default:
+      throw new \RuntimeException('Unsupported Twig version');
+  }
+  return $environment;
+}
+
 // Determine major Twig version.
-// Twig_Environment::MAJOR_VERSION is not suitable here because of
+// \Twig\Environment::MAJOR_VERSION is not suitable here because of
 // https://github.com/twigphp/Twig/pull/2945
 // Use this workaround as drupal/drupal is locked on Twig 1.38.
-list($twig_major_version) = sscanf(Twig_Environment::VERSION, '%d.%d.%d');
+list($twig_major_version) = sscanf(Environment::VERSION, '%d.%d.%d');
 
-// Twig_Environment::tokenize() signature has been changed in Twig 2, so that
-// it is not possible to maintain the same Twig_Environment sub-class for both
+// \Twig\Environment::tokenize() signature has been changed in Twig 2, so that
+// it is not possible to maintain the same \Twig\Environment sub-class for both
 // Twig versions.
 $twig_environment_class = sprintf('DrupalCodeGenerator\Twig\Twig%dEnvironment', $twig_major_version);
-class_alias($twig_environment_class, 'DrupalCodeGenerator\Twig\TwigEnvironment');
+if (!class_exists('DrupalCodeGenerator\Twig\TwigEnvironment')) {
+  class_alias($twig_environment_class, 'DrupalCodeGenerator\Twig\TwigEnvironment');
+}
 
 // Legacy TwigEnvironment class is still used in Drush.
-class_alias($twig_environment_class, 'DrupalCodeGenerator\TwigEnvironment');
+if (!class_exists('DrupalCodeGenerator\TwigEnvironment')) {
+  class_alias($twig_environment_class, 'DrupalCodeGenerator\TwigEnvironment');
+}
diff --git a/vendor/chi-teck/drupal-code-generator/templates/d8/_field/type.twig b/vendor/chi-teck/drupal-code-generator/templates/d8/_field/type.twig
index dee8d020d8fc618d8f1a14b39c8811e0a5e89f3a..b00e5c309001f1393ab753ed6bc71f9d20fe4393 100644
--- a/vendor/chi-teck/drupal-code-generator/templates/d8/_field/type.twig
+++ b/vendor/chi-teck/drupal-code-generator/templates/d8/_field/type.twig
@@ -144,7 +144,7 @@ class {{ type_class }} extends FieldItemBase {
     $constraint_manager = \Drupal::typedDataManager()->getValidationConstraintManager();
     $constraints[] = $constraint_manager->create('ComplexData', $options);
 {% endif %}
-    // @todo Add more constrains here.
+    // @todo Add more constraints here.
     return $constraints;
   }
 
diff --git a/vendor/chi-teck/drupal-code-generator/templates/d8/_project/drush/Commands/PolicyCommands.php.twig b/vendor/chi-teck/drupal-code-generator/templates/d8/_project/drush/Commands/PolicyCommands.php.twig
index 5d0ace54def15be5499b8581d61f2ed3a7898471..c862f4fe481f308167da23e9ccfcca766c511cdb 100644
--- a/vendor/chi-teck/drupal-code-generator/templates/d8/_project/drush/Commands/PolicyCommands.php.twig
+++ b/vendor/chi-teck/drupal-code-generator/templates/d8/_project/drush/Commands/PolicyCommands.php.twig
@@ -19,7 +19,7 @@ class PolicyCommands extends DrushCommands {
   public function sqlSyncValidate(CommandData $commandData) {
     $target = $commandData->input()->getArgument('target');
     if ($target != '@local') {
-      throw new \Exception(dt('Per !file, you may never overwrite the production database.', ['!file' => __FILE__]));
+      throw new \Exception(dt('Per !file, you may never overwrite the remote database.', ['!file' => __FILE__]));
     }
   }
 
@@ -33,7 +33,7 @@ class PolicyCommands extends DrushCommands {
   public function rsyncValidate(CommandData $commandData) {
     $target = $commandData->input()->getArgument('target');
     if (strpos($target, '@prod') == 0) {
-      throw new \Exception(dt('Per !file, you may never rsync to the production site.', ['!file' => __FILE__]));
+      throw new \Exception(dt('Per !file, you may never rsync to the remote site.', ['!file' => __FILE__]));
     }
   }
 
diff --git a/vendor/chi-teck/drupal-code-generator/templates/d8/_project/drush/drush.yml.twig b/vendor/chi-teck/drupal-code-generator/templates/d8/_project/drush/drush.yml.twig
deleted file mode 100644
index ce1893c9565dabbd3d3208d53fc590f0475f3ce0..0000000000000000000000000000000000000000
--- a/vendor/chi-teck/drupal-code-generator/templates/d8/_project/drush/drush.yml.twig
+++ /dev/null
@@ -1,3 +0,0 @@
-# Running commands without a pseudo-terminal on remote server is safer.
-ssh:
-  tty: false
diff --git a/vendor/chi-teck/drupal-code-generator/templates/d8/_project/drush/sites/self.site.yml.twig b/vendor/chi-teck/drupal-code-generator/templates/d8/_project/drush/sites/self.site.yml.twig
index dd4f953d7a27b39bf20bf80b665854bee400f192..8ce0e0f0b544ff2d514e6c5e615b27e35ac029e5 100644
--- a/vendor/chi-teck/drupal-code-generator/templates/d8/_project/drush/sites/self.site.yml.twig
+++ b/vendor/chi-teck/drupal-code-generator/templates/d8/_project/drush/sites/self.site.yml.twig
@@ -7,7 +7,7 @@ prod:
   uri: http://www.example.com
 
 stage:
-  host: stage.domain.com
+  host: stage.example.com
   user: stage-user
   root: /path/to/drupal
   uri: http://stage.example.com
diff --git a/vendor/chi-teck/drupal-code-generator/templates/d8/_project/phpunit.xml.twig b/vendor/chi-teck/drupal-code-generator/templates/d8/_project/phpunit.xml.twig
new file mode 100644
index 0000000000000000000000000000000000000000..1f3c0a21f88722c9e3305339596f96467d9ed1a4
--- /dev/null
+++ b/vendor/chi-teck/drupal-code-generator/templates/d8/_project/phpunit.xml.twig
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!-- Copy the samples below into your own phpunit.xml file.-->
+
+<!-- Using this project's bootstrap file allows tests in `ExistingSite`,
+    `ExistingSiteSelenium2DriverTest`, and `ExistingSiteWebDriverTest`
+     to run alongside core's test types. -->
+<phpunit bootstrap="vendor/weitzman/drupal-test-traits/src/bootstrap-fast.php">
+    <php>
+        <env name="DTT_BASE_URL" value="http://example.com"/>
+        <env name="DTT_API_URL" value="http://localhost:9222"/>
+        <!-- <env name="DTT_MINK_DRIVER_ARGS" value='["chrome", { "chromeOptions" : { "w3c": false } }, "http://localhost:4444/wd/hub"]'/> -->
+        <env name="DTT_MINK_DRIVER_ARGS" value='["firefox", null, "http://localhost:4444/wd/hub"]'/>
+        <env name="DTT_API_OPTIONS" value='{"socketTimeout": 360, "domWaitTimeout": 3600000}' />
+        <!-- Example BROWSERTEST_OUTPUT_DIRECTORY value: /tmp
+             Specify a temporary directory for storing debug images and html documents.
+             These artifacts get copied to /sites/simpletest/browser_output by BrowserTestBase. -->
+        <env name="BROWSERTEST_OUTPUT_DIRECTORY" value=""/>
+        <!-- To disable deprecation testing completely uncomment the next line. -->
+        <!--<env name="SYMFONY_DEPRECATIONS_HELPER" value="disabled"/>-->
+        <!-- Specify the default directory screenshots should be placed. -->
+        <!--<env name="DTT_SCREENSHOT_REPORT_DIRECTORY" value=""/>-->
+    </php>
+
+    <testsuites>
+        <testsuite name="unit">
+            <directory>./{{ document_root_path }}modules/custom/*/tests/src/Unit</directory>
+            <!--<directory>./web/profiles/custom/*/tests/src/Unit</directory>-->
+        </testsuite>
+        <testsuite name="kernel">
+            <directory>./{{ document_root_path }}modules/custom/*/tests/src/Kernel</directory>
+            <!--<directory>./web/profiles/custom/*/tests/src/Kernel</directory>-->
+        </testsuite>
+        <testsuite name="existing-site">
+            <!-- Assumes tests are namespaced as \Drupal\Tests\custom_foo\ExistingSite. -->
+            <directory>./{{ document_root_path }}modules/custom/*/tests/src/ExistingSite</directory>
+            <!--<directory>./web/profiles/custom/*/tests/src/ExistingSite</directory>-->
+        </testsuite>
+        <testsuite name="existing-site-javascript">
+            <!-- Assumes tests are namespaced as \Drupal\Tests\custom_foo\ExistingSiteJavascript. -->
+            <directory>./{{ document_root_path }}modules/custom/*/tests/src/ExistingSiteJavascript</directory>
+            <!--<directory>./web/profiles/custom/*/tests/src/ExistingSiteJavascript</directory>-->
+        </testsuite>
+    </testsuites>
+</phpunit>
diff --git a/vendor/chi-teck/drupal-code-generator/templates/d8/_project/scripts/composer/create_required_files.php.twig b/vendor/chi-teck/drupal-code-generator/templates/d8/_project/scripts/composer/create_required_files.php.twig
deleted file mode 100755
index bf718dfead446457779b8c3896447a27c3ab483f..0000000000000000000000000000000000000000
--- a/vendor/chi-teck/drupal-code-generator/templates/d8/_project/scripts/composer/create_required_files.php.twig
+++ /dev/null
@@ -1,58 +0,0 @@
-#!/usr/bin/env php
-<?php
-
-// -- settings.php file.
-$default_settings_file = './{{ document_root_path }}sites/default/default.settings.php';
-$settings_file = './{{ document_root_path }}sites/default/settings.php';
-
-if (!file_exists($settings_file) && file_exists($default_settings_file)) {
-  $content = file_get_contents($default_settings_file);
-
-{% if docrument_root %}
-  // Specify a directory for configuration data.
-  $current_code = '$config_directories = [];';
-  $new_code = <<<'EOS'
-$config_directories = [
-  CONFIG_SYNC_DIRECTORY => DRUPAL_ROOT . '/../config/sync',
-];
-EOS;
-  $content = str_replace($current_code, $new_code, $content);
-
-{% endif %}
-  // Allow local development configuration.
-  $current_code = <<<'EOS'
-#
-# if (file_exists($app_root . '/' . $site_path . '/settings.local.php')) {
-#   include $app_root . '/' . $site_path . '/settings.local.php';
-# }
-EOS;
-  $new_code = str_replace(["#\n", '# '], '', $current_code);
-  $content = str_replace($current_code, $new_code, $content);
-
-  if (!@file_put_contents($settings_file, $content)) {
-    file_put_contents('php://stderr', "Could not create $settings_file file.\n", FILE_APPEND);
-  }
-}
-
-// -- settings.local.php file.
-$example_local_settings_file = './{{ document_root_path }}sites/example.settings.local.php';
-$local_settings_file = './{{ document_root_path }}sites/default/settings.local.php';
-if (!file_exists($local_settings_file) && file_exists($example_local_settings_file)) {
-  if (@copy($example_local_settings_file, $local_settings_file)) {
-    chmod($settings_file, 0666);
-  }
-  else {
-    file_put_contents('php://stderr', "Could not create $local_settings_file file.\n", FILE_APPEND);
-  }
-}
-
-// -- files directory.
-$default_dir = './{{ document_root_path }}sites/default';
-$files_dir = $default_dir . '/files';
-if (file_exists($default_dir) && !file_exists($files_dir)) {
-  $original_umask = umask(0);
-  if (!@mkdir($files_dir, 0777)) {
-    file_put_contents('php://stderr', "Could not create $files_dir directory.\n", FILE_APPEND);
-  }
-  umask($original_umask);
-}
diff --git a/vendor/chi-teck/drupal-code-generator/templates/d8/_project/scripts/sync-site.sh.twig b/vendor/chi-teck/drupal-code-generator/templates/d8/_project/scripts/sync-site.sh.twig
index 22158b29d376e07c63991155899b361c9a10b4a4..71093af4e6e31be602f49c0036c367358df22a4e 100644
--- a/vendor/chi-teck/drupal-code-generator/templates/d8/_project/scripts/sync-site.sh.twig
+++ b/vendor/chi-teck/drupal-code-generator/templates/d8/_project/scripts/sync-site.sh.twig
@@ -7,18 +7,18 @@ set -e
 ROOT_DIR=$(dirname "$(readlink -f "$0")")/..
 
 function label {
-  echo -e "\n\e[1;47;44m "$@" \e[0m"
+  echo -e "\n\e[1;47;44m $* \e[0m"
 }
 
 function local_drush {
- $ROOT_DIR/vendor/drush/drush/drush --root $ROOT_DIR/{{ document_root_path }} $@
+ "$ROOT_DIR"/vendor/drush/drush/drush --root "$ROOT_DIR"/{{ document_root_path }} "$@"
 }
 
 SOURCE_ENVIRONMENT=$1
 
 # Source environment from which we copy the database and files.
-if [ -z "$SOURCE_ENVIRONMENT" ]; then
-  read -p "Source environment: " SOURCE_ENVIRONMENT
+if [[ -z $SOURCE_ENVIRONMENT ]]; then
+  read -r -p "Source environment: " SOURCE_ENVIRONMENT
 fi
 
 label 'Empty current database'
@@ -26,11 +26,12 @@ local_drush sql:drop -y
 
 label "Import database from $SOURCE_ENVIRONMENT"
 # @DCG gzip does not make much sense for small databases.
-local_drush @$SOURCE_ENVIRONMENT sql:dump --gzip | gunzip | local_drush sql:cli
+local_drush "@$SOURCE_ENVIRONMENT" sql:dump --gzip | gunzip | local_drush sql:cli
 
 label "Synchronize files with $SOURCE_ENVIRONMENT"
 # @DCG To save time and disk space consider using Stage File Proxy module.
-local_drush core:rsync -y @$SOURCE_ENVIRONMENT:sites/default/files/ $(realpath $ROOT_DIR/{{ document_root_path }}sites/default/files) || true
+TARGET_DIR=$(realpath "$ROOT_DIR"/{{ document_root_path }}sites/default/files)
+local_drush core:rsync -y "@$SOURCE_ENVIRONMENT:sites/default/files/" "$TARGET_DIR" || true
 
 label 'Apply DB updates'
 local_drush updatedb -y
@@ -53,9 +54,9 @@ local_drush watchdog:delete all -y
 label 'Warm cache'
 URL=$(local_drush core:status --field=uri)
 if [[ $URL == *"default"* ]]; then
-  echo -e "\n\e[91m"URL is not set. Skipping."\e[0m" >&2
+  echo -e "\n\e[91mURL is not set. Skipping.\e[0m" >&2
 else
-  curl -s -o /dev/null -w "URL: %{url_effective}\nStatus code: %{http_code}\nTime total: %{time_total} sec.\n" $URL
+  curl -s -o /dev/null -w "URL: %{url_effective}\nStatus code: %{http_code}\nTime total: %{time_total} sec.\n $URL"
 fi
 
 label 'Check site status'
diff --git a/vendor/chi-teck/drupal-code-generator/templates/d8/_project/tests/behat/behat.yml.twig b/vendor/chi-teck/drupal-code-generator/templates/d8/_project/tests/behat/behat.yml.twig
deleted file mode 100644
index 84d5829dc72183d16a84b7f799037d0edc4698e3..0000000000000000000000000000000000000000
--- a/vendor/chi-teck/drupal-code-generator/templates/d8/_project/tests/behat/behat.yml.twig
+++ /dev/null
@@ -1,42 +0,0 @@
-# Default Behat configuration.
-default:
-  autoload:
-    '': '%paths.base%/bootstrap'
-  suites:
-    example:
-      paths:
-        - '%paths.base%/features/example'
-      contexts:
-        - ExampleContext
-        - Drupal\DrupalExtension\Context\DrupalContext
-        - Drupal\DrupalExtension\Context\MessageContext
-      filters:
-        tags: ~@ignore
-  extensions:
-    Behat\MinkExtension:
-      base_url: 'PLACEHOLDER'
-      goutte:
-       # The below is necessary to avoid errors when using self-signed certs.
-        guzzle_parameters:
-          verify: false
-      sessions:
-        default:
-          selenium2:
-            wd_host: http://localhost:4444/wd/hub
-            browser: chrome
-    Drupal\DrupalExtension:
-      blackbox: ~
-      api_driver: 'drupal'
-{% if drush %}
-      drush:
-        alias: 'PLACEHOLDER'
-        binary: '%paths.base%/../../vendor/drush/drush/drush'
-{% endif %}
-      region_map:
-        header: '#header'
-        content: '#content'
-        footer: '#footer'
-      selectors:
-        message_selector: '.messages'
-        error_message_selector: '.messages.messages-error'
-        success_message_selector: '.messages.messages-status'
diff --git a/vendor/chi-teck/drupal-code-generator/templates/d8/_project/tests/behat/bootstrap/BaseContext.php.twig b/vendor/chi-teck/drupal-code-generator/templates/d8/_project/tests/behat/bootstrap/BaseContext.php.twig
deleted file mode 100644
index f5db0b722aea871fd7fe1ac7feeb3944b2ed1031..0000000000000000000000000000000000000000
--- a/vendor/chi-teck/drupal-code-generator/templates/d8/_project/tests/behat/bootstrap/BaseContext.php.twig
+++ /dev/null
@@ -1,14 +0,0 @@
-<?php
-
-use Drupal\DrupalExtension\Context\MinkContext;
-
-/**
- * Base class for Behat contexts.
- *
- * @DCG
- * Put there step definitions and helpers that need to be shared across multiple
- * Behat contexts.
- */
-abstract class BaseContext extends MinkContext {
-
-}
diff --git a/vendor/chi-teck/drupal-code-generator/templates/d8/_project/tests/behat/bootstrap/ExampleContext.php.twig b/vendor/chi-teck/drupal-code-generator/templates/d8/_project/tests/behat/bootstrap/ExampleContext.php.twig
deleted file mode 100644
index b8f50485e93d665e6e2ef23a640e0714e4b012fd..0000000000000000000000000000000000000000
--- a/vendor/chi-teck/drupal-code-generator/templates/d8/_project/tests/behat/bootstrap/ExampleContext.php.twig
+++ /dev/null
@@ -1,8 +0,0 @@
-<?php
-
-/**
- * Example context.
- */
-class ExampleContext extends BaseContext {
-
-}
diff --git a/vendor/chi-teck/drupal-code-generator/templates/d8/_project/tests/behat/features/example/user_forms.feature.twig b/vendor/chi-teck/drupal-code-generator/templates/d8/_project/tests/behat/features/example/user_forms.feature.twig
deleted file mode 100644
index aabe916404c53ab706122454180b1dc1c18cd0da..0000000000000000000000000000000000000000
--- a/vendor/chi-teck/drupal-code-generator/templates/d8/_project/tests/behat/features/example/user_forms.feature.twig
+++ /dev/null
@@ -1,11 +0,0 @@
-Feature: User forms
-  I need to be able to use the most common areas of the site.
-
-  @javascript
-  Scenario: Registration
-    Given I am on "/user/register"
-    Then I should see "Create new account" in the "content" region
-    Then I fill in "Email address" with "test@example.com"
-    And I fill in "Username" with "test"
-    And I press "Create new account"
-    Then I should see the message "Thank you for applying for an account."
diff --git a/vendor/chi-teck/drupal-code-generator/templates/d8/_project/tests/behat/local.behat.yml.twig b/vendor/chi-teck/drupal-code-generator/templates/d8/_project/tests/behat/local.behat.yml.twig
deleted file mode 100644
index 930d8d3181fb1d0c008d20b1927ce4b7c1a35b9d..0000000000000000000000000000000000000000
--- a/vendor/chi-teck/drupal-code-generator/templates/d8/_project/tests/behat/local.behat.yml.twig
+++ /dev/null
@@ -1,12 +0,0 @@
-# Local overrides of Behat configuration.
-imports:
-  - behat.yml
-default:
-  extensions:
-    Behat\MinkExtension:
-      base_url: 'http://localhost'
-{% if drush %}
-    Drupal\DrupalExtension:
-      drush:
-        alias: 'local'
-{% endif %}
diff --git a/vendor/chi-teck/drupal-code-generator/templates/d8/_project/tests/src/HomePageTest.php.twig b/vendor/chi-teck/drupal-code-generator/templates/d8/_project/tests/src/HomePageTest.php.twig
new file mode 100644
index 0000000000000000000000000000000000000000..934f528f52f22bd2c113d9d33ba36ec1060be56a
--- /dev/null
+++ b/vendor/chi-teck/drupal-code-generator/templates/d8/_project/tests/src/HomePageTest.php.twig
@@ -0,0 +1,20 @@
+<?php
+
+namespace {{ namespace }}\Tests;
+
+use weitzman\DrupalTestTraits\ExistingSiteBase;
+
+/**
+ * A test for home page.
+ */
+class HomePageTest extends ExistingSiteBase {
+
+  /**
+   * Test callback.
+   */
+  public function testHomePage() {
+    $this->drupalGet('');
+    $this->assertSession()->pageTextContains('Welcome');
+  }
+
+}
diff --git a/vendor/chi-teck/drupal-code-generator/templates/d8/module/configuration-entity/model.info.yml.twig b/vendor/chi-teck/drupal-code-generator/templates/d8/module/configuration-entity/model.info.yml.twig
index d5dc3b157a725f9847543fc8675fea7a1eec95f7..c26300871ba7b5f91c67de79f423483db597a94d 100644
--- a/vendor/chi-teck/drupal-code-generator/templates/d8/module/configuration-entity/model.info.yml.twig
+++ b/vendor/chi-teck/drupal-code-generator/templates/d8/module/configuration-entity/model.info.yml.twig
@@ -3,6 +3,7 @@ type: module
 description: 'Provides {{ entity_type_label|article|lower }} configuration entity.'
 package: {{ package }}
 core: 8.x
+core_version_requirement: ^8 || ^9
 {% if dependencies %}
 dependencies:
 {% for dependency in dependencies %}
diff --git a/vendor/chi-teck/drupal-code-generator/templates/d8/module/content-entity/model.info.yml.twig b/vendor/chi-teck/drupal-code-generator/templates/d8/module/content-entity/model.info.yml.twig
index ec3a80036f344119aac6410946c41cce0a11f1a4..3e3c8e541d71880d7b01a7c9fe1e9dafa0c3e769 100644
--- a/vendor/chi-teck/drupal-code-generator/templates/d8/module/content-entity/model.info.yml.twig
+++ b/vendor/chi-teck/drupal-code-generator/templates/d8/module/content-entity/model.info.yml.twig
@@ -3,6 +3,7 @@ type: module
 description: 'Provides {{ entity_type_label|article|lower }} entity.'
 package: {{ package }}
 core: 8.x
+core_version_requirement: ^8 || ^9
 {% if dependencies %}
 dependencies:
 {% for dependency in dependencies %}
diff --git a/vendor/chi-teck/drupal-code-generator/templates/d8/module/content-entity/src/Entity/Example.php.twig b/vendor/chi-teck/drupal-code-generator/templates/d8/module/content-entity/src/Entity/Example.php.twig
index 3f03e5ffc446a36a411748570f10989950a4f40d..7484c58fe56e70271766ff518ff279bb3e10aa5c 100644
--- a/vendor/chi-teck/drupal-code-generator/templates/d8/module/content-entity/src/Entity/Example.php.twig
+++ b/vendor/chi-teck/drupal-code-generator/templates/d8/module/content-entity/src/Entity/Example.php.twig
@@ -73,7 +73,9 @@ use Drupal\Core\Entity\EntityChangedTrait;
  *   admin_permission = "administer {{ entity_type_label|lower }} types",
 {% elseif fieldable %}
  *   admin_permission = "administer {{ entity_type_label|lower }}",
- {% endif %}
+{% else %}
+ *   admin_permission = "access {{ entity_type_label|lower }} overview",
+{% endif %}
  *   entity_keys = {
  *     "id" = "id",
 {% if revisionable %}
diff --git a/vendor/chi-teck/drupal-code-generator/templates/d8/phpstorm-meta.twig b/vendor/chi-teck/drupal-code-generator/templates/d8/phpstorm-meta.twig
new file mode 100644
index 0000000000000000000000000000000000000000..32dd7b256ea44ae4fb9818fbe941316e91af7cdd
--- /dev/null
+++ b/vendor/chi-teck/drupal-code-generator/templates/d8/phpstorm-meta.twig
@@ -0,0 +1,81 @@
+<?php
+
+namespace PHPSTORM_META {
+
+  override(
+    \Drupal::service(0),
+    map([
+{% for service_id, class in services %}
+      '{{ service_id }}' => '{{ class }}',
+{% endfor %}
+    ])
+  );
+
+  override(
+    \Drupal\Core\Entity\EntityTypeManagerInterface::getStorage(0),
+    map([
+{% for entity_type_id, class in storages %}
+      '{{ entity_type_id }}' => '{{ class }}',
+{% endfor %}
+    ])
+  );
+
+  override(
+    \Drupal\Core\Entity\EntityTypeManagerInterface::getViewBuilder(0),
+    map([
+{% for entity_type_id, class in view_builders %}
+      '{{ entity_type_id }}' => '{{ class }}',
+{% endfor %}
+    ])
+  );
+
+  override(
+    \Drupal\Core\Entity\EntityTypeManagerInterface::getListBuilder(0),
+    map([
+{% for entity_type_id, class in list_builders %}
+      '{{ entity_type_id }}' => '{{ class }}',
+{% endfor %}
+    ])
+  );
+
+  override(
+    \Drupal\Core\Entity\EntityTypeManagerInterface::getAccessControlHandler(0),
+    map([
+{% for entity_type_id, class in access_controls %}
+     '{{ entity_type_id }}' => '{{ class }}',
+{% endfor %}
+    ])
+  );
+
+{% for class in entity_classes %}
+{# Using map() to work around PhpStorm bug. #}
+{# @see https://intellij-support.jetbrains.com/hc/en-us/community/posts/360001516519 #}
+  override({{ class }}::loadMultiple(), map(['' => '{{ class }}[]']));
+  override({{ class }}::load(), map(['' => '{{ class }}']));
+  override({{ class }}::create(), map(['' => '{{ class }}']));
+
+{% endfor %}
+  expectedReturnValues(
+    \Drupal\Core\Entity\EntityInterface::save(),
+    \SAVED_NEW,
+    \SAVED_UPDATED
+  );
+
+  expectedArguments(
+    \Drupal\Core\Entity\EntityViewBuilderInterface::view(),
+    2,
+    \Drupal\Core\Language\LanguageInterface::LANGCODE_NOT_SPECIFIED,
+    \Drupal\Core\Language\LanguageInterface::LANGCODE_NOT_APPLICABLE,
+    \Drupal\Core\Language\LanguageInterface::LANGCODE_DEFAULT,
+    \Drupal\Core\Language\LanguageInterface::LANGCODE_SITE_DEFAULT
+  );
+
+  expectedArguments(
+    \Drupal\Core\Messenger\MessengerInterface::addMessage(),
+    1,
+    \Drupal\Core\Messenger\MessengerInterface::TYPE_STATUS,
+    \Drupal\Core\Messenger\MessengerInterface::TYPE_WARNING,
+    \Drupal\Core\Messenger\MessengerInterface::TYPE_ERROR
+  );
+
+}
\ No newline at end of file
diff --git a/vendor/chi-teck/drupal-code-generator/templates/d8/plugin/_ckeditor/dialog.twig b/vendor/chi-teck/drupal-code-generator/templates/d8/plugin/_ckeditor/dialog.twig
index dfdbdc352da18380bd5a9d32561e4ff4ed8b2212..00e4e1d15331e5e3f13e7de442b0557dc4932974 100644
--- a/vendor/chi-teck/drupal-code-generator/templates/d8/plugin/_ckeditor/dialog.twig
+++ b/vendor/chi-teck/drupal-code-generator/templates/d8/plugin/_ckeditor/dialog.twig
@@ -2,12 +2,13 @@
  * @file
  * Defines dialog for {{ plugin_label }} CKEditor plugin.
  */
+
 (function (Drupal) {
 
   'use strict';
 
   // Dialog definition.
-  CKEDITOR.dialog.add('{{ command_name }}Dialog', function(editor) {
+  CKEDITOR.dialog.add('{{ command_name }}Dialog', function (editor) {
 
     return {
 
@@ -47,7 +48,7 @@
 
       // This method is invoked once a user clicks the OK button, confirming the
       // dialog.
-      onOk: function() {
+      onOk: function () {
 
         // The context of this function is the dialog object itself.
         // See http://docs.ckeditor.com/#!/api/CKEDITOR.dialog.
@@ -58,7 +59,7 @@
 
         // Set element attribute and text by getting the defined field values.
         abbr.setAttribute('title', dialog.getValueOf('tab-settings', 'title'));
-        abbr.setText( dialog.getValueOf('tab-settings', 'abbr'));
+        abbr.setText(dialog.getValueOf('tab-settings', 'abbr'));
 
         // Finally, insert the element into the editor at the caret position.
         editor.insertElement(abbr);
diff --git a/vendor/chi-teck/drupal-code-generator/templates/d8/plugin/_ckeditor/plugin.twig b/vendor/chi-teck/drupal-code-generator/templates/d8/plugin/_ckeditor/plugin.twig
index 663f104f72e1b26d839794fe513facd53e27a6db..64fbef46b5b68e3c9c94c6599e226995100a5749 100644
--- a/vendor/chi-teck/drupal-code-generator/templates/d8/plugin/_ckeditor/plugin.twig
+++ b/vendor/chi-teck/drupal-code-generator/templates/d8/plugin/_ckeditor/plugin.twig
@@ -8,6 +8,7 @@
  *
  * @see http://docs.ckeditor.com/#!/guide/plugin_sdk_sample_1
  */
+
 (function (Drupal) {
 
   'use strict';
@@ -18,7 +19,7 @@
     icons: '{{ short_plugin_id }}',
 
     // The plugin initialization logic goes inside this method.
-    init: function(editor) {
+    init: function (editor) {
 
       // Define an editor command that opens our dialog window.
       editor.addCommand('{{ command_name }}', new CKEDITOR.dialogCommand('{{ command_name }}Dialog'));
diff --git a/vendor/chi-teck/drupal-code-generator/templates/d8/plugin/rest-resource.twig b/vendor/chi-teck/drupal-code-generator/templates/d8/plugin/rest-resource.twig
index 6c20fa2403fc0b141cb3f78ed5537b6475277ef1..b4dd3d35d65fad2b19f54514d45d9ba1f73ae918 100644
--- a/vendor/chi-teck/drupal-code-generator/templates/d8/plugin/rest-resource.twig
+++ b/vendor/chi-teck/drupal-code-generator/templates/d8/plugin/rest-resource.twig
@@ -97,18 +97,18 @@ class {{ class }} extends ResourceBase implements DependentPluginInterface {
   /**
    * Responds to POST requests and saves the new record.
    *
-   * @param mixed $record
+   * @param mixed $data
    *   Data to write into the database.
    *
    * @return \Drupal\rest\ModifiedResourceResponse
    *   The HTTP response object.
    */
-  public function post($record) {
+  public function post($data) {
 
-    $this->validate($record);
+    $this->validate($data);
 
     $id = $this->dbConnection->insert('{{ plugin_id }}')
-      ->fields($record)
+      ->fields($data)
       ->execute();
 
     $this->logger->notice('New {{ plugin_label|lower }} record has been created.');
@@ -124,40 +124,15 @@ class {{ class }} extends ResourceBase implements DependentPluginInterface {
    *
    * @param int $id
    *   The ID of the record.
-   * @param mixed $record
+   * @param mixed $data
    *   Data to write into the database.
    *
    * @return \Drupal\rest\ModifiedResourceResponse
    *   The HTTP response object.
    */
-  public function patch($id, $record) {
-    $this->validate($record);
-    return $this->updateRecord($id, $record);
-  }
-
-  /**
-   * Responds to entity PUT requests.
-   *
-   * @param int $id
-   *   The ID of the record.
-   * @param mixed $record
-   *   Data to write into the database.
-   *
-   * @return \Drupal\rest\ModifiedResourceResponse
-   *   The HTTP response object.
-   */
-  public function put($id, $record) {
-
-    $this->validate($record);
-
-    // Provide default values to make sure the record is completely replaced.
-    $record += [
-      'title' => '',
-      'description' => '',
-      'price' => 0,
-    ];
-
-    return $this->updateRecord($id, $record);
+  public function patch($id, $data) {
+    $this->validate($data);
+    return $this->updateRecord($id, $data);
   }
 
   /**
@@ -213,13 +188,6 @@ class {{ class }} extends ResourceBase implements DependentPluginInterface {
   public function routes() {
     $collection = parent::routes();
 
-    // ResourceBase class does not support PUT method by some reason.
-    $definition = $this->getPluginDefinition();
-    $canonical_path = $definition['uri_paths']['canonical'];
-    $route = $this->getBaseRoute($canonical_path, 'PUT');
-    $route->addRequirements(['_content_type_format' => implode('|', $this->serializerFormats)]);
-    $collection->add('{{ plugin_id }}.PUT', $route);
-
     // Take out BC routes added in base class.
     // @see https://www.drupal.org/node/2865645
     // @todo Remove this in Drupal 9.
diff --git a/vendor/chi-teck/drupal-code-generator/templates/d8/service/logger.twig b/vendor/chi-teck/drupal-code-generator/templates/d8/service/logger.twig
index 0747d116146300778d67b52b1c40e1ef00043a6d..526e32ca713b0d29adb9ae156b44581b208c70df 100644
--- a/vendor/chi-teck/drupal-code-generator/templates/d8/service/logger.twig
+++ b/vendor/chi-teck/drupal-code-generator/templates/d8/service/logger.twig
@@ -73,11 +73,7 @@ class {{ class }} implements LoggerInterface {
       'uid' => $context['uid'],
     ];
 
-    file_put_contents(
-      $this->config->get('path.temporary') . '/drupal.log',
-      print_r($entry, TRUE),
-      FILE_APPEND
-    );
+    file_put_contents('temporary://drupal.log', print_r($entry, TRUE), FILE_APPEND);
   }
 
 }
diff --git a/vendor/chi-teck/drupal-code-generator/templates/d8/test/browser.twig b/vendor/chi-teck/drupal-code-generator/templates/d8/test/browser.twig
index 239e41da32de5e20856cd1ca992aae7936e26a41..e0b83c93d1b81d6c1711879a089239b8b5837a65 100644
--- a/vendor/chi-teck/drupal-code-generator/templates/d8/test/browser.twig
+++ b/vendor/chi-teck/drupal-code-generator/templates/d8/test/browser.twig
@@ -11,6 +11,11 @@ use Drupal\Tests\BrowserTestBase;
  */
 class {{ class }} extends BrowserTestBase {
 
+  /**
+   * {@inheritdoc}
+   */
+  protected $defaultTheme = 'stable';
+
   /**
    * {@inheritdoc}
    */
diff --git a/vendor/chi-teck/drupal-code-generator/templates/d8/test/webdriver.twig b/vendor/chi-teck/drupal-code-generator/templates/d8/test/webdriver.twig
index 77e565b5bf34f9407dad998fb87b83acaa886053..bf8e32860305e11b4e46ff1b53161d588372a0b3 100644
--- a/vendor/chi-teck/drupal-code-generator/templates/d8/test/webdriver.twig
+++ b/vendor/chi-teck/drupal-code-generator/templates/d8/test/webdriver.twig
@@ -11,6 +11,11 @@ use Drupal\FunctionalJavascriptTests\WebDriverTestBase;
  */
 class {{ class }} extends WebDriverTestBase {
 
+  /**
+   * {@inheritdoc}
+   */
+  protected $defaultTheme = 'stable';
+
   /**
    * {@inheritdoc}
    */
diff --git a/vendor/chi-teck/drupal-code-generator/templates/d8/yml/module-info.twig b/vendor/chi-teck/drupal-code-generator/templates/d8/yml/module-info.twig
index c4277eb4662798cb70d940e0d2d9f45d4a410110..7f5b1b3ae7adaa5f8d7dce44aa93ba28ea89dc1b 100644
--- a/vendor/chi-teck/drupal-code-generator/templates/d8/yml/module-info.twig
+++ b/vendor/chi-teck/drupal-code-generator/templates/d8/yml/module-info.twig
@@ -3,6 +3,7 @@ type: module
 description: {{ description }}
 package: {{ package }}
 core: 8.x
+core_version_requirement: ^8 || ^9
 {% if dependencies %}
 dependencies:
 {% for dependency in dependencies %}
diff --git a/vendor/chi-teck/drupal-code-generator/templates/d8/yml/theme-info.twig b/vendor/chi-teck/drupal-code-generator/templates/d8/yml/theme-info.twig
index e11ffdda0527c1b0efc86d73a7c920541f1d2457..7dbe556bff808596794f5fa9f81aa8da75e6d090 100644
--- a/vendor/chi-teck/drupal-code-generator/templates/d8/yml/theme-info.twig
+++ b/vendor/chi-teck/drupal-code-generator/templates/d8/yml/theme-info.twig
@@ -4,6 +4,7 @@ base theme: {{ base_theme }}
 description: {{ description }}
 package: {{ package }}
 core: 8.x
+core_version_requirement: ^8 || ^9
 libraries:
   - {{ machine_name }}/global
 regions:
diff --git a/vendor/composer/autoload_classmap.php b/vendor/composer/autoload_classmap.php
index 3a07b91759f05ce0d43e4a60a7e796e36de6d183..817a87ee3d94ef7576cf81f85fbd5d1da91cecb4 100644
--- a/vendor/composer/autoload_classmap.php
+++ b/vendor/composer/autoload_classmap.php
@@ -664,6 +664,7 @@
     'DrupalCodeGenerator\\Command\\Drupal_8\\Module\\ConfigurationEntity' => $vendorDir . '/chi-teck/drupal-code-generator/src/Command/Drupal_8/Module/ConfigurationEntity.php',
     'DrupalCodeGenerator\\Command\\Drupal_8\\Module\\ContentEntity' => $vendorDir . '/chi-teck/drupal-code-generator/src/Command/Drupal_8/Module/ContentEntity.php',
     'DrupalCodeGenerator\\Command\\Drupal_8\\Module\\Standard' => $vendorDir . '/chi-teck/drupal-code-generator/src/Command/Drupal_8/Module/Standard.php',
+    'DrupalCodeGenerator\\Command\\Drupal_8\\PhpStormMetadata' => $vendorDir . '/chi-teck/drupal-code-generator/src/Command/Drupal_8/PhpStormMetadata.php',
     'DrupalCodeGenerator\\Command\\Drupal_8\\PluginManager' => $vendorDir . '/chi-teck/drupal-code-generator/src/Command/Drupal_8/PluginManager.php',
     'DrupalCodeGenerator\\Command\\Drupal_8\\Plugin\\Action' => $vendorDir . '/chi-teck/drupal-code-generator/src/Command/Drupal_8/Plugin/Action.php',
     'DrupalCodeGenerator\\Command\\Drupal_8\\Plugin\\Block' => $vendorDir . '/chi-teck/drupal-code-generator/src/Command/Drupal_8/Plugin/Block.php',
@@ -746,12 +747,6 @@
     'DrupalCodeGenerator\\Twig\\TwigSortSetNode' => $vendorDir . '/chi-teck/drupal-code-generator/src/Twig/TwigSortSetNode.php',
     'DrupalCodeGenerator\\Twig\\TwigSortTokenParser' => $vendorDir . '/chi-teck/drupal-code-generator/src/Twig/TwigSortTokenParser.php',
     'DrupalCodeGenerator\\Utils' => $vendorDir . '/chi-teck/drupal-code-generator/src/Utils.php',
-    'DrupalComposer\\DrupalScaffold\\CommandProvider' => $vendorDir . '/drupal-composer/drupal-scaffold/src/CommandProvider.php',
-    'DrupalComposer\\DrupalScaffold\\DrupalScaffoldCommand' => $vendorDir . '/drupal-composer/drupal-scaffold/src/DrupalScaffoldCommand.php',
-    'DrupalComposer\\DrupalScaffold\\FileFetcher' => $vendorDir . '/drupal-composer/drupal-scaffold/src/FileFetcher.php',
-    'DrupalComposer\\DrupalScaffold\\Handler' => $vendorDir . '/drupal-composer/drupal-scaffold/src/Handler.php',
-    'DrupalComposer\\DrupalScaffold\\Plugin' => $vendorDir . '/drupal-composer/drupal-scaffold/src/Plugin.php',
-    'DrupalComposer\\DrupalScaffold\\PrestissimoFileFetcher' => $vendorDir . '/drupal-composer/drupal-scaffold/src/PrestissimoFileFetcher.php',
     'DrupalFinder\\DrupalFinder' => $vendorDir . '/webflo/drupal-finder/src/DrupalFinder.php',
     'DrupalProject\\composer\\ScriptHandler' => $baseDir . '/scripts/composer/ScriptHandler.php',
     'Drupal\\Component\\Annotation\\AnnotationBase' => $baseDir . '/web/core/lib/Drupal/Component/Annotation/AnnotationBase.php',
@@ -910,6 +905,29 @@
     'Drupal\\Component\\Uuid\\Uuid' => $baseDir . '/web/core/lib/Drupal/Component/Uuid/Uuid.php',
     'Drupal\\Component\\Uuid\\UuidInterface' => $baseDir . '/web/core/lib/Drupal/Component/Uuid/UuidInterface.php',
     'Drupal\\Component\\Version\\Constraint' => $baseDir . '/web/core/lib/Drupal/Component/Version/Constraint.php',
+    'Drupal\\Composer\\Plugin\\Scaffold\\AllowedPackages' => $vendorDir . '/drupal/core-composer-scaffold/AllowedPackages.php',
+    'Drupal\\Composer\\Plugin\\Scaffold\\CommandProvider' => $vendorDir . '/drupal/core-composer-scaffold/CommandProvider.php',
+    'Drupal\\Composer\\Plugin\\Scaffold\\ComposerScaffoldCommand' => $vendorDir . '/drupal/core-composer-scaffold/ComposerScaffoldCommand.php',
+    'Drupal\\Composer\\Plugin\\Scaffold\\GenerateAutoloadReferenceFile' => $vendorDir . '/drupal/core-composer-scaffold/GenerateAutoloadReferenceFile.php',
+    'Drupal\\Composer\\Plugin\\Scaffold\\Git' => $vendorDir . '/drupal/core-composer-scaffold/Git.php',
+    'Drupal\\Composer\\Plugin\\Scaffold\\Handler' => $vendorDir . '/drupal/core-composer-scaffold/Handler.php',
+    'Drupal\\Composer\\Plugin\\Scaffold\\Interpolator' => $vendorDir . '/drupal/core-composer-scaffold/Interpolator.php',
+    'Drupal\\Composer\\Plugin\\Scaffold\\ManageGitIgnore' => $vendorDir . '/drupal/core-composer-scaffold/ManageGitIgnore.php',
+    'Drupal\\Composer\\Plugin\\Scaffold\\ManageOptions' => $vendorDir . '/drupal/core-composer-scaffold/ManageOptions.php',
+    'Drupal\\Composer\\Plugin\\Scaffold\\Operations\\AbstractOperation' => $vendorDir . '/drupal/core-composer-scaffold/Operations/AbstractOperation.php',
+    'Drupal\\Composer\\Plugin\\Scaffold\\Operations\\AppendOp' => $vendorDir . '/drupal/core-composer-scaffold/Operations/AppendOp.php',
+    'Drupal\\Composer\\Plugin\\Scaffold\\Operations\\OperationData' => $vendorDir . '/drupal/core-composer-scaffold/Operations/OperationData.php',
+    'Drupal\\Composer\\Plugin\\Scaffold\\Operations\\OperationFactory' => $vendorDir . '/drupal/core-composer-scaffold/Operations/OperationFactory.php',
+    'Drupal\\Composer\\Plugin\\Scaffold\\Operations\\OperationInterface' => $vendorDir . '/drupal/core-composer-scaffold/Operations/OperationInterface.php',
+    'Drupal\\Composer\\Plugin\\Scaffold\\Operations\\ReplaceOp' => $vendorDir . '/drupal/core-composer-scaffold/Operations/ReplaceOp.php',
+    'Drupal\\Composer\\Plugin\\Scaffold\\Operations\\ScaffoldFileCollection' => $vendorDir . '/drupal/core-composer-scaffold/Operations/ScaffoldFileCollection.php',
+    'Drupal\\Composer\\Plugin\\Scaffold\\Operations\\ScaffoldResult' => $vendorDir . '/drupal/core-composer-scaffold/Operations/ScaffoldResult.php',
+    'Drupal\\Composer\\Plugin\\Scaffold\\Operations\\SkipOp' => $vendorDir . '/drupal/core-composer-scaffold/Operations/SkipOp.php',
+    'Drupal\\Composer\\Plugin\\Scaffold\\Plugin' => $vendorDir . '/drupal/core-composer-scaffold/Plugin.php',
+    'Drupal\\Composer\\Plugin\\Scaffold\\PostPackageEventListenerInterface' => $vendorDir . '/drupal/core-composer-scaffold/PostPackageEventListenerInterface.php',
+    'Drupal\\Composer\\Plugin\\Scaffold\\ScaffoldFileInfo' => $vendorDir . '/drupal/core-composer-scaffold/ScaffoldFileInfo.php',
+    'Drupal\\Composer\\Plugin\\Scaffold\\ScaffoldFilePath' => $vendorDir . '/drupal/core-composer-scaffold/ScaffoldFilePath.php',
+    'Drupal\\Composer\\Plugin\\Scaffold\\ScaffoldOptions' => $vendorDir . '/drupal/core-composer-scaffold/ScaffoldOptions.php',
     'Drupal\\Console\\Annotations\\DrupalCommand' => $vendorDir . '/drupal/console/src/Annotations/DrupalCommand.php',
     'Drupal\\Console\\Annotations\\DrupalCommandAnnotationReader' => $vendorDir . '/drupal/console/src/Annotations/DrupalCommandAnnotationReader.php',
     'Drupal\\Console\\Application' => $vendorDir . '/drupal/console/src/Application.php',
@@ -929,6 +947,7 @@
     'Drupal\\Console\\Command\\Config\\EditCommand' => $vendorDir . '/drupal/console/src/Command/Config/EditCommand.php',
     'Drupal\\Console\\Command\\Config\\ExportCommand' => $vendorDir . '/drupal/console/src/Command/Config/ExportCommand.php',
     'Drupal\\Console\\Command\\Config\\ExportContentTypeCommand' => $vendorDir . '/drupal/console/src/Command/Config/ExportContentTypeCommand.php',
+    'Drupal\\Console\\Command\\Config\\ExportEntityCommand' => $vendorDir . '/drupal/console/src/Command/Config/ExportEntityCommand.php',
     'Drupal\\Console\\Command\\Config\\ExportSingleCommand' => $vendorDir . '/drupal/console/src/Command/Config/ExportSingleCommand.php',
     'Drupal\\Console\\Command\\Config\\ExportViewCommand' => $vendorDir . '/drupal/console/src/Command/Config/ExportViewCommand.php',
     'Drupal\\Console\\Command\\Config\\ImportCommand' => $vendorDir . '/drupal/console/src/Command/Config/ImportCommand.php',
@@ -967,6 +986,7 @@
     'Drupal\\Console\\Command\\Debug\\EntityCommand' => $vendorDir . '/drupal/console/src/Command/Debug/EntityCommand.php',
     'Drupal\\Console\\Command\\Debug\\EventCommand' => $vendorDir . '/drupal/console/src/Command/Debug/EventCommand.php',
     'Drupal\\Console\\Command\\Debug\\FeaturesCommand' => $vendorDir . '/drupal/console/src/Command/Debug/FeaturesCommand.php',
+    'Drupal\\Console\\Command\\Debug\\HookCommand' => $vendorDir . '/drupal/console/src/Command/Debug/HookCommand.php',
     'Drupal\\Console\\Command\\Debug\\ImageStylesCommand' => $vendorDir . '/drupal/console/src/Command/Debug/ImageStylesCommand.php',
     'Drupal\\Console\\Command\\Debug\\LibrariesCommand' => $vendorDir . '/drupal/console/src/Command/Debug/LibrariesCommand.php',
     'Drupal\\Console\\Command\\Debug\\MigrateCommand' => $vendorDir . '/drupal/console/src/Command/Debug/MigrateCommand.php',
@@ -983,6 +1003,7 @@
     'Drupal\\Console\\Command\\Debug\\ThemeCommand' => $vendorDir . '/drupal/console/src/Command/Debug/ThemeCommand.php',
     'Drupal\\Console\\Command\\Debug\\ThemeKeysCommand' => $vendorDir . '/drupal/console/src/Command/Debug/ThemeKeysCommand.php',
     'Drupal\\Console\\Command\\Debug\\UpdateCommand' => $vendorDir . '/drupal/console/src/Command/Debug/UpdateCommand.php',
+    'Drupal\\Console\\Command\\Debug\\UpdateComposerCommand' => $vendorDir . '/drupal/console/src/Command/Debug/UpdateComposerCommand.php',
     'Drupal\\Console\\Command\\Debug\\UserCommand' => $vendorDir . '/drupal/console/src/Command/Debug/UserCommand.php',
     'Drupal\\Console\\Command\\Debug\\ViewsCommand' => $vendorDir . '/drupal/console/src/Command/Debug/ViewsCommand.php',
     'Drupal\\Console\\Command\\Debug\\ViewsPluginsCommand' => $vendorDir . '/drupal/console/src/Command/Debug/ViewsPluginsCommand.php',
@@ -994,9 +1015,11 @@
     'Drupal\\Console\\Command\\Field\\InfoCommand' => $vendorDir . '/drupal/console/src/Command/Field/InfoCommand.php',
     'Drupal\\Console\\Command\\Generate\\AjaxCommand' => $vendorDir . '/drupal/console/src/Command/Generate/AjaxCommand.php',
     'Drupal\\Console\\Command\\Generate\\AuthenticationProviderCommand' => $vendorDir . '/drupal/console/src/Command/Generate/AuthenticationProviderCommand.php',
+    'Drupal\\Console\\Command\\Generate\\BlockTypeCommand' => $vendorDir . '/drupal/console/src/Command/Generate/BlockTypeCommand.php',
     'Drupal\\Console\\Command\\Generate\\BreakPointCommand' => $vendorDir . '/drupal/console/src/Command/Generate/BreakPointCommand.php',
     'Drupal\\Console\\Command\\Generate\\CacheContextCommand' => $vendorDir . '/drupal/console/src/Command/Generate/CacheContextCommand.php',
     'Drupal\\Console\\Command\\Generate\\CommandCommand' => $vendorDir . '/drupal/console/src/Command/Generate/CommandCommand.php',
+    'Drupal\\Console\\Command\\Generate\\ComposerCommand' => $vendorDir . '/drupal/console/src/Command/Generate/ComposerCommand.php',
     'Drupal\\Console\\Command\\Generate\\ConfigFormBaseCommand' => $vendorDir . '/drupal/console/src/Command/Generate/ConfigFormBaseCommand.php',
     'Drupal\\Console\\Command\\Generate\\ControllerCommand' => $vendorDir . '/drupal/console/src/Command/Generate/ControllerCommand.php',
     'Drupal\\Console\\Command\\Generate\\EntityBundleCommand' => $vendorDir . '/drupal/console/src/Command/Generate/EntityBundleCommand.php',
@@ -1015,6 +1038,7 @@
     'Drupal\\Console\\Command\\Generate\\PluginBlockCommand' => $vendorDir . '/drupal/console/src/Command/Generate/PluginBlockCommand.php',
     'Drupal\\Console\\Command\\Generate\\PluginCKEditorButtonCommand' => $vendorDir . '/drupal/console/src/Command/Generate/PluginCKEditorButtonCommand.php',
     'Drupal\\Console\\Command\\Generate\\PluginConditionCommand' => $vendorDir . '/drupal/console/src/Command/Generate/PluginConditionCommand.php',
+    'Drupal\\Console\\Command\\Generate\\PluginDerivativeCommand' => $vendorDir . '/drupal/console/src/Command/Generate/PluginDerivativeCommand.php',
     'Drupal\\Console\\Command\\Generate\\PluginFieldCommand' => $vendorDir . '/drupal/console/src/Command/Generate/PluginFieldCommand.php',
     'Drupal\\Console\\Command\\Generate\\PluginFieldFormatterCommand' => $vendorDir . '/drupal/console/src/Command/Generate/PluginFieldFormatterCommand.php',
     'Drupal\\Console\\Command\\Generate\\PluginFieldTypeCommand' => $vendorDir . '/drupal/console/src/Command/Generate/PluginFieldTypeCommand.php',
@@ -1022,19 +1046,25 @@
     'Drupal\\Console\\Command\\Generate\\PluginImageEffectCommand' => $vendorDir . '/drupal/console/src/Command/Generate/PluginImageEffectCommand.php',
     'Drupal\\Console\\Command\\Generate\\PluginImageFormatterCommand' => $vendorDir . '/drupal/console/src/Command/Generate/PluginImageFormatterCommand.php',
     'Drupal\\Console\\Command\\Generate\\PluginMailCommand' => $vendorDir . '/drupal/console/src/Command/Generate/PluginMailCommand.php',
+    'Drupal\\Console\\Command\\Generate\\PluginMigrateDataParserCommand' => $vendorDir . '/drupal/console/src/Command/Generate/PluginMigrateDataParserCommand.php',
     'Drupal\\Console\\Command\\Generate\\PluginMigrateProcessCommand' => $vendorDir . '/drupal/console/src/Command/Generate/PluginMigrateProcessCommand.php',
     'Drupal\\Console\\Command\\Generate\\PluginMigrateSourceCommand' => $vendorDir . '/drupal/console/src/Command/Generate/PluginMigrateSourceCommand.php',
+    'Drupal\\Console\\Command\\Generate\\PluginQueueWorkerCommand' => $vendorDir . '/drupal/console/src/Command/Generate/PluginQueueWorkerCommand.php',
     'Drupal\\Console\\Command\\Generate\\PluginRestResourceCommand' => $vendorDir . '/drupal/console/src/Command/Generate/PluginRestResourceCommand.php',
     'Drupal\\Console\\Command\\Generate\\PluginRulesActionCommand' => $vendorDir . '/drupal/console/src/Command/Generate/PluginRulesActionCommand.php',
+    'Drupal\\Console\\Command\\Generate\\PluginRulesConditionCommand' => $vendorDir . '/drupal/console/src/Command/Generate/PluginRulesConditionCommand.php',
+    'Drupal\\Console\\Command\\Generate\\PluginRulesDataprocessorCommand' => $vendorDir . '/drupal/console/src/Command/Generate/PluginRulesDataprocessorCommand.php',
     'Drupal\\Console\\Command\\Generate\\PluginSkeletonCommand' => $vendorDir . '/drupal/console/src/Command/Generate/PluginSkeletonCommand.php',
     'Drupal\\Console\\Command\\Generate\\PluginTypeAnnotationCommand' => $vendorDir . '/drupal/console/src/Command/Generate/PluginTypeAnnotationCommand.php',
     'Drupal\\Console\\Command\\Generate\\PluginTypeYamlCommand' => $vendorDir . '/drupal/console/src/Command/Generate/PluginTypeYamlCommand.php',
+    'Drupal\\Console\\Command\\Generate\\PluginValidationConstraintCommand' => $vendorDir . '/drupal/console/src/Command/Generate/PluginValidationConstraintCommand.php',
     'Drupal\\Console\\Command\\Generate\\PluginViewsFieldCommand' => $vendorDir . '/drupal/console/src/Command/Generate/PluginViewsFieldCommand.php',
     'Drupal\\Console\\Command\\Generate\\PostUpdateCommand' => $vendorDir . '/drupal/console/src/Command/Generate/PostUpdateCommand.php',
     'Drupal\\Console\\Command\\Generate\\ProfileCommand' => $vendorDir . '/drupal/console/src/Command/Generate/ProfileCommand.php',
     'Drupal\\Console\\Command\\Generate\\RouteSubscriberCommand' => $vendorDir . '/drupal/console/src/Command/Generate/RouteSubscriberCommand.php',
     'Drupal\\Console\\Command\\Generate\\ServiceCommand' => $vendorDir . '/drupal/console/src/Command/Generate/ServiceCommand.php',
     'Drupal\\Console\\Command\\Generate\\ThemeCommand' => $vendorDir . '/drupal/console/src/Command/Generate/ThemeCommand.php',
+    'Drupal\\Console\\Command\\Generate\\ThemeSettingCommand' => $vendorDir . '/drupal/console/src/Command/Generate/ThemeSettingCommand.php',
     'Drupal\\Console\\Command\\Generate\\TwigExtensionCommand' => $vendorDir . '/drupal/console/src/Command/Generate/TwigExtensionCommand.php',
     'Drupal\\Console\\Command\\Generate\\UpdateCommand' => $vendorDir . '/drupal/console/src/Command/Generate/UpdateCommand.php',
     'Drupal\\Console\\Command\\Image\\StylesFlushCommand' => $vendorDir . '/drupal/console/src/Command/Image/StylesFlushCommand.php',
@@ -1060,6 +1090,7 @@
     'Drupal\\Console\\Command\\Role\\NewCommand' => $vendorDir . '/drupal/console/src/Command/Role/NewCommand.php',
     'Drupal\\Console\\Command\\Router\\RebuildCommand' => $vendorDir . '/drupal/console/src/Command/Router/RebuildCommand.php',
     'Drupal\\Console\\Command\\ServerCommand' => $vendorDir . '/drupal/console/src/Command/ServerCommand.php',
+    'Drupal\\Console\\Command\\Service\\OverrideCommand' => $vendorDir . '/drupal/console/src/Command/Service/OverrideCommand.php',
     'Drupal\\Console\\Command\\Shared\\ArrayInputTrait' => $vendorDir . '/drupal/console/src/Command/Shared/ArrayInputTrait.php',
     'Drupal\\Console\\Command\\Shared\\ConfirmationTrait' => $vendorDir . '/drupal/console/src/Command/Shared/ConfirmationTrait.php',
     'Drupal\\Console\\Command\\Shared\\ConnectTrait' => $vendorDir . '/drupal/console/src/Command/Shared/ConnectTrait.php',
@@ -1080,7 +1111,9 @@
     'Drupal\\Console\\Command\\Shared\\ServicesTrait' => $vendorDir . '/drupal/console/src/Command/Shared/ServicesTrait.php',
     'Drupal\\Console\\Command\\Shared\\ThemeBreakpointTrait' => $vendorDir . '/drupal/console/src/Command/Shared/ThemeBreakpointTrait.php',
     'Drupal\\Console\\Command\\Shared\\ThemeRegionTrait' => $vendorDir . '/drupal/console/src/Command/Shared/ThemeRegionTrait.php',
+    'Drupal\\Console\\Command\\Shared\\ThemeTrait' => $vendorDir . '/drupal/console/src/Command/Shared/ThemeTrait.php',
     'Drupal\\Console\\Command\\Shared\\TranslationTrait' => $vendorDir . '/drupal/console/src/Command/Shared/TranslationTrait.php',
+    'Drupal\\Console\\Command\\Shared\\UpdateTrait' => $vendorDir . '/drupal/console/src/Command/Shared/UpdateTrait.php',
     'Drupal\\Console\\Command\\ShellCommand' => $vendorDir . '/drupal/console/src/Command/ShellCommand.php',
     'Drupal\\Console\\Command\\Site\\ImportLocalCommand' => $vendorDir . '/drupal/console/src/Command/Site/ImportLocalCommand.php',
     'Drupal\\Console\\Command\\Site\\InstallCommand' => $vendorDir . '/drupal/console/src/Command/Site/InstallCommand.php',
@@ -1107,11 +1140,14 @@
     'Drupal\\Console\\Command\\User\\PasswordHashCommand' => $vendorDir . '/drupal/console/src/Command/User/PasswordHashCommand.php',
     'Drupal\\Console\\Command\\User\\PasswordResetCommand' => $vendorDir . '/drupal/console/src/Command/User/PasswordResetCommand.php',
     'Drupal\\Console\\Command\\User\\RoleCommand' => $vendorDir . '/drupal/console/src/Command/User/RoleCommand.php',
+    'Drupal\\Console\\Command\\User\\UnblockCommand' => $vendorDir . '/drupal/console/src/Command/User/UnblockCommand.php',
     'Drupal\\Console\\Command\\User\\UserBase' => $vendorDir . '/drupal/console/src/Command/User/UserBase.php',
     'Drupal\\Console\\Command\\Views\\DisableCommand' => $vendorDir . '/drupal/console/src/Command/Views/DisableCommand.php',
     'Drupal\\Console\\Command\\Views\\EnableCommand' => $vendorDir . '/drupal/console/src/Command/Views/EnableCommand.php',
+    'Drupal\\Console\\Composer\\Plugin\\DrupalConsoleInstaller' => $vendorDir . '/drupal/console-extend-plugin/src/DrupalConsoleInstaller.php',
     'Drupal\\Console\\Composer\\Plugin\\Extender' => $vendorDir . '/drupal/console-extend-plugin/src/Extender.php',
     'Drupal\\Console\\Composer\\Plugin\\ExtenderManager' => $vendorDir . '/drupal/console-extend-plugin/src/ExtenderManager.php',
+    'Drupal\\Console\\Composer\\Plugin\\Installer' => $vendorDir . '/drupal/console-extend-plugin/src/Installer.php',
     'Drupal\\Console\\Core\\Application' => $vendorDir . '/drupal/console-core/src/Application.php',
     'Drupal\\Console\\Core\\Bootstrap\\DrupalConsoleCore' => $vendorDir . '/drupal/console-core/src/Bootstrap/DrupalConsoleCore.php',
     'Drupal\\Console\\Core\\Bootstrap\\DrupalInterface' => $vendorDir . '/drupal/console-core/src/Bootstrap/DrupalInterface.php',
@@ -1142,7 +1178,10 @@
     'Drupal\\Console\\Core\\Descriptor\\TextDescriptor' => $vendorDir . '/drupal/console-core/src/Descriptor/TextDescriptor.php',
     'Drupal\\Console\\Core\\EventSubscriber\\CallCommandListener' => $vendorDir . '/drupal/console-core/src/EventSubscriber/CallCommandListener.php',
     'Drupal\\Console\\Core\\EventSubscriber\\DefaultValueEventListener' => $vendorDir . '/drupal/console-core/src/EventSubscriber/DefaultValueEventListener.php',
+    'Drupal\\Console\\Core\\EventSubscriber\\MaintenanceModeListener' => $vendorDir . '/drupal/console-core/src/EventSubscriber/MaintenanceModeListener.php',
     'Drupal\\Console\\Core\\EventSubscriber\\RemoveMessagesListener' => $vendorDir . '/drupal/console-core/src/EventSubscriber/RemoveMessagesListener.php',
+    'Drupal\\Console\\Core\\EventSubscriber\\SaveStatisticsListener' => $vendorDir . '/drupal/console-core/src/EventSubscriber/SaveStatisticsListener.php',
+    'Drupal\\Console\\Core\\EventSubscriber\\SendStatisticsListener' => $vendorDir . '/drupal/console-core/src/EventSubscriber/SendStatisticsListener.php',
     'Drupal\\Console\\Core\\EventSubscriber\\ShowGenerateChainListener' => $vendorDir . '/drupal/console-core/src/EventSubscriber/ShowGenerateChainListener.php',
     'Drupal\\Console\\Core\\EventSubscriber\\ShowGenerateCountCodeLinesListener' => $vendorDir . '/drupal/console-core/src/EventSubscriber/ShowGenerateCountCodeLinesListener.php',
     'Drupal\\Console\\Core\\EventSubscriber\\ShowGenerateInlineListener' => $vendorDir . '/drupal/console-core/src/EventSubscriber/ShowGenerateInlineListener.php',
@@ -1179,9 +1218,11 @@
     'Drupal\\Console\\Extension\\Manager' => $vendorDir . '/drupal/console/src/Extension/Manager.php',
     'Drupal\\Console\\Generator\\AjaxCommandGenerator' => $vendorDir . '/drupal/console/src/Generator/AjaxCommandGenerator.php',
     'Drupal\\Console\\Generator\\AuthenticationProviderGenerator' => $vendorDir . '/drupal/console/src/Generator/AuthenticationProviderGenerator.php',
+    'Drupal\\Console\\Generator\\BlockTypeGenerator' => $vendorDir . '/drupal/console/src/Generator/BlockTypeGenerator.php',
     'Drupal\\Console\\Generator\\BreakPointGenerator' => $vendorDir . '/drupal/console/src/Generator/BreakPointGenerator.php',
     'Drupal\\Console\\Generator\\CacheContextGenerator' => $vendorDir . '/drupal/console/src/Generator/CacheContextGenerator.php',
     'Drupal\\Console\\Generator\\CommandGenerator' => $vendorDir . '/drupal/console/src/Generator/CommandGenerator.php',
+    'Drupal\\Console\\Generator\\ComposerGenerator' => $vendorDir . '/drupal/console/src/Generator/ComposerGenerator.php',
     'Drupal\\Console\\Generator\\ControllerGenerator' => $vendorDir . '/drupal/console/src/Generator/ControllerGenerator.php',
     'Drupal\\Console\\Generator\\DatabaseSettingsGenerator' => $vendorDir . '/drupal/console/src/Generator/DatabaseSettingsGenerator.php',
     'Drupal\\Console\\Generator\\DockerInitGenerator' => $vendorDir . '/drupal/console/src/Generator/DockerInitGenerator.php',
@@ -1200,25 +1241,32 @@
     'Drupal\\Console\\Generator\\PluginBlockGenerator' => $vendorDir . '/drupal/console/src/Generator/PluginBlockGenerator.php',
     'Drupal\\Console\\Generator\\PluginCKEditorButtonGenerator' => $vendorDir . '/drupal/console/src/Generator/PluginCKEditorButtonGenerator.php',
     'Drupal\\Console\\Generator\\PluginConditionGenerator' => $vendorDir . '/drupal/console/src/Generator/PluginConditionGenerator.php',
+    'Drupal\\Console\\Generator\\PluginDerivativeGenerator' => $vendorDir . '/drupal/console/src/Generator/PluginDerivativeGenerator.php',
     'Drupal\\Console\\Generator\\PluginFieldFormatterGenerator' => $vendorDir . '/drupal/console/src/Generator/PluginFieldFormatterGenerator.php',
     'Drupal\\Console\\Generator\\PluginFieldTypeGenerator' => $vendorDir . '/drupal/console/src/Generator/PluginFieldTypeGenerator.php',
     'Drupal\\Console\\Generator\\PluginFieldWidgetGenerator' => $vendorDir . '/drupal/console/src/Generator/PluginFieldWidgetGenerator.php',
     'Drupal\\Console\\Generator\\PluginImageEffectGenerator' => $vendorDir . '/drupal/console/src/Generator/PluginImageEffectGenerator.php',
     'Drupal\\Console\\Generator\\PluginImageFormatterGenerator' => $vendorDir . '/drupal/console/src/Generator/PluginImageFormatterGenerator.php',
     'Drupal\\Console\\Generator\\PluginMailGenerator' => $vendorDir . '/drupal/console/src/Generator/PluginMailGenerator.php',
+    'Drupal\\Console\\Generator\\PluginMigrateDataParserGenerator' => $vendorDir . '/drupal/console/src/Generator/PluginMigrateDataParserGenerator.php',
     'Drupal\\Console\\Generator\\PluginMigrateProcessGenerator' => $vendorDir . '/drupal/console/src/Generator/PluginMigrateProcessGenerator.php',
     'Drupal\\Console\\Generator\\PluginMigrateSourceGenerator' => $vendorDir . '/drupal/console/src/Generator/PluginMigrateSourceGenerator.php',
+    'Drupal\\Console\\Generator\\PluginQueueWorkerGenerator' => $vendorDir . '/drupal/console/src/Generator/PluginQueueWorkerGenerator.php',
     'Drupal\\Console\\Generator\\PluginRestResourceGenerator' => $vendorDir . '/drupal/console/src/Generator/PluginRestResourceGenerator.php',
     'Drupal\\Console\\Generator\\PluginRulesActionGenerator' => $vendorDir . '/drupal/console/src/Generator/PluginRulesActionGenerator.php',
+    'Drupal\\Console\\Generator\\PluginRulesConditionGenerator' => $vendorDir . '/drupal/console/src/Generator/PluginRulesConditionGenerator.php',
+    'Drupal\\Console\\Generator\\PluginRulesDataprocessorGenerator' => $vendorDir . '/drupal/console/src/Generator/PluginRulesDataprocessorGenerator.php',
     'Drupal\\Console\\Generator\\PluginSkeletonGenerator' => $vendorDir . '/drupal/console/src/Generator/PluginSkeletonGenerator.php',
     'Drupal\\Console\\Generator\\PluginTypeAnnotationGenerator' => $vendorDir . '/drupal/console/src/Generator/PluginTypeAnnotationGenerator.php',
     'Drupal\\Console\\Generator\\PluginTypeYamlGenerator' => $vendorDir . '/drupal/console/src/Generator/PluginTypeYamlGenerator.php',
+    'Drupal\\Console\\Generator\\PluginValidationConstraintGenerator' => $vendorDir . '/drupal/console/src/Generator/PluginValidationConstraintGenerator.php',
     'Drupal\\Console\\Generator\\PluginViewsFieldGenerator' => $vendorDir . '/drupal/console/src/Generator/PluginViewsFieldGenerator.php',
     'Drupal\\Console\\Generator\\PostUpdateGenerator' => $vendorDir . '/drupal/console/src/Generator/PostUpdateGenerator.php',
     'Drupal\\Console\\Generator\\ProfileGenerator' => $vendorDir . '/drupal/console/src/Generator/ProfileGenerator.php',
     'Drupal\\Console\\Generator\\RouteSubscriberGenerator' => $vendorDir . '/drupal/console/src/Generator/RouteSubscriberGenerator.php',
     'Drupal\\Console\\Generator\\ServiceGenerator' => $vendorDir . '/drupal/console/src/Generator/ServiceGenerator.php',
     'Drupal\\Console\\Generator\\ThemeGenerator' => $vendorDir . '/drupal/console/src/Generator/ThemeGenerator.php',
+    'Drupal\\Console\\Generator\\ThemeSettingGenerator' => $vendorDir . '/drupal/console/src/Generator/ThemeSettingGenerator.php',
     'Drupal\\Console\\Generator\\TwigExtensionGenerator' => $vendorDir . '/drupal/console/src/Generator/TwigExtensionGenerator.php',
     'Drupal\\Console\\Generator\\UpdateGenerator' => $vendorDir . '/drupal/console/src/Generator/UpdateGenerator.php',
     'Drupal\\Console\\Override\\ConfigSubscriber' => $vendorDir . '/drupal/console/src/Override/ConfigSubscriber.php',
@@ -3259,9 +3307,6 @@
     'JaimePerez\\TwigConfigurableI18n\\Twig\\Extensions\\Extension\\I18n' => $vendorDir . '/jaimeperez/twig-configurable-i18n/src/Twig/Extensions/Extension/I18n.php',
     'JaimePerez\\TwigConfigurableI18n\\Twig\\Extensions\\Node\\Trans' => $vendorDir . '/jaimeperez/twig-configurable-i18n/src/Twig/Extensions/Node/Trans.php',
     'JaimePerez\\TwigConfigurableI18n\\Twig\\Extensions\\TokenParser\\Trans' => $vendorDir . '/jaimeperez/twig-configurable-i18n/src/Twig/Extensions/TokenParser/Trans.php',
-    'JakubOnderka\\PhpConsoleColor\\ConsoleColor' => $vendorDir . '/jakub-onderka/php-console-color/src/ConsoleColor.php',
-    'JakubOnderka\\PhpConsoleColor\\InvalidStyleException' => $vendorDir . '/jakub-onderka/php-console-color/src/InvalidStyleException.php',
-    'JakubOnderka\\PhpConsoleHighlighter\\Highlighter' => $vendorDir . '/jakub-onderka/php-console-highlighter/src/Highlighter.php',
     'Laminas\\Diactoros\\AbstractSerializer' => $vendorDir . '/laminas/laminas-diactoros/src/AbstractSerializer.php',
     'Laminas\\Diactoros\\CallbackStream' => $vendorDir . '/laminas/laminas-diactoros/src/CallbackStream.php',
     'Laminas\\Diactoros\\Exception\\DeprecatedMethodException' => $vendorDir . '/laminas/laminas-diactoros/src/Exception/DeprecatedMethodException.php',
@@ -3518,8 +3563,8 @@
     'Masterminds\\HTML5\\Serializer\\Traverser' => $vendorDir . '/masterminds/html5/src/HTML5/Serializer/Traverser.php',
     'Mobile_Detect' => $vendorDir . '/mobiledetect/mobiledetectlib/Mobile_Detect.php',
     'OS_Guess' => $vendorDir . '/pear/pear-core-minimal/src/OS/Guess.php',
-    'OomphInc\\ComposerInstallersExtender\\Installer' => $vendorDir . '/oomphinc/composer-installers-extender/src/Installer.php',
-    'OomphInc\\ComposerInstallersExtender\\InstallerHelper' => $vendorDir . '/oomphinc/composer-installers-extender/src/InstallerHelper.php',
+    'OomphInc\\ComposerInstallersExtender\\Installers\\CustomInstaller' => $vendorDir . '/oomphinc/composer-installers-extender/src/Installers/CustomInstaller.php',
+    'OomphInc\\ComposerInstallersExtender\\Installers\\Installer' => $vendorDir . '/oomphinc/composer-installers-extender/src/Installers/Installer.php',
     'OomphInc\\ComposerInstallersExtender\\Plugin' => $vendorDir . '/oomphinc/composer-installers-extender/src/Plugin.php',
     'PEAR' => $vendorDir . '/pear/pear-core-minimal/src/PEAR.php',
     'PEAR_Error' => $vendorDir . '/pear/pear-core-minimal/src/PEAR.php',
@@ -3565,9 +3610,16 @@
     'PhpParser\\JsonDecoder' => $vendorDir . '/nikic/php-parser/lib/PhpParser/JsonDecoder.php',
     'PhpParser\\Lexer' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer.php',
     'PhpParser\\Lexer\\Emulative' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer/Emulative.php',
+    'PhpParser\\Lexer\\TokenEmulator\\AttributeEmulator' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/AttributeEmulator.php',
     'PhpParser\\Lexer\\TokenEmulator\\CoaleseEqualTokenEmulator' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/CoaleseEqualTokenEmulator.php',
+    'PhpParser\\Lexer\\TokenEmulator\\FlexibleDocStringEmulator' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/FlexibleDocStringEmulator.php',
     'PhpParser\\Lexer\\TokenEmulator\\FnTokenEmulator' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/FnTokenEmulator.php',
-    'PhpParser\\Lexer\\TokenEmulator\\TokenEmulatorInterface' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/TokenEmulatorInterface.php',
+    'PhpParser\\Lexer\\TokenEmulator\\KeywordEmulator' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/KeywordEmulator.php',
+    'PhpParser\\Lexer\\TokenEmulator\\MatchTokenEmulator' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/MatchTokenEmulator.php',
+    'PhpParser\\Lexer\\TokenEmulator\\NullsafeTokenEmulator' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/NullsafeTokenEmulator.php',
+    'PhpParser\\Lexer\\TokenEmulator\\NumericLiteralSeparatorEmulator' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/NumericLiteralSeparatorEmulator.php',
+    'PhpParser\\Lexer\\TokenEmulator\\ReverseEmulator' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ReverseEmulator.php',
+    'PhpParser\\Lexer\\TokenEmulator\\TokenEmulator' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/TokenEmulator.php',
     'PhpParser\\NameContext' => $vendorDir . '/nikic/php-parser/lib/PhpParser/NameContext.php',
     'PhpParser\\Node' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node.php',
     'PhpParser\\NodeAbstract' => $vendorDir . '/nikic/php-parser/lib/PhpParser/NodeAbstract.php',
@@ -3581,7 +3633,11 @@
     'PhpParser\\NodeVisitor\\FindingVisitor' => $vendorDir . '/nikic/php-parser/lib/PhpParser/NodeVisitor/FindingVisitor.php',
     'PhpParser\\NodeVisitor\\FirstFindingVisitor' => $vendorDir . '/nikic/php-parser/lib/PhpParser/NodeVisitor/FirstFindingVisitor.php',
     'PhpParser\\NodeVisitor\\NameResolver' => $vendorDir . '/nikic/php-parser/lib/PhpParser/NodeVisitor/NameResolver.php',
+    'PhpParser\\NodeVisitor\\NodeConnectingVisitor' => $vendorDir . '/nikic/php-parser/lib/PhpParser/NodeVisitor/NodeConnectingVisitor.php',
+    'PhpParser\\NodeVisitor\\ParentConnectingVisitor' => $vendorDir . '/nikic/php-parser/lib/PhpParser/NodeVisitor/ParentConnectingVisitor.php',
     'PhpParser\\Node\\Arg' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Arg.php',
+    'PhpParser\\Node\\Attribute' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Attribute.php',
+    'PhpParser\\Node\\AttributeGroup' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/AttributeGroup.php',
     'PhpParser\\Node\\Const_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Const_.php',
     'PhpParser\\Node\\Expr' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr.php',
     'PhpParser\\Node\\Expr\\ArrayDimFetch' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/ArrayDimFetch.php',
@@ -3657,8 +3713,11 @@
     'PhpParser\\Node\\Expr\\Instanceof_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Instanceof_.php',
     'PhpParser\\Node\\Expr\\Isset_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Isset_.php',
     'PhpParser\\Node\\Expr\\List_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/List_.php',
+    'PhpParser\\Node\\Expr\\Match_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Match_.php',
     'PhpParser\\Node\\Expr\\MethodCall' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/MethodCall.php',
     'PhpParser\\Node\\Expr\\New_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/New_.php',
+    'PhpParser\\Node\\Expr\\NullsafeMethodCall' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/NullsafeMethodCall.php',
+    'PhpParser\\Node\\Expr\\NullsafePropertyFetch' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/NullsafePropertyFetch.php',
     'PhpParser\\Node\\Expr\\PostDec' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/PostDec.php',
     'PhpParser\\Node\\Expr\\PostInc' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/PostInc.php',
     'PhpParser\\Node\\Expr\\PreDec' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/PreDec.php',
@@ -3669,6 +3728,7 @@
     'PhpParser\\Node\\Expr\\StaticCall' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/StaticCall.php',
     'PhpParser\\Node\\Expr\\StaticPropertyFetch' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/StaticPropertyFetch.php',
     'PhpParser\\Node\\Expr\\Ternary' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Ternary.php',
+    'PhpParser\\Node\\Expr\\Throw_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Throw_.php',
     'PhpParser\\Node\\Expr\\UnaryMinus' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryMinus.php',
     'PhpParser\\Node\\Expr\\UnaryPlus' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryPlus.php',
     'PhpParser\\Node\\Expr\\Variable' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Variable.php',
@@ -3676,6 +3736,7 @@
     'PhpParser\\Node\\Expr\\Yield_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Yield_.php',
     'PhpParser\\Node\\FunctionLike' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/FunctionLike.php',
     'PhpParser\\Node\\Identifier' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Identifier.php',
+    'PhpParser\\Node\\MatchArm' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/MatchArm.php',
     'PhpParser\\Node\\Name' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Name.php',
     'PhpParser\\Node\\Name\\FullyQualified' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Name/FullyQualified.php',
     'PhpParser\\Node\\Name\\Relative' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Name/Relative.php',
@@ -3744,6 +3805,7 @@
     'PhpParser\\Node\\Stmt\\UseUse' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/UseUse.php',
     'PhpParser\\Node\\Stmt\\Use_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Use_.php',
     'PhpParser\\Node\\Stmt\\While_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/While_.php',
+    'PhpParser\\Node\\UnionType' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/UnionType.php',
     'PhpParser\\Node\\VarLikeIdentifier' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/VarLikeIdentifier.php',
     'PhpParser\\Parser' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Parser.php',
     'PhpParser\\ParserAbstract' => $vendorDir . '/nikic/php-parser/lib/PhpParser/ParserAbstract.php',
@@ -3781,14 +3843,15 @@
     'Psy\\CodeCleaner\\CallTimePassByReferencePass' => $vendorDir . '/psy/psysh/src/CodeCleaner/CallTimePassByReferencePass.php',
     'Psy\\CodeCleaner\\CalledClassPass' => $vendorDir . '/psy/psysh/src/CodeCleaner/CalledClassPass.php',
     'Psy\\CodeCleaner\\CodeCleanerPass' => $vendorDir . '/psy/psysh/src/CodeCleaner/CodeCleanerPass.php',
+    'Psy\\CodeCleaner\\EmptyArrayDimFetchPass' => $vendorDir . '/psy/psysh/src/CodeCleaner/EmptyArrayDimFetchPass.php',
     'Psy\\CodeCleaner\\ExitPass' => $vendorDir . '/psy/psysh/src/CodeCleaner/ExitPass.php',
     'Psy\\CodeCleaner\\FinalClassPass' => $vendorDir . '/psy/psysh/src/CodeCleaner/FinalClassPass.php',
     'Psy\\CodeCleaner\\FunctionContextPass' => $vendorDir . '/psy/psysh/src/CodeCleaner/FunctionContextPass.php',
     'Psy\\CodeCleaner\\FunctionReturnInWriteContextPass' => $vendorDir . '/psy/psysh/src/CodeCleaner/FunctionReturnInWriteContextPass.php',
     'Psy\\CodeCleaner\\ImplicitReturnPass' => $vendorDir . '/psy/psysh/src/CodeCleaner/ImplicitReturnPass.php',
     'Psy\\CodeCleaner\\InstanceOfPass' => $vendorDir . '/psy/psysh/src/CodeCleaner/InstanceOfPass.php',
+    'Psy\\CodeCleaner\\LabelContextPass' => $vendorDir . '/psy/psysh/src/CodeCleaner/LabelContextPass.php',
     'Psy\\CodeCleaner\\LeavePsyshAlonePass' => $vendorDir . '/psy/psysh/src/CodeCleaner/LeavePsyshAlonePass.php',
-    'Psy\\CodeCleaner\\LegacyEmptyPass' => $vendorDir . '/psy/psysh/src/CodeCleaner/LegacyEmptyPass.php',
     'Psy\\CodeCleaner\\ListPass' => $vendorDir . '/psy/psysh/src/CodeCleaner/ListPass.php',
     'Psy\\CodeCleaner\\LoopContextPass' => $vendorDir . '/psy/psysh/src/CodeCleaner/LoopContextPass.php',
     'Psy\\CodeCleaner\\MagicConstantsPass' => $vendorDir . '/psy/psysh/src/CodeCleaner/MagicConstantsPass.php',
@@ -3797,6 +3860,7 @@
     'Psy\\CodeCleaner\\NoReturnValue' => $vendorDir . '/psy/psysh/src/CodeCleaner/NoReturnValue.php',
     'Psy\\CodeCleaner\\PassableByReferencePass' => $vendorDir . '/psy/psysh/src/CodeCleaner/PassableByReferencePass.php',
     'Psy\\CodeCleaner\\RequirePass' => $vendorDir . '/psy/psysh/src/CodeCleaner/RequirePass.php',
+    'Psy\\CodeCleaner\\ReturnTypePass' => $vendorDir . '/psy/psysh/src/CodeCleaner/ReturnTypePass.php',
     'Psy\\CodeCleaner\\StrictTypesPass' => $vendorDir . '/psy/psysh/src/CodeCleaner/StrictTypesPass.php',
     'Psy\\CodeCleaner\\UseStatementPass' => $vendorDir . '/psy/psysh/src/CodeCleaner/UseStatementPass.php',
     'Psy\\CodeCleaner\\ValidClassNamePass' => $vendorDir . '/psy/psysh/src/CodeCleaner/ValidClassNamePass.php',
@@ -3819,10 +3883,8 @@
     'Psy\\Command\\ListCommand\\Enumerator' => $vendorDir . '/psy/psysh/src/Command/ListCommand/Enumerator.php',
     'Psy\\Command\\ListCommand\\FunctionEnumerator' => $vendorDir . '/psy/psysh/src/Command/ListCommand/FunctionEnumerator.php',
     'Psy\\Command\\ListCommand\\GlobalVariableEnumerator' => $vendorDir . '/psy/psysh/src/Command/ListCommand/GlobalVariableEnumerator.php',
-    'Psy\\Command\\ListCommand\\InterfaceEnumerator' => $vendorDir . '/psy/psysh/src/Command/ListCommand/InterfaceEnumerator.php',
     'Psy\\Command\\ListCommand\\MethodEnumerator' => $vendorDir . '/psy/psysh/src/Command/ListCommand/MethodEnumerator.php',
     'Psy\\Command\\ListCommand\\PropertyEnumerator' => $vendorDir . '/psy/psysh/src/Command/ListCommand/PropertyEnumerator.php',
-    'Psy\\Command\\ListCommand\\TraitEnumerator' => $vendorDir . '/psy/psysh/src/Command/ListCommand/TraitEnumerator.php',
     'Psy\\Command\\ListCommand\\VariableEnumerator' => $vendorDir . '/psy/psysh/src/Command/ListCommand/VariableEnumerator.php',
     'Psy\\Command\\ParseCommand' => $vendorDir . '/psy/psysh/src/Command/ParseCommand.php',
     'Psy\\Command\\PsyVersionCommand' => $vendorDir . '/psy/psysh/src/Command/PsyVersionCommand.php',
@@ -3849,8 +3911,8 @@
     'Psy\\Exception\\RuntimeException' => $vendorDir . '/psy/psysh/src/Exception/RuntimeException.php',
     'Psy\\Exception\\ThrowUpException' => $vendorDir . '/psy/psysh/src/Exception/ThrowUpException.php',
     'Psy\\Exception\\TypeErrorException' => $vendorDir . '/psy/psysh/src/Exception/TypeErrorException.php',
+    'Psy\\Exception\\UnexpectedTargetException' => $vendorDir . '/psy/psysh/src/Exception/UnexpectedTargetException.php',
     'Psy\\ExecutionClosure' => $vendorDir . '/psy/psysh/src/ExecutionClosure.php',
-    'Psy\\ExecutionLoop' => $vendorDir . '/psy/psysh/src/ExecutionLoop.php',
     'Psy\\ExecutionLoopClosure' => $vendorDir . '/psy/psysh/src/ExecutionLoopClosure.php',
     'Psy\\ExecutionLoop\\AbstractListener' => $vendorDir . '/psy/psysh/src/ExecutionLoop/AbstractListener.php',
     'Psy\\ExecutionLoop\\Listener' => $vendorDir . '/psy/psysh/src/ExecutionLoop/Listener.php',
@@ -3859,7 +3921,9 @@
     'Psy\\Formatter\\CodeFormatter' => $vendorDir . '/psy/psysh/src/Formatter/CodeFormatter.php',
     'Psy\\Formatter\\DocblockFormatter' => $vendorDir . '/psy/psysh/src/Formatter/DocblockFormatter.php',
     'Psy\\Formatter\\Formatter' => $vendorDir . '/psy/psysh/src/Formatter/Formatter.php',
+    'Psy\\Formatter\\ReflectorFormatter' => $vendorDir . '/psy/psysh/src/Formatter/ReflectorFormatter.php',
     'Psy\\Formatter\\SignatureFormatter' => $vendorDir . '/psy/psysh/src/Formatter/SignatureFormatter.php',
+    'Psy\\Formatter\\TraceFormatter' => $vendorDir . '/psy/psysh/src/Formatter/TraceFormatter.php',
     'Psy\\Input\\CodeArgument' => $vendorDir . '/psy/psysh/src/Input/CodeArgument.php',
     'Psy\\Input\\FilterOptions' => $vendorDir . '/psy/psysh/src/Input/FilterOptions.php',
     'Psy\\Input\\ShellInput' => $vendorDir . '/psy/psysh/src/Input/ShellInput.php',
@@ -3879,6 +3943,7 @@
     'Psy\\Reflection\\ReflectionConstant_' => $vendorDir . '/psy/psysh/src/Reflection/ReflectionConstant_.php',
     'Psy\\Reflection\\ReflectionLanguageConstruct' => $vendorDir . '/psy/psysh/src/Reflection/ReflectionLanguageConstruct.php',
     'Psy\\Reflection\\ReflectionLanguageConstructParameter' => $vendorDir . '/psy/psysh/src/Reflection/ReflectionLanguageConstructParameter.php',
+    'Psy\\Reflection\\ReflectionNamespace' => $vendorDir . '/psy/psysh/src/Reflection/ReflectionNamespace.php',
     'Psy\\Shell' => $vendorDir . '/psy/psysh/src/Shell.php',
     'Psy\\Sudo' => $vendorDir . '/psy/psysh/src/Sudo.php',
     'Psy\\Sudo\\SudoVisitor' => $vendorDir . '/psy/psysh/src/Sudo/SudoVisitor.php',
@@ -3999,6 +4064,7 @@
     'Robo\\State\\Data' => $vendorDir . '/consolidation/robo/src/State/Data.php',
     'Robo\\State\\StateAwareInterface' => $vendorDir . '/consolidation/robo/src/State/StateAwareInterface.php',
     'Robo\\State\\StateAwareTrait' => $vendorDir . '/consolidation/robo/src/State/StateAwareTrait.php',
+    'Robo\\Symfony\\SymfonyStyleInjector' => $vendorDir . '/consolidation/robo/src/Symfony/SymfonyStyleInjector.php',
     'Robo\\TaskAccessor' => $vendorDir . '/consolidation/robo/src/TaskAccessor.php',
     'Robo\\TaskInfo' => $vendorDir . '/consolidation/robo/src/TaskInfo.php',
     'Robo\\Task\\ApiGen\\ApiGen' => $vendorDir . '/consolidation/robo/src/Task/ApiGen/ApiGen.php',
@@ -4448,6 +4514,7 @@
     'Symfony\\Component\\Config\\Definition\\BooleanNode' => $vendorDir . '/symfony/config/Definition/BooleanNode.php',
     'Symfony\\Component\\Config\\Definition\\Builder\\ArrayNodeDefinition' => $vendorDir . '/symfony/config/Definition/Builder/ArrayNodeDefinition.php',
     'Symfony\\Component\\Config\\Definition\\Builder\\BooleanNodeDefinition' => $vendorDir . '/symfony/config/Definition/Builder/BooleanNodeDefinition.php',
+    'Symfony\\Component\\Config\\Definition\\Builder\\BuilderAwareInterface' => $vendorDir . '/symfony/config/Definition/Builder/BuilderAwareInterface.php',
     'Symfony\\Component\\Config\\Definition\\Builder\\EnumNodeDefinition' => $vendorDir . '/symfony/config/Definition/Builder/EnumNodeDefinition.php',
     'Symfony\\Component\\Config\\Definition\\Builder\\ExprBuilder' => $vendorDir . '/symfony/config/Definition/Builder/ExprBuilder.php',
     'Symfony\\Component\\Config\\Definition\\Builder\\FloatNodeDefinition' => $vendorDir . '/symfony/config/Definition/Builder/FloatNodeDefinition.php',
@@ -4473,6 +4540,7 @@
     'Symfony\\Component\\Config\\Definition\\Exception\\InvalidConfigurationException' => $vendorDir . '/symfony/config/Definition/Exception/InvalidConfigurationException.php',
     'Symfony\\Component\\Config\\Definition\\Exception\\InvalidDefinitionException' => $vendorDir . '/symfony/config/Definition/Exception/InvalidDefinitionException.php',
     'Symfony\\Component\\Config\\Definition\\Exception\\InvalidTypeException' => $vendorDir . '/symfony/config/Definition/Exception/InvalidTypeException.php',
+    'Symfony\\Component\\Config\\Definition\\Exception\\TreeWithoutRootNodeException' => $vendorDir . '/symfony/config/Definition/Exception/TreeWithoutRootNodeException.php',
     'Symfony\\Component\\Config\\Definition\\Exception\\UnsetKeyException' => $vendorDir . '/symfony/config/Definition/Exception/UnsetKeyException.php',
     'Symfony\\Component\\Config\\Definition\\FloatNode' => $vendorDir . '/symfony/config/Definition/FloatNode.php',
     'Symfony\\Component\\Config\\Definition\\IntegerNode' => $vendorDir . '/symfony/config/Definition/IntegerNode.php',
@@ -4483,10 +4551,10 @@
     'Symfony\\Component\\Config\\Definition\\PrototypedArrayNode' => $vendorDir . '/symfony/config/Definition/PrototypedArrayNode.php',
     'Symfony\\Component\\Config\\Definition\\ScalarNode' => $vendorDir . '/symfony/config/Definition/ScalarNode.php',
     'Symfony\\Component\\Config\\Definition\\VariableNode' => $vendorDir . '/symfony/config/Definition/VariableNode.php',
-    'Symfony\\Component\\Config\\DependencyInjection\\ConfigCachePass' => $vendorDir . '/symfony/config/DependencyInjection/ConfigCachePass.php',
     'Symfony\\Component\\Config\\Exception\\FileLoaderImportCircularReferenceException' => $vendorDir . '/symfony/config/Exception/FileLoaderImportCircularReferenceException.php',
     'Symfony\\Component\\Config\\Exception\\FileLoaderLoadException' => $vendorDir . '/symfony/config/Exception/FileLoaderLoadException.php',
     'Symfony\\Component\\Config\\Exception\\FileLocatorFileNotFoundException' => $vendorDir . '/symfony/config/Exception/FileLocatorFileNotFoundException.php',
+    'Symfony\\Component\\Config\\Exception\\LoaderLoadException' => $vendorDir . '/symfony/config/Exception/LoaderLoadException.php',
     'Symfony\\Component\\Config\\FileLocator' => $vendorDir . '/symfony/config/FileLocator.php',
     'Symfony\\Component\\Config\\FileLocatorInterface' => $vendorDir . '/symfony/config/FileLocatorInterface.php',
     'Symfony\\Component\\Config\\Loader\\DelegatingLoader' => $vendorDir . '/symfony/config/Loader/DelegatingLoader.php',
@@ -4506,8 +4574,6 @@
     'Symfony\\Component\\Config\\Resource\\FileResource' => $vendorDir . '/symfony/config/Resource/FileResource.php',
     'Symfony\\Component\\Config\\Resource\\GlobResource' => $vendorDir . '/symfony/config/Resource/GlobResource.php',
     'Symfony\\Component\\Config\\Resource\\ReflectionClassResource' => $vendorDir . '/symfony/config/Resource/ReflectionClassResource.php',
-    'Symfony\\Component\\Config\\Resource\\ReflectionMethodHhvmWrapper' => $vendorDir . '/symfony/config/Resource/ReflectionClassResource.php',
-    'Symfony\\Component\\Config\\Resource\\ReflectionParameterHhvmWrapper' => $vendorDir . '/symfony/config/Resource/ReflectionClassResource.php',
     'Symfony\\Component\\Config\\Resource\\ResourceInterface' => $vendorDir . '/symfony/config/Resource/ResourceInterface.php',
     'Symfony\\Component\\Config\\Resource\\SelfCheckingResourceChecker' => $vendorDir . '/symfony/config/Resource/SelfCheckingResourceChecker.php',
     'Symfony\\Component\\Config\\Resource\\SelfCheckingResourceInterface' => $vendorDir . '/symfony/config/Resource/SelfCheckingResourceInterface.php',
@@ -4837,14 +4903,15 @@
     'Symfony\\Component\\Filesystem\\Exception\\FileNotFoundException' => $vendorDir . '/symfony/filesystem/Exception/FileNotFoundException.php',
     'Symfony\\Component\\Filesystem\\Exception\\IOException' => $vendorDir . '/symfony/filesystem/Exception/IOException.php',
     'Symfony\\Component\\Filesystem\\Exception\\IOExceptionInterface' => $vendorDir . '/symfony/filesystem/Exception/IOExceptionInterface.php',
+    'Symfony\\Component\\Filesystem\\Exception\\InvalidArgumentException' => $vendorDir . '/symfony/filesystem/Exception/InvalidArgumentException.php',
     'Symfony\\Component\\Filesystem\\Filesystem' => $vendorDir . '/symfony/filesystem/Filesystem.php',
-    'Symfony\\Component\\Filesystem\\LockHandler' => $vendorDir . '/symfony/filesystem/LockHandler.php',
     'Symfony\\Component\\Finder\\Comparator\\Comparator' => $vendorDir . '/symfony/finder/Comparator/Comparator.php',
     'Symfony\\Component\\Finder\\Comparator\\DateComparator' => $vendorDir . '/symfony/finder/Comparator/DateComparator.php',
     'Symfony\\Component\\Finder\\Comparator\\NumberComparator' => $vendorDir . '/symfony/finder/Comparator/NumberComparator.php',
     'Symfony\\Component\\Finder\\Exception\\AccessDeniedException' => $vendorDir . '/symfony/finder/Exception/AccessDeniedException.php',
-    'Symfony\\Component\\Finder\\Exception\\ExceptionInterface' => $vendorDir . '/symfony/finder/Exception/ExceptionInterface.php',
+    'Symfony\\Component\\Finder\\Exception\\DirectoryNotFoundException' => $vendorDir . '/symfony/finder/Exception/DirectoryNotFoundException.php',
     'Symfony\\Component\\Finder\\Finder' => $vendorDir . '/symfony/finder/Finder.php',
+    'Symfony\\Component\\Finder\\Gitignore' => $vendorDir . '/symfony/finder/Gitignore.php',
     'Symfony\\Component\\Finder\\Glob' => $vendorDir . '/symfony/finder/Glob.php',
     'Symfony\\Component\\Finder\\Iterator\\CustomFilterIterator' => $vendorDir . '/symfony/finder/Iterator/CustomFilterIterator.php',
     'Symfony\\Component\\Finder\\Iterator\\DateRangeFilterIterator' => $vendorDir . '/symfony/finder/Iterator/DateRangeFilterIterator.php',
@@ -4853,7 +4920,6 @@
     'Symfony\\Component\\Finder\\Iterator\\FileTypeFilterIterator' => $vendorDir . '/symfony/finder/Iterator/FileTypeFilterIterator.php',
     'Symfony\\Component\\Finder\\Iterator\\FilecontentFilterIterator' => $vendorDir . '/symfony/finder/Iterator/FilecontentFilterIterator.php',
     'Symfony\\Component\\Finder\\Iterator\\FilenameFilterIterator' => $vendorDir . '/symfony/finder/Iterator/FilenameFilterIterator.php',
-    'Symfony\\Component\\Finder\\Iterator\\FilterIterator' => $vendorDir . '/symfony/finder/Iterator/FilterIterator.php',
     'Symfony\\Component\\Finder\\Iterator\\MultiplePcreFilterIterator' => $vendorDir . '/symfony/finder/Iterator/MultiplePcreFilterIterator.php',
     'Symfony\\Component\\Finder\\Iterator\\PathFilterIterator' => $vendorDir . '/symfony/finder/Iterator/PathFilterIterator.php',
     'Symfony\\Component\\Finder\\Iterator\\RecursiveDirectoryIterator' => $vendorDir . '/symfony/finder/Iterator/RecursiveDirectoryIterator.php',
@@ -5961,9 +6027,4 @@
     'enshrined\\svgSanitize\\data\\AttributeInterface' => $vendorDir . '/enshrined/svg-sanitize/src/data/AttributeInterface.php',
     'enshrined\\svgSanitize\\data\\TagInterface' => $vendorDir . '/enshrined/svg-sanitize/src/data/TagInterface.php',
     'enshrined\\svgSanitize\\data\\XPath' => $vendorDir . '/enshrined/svg-sanitize/src/data/XPath.php',
-    'rvtraveller\\QuicksilverComposerInstaller\\QuicksilverComposerInstaller' => $vendorDir . '/rvtraveller/qs-composer-installer/src/QuicksilverComposerInstaller.php',
-    'rvtraveller\\QuicksilverComposerInstaller\\QuicksilverComposerInstallerPlugin' => $vendorDir . '/rvtraveller/qs-composer-installer/src/QuicksilverComposerInstallerPlugin.php',
-    'zaporylie\\ComposerDrupalOptimizations\\Cache' => $vendorDir . '/zaporylie/composer-drupal-optimizations/src/Cache.php',
-    'zaporylie\\ComposerDrupalOptimizations\\Plugin' => $vendorDir . '/zaporylie/composer-drupal-optimizations/src/Plugin.php',
-    'zaporylie\\ComposerDrupalOptimizations\\TruncatedComposerRepository' => $vendorDir . '/zaporylie/composer-drupal-optimizations/src/TruncatedComposerRepository.php',
 );
diff --git a/vendor/composer/autoload_psr4.php b/vendor/composer/autoload_psr4.php
index af517035da35f0cbb0f7c893642a16417358adfd..204fed7266a60b5fee11ed6d0a9d9f6952146ad4 100644
--- a/vendor/composer/autoload_psr4.php
+++ b/vendor/composer/autoload_psr4.php
@@ -6,8 +6,6 @@
 $baseDir = dirname($vendorDir);
 
 return array(
-    'zaporylie\\ComposerDrupalOptimizations\\' => array($vendorDir . '/zaporylie/composer-drupal-optimizations/src'),
-    'rvtraveller\\QuicksilverComposerInstaller\\' => array($vendorDir . '/rvtraveller/qs-composer-installer/src'),
     'enshrined\\svgSanitize\\' => array($vendorDir . '/enshrined/svg-sanitize/src'),
     'cweagans\\Composer\\' => array($vendorDir . '/cweagans/composer-patches/src'),
     'XdgBaseDir\\' => array($vendorDir . '/dnoegel/php-xdg-base-dir/src'),
@@ -67,8 +65,6 @@
     'Laminas\\Feed\\' => array($vendorDir . '/laminas/laminas-feed/src'),
     'Laminas\\Escaper\\' => array($vendorDir . '/laminas/laminas-escaper/src'),
     'Laminas\\Diactoros\\' => array($vendorDir . '/laminas/laminas-diactoros/src'),
-    'JakubOnderka\\PhpConsoleHighlighter\\' => array($vendorDir . '/jakub-onderka/php-console-highlighter/src'),
-    'JakubOnderka\\PhpConsoleColor\\' => array($vendorDir . '/jakub-onderka/php-console-color/src'),
     'JaimePerez\\TwigConfigurableI18n\\' => array($vendorDir . '/jaimeperez/twig-configurable-i18n/src'),
     'Interop\\Container\\' => array($vendorDir . '/container-interop/container-interop/src/Interop/Container'),
     'GuzzleHttp\\Psr7\\' => array($vendorDir . '/guzzlehttp/psr7/src'),
@@ -87,8 +83,8 @@
     'Drupal\\Console\\Core\\' => array($vendorDir . '/drupal/console-core/src'),
     'Drupal\\Console\\Composer\\Plugin\\' => array($vendorDir . '/drupal/console-extend-plugin/src'),
     'Drupal\\Console\\' => array($vendorDir . '/drupal/console/src'),
+    'Drupal\\Composer\\Plugin\\Scaffold\\' => array($vendorDir . '/drupal/core-composer-scaffold'),
     'Drupal\\Component\\' => array($baseDir . '/web/core/lib/Drupal/Component'),
-    'DrupalComposer\\DrupalScaffold\\' => array($vendorDir . '/drupal-composer/drupal-scaffold/src'),
     'DrupalCodeGenerator\\' => array($vendorDir . '/chi-teck/drupal-code-generator/src'),
     'Doctrine\\Common\\Lexer\\' => array($vendorDir . '/doctrine/lexer/lib/Doctrine/Common/Lexer'),
     'Doctrine\\Common\\Inflector\\' => array($vendorDir . '/doctrine/inflector/lib/Doctrine/Common/Inflector'),
diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php
index cbe52c62663e22bb4417a935c5baa1b8648d79f2..1d7b45c22efd04ccc57a4334115ee6b476e78d4e 100644
--- a/vendor/composer/autoload_static.php
+++ b/vendor/composer/autoload_static.php
@@ -44,14 +44,6 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
     );
 
     public static $prefixLengthsPsr4 = array (
-        'z' => 
-        array (
-            'zaporylie\\ComposerDrupalOptimizations\\' => 38,
-        ),
-        'r' => 
-        array (
-            'rvtraveller\\QuicksilverComposerInstaller\\' => 41,
-        ),
         'e' => 
         array (
             'enshrined\\svgSanitize\\' => 22,
@@ -146,8 +138,6 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         ),
         'J' => 
         array (
-            'JakubOnderka\\PhpConsoleHighlighter\\' => 35,
-            'JakubOnderka\\PhpConsoleColor\\' => 29,
             'JaimePerez\\TwigConfigurableI18n\\' => 32,
         ),
         'I' => 
@@ -178,8 +168,8 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
             'Drupal\\Console\\Core\\' => 20,
             'Drupal\\Console\\Composer\\Plugin\\' => 31,
             'Drupal\\Console\\' => 15,
+            'Drupal\\Composer\\Plugin\\Scaffold\\' => 32,
             'Drupal\\Component\\' => 17,
-            'DrupalComposer\\DrupalScaffold\\' => 30,
             'DrupalCodeGenerator\\' => 20,
             'Doctrine\\Common\\Lexer\\' => 22,
             'Doctrine\\Common\\Inflector\\' => 26,
@@ -209,14 +199,6 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
     );
 
     public static $prefixDirsPsr4 = array (
-        'zaporylie\\ComposerDrupalOptimizations\\' => 
-        array (
-            0 => __DIR__ . '/..' . '/zaporylie/composer-drupal-optimizations/src',
-        ),
-        'rvtraveller\\QuicksilverComposerInstaller\\' => 
-        array (
-            0 => __DIR__ . '/..' . '/rvtraveller/qs-composer-installer/src',
-        ),
         'enshrined\\svgSanitize\\' => 
         array (
             0 => __DIR__ . '/..' . '/enshrined/svg-sanitize/src',
@@ -453,14 +435,6 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         array (
             0 => __DIR__ . '/..' . '/laminas/laminas-diactoros/src',
         ),
-        'JakubOnderka\\PhpConsoleHighlighter\\' => 
-        array (
-            0 => __DIR__ . '/..' . '/jakub-onderka/php-console-highlighter/src',
-        ),
-        'JakubOnderka\\PhpConsoleColor\\' => 
-        array (
-            0 => __DIR__ . '/..' . '/jakub-onderka/php-console-color/src',
-        ),
         'JaimePerez\\TwigConfigurableI18n\\' => 
         array (
             0 => __DIR__ . '/..' . '/jaimeperez/twig-configurable-i18n/src',
@@ -533,13 +507,13 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         array (
             0 => __DIR__ . '/..' . '/drupal/console/src',
         ),
-        'Drupal\\Component\\' => 
+        'Drupal\\Composer\\Plugin\\Scaffold\\' => 
         array (
-            0 => __DIR__ . '/../..' . '/web/core/lib/Drupal/Component',
+            0 => __DIR__ . '/..' . '/drupal/core-composer-scaffold',
         ),
-        'DrupalComposer\\DrupalScaffold\\' => 
+        'Drupal\\Component\\' => 
         array (
-            0 => __DIR__ . '/..' . '/drupal-composer/drupal-scaffold/src',
+            0 => __DIR__ . '/../..' . '/web/core/lib/Drupal/Component',
         ),
         'DrupalCodeGenerator\\' => 
         array (
@@ -1351,6 +1325,7 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'DrupalCodeGenerator\\Command\\Drupal_8\\Module\\ConfigurationEntity' => __DIR__ . '/..' . '/chi-teck/drupal-code-generator/src/Command/Drupal_8/Module/ConfigurationEntity.php',
         'DrupalCodeGenerator\\Command\\Drupal_8\\Module\\ContentEntity' => __DIR__ . '/..' . '/chi-teck/drupal-code-generator/src/Command/Drupal_8/Module/ContentEntity.php',
         'DrupalCodeGenerator\\Command\\Drupal_8\\Module\\Standard' => __DIR__ . '/..' . '/chi-teck/drupal-code-generator/src/Command/Drupal_8/Module/Standard.php',
+        'DrupalCodeGenerator\\Command\\Drupal_8\\PhpStormMetadata' => __DIR__ . '/..' . '/chi-teck/drupal-code-generator/src/Command/Drupal_8/PhpStormMetadata.php',
         'DrupalCodeGenerator\\Command\\Drupal_8\\PluginManager' => __DIR__ . '/..' . '/chi-teck/drupal-code-generator/src/Command/Drupal_8/PluginManager.php',
         'DrupalCodeGenerator\\Command\\Drupal_8\\Plugin\\Action' => __DIR__ . '/..' . '/chi-teck/drupal-code-generator/src/Command/Drupal_8/Plugin/Action.php',
         'DrupalCodeGenerator\\Command\\Drupal_8\\Plugin\\Block' => __DIR__ . '/..' . '/chi-teck/drupal-code-generator/src/Command/Drupal_8/Plugin/Block.php',
@@ -1433,12 +1408,6 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'DrupalCodeGenerator\\Twig\\TwigSortSetNode' => __DIR__ . '/..' . '/chi-teck/drupal-code-generator/src/Twig/TwigSortSetNode.php',
         'DrupalCodeGenerator\\Twig\\TwigSortTokenParser' => __DIR__ . '/..' . '/chi-teck/drupal-code-generator/src/Twig/TwigSortTokenParser.php',
         'DrupalCodeGenerator\\Utils' => __DIR__ . '/..' . '/chi-teck/drupal-code-generator/src/Utils.php',
-        'DrupalComposer\\DrupalScaffold\\CommandProvider' => __DIR__ . '/..' . '/drupal-composer/drupal-scaffold/src/CommandProvider.php',
-        'DrupalComposer\\DrupalScaffold\\DrupalScaffoldCommand' => __DIR__ . '/..' . '/drupal-composer/drupal-scaffold/src/DrupalScaffoldCommand.php',
-        'DrupalComposer\\DrupalScaffold\\FileFetcher' => __DIR__ . '/..' . '/drupal-composer/drupal-scaffold/src/FileFetcher.php',
-        'DrupalComposer\\DrupalScaffold\\Handler' => __DIR__ . '/..' . '/drupal-composer/drupal-scaffold/src/Handler.php',
-        'DrupalComposer\\DrupalScaffold\\Plugin' => __DIR__ . '/..' . '/drupal-composer/drupal-scaffold/src/Plugin.php',
-        'DrupalComposer\\DrupalScaffold\\PrestissimoFileFetcher' => __DIR__ . '/..' . '/drupal-composer/drupal-scaffold/src/PrestissimoFileFetcher.php',
         'DrupalFinder\\DrupalFinder' => __DIR__ . '/..' . '/webflo/drupal-finder/src/DrupalFinder.php',
         'DrupalProject\\composer\\ScriptHandler' => __DIR__ . '/../..' . '/scripts/composer/ScriptHandler.php',
         'Drupal\\Component\\Annotation\\AnnotationBase' => __DIR__ . '/../..' . '/web/core/lib/Drupal/Component/Annotation/AnnotationBase.php',
@@ -1597,6 +1566,29 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'Drupal\\Component\\Uuid\\Uuid' => __DIR__ . '/../..' . '/web/core/lib/Drupal/Component/Uuid/Uuid.php',
         'Drupal\\Component\\Uuid\\UuidInterface' => __DIR__ . '/../..' . '/web/core/lib/Drupal/Component/Uuid/UuidInterface.php',
         'Drupal\\Component\\Version\\Constraint' => __DIR__ . '/../..' . '/web/core/lib/Drupal/Component/Version/Constraint.php',
+        'Drupal\\Composer\\Plugin\\Scaffold\\AllowedPackages' => __DIR__ . '/..' . '/drupal/core-composer-scaffold/AllowedPackages.php',
+        'Drupal\\Composer\\Plugin\\Scaffold\\CommandProvider' => __DIR__ . '/..' . '/drupal/core-composer-scaffold/CommandProvider.php',
+        'Drupal\\Composer\\Plugin\\Scaffold\\ComposerScaffoldCommand' => __DIR__ . '/..' . '/drupal/core-composer-scaffold/ComposerScaffoldCommand.php',
+        'Drupal\\Composer\\Plugin\\Scaffold\\GenerateAutoloadReferenceFile' => __DIR__ . '/..' . '/drupal/core-composer-scaffold/GenerateAutoloadReferenceFile.php',
+        'Drupal\\Composer\\Plugin\\Scaffold\\Git' => __DIR__ . '/..' . '/drupal/core-composer-scaffold/Git.php',
+        'Drupal\\Composer\\Plugin\\Scaffold\\Handler' => __DIR__ . '/..' . '/drupal/core-composer-scaffold/Handler.php',
+        'Drupal\\Composer\\Plugin\\Scaffold\\Interpolator' => __DIR__ . '/..' . '/drupal/core-composer-scaffold/Interpolator.php',
+        'Drupal\\Composer\\Plugin\\Scaffold\\ManageGitIgnore' => __DIR__ . '/..' . '/drupal/core-composer-scaffold/ManageGitIgnore.php',
+        'Drupal\\Composer\\Plugin\\Scaffold\\ManageOptions' => __DIR__ . '/..' . '/drupal/core-composer-scaffold/ManageOptions.php',
+        'Drupal\\Composer\\Plugin\\Scaffold\\Operations\\AbstractOperation' => __DIR__ . '/..' . '/drupal/core-composer-scaffold/Operations/AbstractOperation.php',
+        'Drupal\\Composer\\Plugin\\Scaffold\\Operations\\AppendOp' => __DIR__ . '/..' . '/drupal/core-composer-scaffold/Operations/AppendOp.php',
+        'Drupal\\Composer\\Plugin\\Scaffold\\Operations\\OperationData' => __DIR__ . '/..' . '/drupal/core-composer-scaffold/Operations/OperationData.php',
+        'Drupal\\Composer\\Plugin\\Scaffold\\Operations\\OperationFactory' => __DIR__ . '/..' . '/drupal/core-composer-scaffold/Operations/OperationFactory.php',
+        'Drupal\\Composer\\Plugin\\Scaffold\\Operations\\OperationInterface' => __DIR__ . '/..' . '/drupal/core-composer-scaffold/Operations/OperationInterface.php',
+        'Drupal\\Composer\\Plugin\\Scaffold\\Operations\\ReplaceOp' => __DIR__ . '/..' . '/drupal/core-composer-scaffold/Operations/ReplaceOp.php',
+        'Drupal\\Composer\\Plugin\\Scaffold\\Operations\\ScaffoldFileCollection' => __DIR__ . '/..' . '/drupal/core-composer-scaffold/Operations/ScaffoldFileCollection.php',
+        'Drupal\\Composer\\Plugin\\Scaffold\\Operations\\ScaffoldResult' => __DIR__ . '/..' . '/drupal/core-composer-scaffold/Operations/ScaffoldResult.php',
+        'Drupal\\Composer\\Plugin\\Scaffold\\Operations\\SkipOp' => __DIR__ . '/..' . '/drupal/core-composer-scaffold/Operations/SkipOp.php',
+        'Drupal\\Composer\\Plugin\\Scaffold\\Plugin' => __DIR__ . '/..' . '/drupal/core-composer-scaffold/Plugin.php',
+        'Drupal\\Composer\\Plugin\\Scaffold\\PostPackageEventListenerInterface' => __DIR__ . '/..' . '/drupal/core-composer-scaffold/PostPackageEventListenerInterface.php',
+        'Drupal\\Composer\\Plugin\\Scaffold\\ScaffoldFileInfo' => __DIR__ . '/..' . '/drupal/core-composer-scaffold/ScaffoldFileInfo.php',
+        'Drupal\\Composer\\Plugin\\Scaffold\\ScaffoldFilePath' => __DIR__ . '/..' . '/drupal/core-composer-scaffold/ScaffoldFilePath.php',
+        'Drupal\\Composer\\Plugin\\Scaffold\\ScaffoldOptions' => __DIR__ . '/..' . '/drupal/core-composer-scaffold/ScaffoldOptions.php',
         'Drupal\\Console\\Annotations\\DrupalCommand' => __DIR__ . '/..' . '/drupal/console/src/Annotations/DrupalCommand.php',
         'Drupal\\Console\\Annotations\\DrupalCommandAnnotationReader' => __DIR__ . '/..' . '/drupal/console/src/Annotations/DrupalCommandAnnotationReader.php',
         'Drupal\\Console\\Application' => __DIR__ . '/..' . '/drupal/console/src/Application.php',
@@ -1616,6 +1608,7 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'Drupal\\Console\\Command\\Config\\EditCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Config/EditCommand.php',
         'Drupal\\Console\\Command\\Config\\ExportCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Config/ExportCommand.php',
         'Drupal\\Console\\Command\\Config\\ExportContentTypeCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Config/ExportContentTypeCommand.php',
+        'Drupal\\Console\\Command\\Config\\ExportEntityCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Config/ExportEntityCommand.php',
         'Drupal\\Console\\Command\\Config\\ExportSingleCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Config/ExportSingleCommand.php',
         'Drupal\\Console\\Command\\Config\\ExportViewCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Config/ExportViewCommand.php',
         'Drupal\\Console\\Command\\Config\\ImportCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Config/ImportCommand.php',
@@ -1654,6 +1647,7 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'Drupal\\Console\\Command\\Debug\\EntityCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Debug/EntityCommand.php',
         'Drupal\\Console\\Command\\Debug\\EventCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Debug/EventCommand.php',
         'Drupal\\Console\\Command\\Debug\\FeaturesCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Debug/FeaturesCommand.php',
+        'Drupal\\Console\\Command\\Debug\\HookCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Debug/HookCommand.php',
         'Drupal\\Console\\Command\\Debug\\ImageStylesCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Debug/ImageStylesCommand.php',
         'Drupal\\Console\\Command\\Debug\\LibrariesCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Debug/LibrariesCommand.php',
         'Drupal\\Console\\Command\\Debug\\MigrateCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Debug/MigrateCommand.php',
@@ -1670,6 +1664,7 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'Drupal\\Console\\Command\\Debug\\ThemeCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Debug/ThemeCommand.php',
         'Drupal\\Console\\Command\\Debug\\ThemeKeysCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Debug/ThemeKeysCommand.php',
         'Drupal\\Console\\Command\\Debug\\UpdateCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Debug/UpdateCommand.php',
+        'Drupal\\Console\\Command\\Debug\\UpdateComposerCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Debug/UpdateComposerCommand.php',
         'Drupal\\Console\\Command\\Debug\\UserCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Debug/UserCommand.php',
         'Drupal\\Console\\Command\\Debug\\ViewsCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Debug/ViewsCommand.php',
         'Drupal\\Console\\Command\\Debug\\ViewsPluginsCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Debug/ViewsPluginsCommand.php',
@@ -1681,9 +1676,11 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'Drupal\\Console\\Command\\Field\\InfoCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Field/InfoCommand.php',
         'Drupal\\Console\\Command\\Generate\\AjaxCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Generate/AjaxCommand.php',
         'Drupal\\Console\\Command\\Generate\\AuthenticationProviderCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Generate/AuthenticationProviderCommand.php',
+        'Drupal\\Console\\Command\\Generate\\BlockTypeCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Generate/BlockTypeCommand.php',
         'Drupal\\Console\\Command\\Generate\\BreakPointCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Generate/BreakPointCommand.php',
         'Drupal\\Console\\Command\\Generate\\CacheContextCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Generate/CacheContextCommand.php',
         'Drupal\\Console\\Command\\Generate\\CommandCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Generate/CommandCommand.php',
+        'Drupal\\Console\\Command\\Generate\\ComposerCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Generate/ComposerCommand.php',
         'Drupal\\Console\\Command\\Generate\\ConfigFormBaseCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Generate/ConfigFormBaseCommand.php',
         'Drupal\\Console\\Command\\Generate\\ControllerCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Generate/ControllerCommand.php',
         'Drupal\\Console\\Command\\Generate\\EntityBundleCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Generate/EntityBundleCommand.php',
@@ -1702,6 +1699,7 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'Drupal\\Console\\Command\\Generate\\PluginBlockCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Generate/PluginBlockCommand.php',
         'Drupal\\Console\\Command\\Generate\\PluginCKEditorButtonCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Generate/PluginCKEditorButtonCommand.php',
         'Drupal\\Console\\Command\\Generate\\PluginConditionCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Generate/PluginConditionCommand.php',
+        'Drupal\\Console\\Command\\Generate\\PluginDerivativeCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Generate/PluginDerivativeCommand.php',
         'Drupal\\Console\\Command\\Generate\\PluginFieldCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Generate/PluginFieldCommand.php',
         'Drupal\\Console\\Command\\Generate\\PluginFieldFormatterCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Generate/PluginFieldFormatterCommand.php',
         'Drupal\\Console\\Command\\Generate\\PluginFieldTypeCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Generate/PluginFieldTypeCommand.php',
@@ -1709,19 +1707,25 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'Drupal\\Console\\Command\\Generate\\PluginImageEffectCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Generate/PluginImageEffectCommand.php',
         'Drupal\\Console\\Command\\Generate\\PluginImageFormatterCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Generate/PluginImageFormatterCommand.php',
         'Drupal\\Console\\Command\\Generate\\PluginMailCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Generate/PluginMailCommand.php',
+        'Drupal\\Console\\Command\\Generate\\PluginMigrateDataParserCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Generate/PluginMigrateDataParserCommand.php',
         'Drupal\\Console\\Command\\Generate\\PluginMigrateProcessCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Generate/PluginMigrateProcessCommand.php',
         'Drupal\\Console\\Command\\Generate\\PluginMigrateSourceCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Generate/PluginMigrateSourceCommand.php',
+        'Drupal\\Console\\Command\\Generate\\PluginQueueWorkerCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Generate/PluginQueueWorkerCommand.php',
         'Drupal\\Console\\Command\\Generate\\PluginRestResourceCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Generate/PluginRestResourceCommand.php',
         'Drupal\\Console\\Command\\Generate\\PluginRulesActionCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Generate/PluginRulesActionCommand.php',
+        'Drupal\\Console\\Command\\Generate\\PluginRulesConditionCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Generate/PluginRulesConditionCommand.php',
+        'Drupal\\Console\\Command\\Generate\\PluginRulesDataprocessorCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Generate/PluginRulesDataprocessorCommand.php',
         'Drupal\\Console\\Command\\Generate\\PluginSkeletonCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Generate/PluginSkeletonCommand.php',
         'Drupal\\Console\\Command\\Generate\\PluginTypeAnnotationCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Generate/PluginTypeAnnotationCommand.php',
         'Drupal\\Console\\Command\\Generate\\PluginTypeYamlCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Generate/PluginTypeYamlCommand.php',
+        'Drupal\\Console\\Command\\Generate\\PluginValidationConstraintCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Generate/PluginValidationConstraintCommand.php',
         'Drupal\\Console\\Command\\Generate\\PluginViewsFieldCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Generate/PluginViewsFieldCommand.php',
         'Drupal\\Console\\Command\\Generate\\PostUpdateCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Generate/PostUpdateCommand.php',
         'Drupal\\Console\\Command\\Generate\\ProfileCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Generate/ProfileCommand.php',
         'Drupal\\Console\\Command\\Generate\\RouteSubscriberCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Generate/RouteSubscriberCommand.php',
         'Drupal\\Console\\Command\\Generate\\ServiceCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Generate/ServiceCommand.php',
         'Drupal\\Console\\Command\\Generate\\ThemeCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Generate/ThemeCommand.php',
+        'Drupal\\Console\\Command\\Generate\\ThemeSettingCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Generate/ThemeSettingCommand.php',
         'Drupal\\Console\\Command\\Generate\\TwigExtensionCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Generate/TwigExtensionCommand.php',
         'Drupal\\Console\\Command\\Generate\\UpdateCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Generate/UpdateCommand.php',
         'Drupal\\Console\\Command\\Image\\StylesFlushCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Image/StylesFlushCommand.php',
@@ -1747,6 +1751,7 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'Drupal\\Console\\Command\\Role\\NewCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Role/NewCommand.php',
         'Drupal\\Console\\Command\\Router\\RebuildCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Router/RebuildCommand.php',
         'Drupal\\Console\\Command\\ServerCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/ServerCommand.php',
+        'Drupal\\Console\\Command\\Service\\OverrideCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Service/OverrideCommand.php',
         'Drupal\\Console\\Command\\Shared\\ArrayInputTrait' => __DIR__ . '/..' . '/drupal/console/src/Command/Shared/ArrayInputTrait.php',
         'Drupal\\Console\\Command\\Shared\\ConfirmationTrait' => __DIR__ . '/..' . '/drupal/console/src/Command/Shared/ConfirmationTrait.php',
         'Drupal\\Console\\Command\\Shared\\ConnectTrait' => __DIR__ . '/..' . '/drupal/console/src/Command/Shared/ConnectTrait.php',
@@ -1767,7 +1772,9 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'Drupal\\Console\\Command\\Shared\\ServicesTrait' => __DIR__ . '/..' . '/drupal/console/src/Command/Shared/ServicesTrait.php',
         'Drupal\\Console\\Command\\Shared\\ThemeBreakpointTrait' => __DIR__ . '/..' . '/drupal/console/src/Command/Shared/ThemeBreakpointTrait.php',
         'Drupal\\Console\\Command\\Shared\\ThemeRegionTrait' => __DIR__ . '/..' . '/drupal/console/src/Command/Shared/ThemeRegionTrait.php',
+        'Drupal\\Console\\Command\\Shared\\ThemeTrait' => __DIR__ . '/..' . '/drupal/console/src/Command/Shared/ThemeTrait.php',
         'Drupal\\Console\\Command\\Shared\\TranslationTrait' => __DIR__ . '/..' . '/drupal/console/src/Command/Shared/TranslationTrait.php',
+        'Drupal\\Console\\Command\\Shared\\UpdateTrait' => __DIR__ . '/..' . '/drupal/console/src/Command/Shared/UpdateTrait.php',
         'Drupal\\Console\\Command\\ShellCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/ShellCommand.php',
         'Drupal\\Console\\Command\\Site\\ImportLocalCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Site/ImportLocalCommand.php',
         'Drupal\\Console\\Command\\Site\\InstallCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Site/InstallCommand.php',
@@ -1794,11 +1801,14 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'Drupal\\Console\\Command\\User\\PasswordHashCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/User/PasswordHashCommand.php',
         'Drupal\\Console\\Command\\User\\PasswordResetCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/User/PasswordResetCommand.php',
         'Drupal\\Console\\Command\\User\\RoleCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/User/RoleCommand.php',
+        'Drupal\\Console\\Command\\User\\UnblockCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/User/UnblockCommand.php',
         'Drupal\\Console\\Command\\User\\UserBase' => __DIR__ . '/..' . '/drupal/console/src/Command/User/UserBase.php',
         'Drupal\\Console\\Command\\Views\\DisableCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Views/DisableCommand.php',
         'Drupal\\Console\\Command\\Views\\EnableCommand' => __DIR__ . '/..' . '/drupal/console/src/Command/Views/EnableCommand.php',
+        'Drupal\\Console\\Composer\\Plugin\\DrupalConsoleInstaller' => __DIR__ . '/..' . '/drupal/console-extend-plugin/src/DrupalConsoleInstaller.php',
         'Drupal\\Console\\Composer\\Plugin\\Extender' => __DIR__ . '/..' . '/drupal/console-extend-plugin/src/Extender.php',
         'Drupal\\Console\\Composer\\Plugin\\ExtenderManager' => __DIR__ . '/..' . '/drupal/console-extend-plugin/src/ExtenderManager.php',
+        'Drupal\\Console\\Composer\\Plugin\\Installer' => __DIR__ . '/..' . '/drupal/console-extend-plugin/src/Installer.php',
         'Drupal\\Console\\Core\\Application' => __DIR__ . '/..' . '/drupal/console-core/src/Application.php',
         'Drupal\\Console\\Core\\Bootstrap\\DrupalConsoleCore' => __DIR__ . '/..' . '/drupal/console-core/src/Bootstrap/DrupalConsoleCore.php',
         'Drupal\\Console\\Core\\Bootstrap\\DrupalInterface' => __DIR__ . '/..' . '/drupal/console-core/src/Bootstrap/DrupalInterface.php',
@@ -1829,7 +1839,10 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'Drupal\\Console\\Core\\Descriptor\\TextDescriptor' => __DIR__ . '/..' . '/drupal/console-core/src/Descriptor/TextDescriptor.php',
         'Drupal\\Console\\Core\\EventSubscriber\\CallCommandListener' => __DIR__ . '/..' . '/drupal/console-core/src/EventSubscriber/CallCommandListener.php',
         'Drupal\\Console\\Core\\EventSubscriber\\DefaultValueEventListener' => __DIR__ . '/..' . '/drupal/console-core/src/EventSubscriber/DefaultValueEventListener.php',
+        'Drupal\\Console\\Core\\EventSubscriber\\MaintenanceModeListener' => __DIR__ . '/..' . '/drupal/console-core/src/EventSubscriber/MaintenanceModeListener.php',
         'Drupal\\Console\\Core\\EventSubscriber\\RemoveMessagesListener' => __DIR__ . '/..' . '/drupal/console-core/src/EventSubscriber/RemoveMessagesListener.php',
+        'Drupal\\Console\\Core\\EventSubscriber\\SaveStatisticsListener' => __DIR__ . '/..' . '/drupal/console-core/src/EventSubscriber/SaveStatisticsListener.php',
+        'Drupal\\Console\\Core\\EventSubscriber\\SendStatisticsListener' => __DIR__ . '/..' . '/drupal/console-core/src/EventSubscriber/SendStatisticsListener.php',
         'Drupal\\Console\\Core\\EventSubscriber\\ShowGenerateChainListener' => __DIR__ . '/..' . '/drupal/console-core/src/EventSubscriber/ShowGenerateChainListener.php',
         'Drupal\\Console\\Core\\EventSubscriber\\ShowGenerateCountCodeLinesListener' => __DIR__ . '/..' . '/drupal/console-core/src/EventSubscriber/ShowGenerateCountCodeLinesListener.php',
         'Drupal\\Console\\Core\\EventSubscriber\\ShowGenerateInlineListener' => __DIR__ . '/..' . '/drupal/console-core/src/EventSubscriber/ShowGenerateInlineListener.php',
@@ -1866,9 +1879,11 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'Drupal\\Console\\Extension\\Manager' => __DIR__ . '/..' . '/drupal/console/src/Extension/Manager.php',
         'Drupal\\Console\\Generator\\AjaxCommandGenerator' => __DIR__ . '/..' . '/drupal/console/src/Generator/AjaxCommandGenerator.php',
         'Drupal\\Console\\Generator\\AuthenticationProviderGenerator' => __DIR__ . '/..' . '/drupal/console/src/Generator/AuthenticationProviderGenerator.php',
+        'Drupal\\Console\\Generator\\BlockTypeGenerator' => __DIR__ . '/..' . '/drupal/console/src/Generator/BlockTypeGenerator.php',
         'Drupal\\Console\\Generator\\BreakPointGenerator' => __DIR__ . '/..' . '/drupal/console/src/Generator/BreakPointGenerator.php',
         'Drupal\\Console\\Generator\\CacheContextGenerator' => __DIR__ . '/..' . '/drupal/console/src/Generator/CacheContextGenerator.php',
         'Drupal\\Console\\Generator\\CommandGenerator' => __DIR__ . '/..' . '/drupal/console/src/Generator/CommandGenerator.php',
+        'Drupal\\Console\\Generator\\ComposerGenerator' => __DIR__ . '/..' . '/drupal/console/src/Generator/ComposerGenerator.php',
         'Drupal\\Console\\Generator\\ControllerGenerator' => __DIR__ . '/..' . '/drupal/console/src/Generator/ControllerGenerator.php',
         'Drupal\\Console\\Generator\\DatabaseSettingsGenerator' => __DIR__ . '/..' . '/drupal/console/src/Generator/DatabaseSettingsGenerator.php',
         'Drupal\\Console\\Generator\\DockerInitGenerator' => __DIR__ . '/..' . '/drupal/console/src/Generator/DockerInitGenerator.php',
@@ -1887,25 +1902,32 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'Drupal\\Console\\Generator\\PluginBlockGenerator' => __DIR__ . '/..' . '/drupal/console/src/Generator/PluginBlockGenerator.php',
         'Drupal\\Console\\Generator\\PluginCKEditorButtonGenerator' => __DIR__ . '/..' . '/drupal/console/src/Generator/PluginCKEditorButtonGenerator.php',
         'Drupal\\Console\\Generator\\PluginConditionGenerator' => __DIR__ . '/..' . '/drupal/console/src/Generator/PluginConditionGenerator.php',
+        'Drupal\\Console\\Generator\\PluginDerivativeGenerator' => __DIR__ . '/..' . '/drupal/console/src/Generator/PluginDerivativeGenerator.php',
         'Drupal\\Console\\Generator\\PluginFieldFormatterGenerator' => __DIR__ . '/..' . '/drupal/console/src/Generator/PluginFieldFormatterGenerator.php',
         'Drupal\\Console\\Generator\\PluginFieldTypeGenerator' => __DIR__ . '/..' . '/drupal/console/src/Generator/PluginFieldTypeGenerator.php',
         'Drupal\\Console\\Generator\\PluginFieldWidgetGenerator' => __DIR__ . '/..' . '/drupal/console/src/Generator/PluginFieldWidgetGenerator.php',
         'Drupal\\Console\\Generator\\PluginImageEffectGenerator' => __DIR__ . '/..' . '/drupal/console/src/Generator/PluginImageEffectGenerator.php',
         'Drupal\\Console\\Generator\\PluginImageFormatterGenerator' => __DIR__ . '/..' . '/drupal/console/src/Generator/PluginImageFormatterGenerator.php',
         'Drupal\\Console\\Generator\\PluginMailGenerator' => __DIR__ . '/..' . '/drupal/console/src/Generator/PluginMailGenerator.php',
+        'Drupal\\Console\\Generator\\PluginMigrateDataParserGenerator' => __DIR__ . '/..' . '/drupal/console/src/Generator/PluginMigrateDataParserGenerator.php',
         'Drupal\\Console\\Generator\\PluginMigrateProcessGenerator' => __DIR__ . '/..' . '/drupal/console/src/Generator/PluginMigrateProcessGenerator.php',
         'Drupal\\Console\\Generator\\PluginMigrateSourceGenerator' => __DIR__ . '/..' . '/drupal/console/src/Generator/PluginMigrateSourceGenerator.php',
+        'Drupal\\Console\\Generator\\PluginQueueWorkerGenerator' => __DIR__ . '/..' . '/drupal/console/src/Generator/PluginQueueWorkerGenerator.php',
         'Drupal\\Console\\Generator\\PluginRestResourceGenerator' => __DIR__ . '/..' . '/drupal/console/src/Generator/PluginRestResourceGenerator.php',
         'Drupal\\Console\\Generator\\PluginRulesActionGenerator' => __DIR__ . '/..' . '/drupal/console/src/Generator/PluginRulesActionGenerator.php',
+        'Drupal\\Console\\Generator\\PluginRulesConditionGenerator' => __DIR__ . '/..' . '/drupal/console/src/Generator/PluginRulesConditionGenerator.php',
+        'Drupal\\Console\\Generator\\PluginRulesDataprocessorGenerator' => __DIR__ . '/..' . '/drupal/console/src/Generator/PluginRulesDataprocessorGenerator.php',
         'Drupal\\Console\\Generator\\PluginSkeletonGenerator' => __DIR__ . '/..' . '/drupal/console/src/Generator/PluginSkeletonGenerator.php',
         'Drupal\\Console\\Generator\\PluginTypeAnnotationGenerator' => __DIR__ . '/..' . '/drupal/console/src/Generator/PluginTypeAnnotationGenerator.php',
         'Drupal\\Console\\Generator\\PluginTypeYamlGenerator' => __DIR__ . '/..' . '/drupal/console/src/Generator/PluginTypeYamlGenerator.php',
+        'Drupal\\Console\\Generator\\PluginValidationConstraintGenerator' => __DIR__ . '/..' . '/drupal/console/src/Generator/PluginValidationConstraintGenerator.php',
         'Drupal\\Console\\Generator\\PluginViewsFieldGenerator' => __DIR__ . '/..' . '/drupal/console/src/Generator/PluginViewsFieldGenerator.php',
         'Drupal\\Console\\Generator\\PostUpdateGenerator' => __DIR__ . '/..' . '/drupal/console/src/Generator/PostUpdateGenerator.php',
         'Drupal\\Console\\Generator\\ProfileGenerator' => __DIR__ . '/..' . '/drupal/console/src/Generator/ProfileGenerator.php',
         'Drupal\\Console\\Generator\\RouteSubscriberGenerator' => __DIR__ . '/..' . '/drupal/console/src/Generator/RouteSubscriberGenerator.php',
         'Drupal\\Console\\Generator\\ServiceGenerator' => __DIR__ . '/..' . '/drupal/console/src/Generator/ServiceGenerator.php',
         'Drupal\\Console\\Generator\\ThemeGenerator' => __DIR__ . '/..' . '/drupal/console/src/Generator/ThemeGenerator.php',
+        'Drupal\\Console\\Generator\\ThemeSettingGenerator' => __DIR__ . '/..' . '/drupal/console/src/Generator/ThemeSettingGenerator.php',
         'Drupal\\Console\\Generator\\TwigExtensionGenerator' => __DIR__ . '/..' . '/drupal/console/src/Generator/TwigExtensionGenerator.php',
         'Drupal\\Console\\Generator\\UpdateGenerator' => __DIR__ . '/..' . '/drupal/console/src/Generator/UpdateGenerator.php',
         'Drupal\\Console\\Override\\ConfigSubscriber' => __DIR__ . '/..' . '/drupal/console/src/Override/ConfigSubscriber.php',
@@ -3946,9 +3968,6 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'JaimePerez\\TwigConfigurableI18n\\Twig\\Extensions\\Extension\\I18n' => __DIR__ . '/..' . '/jaimeperez/twig-configurable-i18n/src/Twig/Extensions/Extension/I18n.php',
         'JaimePerez\\TwigConfigurableI18n\\Twig\\Extensions\\Node\\Trans' => __DIR__ . '/..' . '/jaimeperez/twig-configurable-i18n/src/Twig/Extensions/Node/Trans.php',
         'JaimePerez\\TwigConfigurableI18n\\Twig\\Extensions\\TokenParser\\Trans' => __DIR__ . '/..' . '/jaimeperez/twig-configurable-i18n/src/Twig/Extensions/TokenParser/Trans.php',
-        'JakubOnderka\\PhpConsoleColor\\ConsoleColor' => __DIR__ . '/..' . '/jakub-onderka/php-console-color/src/ConsoleColor.php',
-        'JakubOnderka\\PhpConsoleColor\\InvalidStyleException' => __DIR__ . '/..' . '/jakub-onderka/php-console-color/src/InvalidStyleException.php',
-        'JakubOnderka\\PhpConsoleHighlighter\\Highlighter' => __DIR__ . '/..' . '/jakub-onderka/php-console-highlighter/src/Highlighter.php',
         'Laminas\\Diactoros\\AbstractSerializer' => __DIR__ . '/..' . '/laminas/laminas-diactoros/src/AbstractSerializer.php',
         'Laminas\\Diactoros\\CallbackStream' => __DIR__ . '/..' . '/laminas/laminas-diactoros/src/CallbackStream.php',
         'Laminas\\Diactoros\\Exception\\DeprecatedMethodException' => __DIR__ . '/..' . '/laminas/laminas-diactoros/src/Exception/DeprecatedMethodException.php',
@@ -4205,8 +4224,8 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'Masterminds\\HTML5\\Serializer\\Traverser' => __DIR__ . '/..' . '/masterminds/html5/src/HTML5/Serializer/Traverser.php',
         'Mobile_Detect' => __DIR__ . '/..' . '/mobiledetect/mobiledetectlib/Mobile_Detect.php',
         'OS_Guess' => __DIR__ . '/..' . '/pear/pear-core-minimal/src/OS/Guess.php',
-        'OomphInc\\ComposerInstallersExtender\\Installer' => __DIR__ . '/..' . '/oomphinc/composer-installers-extender/src/Installer.php',
-        'OomphInc\\ComposerInstallersExtender\\InstallerHelper' => __DIR__ . '/..' . '/oomphinc/composer-installers-extender/src/InstallerHelper.php',
+        'OomphInc\\ComposerInstallersExtender\\Installers\\CustomInstaller' => __DIR__ . '/..' . '/oomphinc/composer-installers-extender/src/Installers/CustomInstaller.php',
+        'OomphInc\\ComposerInstallersExtender\\Installers\\Installer' => __DIR__ . '/..' . '/oomphinc/composer-installers-extender/src/Installers/Installer.php',
         'OomphInc\\ComposerInstallersExtender\\Plugin' => __DIR__ . '/..' . '/oomphinc/composer-installers-extender/src/Plugin.php',
         'PEAR' => __DIR__ . '/..' . '/pear/pear-core-minimal/src/PEAR.php',
         'PEAR_Error' => __DIR__ . '/..' . '/pear/pear-core-minimal/src/PEAR.php',
@@ -4252,9 +4271,16 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'PhpParser\\JsonDecoder' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/JsonDecoder.php',
         'PhpParser\\Lexer' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer.php',
         'PhpParser\\Lexer\\Emulative' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer/Emulative.php',
+        'PhpParser\\Lexer\\TokenEmulator\\AttributeEmulator' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/AttributeEmulator.php',
         'PhpParser\\Lexer\\TokenEmulator\\CoaleseEqualTokenEmulator' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/CoaleseEqualTokenEmulator.php',
+        'PhpParser\\Lexer\\TokenEmulator\\FlexibleDocStringEmulator' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/FlexibleDocStringEmulator.php',
         'PhpParser\\Lexer\\TokenEmulator\\FnTokenEmulator' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/FnTokenEmulator.php',
-        'PhpParser\\Lexer\\TokenEmulator\\TokenEmulatorInterface' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/TokenEmulatorInterface.php',
+        'PhpParser\\Lexer\\TokenEmulator\\KeywordEmulator' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/KeywordEmulator.php',
+        'PhpParser\\Lexer\\TokenEmulator\\MatchTokenEmulator' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/MatchTokenEmulator.php',
+        'PhpParser\\Lexer\\TokenEmulator\\NullsafeTokenEmulator' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/NullsafeTokenEmulator.php',
+        'PhpParser\\Lexer\\TokenEmulator\\NumericLiteralSeparatorEmulator' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/NumericLiteralSeparatorEmulator.php',
+        'PhpParser\\Lexer\\TokenEmulator\\ReverseEmulator' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ReverseEmulator.php',
+        'PhpParser\\Lexer\\TokenEmulator\\TokenEmulator' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/TokenEmulator.php',
         'PhpParser\\NameContext' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/NameContext.php',
         'PhpParser\\Node' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node.php',
         'PhpParser\\NodeAbstract' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/NodeAbstract.php',
@@ -4268,7 +4294,11 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'PhpParser\\NodeVisitor\\FindingVisitor' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/NodeVisitor/FindingVisitor.php',
         'PhpParser\\NodeVisitor\\FirstFindingVisitor' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/NodeVisitor/FirstFindingVisitor.php',
         'PhpParser\\NodeVisitor\\NameResolver' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/NodeVisitor/NameResolver.php',
+        'PhpParser\\NodeVisitor\\NodeConnectingVisitor' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/NodeVisitor/NodeConnectingVisitor.php',
+        'PhpParser\\NodeVisitor\\ParentConnectingVisitor' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/NodeVisitor/ParentConnectingVisitor.php',
         'PhpParser\\Node\\Arg' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Arg.php',
+        'PhpParser\\Node\\Attribute' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Attribute.php',
+        'PhpParser\\Node\\AttributeGroup' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/AttributeGroup.php',
         'PhpParser\\Node\\Const_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Const_.php',
         'PhpParser\\Node\\Expr' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr.php',
         'PhpParser\\Node\\Expr\\ArrayDimFetch' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/ArrayDimFetch.php',
@@ -4344,8 +4374,11 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'PhpParser\\Node\\Expr\\Instanceof_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Instanceof_.php',
         'PhpParser\\Node\\Expr\\Isset_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Isset_.php',
         'PhpParser\\Node\\Expr\\List_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/List_.php',
+        'PhpParser\\Node\\Expr\\Match_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Match_.php',
         'PhpParser\\Node\\Expr\\MethodCall' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/MethodCall.php',
         'PhpParser\\Node\\Expr\\New_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/New_.php',
+        'PhpParser\\Node\\Expr\\NullsafeMethodCall' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/NullsafeMethodCall.php',
+        'PhpParser\\Node\\Expr\\NullsafePropertyFetch' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/NullsafePropertyFetch.php',
         'PhpParser\\Node\\Expr\\PostDec' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/PostDec.php',
         'PhpParser\\Node\\Expr\\PostInc' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/PostInc.php',
         'PhpParser\\Node\\Expr\\PreDec' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/PreDec.php',
@@ -4356,6 +4389,7 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'PhpParser\\Node\\Expr\\StaticCall' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/StaticCall.php',
         'PhpParser\\Node\\Expr\\StaticPropertyFetch' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/StaticPropertyFetch.php',
         'PhpParser\\Node\\Expr\\Ternary' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Ternary.php',
+        'PhpParser\\Node\\Expr\\Throw_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Throw_.php',
         'PhpParser\\Node\\Expr\\UnaryMinus' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryMinus.php',
         'PhpParser\\Node\\Expr\\UnaryPlus' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryPlus.php',
         'PhpParser\\Node\\Expr\\Variable' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Variable.php',
@@ -4363,6 +4397,7 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'PhpParser\\Node\\Expr\\Yield_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Yield_.php',
         'PhpParser\\Node\\FunctionLike' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/FunctionLike.php',
         'PhpParser\\Node\\Identifier' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Identifier.php',
+        'PhpParser\\Node\\MatchArm' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/MatchArm.php',
         'PhpParser\\Node\\Name' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Name.php',
         'PhpParser\\Node\\Name\\FullyQualified' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Name/FullyQualified.php',
         'PhpParser\\Node\\Name\\Relative' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Name/Relative.php',
@@ -4431,6 +4466,7 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'PhpParser\\Node\\Stmt\\UseUse' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/UseUse.php',
         'PhpParser\\Node\\Stmt\\Use_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Use_.php',
         'PhpParser\\Node\\Stmt\\While_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/While_.php',
+        'PhpParser\\Node\\UnionType' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/UnionType.php',
         'PhpParser\\Node\\VarLikeIdentifier' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/VarLikeIdentifier.php',
         'PhpParser\\Parser' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Parser.php',
         'PhpParser\\ParserAbstract' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/ParserAbstract.php',
@@ -4468,14 +4504,15 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'Psy\\CodeCleaner\\CallTimePassByReferencePass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/CallTimePassByReferencePass.php',
         'Psy\\CodeCleaner\\CalledClassPass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/CalledClassPass.php',
         'Psy\\CodeCleaner\\CodeCleanerPass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/CodeCleanerPass.php',
+        'Psy\\CodeCleaner\\EmptyArrayDimFetchPass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/EmptyArrayDimFetchPass.php',
         'Psy\\CodeCleaner\\ExitPass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/ExitPass.php',
         'Psy\\CodeCleaner\\FinalClassPass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/FinalClassPass.php',
         'Psy\\CodeCleaner\\FunctionContextPass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/FunctionContextPass.php',
         'Psy\\CodeCleaner\\FunctionReturnInWriteContextPass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/FunctionReturnInWriteContextPass.php',
         'Psy\\CodeCleaner\\ImplicitReturnPass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/ImplicitReturnPass.php',
         'Psy\\CodeCleaner\\InstanceOfPass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/InstanceOfPass.php',
+        'Psy\\CodeCleaner\\LabelContextPass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/LabelContextPass.php',
         'Psy\\CodeCleaner\\LeavePsyshAlonePass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/LeavePsyshAlonePass.php',
-        'Psy\\CodeCleaner\\LegacyEmptyPass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/LegacyEmptyPass.php',
         'Psy\\CodeCleaner\\ListPass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/ListPass.php',
         'Psy\\CodeCleaner\\LoopContextPass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/LoopContextPass.php',
         'Psy\\CodeCleaner\\MagicConstantsPass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/MagicConstantsPass.php',
@@ -4484,6 +4521,7 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'Psy\\CodeCleaner\\NoReturnValue' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/NoReturnValue.php',
         'Psy\\CodeCleaner\\PassableByReferencePass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/PassableByReferencePass.php',
         'Psy\\CodeCleaner\\RequirePass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/RequirePass.php',
+        'Psy\\CodeCleaner\\ReturnTypePass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/ReturnTypePass.php',
         'Psy\\CodeCleaner\\StrictTypesPass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/StrictTypesPass.php',
         'Psy\\CodeCleaner\\UseStatementPass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/UseStatementPass.php',
         'Psy\\CodeCleaner\\ValidClassNamePass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/ValidClassNamePass.php',
@@ -4506,10 +4544,8 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'Psy\\Command\\ListCommand\\Enumerator' => __DIR__ . '/..' . '/psy/psysh/src/Command/ListCommand/Enumerator.php',
         'Psy\\Command\\ListCommand\\FunctionEnumerator' => __DIR__ . '/..' . '/psy/psysh/src/Command/ListCommand/FunctionEnumerator.php',
         'Psy\\Command\\ListCommand\\GlobalVariableEnumerator' => __DIR__ . '/..' . '/psy/psysh/src/Command/ListCommand/GlobalVariableEnumerator.php',
-        'Psy\\Command\\ListCommand\\InterfaceEnumerator' => __DIR__ . '/..' . '/psy/psysh/src/Command/ListCommand/InterfaceEnumerator.php',
         'Psy\\Command\\ListCommand\\MethodEnumerator' => __DIR__ . '/..' . '/psy/psysh/src/Command/ListCommand/MethodEnumerator.php',
         'Psy\\Command\\ListCommand\\PropertyEnumerator' => __DIR__ . '/..' . '/psy/psysh/src/Command/ListCommand/PropertyEnumerator.php',
-        'Psy\\Command\\ListCommand\\TraitEnumerator' => __DIR__ . '/..' . '/psy/psysh/src/Command/ListCommand/TraitEnumerator.php',
         'Psy\\Command\\ListCommand\\VariableEnumerator' => __DIR__ . '/..' . '/psy/psysh/src/Command/ListCommand/VariableEnumerator.php',
         'Psy\\Command\\ParseCommand' => __DIR__ . '/..' . '/psy/psysh/src/Command/ParseCommand.php',
         'Psy\\Command\\PsyVersionCommand' => __DIR__ . '/..' . '/psy/psysh/src/Command/PsyVersionCommand.php',
@@ -4536,8 +4572,8 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'Psy\\Exception\\RuntimeException' => __DIR__ . '/..' . '/psy/psysh/src/Exception/RuntimeException.php',
         'Psy\\Exception\\ThrowUpException' => __DIR__ . '/..' . '/psy/psysh/src/Exception/ThrowUpException.php',
         'Psy\\Exception\\TypeErrorException' => __DIR__ . '/..' . '/psy/psysh/src/Exception/TypeErrorException.php',
+        'Psy\\Exception\\UnexpectedTargetException' => __DIR__ . '/..' . '/psy/psysh/src/Exception/UnexpectedTargetException.php',
         'Psy\\ExecutionClosure' => __DIR__ . '/..' . '/psy/psysh/src/ExecutionClosure.php',
-        'Psy\\ExecutionLoop' => __DIR__ . '/..' . '/psy/psysh/src/ExecutionLoop.php',
         'Psy\\ExecutionLoopClosure' => __DIR__ . '/..' . '/psy/psysh/src/ExecutionLoopClosure.php',
         'Psy\\ExecutionLoop\\AbstractListener' => __DIR__ . '/..' . '/psy/psysh/src/ExecutionLoop/AbstractListener.php',
         'Psy\\ExecutionLoop\\Listener' => __DIR__ . '/..' . '/psy/psysh/src/ExecutionLoop/Listener.php',
@@ -4546,7 +4582,9 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'Psy\\Formatter\\CodeFormatter' => __DIR__ . '/..' . '/psy/psysh/src/Formatter/CodeFormatter.php',
         'Psy\\Formatter\\DocblockFormatter' => __DIR__ . '/..' . '/psy/psysh/src/Formatter/DocblockFormatter.php',
         'Psy\\Formatter\\Formatter' => __DIR__ . '/..' . '/psy/psysh/src/Formatter/Formatter.php',
+        'Psy\\Formatter\\ReflectorFormatter' => __DIR__ . '/..' . '/psy/psysh/src/Formatter/ReflectorFormatter.php',
         'Psy\\Formatter\\SignatureFormatter' => __DIR__ . '/..' . '/psy/psysh/src/Formatter/SignatureFormatter.php',
+        'Psy\\Formatter\\TraceFormatter' => __DIR__ . '/..' . '/psy/psysh/src/Formatter/TraceFormatter.php',
         'Psy\\Input\\CodeArgument' => __DIR__ . '/..' . '/psy/psysh/src/Input/CodeArgument.php',
         'Psy\\Input\\FilterOptions' => __DIR__ . '/..' . '/psy/psysh/src/Input/FilterOptions.php',
         'Psy\\Input\\ShellInput' => __DIR__ . '/..' . '/psy/psysh/src/Input/ShellInput.php',
@@ -4566,6 +4604,7 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'Psy\\Reflection\\ReflectionConstant_' => __DIR__ . '/..' . '/psy/psysh/src/Reflection/ReflectionConstant_.php',
         'Psy\\Reflection\\ReflectionLanguageConstruct' => __DIR__ . '/..' . '/psy/psysh/src/Reflection/ReflectionLanguageConstruct.php',
         'Psy\\Reflection\\ReflectionLanguageConstructParameter' => __DIR__ . '/..' . '/psy/psysh/src/Reflection/ReflectionLanguageConstructParameter.php',
+        'Psy\\Reflection\\ReflectionNamespace' => __DIR__ . '/..' . '/psy/psysh/src/Reflection/ReflectionNamespace.php',
         'Psy\\Shell' => __DIR__ . '/..' . '/psy/psysh/src/Shell.php',
         'Psy\\Sudo' => __DIR__ . '/..' . '/psy/psysh/src/Sudo.php',
         'Psy\\Sudo\\SudoVisitor' => __DIR__ . '/..' . '/psy/psysh/src/Sudo/SudoVisitor.php',
@@ -4686,6 +4725,7 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'Robo\\State\\Data' => __DIR__ . '/..' . '/consolidation/robo/src/State/Data.php',
         'Robo\\State\\StateAwareInterface' => __DIR__ . '/..' . '/consolidation/robo/src/State/StateAwareInterface.php',
         'Robo\\State\\StateAwareTrait' => __DIR__ . '/..' . '/consolidation/robo/src/State/StateAwareTrait.php',
+        'Robo\\Symfony\\SymfonyStyleInjector' => __DIR__ . '/..' . '/consolidation/robo/src/Symfony/SymfonyStyleInjector.php',
         'Robo\\TaskAccessor' => __DIR__ . '/..' . '/consolidation/robo/src/TaskAccessor.php',
         'Robo\\TaskInfo' => __DIR__ . '/..' . '/consolidation/robo/src/TaskInfo.php',
         'Robo\\Task\\ApiGen\\ApiGen' => __DIR__ . '/..' . '/consolidation/robo/src/Task/ApiGen/ApiGen.php',
@@ -5135,6 +5175,7 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'Symfony\\Component\\Config\\Definition\\BooleanNode' => __DIR__ . '/..' . '/symfony/config/Definition/BooleanNode.php',
         'Symfony\\Component\\Config\\Definition\\Builder\\ArrayNodeDefinition' => __DIR__ . '/..' . '/symfony/config/Definition/Builder/ArrayNodeDefinition.php',
         'Symfony\\Component\\Config\\Definition\\Builder\\BooleanNodeDefinition' => __DIR__ . '/..' . '/symfony/config/Definition/Builder/BooleanNodeDefinition.php',
+        'Symfony\\Component\\Config\\Definition\\Builder\\BuilderAwareInterface' => __DIR__ . '/..' . '/symfony/config/Definition/Builder/BuilderAwareInterface.php',
         'Symfony\\Component\\Config\\Definition\\Builder\\EnumNodeDefinition' => __DIR__ . '/..' . '/symfony/config/Definition/Builder/EnumNodeDefinition.php',
         'Symfony\\Component\\Config\\Definition\\Builder\\ExprBuilder' => __DIR__ . '/..' . '/symfony/config/Definition/Builder/ExprBuilder.php',
         'Symfony\\Component\\Config\\Definition\\Builder\\FloatNodeDefinition' => __DIR__ . '/..' . '/symfony/config/Definition/Builder/FloatNodeDefinition.php',
@@ -5160,6 +5201,7 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'Symfony\\Component\\Config\\Definition\\Exception\\InvalidConfigurationException' => __DIR__ . '/..' . '/symfony/config/Definition/Exception/InvalidConfigurationException.php',
         'Symfony\\Component\\Config\\Definition\\Exception\\InvalidDefinitionException' => __DIR__ . '/..' . '/symfony/config/Definition/Exception/InvalidDefinitionException.php',
         'Symfony\\Component\\Config\\Definition\\Exception\\InvalidTypeException' => __DIR__ . '/..' . '/symfony/config/Definition/Exception/InvalidTypeException.php',
+        'Symfony\\Component\\Config\\Definition\\Exception\\TreeWithoutRootNodeException' => __DIR__ . '/..' . '/symfony/config/Definition/Exception/TreeWithoutRootNodeException.php',
         'Symfony\\Component\\Config\\Definition\\Exception\\UnsetKeyException' => __DIR__ . '/..' . '/symfony/config/Definition/Exception/UnsetKeyException.php',
         'Symfony\\Component\\Config\\Definition\\FloatNode' => __DIR__ . '/..' . '/symfony/config/Definition/FloatNode.php',
         'Symfony\\Component\\Config\\Definition\\IntegerNode' => __DIR__ . '/..' . '/symfony/config/Definition/IntegerNode.php',
@@ -5170,10 +5212,10 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'Symfony\\Component\\Config\\Definition\\PrototypedArrayNode' => __DIR__ . '/..' . '/symfony/config/Definition/PrototypedArrayNode.php',
         'Symfony\\Component\\Config\\Definition\\ScalarNode' => __DIR__ . '/..' . '/symfony/config/Definition/ScalarNode.php',
         'Symfony\\Component\\Config\\Definition\\VariableNode' => __DIR__ . '/..' . '/symfony/config/Definition/VariableNode.php',
-        'Symfony\\Component\\Config\\DependencyInjection\\ConfigCachePass' => __DIR__ . '/..' . '/symfony/config/DependencyInjection/ConfigCachePass.php',
         'Symfony\\Component\\Config\\Exception\\FileLoaderImportCircularReferenceException' => __DIR__ . '/..' . '/symfony/config/Exception/FileLoaderImportCircularReferenceException.php',
         'Symfony\\Component\\Config\\Exception\\FileLoaderLoadException' => __DIR__ . '/..' . '/symfony/config/Exception/FileLoaderLoadException.php',
         'Symfony\\Component\\Config\\Exception\\FileLocatorFileNotFoundException' => __DIR__ . '/..' . '/symfony/config/Exception/FileLocatorFileNotFoundException.php',
+        'Symfony\\Component\\Config\\Exception\\LoaderLoadException' => __DIR__ . '/..' . '/symfony/config/Exception/LoaderLoadException.php',
         'Symfony\\Component\\Config\\FileLocator' => __DIR__ . '/..' . '/symfony/config/FileLocator.php',
         'Symfony\\Component\\Config\\FileLocatorInterface' => __DIR__ . '/..' . '/symfony/config/FileLocatorInterface.php',
         'Symfony\\Component\\Config\\Loader\\DelegatingLoader' => __DIR__ . '/..' . '/symfony/config/Loader/DelegatingLoader.php',
@@ -5193,8 +5235,6 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'Symfony\\Component\\Config\\Resource\\FileResource' => __DIR__ . '/..' . '/symfony/config/Resource/FileResource.php',
         'Symfony\\Component\\Config\\Resource\\GlobResource' => __DIR__ . '/..' . '/symfony/config/Resource/GlobResource.php',
         'Symfony\\Component\\Config\\Resource\\ReflectionClassResource' => __DIR__ . '/..' . '/symfony/config/Resource/ReflectionClassResource.php',
-        'Symfony\\Component\\Config\\Resource\\ReflectionMethodHhvmWrapper' => __DIR__ . '/..' . '/symfony/config/Resource/ReflectionClassResource.php',
-        'Symfony\\Component\\Config\\Resource\\ReflectionParameterHhvmWrapper' => __DIR__ . '/..' . '/symfony/config/Resource/ReflectionClassResource.php',
         'Symfony\\Component\\Config\\Resource\\ResourceInterface' => __DIR__ . '/..' . '/symfony/config/Resource/ResourceInterface.php',
         'Symfony\\Component\\Config\\Resource\\SelfCheckingResourceChecker' => __DIR__ . '/..' . '/symfony/config/Resource/SelfCheckingResourceChecker.php',
         'Symfony\\Component\\Config\\Resource\\SelfCheckingResourceInterface' => __DIR__ . '/..' . '/symfony/config/Resource/SelfCheckingResourceInterface.php',
@@ -5524,14 +5564,15 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'Symfony\\Component\\Filesystem\\Exception\\FileNotFoundException' => __DIR__ . '/..' . '/symfony/filesystem/Exception/FileNotFoundException.php',
         'Symfony\\Component\\Filesystem\\Exception\\IOException' => __DIR__ . '/..' . '/symfony/filesystem/Exception/IOException.php',
         'Symfony\\Component\\Filesystem\\Exception\\IOExceptionInterface' => __DIR__ . '/..' . '/symfony/filesystem/Exception/IOExceptionInterface.php',
+        'Symfony\\Component\\Filesystem\\Exception\\InvalidArgumentException' => __DIR__ . '/..' . '/symfony/filesystem/Exception/InvalidArgumentException.php',
         'Symfony\\Component\\Filesystem\\Filesystem' => __DIR__ . '/..' . '/symfony/filesystem/Filesystem.php',
-        'Symfony\\Component\\Filesystem\\LockHandler' => __DIR__ . '/..' . '/symfony/filesystem/LockHandler.php',
         'Symfony\\Component\\Finder\\Comparator\\Comparator' => __DIR__ . '/..' . '/symfony/finder/Comparator/Comparator.php',
         'Symfony\\Component\\Finder\\Comparator\\DateComparator' => __DIR__ . '/..' . '/symfony/finder/Comparator/DateComparator.php',
         'Symfony\\Component\\Finder\\Comparator\\NumberComparator' => __DIR__ . '/..' . '/symfony/finder/Comparator/NumberComparator.php',
         'Symfony\\Component\\Finder\\Exception\\AccessDeniedException' => __DIR__ . '/..' . '/symfony/finder/Exception/AccessDeniedException.php',
-        'Symfony\\Component\\Finder\\Exception\\ExceptionInterface' => __DIR__ . '/..' . '/symfony/finder/Exception/ExceptionInterface.php',
+        'Symfony\\Component\\Finder\\Exception\\DirectoryNotFoundException' => __DIR__ . '/..' . '/symfony/finder/Exception/DirectoryNotFoundException.php',
         'Symfony\\Component\\Finder\\Finder' => __DIR__ . '/..' . '/symfony/finder/Finder.php',
+        'Symfony\\Component\\Finder\\Gitignore' => __DIR__ . '/..' . '/symfony/finder/Gitignore.php',
         'Symfony\\Component\\Finder\\Glob' => __DIR__ . '/..' . '/symfony/finder/Glob.php',
         'Symfony\\Component\\Finder\\Iterator\\CustomFilterIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/CustomFilterIterator.php',
         'Symfony\\Component\\Finder\\Iterator\\DateRangeFilterIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/DateRangeFilterIterator.php',
@@ -5540,7 +5581,6 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'Symfony\\Component\\Finder\\Iterator\\FileTypeFilterIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/FileTypeFilterIterator.php',
         'Symfony\\Component\\Finder\\Iterator\\FilecontentFilterIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/FilecontentFilterIterator.php',
         'Symfony\\Component\\Finder\\Iterator\\FilenameFilterIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/FilenameFilterIterator.php',
-        'Symfony\\Component\\Finder\\Iterator\\FilterIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/FilterIterator.php',
         'Symfony\\Component\\Finder\\Iterator\\MultiplePcreFilterIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/MultiplePcreFilterIterator.php',
         'Symfony\\Component\\Finder\\Iterator\\PathFilterIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/PathFilterIterator.php',
         'Symfony\\Component\\Finder\\Iterator\\RecursiveDirectoryIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/RecursiveDirectoryIterator.php',
@@ -6648,11 +6688,6 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'enshrined\\svgSanitize\\data\\AttributeInterface' => __DIR__ . '/..' . '/enshrined/svg-sanitize/src/data/AttributeInterface.php',
         'enshrined\\svgSanitize\\data\\TagInterface' => __DIR__ . '/..' . '/enshrined/svg-sanitize/src/data/TagInterface.php',
         'enshrined\\svgSanitize\\data\\XPath' => __DIR__ . '/..' . '/enshrined/svg-sanitize/src/data/XPath.php',
-        'rvtraveller\\QuicksilverComposerInstaller\\QuicksilverComposerInstaller' => __DIR__ . '/..' . '/rvtraveller/qs-composer-installer/src/QuicksilverComposerInstaller.php',
-        'rvtraveller\\QuicksilverComposerInstaller\\QuicksilverComposerInstallerPlugin' => __DIR__ . '/..' . '/rvtraveller/qs-composer-installer/src/QuicksilverComposerInstallerPlugin.php',
-        'zaporylie\\ComposerDrupalOptimizations\\Cache' => __DIR__ . '/..' . '/zaporylie/composer-drupal-optimizations/src/Cache.php',
-        'zaporylie\\ComposerDrupalOptimizations\\Plugin' => __DIR__ . '/..' . '/zaporylie/composer-drupal-optimizations/src/Plugin.php',
-        'zaporylie\\ComposerDrupalOptimizations\\TruncatedComposerRepository' => __DIR__ . '/..' . '/zaporylie/composer-drupal-optimizations/src/TruncatedComposerRepository.php',
     );
 
     public static function getInitializer(ClassLoader $loader)
diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json
index 365094ec8def03a0199507d230715b699f3ed641..c3c5ace1c80953ac72b3ba699b48224b1624d9af 100644
--- a/vendor/composer/installed.json
+++ b/vendor/composer/installed.json
@@ -1,39 +1,39 @@
 [
     {
         "name": "alchemy/zippy",
-        "version": "0.4.3",
-        "version_normalized": "0.4.3.0",
+        "version": "0.4.9",
+        "version_normalized": "0.4.9.0",
         "source": {
             "type": "git",
             "url": "https://github.com/alchemy-fr/Zippy.git",
-            "reference": "5ffdc93de0af2770d396bf433d8b2667c77277ea"
+            "reference": "59fbeefb9a249122867ef25e53addfcce31850d7"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/alchemy-fr/Zippy/zipball/5ffdc93de0af2770d396bf433d8b2667c77277ea",
-            "reference": "5ffdc93de0af2770d396bf433d8b2667c77277ea",
+            "url": "https://api.github.com/repos/alchemy-fr/Zippy/zipball/59fbeefb9a249122867ef25e53addfcce31850d7",
+            "reference": "59fbeefb9a249122867ef25e53addfcce31850d7",
             "shasum": ""
         },
         "require": {
             "doctrine/collections": "~1.0",
-            "ext-mbstring": "*",
             "php": ">=5.5",
-            "symfony/filesystem": "^2.0.5|^3.0",
-            "symfony/process": "^2.1|^3.0"
+            "symfony/filesystem": "^2.0.5 || ^3.0 || ^4.0",
+            "symfony/polyfill-mbstring": "^1.3",
+            "symfony/process": "^2.1 || ^3.0 || ^4.0"
         },
         "require-dev": {
             "ext-zip": "*",
             "guzzle/guzzle": "~3.0",
             "guzzlehttp/guzzle": "^6.0",
-            "phpunit/phpunit": "^4.0|^5.0",
-            "symfony/finder": "^2.0.5|^3.0"
+            "phpunit/phpunit": "^4.0 || ^5.0",
+            "symfony/finder": "^2.0.5 || ^3.0 || ^4.0"
         },
         "suggest": {
             "ext-zip": "To use the ZipExtensionAdapter",
             "guzzle/guzzle": "To use the GuzzleTeleporter with Guzzle 3",
             "guzzlehttp/guzzle": "To use the GuzzleTeleporter with Guzzle 6"
         },
-        "time": "2016-11-03T16:10:31+00:00",
+        "time": "2018-02-22T13:58:36+00:00",
         "type": "library",
         "extra": {
             "branch-alias": {
@@ -133,17 +133,17 @@
     },
     {
         "name": "chi-teck/drupal-code-generator",
-        "version": "1.30.3",
-        "version_normalized": "1.30.3.0",
+        "version": "1.32.1",
+        "version_normalized": "1.32.1.0",
         "source": {
             "type": "git",
             "url": "https://github.com/Chi-teck/drupal-code-generator.git",
-            "reference": "1da9f06843b6bf2b0e7d28fea4b6c1d79aead197"
+            "reference": "8abba7131ed4c89c1e8fc6dca0d05a4b6d0b2749"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/Chi-teck/drupal-code-generator/zipball/1da9f06843b6bf2b0e7d28fea4b6c1d79aead197",
-            "reference": "1da9f06843b6bf2b0e7d28fea4b6c1d79aead197",
+            "url": "https://api.github.com/repos/Chi-teck/drupal-code-generator/zipball/8abba7131ed4c89c1e8fc6dca0d05a4b6d0b2749",
+            "reference": "8abba7131ed4c89c1e8fc6dca0d05a4b6d0b2749",
             "shasum": ""
         },
         "require": {
@@ -151,9 +151,9 @@
             "php": ">=5.5.9",
             "symfony/console": "^3.4 || ^4.0",
             "symfony/filesystem": "^2.7 || ^3.4 || ^4.0",
-            "twig/twig": "^1.38.2 || ^2.10"
+            "twig/twig": "^1.41 || ^2.12"
         },
-        "time": "2019-06-29T10:29:45+00:00",
+        "time": "2020-07-15T06:08:04+00:00",
         "bin": [
             "bin/dcg"
         ],
@@ -496,26 +496,26 @@
     },
     {
         "name": "consolidation/annotated-command",
-        "version": "2.12.0",
-        "version_normalized": "2.12.0.0",
+        "version": "2.12.1",
+        "version_normalized": "2.12.1.0",
         "source": {
             "type": "git",
             "url": "https://github.com/consolidation/annotated-command.git",
-            "reference": "512a2e54c98f3af377589de76c43b24652bcb789"
+            "reference": "0ee361762df2274f360c085e3239784a53f850b5"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/consolidation/annotated-command/zipball/512a2e54c98f3af377589de76c43b24652bcb789",
-            "reference": "512a2e54c98f3af377589de76c43b24652bcb789",
+            "url": "https://api.github.com/repos/consolidation/annotated-command/zipball/0ee361762df2274f360c085e3239784a53f850b5",
+            "reference": "0ee361762df2274f360c085e3239784a53f850b5",
             "shasum": ""
         },
         "require": {
-            "consolidation/output-formatters": "^3.4",
+            "consolidation/output-formatters": "^3.5.1",
             "php": ">=5.4.5",
             "psr/log": "^1",
             "symfony/console": "^2.8|^3|^4",
             "symfony/event-dispatcher": "^2.5|^3|^4",
-            "symfony/finder": "^2.5|^3|^4"
+            "symfony/finder": "^2.5|^3|^4|^5"
         },
         "require-dev": {
             "g1a/composer-test-scenarios": "^3",
@@ -523,10 +523,20 @@
             "phpunit/phpunit": "^6",
             "squizlabs/php_codesniffer": "^2.7"
         },
-        "time": "2019-03-08T16:55:03+00:00",
+        "time": "2020-10-11T04:30:03+00:00",
         "type": "library",
         "extra": {
             "scenarios": {
+                "finder5": {
+                    "require": {
+                        "symfony/finder": "^5"
+                    },
+                    "config": {
+                        "platform": {
+                            "php": "7.2.5"
+                        }
+                    }
+                },
                 "symfony4": {
                     "require": {
                         "symfony/console": "^4.0"
@@ -838,24 +848,24 @@
     },
     {
         "name": "consolidation/output-formatters",
-        "version": "3.5.0",
-        "version_normalized": "3.5.0.0",
+        "version": "3.5.1",
+        "version_normalized": "3.5.1.0",
         "source": {
             "type": "git",
             "url": "https://github.com/consolidation/output-formatters.git",
-            "reference": "99ec998ffb697e0eada5aacf81feebfb13023605"
+            "reference": "0d38f13051ef05c223a2bb8e962d668e24785196"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/consolidation/output-formatters/zipball/99ec998ffb697e0eada5aacf81feebfb13023605",
-            "reference": "99ec998ffb697e0eada5aacf81feebfb13023605",
+            "url": "https://api.github.com/repos/consolidation/output-formatters/zipball/0d38f13051ef05c223a2bb8e962d668e24785196",
+            "reference": "0d38f13051ef05c223a2bb8e962d668e24785196",
             "shasum": ""
         },
         "require": {
             "dflydev/dot-access-data": "^1.1.0",
             "php": ">=5.4.0",
             "symfony/console": "^2.8|^3|^4",
-            "symfony/finder": "^2.5|^3|^4"
+            "symfony/finder": "^2.5|^3|^4|^5"
         },
         "require-dev": {
             "g1a/composer-test-scenarios": "^3",
@@ -868,10 +878,20 @@
         "suggest": {
             "symfony/var-dumper": "For using the var_dump formatter"
         },
-        "time": "2019-05-30T23:16:01+00:00",
+        "time": "2020-10-11T04:15:32+00:00",
         "type": "library",
         "extra": {
             "scenarios": {
+                "finder5": {
+                    "require": {
+                        "symfony/finder": "^5"
+                    },
+                    "config": {
+                        "platform": {
+                            "php": "7.2.5"
+                        }
+                    }
+                },
                 "symfony4": {
                     "require": {
                         "symfony/console": "^4.0"
@@ -941,51 +961,45 @@
     },
     {
         "name": "consolidation/robo",
-        "version": "1.4.9",
-        "version_normalized": "1.4.9.0",
+        "version": "1.4.13",
+        "version_normalized": "1.4.13.0",
         "source": {
             "type": "git",
             "url": "https://github.com/consolidation/Robo.git",
-            "reference": "5c6b3840a45afda1cbffbb3bb1f94dd5f9f83345"
+            "reference": "fd28dcca1b935950ece26e63541fbdeeb09f7343"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/consolidation/Robo/zipball/5c6b3840a45afda1cbffbb3bb1f94dd5f9f83345",
-            "reference": "5c6b3840a45afda1cbffbb3bb1f94dd5f9f83345",
+            "url": "https://api.github.com/repos/consolidation/Robo/zipball/fd28dcca1b935950ece26e63541fbdeeb09f7343",
+            "reference": "fd28dcca1b935950ece26e63541fbdeeb09f7343",
             "shasum": ""
         },
         "require": {
-            "consolidation/annotated-command": "^2.10.2",
-            "consolidation/config": "^1.2",
-            "consolidation/log": "~1",
-            "consolidation/output-formatters": "^3.1.13",
-            "consolidation/self-update": "^1",
-            "grasmash/yaml-expander": "^1.3",
-            "league/container": "^2.2",
+            "consolidation/annotated-command": "^2.12.1|^4.1",
+            "consolidation/config": "^1.2.1",
+            "consolidation/log": "^1.1.1|^2",
+            "consolidation/output-formatters": "^3.5.1|^4.1",
+            "consolidation/self-update": "^1.1.5",
+            "grasmash/yaml-expander": "^1.4",
+            "league/container": "^2.4.1",
             "php": ">=5.5.0",
             "symfony/console": "^2.8|^3|^4",
             "symfony/event-dispatcher": "^2.5|^3|^4",
             "symfony/filesystem": "^2.5|^3|^4",
-            "symfony/finder": "^2.5|^3|^4",
+            "symfony/finder": "^2.5|^3|^4|^5",
             "symfony/process": "^2.5|^3|^4"
         },
         "replace": {
             "codegyre/robo": "< 1.0"
         },
         "require-dev": {
-            "codeception/aspect-mock": "^1|^2.1.1",
-            "codeception/base": "^2.3.7",
-            "codeception/verify": "^0.3.2",
             "g1a/composer-test-scenarios": "^3",
-            "goaop/framework": "~2.1.2",
-            "goaop/parser-reflection": "^1.1.0",
             "natxet/cssmin": "3.0.4",
-            "nikic/php-parser": "^3.1.5",
-            "patchwork/jsqueeze": "~2",
+            "patchwork/jsqueeze": "^2",
             "pear/archive_tar": "^1.4.4",
             "php-coveralls/php-coveralls": "^1",
-            "phpunit/php-code-coverage": "~2|~4",
-            "squizlabs/php_codesniffer": "^2.8"
+            "phpunit/phpunit": "^5.7.27",
+            "squizlabs/php_codesniffer": "^3"
         },
         "suggest": {
             "henrikbjorn/lurker": "For monitoring filesystem changes in taskWatch",
@@ -993,13 +1007,23 @@
             "patchwork/jsqueeze": "For minifying JS files in taskMinify",
             "pear/archive_tar": "Allows tar archives to be created and extracted in taskPack and taskExtract, respectively."
         },
-        "time": "2019-03-19T18:07:19+00:00",
+        "time": "2020-10-11T04:51:34+00:00",
         "bin": [
             "robo"
         ],
         "type": "library",
         "extra": {
             "scenarios": {
+                "finder5": {
+                    "require": {
+                        "symfony/finder": "^5"
+                    },
+                    "config": {
+                        "platform": {
+                            "php": "7.2.5"
+                        }
+                    }
+                },
                 "symfony4": {
                     "require": {
                         "symfony/console": "^4"
@@ -1014,8 +1038,11 @@
                     "require": {
                         "symfony/console": "^2.8"
                     },
+                    "require-dev": {
+                        "phpunit/phpunit": "^4.8.36"
+                    },
                     "remove": [
-                        "goaop/framework"
+                        "php-coveralls/php-coveralls"
                     ],
                     "config": {
                         "platform": {
@@ -1028,7 +1055,7 @@
                 }
             },
             "branch-alias": {
-                "dev-master": "2.x-dev"
+                "dev-master": "1.x-dev"
             }
         },
         "installation-source": "dist",
@@ -1051,25 +1078,25 @@
     },
     {
         "name": "consolidation/self-update",
-        "version": "1.1.5",
-        "version_normalized": "1.1.5.0",
+        "version": "1.2.0",
+        "version_normalized": "1.2.0.0",
         "source": {
             "type": "git",
             "url": "https://github.com/consolidation/self-update.git",
-            "reference": "a1c273b14ce334789825a09d06d4c87c0a02ad54"
+            "reference": "dba6b2c0708f20fa3ba8008a2353b637578849b4"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/consolidation/self-update/zipball/a1c273b14ce334789825a09d06d4c87c0a02ad54",
-            "reference": "a1c273b14ce334789825a09d06d4c87c0a02ad54",
+            "url": "https://api.github.com/repos/consolidation/self-update/zipball/dba6b2c0708f20fa3ba8008a2353b637578849b4",
+            "reference": "dba6b2c0708f20fa3ba8008a2353b637578849b4",
             "shasum": ""
         },
         "require": {
             "php": ">=5.5.0",
-            "symfony/console": "^2.8|^3|^4",
-            "symfony/filesystem": "^2.5|^3|^4"
+            "symfony/console": "^2.8|^3|^4|^5",
+            "symfony/filesystem": "^2.5|^3|^4|^5"
         },
-        "time": "2018-10-28T01:52:03+00:00",
+        "time": "2020-04-13T02:49:20+00:00",
         "bin": [
             "scripts/release"
         ],
@@ -1090,48 +1117,47 @@
             "MIT"
         ],
         "authors": [
-            {
-                "name": "Greg Anderson",
-                "email": "greg.1.anderson@greenknowe.org"
-            },
             {
                 "name": "Alexander Menk",
                 "email": "menk@mestrona.net"
+            },
+            {
+                "name": "Greg Anderson",
+                "email": "greg.1.anderson@greenknowe.org"
             }
         ],
         "description": "Provides a self:update command for Symfony Console applications."
     },
     {
         "name": "consolidation/site-alias",
-        "version": "3.0.0",
-        "version_normalized": "3.0.0.0",
+        "version": "3.0.1",
+        "version_normalized": "3.0.1.0",
         "source": {
             "type": "git",
             "url": "https://github.com/consolidation/site-alias.git",
-            "reference": "8cfd3b6ab6d541086fc970bf850864293b284e6f"
+            "reference": "fd40a03f80f8fd4684b10bef8c8c4ec5a9a9bf26"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/consolidation/site-alias/zipball/8cfd3b6ab6d541086fc970bf850864293b284e6f",
-            "reference": "8cfd3b6ab6d541086fc970bf850864293b284e6f",
+            "url": "https://api.github.com/repos/consolidation/site-alias/zipball/fd40a03f80f8fd4684b10bef8c8c4ec5a9a9bf26",
+            "reference": "fd40a03f80f8fd4684b10bef8c8c4ec5a9a9bf26",
             "shasum": ""
         },
         "require": {
-            "consolidation/config": "^1.2.1",
+            "consolidation/config": "^1.2.1|^2",
             "php": ">=5.5.0"
         },
         "require-dev": {
-            "consolidation/robo": "^1.2.3",
+            "consolidation/robo": "^1.2.3|^2",
             "g1a/composer-test-scenarios": "^3",
             "knplabs/github-api": "^2.7",
-            "php-coveralls/php-coveralls": "^1",
+            "php-coveralls/php-coveralls": "^2.2",
             "php-http/guzzle6-adapter": "^1.1",
             "phpunit/phpunit": "^6",
             "squizlabs/php_codesniffer": "^2.8",
-            "symfony/console": "^2.8|^3|^4",
-            "symfony/yaml": "~2.3|^3"
+            "symfony/yaml": "~2.3|^3|^4.4|^5"
         },
-        "time": "2019-03-12T17:31:48+00:00",
+        "time": "2020-05-28T00:33:41+00:00",
         "type": "library",
         "extra": {
             "scenarios": {
@@ -1164,30 +1190,30 @@
             "MIT"
         ],
         "authors": [
-            {
-                "name": "Moshe Weitzman",
-                "email": "weitzman@tejasa.com"
-            },
             {
                 "name": "Greg Anderson",
                 "email": "greg.1.anderson@greenknowe.org"
+            },
+            {
+                "name": "Moshe Weitzman",
+                "email": "weitzman@tejasa.com"
             }
         ],
         "description": "Manage alias records for local and remote sites."
     },
     {
         "name": "consolidation/site-process",
-        "version": "2.0.3",
-        "version_normalized": "2.0.3.0",
+        "version": "2.1.0",
+        "version_normalized": "2.1.0.0",
         "source": {
             "type": "git",
             "url": "https://github.com/consolidation/site-process.git",
-            "reference": "e25265f4a48c13284ebb6f9e0906ecd415d451df"
+            "reference": "f3211fa4c60671c6f068184221f06f932556e443"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/consolidation/site-process/zipball/e25265f4a48c13284ebb6f9e0906ecd415d451df",
-            "reference": "e25265f4a48c13284ebb6f9e0906ecd415d451df",
+            "url": "https://api.github.com/repos/consolidation/site-process/zipball/f3211fa4c60671c6f068184221f06f932556e443",
+            "reference": "f3211fa4c60671c6f068184221f06f932556e443",
             "shasum": ""
         },
         "require": {
@@ -1205,7 +1231,7 @@
             "phpunit/phpunit": "^6",
             "squizlabs/php_codesniffer": "^2.8"
         },
-        "time": "2019-06-04T22:23:52+00:00",
+        "time": "2019-09-10T17:56:24+00:00",
         "type": "library",
         "extra": {
             "scenarios": {
@@ -1238,13 +1264,13 @@
             "MIT"
         ],
         "authors": [
-            {
-                "name": "Moshe Weitzman",
-                "email": "weitzman@tejasa.com"
-            },
             {
                 "name": "Greg Anderson",
                 "email": "greg.1.anderson@greenknowe.org"
+            },
+            {
+                "name": "Moshe Weitzman",
+                "email": "weitzman@tejasa.com"
             }
         ],
         "description": "A thin wrapper around the Symfony Process Component that allows applications to use the Site Alias library to specify the target for a remote call."
@@ -1285,28 +1311,28 @@
     },
     {
         "name": "cweagans/composer-patches",
-        "version": "1.6.5",
-        "version_normalized": "1.6.5.0",
+        "version": "1.7.0",
+        "version_normalized": "1.7.0.0",
         "source": {
             "type": "git",
             "url": "https://github.com/cweagans/composer-patches.git",
-            "reference": "2ec4f00ff5fb64de584c8c4aea53bf9053ecb0b3"
+            "reference": "ae02121445ad75f4eaff800cc532b5e6233e2ddf"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/cweagans/composer-patches/zipball/2ec4f00ff5fb64de584c8c4aea53bf9053ecb0b3",
-            "reference": "2ec4f00ff5fb64de584c8c4aea53bf9053ecb0b3",
+            "url": "https://api.github.com/repos/cweagans/composer-patches/zipball/ae02121445ad75f4eaff800cc532b5e6233e2ddf",
+            "reference": "ae02121445ad75f4eaff800cc532b5e6233e2ddf",
             "shasum": ""
         },
         "require": {
-            "composer-plugin-api": "^1.0",
+            "composer-plugin-api": "^1.0 || ^2.0",
             "php": ">=5.3.0"
         },
         "require-dev": {
-            "composer/composer": "~1.0",
+            "composer/composer": "~1.0 || ~2.0",
             "phpunit/phpunit": "~4.6"
         },
-        "time": "2018-05-11T18:00:16+00:00",
+        "time": "2020-09-30T17:56:20+00:00",
         "type": "composer-plugin",
         "extra": {
             "class": "cweagans\\Composer\\Patches"
@@ -1354,17 +1380,17 @@
     },
     {
         "name": "dflydev/dot-access-configuration",
-        "version": "v1.0.2",
-        "version_normalized": "1.0.2.0",
+        "version": "v1.0.3",
+        "version_normalized": "1.0.3.0",
         "source": {
             "type": "git",
             "url": "https://github.com/dflydev/dflydev-dot-access-configuration.git",
-            "reference": "ae6e7138b1d9063d343322cca63994ee1ac5161d"
+            "reference": "2e6eb0c8b8830b26bb23defcfc38d4276508fc49"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-configuration/zipball/ae6e7138b1d9063d343322cca63994ee1ac5161d",
-            "reference": "ae6e7138b1d9063d343322cca63994ee1ac5161d",
+            "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-configuration/zipball/2e6eb0c8b8830b26bb23defcfc38d4276508fc49",
+            "reference": "2e6eb0c8b8830b26bb23defcfc38d4276508fc49",
             "shasum": ""
         },
         "require": {
@@ -1378,7 +1404,7 @@
         "suggest": {
             "symfony/yaml": "Required for using the YAML Configuration Builders"
         },
-        "time": "2016-12-12T17:43:40+00:00",
+        "time": "2018-09-08T23:00:17+00:00",
         "type": "library",
         "extra": {
             "branch-alias": {
@@ -1553,27 +1579,27 @@
     },
     {
         "name": "dnoegel/php-xdg-base-dir",
-        "version": "0.1",
-        "version_normalized": "0.1.0.0",
+        "version": "v0.1.1",
+        "version_normalized": "0.1.1.0",
         "source": {
             "type": "git",
             "url": "https://github.com/dnoegel/php-xdg-base-dir.git",
-            "reference": "265b8593498b997dc2d31e75b89f053b5cc9621a"
+            "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/dnoegel/php-xdg-base-dir/zipball/265b8593498b997dc2d31e75b89f053b5cc9621a",
-            "reference": "265b8593498b997dc2d31e75b89f053b5cc9621a",
+            "url": "https://api.github.com/repos/dnoegel/php-xdg-base-dir/zipball/8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd",
+            "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd",
             "shasum": ""
         },
         "require": {
             "php": ">=5.3.2"
         },
         "require-dev": {
-            "phpunit/phpunit": "@stable"
+            "phpunit/phpunit": "~7.0|~6.0|~5.0|~4.8.35"
         },
-        "time": "2014-10-24T07:27:01+00:00",
-        "type": "project",
+        "time": "2019-12-04T15:06:13+00:00",
+        "type": "library",
         "installation-source": "dist",
         "autoload": {
             "psr-4": {
@@ -2003,53 +2029,6 @@
             "php"
         ]
     },
-    {
-        "name": "drupal-composer/drupal-scaffold",
-        "version": "2.5.4",
-        "version_normalized": "2.5.4.0",
-        "source": {
-            "type": "git",
-            "url": "https://github.com/drupal-composer/drupal-scaffold.git",
-            "reference": "fc6bf4ceecb5d47327f54d48d4d4f67b17da956d"
-        },
-        "dist": {
-            "type": "zip",
-            "url": "https://api.github.com/repos/drupal-composer/drupal-scaffold/zipball/fc6bf4ceecb5d47327f54d48d4d4f67b17da956d",
-            "reference": "fc6bf4ceecb5d47327f54d48d4d4f67b17da956d",
-            "shasum": ""
-        },
-        "require": {
-            "composer-plugin-api": "^1.0.0",
-            "composer/semver": "^1.4",
-            "php": ">=5.4.5"
-        },
-        "require-dev": {
-            "composer/composer": "dev-master",
-            "g1a/composer-test-scenarios": "^2.1.0",
-            "phpunit/phpunit": "^6",
-            "squizlabs/php_codesniffer": "^2.8"
-        },
-        "time": "2018-07-27T10:07:07+00:00",
-        "type": "composer-plugin",
-        "extra": {
-            "class": "DrupalComposer\\DrupalScaffold\\Plugin",
-            "branch-alias": {
-                "dev-master": "2.0.x-dev"
-            }
-        },
-        "installation-source": "dist",
-        "autoload": {
-            "psr-4": {
-                "DrupalComposer\\DrupalScaffold\\": "src/"
-            }
-        },
-        "notification-url": "https://packagist.org/downloads/",
-        "license": [
-            "GPL-2.0-or-later"
-        ],
-        "description": "Composer Plugin for updating the Drupal scaffold files when using drupal/core",
-        "abandoned": "drupal/core-composer-scaffold"
-    },
     {
         "name": "drupal/address",
         "version": "1.1.0",
@@ -3164,38 +3143,37 @@
     },
     {
         "name": "drupal/console",
-        "version": "1.8.0",
-        "version_normalized": "1.8.0.0",
+        "version": "1.9.7",
+        "version_normalized": "1.9.7.0",
         "source": {
             "type": "git",
             "url": "https://github.com/hechoendrupal/drupal-console.git",
-            "reference": "368bbfa44dc6b957eb4db01977f7c39e83032d18"
+            "reference": "90053d30f52427edb4e4941a9063acb65b5a2c1e"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/hechoendrupal/drupal-console/zipball/368bbfa44dc6b957eb4db01977f7c39e83032d18",
-            "reference": "368bbfa44dc6b957eb4db01977f7c39e83032d18",
+            "url": "https://api.github.com/repos/hechoendrupal/drupal-console/zipball/90053d30f52427edb4e4941a9063acb65b5a2c1e",
+            "reference": "90053d30f52427edb4e4941a9063acb65b5a2c1e",
             "shasum": ""
         },
         "require": {
-            "alchemy/zippy": "0.4.3",
+            "alchemy/zippy": "~0.4",
             "composer/installers": "~1.0",
             "doctrine/annotations": "^1.2",
             "doctrine/collections": "^1.3",
-            "drupal/console-core": "1.8.0",
-            "drupal/console-extend-plugin": "~0",
-            "guzzlehttp/guzzle": "~6.1",
-            "php": "^5.5.9 || ^7.0",
+            "drupal/console-core": "1.9.7",
+            "drupal/console-extend-plugin": "~0.9.5",
+            "php": ">=7.0.8",
             "psy/psysh": "0.6.* || ~0.8",
-            "symfony/css-selector": "~2.8|~3.0",
-            "symfony/dom-crawler": "~2.8|~3.0",
-            "symfony/http-foundation": "~2.8|~3.0"
+            "symfony/css-selector": "~3.0|~4.0",
+            "symfony/dom-crawler": "~3.0|~4.0",
+            "symfony/http-foundation": "~3.0|~4.0"
         },
         "suggest": {
-            "symfony/thanks": "Thank your favorite PHP projects on Github using the CLI!",
-            "vlucas/phpdotenv": "Loads environment variables from .env to getenv(), $_ENV and $_SERVER automagically."
+            "symfony/thanks": "Thank your favorite PHP projects on GitHub using the CLI",
+            "vlucas/phpdotenv": "Loads environment variables from .env to getenv(), $_ENV and $_SERVER automagically"
         },
-        "time": "2018-03-21T20:50:16+00:00",
+        "time": "2020-11-30T02:09:53+00:00",
         "bin": [
             "bin/drupal"
         ],
@@ -3242,43 +3220,50 @@
             "development",
             "drupal",
             "symfony"
+        ],
+        "funding": [
+            {
+                "url": "https://opencollective.com/drupalconsole",
+                "type": "open_collective"
+            }
         ]
     },
     {
         "name": "drupal/console-core",
-        "version": "1.8.0",
-        "version_normalized": "1.8.0.0",
+        "version": "1.9.7",
+        "version_normalized": "1.9.7.0",
         "source": {
             "type": "git",
             "url": "https://github.com/hechoendrupal/drupal-console-core.git",
-            "reference": "bf1fb4a6f689377acec1694267f674178d28e5d1"
+            "reference": "ab3abc2631761c9588230ba88189d9ba4eb9ed63"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/hechoendrupal/drupal-console-core/zipball/bf1fb4a6f689377acec1694267f674178d28e5d1",
-            "reference": "bf1fb4a6f689377acec1694267f674178d28e5d1",
+            "url": "https://api.github.com/repos/hechoendrupal/drupal-console-core/zipball/ab3abc2631761c9588230ba88189d9ba4eb9ed63",
+            "reference": "ab3abc2631761c9588230ba88189d9ba4eb9ed63",
             "shasum": ""
         },
         "require": {
             "dflydev/dot-access-configuration": "^1.0",
-            "drupal/console-en": "1.8.0",
-            "php": "^5.5.9 || ^7.0",
+            "drupal/console-en": "1.9.7",
+            "guzzlehttp/guzzle": "~6.1",
+            "php": ">=7.0.8",
             "stecman/symfony-console-completion": "~0.7",
-            "symfony/config": "~2.8|~3.0",
-            "symfony/console": "~2.8|~3.0",
-            "symfony/debug": "~2.8|~3.0",
-            "symfony/dependency-injection": "~2.8|~3.0",
-            "symfony/event-dispatcher": "~2.8|~3.0",
-            "symfony/filesystem": "~2.8|~3.0",
-            "symfony/finder": "~2.8|~3.0",
-            "symfony/process": "~2.8|~3.0",
-            "symfony/translation": "~2.8|~3.0",
-            "symfony/yaml": "~2.8|~3.0",
-            "twig/twig": "^1.23.1",
+            "symfony/config": "~3.0|^4.4",
+            "symfony/console": "~3.0|^4.4",
+            "symfony/debug": "~3.0|^4.4",
+            "symfony/dependency-injection": "~3.0|^4.4",
+            "symfony/event-dispatcher": "~3.0|^4.4",
+            "symfony/filesystem": "~3.0|^4.4",
+            "symfony/finder": "~3.0|^4.4",
+            "symfony/process": "~3.0|^4.4",
+            "symfony/translation": "~3.0|^4.4",
+            "symfony/yaml": "~3.0|^4.4",
+            "twig/twig": "^1.38.2|^2.12.0",
             "webflo/drupal-finder": "^1.0",
             "webmozart/path-util": "^2.3"
         },
-        "time": "2018-03-21T19:33:23+00:00",
+        "time": "2020-11-30T01:45:57+00:00",
         "type": "library",
         "installation-source": "dist",
         "autoload": {
@@ -3304,10 +3289,6 @@
                 "email": "jesus.olivas@gmail.com",
                 "homepage": "http://jmolivas.com"
             },
-            {
-                "name": "Drupal Console Contributors",
-                "homepage": "https://github.com/hechoendrupal/DrupalConsole/graphs/contributors"
-            },
             {
                 "name": "Eduardo Garcia",
                 "email": "enzo@enzolutions.com",
@@ -3316,6 +3297,10 @@
             {
                 "name": "Omar Aguirre",
                 "email": "omersguchigu@gmail.com"
+            },
+            {
+                "name": "Drupal Console Contributors",
+                "homepage": "https://github.com/hechoendrupal/DrupalConsole/graphs/contributors"
             }
         ],
         "description": "Drupal Console Core",
@@ -3329,21 +3314,21 @@
     },
     {
         "name": "drupal/console-en",
-        "version": "1.8.0",
-        "version_normalized": "1.8.0.0",
+        "version": "v1.9.7",
+        "version_normalized": "1.9.7.0",
         "source": {
             "type": "git",
             "url": "https://github.com/hechoendrupal/drupal-console-en.git",
-            "reference": "ea956ddffab04f519a89858810e5f695b9def92b"
+            "reference": "7594601fff153c2799a62bd678ff80749baeee0c"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/hechoendrupal/drupal-console-en/zipball/ea956ddffab04f519a89858810e5f695b9def92b",
-            "reference": "ea956ddffab04f519a89858810e5f695b9def92b",
+            "url": "https://api.github.com/repos/hechoendrupal/drupal-console-en/zipball/7594601fff153c2799a62bd678ff80749baeee0c",
+            "reference": "7594601fff153c2799a62bd678ff80749baeee0c",
             "shasum": ""
         },
-        "time": "2018-03-21T19:16:27+00:00",
-        "type": "drupal-console-language",
+        "time": "2020-08-15T03:34:54+00:00",
+        "type": "library",
         "installation-source": "dist",
         "notification-url": "https://packagist.org/downloads/",
         "license": [
@@ -3360,10 +3345,6 @@
                 "email": "jesus.olivas@gmail.com",
                 "homepage": "http://jmolivas.com"
             },
-            {
-                "name": "Drupal Console Contributors",
-                "homepage": "https://github.com/hechoendrupal/DrupalConsole/graphs/contributors"
-            },
             {
                 "name": "Eduardo Garcia",
                 "email": "enzo@enzolutions.com",
@@ -3372,6 +3353,10 @@
             {
                 "name": "Omar Aguirre",
                 "email": "omersguchigu@gmail.com"
+            },
+            {
+                "name": "Drupal Console Contributors",
+                "homepage": "https://github.com/hechoendrupal/DrupalConsole/graphs/contributors"
             }
         ],
         "description": "Drupal Console English Language",
@@ -3385,25 +3370,26 @@
     },
     {
         "name": "drupal/console-extend-plugin",
-        "version": "0.9.2",
-        "version_normalized": "0.9.2.0",
+        "version": "0.9.5",
+        "version_normalized": "0.9.5.0",
         "source": {
             "type": "git",
             "url": "https://github.com/hechoendrupal/drupal-console-extend-plugin.git",
-            "reference": "f3bac233fd305359c33e96621443b3bd065555cc"
+            "reference": "eff6da99cfb5fe1fc60990672d2667c402eb3585"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/hechoendrupal/drupal-console-extend-plugin/zipball/f3bac233fd305359c33e96621443b3bd065555cc",
-            "reference": "f3bac233fd305359c33e96621443b3bd065555cc",
+            "url": "https://api.github.com/repos/hechoendrupal/drupal-console-extend-plugin/zipball/eff6da99cfb5fe1fc60990672d2667c402eb3585",
+            "reference": "eff6da99cfb5fe1fc60990672d2667c402eb3585",
             "shasum": ""
         },
         "require": {
-            "composer-plugin-api": "^1.0",
-            "symfony/finder": "~2.7|~3.0",
-            "symfony/yaml": "~2.7|~3.0"
+            "composer-plugin-api": "^1.0 || ^2.0",
+            "composer/installers": "^1.2",
+            "symfony/finder": "~3.0|^4.4",
+            "symfony/yaml": "~3.0|^4.4"
         },
-        "time": "2017-07-28T17:11:54+00:00",
+        "time": "2020-11-18T00:15:28+00:00",
         "type": "composer-plugin",
         "extra": {
             "class": "Drupal\\Console\\Composer\\Plugin\\Extender"
@@ -3485,17 +3471,17 @@
     },
     {
         "name": "drupal/core",
-        "version": "8.9.6",
-        "version_normalized": "8.9.6.0",
+        "version": "8.9.10",
+        "version_normalized": "8.9.10.0",
         "source": {
             "type": "git",
             "url": "https://github.com/drupal/core.git",
-            "reference": "caf4e756d31dfb0c2e52cd0748e900efe4b57766"
+            "reference": "e725c01cdf6fb6d8b330a27fa75caab91034805a"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/drupal/core/zipball/caf4e756d31dfb0c2e52cd0748e900efe4b57766",
-            "reference": "caf4e756d31dfb0c2e52cd0748e900efe4b57766",
+            "url": "https://api.github.com/repos/drupal/core/zipball/e725c01cdf6fb6d8b330a27fa75caab91034805a",
+            "reference": "e725c01cdf6fb6d8b330a27fa75caab91034805a",
             "shasum": ""
         },
         "require": {
@@ -3522,7 +3508,7 @@
             "laminas/laminas-diactoros": "^1.8",
             "laminas/laminas-feed": "^2.12",
             "masterminds/html5": "^2.1",
-            "pear/archive_tar": "^1.4.9",
+            "pear/archive_tar": "^1.4.11",
             "php": ">=7.0.8",
             "psr/log": "^1.0",
             "stack/builder": "^1.0",
@@ -3662,7 +3648,7 @@
             "drupal/workflows": "self.version",
             "drupal/workspaces": "self.version"
         },
-        "time": "2020-09-16T11:22:21+00:00",
+        "time": "2020-11-26T01:49:15+00:00",
         "type": "drupal-core",
         "extra": {
             "drupal-scaffold": {
@@ -3721,19 +3707,68 @@
         ],
         "description": "Drupal is an open source content management platform powering millions of websites and applications."
     },
+    {
+        "name": "drupal/core-composer-scaffold",
+        "version": "9.0.9",
+        "version_normalized": "9.0.9.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/drupal/core-composer-scaffold.git",
+            "reference": "c017751a6bb9b2ffe56f0fab607ba67c21604bfd"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/drupal/core-composer-scaffold/zipball/c017751a6bb9b2ffe56f0fab607ba67c21604bfd",
+            "reference": "c017751a6bb9b2ffe56f0fab607ba67c21604bfd",
+            "shasum": ""
+        },
+        "require": {
+            "composer-plugin-api": "^1 || ^2",
+            "php": ">=7.3.0"
+        },
+        "conflict": {
+            "drupal-composer/drupal-scaffold": "*"
+        },
+        "require-dev": {
+            "composer/composer": "^1.8@stable"
+        },
+        "time": "2020-08-07T22:30:24+00:00",
+        "type": "composer-plugin",
+        "extra": {
+            "class": "Drupal\\Composer\\Plugin\\Scaffold\\Plugin",
+            "branch-alias": {
+                "dev-master": "1.0.x-dev"
+            }
+        },
+        "installation-source": "dist",
+        "autoload": {
+            "psr-4": {
+                "Drupal\\Composer\\Plugin\\Scaffold\\": ""
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "GPL-2.0-or-later"
+        ],
+        "description": "A flexible Composer project scaffold builder.",
+        "homepage": "https://www.drupal.org/project/drupal",
+        "keywords": [
+            "drupal"
+        ]
+    },
     {
         "name": "drupal/core-recommended",
-        "version": "8.9.6",
-        "version_normalized": "8.9.6.0",
+        "version": "8.9.10",
+        "version_normalized": "8.9.10.0",
         "source": {
             "type": "git",
             "url": "https://github.com/drupal/core-recommended.git",
-            "reference": "6c5c4739afc5549e6089ef34b59c712c8872f154"
+            "reference": "106e2a3e6f00f8867d1867e9d7b1376961a264f7"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/drupal/core-recommended/zipball/6c5c4739afc5549e6089ef34b59c712c8872f154",
-            "reference": "6c5c4739afc5549e6089ef34b59c712c8872f154",
+            "url": "https://api.github.com/repos/drupal/core-recommended/zipball/106e2a3e6f00f8867d1867e9d7b1376961a264f7",
+            "reference": "106e2a3e6f00f8867d1867e9d7b1376961a264f7",
             "shasum": ""
         },
         "require": {
@@ -3745,7 +3780,7 @@
             "doctrine/common": "v2.7.3",
             "doctrine/inflector": "v1.2.0",
             "doctrine/lexer": "1.0.2",
-            "drupal/core": "8.9.6",
+            "drupal/core": "8.9.10",
             "easyrdf/easyrdf": "0.9.1",
             "egulias/email-validator": "2.1.17",
             "guzzlehttp/guzzle": "6.5.4",
@@ -3758,7 +3793,7 @@
             "laminas/laminas-zendframework-bridge": "1.0.4",
             "masterminds/html5": "2.3.0",
             "paragonie/random_compat": "v9.99.99",
-            "pear/archive_tar": "1.4.9",
+            "pear/archive_tar": "1.4.11",
             "pear/console_getopt": "v1.4.3",
             "pear/pear-core-minimal": "v1.10.10",
             "pear/pear_exception": "v1.0.1",
@@ -3796,7 +3831,7 @@
         "conflict": {
             "webflo/drupal-core-strict": "*"
         },
-        "time": "2020-09-16T11:22:21+00:00",
+        "time": "2020-11-26T01:49:15+00:00",
         "type": "metapackage",
         "notification-url": "https://packagist.org/downloads/",
         "license": [
@@ -5562,30 +5597,27 @@
     },
     {
         "name": "drupal/libraries",
-        "version": "3.0.0-alpha1",
-        "version_normalized": "3.0.0.0-alpha1",
+        "version": "3.0.0-alpha6",
+        "version_normalized": "3.0.0.0-alpha6",
         "source": {
             "type": "git",
             "url": "https://git.drupalcode.org/project/libraries.git",
-            "reference": "8.x-3.0-alpha1"
+            "reference": "8.x-3.0-alpha6"
         },
         "dist": {
             "type": "zip",
-            "url": "https://ftp.drupal.org/files/projects/libraries-8.x-3.0-alpha1.zip",
-            "reference": "8.x-3.0-alpha1",
-            "shasum": "bb07036b1eaeea7d736fc7e72416238830cd8d67"
+            "url": "https://ftp.drupal.org/files/projects/libraries-8.x-3.0-alpha6.zip",
+            "reference": "8.x-3.0-alpha6",
+            "shasum": "d2aaf7f0968a1864457a7741b7e38ab11ef83e2c"
         },
         "require": {
-            "drupal/core": "~8.0"
+            "drupal/core": "^8 || ^9"
         },
         "type": "drupal-module",
         "extra": {
-            "branch-alias": {
-                "dev-3.x": "3.x-dev"
-            },
             "drupal": {
-                "version": "8.x-3.0-alpha1",
-                "datestamp": "1517046484",
+                "version": "8.x-3.0-alpha6",
+                "datestamp": "1608099124",
                 "security-coverage": {
                     "status": "not-covered",
                     "message": "Alpha releases are not covered by Drupal security advisories."
@@ -5602,6 +5634,10 @@
                 "name": "Pol",
                 "homepage": "https://www.drupal.org/user/47194"
             },
+            {
+                "name": "joseph.olstad",
+                "homepage": "https://www.drupal.org/user/1321830"
+            },
             {
                 "name": "rjacobs",
                 "homepage": "https://www.drupal.org/user/422459"
@@ -8383,6 +8419,9 @@
                     "status": "covered",
                     "message": "Covered by Drupal's security advisory policy"
                 }
+            },
+            "patches_applied": {
+                "3028400": "https://www.drupal.org/files/issues/2019-05-16/wrong-url-with-infinit-scroll-3028400-1.patch"
             }
         },
         "installation-source": "dist",
@@ -9008,17 +9047,17 @@
     },
     {
         "name": "drush/drush",
-        "version": "9.7.1",
-        "version_normalized": "9.7.1.0",
+        "version": "9.7.2",
+        "version_normalized": "9.7.2.0",
         "source": {
             "type": "git",
             "url": "https://github.com/drush-ops/drush.git",
-            "reference": "6f9a8d235daec06fd6f47b2d84da675750566479"
+            "reference": "ab5e345a72c9187a7d770486a09691f6526826aa"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/drush-ops/drush/zipball/6f9a8d235daec06fd6f47b2d84da675750566479",
-            "reference": "6f9a8d235daec06fd6f47b2d84da675750566479",
+            "url": "https://api.github.com/repos/drush-ops/drush/zipball/ab5e345a72c9187a7d770486a09691f6526826aa",
+            "reference": "ab5e345a72c9187a7d770486a09691f6526826aa",
             "shasum": ""
         },
         "require": {
@@ -9038,7 +9077,7 @@
             "psr/log": "~1.0",
             "psy/psysh": "~0.6",
             "symfony/console": "^3.4",
-            "symfony/event-dispatcher": "^3.4",
+            "symfony/event-dispatcher": "^3.4 || ^4.0",
             "symfony/finder": "^3.4 || ^4.0",
             "symfony/process": "^3.4",
             "symfony/var-dumper": "^3.4 || ^4.0",
@@ -9060,7 +9099,7 @@
             "webflo/drupal-core-require-dev": "8.7.x-dev",
             "webflo/drupal-core-strict": "8.7.x-dev"
         },
-        "time": "2019-06-30T19:46:39+00:00",
+        "time": "2020-02-09T17:29:51+00:00",
         "bin": [
             "drush"
         ],
@@ -9947,100 +9986,6 @@
         ],
         "abandoned": "simplesamlphp/twig-configurable-i18n"
     },
-    {
-        "name": "jakub-onderka/php-console-color",
-        "version": "v0.2",
-        "version_normalized": "0.2.0.0",
-        "source": {
-            "type": "git",
-            "url": "https://github.com/JakubOnderka/PHP-Console-Color.git",
-            "reference": "d5deaecff52a0d61ccb613bb3804088da0307191"
-        },
-        "dist": {
-            "type": "zip",
-            "url": "https://api.github.com/repos/JakubOnderka/PHP-Console-Color/zipball/d5deaecff52a0d61ccb613bb3804088da0307191",
-            "reference": "d5deaecff52a0d61ccb613bb3804088da0307191",
-            "shasum": ""
-        },
-        "require": {
-            "php": ">=5.4.0"
-        },
-        "require-dev": {
-            "jakub-onderka/php-code-style": "1.0",
-            "jakub-onderka/php-parallel-lint": "1.0",
-            "jakub-onderka/php-var-dump-check": "0.*",
-            "phpunit/phpunit": "~4.3",
-            "squizlabs/php_codesniffer": "1.*"
-        },
-        "time": "2018-09-29T17:23:10+00:00",
-        "type": "library",
-        "installation-source": "dist",
-        "autoload": {
-            "psr-4": {
-                "JakubOnderka\\PhpConsoleColor\\": "src/"
-            }
-        },
-        "notification-url": "https://packagist.org/downloads/",
-        "license": [
-            "BSD-2-Clause"
-        ],
-        "authors": [
-            {
-                "name": "Jakub Onderka",
-                "email": "jakub.onderka@gmail.com"
-            }
-        ],
-        "abandoned": "php-parallel-lint/php-console-color"
-    },
-    {
-        "name": "jakub-onderka/php-console-highlighter",
-        "version": "v0.4",
-        "version_normalized": "0.4.0.0",
-        "source": {
-            "type": "git",
-            "url": "https://github.com/JakubOnderka/PHP-Console-Highlighter.git",
-            "reference": "9f7a229a69d52506914b4bc61bfdb199d90c5547"
-        },
-        "dist": {
-            "type": "zip",
-            "url": "https://api.github.com/repos/JakubOnderka/PHP-Console-Highlighter/zipball/9f7a229a69d52506914b4bc61bfdb199d90c5547",
-            "reference": "9f7a229a69d52506914b4bc61bfdb199d90c5547",
-            "shasum": ""
-        },
-        "require": {
-            "ext-tokenizer": "*",
-            "jakub-onderka/php-console-color": "~0.2",
-            "php": ">=5.4.0"
-        },
-        "require-dev": {
-            "jakub-onderka/php-code-style": "~1.0",
-            "jakub-onderka/php-parallel-lint": "~1.0",
-            "jakub-onderka/php-var-dump-check": "~0.1",
-            "phpunit/phpunit": "~4.0",
-            "squizlabs/php_codesniffer": "~1.5"
-        },
-        "time": "2018-09-29T18:48:56+00:00",
-        "type": "library",
-        "installation-source": "dist",
-        "autoload": {
-            "psr-4": {
-                "JakubOnderka\\PhpConsoleHighlighter\\": "src/"
-            }
-        },
-        "notification-url": "https://packagist.org/downloads/",
-        "license": [
-            "MIT"
-        ],
-        "authors": [
-            {
-                "name": "Jakub Onderka",
-                "email": "acci@acci.cz",
-                "homepage": "http://www.acci.cz/"
-            }
-        ],
-        "description": "Highlight PHP code in terminal",
-        "abandoned": "php-parallel-lint/php-console-highlighter"
-    },
     {
         "name": "laminas/laminas-diactoros",
         "version": "1.8.7p2",
@@ -10568,17 +10513,17 @@
     },
     {
         "name": "nikic/php-parser",
-        "version": "v4.2.2",
-        "version_normalized": "4.2.2.0",
+        "version": "v4.10.2",
+        "version_normalized": "4.10.2.0",
         "source": {
             "type": "git",
             "url": "https://github.com/nikic/PHP-Parser.git",
-            "reference": "1bd73cc04c3843ad8d6b0bfc0956026a151fc420"
+            "reference": "658f1be311a230e0907f5dfe0213742aff0596de"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/1bd73cc04c3843ad8d6b0bfc0956026a151fc420",
-            "reference": "1bd73cc04c3843ad8d6b0bfc0956026a151fc420",
+            "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/658f1be311a230e0907f5dfe0213742aff0596de",
+            "reference": "658f1be311a230e0907f5dfe0213742aff0596de",
             "shasum": ""
         },
         "require": {
@@ -10586,16 +10531,17 @@
             "php": ">=7.0"
         },
         "require-dev": {
-            "phpunit/phpunit": "^6.5 || ^7.0"
+            "ircmaxell/php-yacc": "^0.0.7",
+            "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0"
         },
-        "time": "2019-05-25T20:07:01+00:00",
+        "time": "2020-09-26T10:30:38+00:00",
         "bin": [
             "bin/php-parse"
         ],
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "4.2-dev"
+                "dev-master": "4.9-dev"
             }
         },
         "installation-source": "dist",
@@ -10621,24 +10567,30 @@
     },
     {
         "name": "oomphinc/composer-installers-extender",
-        "version": "v1.1.2",
-        "version_normalized": "1.1.2.0",
+        "version": "2.0.0",
+        "version_normalized": "2.0.0.0",
         "source": {
             "type": "git",
             "url": "https://github.com/oomphinc/composer-installers-extender.git",
-            "reference": "ca1c4b16b0905c81d1e77e608f36a2eff1a56f56"
+            "reference": "8d3fe38a1723e0e91076920c8bb946b1696e28ca"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/oomphinc/composer-installers-extender/zipball/ca1c4b16b0905c81d1e77e608f36a2eff1a56f56",
-            "reference": "ca1c4b16b0905c81d1e77e608f36a2eff1a56f56",
+            "url": "https://api.github.com/repos/oomphinc/composer-installers-extender/zipball/8d3fe38a1723e0e91076920c8bb946b1696e28ca",
+            "reference": "8d3fe38a1723e0e91076920c8bb946b1696e28ca",
             "shasum": ""
         },
         "require": {
-            "composer-plugin-api": "^1.0",
-            "composer/installers": "^1.0"
+            "composer-plugin-api": "^1.1 || ^2.0",
+            "composer/installers": "^1.0",
+            "php": ">=7.1"
+        },
+        "require-dev": {
+            "composer/composer": "^2.0",
+            "phpunit/phpunit": "^7.2",
+            "squizlabs/php_codesniffer": "^3.3"
         },
-        "time": "2017-03-31T16:57:39+00:00",
+        "time": "2020-08-11T21:06:11+00:00",
         "type": "composer-plugin",
         "extra": {
             "class": "OomphInc\\ComposerInstallersExtender\\Plugin"
@@ -10658,6 +10610,11 @@
                 "name": "Stephen Beemsterboer",
                 "email": "stephen@oomphinc.com",
                 "homepage": "https://github.com/balbuf"
+            },
+            {
+                "name": "Nathan Dentzau",
+                "email": "nate@oomphinc.com",
+                "homepage": "http://oomph.is/ndentzau"
             }
         ],
         "description": "Extend the composer/installers plugin to accept any arbitrary package type.",
@@ -10739,17 +10696,17 @@
     },
     {
         "name": "pear/archive_tar",
-        "version": "1.4.9",
-        "version_normalized": "1.4.9.0",
+        "version": "1.4.11",
+        "version_normalized": "1.4.11.0",
         "source": {
             "type": "git",
             "url": "https://github.com/pear/Archive_Tar.git",
-            "reference": "c5b00053770e1d72128252c62c2c1a12c26639f0"
+            "reference": "17d355cb7d3c4ff08e5729f29cd7660145208d9d"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/pear/Archive_Tar/zipball/c5b00053770e1d72128252c62c2c1a12c26639f0",
-            "reference": "c5b00053770e1d72128252c62c2c1a12c26639f0",
+            "url": "https://api.github.com/repos/pear/Archive_Tar/zipball/17d355cb7d3c4ff08e5729f29cd7660145208d9d",
+            "reference": "17d355cb7d3c4ff08e5729f29cd7660145208d9d",
             "shasum": ""
         },
         "require": {
@@ -10764,7 +10721,7 @@
             "ext-xz": "Lzma2 compression support.",
             "ext-zlib": "Gzip compression support."
         },
-        "time": "2019-12-04T10:17:28+00:00",
+        "time": "2020-11-19T22:10:24+00:00",
         "type": "library",
         "extra": {
             "branch-alias": {
@@ -11232,33 +11189,31 @@
     },
     {
         "name": "psy/psysh",
-        "version": "v0.9.9",
-        "version_normalized": "0.9.9.0",
+        "version": "v0.10.4",
+        "version_normalized": "0.10.4.0",
         "source": {
             "type": "git",
             "url": "https://github.com/bobthecow/psysh.git",
-            "reference": "9aaf29575bb8293206bb0420c1e1c87ff2ffa94e"
+            "reference": "a8aec1b2981ab66882a01cce36a49b6317dc3560"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/bobthecow/psysh/zipball/9aaf29575bb8293206bb0420c1e1c87ff2ffa94e",
-            "reference": "9aaf29575bb8293206bb0420c1e1c87ff2ffa94e",
+            "url": "https://api.github.com/repos/bobthecow/psysh/zipball/a8aec1b2981ab66882a01cce36a49b6317dc3560",
+            "reference": "a8aec1b2981ab66882a01cce36a49b6317dc3560",
             "shasum": ""
         },
         "require": {
-            "dnoegel/php-xdg-base-dir": "0.1",
+            "dnoegel/php-xdg-base-dir": "0.1.*",
             "ext-json": "*",
             "ext-tokenizer": "*",
-            "jakub-onderka/php-console-highlighter": "0.3.*|0.4.*",
-            "nikic/php-parser": "~1.3|~2.0|~3.0|~4.0",
-            "php": ">=5.4.0",
-            "symfony/console": "~2.3.10|^2.4.2|~3.0|~4.0",
-            "symfony/var-dumper": "~2.7|~3.0|~4.0"
+            "nikic/php-parser": "~4.0|~3.0|~2.0|~1.3",
+            "php": "^8.0 || ^7.0 || ^5.5.9",
+            "symfony/console": "~5.0|~4.0|~3.0|^2.4.2|~2.3.10",
+            "symfony/var-dumper": "~5.0|~4.0|~3.0|~2.7"
         },
         "require-dev": {
             "bamarni/composer-bin-plugin": "^1.2",
-            "hoa/console": "~2.15|~3.16",
-            "phpunit/phpunit": "~4.8.35|~5.0|~6.0|~7.0"
+            "hoa/console": "3.17.*"
         },
         "suggest": {
             "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)",
@@ -11267,14 +11222,14 @@
             "ext-readline": "Enables support for arrow-key history navigation, and showing and manipulating command history.",
             "hoa/console": "A pure PHP readline implementation. You'll want this if your PHP install doesn't already support readline or libedit."
         },
-        "time": "2018-10-13T15:16:03+00:00",
+        "time": "2020-05-03T19:32:03+00:00",
         "bin": [
             "bin/psysh"
         ],
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-develop": "0.9.x-dev"
+                "dev-master": "0.10.x-dev"
             }
         },
         "installation-source": "dist",
@@ -11388,46 +11343,6 @@
             "xmldsig"
         ]
     },
-    {
-        "name": "rvtraveller/qs-composer-installer",
-        "version": "1.1",
-        "version_normalized": "1.1.0.0",
-        "source": {
-            "type": "git",
-            "url": "https://github.com/rvtraveller/qs-composer-installer.git",
-            "reference": "20d6f4397e4b77599646767ad030092a60f5f92a"
-        },
-        "dist": {
-            "type": "zip",
-            "url": "https://api.github.com/repos/rvtraveller/qs-composer-installer/zipball/20d6f4397e4b77599646767ad030092a60f5f92a",
-            "reference": "20d6f4397e4b77599646767ad030092a60f5f92a",
-            "shasum": ""
-        },
-        "require": {
-            "composer-plugin-api": "~1.0",
-            "composer/installers": "~1.0"
-        },
-        "require-dev": {
-            "composer/composer": "~1.0@dev"
-        },
-        "time": "2017-01-27T20:40:31+00:00",
-        "type": "composer-plugin",
-        "extra": {
-            "class": "rvtraveller\\QuicksilverComposerInstaller\\QuicksilverComposerInstallerPlugin"
-        },
-        "installation-source": "dist",
-        "autoload": {
-            "psr-4": {
-                "rvtraveller\\QuicksilverComposerInstaller\\": "src"
-            }
-        },
-        "notification-url": "https://packagist.org/downloads/",
-        "license": [
-            "MIT"
-        ],
-        "description": "Install Quicksilver modules for Pantheon into custom locations.",
-        "homepage": "https://github.com/rvtraveller/qs-composer-installer"
-    },
     {
         "name": "simplesamlphp/saml2",
         "version": "v3.4.5",
@@ -11636,31 +11551,31 @@
     },
     {
         "name": "stecman/symfony-console-completion",
-        "version": "0.8.0",
-        "version_normalized": "0.8.0.0",
+        "version": "0.11.0",
+        "version_normalized": "0.11.0.0",
         "source": {
             "type": "git",
             "url": "https://github.com/stecman/symfony-console-completion.git",
-            "reference": "cd738867503477e91dbe84173dfabd431c883431"
+            "reference": "a9502dab59405e275a9f264536c4e1cb61fc3518"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/stecman/symfony-console-completion/zipball/cd738867503477e91dbe84173dfabd431c883431",
-            "reference": "cd738867503477e91dbe84173dfabd431c883431",
+            "url": "https://api.github.com/repos/stecman/symfony-console-completion/zipball/a9502dab59405e275a9f264536c4e1cb61fc3518",
+            "reference": "a9502dab59405e275a9f264536c4e1cb61fc3518",
             "shasum": ""
         },
         "require": {
             "php": ">=5.3.2",
-            "symfony/console": "~2.3 || ~3.0 || ~4.0"
+            "symfony/console": "~2.3 || ~3.0 || ~4.0 || ~5.0"
         },
         "require-dev": {
             "phpunit/phpunit": "~4.8.36 || ~5.7 || ~6.4"
         },
-        "time": "2018-02-10T04:28:01+00:00",
+        "time": "2019-11-24T17:03:06+00:00",
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "0.6.x-dev"
+                "dev-master": "0.10.x-dev"
             }
         },
         "installation-source": "dist",
@@ -11802,44 +11717,39 @@
     },
     {
         "name": "symfony/config",
-        "version": "v3.4.42",
-        "version_normalized": "3.4.42.0",
+        "version": "v4.4.17",
+        "version_normalized": "4.4.17.0",
         "source": {
             "type": "git",
             "url": "https://github.com/symfony/config.git",
-            "reference": "cd61db31cbd19cbe4ba9f6968f13c9076e1372ab"
+            "reference": "4da4a6b07cc7d8d7d3e29842bc9c20401d555065"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/symfony/config/zipball/cd61db31cbd19cbe4ba9f6968f13c9076e1372ab",
-            "reference": "cd61db31cbd19cbe4ba9f6968f13c9076e1372ab",
+            "url": "https://api.github.com/repos/symfony/config/zipball/4da4a6b07cc7d8d7d3e29842bc9c20401d555065",
+            "reference": "4da4a6b07cc7d8d7d3e29842bc9c20401d555065",
             "shasum": ""
         },
         "require": {
-            "php": "^5.5.9|>=7.0.8",
-            "symfony/filesystem": "~2.8|~3.0|~4.0",
+            "php": ">=7.1.3",
+            "symfony/filesystem": "^3.4|^4.0|^5.0",
             "symfony/polyfill-ctype": "~1.8"
         },
         "conflict": {
-            "symfony/dependency-injection": "<3.3",
-            "symfony/finder": "<3.3"
+            "symfony/finder": "<3.4"
         },
         "require-dev": {
-            "symfony/dependency-injection": "~3.3|~4.0",
-            "symfony/event-dispatcher": "~3.3|~4.0",
-            "symfony/finder": "~3.3|~4.0",
-            "symfony/yaml": "~3.0|~4.0"
+            "symfony/event-dispatcher": "^3.4|^4.0|^5.0",
+            "symfony/finder": "^3.4|^4.0|^5.0",
+            "symfony/messenger": "^4.1|^5.0",
+            "symfony/service-contracts": "^1.1|^2",
+            "symfony/yaml": "^3.4|^4.0|^5.0"
         },
         "suggest": {
             "symfony/yaml": "To use the yaml reference dumper"
         },
-        "time": "2020-05-22T10:56:48+00:00",
+        "time": "2020-11-16T11:15:53+00:00",
         "type": "library",
-        "extra": {
-            "branch-alias": {
-                "dev-master": "3.4-dev"
-            }
-        },
         "installation-source": "dist",
         "autoload": {
             "psr-4": {
@@ -11864,7 +11774,21 @@
             }
         ],
         "description": "Symfony Config Component",
-        "homepage": "https://symfony.com"
+        "homepage": "https://symfony.com",
+        "funding": [
+            {
+                "url": "https://symfony.com/sponsor",
+                "type": "custom"
+            },
+            {
+                "url": "https://github.com/fabpot",
+                "type": "github"
+            },
+            {
+                "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                "type": "tidelift"
+            }
+        ]
     },
     {
         "name": "symfony/console",
@@ -11942,29 +11866,24 @@
     },
     {
         "name": "symfony/css-selector",
-        "version": "v3.4.14",
-        "version_normalized": "3.4.14.0",
+        "version": "v4.4.17",
+        "version_normalized": "4.4.17.0",
         "source": {
             "type": "git",
             "url": "https://github.com/symfony/css-selector.git",
-            "reference": "edda5a6155000ff8c3a3f85ee5c421af93cca416"
+            "reference": "5e6efcb6e5d120249da366417e2517c55b50c931"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/symfony/css-selector/zipball/edda5a6155000ff8c3a3f85ee5c421af93cca416",
-            "reference": "edda5a6155000ff8c3a3f85ee5c421af93cca416",
+            "url": "https://api.github.com/repos/symfony/css-selector/zipball/5e6efcb6e5d120249da366417e2517c55b50c931",
+            "reference": "5e6efcb6e5d120249da366417e2517c55b50c931",
             "shasum": ""
         },
         "require": {
-            "php": "^5.5.9|>=7.0.8"
+            "php": ">=7.1.3"
         },
-        "time": "2018-07-26T09:06:28+00:00",
+        "time": "2020-10-28T20:42:29+00:00",
         "type": "library",
-        "extra": {
-            "branch-alias": {
-                "dev-master": "3.4-dev"
-            }
-        },
         "installation-source": "dist",
         "autoload": {
             "psr-4": {
@@ -11979,21 +11898,35 @@
             "MIT"
         ],
         "authors": [
-            {
-                "name": "Jean-François Simon",
-                "email": "jeanfrancois.simon@sensiolabs.com"
-            },
             {
                 "name": "Fabien Potencier",
                 "email": "fabien@symfony.com"
             },
+            {
+                "name": "Jean-François Simon",
+                "email": "jeanfrancois.simon@sensiolabs.com"
+            },
             {
                 "name": "Symfony Community",
                 "homepage": "https://symfony.com/contributors"
             }
         ],
         "description": "Symfony CssSelector Component",
-        "homepage": "https://symfony.com"
+        "homepage": "https://symfony.com",
+        "funding": [
+            {
+                "url": "https://symfony.com/sponsor",
+                "type": "custom"
+            },
+            {
+                "url": "https://github.com/fabpot",
+                "type": "github"
+            },
+            {
+                "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                "type": "tidelift"
+            }
+        ]
     },
     {
         "name": "symfony/debug",
@@ -12128,35 +12061,35 @@
     },
     {
         "name": "symfony/dom-crawler",
-        "version": "v3.4.14",
-        "version_normalized": "3.4.14.0",
+        "version": "v4.2.12",
+        "version_normalized": "4.2.12.0",
         "source": {
             "type": "git",
             "url": "https://github.com/symfony/dom-crawler.git",
-            "reference": "452bfc854b60134438e3824b159b0d24a5892331"
+            "reference": "ba1da8fb10291714b8db153fcf7ac515e1a217bb"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/452bfc854b60134438e3824b159b0d24a5892331",
-            "reference": "452bfc854b60134438e3824b159b0d24a5892331",
+            "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/ba1da8fb10291714b8db153fcf7ac515e1a217bb",
+            "reference": "ba1da8fb10291714b8db153fcf7ac515e1a217bb",
             "shasum": ""
         },
         "require": {
-            "php": "^5.5.9|>=7.0.8",
+            "php": "^7.1.3",
             "symfony/polyfill-ctype": "~1.8",
             "symfony/polyfill-mbstring": "~1.0"
         },
         "require-dev": {
-            "symfony/css-selector": "~2.8|~3.0|~4.0"
+            "symfony/css-selector": "~3.4|~4.0"
         },
         "suggest": {
             "symfony/css-selector": ""
         },
-        "time": "2018-07-26T10:03:52+00:00",
+        "time": "2019-06-13T10:57:15+00:00",
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "3.4-dev"
+                "dev-master": "4.2-dev"
             }
         },
         "installation-source": "dist",
@@ -12252,30 +12185,25 @@
     },
     {
         "name": "symfony/filesystem",
-        "version": "v3.4.42",
-        "version_normalized": "3.4.42.0",
+        "version": "v4.4.17",
+        "version_normalized": "4.4.17.0",
         "source": {
             "type": "git",
             "url": "https://github.com/symfony/filesystem.git",
-            "reference": "0f625d0cb1e59c8c4ba61abb170125175218ff10"
+            "reference": "17b83e36a911aefa2cfe04bbf6328ec4c040c1b2"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/symfony/filesystem/zipball/0f625d0cb1e59c8c4ba61abb170125175218ff10",
-            "reference": "0f625d0cb1e59c8c4ba61abb170125175218ff10",
+            "url": "https://api.github.com/repos/symfony/filesystem/zipball/17b83e36a911aefa2cfe04bbf6328ec4c040c1b2",
+            "reference": "17b83e36a911aefa2cfe04bbf6328ec4c040c1b2",
             "shasum": ""
         },
         "require": {
-            "php": "^5.5.9|>=7.0.8",
+            "php": ">=7.1.3",
             "symfony/polyfill-ctype": "~1.8"
         },
-        "time": "2020-05-30T17:48:24+00:00",
+        "time": "2020-11-11T22:20:15+00:00",
         "type": "library",
-        "extra": {
-            "branch-alias": {
-                "dev-master": "3.4-dev"
-            }
-        },
         "installation-source": "dist",
         "autoload": {
             "psr-4": {
@@ -12300,33 +12228,42 @@
             }
         ],
         "description": "Symfony Filesystem Component",
-        "homepage": "https://symfony.com"
+        "homepage": "https://symfony.com",
+        "funding": [
+            {
+                "url": "https://symfony.com/sponsor",
+                "type": "custom"
+            },
+            {
+                "url": "https://github.com/fabpot",
+                "type": "github"
+            },
+            {
+                "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                "type": "tidelift"
+            }
+        ]
     },
     {
         "name": "symfony/finder",
-        "version": "v3.4.28",
-        "version_normalized": "3.4.28.0",
+        "version": "v4.4.17",
+        "version_normalized": "4.4.17.0",
         "source": {
             "type": "git",
             "url": "https://github.com/symfony/finder.git",
-            "reference": "fa5d962a71f2169dfe1cbae217fa5a2799859f6c"
+            "reference": "9f1d1d883b79a91ef320c0c6e803494e042ef36e"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/symfony/finder/zipball/fa5d962a71f2169dfe1cbae217fa5a2799859f6c",
-            "reference": "fa5d962a71f2169dfe1cbae217fa5a2799859f6c",
+            "url": "https://api.github.com/repos/symfony/finder/zipball/9f1d1d883b79a91ef320c0c6e803494e042ef36e",
+            "reference": "9f1d1d883b79a91ef320c0c6e803494e042ef36e",
             "shasum": ""
         },
         "require": {
-            "php": "^5.5.9|>=7.0.8"
+            "php": ">=7.1.3"
         },
-        "time": "2019-05-24T12:25:55+00:00",
+        "time": "2020-11-17T19:45:34+00:00",
         "type": "library",
-        "extra": {
-            "branch-alias": {
-                "dev-master": "3.4-dev"
-            }
-        },
         "installation-source": "dist",
         "autoload": {
             "psr-4": {
@@ -12351,7 +12288,21 @@
             }
         ],
         "description": "Symfony Finder Component",
-        "homepage": "https://symfony.com"
+        "homepage": "https://symfony.com",
+        "funding": [
+            {
+                "url": "https://symfony.com/sponsor",
+                "type": "custom"
+            },
+            {
+                "url": "https://github.com/fabpot",
+                "type": "github"
+            },
+            {
+                "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                "type": "tidelift"
+            }
+        ]
     },
     {
         "name": "symfony/http-foundation",
@@ -13414,17 +13365,17 @@
     },
     {
         "name": "symfony/var-dumper",
-        "version": "v3.4.28",
-        "version_normalized": "3.4.28.0",
+        "version": "v3.4.47",
+        "version_normalized": "3.4.47.0",
         "source": {
             "type": "git",
             "url": "https://github.com/symfony/var-dumper.git",
-            "reference": "ca5fef348a0440411bbca0f9ec14e9a11625bd6a"
+            "reference": "0719f6cf4633a38b2c1585140998579ce23b4b7d"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/symfony/var-dumper/zipball/ca5fef348a0440411bbca0f9ec14e9a11625bd6a",
-            "reference": "ca5fef348a0440411bbca0f9ec14e9a11625bd6a",
+            "url": "https://api.github.com/repos/symfony/var-dumper/zipball/0719f6cf4633a38b2c1585140998579ce23b4b7d",
+            "reference": "0719f6cf4633a38b2c1585140998579ce23b4b7d",
             "shasum": ""
         },
         "require": {
@@ -13443,13 +13394,8 @@
             "ext-intl": "To show region name in time zone dump",
             "ext-symfony_debug": ""
         },
-        "time": "2019-05-01T09:52:10+00:00",
+        "time": "2020-10-24T10:57:07+00:00",
         "type": "library",
-        "extra": {
-            "branch-alias": {
-                "dev-master": "3.4-dev"
-            }
-        },
         "installation-source": "dist",
         "autoload": {
             "files": [
@@ -13481,6 +13427,20 @@
         "keywords": [
             "debug",
             "dump"
+        ],
+        "funding": [
+            {
+                "url": "https://symfony.com/sponsor",
+                "type": "custom"
+            },
+            {
+                "url": "https://github.com/fabpot",
+                "type": "github"
+            },
+            {
+                "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                "type": "tidelift"
+            }
         ]
     },
     {
@@ -13722,24 +13682,27 @@
     },
     {
         "name": "webflo/drupal-finder",
-        "version": "1.1.0",
-        "version_normalized": "1.1.0.0",
+        "version": "1.2.2",
+        "version_normalized": "1.2.2.0",
         "source": {
             "type": "git",
             "url": "https://github.com/webflo/drupal-finder.git",
-            "reference": "8a7886c575d6eaa67a425dceccc84e735c0b9637"
+            "reference": "c8e5dbe65caef285fec8057a4c718a0d4138d1ee"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/webflo/drupal-finder/zipball/8a7886c575d6eaa67a425dceccc84e735c0b9637",
-            "reference": "8a7886c575d6eaa67a425dceccc84e735c0b9637",
+            "url": "https://api.github.com/repos/webflo/drupal-finder/zipball/c8e5dbe65caef285fec8057a4c718a0d4138d1ee",
+            "reference": "c8e5dbe65caef285fec8057a4c718a0d4138d1ee",
             "shasum": ""
         },
+        "require": {
+            "ext-json": "*"
+        },
         "require-dev": {
             "mikey179/vfsstream": "^1.6",
             "phpunit/phpunit": "^4.8"
         },
-        "time": "2017-10-24T08:12:11+00:00",
+        "time": "2020-10-27T09:42:17+00:00",
         "type": "library",
         "installation-source": "dist",
         "autoload": {
@@ -13749,7 +13712,7 @@
         },
         "notification-url": "https://packagist.org/downloads/",
         "license": [
-            "GPL-2.0+"
+            "GPL-2.0-or-later"
         ],
         "authors": [
             {
@@ -13903,50 +13866,5 @@
             "MD5",
             "apr1"
         ]
-    },
-    {
-        "name": "zaporylie/composer-drupal-optimizations",
-        "version": "1.1.0",
-        "version_normalized": "1.1.0.0",
-        "source": {
-            "type": "git",
-            "url": "https://github.com/zaporylie/composer-drupal-optimizations.git",
-            "reference": "173c198fd7c9aefa5e5b68cd755ee63eb0abf7e8"
-        },
-        "dist": {
-            "type": "zip",
-            "url": "https://api.github.com/repos/zaporylie/composer-drupal-optimizations/zipball/173c198fd7c9aefa5e5b68cd755ee63eb0abf7e8",
-            "reference": "173c198fd7c9aefa5e5b68cd755ee63eb0abf7e8",
-            "shasum": ""
-        },
-        "require": {
-            "composer-plugin-api": "^1.1"
-        },
-        "require-dev": {
-            "composer/composer": "^1.6",
-            "phpunit/phpunit": "^6"
-        },
-        "time": "2019-02-20T10:00:17+00:00",
-        "type": "composer-plugin",
-        "extra": {
-            "class": "zaporylie\\ComposerDrupalOptimizations\\Plugin"
-        },
-        "installation-source": "dist",
-        "autoload": {
-            "psr-4": {
-                "zaporylie\\ComposerDrupalOptimizations\\": "src/"
-            }
-        },
-        "notification-url": "https://packagist.org/downloads/",
-        "license": [
-            "GPL-2.0-or-later"
-        ],
-        "authors": [
-            {
-                "name": "Jakub Piasecki",
-                "email": "jakub@piaseccy.pl"
-            }
-        ],
-        "description": "Composer plugin to improve composer performance for Drupal projects"
     }
 ]
diff --git a/vendor/consolidation/annotated-command/.scenarios.lock/finder5/.gitignore b/vendor/consolidation/annotated-command/.scenarios.lock/finder5/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..5657f6ea7d574e423dc2c297e2e19a9dbd7a7170
--- /dev/null
+++ b/vendor/consolidation/annotated-command/.scenarios.lock/finder5/.gitignore
@@ -0,0 +1 @@
+vendor
\ No newline at end of file
diff --git a/vendor/consolidation/annotated-command/.scenarios.lock/finder5/composer.json b/vendor/consolidation/annotated-command/.scenarios.lock/finder5/composer.json
new file mode 100644
index 0000000000000000000000000000000000000000..547e43836e443c2b46073637ffd61f7003e4974e
--- /dev/null
+++ b/vendor/consolidation/annotated-command/.scenarios.lock/finder5/composer.json
@@ -0,0 +1,62 @@
+{
+    "name": "consolidation/annotated-command",
+    "description": "Initialize Symfony Console commands from annotated command class methods.",
+    "license": "MIT",
+    "authors": [
+        {
+            "name": "Greg Anderson",
+            "email": "greg.1.anderson@greenknowe.org"
+        }
+    ],
+    "autoload": {
+        "psr-4": {
+            "Consolidation\\AnnotatedCommand\\": "../../src"
+        }
+    },
+    "autoload-dev": {
+        "psr-4": {
+            "Consolidation\\TestUtils\\": "../../tests/src"
+        }
+    },
+    "require": {
+        "symfony/finder": "^5",
+        "php": ">=5.4.5",
+        "consolidation/output-formatters": "^3.5.1",
+        "psr/log": "^1",
+        "symfony/console": "^2.8|^3|^4",
+        "symfony/event-dispatcher": "^2.5|^3|^4"
+    },
+    "require-dev": {
+        "phpunit/phpunit": "^6",
+        "php-coveralls/php-coveralls": "^1",
+        "g1a/composer-test-scenarios": "^3",
+        "squizlabs/php_codesniffer": "^2.7"
+    },
+    "config": {
+        "platform": {
+            "php": "7.2.5"
+        },
+        "optimize-autoloader": true,
+        "sort-packages": true,
+        "vendor-dir": "../../vendor"
+    },
+    "scripts": {
+        "cs": "phpcs --standard=PSR2 -n src",
+        "cbf": "phpcbf --standard=PSR2 -n src",
+        "unit": "SHELL_INTERACTIVE=true phpunit --colors=always",
+        "lint": [
+            "find src -name '*.php' -print0 | xargs -0 -n1 php -l",
+            "find tests/src -name '*.php' -print0 | xargs -0 -n1 php -l"
+        ],
+        "test": [
+            "@lint",
+            "@unit",
+            "@cs"
+        ]
+    },
+    "extra": {
+        "branch-alias": {
+            "dev-master": "2.x-dev"
+        }
+    }
+}
diff --git a/vendor/drupal-composer/drupal-scaffold/composer.lock b/vendor/consolidation/annotated-command/.scenarios.lock/finder5/composer.lock
similarity index 62%
rename from vendor/drupal-composer/drupal-scaffold/composer.lock
rename to vendor/consolidation/annotated-command/.scenarios.lock/finder5/composer.lock
index 707e504608cbb8332526ce0644bba70202f746a6..ede601c4eaed53436b4931d1eb83fed5eceeb2bb 100644
--- a/vendor/drupal-composer/drupal-scaffold/composer.lock
+++ b/vendor/consolidation/annotated-command/.scenarios.lock/finder5/composer.lock
@@ -4,38 +4,104 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "This file is @generated automatically"
     ],
-    "content-hash": "cc2cd84cd41c52965cd00f2e515bb6d3",
+    "content-hash": "33b85345d55a3898a6a929558d951f57",
     "packages": [
         {
-            "name": "composer/semver",
-            "version": "1.4.2",
+            "name": "consolidation/output-formatters",
+            "version": "3.5.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/composer/semver.git",
-                "reference": "c7cb9a2095a074d131b65a8a0cd294479d785573"
+                "url": "https://github.com/consolidation/output-formatters.git",
+                "reference": "0d38f13051ef05c223a2bb8e962d668e24785196"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/composer/semver/zipball/c7cb9a2095a074d131b65a8a0cd294479d785573",
-                "reference": "c7cb9a2095a074d131b65a8a0cd294479d785573",
+                "url": "https://api.github.com/repos/consolidation/output-formatters/zipball/0d38f13051ef05c223a2bb8e962d668e24785196",
+                "reference": "0d38f13051ef05c223a2bb8e962d668e24785196",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.3.2 || ^7.0"
+                "dflydev/dot-access-data": "^1.1.0",
+                "php": ">=5.4.0",
+                "symfony/console": "^2.8|^3|^4",
+                "symfony/finder": "^2.5|^3|^4|^5"
             },
             "require-dev": {
-                "phpunit/phpunit": "^4.5 || ^5.0.5",
-                "phpunit/phpunit-mock-objects": "2.3.0 || ^3.0"
+                "g1a/composer-test-scenarios": "^3",
+                "php-coveralls/php-coveralls": "^1",
+                "phpunit/phpunit": "^5.7.27",
+                "squizlabs/php_codesniffer": "^2.7",
+                "symfony/var-dumper": "^2.8|^3|^4",
+                "victorjonsson/markdowndocs": "^1.3"
+            },
+            "suggest": {
+                "symfony/var-dumper": "For using the var_dump formatter"
             },
             "type": "library",
             "extra": {
+                "scenarios": {
+                    "finder5": {
+                        "require": {
+                            "symfony/finder": "^5"
+                        },
+                        "config": {
+                            "platform": {
+                                "php": "7.2.5"
+                            }
+                        }
+                    },
+                    "symfony4": {
+                        "require": {
+                            "symfony/console": "^4.0"
+                        },
+                        "require-dev": {
+                            "phpunit/phpunit": "^6"
+                        },
+                        "config": {
+                            "platform": {
+                                "php": "7.1.3"
+                            }
+                        }
+                    },
+                    "symfony3": {
+                        "require": {
+                            "symfony/console": "^3.4",
+                            "symfony/finder": "^3.4",
+                            "symfony/var-dumper": "^3.4"
+                        },
+                        "config": {
+                            "platform": {
+                                "php": "5.6.32"
+                            }
+                        }
+                    },
+                    "symfony2": {
+                        "require": {
+                            "symfony/console": "^2.8"
+                        },
+                        "require-dev": {
+                            "phpunit/phpunit": "^4.8.36"
+                        },
+                        "remove": [
+                            "php-coveralls/php-coveralls"
+                        ],
+                        "config": {
+                            "platform": {
+                                "php": "5.4.8"
+                            }
+                        },
+                        "scenario-options": {
+                            "create-lockfile": "false"
+                        }
+                    }
+                },
                 "branch-alias": {
-                    "dev-master": "1.x-dev"
+                    "dev-master": "3.x-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Composer\\Semver\\": "src"
+                    "Consolidation\\OutputFormatters\\": "src"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -44,66 +110,520 @@
             ],
             "authors": [
                 {
-                    "name": "Nils Adermann",
-                    "email": "naderman@naderman.de",
-                    "homepage": "http://www.naderman.de"
+                    "name": "Greg Anderson",
+                    "email": "greg.1.anderson@greenknowe.org"
+                }
+            ],
+            "description": "Format text by applying transformations provided by plug-in formatters.",
+            "time": "2020-10-11T04:15:32+00:00"
+        },
+        {
+            "name": "dflydev/dot-access-data",
+            "version": "v1.1.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/dflydev/dflydev-dot-access-data.git",
+                "reference": "3fbd874921ab2c041e899d044585a2ab9795df8a"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/3fbd874921ab2c041e899d044585a2ab9795df8a",
+                "reference": "3fbd874921ab2c041e899d044585a2ab9795df8a",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.2"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "Dflydev\\DotAccessData": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Dragonfly Development Inc.",
+                    "email": "info@dflydev.com",
+                    "homepage": "http://dflydev.com"
                 },
                 {
-                    "name": "Jordi Boggiano",
-                    "email": "j.boggiano@seld.be",
-                    "homepage": "http://seld.be"
+                    "name": "Beau Simensen",
+                    "email": "beau@dflydev.com",
+                    "homepage": "http://beausimensen.com"
                 },
                 {
-                    "name": "Rob Bast",
-                    "email": "rob.bast@gmail.com",
-                    "homepage": "http://robbast.nl"
+                    "name": "Carlos Frutos",
+                    "email": "carlos@kiwing.it",
+                    "homepage": "https://github.com/cfrutos"
+                }
+            ],
+            "description": "Given a deep data structure, access data by dot notation.",
+            "homepage": "https://github.com/dflydev/dflydev-dot-access-data",
+            "keywords": [
+                "access",
+                "data",
+                "dot",
+                "notation"
+            ],
+            "time": "2017-01-20T21:14:22+00:00"
+        },
+        {
+            "name": "psr/container",
+            "version": "1.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/php-fig/container.git",
+                "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
+                "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Psr\\Container\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "PHP-FIG",
+                    "homepage": "http://www.php-fig.org/"
+                }
+            ],
+            "description": "Common Container Interface (PHP FIG PSR-11)",
+            "homepage": "https://github.com/php-fig/container",
+            "keywords": [
+                "PSR-11",
+                "container",
+                "container-interface",
+                "container-interop",
+                "psr"
+            ],
+            "time": "2017-02-14T16:28:37+00:00"
+        },
+        {
+            "name": "psr/log",
+            "version": "1.1.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/php-fig/log.git",
+                "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc",
+                "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.1.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Psr\\Log\\": "Psr/Log/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "PHP-FIG",
+                    "homepage": "http://www.php-fig.org/"
                 }
             ],
-            "description": "Semver library that offers utilities, version constraint parsing and validation.",
+            "description": "Common interface for logging libraries",
+            "homepage": "https://github.com/php-fig/log",
             "keywords": [
-                "semantic",
-                "semver",
-                "validation",
-                "versioning"
+                "log",
+                "psr",
+                "psr-3"
+            ],
+            "time": "2020-03-23T09:12:05+00:00"
+        },
+        {
+            "name": "symfony/console",
+            "version": "v4.4.15",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/console.git",
+                "reference": "90933b39c7b312fc3ceaa1ddeac7eb48cb953124"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/console/zipball/90933b39c7b312fc3ceaa1ddeac7eb48cb953124",
+                "reference": "90933b39c7b312fc3ceaa1ddeac7eb48cb953124",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.1.3",
+                "symfony/polyfill-mbstring": "~1.0",
+                "symfony/polyfill-php73": "^1.8",
+                "symfony/polyfill-php80": "^1.15",
+                "symfony/service-contracts": "^1.1|^2"
+            },
+            "conflict": {
+                "symfony/dependency-injection": "<3.4",
+                "symfony/event-dispatcher": "<4.3|>=5",
+                "symfony/lock": "<4.4",
+                "symfony/process": "<3.3"
+            },
+            "provide": {
+                "psr/log-implementation": "1.0"
+            },
+            "require-dev": {
+                "psr/log": "~1.0",
+                "symfony/config": "^3.4|^4.0|^5.0",
+                "symfony/dependency-injection": "^3.4|^4.0|^5.0",
+                "symfony/event-dispatcher": "^4.3",
+                "symfony/lock": "^4.4|^5.0",
+                "symfony/process": "^3.4|^4.0|^5.0",
+                "symfony/var-dumper": "^4.3|^5.0"
+            },
+            "suggest": {
+                "psr/log": "For using the console logger",
+                "symfony/event-dispatcher": "",
+                "symfony/lock": "",
+                "symfony/process": ""
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "4.4-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Console\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony Console Component",
+            "homepage": "https://symfony.com",
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-15T07:58:55+00:00"
+        },
+        {
+            "name": "symfony/event-dispatcher",
+            "version": "v4.4.15",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/event-dispatcher.git",
+                "reference": "e17bb5e0663dc725f7cdcafc932132735b4725cd"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/e17bb5e0663dc725f7cdcafc932132735b4725cd",
+                "reference": "e17bb5e0663dc725f7cdcafc932132735b4725cd",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.1.3",
+                "symfony/event-dispatcher-contracts": "^1.1"
+            },
+            "conflict": {
+                "symfony/dependency-injection": "<3.4"
+            },
+            "provide": {
+                "psr/event-dispatcher-implementation": "1.0",
+                "symfony/event-dispatcher-implementation": "1.1"
+            },
+            "require-dev": {
+                "psr/log": "~1.0",
+                "symfony/config": "^3.4|^4.0|^5.0",
+                "symfony/dependency-injection": "^3.4|^4.0|^5.0",
+                "symfony/error-handler": "~3.4|~4.4",
+                "symfony/expression-language": "^3.4|^4.0|^5.0",
+                "symfony/http-foundation": "^3.4|^4.0|^5.0",
+                "symfony/service-contracts": "^1.1|^2",
+                "symfony/stopwatch": "^3.4|^4.0|^5.0"
+            },
+            "suggest": {
+                "symfony/dependency-injection": "",
+                "symfony/http-kernel": ""
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "4.4-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\EventDispatcher\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony EventDispatcher Component",
+            "homepage": "https://symfony.com",
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-18T14:07:46+00:00"
+        },
+        {
+            "name": "symfony/event-dispatcher-contracts",
+            "version": "v1.1.9",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/event-dispatcher-contracts.git",
+                "reference": "84e23fdcd2517bf37aecbd16967e83f0caee25a7"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/84e23fdcd2517bf37aecbd16967e83f0caee25a7",
+                "reference": "84e23fdcd2517bf37aecbd16967e83f0caee25a7",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.1.3"
+            },
+            "suggest": {
+                "psr/event-dispatcher": "",
+                "symfony/event-dispatcher-implementation": ""
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.1-dev"
+                },
+                "thanks": {
+                    "name": "symfony/contracts",
+                    "url": "https://github.com/symfony/contracts"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Contracts\\EventDispatcher\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Generic abstractions related to dispatching event",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "abstractions",
+                "contracts",
+                "decoupling",
+                "interfaces",
+                "interoperability",
+                "standards"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-06T13:19:58+00:00"
+        },
+        {
+            "name": "symfony/finder",
+            "version": "v5.1.7",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/finder.git",
+                "reference": "2c3ba7ad6884e6c4451ce2340e2dc23f6fa3e0d8"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/finder/zipball/2c3ba7ad6884e6c4451ce2340e2dc23f6fa3e0d8",
+                "reference": "2c3ba7ad6884e6c4451ce2340e2dc23f6fa3e0d8",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.2.5"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "5.1-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Finder\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony Finder Component",
+            "homepage": "https://symfony.com",
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
             ],
-            "time": "2016-08-30T16:08:34+00:00"
-        }
-    ],
-    "packages-dev": [
+            "time": "2020-09-02T16:23:27+00:00"
+        },
         {
-            "name": "composer/ca-bundle",
-            "version": "1.1.1",
+            "name": "symfony/polyfill-mbstring",
+            "version": "v1.18.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/composer/ca-bundle.git",
-                "reference": "d2c0a83b7533d6912e8d516756ebd34f893e9169"
+                "url": "https://github.com/symfony/polyfill-mbstring.git",
+                "reference": "a6977d63bf9a0ad4c65cd352709e230876f9904a"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/composer/ca-bundle/zipball/d2c0a83b7533d6912e8d516756ebd34f893e9169",
-                "reference": "d2c0a83b7533d6912e8d516756ebd34f893e9169",
+                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/a6977d63bf9a0ad4c65cd352709e230876f9904a",
+                "reference": "a6977d63bf9a0ad4c65cd352709e230876f9904a",
                 "shasum": ""
             },
             "require": {
-                "ext-openssl": "*",
-                "ext-pcre": "*",
-                "php": "^5.3.2 || ^7.0"
+                "php": ">=5.3.3"
             },
-            "require-dev": {
-                "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5",
-                "psr/log": "^1.0",
-                "symfony/process": "^2.5 || ^3.0 || ^4.0"
+            "suggest": {
+                "ext-mbstring": "For best performance"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.x-dev"
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Composer\\CaBundle\\": "src"
-                }
+                    "Symfony\\Polyfill\\Mbstring\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
@@ -111,75 +631,76 @@
             ],
             "authors": [
                 {
-                    "name": "Jordi Boggiano",
-                    "email": "j.boggiano@seld.be",
-                    "homepage": "http://seld.be"
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
                 }
             ],
-            "description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.",
+            "description": "Symfony polyfill for the Mbstring extension",
+            "homepage": "https://symfony.com",
             "keywords": [
-                "cabundle",
-                "cacert",
-                "certificate",
-                "ssl",
-                "tls"
+                "compatibility",
+                "mbstring",
+                "polyfill",
+                "portable",
+                "shim"
             ],
-            "time": "2018-03-29T19:57:20+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-14T12:35:20+00:00"
         },
         {
-            "name": "composer/composer",
-            "version": "dev-master",
+            "name": "symfony/polyfill-php73",
+            "version": "v1.18.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/composer/composer.git",
-                "reference": "837ad7c14e8ce364296e0d0600d04c415b6e359d"
+                "url": "https://github.com/symfony/polyfill-php73.git",
+                "reference": "fffa1a52a023e782cdcc221d781fe1ec8f87fcca"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/composer/composer/zipball/837ad7c14e8ce364296e0d0600d04c415b6e359d",
-                "reference": "837ad7c14e8ce364296e0d0600d04c415b6e359d",
+                "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fffa1a52a023e782cdcc221d781fe1ec8f87fcca",
+                "reference": "fffa1a52a023e782cdcc221d781fe1ec8f87fcca",
                 "shasum": ""
             },
             "require": {
-                "composer/ca-bundle": "^1.0",
-                "composer/semver": "^1.0",
-                "composer/spdx-licenses": "^1.2",
-                "composer/xdebug-handler": "^1.1",
-                "justinrainbow/json-schema": "^3.0 || ^4.0 || ^5.0",
-                "php": "^5.3.2 || ^7.0",
-                "psr/log": "^1.0",
-                "seld/jsonlint": "^1.4",
-                "seld/phar-utils": "^1.0",
-                "symfony/console": "^2.7 || ^3.0 || ^4.0",
-                "symfony/filesystem": "^2.7 || ^3.0 || ^4.0",
-                "symfony/finder": "^2.7 || ^3.0 || ^4.0",
-                "symfony/process": "^2.7 || ^3.0 || ^4.0"
-            },
-            "conflict": {
-                "symfony/console": "2.8.38"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^4.8.35 || ^5.7",
-                "phpunit/phpunit-mock-objects": "^2.3 || ^3.0"
-            },
-            "suggest": {
-                "ext-openssl": "Enabling the openssl extension allows you to access https URLs for repositories and packages",
-                "ext-zip": "Enabling the zip extension allows you to unzip archives",
-                "ext-zlib": "Allow gzip compression of HTTP requests"
+                "php": ">=5.3.3"
             },
-            "bin": [
-                "bin/composer"
-            ],
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.7-dev"
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Composer\\": "src/Composer"
-                }
+                    "Symfony\\Polyfill\\Php73\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
+                ],
+                "classmap": [
+                    "Resources/stubs"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
@@ -187,56 +708,75 @@
             ],
             "authors": [
                 {
-                    "name": "Nils Adermann",
-                    "email": "naderman@naderman.de",
-                    "homepage": "http://www.naderman.de"
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
                 },
                 {
-                    "name": "Jordi Boggiano",
-                    "email": "j.boggiano@seld.be",
-                    "homepage": "http://seld.be"
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
                 }
             ],
-            "description": "Composer helps you declare, manage and install dependencies of PHP projects, ensuring you have the right stack everywhere.",
-            "homepage": "https://getcomposer.org/",
+            "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions",
+            "homepage": "https://symfony.com",
             "keywords": [
-                "autoload",
-                "dependency",
-                "package"
+                "compatibility",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
             ],
-            "time": "2018-06-07T09:15:18+00:00"
+            "time": "2020-07-14T12:35:20+00:00"
         },
         {
-            "name": "composer/spdx-licenses",
-            "version": "1.4.0",
+            "name": "symfony/polyfill-php80",
+            "version": "v1.18.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/composer/spdx-licenses.git",
-                "reference": "cb17687e9f936acd7e7245ad3890f953770dec1b"
+                "url": "https://github.com/symfony/polyfill-php80.git",
+                "reference": "d87d5766cbf48d72388a9f6b85f280c8ad51f981"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/composer/spdx-licenses/zipball/cb17687e9f936acd7e7245ad3890f953770dec1b",
-                "reference": "cb17687e9f936acd7e7245ad3890f953770dec1b",
+                "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/d87d5766cbf48d72388a9f6b85f280c8ad51f981",
+                "reference": "d87d5766cbf48d72388a9f6b85f280c8ad51f981",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.3.2 || ^7.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5",
-                "phpunit/phpunit-mock-objects": "2.3.0 || ^3.0"
+                "php": ">=7.0.8"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.x-dev"
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Composer\\Spdx\\": "src"
-                }
+                    "Symfony\\Polyfill\\Php80\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
+                ],
+                "classmap": [
+                    "Resources/stubs"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
@@ -244,54 +784,76 @@
             ],
             "authors": [
                 {
-                    "name": "Nils Adermann",
-                    "email": "naderman@naderman.de",
-                    "homepage": "http://www.naderman.de"
+                    "name": "Ion Bazan",
+                    "email": "ion.bazan@gmail.com"
                 },
                 {
-                    "name": "Jordi Boggiano",
-                    "email": "j.boggiano@seld.be",
-                    "homepage": "http://seld.be"
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
                 },
                 {
-                    "name": "Rob Bast",
-                    "email": "rob.bast@gmail.com",
-                    "homepage": "http://robbast.nl"
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
                 }
             ],
-            "description": "SPDX licenses list and validation library.",
+            "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions",
+            "homepage": "https://symfony.com",
             "keywords": [
-                "license",
-                "spdx",
-                "validator"
+                "compatibility",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
             ],
-            "time": "2018-04-30T10:33:04+00:00"
+            "time": "2020-07-14T12:35:20+00:00"
         },
         {
-            "name": "composer/xdebug-handler",
-            "version": "1.1.0",
+            "name": "symfony/service-contracts",
+            "version": "v2.2.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/composer/xdebug-handler.git",
-                "reference": "c919dc6c62e221fc6406f861ea13433c0aa24f08"
+                "url": "https://github.com/symfony/service-contracts.git",
+                "reference": "d15da7ba4957ffb8f1747218be9e1a121fd298a1"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/c919dc6c62e221fc6406f861ea13433c0aa24f08",
-                "reference": "c919dc6c62e221fc6406f861ea13433c0aa24f08",
+                "url": "https://api.github.com/repos/symfony/service-contracts/zipball/d15da7ba4957ffb8f1747218be9e1a121fd298a1",
+                "reference": "d15da7ba4957ffb8f1747218be9e1a121fd298a1",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.3.2 || ^7.0",
-                "psr/log": "^1.0"
+                "php": ">=7.2.5",
+                "psr/container": "^1.0"
             },
-            "require-dev": {
-                "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5"
+            "suggest": {
+                "symfony/service-implementation": ""
             },
             "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.2-dev"
+                },
+                "thanks": {
+                    "name": "symfony/contracts",
+                    "url": "https://github.com/symfony/contracts"
+                }
+            },
             "autoload": {
                 "psr-4": {
-                    "Composer\\XdebugHandler\\": "src"
+                    "Symfony\\Contracts\\Service\\": ""
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -300,45 +862,72 @@
             ],
             "authors": [
                 {
-                    "name": "John Stevenson",
-                    "email": "john-stevenson@blueyonder.co.uk"
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
                 }
             ],
-            "description": "Restarts a process without xdebug.",
+            "description": "Generic abstractions related to writing services",
+            "homepage": "https://symfony.com",
             "keywords": [
-                "Xdebug",
-                "performance"
+                "abstractions",
+                "contracts",
+                "decoupling",
+                "interfaces",
+                "interoperability",
+                "standards"
             ],
-            "time": "2018-04-11T15:42:36+00:00"
-        },
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-07T11:33:47+00:00"
+        }
+    ],
+    "packages-dev": [
         {
             "name": "doctrine/instantiator",
-            "version": "1.0.5",
+            "version": "1.3.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/doctrine/instantiator.git",
-                "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d"
+                "reference": "f350df0268e904597e3bd9c4685c53e0e333feea"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d",
-                "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d",
+                "url": "https://api.github.com/repos/doctrine/instantiator/zipball/f350df0268e904597e3bd9c4685c53e0e333feea",
+                "reference": "f350df0268e904597e3bd9c4685c53e0e333feea",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3,<8.0-DEV"
+                "php": "^7.1 || ^8.0"
             },
             "require-dev": {
-                "athletic/athletic": "~0.1.8",
+                "doctrine/coding-standard": "^6.0",
                 "ext-pdo": "*",
                 "ext-phar": "*",
-                "phpunit/phpunit": "~4.0",
-                "squizlabs/php_codesniffer": "~2.0"
+                "phpbench/phpbench": "^0.13",
+                "phpstan/phpstan-phpunit": "^0.11",
+                "phpstan/phpstan-shim": "^0.11",
+                "phpunit/phpunit": "^7.0"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.0.x-dev"
+                    "dev-master": "1.2.x-dev"
                 }
             },
             "autoload": {
@@ -358,33 +947,66 @@
                 }
             ],
             "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
-            "homepage": "https://github.com/doctrine/instantiator",
+            "homepage": "https://www.doctrine-project.org/projects/instantiator.html",
             "keywords": [
                 "constructor",
                 "instantiate"
             ],
-            "time": "2015-06-14T21:17:01+00:00"
+            "funding": [
+                {
+                    "url": "https://www.doctrine-project.org/sponsorship.html",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://www.patreon.com/phpdoctrine",
+                    "type": "patreon"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-05-29T17:27:14+00:00"
         },
         {
             "name": "g1a/composer-test-scenarios",
-            "version": "2.1.0",
+            "version": "3.2.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/g1a/composer-test-scenarios.git",
-                "reference": "4c2b990712dbcb87a0ab618e46f908c731c3a0bb"
+                "reference": "e7394206d845fd593d325440507fb940bef8cb62"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/g1a/composer-test-scenarios/zipball/4c2b990712dbcb87a0ab618e46f908c731c3a0bb",
-                "reference": "4c2b990712dbcb87a0ab618e46f908c731c3a0bb",
+                "url": "https://api.github.com/repos/g1a/composer-test-scenarios/zipball/e7394206d845fd593d325440507fb940bef8cb62",
+                "reference": "e7394206d845fd593d325440507fb940bef8cb62",
                 "shasum": ""
             },
+            "require": {
+                "composer-plugin-api": "^1.0.0 || ^2.0.0",
+                "php": ">=5.4"
+            },
+            "require-dev": {
+                "composer/composer": "^1.10.6 || ^2.0@rc",
+                "php-coveralls/php-coveralls": "^1.0",
+                "phpunit/phpunit": "^4.8.36|^6",
+                "squizlabs/php_codesniffer": "^3.5"
+            },
             "bin": [
-                "scripts/create-scenario",
-                "scripts/dependency-licenses",
-                "scripts/install-scenario"
+                "scripts/dependency-licenses"
             ],
-            "type": "library",
+            "type": "composer-plugin",
+            "extra": {
+                "class": "ComposerTestScenarios\\Plugin",
+                "branch-alias": {
+                    "dev-main": "3.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "ComposerTestScenarios\\": "src/"
+                }
+            },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
                 "MIT"
@@ -396,42 +1018,70 @@
                 }
             ],
             "description": "Useful scripts for testing multiple sets of Composer dependencies.",
-            "time": "2018-06-10T21:56:28+00:00"
+            "time": "2020-09-28T20:54:35+00:00"
         },
         {
-            "name": "justinrainbow/json-schema",
-            "version": "5.2.7",
+            "name": "guzzle/guzzle",
+            "version": "v3.8.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/justinrainbow/json-schema.git",
-                "reference": "8560d4314577199ba51bf2032f02cd1315587c23"
+                "url": "https://github.com/guzzle/guzzle.git",
+                "reference": "4de0618a01b34aa1c8c33a3f13f396dcd3882eba"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/8560d4314577199ba51bf2032f02cd1315587c23",
-                "reference": "8560d4314577199ba51bf2032f02cd1315587c23",
+                "url": "https://api.github.com/repos/guzzle/guzzle/zipball/4de0618a01b34aa1c8c33a3f13f396dcd3882eba",
+                "reference": "4de0618a01b34aa1c8c33a3f13f396dcd3882eba",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3"
+                "ext-curl": "*",
+                "php": ">=5.3.3",
+                "symfony/event-dispatcher": ">=2.1"
+            },
+            "replace": {
+                "guzzle/batch": "self.version",
+                "guzzle/cache": "self.version",
+                "guzzle/common": "self.version",
+                "guzzle/http": "self.version",
+                "guzzle/inflection": "self.version",
+                "guzzle/iterator": "self.version",
+                "guzzle/log": "self.version",
+                "guzzle/parser": "self.version",
+                "guzzle/plugin": "self.version",
+                "guzzle/plugin-async": "self.version",
+                "guzzle/plugin-backoff": "self.version",
+                "guzzle/plugin-cache": "self.version",
+                "guzzle/plugin-cookie": "self.version",
+                "guzzle/plugin-curlauth": "self.version",
+                "guzzle/plugin-error-response": "self.version",
+                "guzzle/plugin-history": "self.version",
+                "guzzle/plugin-log": "self.version",
+                "guzzle/plugin-md5": "self.version",
+                "guzzle/plugin-mock": "self.version",
+                "guzzle/plugin-oauth": "self.version",
+                "guzzle/service": "self.version",
+                "guzzle/stream": "self.version"
             },
             "require-dev": {
-                "friendsofphp/php-cs-fixer": "^2.1",
-                "json-schema/json-schema-test-suite": "1.2.0",
-                "phpunit/phpunit": "^4.8.35"
+                "doctrine/cache": "*",
+                "monolog/monolog": "1.*",
+                "phpunit/phpunit": "3.7.*",
+                "psr/log": "1.0.*",
+                "symfony/class-loader": "*",
+                "zendframework/zend-cache": "<2.3",
+                "zendframework/zend-log": "<2.3"
             },
-            "bin": [
-                "bin/validate-json"
-            ],
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "5.0.x-dev"
+                    "dev-master": "3.8-dev"
                 }
             },
             "autoload": {
-                "psr-4": {
-                    "JsonSchema\\": "src/JsonSchema/"
+                "psr-0": {
+                    "Guzzle": "src/",
+                    "Guzzle\\Tests": "tests/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -440,51 +1090,53 @@
             ],
             "authors": [
                 {
-                    "name": "Bruno Prieto Reis",
-                    "email": "bruno.p.reis@gmail.com"
+                    "name": "Michael Dowling",
+                    "email": "mtdowling@gmail.com",
+                    "homepage": "https://github.com/mtdowling"
                 },
                 {
-                    "name": "Justin Rainbow",
-                    "email": "justin.rainbow@gmail.com"
-                },
-                {
-                    "name": "Igor Wiedler",
-                    "email": "igor@wiedler.ch"
-                },
-                {
-                    "name": "Robert Schönthal",
-                    "email": "seroscho@googlemail.com"
+                    "name": "Guzzle Community",
+                    "homepage": "https://github.com/guzzle/guzzle/contributors"
                 }
             ],
-            "description": "A library to validate a json schema.",
-            "homepage": "https://github.com/justinrainbow/json-schema",
+            "description": "Guzzle is a PHP HTTP client library and framework for building RESTful web service clients",
+            "homepage": "http://guzzlephp.org/",
             "keywords": [
-                "json",
-                "schema"
-            ],
-            "time": "2018-02-14T22:26:30+00:00"
+                "client",
+                "curl",
+                "framework",
+                "http",
+                "http client",
+                "rest",
+                "web service"
+            ],
+            "abandoned": "guzzlehttp/guzzle",
+            "time": "2014-01-28T22:29:15+00:00"
         },
         {
             "name": "myclabs/deep-copy",
-            "version": "1.7.0",
+            "version": "1.10.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/myclabs/DeepCopy.git",
-                "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e"
+                "reference": "969b211f9a51aa1f6c01d1d2aef56d3bd91598e5"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e",
-                "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e",
+                "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/969b211f9a51aa1f6c01d1d2aef56d3bd91598e5",
+                "reference": "969b211f9a51aa1f6c01d1d2aef56d3bd91598e5",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.6 || ^7.0"
+                "php": "^7.1 || ^8.0"
+            },
+            "replace": {
+                "myclabs/deep-copy": "self.version"
             },
             "require-dev": {
                 "doctrine/collections": "^1.0",
                 "doctrine/common": "^2.6",
-                "phpunit/phpunit": "^4.1"
+                "phpunit/phpunit": "^7.1"
             },
             "type": "library",
             "autoload": {
@@ -507,7 +1159,13 @@
                 "object",
                 "object graph"
             ],
-            "time": "2017-10-19T19:58:43+00:00"
+            "funding": [
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-06-29T13:22:24+00:00"
         },
         {
             "name": "phar-io/manifest",
@@ -612,36 +1270,92 @@
             "time": "2017-03-05T17:38:23+00:00"
         },
         {
-            "name": "phpdocumentor/reflection-common",
-            "version": "1.0.1",
+            "name": "php-coveralls/php-coveralls",
+            "version": "v1.1.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/phpDocumentor/ReflectionCommon.git",
-                "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6"
+                "url": "https://github.com/php-coveralls/php-coveralls.git",
+                "reference": "37f8f83fe22224eb9d9c6d593cdeb33eedd2a9ad"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6",
-                "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6",
+                "url": "https://api.github.com/repos/php-coveralls/php-coveralls/zipball/37f8f83fe22224eb9d9c6d593cdeb33eedd2a9ad",
+                "reference": "37f8f83fe22224eb9d9c6d593cdeb33eedd2a9ad",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.5"
+                "ext-json": "*",
+                "ext-simplexml": "*",
+                "guzzle/guzzle": "^2.8 || ^3.0",
+                "php": "^5.3.3 || ^7.0",
+                "psr/log": "^1.0",
+                "symfony/config": "^2.1 || ^3.0 || ^4.0",
+                "symfony/console": "^2.1 || ^3.0 || ^4.0",
+                "symfony/stopwatch": "^2.0 || ^3.0 || ^4.0",
+                "symfony/yaml": "^2.0 || ^3.0 || ^4.0"
             },
             "require-dev": {
-                "phpunit/phpunit": "^4.6"
+                "phpunit/phpunit": "^4.8.35 || ^5.4.3 || ^6.0"
+            },
+            "suggest": {
+                "symfony/http-kernel": "Allows Symfony integration"
+            },
+            "bin": [
+                "bin/coveralls"
+            ],
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Satooshi\\": "src/Satooshi/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Kitamura Satoshi",
+                    "email": "with.no.parachute@gmail.com",
+                    "homepage": "https://www.facebook.com/satooshi.jp"
+                }
+            ],
+            "description": "PHP client library for Coveralls API",
+            "homepage": "https://github.com/php-coveralls/php-coveralls",
+            "keywords": [
+                "ci",
+                "coverage",
+                "github",
+                "test"
+            ],
+            "time": "2017-12-06T23:17:56+00:00"
+        },
+        {
+            "name": "phpdocumentor/reflection-common",
+            "version": "2.2.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/phpDocumentor/ReflectionCommon.git",
+                "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b",
+                "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.2 || ^8.0"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.0.x-dev"
+                    "dev-2.x": "2.x-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "phpDocumentor\\Reflection\\": [
-                        "src"
-                    ]
+                    "phpDocumentor\\Reflection\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -663,44 +1377,41 @@
                 "reflection",
                 "static analysis"
             ],
-            "time": "2017-09-11T18:02:19+00:00"
+            "time": "2020-06-27T09:03:43+00:00"
         },
         {
             "name": "phpdocumentor/reflection-docblock",
-            "version": "4.3.0",
+            "version": "5.2.2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
-                "reference": "94fd0001232e47129dd3504189fa1c7225010d08"
+                "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/94fd0001232e47129dd3504189fa1c7225010d08",
-                "reference": "94fd0001232e47129dd3504189fa1c7225010d08",
+                "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/069a785b2141f5bcf49f3e353548dc1cce6df556",
+                "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.0",
-                "phpdocumentor/reflection-common": "^1.0.0",
-                "phpdocumentor/type-resolver": "^0.4.0",
-                "webmozart/assert": "^1.0"
+                "ext-filter": "*",
+                "php": "^7.2 || ^8.0",
+                "phpdocumentor/reflection-common": "^2.2",
+                "phpdocumentor/type-resolver": "^1.3",
+                "webmozart/assert": "^1.9.1"
             },
             "require-dev": {
-                "doctrine/instantiator": "~1.0.5",
-                "mockery/mockery": "^1.0",
-                "phpunit/phpunit": "^6.4"
+                "mockery/mockery": "~1.3.2"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "4.x-dev"
+                    "dev-master": "5.x-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "phpDocumentor\\Reflection\\": [
-                        "src/"
-                    ]
+                    "phpDocumentor\\Reflection\\": "src"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -711,44 +1422,45 @@
                 {
                     "name": "Mike van Riel",
                     "email": "me@mikevanriel.com"
+                },
+                {
+                    "name": "Jaap van Otterdijk",
+                    "email": "account@ijaap.nl"
                 }
             ],
             "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
-            "time": "2017-11-30T07:14:17+00:00"
+            "time": "2020-09-03T19:13:55+00:00"
         },
         {
             "name": "phpdocumentor/type-resolver",
-            "version": "0.4.0",
+            "version": "1.4.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpDocumentor/TypeResolver.git",
-                "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7"
+                "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7",
-                "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7",
+                "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0",
+                "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.5 || ^7.0",
-                "phpdocumentor/reflection-common": "^1.0"
+                "php": "^7.2 || ^8.0",
+                "phpdocumentor/reflection-common": "^2.0"
             },
             "require-dev": {
-                "mockery/mockery": "^0.9.4",
-                "phpunit/phpunit": "^5.2||^4.8.24"
+                "ext-tokenizer": "*"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.0.x-dev"
+                    "dev-1.x": "1.x-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "phpDocumentor\\Reflection\\": [
-                        "src/"
-                    ]
+                    "phpDocumentor\\Reflection\\": "src"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -761,42 +1473,43 @@
                     "email": "me@mikevanriel.com"
                 }
             ],
-            "time": "2017-07-14T14:27:02+00:00"
+            "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
+            "time": "2020-09-17T18:55:26+00:00"
         },
         {
             "name": "phpspec/prophecy",
-            "version": "1.7.6",
+            "version": "v1.10.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpspec/prophecy.git",
-                "reference": "33a7e3c4fda54e912ff6338c48823bd5c0f0b712"
+                "reference": "451c3cd1418cf640de218914901e51b064abb093"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpspec/prophecy/zipball/33a7e3c4fda54e912ff6338c48823bd5c0f0b712",
-                "reference": "33a7e3c4fda54e912ff6338c48823bd5c0f0b712",
+                "url": "https://api.github.com/repos/phpspec/prophecy/zipball/451c3cd1418cf640de218914901e51b064abb093",
+                "reference": "451c3cd1418cf640de218914901e51b064abb093",
                 "shasum": ""
             },
             "require": {
                 "doctrine/instantiator": "^1.0.2",
                 "php": "^5.3|^7.0",
-                "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0",
-                "sebastian/comparator": "^1.1|^2.0|^3.0",
-                "sebastian/recursion-context": "^1.0|^2.0|^3.0"
+                "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0",
+                "sebastian/comparator": "^1.2.3|^2.0|^3.0|^4.0",
+                "sebastian/recursion-context": "^1.0|^2.0|^3.0|^4.0"
             },
             "require-dev": {
-                "phpspec/phpspec": "^2.5|^3.2",
-                "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5"
+                "phpspec/phpspec": "^2.5 || ^3.2",
+                "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.7.x-dev"
+                    "dev-master": "1.10.x-dev"
                 }
             },
             "autoload": {
-                "psr-0": {
-                    "Prophecy\\": "src/"
+                "psr-4": {
+                    "Prophecy\\": "src/Prophecy"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -824,7 +1537,7 @@
                 "spy",
                 "stub"
             ],
-            "time": "2018-04-18T13:57:24+00:00"
+            "time": "2020-03-05T15:02:03+00:00"
         },
         {
             "name": "phpunit/php-code-coverage",
@@ -1073,20 +1786,21 @@
             "keywords": [
                 "tokenizer"
             ],
+            "abandoned": true,
             "time": "2017-11-27T05:48:46+00:00"
         },
         {
             "name": "phpunit/phpunit",
-            "version": "6.5.8",
+            "version": "6.5.14",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/phpunit.git",
-                "reference": "4f21a3c6b97c42952fd5c2837bb354ec0199b97b"
+                "reference": "bac23fe7ff13dbdb461481f706f0e9fe746334b7"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/4f21a3c6b97c42952fd5c2837bb354ec0199b97b",
-                "reference": "4f21a3c6b97c42952fd5c2837bb354ec0199b97b",
+                "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/bac23fe7ff13dbdb461481f706f0e9fe746334b7",
+                "reference": "bac23fe7ff13dbdb461481f706f0e9fe746334b7",
                 "shasum": ""
             },
             "require": {
@@ -1104,7 +1818,7 @@
                 "phpunit/php-file-iterator": "^1.4.3",
                 "phpunit/php-text-template": "^1.2.1",
                 "phpunit/php-timer": "^1.0.9",
-                "phpunit/phpunit-mock-objects": "^5.0.5",
+                "phpunit/phpunit-mock-objects": "^5.0.9",
                 "sebastian/comparator": "^2.1",
                 "sebastian/diff": "^2.0",
                 "sebastian/environment": "^3.1",
@@ -1157,20 +1871,20 @@
                 "testing",
                 "xunit"
             ],
-            "time": "2018-04-10T11:38:34+00:00"
+            "time": "2019-02-01T05:22:47+00:00"
         },
         {
             "name": "phpunit/phpunit-mock-objects",
-            "version": "5.0.7",
+            "version": "5.0.10",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git",
-                "reference": "3eaf040f20154d27d6da59ca2c6e28ac8fd56dce"
+                "reference": "cd1cf05c553ecfec36b170070573e540b67d3f1f"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/3eaf040f20154d27d6da59ca2c6e28ac8fd56dce",
-                "reference": "3eaf040f20154d27d6da59ca2c6e28ac8fd56dce",
+                "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/cd1cf05c553ecfec36b170070573e540b67d3f1f",
+                "reference": "cd1cf05c553ecfec36b170070573e540b67d3f1f",
                 "shasum": ""
             },
             "require": {
@@ -1183,7 +1897,7 @@
                 "phpunit/phpunit": "<6.0"
             },
             "require-dev": {
-                "phpunit/phpunit": "^6.5"
+                "phpunit/phpunit": "^6.5.11"
             },
             "suggest": {
                 "ext-soap": "*"
@@ -1195,75 +1909,29 @@
                 }
             },
             "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de",
-                    "role": "lead"
-                }
-            ],
-            "description": "Mock Object library for PHPUnit",
-            "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/",
-            "keywords": [
-                "mock",
-                "xunit"
-            ],
-            "time": "2018-05-29T13:50:43+00:00"
-        },
-        {
-            "name": "psr/log",
-            "version": "1.0.2",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/php-fig/log.git",
-                "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d",
-                "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.0.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Psr\\Log\\": "Psr/Log/"
-                }
+                "classmap": [
+                    "src/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "MIT"
+                "BSD-3-Clause"
             ],
             "authors": [
                 {
-                    "name": "PHP-FIG",
-                    "homepage": "http://www.php-fig.org/"
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de",
+                    "role": "lead"
                 }
             ],
-            "description": "Common interface for logging libraries",
-            "homepage": "https://github.com/php-fig/log",
+            "description": "Mock Object library for PHPUnit",
+            "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/",
             "keywords": [
-                "log",
-                "psr",
-                "psr-3"
+                "mock",
+                "xunit"
             ],
-            "time": "2016-10-10T12:19:37+00:00"
+            "abandoned": true,
+            "time": "2018-08-09T05:50:03+00:00"
         },
         {
             "name": "sebastian/code-unit-reverse-lookup",
@@ -1478,16 +2146,16 @@
         },
         {
             "name": "sebastian/exporter",
-            "version": "3.1.0",
+            "version": "3.1.2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/exporter.git",
-                "reference": "234199f4528de6d12aaa58b612e98f7d36adb937"
+                "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/234199f4528de6d12aaa58b612e98f7d36adb937",
-                "reference": "234199f4528de6d12aaa58b612e98f7d36adb937",
+                "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/68609e1261d215ea5b21b7987539cbfbe156ec3e",
+                "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e",
                 "shasum": ""
             },
             "require": {
@@ -1514,6 +2182,10 @@
                 "BSD-3-Clause"
             ],
             "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                },
                 {
                     "name": "Jeff Welch",
                     "email": "whatthejeff@gmail.com"
@@ -1522,17 +2194,13 @@
                     "name": "Volker Dusch",
                     "email": "github@wallbash.com"
                 },
-                {
-                    "name": "Bernhard Schussek",
-                    "email": "bschussek@2bepublished.at"
-                },
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de"
-                },
                 {
                     "name": "Adam Harvey",
                     "email": "aharvey@php.net"
+                },
+                {
+                    "name": "Bernhard Schussek",
+                    "email": "bschussek@gmail.com"
                 }
             ],
             "description": "Provides the functionality to export PHP variables for visualization",
@@ -1541,7 +2209,7 @@
                 "export",
                 "exporter"
             ],
-            "time": "2017-04-03T13:19:02+00:00"
+            "time": "2019-09-14T09:02:43+00:00"
         },
         {
             "name": "sebastian/global-state",
@@ -1824,111 +2492,18 @@
             "homepage": "https://github.com/sebastianbergmann/version",
             "time": "2016-10-03T07:35:21+00:00"
         },
-        {
-            "name": "seld/jsonlint",
-            "version": "1.7.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/Seldaek/jsonlint.git",
-                "reference": "d15f59a67ff805a44c50ea0516d2341740f81a38"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/d15f59a67ff805a44c50ea0516d2341740f81a38",
-                "reference": "d15f59a67ff805a44c50ea0516d2341740f81a38",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^5.3 || ^7.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0"
-            },
-            "bin": [
-                "bin/jsonlint"
-            ],
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Seld\\JsonLint\\": "src/Seld/JsonLint/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Jordi Boggiano",
-                    "email": "j.boggiano@seld.be",
-                    "homepage": "http://seld.be"
-                }
-            ],
-            "description": "JSON Linter",
-            "keywords": [
-                "json",
-                "linter",
-                "parser",
-                "validator"
-            ],
-            "time": "2018-01-24T12:46:19+00:00"
-        },
-        {
-            "name": "seld/phar-utils",
-            "version": "1.0.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/Seldaek/phar-utils.git",
-                "reference": "7009b5139491975ef6486545a39f3e6dad5ac30a"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/Seldaek/phar-utils/zipball/7009b5139491975ef6486545a39f3e6dad5ac30a",
-                "reference": "7009b5139491975ef6486545a39f3e6dad5ac30a",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Seld\\PharUtils\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Jordi Boggiano",
-                    "email": "j.boggiano@seld.be"
-                }
-            ],
-            "description": "PHAR file format utilities, for when PHP phars you up",
-            "keywords": [
-                "phra"
-            ],
-            "time": "2015-10-13T18:44:15+00:00"
-        },
         {
             "name": "squizlabs/php_codesniffer",
-            "version": "2.9.1",
+            "version": "2.9.2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/squizlabs/PHP_CodeSniffer.git",
-                "reference": "dcbed1074f8244661eecddfc2a675430d8d33f62"
+                "reference": "2acf168de78487db620ab4bc524135a13cfe6745"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/dcbed1074f8244661eecddfc2a675430d8d33f62",
-                "reference": "dcbed1074f8244661eecddfc2a675430d8d33f62",
+                "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/2acf168de78487db620ab4bc524135a13cfe6745",
+                "reference": "2acf168de78487db620ab4bc524135a13cfe6745",
                 "shasum": ""
             },
             "require": {
@@ -1993,54 +2568,49 @@
                 "phpcs",
                 "standards"
             ],
-            "time": "2017-05-22T02:43:20+00:00"
+            "time": "2018-11-07T22:31:41+00:00"
         },
         {
-            "name": "symfony/console",
-            "version": "v3.4.11",
+            "name": "symfony/config",
+            "version": "v4.4.15",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/console.git",
-                "reference": "36f83f642443c46f3cf751d4d2ee5d047d757a27"
+                "url": "https://github.com/symfony/config.git",
+                "reference": "7c5a1002178a612787c291a4f515f87b19176b61"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/console/zipball/36f83f642443c46f3cf751d4d2ee5d047d757a27",
-                "reference": "36f83f642443c46f3cf751d4d2ee5d047d757a27",
+                "url": "https://api.github.com/repos/symfony/config/zipball/7c5a1002178a612787c291a4f515f87b19176b61",
+                "reference": "7c5a1002178a612787c291a4f515f87b19176b61",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.5.9|>=7.0.8",
-                "symfony/debug": "~2.8|~3.0|~4.0",
-                "symfony/polyfill-mbstring": "~1.0"
+                "php": ">=7.1.3",
+                "symfony/filesystem": "^3.4|^4.0|^5.0",
+                "symfony/polyfill-ctype": "~1.8"
             },
             "conflict": {
-                "symfony/dependency-injection": "<3.4",
-                "symfony/process": "<3.3"
+                "symfony/finder": "<3.4"
             },
             "require-dev": {
-                "psr/log": "~1.0",
-                "symfony/config": "~3.3|~4.0",
-                "symfony/dependency-injection": "~3.4|~4.0",
-                "symfony/event-dispatcher": "~2.8|~3.0|~4.0",
-                "symfony/lock": "~3.4|~4.0",
-                "symfony/process": "~3.3|~4.0"
+                "symfony/event-dispatcher": "^3.4|^4.0|^5.0",
+                "symfony/finder": "^3.4|^4.0|^5.0",
+                "symfony/messenger": "^4.1|^5.0",
+                "symfony/service-contracts": "^1.1|^2",
+                "symfony/yaml": "^3.4|^4.0|^5.0"
             },
             "suggest": {
-                "psr/log-implementation": "For using the console logger",
-                "symfony/event-dispatcher": "",
-                "symfony/lock": "",
-                "symfony/process": ""
+                "symfony/yaml": "To use the yaml reference dumper"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "3.4-dev"
+                    "dev-master": "4.4-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Symfony\\Component\\Console\\": ""
+                    "Symfony\\Component\\Config\\": ""
                 },
                 "exclude-from-classmap": [
                     "/Tests/"
@@ -2060,88 +2630,46 @@
                     "homepage": "https://symfony.com/contributors"
                 }
             ],
-            "description": "Symfony Console Component",
+            "description": "Symfony Config Component",
             "homepage": "https://symfony.com",
-            "time": "2018-05-16T08:49:21+00:00"
-        },
-        {
-            "name": "symfony/debug",
-            "version": "v3.4.11",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/debug.git",
-                "reference": "b28fd73fefbac341f673f5efd707d539d6a19f68"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/debug/zipball/b28fd73fefbac341f673f5efd707d539d6a19f68",
-                "reference": "b28fd73fefbac341f673f5efd707d539d6a19f68",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^5.5.9|>=7.0.8",
-                "psr/log": "~1.0"
-            },
-            "conflict": {
-                "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2"
-            },
-            "require-dev": {
-                "symfony/http-kernel": "~2.8|~3.0|~4.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.4-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\Debug\\": ""
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
                 },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
                 {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
                 },
                 {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
                 }
             ],
-            "description": "Symfony Debug Component",
-            "homepage": "https://symfony.com",
-            "time": "2018-05-16T14:03:39+00:00"
+            "time": "2020-10-02T07:34:48+00:00"
         },
         {
             "name": "symfony/filesystem",
-            "version": "v3.4.11",
+            "version": "v5.1.7",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/filesystem.git",
-                "reference": "8e03ca3fa52a0f56b87506f38cf7bd3f9442b3a0"
+                "reference": "1a8697545a8d87b9f2f6b1d32414199cc5e20aae"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/filesystem/zipball/8e03ca3fa52a0f56b87506f38cf7bd3f9442b3a0",
-                "reference": "8e03ca3fa52a0f56b87506f38cf7bd3f9442b3a0",
+                "url": "https://api.github.com/repos/symfony/filesystem/zipball/1a8697545a8d87b9f2f6b1d32414199cc5e20aae",
+                "reference": "1a8697545a8d87b9f2f6b1d32414199cc5e20aae",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.5.9|>=7.0.8",
+                "php": ">=7.2.5",
                 "symfony/polyfill-ctype": "~1.8"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "3.4-dev"
+                    "dev-master": "5.1-dev"
                 }
             },
             "autoload": {
@@ -2168,78 +2696,50 @@
             ],
             "description": "Symfony Filesystem Component",
             "homepage": "https://symfony.com",
-            "time": "2018-05-16T08:49:21+00:00"
-        },
-        {
-            "name": "symfony/finder",
-            "version": "v3.4.11",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/finder.git",
-                "reference": "472a92f3df8b247b49ae364275fb32943b9656c6"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/finder/zipball/472a92f3df8b247b49ae364275fb32943b9656c6",
-                "reference": "472a92f3df8b247b49ae364275fb32943b9656c6",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^5.5.9|>=7.0.8"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.4-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\Finder\\": ""
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
                 },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
                 {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
                 },
                 {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
                 }
             ],
-            "description": "Symfony Finder Component",
-            "homepage": "https://symfony.com",
-            "time": "2018-05-16T08:49:21+00:00"
+            "time": "2020-09-27T14:02:37+00:00"
         },
         {
             "name": "symfony/polyfill-ctype",
-            "version": "v1.8.0",
+            "version": "v1.18.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-ctype.git",
-                "reference": "7cc359f1b7b80fc25ed7796be7d96adc9b354bae"
+                "reference": "1c302646f6efc070cd46856e600e5e0684d6b454"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/7cc359f1b7b80fc25ed7796be7d96adc9b354bae",
-                "reference": "7cc359f1b7b80fc25ed7796be7d96adc9b354bae",
+                "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/1c302646f6efc070cd46856e600e5e0684d6b454",
+                "reference": "1c302646f6efc070cd46856e600e5e0684d6b454",
                 "shasum": ""
             },
             "require": {
                 "php": ">=5.3.3"
             },
+            "suggest": {
+                "ext-ctype": "For best performance"
+            },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.8-dev"
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
                 }
             },
             "autoload": {
@@ -2255,13 +2755,13 @@
                 "MIT"
             ],
             "authors": [
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                },
                 {
                     "name": "Gert de Pagter",
                     "email": "BackEndTea@gmail.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
                 }
             ],
             "description": "Symfony polyfill for ctype functions",
@@ -2272,40 +2772,52 @@
                 "polyfill",
                 "portable"
             ],
-            "time": "2018-04-30T19:57:29+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-14T12:35:20+00:00"
         },
         {
-            "name": "symfony/polyfill-mbstring",
-            "version": "v1.8.0",
+            "name": "symfony/stopwatch",
+            "version": "v4.4.15",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/polyfill-mbstring.git",
-                "reference": "3296adf6a6454a050679cde90f95350ad604b171"
+                "url": "https://github.com/symfony/stopwatch.git",
+                "reference": "6f89e19772cf61b3c65bab329fe0e318259fbd91"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/3296adf6a6454a050679cde90f95350ad604b171",
-                "reference": "3296adf6a6454a050679cde90f95350ad604b171",
+                "url": "https://api.github.com/repos/symfony/stopwatch/zipball/6f89e19772cf61b3c65bab329fe0e318259fbd91",
+                "reference": "6f89e19772cf61b3c65bab329fe0e318259fbd91",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3"
-            },
-            "suggest": {
-                "ext-mbstring": "For best performance"
+                "php": ">=7.1.3",
+                "symfony/service-contracts": "^1.0|^2"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.8-dev"
+                    "dev-master": "4.4-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Symfony\\Polyfill\\Mbstring\\": ""
+                    "Symfony\\Component\\Stopwatch\\": ""
                 },
-                "files": [
-                    "bootstrap.php"
+                "exclude-from-classmap": [
+                    "/Tests/"
                 ]
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -2314,51 +2826,68 @@
             ],
             "authors": [
                 {
-                    "name": "Nicolas Grekas",
-                    "email": "p@tchwork.com"
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
                 },
                 {
                     "name": "Symfony Community",
                     "homepage": "https://symfony.com/contributors"
                 }
             ],
-            "description": "Symfony polyfill for the Mbstring extension",
+            "description": "Symfony Stopwatch Component",
             "homepage": "https://symfony.com",
-            "keywords": [
-                "compatibility",
-                "mbstring",
-                "polyfill",
-                "portable",
-                "shim"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
             ],
-            "time": "2018-04-26T10:06:28+00:00"
+            "time": "2020-09-02T16:08:58+00:00"
         },
         {
-            "name": "symfony/process",
-            "version": "v3.4.11",
+            "name": "symfony/yaml",
+            "version": "v4.4.15",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/process.git",
-                "reference": "4cbf2db9abcb01486a21b7a059e03a62fae63187"
+                "url": "https://github.com/symfony/yaml.git",
+                "reference": "c7885964b1eceb70b0981556d0a9b01d2d97c8d1"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/process/zipball/4cbf2db9abcb01486a21b7a059e03a62fae63187",
-                "reference": "4cbf2db9abcb01486a21b7a059e03a62fae63187",
+                "url": "https://api.github.com/repos/symfony/yaml/zipball/c7885964b1eceb70b0981556d0a9b01d2d97c8d1",
+                "reference": "c7885964b1eceb70b0981556d0a9b01d2d97c8d1",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.5.9|>=7.0.8"
+                "php": ">=7.1.3",
+                "symfony/polyfill-ctype": "~1.8"
+            },
+            "conflict": {
+                "symfony/console": "<3.4"
+            },
+            "require-dev": {
+                "symfony/console": "^3.4|^4.0|^5.0"
+            },
+            "suggest": {
+                "symfony/console": "For validating YAML files using the lint command"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "3.4-dev"
+                    "dev-master": "4.4-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Symfony\\Component\\Process\\": ""
+                    "Symfony\\Component\\Yaml\\": ""
                 },
                 "exclude-from-classmap": [
                     "/Tests/"
@@ -2378,29 +2907,43 @@
                     "homepage": "https://symfony.com/contributors"
                 }
             ],
-            "description": "Symfony Process Component",
+            "description": "Symfony Yaml Component",
             "homepage": "https://symfony.com",
-            "time": "2018-05-16T08:49:21+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-27T03:36:23+00:00"
         },
         {
             "name": "theseer/tokenizer",
-            "version": "1.1.0",
+            "version": "1.2.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/theseer/tokenizer.git",
-                "reference": "cb2f008f3f05af2893a87208fe6a6c4985483f8b"
+                "reference": "75a63c33a8577608444246075ea0af0d052e452a"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/theseer/tokenizer/zipball/cb2f008f3f05af2893a87208fe6a6c4985483f8b",
-                "reference": "cb2f008f3f05af2893a87208fe6a6c4985483f8b",
+                "url": "https://api.github.com/repos/theseer/tokenizer/zipball/75a63c33a8577608444246075ea0af0d052e452a",
+                "reference": "75a63c33a8577608444246075ea0af0d052e452a",
                 "shasum": ""
             },
             "require": {
                 "ext-dom": "*",
                 "ext-tokenizer": "*",
                 "ext-xmlwriter": "*",
-                "php": "^7.0"
+                "php": "^7.2 || ^8.0"
             },
             "type": "library",
             "autoload": {
@@ -2420,35 +2963,40 @@
                 }
             ],
             "description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
-            "time": "2017-04-07T12:08:54+00:00"
+            "funding": [
+                {
+                    "url": "https://github.com/theseer",
+                    "type": "github"
+                }
+            ],
+            "time": "2020-07-12T23:59:07+00:00"
         },
         {
             "name": "webmozart/assert",
-            "version": "1.3.0",
+            "version": "1.9.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/webmozart/assert.git",
-                "reference": "0df1908962e7a3071564e857d86874dad1ef204a"
+                "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/webmozart/assert/zipball/0df1908962e7a3071564e857d86874dad1ef204a",
-                "reference": "0df1908962e7a3071564e857d86874dad1ef204a",
+                "url": "https://api.github.com/repos/webmozart/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389",
+                "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.3.3 || ^7.0"
+                "php": "^5.3.3 || ^7.0 || ^8.0",
+                "symfony/polyfill-ctype": "^1.8"
+            },
+            "conflict": {
+                "phpstan/phpstan": "<0.12.20",
+                "vimeo/psalm": "<3.9.1"
             },
             "require-dev": {
-                "phpunit/phpunit": "^4.6",
-                "sebastian/version": "^1.0.1"
+                "phpunit/phpunit": "^4.8.36 || ^7.5.13"
             },
             "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.3-dev"
-                }
-            },
             "autoload": {
                 "psr-4": {
                     "Webmozart\\Assert\\": "src/"
@@ -2470,14 +3018,12 @@
                 "check",
                 "validate"
             ],
-            "time": "2018-01-29T19:49:41+00:00"
+            "time": "2020-07-08T17:02:28+00:00"
         }
     ],
     "aliases": [],
     "minimum-stability": "stable",
-    "stability-flags": {
-        "composer/composer": 20
-    },
+    "stability-flags": [],
     "prefer-stable": false,
     "prefer-lowest": false,
     "platform": {
@@ -2485,6 +3031,7 @@
     },
     "platform-dev": [],
     "platform-overrides": {
-        "php": "7.0.8"
-    }
+        "php": "7.2.5"
+    },
+    "plugin-api-version": "1.1.0"
 }
diff --git a/vendor/consolidation/annotated-command/.scenarios.lock/install b/vendor/consolidation/annotated-command/.scenarios.lock/install
old mode 100644
new mode 100755
index 16c69e107cce7f71e33e04207254d005200f9fd4..4d8a777705dd1ce798857719d69a989d29271a6f
--- a/vendor/consolidation/annotated-command/.scenarios.lock/install
+++ b/vendor/consolidation/annotated-command/.scenarios.lock/install
@@ -4,16 +4,16 @@ SCENARIO=$1
 DEPENDENCIES=${2-install}
 
 # Convert the aliases 'highest', 'lowest' and 'lock' to
-# the corresponding composer command to run.
+# the corresponding composer update command to run.
 case $DEPENDENCIES in
   highest)
-    DEPENDENCIES=update
+    UPDATE_COMMAND=update
     ;;
   lowest)
-    DEPENDENCIES='update --prefer-lowest'
+    UPDATE_COMMAND='update --prefer-lowest'
     ;;
   lock|default|"")
-    DEPENDENCIES=install
+    UPDATE_COMMAND=''
     ;;
 esac
 
@@ -48,7 +48,11 @@ echo
 set -ex
 
 composer -n validate --working-dir=$dir --no-check-all --ansi
-composer -n --working-dir=$dir ${DEPENDENCIES} --prefer-dist --no-scripts
+
+if [ ! -z "$UPDATE_COMMAND" ] ; then
+  composer -n --working-dir=$dir ${UPDATE_COMMAND} --prefer-dist --no-scripts
+fi
+composer -n --working-dir=$dir install --prefer-dist
 
 # If called from a CI context, print out some extra information about
 # what we just installed.
diff --git a/vendor/consolidation/annotated-command/.scenarios.lock/phpunit4/composer.json b/vendor/consolidation/annotated-command/.scenarios.lock/phpunit4/composer.json
index 13a0f7a03ab0f012b2f828dc9ae49705f4e62708..5b5e3597c5bcd0e1f5ab2c9632be101d35adeaab 100644
--- a/vendor/consolidation/annotated-command/.scenarios.lock/phpunit4/composer.json
+++ b/vendor/consolidation/annotated-command/.scenarios.lock/phpunit4/composer.json
@@ -20,11 +20,11 @@
     },
     "require": {
         "php": ">=5.4.5",
-        "consolidation/output-formatters": "^3.4",
+        "consolidation/output-formatters": "^3.5.1",
         "psr/log": "^1",
         "symfony/console": "^2.8|^3|^4",
         "symfony/event-dispatcher": "^2.5|^3|^4",
-        "symfony/finder": "^2.5|^3|^4"
+        "symfony/finder": "^2.5|^3|^4|^5"
     },
     "require-dev": {
         "phpunit/phpunit": "^4.8.36",
diff --git a/vendor/consolidation/annotated-command/.scenarios.lock/phpunit4/composer.lock b/vendor/consolidation/annotated-command/.scenarios.lock/phpunit4/composer.lock
index b4dfe0de3710e632b0f448b040ddf2cc835b1052..0e162a07826f7561cfdaef67090283d885e88d7d 100644
--- a/vendor/consolidation/annotated-command/.scenarios.lock/phpunit4/composer.lock
+++ b/vendor/consolidation/annotated-command/.scenarios.lock/phpunit4/composer.lock
@@ -4,34 +4,33 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "This file is @generated automatically"
     ],
-    "content-hash": "3bc1df70645d80d8cf1dc2fce04595ed",
+    "content-hash": "d69dc077ee58063a1087d070cb72acc1",
     "packages": [
         {
             "name": "consolidation/output-formatters",
-            "version": "3.4.0",
+            "version": "3.5.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/consolidation/output-formatters.git",
-                "reference": "a942680232094c4a5b21c0b7e54c20cce623ae19"
+                "reference": "0d38f13051ef05c223a2bb8e962d668e24785196"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/consolidation/output-formatters/zipball/a942680232094c4a5b21c0b7e54c20cce623ae19",
-                "reference": "a942680232094c4a5b21c0b7e54c20cce623ae19",
+                "url": "https://api.github.com/repos/consolidation/output-formatters/zipball/0d38f13051ef05c223a2bb8e962d668e24785196",
+                "reference": "0d38f13051ef05c223a2bb8e962d668e24785196",
                 "shasum": ""
             },
             "require": {
                 "dflydev/dot-access-data": "^1.1.0",
                 "php": ">=5.4.0",
                 "symfony/console": "^2.8|^3|^4",
-                "symfony/finder": "^2.5|^3|^4"
+                "symfony/finder": "^2.5|^3|^4|^5"
             },
             "require-dev": {
-                "g1a/composer-test-scenarios": "^2",
+                "g1a/composer-test-scenarios": "^3",
+                "php-coveralls/php-coveralls": "^1",
                 "phpunit/phpunit": "^5.7.27",
-                "satooshi/php-coveralls": "^2",
                 "squizlabs/php_codesniffer": "^2.7",
-                "symfony/console": "3.2.3",
                 "symfony/var-dumper": "^2.8|^3|^4",
                 "victorjonsson/markdowndocs": "^1.3"
             },
@@ -40,6 +39,62 @@
             },
             "type": "library",
             "extra": {
+                "scenarios": {
+                    "finder5": {
+                        "require": {
+                            "symfony/finder": "^5"
+                        },
+                        "config": {
+                            "platform": {
+                                "php": "7.2.5"
+                            }
+                        }
+                    },
+                    "symfony4": {
+                        "require": {
+                            "symfony/console": "^4.0"
+                        },
+                        "require-dev": {
+                            "phpunit/phpunit": "^6"
+                        },
+                        "config": {
+                            "platform": {
+                                "php": "7.1.3"
+                            }
+                        }
+                    },
+                    "symfony3": {
+                        "require": {
+                            "symfony/console": "^3.4",
+                            "symfony/finder": "^3.4",
+                            "symfony/var-dumper": "^3.4"
+                        },
+                        "config": {
+                            "platform": {
+                                "php": "5.6.32"
+                            }
+                        }
+                    },
+                    "symfony2": {
+                        "require": {
+                            "symfony/console": "^2.8"
+                        },
+                        "require-dev": {
+                            "phpunit/phpunit": "^4.8.36"
+                        },
+                        "remove": [
+                            "php-coveralls/php-coveralls"
+                        ],
+                        "config": {
+                            "platform": {
+                                "php": "5.4.8"
+                            }
+                        },
+                        "scenario-options": {
+                            "create-lockfile": "false"
+                        }
+                    }
+                },
                 "branch-alias": {
                     "dev-master": "3.x-dev"
                 }
@@ -60,7 +115,7 @@
                 }
             ],
             "description": "Format text by applying transformations provided by plug-in formatters.",
-            "time": "2018-10-19T22:35:38+00:00"
+            "time": "2020-10-11T04:15:32+00:00"
         },
         {
             "name": "dflydev/dot-access-data",
@@ -123,16 +178,16 @@
         },
         {
             "name": "psr/log",
-            "version": "1.1.0",
+            "version": "1.1.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/php-fig/log.git",
-                "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd"
+                "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/php-fig/log/zipball/6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd",
-                "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd",
+                "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc",
+                "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc",
                 "shasum": ""
             },
             "require": {
@@ -141,7 +196,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.0.x-dev"
+                    "dev-master": "1.1.x-dev"
                 }
             },
             "autoload": {
@@ -166,11 +221,11 @@
                 "psr",
                 "psr-3"
             ],
-            "time": "2018-11-20T15:27:04+00:00"
+            "time": "2020-03-23T09:12:05+00:00"
         },
         {
             "name": "symfony/console",
-            "version": "v2.8.49",
+            "version": "v2.8.52",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/console.git",
@@ -231,7 +286,7 @@
         },
         {
             "name": "symfony/debug",
-            "version": "v2.8.49",
+            "version": "v2.8.52",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/debug.git",
@@ -288,7 +343,7 @@
         },
         {
             "name": "symfony/event-dispatcher",
-            "version": "v2.8.49",
+            "version": "v2.8.52",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/event-dispatcher.git",
@@ -348,7 +403,7 @@
         },
         {
             "name": "symfony/finder",
-            "version": "v2.8.49",
+            "version": "v2.8.52",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/finder.git",
@@ -397,16 +452,16 @@
         },
         {
             "name": "symfony/polyfill-mbstring",
-            "version": "v1.10.0",
+            "version": "v1.18.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-mbstring.git",
-                "reference": "c79c051f5b3a46be09205c73b80b346e4153e494"
+                "reference": "a6977d63bf9a0ad4c65cd352709e230876f9904a"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/c79c051f5b3a46be09205c73b80b346e4153e494",
-                "reference": "c79c051f5b3a46be09205c73b80b346e4153e494",
+                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/a6977d63bf9a0ad4c65cd352709e230876f9904a",
+                "reference": "a6977d63bf9a0ad4c65cd352709e230876f9904a",
                 "shasum": ""
             },
             "require": {
@@ -418,7 +473,11 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.9-dev"
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
                 }
             },
             "autoload": {
@@ -452,7 +511,21 @@
                 "portable",
                 "shim"
             ],
-            "time": "2018-09-21T13:07:52+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-14T12:35:20+00:00"
         }
     ],
     "packages-dev": [
@@ -512,27 +585,27 @@
         },
         {
             "name": "g1a/composer-test-scenarios",
-            "version": "3.0.1",
+            "version": "3.2.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/g1a/composer-test-scenarios.git",
-                "reference": "224531e20d13a07942a989a70759f726cd2df9a1"
+                "reference": "e7394206d845fd593d325440507fb940bef8cb62"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/g1a/composer-test-scenarios/zipball/224531e20d13a07942a989a70759f726cd2df9a1",
-                "reference": "224531e20d13a07942a989a70759f726cd2df9a1",
+                "url": "https://api.github.com/repos/g1a/composer-test-scenarios/zipball/e7394206d845fd593d325440507fb940bef8cb62",
+                "reference": "e7394206d845fd593d325440507fb940bef8cb62",
                 "shasum": ""
             },
             "require": {
-                "composer-plugin-api": "^1.0.0",
+                "composer-plugin-api": "^1.0.0 || ^2.0.0",
                 "php": ">=5.4"
             },
             "require-dev": {
-                "composer/composer": "^1.7",
+                "composer/composer": "^1.10.6 || ^2.0@rc",
                 "php-coveralls/php-coveralls": "^1.0",
                 "phpunit/phpunit": "^4.8.36|^6",
-                "squizlabs/php_codesniffer": "^2.8"
+                "squizlabs/php_codesniffer": "^3.5"
             },
             "bin": [
                 "scripts/dependency-licenses"
@@ -541,7 +614,7 @@
             "extra": {
                 "class": "ComposerTestScenarios\\Plugin",
                 "branch-alias": {
-                    "dev-master": "3.x-dev"
+                    "dev-main": "3.x-dev"
                 }
             },
             "autoload": {
@@ -560,7 +633,7 @@
                 }
             ],
             "description": "Useful scripts for testing multiple sets of Composer dependencies.",
-            "time": "2018-11-27T05:58:39+00:00"
+            "time": "2020-09-28T20:54:35+00:00"
         },
         {
             "name": "phpdocumentor/reflection-docblock",
@@ -613,38 +686,38 @@
         },
         {
             "name": "phpspec/prophecy",
-            "version": "1.8.0",
+            "version": "v1.10.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpspec/prophecy.git",
-                "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06"
+                "reference": "451c3cd1418cf640de218914901e51b064abb093"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpspec/prophecy/zipball/4ba436b55987b4bf311cb7c6ba82aa528aac0a06",
-                "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06",
+                "url": "https://api.github.com/repos/phpspec/prophecy/zipball/451c3cd1418cf640de218914901e51b064abb093",
+                "reference": "451c3cd1418cf640de218914901e51b064abb093",
                 "shasum": ""
             },
             "require": {
                 "doctrine/instantiator": "^1.0.2",
                 "php": "^5.3|^7.0",
-                "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0",
-                "sebastian/comparator": "^1.1|^2.0|^3.0",
-                "sebastian/recursion-context": "^1.0|^2.0|^3.0"
+                "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0",
+                "sebastian/comparator": "^1.2.3|^2.0|^3.0|^4.0",
+                "sebastian/recursion-context": "^1.0|^2.0|^3.0|^4.0"
             },
             "require-dev": {
-                "phpspec/phpspec": "^2.5|^3.2",
+                "phpspec/phpspec": "^2.5 || ^3.2",
                 "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.8.x-dev"
+                    "dev-master": "1.10.x-dev"
                 }
             },
             "autoload": {
-                "psr-0": {
-                    "Prophecy\\": "src/"
+                "psr-4": {
+                    "Prophecy\\": "src/Prophecy"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -672,7 +745,7 @@
                 "spy",
                 "stub"
             ],
-            "time": "2018-08-05T17:53:17+00:00"
+            "time": "2020-03-05T15:02:03+00:00"
         },
         {
             "name": "phpunit/php-code-coverage",
@@ -920,6 +993,7 @@
             "keywords": [
                 "tokenizer"
             ],
+            "abandoned": true,
             "time": "2017-12-04T08:55:13+00:00"
         },
         {
@@ -1048,6 +1122,7 @@
                 "mock",
                 "xunit"
             ],
+            "abandoned": true,
             "time": "2015-10-02T06:51:40+00:00"
         },
         {
@@ -1502,16 +1577,16 @@
         },
         {
             "name": "symfony/polyfill-ctype",
-            "version": "v1.10.0",
+            "version": "v1.18.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-ctype.git",
-                "reference": "e3d826245268269cd66f8326bd8bc066687b4a19"
+                "reference": "1c302646f6efc070cd46856e600e5e0684d6b454"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/e3d826245268269cd66f8326bd8bc066687b4a19",
-                "reference": "e3d826245268269cd66f8326bd8bc066687b4a19",
+                "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/1c302646f6efc070cd46856e600e5e0684d6b454",
+                "reference": "1c302646f6efc070cd46856e600e5e0684d6b454",
                 "shasum": ""
             },
             "require": {
@@ -1523,7 +1598,11 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.9-dev"
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
                 }
             },
             "autoload": {
@@ -1539,13 +1618,13 @@
                 "MIT"
             ],
             "authors": [
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                },
                 {
                     "name": "Gert de Pagter",
                     "email": "BackEndTea@gmail.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
                 }
             ],
             "description": "Symfony polyfill for ctype functions",
@@ -1556,11 +1635,25 @@
                 "polyfill",
                 "portable"
             ],
-            "time": "2018-08-06T14:22:27+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-14T12:35:20+00:00"
         },
         {
             "name": "symfony/yaml",
-            "version": "v2.8.49",
+            "version": "v2.8.52",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/yaml.git",
@@ -1620,5 +1713,6 @@
     "platform-dev": [],
     "platform-overrides": {
         "php": "5.4.8"
-    }
+    },
+    "plugin-api-version": "1.1.0"
 }
diff --git a/vendor/consolidation/annotated-command/.scenarios.lock/symfony2/composer.json b/vendor/consolidation/annotated-command/.scenarios.lock/symfony2/composer.json
index 17e581d9158d4fd8996614e8fa874ecc6654c470..88075ce814e889bc8155d88f8e48fb534a4ce234 100644
--- a/vendor/consolidation/annotated-command/.scenarios.lock/symfony2/composer.json
+++ b/vendor/consolidation/annotated-command/.scenarios.lock/symfony2/composer.json
@@ -21,10 +21,10 @@
     "require": {
         "symfony/console": "^2.8",
         "php": ">=5.4.5",
-        "consolidation/output-formatters": "^3.4",
+        "consolidation/output-formatters": "^3.5.1",
         "psr/log": "^1",
         "symfony/event-dispatcher": "^2.5|^3|^4",
-        "symfony/finder": "^2.5|^3|^4"
+        "symfony/finder": "^2.5|^3|^4|^5"
     },
     "require-dev": {
         "phpunit/phpunit": "^4.8.36",
diff --git a/vendor/consolidation/annotated-command/.scenarios.lock/symfony4/composer.json b/vendor/consolidation/annotated-command/.scenarios.lock/symfony4/composer.json
index 80f0baaf38dc15a54e9efca37be136a422d93e39..16c40493ddf11967bb7229395de2476e36e5b192 100644
--- a/vendor/consolidation/annotated-command/.scenarios.lock/symfony4/composer.json
+++ b/vendor/consolidation/annotated-command/.scenarios.lock/symfony4/composer.json
@@ -21,10 +21,10 @@
     "require": {
         "symfony/console": "^4.0",
         "php": ">=5.4.5",
-        "consolidation/output-formatters": "^3.4",
+        "consolidation/output-formatters": "^3.5.1",
         "psr/log": "^1",
         "symfony/event-dispatcher": "^2.5|^3|^4",
-        "symfony/finder": "^2.5|^3|^4"
+        "symfony/finder": "^2.5|^3|^4|^5"
     },
     "require-dev": {
         "phpunit/phpunit": "^6",
diff --git a/vendor/consolidation/annotated-command/.scenarios.lock/symfony4/composer.lock b/vendor/consolidation/annotated-command/.scenarios.lock/symfony4/composer.lock
index 605f4d0d0fbfbfe1cddd90e7e59a7ad98f10f04f..f60852876d3641a7ffa6a0d36d2b6ceec1985d87 100644
--- a/vendor/consolidation/annotated-command/.scenarios.lock/symfony4/composer.lock
+++ b/vendor/consolidation/annotated-command/.scenarios.lock/symfony4/composer.lock
@@ -4,34 +4,33 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "This file is @generated automatically"
     ],
-    "content-hash": "c6c8cae7d200f377fc58fdc4d46be678",
+    "content-hash": "7e462e9eec4461a4eb39e90d105ea42c",
     "packages": [
         {
             "name": "consolidation/output-formatters",
-            "version": "3.4.0",
+            "version": "3.5.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/consolidation/output-formatters.git",
-                "reference": "a942680232094c4a5b21c0b7e54c20cce623ae19"
+                "reference": "0d38f13051ef05c223a2bb8e962d668e24785196"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/consolidation/output-formatters/zipball/a942680232094c4a5b21c0b7e54c20cce623ae19",
-                "reference": "a942680232094c4a5b21c0b7e54c20cce623ae19",
+                "url": "https://api.github.com/repos/consolidation/output-formatters/zipball/0d38f13051ef05c223a2bb8e962d668e24785196",
+                "reference": "0d38f13051ef05c223a2bb8e962d668e24785196",
                 "shasum": ""
             },
             "require": {
                 "dflydev/dot-access-data": "^1.1.0",
                 "php": ">=5.4.0",
                 "symfony/console": "^2.8|^3|^4",
-                "symfony/finder": "^2.5|^3|^4"
+                "symfony/finder": "^2.5|^3|^4|^5"
             },
             "require-dev": {
-                "g1a/composer-test-scenarios": "^2",
+                "g1a/composer-test-scenarios": "^3",
+                "php-coveralls/php-coveralls": "^1",
                 "phpunit/phpunit": "^5.7.27",
-                "satooshi/php-coveralls": "^2",
                 "squizlabs/php_codesniffer": "^2.7",
-                "symfony/console": "3.2.3",
                 "symfony/var-dumper": "^2.8|^3|^4",
                 "victorjonsson/markdowndocs": "^1.3"
             },
@@ -40,6 +39,62 @@
             },
             "type": "library",
             "extra": {
+                "scenarios": {
+                    "finder5": {
+                        "require": {
+                            "symfony/finder": "^5"
+                        },
+                        "config": {
+                            "platform": {
+                                "php": "7.2.5"
+                            }
+                        }
+                    },
+                    "symfony4": {
+                        "require": {
+                            "symfony/console": "^4.0"
+                        },
+                        "require-dev": {
+                            "phpunit/phpunit": "^6"
+                        },
+                        "config": {
+                            "platform": {
+                                "php": "7.1.3"
+                            }
+                        }
+                    },
+                    "symfony3": {
+                        "require": {
+                            "symfony/console": "^3.4",
+                            "symfony/finder": "^3.4",
+                            "symfony/var-dumper": "^3.4"
+                        },
+                        "config": {
+                            "platform": {
+                                "php": "5.6.32"
+                            }
+                        }
+                    },
+                    "symfony2": {
+                        "require": {
+                            "symfony/console": "^2.8"
+                        },
+                        "require-dev": {
+                            "phpunit/phpunit": "^4.8.36"
+                        },
+                        "remove": [
+                            "php-coveralls/php-coveralls"
+                        ],
+                        "config": {
+                            "platform": {
+                                "php": "5.4.8"
+                            }
+                        },
+                        "scenario-options": {
+                            "create-lockfile": "false"
+                        }
+                    }
+                },
                 "branch-alias": {
                     "dev-master": "3.x-dev"
                 }
@@ -60,7 +115,7 @@
                 }
             ],
             "description": "Format text by applying transformations provided by plug-in formatters.",
-            "time": "2018-10-19T22:35:38+00:00"
+            "time": "2020-10-11T04:15:32+00:00"
         },
         {
             "name": "dflydev/dot-access-data",
@@ -121,18 +176,67 @@
             ],
             "time": "2017-01-20T21:14:22+00:00"
         },
+        {
+            "name": "psr/container",
+            "version": "1.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/php-fig/container.git",
+                "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
+                "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Psr\\Container\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "PHP-FIG",
+                    "homepage": "http://www.php-fig.org/"
+                }
+            ],
+            "description": "Common Container Interface (PHP FIG PSR-11)",
+            "homepage": "https://github.com/php-fig/container",
+            "keywords": [
+                "PSR-11",
+                "container",
+                "container-interface",
+                "container-interop",
+                "psr"
+            ],
+            "time": "2017-02-14T16:28:37+00:00"
+        },
         {
             "name": "psr/log",
-            "version": "1.1.0",
+            "version": "1.1.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/php-fig/log.git",
-                "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd"
+                "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/php-fig/log/zipball/6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd",
-                "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd",
+                "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc",
+                "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc",
                 "shasum": ""
             },
             "require": {
@@ -141,7 +245,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.0.x-dev"
+                    "dev-master": "1.1.x-dev"
                 }
             },
             "autoload": {
@@ -166,41 +270,49 @@
                 "psr",
                 "psr-3"
             ],
-            "time": "2018-11-20T15:27:04+00:00"
+            "time": "2020-03-23T09:12:05+00:00"
         },
         {
             "name": "symfony/console",
-            "version": "v4.2.2",
+            "version": "v4.4.15",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/console.git",
-                "reference": "b0a03c1bb0fcbe288629956cf2f1dd3f1dc97522"
+                "reference": "90933b39c7b312fc3ceaa1ddeac7eb48cb953124"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/console/zipball/b0a03c1bb0fcbe288629956cf2f1dd3f1dc97522",
-                "reference": "b0a03c1bb0fcbe288629956cf2f1dd3f1dc97522",
+                "url": "https://api.github.com/repos/symfony/console/zipball/90933b39c7b312fc3ceaa1ddeac7eb48cb953124",
+                "reference": "90933b39c7b312fc3ceaa1ddeac7eb48cb953124",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.1.3",
-                "symfony/contracts": "^1.0",
-                "symfony/polyfill-mbstring": "~1.0"
+                "php": ">=7.1.3",
+                "symfony/polyfill-mbstring": "~1.0",
+                "symfony/polyfill-php73": "^1.8",
+                "symfony/polyfill-php80": "^1.15",
+                "symfony/service-contracts": "^1.1|^2"
             },
             "conflict": {
                 "symfony/dependency-injection": "<3.4",
+                "symfony/event-dispatcher": "<4.3|>=5",
+                "symfony/lock": "<4.4",
                 "symfony/process": "<3.3"
             },
+            "provide": {
+                "psr/log-implementation": "1.0"
+            },
             "require-dev": {
                 "psr/log": "~1.0",
-                "symfony/config": "~3.4|~4.0",
-                "symfony/dependency-injection": "~3.4|~4.0",
-                "symfony/event-dispatcher": "~3.4|~4.0",
-                "symfony/lock": "~3.4|~4.0",
-                "symfony/process": "~3.4|~4.0"
+                "symfony/config": "^3.4|^4.0|^5.0",
+                "symfony/dependency-injection": "^3.4|^4.0|^5.0",
+                "symfony/event-dispatcher": "^4.3",
+                "symfony/lock": "^4.4|^5.0",
+                "symfony/process": "^3.4|^4.0|^5.0",
+                "symfony/var-dumper": "^4.3|^5.0"
             },
             "suggest": {
-                "psr/log-implementation": "For using the console logger",
+                "psr/log": "For using the console logger",
                 "symfony/event-dispatcher": "",
                 "symfony/lock": "",
                 "symfony/process": ""
@@ -208,7 +320,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "4.2-dev"
+                    "dev-master": "4.4-dev"
                 }
             },
             "autoload": {
@@ -235,48 +347,73 @@
             ],
             "description": "Symfony Console Component",
             "homepage": "https://symfony.com",
-            "time": "2019-01-04T15:13:53+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-15T07:58:55+00:00"
         },
         {
-            "name": "symfony/contracts",
-            "version": "v1.0.2",
+            "name": "symfony/event-dispatcher",
+            "version": "v4.4.15",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/contracts.git",
-                "reference": "1aa7ab2429c3d594dd70689604b5cf7421254cdf"
+                "url": "https://github.com/symfony/event-dispatcher.git",
+                "reference": "e17bb5e0663dc725f7cdcafc932132735b4725cd"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/contracts/zipball/1aa7ab2429c3d594dd70689604b5cf7421254cdf",
-                "reference": "1aa7ab2429c3d594dd70689604b5cf7421254cdf",
+                "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/e17bb5e0663dc725f7cdcafc932132735b4725cd",
+                "reference": "e17bb5e0663dc725f7cdcafc932132735b4725cd",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.1.3"
+                "php": ">=7.1.3",
+                "symfony/event-dispatcher-contracts": "^1.1"
+            },
+            "conflict": {
+                "symfony/dependency-injection": "<3.4"
+            },
+            "provide": {
+                "psr/event-dispatcher-implementation": "1.0",
+                "symfony/event-dispatcher-implementation": "1.1"
             },
             "require-dev": {
-                "psr/cache": "^1.0",
-                "psr/container": "^1.0"
+                "psr/log": "~1.0",
+                "symfony/config": "^3.4|^4.0|^5.0",
+                "symfony/dependency-injection": "^3.4|^4.0|^5.0",
+                "symfony/error-handler": "~3.4|~4.4",
+                "symfony/expression-language": "^3.4|^4.0|^5.0",
+                "symfony/http-foundation": "^3.4|^4.0|^5.0",
+                "symfony/service-contracts": "^1.1|^2",
+                "symfony/stopwatch": "^3.4|^4.0|^5.0"
             },
             "suggest": {
-                "psr/cache": "When using the Cache contracts",
-                "psr/container": "When using the Service contracts",
-                "symfony/cache-contracts-implementation": "",
-                "symfony/service-contracts-implementation": "",
-                "symfony/translation-contracts-implementation": ""
+                "symfony/dependency-injection": "",
+                "symfony/http-kernel": ""
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.0-dev"
+                    "dev-master": "4.4-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Symfony\\Contracts\\": ""
+                    "Symfony\\Component\\EventDispatcher\\": ""
                 },
                 "exclude-from-classmap": [
-                    "**/Tests/"
+                    "/Tests/"
                 ]
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -285,71 +422,67 @@
             ],
             "authors": [
                 {
-                    "name": "Nicolas Grekas",
-                    "email": "p@tchwork.com"
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
                 },
                 {
                     "name": "Symfony Community",
                     "homepage": "https://symfony.com/contributors"
                 }
             ],
-            "description": "A set of abstractions extracted out of the Symfony components",
+            "description": "Symfony EventDispatcher Component",
             "homepage": "https://symfony.com",
-            "keywords": [
-                "abstractions",
-                "contracts",
-                "decoupling",
-                "interfaces",
-                "interoperability",
-                "standards"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
             ],
-            "time": "2018-12-05T08:06:11+00:00"
+            "time": "2020-09-18T14:07:46+00:00"
         },
         {
-            "name": "symfony/event-dispatcher",
-            "version": "v4.2.2",
+            "name": "symfony/event-dispatcher-contracts",
+            "version": "v1.1.9",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/event-dispatcher.git",
-                "reference": "887de6d34c86cf0cb6cbf910afb170cdb743cb5e"
+                "url": "https://github.com/symfony/event-dispatcher-contracts.git",
+                "reference": "84e23fdcd2517bf37aecbd16967e83f0caee25a7"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/887de6d34c86cf0cb6cbf910afb170cdb743cb5e",
-                "reference": "887de6d34c86cf0cb6cbf910afb170cdb743cb5e",
+                "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/84e23fdcd2517bf37aecbd16967e83f0caee25a7",
+                "reference": "84e23fdcd2517bf37aecbd16967e83f0caee25a7",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.1.3",
-                "symfony/contracts": "^1.0"
-            },
-            "conflict": {
-                "symfony/dependency-injection": "<3.4"
-            },
-            "require-dev": {
-                "psr/log": "~1.0",
-                "symfony/config": "~3.4|~4.0",
-                "symfony/dependency-injection": "~3.4|~4.0",
-                "symfony/expression-language": "~3.4|~4.0",
-                "symfony/stopwatch": "~3.4|~4.0"
+                "php": ">=7.1.3"
             },
             "suggest": {
-                "symfony/dependency-injection": "",
-                "symfony/http-kernel": ""
+                "psr/event-dispatcher": "",
+                "symfony/event-dispatcher-implementation": ""
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "4.2-dev"
+                    "dev-master": "1.1-dev"
+                },
+                "thanks": {
+                    "name": "symfony/contracts",
+                    "url": "https://github.com/symfony/contracts"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Symfony\\Component\\EventDispatcher\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
+                    "Symfony\\Contracts\\EventDispatcher\\": ""
+                }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
@@ -357,39 +490,61 @@
             ],
             "authors": [
                 {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
                 },
                 {
                     "name": "Symfony Community",
                     "homepage": "https://symfony.com/contributors"
                 }
             ],
-            "description": "Symfony EventDispatcher Component",
+            "description": "Generic abstractions related to dispatching event",
             "homepage": "https://symfony.com",
-            "time": "2019-01-05T16:37:49+00:00"
+            "keywords": [
+                "abstractions",
+                "contracts",
+                "decoupling",
+                "interfaces",
+                "interoperability",
+                "standards"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-06T13:19:58+00:00"
         },
         {
             "name": "symfony/finder",
-            "version": "v4.2.2",
+            "version": "v4.4.15",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/finder.git",
-                "reference": "9094d69e8c6ee3fe186a0ec5a4f1401e506071ce"
+                "reference": "60d08560f9aa72997c44077c40d47aa28a963230"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/finder/zipball/9094d69e8c6ee3fe186a0ec5a4f1401e506071ce",
-                "reference": "9094d69e8c6ee3fe186a0ec5a4f1401e506071ce",
+                "url": "https://api.github.com/repos/symfony/finder/zipball/60d08560f9aa72997c44077c40d47aa28a963230",
+                "reference": "60d08560f9aa72997c44077c40d47aa28a963230",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.1.3"
+                "php": ">=7.1.3"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "4.2-dev"
+                    "dev-master": "4.4-dev"
                 }
             },
             "autoload": {
@@ -416,20 +571,34 @@
             ],
             "description": "Symfony Finder Component",
             "homepage": "https://symfony.com",
-            "time": "2019-01-03T09:07:35+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-10-02T07:34:48+00:00"
         },
         {
             "name": "symfony/polyfill-mbstring",
-            "version": "v1.10.0",
+            "version": "v1.18.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-mbstring.git",
-                "reference": "c79c051f5b3a46be09205c73b80b346e4153e494"
+                "reference": "a6977d63bf9a0ad4c65cd352709e230876f9904a"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/c79c051f5b3a46be09205c73b80b346e4153e494",
-                "reference": "c79c051f5b3a46be09205c73b80b346e4153e494",
+                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/a6977d63bf9a0ad4c65cd352709e230876f9904a",
+                "reference": "a6977d63bf9a0ad4c65cd352709e230876f9904a",
                 "shasum": ""
             },
             "require": {
@@ -441,7 +610,11 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.9-dev"
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
                 }
             },
             "autoload": {
@@ -475,33 +648,281 @@
                 "portable",
                 "shim"
             ],
-            "time": "2018-09-21T13:07:52+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-14T12:35:20+00:00"
+        },
+        {
+            "name": "symfony/polyfill-php73",
+            "version": "v1.18.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-php73.git",
+                "reference": "fffa1a52a023e782cdcc221d781fe1ec8f87fcca"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fffa1a52a023e782cdcc221d781fe1ec8f87fcca",
+                "reference": "fffa1a52a023e782cdcc221d781fe1ec8f87fcca",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Polyfill\\Php73\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
+                ],
+                "classmap": [
+                    "Resources/stubs"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-14T12:35:20+00:00"
+        },
+        {
+            "name": "symfony/polyfill-php80",
+            "version": "v1.18.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-php80.git",
+                "reference": "d87d5766cbf48d72388a9f6b85f280c8ad51f981"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/d87d5766cbf48d72388a9f6b85f280c8ad51f981",
+                "reference": "d87d5766cbf48d72388a9f6b85f280c8ad51f981",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.0.8"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Polyfill\\Php80\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
+                ],
+                "classmap": [
+                    "Resources/stubs"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Ion Bazan",
+                    "email": "ion.bazan@gmail.com"
+                },
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-14T12:35:20+00:00"
+        },
+        {
+            "name": "symfony/service-contracts",
+            "version": "v1.1.9",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/service-contracts.git",
+                "reference": "b776d18b303a39f56c63747bcb977ad4b27aca26"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/service-contracts/zipball/b776d18b303a39f56c63747bcb977ad4b27aca26",
+                "reference": "b776d18b303a39f56c63747bcb977ad4b27aca26",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.1.3",
+                "psr/container": "^1.0"
+            },
+            "suggest": {
+                "symfony/service-implementation": ""
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.1-dev"
+                },
+                "thanks": {
+                    "name": "symfony/contracts",
+                    "url": "https://github.com/symfony/contracts"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Contracts\\Service\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Generic abstractions related to writing services",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "abstractions",
+                "contracts",
+                "decoupling",
+                "interfaces",
+                "interoperability",
+                "standards"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-06T13:19:58+00:00"
         }
     ],
     "packages-dev": [
         {
             "name": "doctrine/instantiator",
-            "version": "1.1.0",
+            "version": "1.3.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/doctrine/instantiator.git",
-                "reference": "185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda"
+                "reference": "f350df0268e904597e3bd9c4685c53e0e333feea"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/instantiator/zipball/185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda",
-                "reference": "185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda",
+                "url": "https://api.github.com/repos/doctrine/instantiator/zipball/f350df0268e904597e3bd9c4685c53e0e333feea",
+                "reference": "f350df0268e904597e3bd9c4685c53e0e333feea",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.1"
+                "php": "^7.1 || ^8.0"
             },
             "require-dev": {
-                "athletic/athletic": "~0.1.8",
+                "doctrine/coding-standard": "^6.0",
                 "ext-pdo": "*",
                 "ext-phar": "*",
-                "phpunit/phpunit": "^6.2.3",
-                "squizlabs/php_codesniffer": "^3.0.2"
+                "phpbench/phpbench": "^0.13",
+                "phpstan/phpstan-phpunit": "^0.11",
+                "phpstan/phpstan-shim": "^0.11",
+                "phpunit/phpunit": "^7.0"
             },
             "type": "library",
             "extra": {
@@ -526,36 +947,50 @@
                 }
             ],
             "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
-            "homepage": "https://github.com/doctrine/instantiator",
+            "homepage": "https://www.doctrine-project.org/projects/instantiator.html",
             "keywords": [
                 "constructor",
                 "instantiate"
             ],
-            "time": "2017-07-22T11:58:36+00:00"
+            "funding": [
+                {
+                    "url": "https://www.doctrine-project.org/sponsorship.html",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://www.patreon.com/phpdoctrine",
+                    "type": "patreon"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-05-29T17:27:14+00:00"
         },
         {
             "name": "g1a/composer-test-scenarios",
-            "version": "3.0.1",
+            "version": "3.2.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/g1a/composer-test-scenarios.git",
-                "reference": "224531e20d13a07942a989a70759f726cd2df9a1"
+                "reference": "e7394206d845fd593d325440507fb940bef8cb62"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/g1a/composer-test-scenarios/zipball/224531e20d13a07942a989a70759f726cd2df9a1",
-                "reference": "224531e20d13a07942a989a70759f726cd2df9a1",
+                "url": "https://api.github.com/repos/g1a/composer-test-scenarios/zipball/e7394206d845fd593d325440507fb940bef8cb62",
+                "reference": "e7394206d845fd593d325440507fb940bef8cb62",
                 "shasum": ""
             },
             "require": {
-                "composer-plugin-api": "^1.0.0",
+                "composer-plugin-api": "^1.0.0 || ^2.0.0",
                 "php": ">=5.4"
             },
             "require-dev": {
-                "composer/composer": "^1.7",
+                "composer/composer": "^1.10.6 || ^2.0@rc",
                 "php-coveralls/php-coveralls": "^1.0",
                 "phpunit/phpunit": "^4.8.36|^6",
-                "squizlabs/php_codesniffer": "^2.8"
+                "squizlabs/php_codesniffer": "^3.5"
             },
             "bin": [
                 "scripts/dependency-licenses"
@@ -564,7 +999,7 @@
             "extra": {
                 "class": "ComposerTestScenarios\\Plugin",
                 "branch-alias": {
-                    "dev-master": "3.x-dev"
+                    "dev-main": "3.x-dev"
                 }
             },
             "autoload": {
@@ -583,7 +1018,7 @@
                 }
             ],
             "description": "Useful scripts for testing multiple sets of Composer dependencies.",
-            "time": "2018-11-27T05:58:39+00:00"
+            "time": "2020-09-28T20:54:35+00:00"
         },
         {
             "name": "guzzle/guzzle",
@@ -680,20 +1115,20 @@
         },
         {
             "name": "myclabs/deep-copy",
-            "version": "1.8.1",
+            "version": "1.10.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/myclabs/DeepCopy.git",
-                "reference": "3e01bdad3e18354c3dce54466b7fbe33a9f9f7f8"
+                "reference": "969b211f9a51aa1f6c01d1d2aef56d3bd91598e5"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3e01bdad3e18354c3dce54466b7fbe33a9f9f7f8",
-                "reference": "3e01bdad3e18354c3dce54466b7fbe33a9f9f7f8",
+                "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/969b211f9a51aa1f6c01d1d2aef56d3bd91598e5",
+                "reference": "969b211f9a51aa1f6c01d1d2aef56d3bd91598e5",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.1"
+                "php": "^7.1 || ^8.0"
             },
             "replace": {
                 "myclabs/deep-copy": "self.version"
@@ -724,7 +1159,13 @@
                 "object",
                 "object graph"
             ],
-            "time": "2018-06-11T23:09:50+00:00"
+            "funding": [
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-06-29T13:22:24+00:00"
         },
         {
             "name": "phar-io/manifest",
@@ -891,35 +1332,30 @@
         },
         {
             "name": "phpdocumentor/reflection-common",
-            "version": "1.0.1",
+            "version": "2.1.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpDocumentor/ReflectionCommon.git",
-                "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6"
+                "reference": "6568f4687e5b41b054365f9ae03fcb1ed5f2069b"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6",
-                "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6",
+                "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/6568f4687e5b41b054365f9ae03fcb1ed5f2069b",
+                "reference": "6568f4687e5b41b054365f9ae03fcb1ed5f2069b",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.5"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^4.6"
+                "php": ">=7.1"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.0.x-dev"
+                    "dev-master": "2.x-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "phpDocumentor\\Reflection\\": [
-                        "src"
-                    ]
+                    "phpDocumentor\\Reflection\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -941,31 +1377,32 @@
                 "reflection",
                 "static analysis"
             ],
-            "time": "2017-09-11T18:02:19+00:00"
+            "time": "2020-04-27T09:25:28+00:00"
         },
         {
             "name": "phpdocumentor/reflection-docblock",
-            "version": "4.3.0",
+            "version": "4.3.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
-                "reference": "94fd0001232e47129dd3504189fa1c7225010d08"
+                "reference": "da3fd972d6bafd628114f7e7e036f45944b62e9c"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/94fd0001232e47129dd3504189fa1c7225010d08",
-                "reference": "94fd0001232e47129dd3504189fa1c7225010d08",
+                "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/da3fd972d6bafd628114f7e7e036f45944b62e9c",
+                "reference": "da3fd972d6bafd628114f7e7e036f45944b62e9c",
                 "shasum": ""
             },
             "require": {
                 "php": "^7.0",
-                "phpdocumentor/reflection-common": "^1.0.0",
-                "phpdocumentor/type-resolver": "^0.4.0",
+                "phpdocumentor/reflection-common": "^1.0.0 || ^2.0.0",
+                "phpdocumentor/type-resolver": "~0.4 || ^1.0.0",
                 "webmozart/assert": "^1.0"
             },
             "require-dev": {
-                "doctrine/instantiator": "~1.0.5",
+                "doctrine/instantiator": "^1.0.5",
                 "mockery/mockery": "^1.0",
+                "phpdocumentor/type-resolver": "0.4.*",
                 "phpunit/phpunit": "^6.4"
             },
             "type": "library",
@@ -992,41 +1429,40 @@
                 }
             ],
             "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
-            "time": "2017-11-30T07:14:17+00:00"
+            "time": "2019-12-28T18:55:12+00:00"
         },
         {
             "name": "phpdocumentor/type-resolver",
-            "version": "0.4.0",
+            "version": "1.0.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpDocumentor/TypeResolver.git",
-                "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7"
+                "reference": "2e32a6d48972b2c1976ed5d8967145b6cec4a4a9"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7",
-                "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7",
+                "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/2e32a6d48972b2c1976ed5d8967145b6cec4a4a9",
+                "reference": "2e32a6d48972b2c1976ed5d8967145b6cec4a4a9",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.5 || ^7.0",
-                "phpdocumentor/reflection-common": "^1.0"
+                "php": "^7.1",
+                "phpdocumentor/reflection-common": "^2.0"
             },
             "require-dev": {
-                "mockery/mockery": "^0.9.4",
-                "phpunit/phpunit": "^5.2||^4.8.24"
+                "ext-tokenizer": "^7.1",
+                "mockery/mockery": "~1",
+                "phpunit/phpunit": "^7.0"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.0.x-dev"
+                    "dev-master": "1.x-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "phpDocumentor\\Reflection\\": [
-                        "src/"
-                    ]
+                    "phpDocumentor\\Reflection\\": "src"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -1039,42 +1475,43 @@
                     "email": "me@mikevanriel.com"
                 }
             ],
-            "time": "2017-07-14T14:27:02+00:00"
+            "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
+            "time": "2019-08-22T18:11:29+00:00"
         },
         {
             "name": "phpspec/prophecy",
-            "version": "1.8.0",
+            "version": "v1.10.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpspec/prophecy.git",
-                "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06"
+                "reference": "451c3cd1418cf640de218914901e51b064abb093"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpspec/prophecy/zipball/4ba436b55987b4bf311cb7c6ba82aa528aac0a06",
-                "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06",
+                "url": "https://api.github.com/repos/phpspec/prophecy/zipball/451c3cd1418cf640de218914901e51b064abb093",
+                "reference": "451c3cd1418cf640de218914901e51b064abb093",
                 "shasum": ""
             },
             "require": {
                 "doctrine/instantiator": "^1.0.2",
                 "php": "^5.3|^7.0",
-                "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0",
-                "sebastian/comparator": "^1.1|^2.0|^3.0",
-                "sebastian/recursion-context": "^1.0|^2.0|^3.0"
+                "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0",
+                "sebastian/comparator": "^1.2.3|^2.0|^3.0|^4.0",
+                "sebastian/recursion-context": "^1.0|^2.0|^3.0|^4.0"
             },
             "require-dev": {
-                "phpspec/phpspec": "^2.5|^3.2",
+                "phpspec/phpspec": "^2.5 || ^3.2",
                 "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.8.x-dev"
+                    "dev-master": "1.10.x-dev"
                 }
             },
             "autoload": {
-                "psr-0": {
-                    "Prophecy\\": "src/"
+                "psr-4": {
+                    "Prophecy\\": "src/Prophecy"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -1102,7 +1539,7 @@
                 "spy",
                 "stub"
             ],
-            "time": "2018-08-05T17:53:17+00:00"
+            "time": "2020-03-05T15:02:03+00:00"
         },
         {
             "name": "phpunit/php-code-coverage",
@@ -1351,20 +1788,21 @@
             "keywords": [
                 "tokenizer"
             ],
+            "abandoned": true,
             "time": "2017-11-27T05:48:46+00:00"
         },
         {
             "name": "phpunit/phpunit",
-            "version": "6.5.13",
+            "version": "6.5.14",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/phpunit.git",
-                "reference": "0973426fb012359b2f18d3bd1e90ef1172839693"
+                "reference": "bac23fe7ff13dbdb461481f706f0e9fe746334b7"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/0973426fb012359b2f18d3bd1e90ef1172839693",
-                "reference": "0973426fb012359b2f18d3bd1e90ef1172839693",
+                "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/bac23fe7ff13dbdb461481f706f0e9fe746334b7",
+                "reference": "bac23fe7ff13dbdb461481f706f0e9fe746334b7",
                 "shasum": ""
             },
             "require": {
@@ -1435,7 +1873,7 @@
                 "testing",
                 "xunit"
             ],
-            "time": "2018-09-08T15:10:43+00:00"
+            "time": "2019-02-01T05:22:47+00:00"
         },
         {
             "name": "phpunit/phpunit-mock-objects",
@@ -1494,6 +1932,7 @@
                 "mock",
                 "xunit"
             ],
+            "abandoned": true,
             "time": "2018-08-09T05:50:03+00:00"
         },
         {
@@ -1709,16 +2148,16 @@
         },
         {
             "name": "sebastian/exporter",
-            "version": "3.1.0",
+            "version": "3.1.2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/exporter.git",
-                "reference": "234199f4528de6d12aaa58b612e98f7d36adb937"
+                "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/234199f4528de6d12aaa58b612e98f7d36adb937",
-                "reference": "234199f4528de6d12aaa58b612e98f7d36adb937",
+                "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/68609e1261d215ea5b21b7987539cbfbe156ec3e",
+                "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e",
                 "shasum": ""
             },
             "require": {
@@ -1745,6 +2184,10 @@
                 "BSD-3-Clause"
             ],
             "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                },
                 {
                     "name": "Jeff Welch",
                     "email": "whatthejeff@gmail.com"
@@ -1753,17 +2196,13 @@
                     "name": "Volker Dusch",
                     "email": "github@wallbash.com"
                 },
-                {
-                    "name": "Bernhard Schussek",
-                    "email": "bschussek@2bepublished.at"
-                },
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de"
-                },
                 {
                     "name": "Adam Harvey",
                     "email": "aharvey@php.net"
+                },
+                {
+                    "name": "Bernhard Schussek",
+                    "email": "bschussek@gmail.com"
                 }
             ],
             "description": "Provides the functionality to export PHP variables for visualization",
@@ -1772,7 +2211,7 @@
                 "export",
                 "exporter"
             ],
-            "time": "2017-04-03T13:19:02+00:00"
+            "time": "2019-09-14T09:02:43+00:00"
         },
         {
             "name": "sebastian/global-state",
@@ -2135,31 +2574,32 @@
         },
         {
             "name": "symfony/config",
-            "version": "v4.2.2",
+            "version": "v4.4.15",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/config.git",
-                "reference": "a7a7d0a0244cfc82f040729ccf769e6cf55a78fb"
+                "reference": "7c5a1002178a612787c291a4f515f87b19176b61"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/config/zipball/a7a7d0a0244cfc82f040729ccf769e6cf55a78fb",
-                "reference": "a7a7d0a0244cfc82f040729ccf769e6cf55a78fb",
+                "url": "https://api.github.com/repos/symfony/config/zipball/7c5a1002178a612787c291a4f515f87b19176b61",
+                "reference": "7c5a1002178a612787c291a4f515f87b19176b61",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.1.3",
-                "symfony/filesystem": "~3.4|~4.0",
+                "php": ">=7.1.3",
+                "symfony/filesystem": "^3.4|^4.0|^5.0",
                 "symfony/polyfill-ctype": "~1.8"
             },
             "conflict": {
                 "symfony/finder": "<3.4"
             },
             "require-dev": {
-                "symfony/dependency-injection": "~3.4|~4.0",
-                "symfony/event-dispatcher": "~3.4|~4.0",
-                "symfony/finder": "~3.4|~4.0",
-                "symfony/yaml": "~3.4|~4.0"
+                "symfony/event-dispatcher": "^3.4|^4.0|^5.0",
+                "symfony/finder": "^3.4|^4.0|^5.0",
+                "symfony/messenger": "^4.1|^5.0",
+                "symfony/service-contracts": "^1.1|^2",
+                "symfony/yaml": "^3.4|^4.0|^5.0"
             },
             "suggest": {
                 "symfony/yaml": "To use the yaml reference dumper"
@@ -2167,7 +2607,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "4.2-dev"
+                    "dev-master": "4.4-dev"
                 }
             },
             "autoload": {
@@ -2194,30 +2634,44 @@
             ],
             "description": "Symfony Config Component",
             "homepage": "https://symfony.com",
-            "time": "2019-01-03T09:07:35+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-10-02T07:34:48+00:00"
         },
         {
             "name": "symfony/filesystem",
-            "version": "v4.2.2",
+            "version": "v4.4.15",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/filesystem.git",
-                "reference": "c2ffd9a93f2d6c5be2f68a0aa7953cc229f871f8"
+                "reference": "ebc51494739d3b081ea543ed7c462fa73a4f74db"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/filesystem/zipball/c2ffd9a93f2d6c5be2f68a0aa7953cc229f871f8",
-                "reference": "c2ffd9a93f2d6c5be2f68a0aa7953cc229f871f8",
+                "url": "https://api.github.com/repos/symfony/filesystem/zipball/ebc51494739d3b081ea543ed7c462fa73a4f74db",
+                "reference": "ebc51494739d3b081ea543ed7c462fa73a4f74db",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.1.3",
+                "php": ">=7.1.3",
                 "symfony/polyfill-ctype": "~1.8"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "4.2-dev"
+                    "dev-master": "4.4-dev"
                 }
             },
             "autoload": {
@@ -2244,20 +2698,34 @@
             ],
             "description": "Symfony Filesystem Component",
             "homepage": "https://symfony.com",
-            "time": "2019-01-03T09:07:35+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-27T13:54:16+00:00"
         },
         {
             "name": "symfony/polyfill-ctype",
-            "version": "v1.10.0",
+            "version": "v1.18.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-ctype.git",
-                "reference": "e3d826245268269cd66f8326bd8bc066687b4a19"
+                "reference": "1c302646f6efc070cd46856e600e5e0684d6b454"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/e3d826245268269cd66f8326bd8bc066687b4a19",
-                "reference": "e3d826245268269cd66f8326bd8bc066687b4a19",
+                "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/1c302646f6efc070cd46856e600e5e0684d6b454",
+                "reference": "1c302646f6efc070cd46856e600e5e0684d6b454",
                 "shasum": ""
             },
             "require": {
@@ -2269,7 +2737,11 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.9-dev"
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
                 }
             },
             "autoload": {
@@ -2285,13 +2757,13 @@
                 "MIT"
             ],
             "authors": [
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                },
                 {
                     "name": "Gert de Pagter",
                     "email": "BackEndTea@gmail.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
                 }
             ],
             "description": "Symfony polyfill for ctype functions",
@@ -2302,30 +2774,44 @@
                 "polyfill",
                 "portable"
             ],
-            "time": "2018-08-06T14:22:27+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-14T12:35:20+00:00"
         },
         {
             "name": "symfony/stopwatch",
-            "version": "v4.2.2",
+            "version": "v4.4.15",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/stopwatch.git",
-                "reference": "af62b35760fc92c8dbdce659b4eebdfe0e6a0472"
+                "reference": "6f89e19772cf61b3c65bab329fe0e318259fbd91"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/stopwatch/zipball/af62b35760fc92c8dbdce659b4eebdfe0e6a0472",
-                "reference": "af62b35760fc92c8dbdce659b4eebdfe0e6a0472",
+                "url": "https://api.github.com/repos/symfony/stopwatch/zipball/6f89e19772cf61b3c65bab329fe0e318259fbd91",
+                "reference": "6f89e19772cf61b3c65bab329fe0e318259fbd91",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.1.3",
-                "symfony/contracts": "^1.0"
+                "php": ">=7.1.3",
+                "symfony/service-contracts": "^1.0|^2"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "4.2-dev"
+                    "dev-master": "4.4-dev"
                 }
             },
             "autoload": {
@@ -2352,31 +2838,45 @@
             ],
             "description": "Symfony Stopwatch Component",
             "homepage": "https://symfony.com",
-            "time": "2019-01-03T09:07:35+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-02T16:08:58+00:00"
         },
         {
             "name": "symfony/yaml",
-            "version": "v4.2.2",
+            "version": "v4.4.15",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/yaml.git",
-                "reference": "d0aa6c0ea484087927b49fd513383a7d36190ca6"
+                "reference": "c7885964b1eceb70b0981556d0a9b01d2d97c8d1"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/yaml/zipball/d0aa6c0ea484087927b49fd513383a7d36190ca6",
-                "reference": "d0aa6c0ea484087927b49fd513383a7d36190ca6",
+                "url": "https://api.github.com/repos/symfony/yaml/zipball/c7885964b1eceb70b0981556d0a9b01d2d97c8d1",
+                "reference": "c7885964b1eceb70b0981556d0a9b01d2d97c8d1",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.1.3",
+                "php": ">=7.1.3",
                 "symfony/polyfill-ctype": "~1.8"
             },
             "conflict": {
                 "symfony/console": "<3.4"
             },
             "require-dev": {
-                "symfony/console": "~3.4|~4.0"
+                "symfony/console": "^3.4|^4.0|^5.0"
             },
             "suggest": {
                 "symfony/console": "For validating YAML files using the lint command"
@@ -2384,7 +2884,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "4.2-dev"
+                    "dev-master": "4.4-dev"
                 }
             },
             "autoload": {
@@ -2411,20 +2911,34 @@
             ],
             "description": "Symfony Yaml Component",
             "homepage": "https://symfony.com",
-            "time": "2019-01-03T09:07:35+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-27T03:36:23+00:00"
         },
         {
             "name": "theseer/tokenizer",
-            "version": "1.1.0",
+            "version": "1.1.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/theseer/tokenizer.git",
-                "reference": "cb2f008f3f05af2893a87208fe6a6c4985483f8b"
+                "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/theseer/tokenizer/zipball/cb2f008f3f05af2893a87208fe6a6c4985483f8b",
-                "reference": "cb2f008f3f05af2893a87208fe6a6c4985483f8b",
+                "url": "https://api.github.com/repos/theseer/tokenizer/zipball/11336f6f84e16a720dae9d8e6ed5019efa85a0f9",
+                "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9",
                 "shasum": ""
             },
             "require": {
@@ -2451,36 +2965,34 @@
                 }
             ],
             "description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
-            "time": "2017-04-07T12:08:54+00:00"
+            "time": "2019-06-13T22:48:21+00:00"
         },
         {
             "name": "webmozart/assert",
-            "version": "1.4.0",
+            "version": "1.9.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/webmozart/assert.git",
-                "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9"
+                "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/webmozart/assert/zipball/83e253c8e0be5b0257b881e1827274667c5c17a9",
-                "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9",
+                "url": "https://api.github.com/repos/webmozart/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389",
+                "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.3.3 || ^7.0",
+                "php": "^5.3.3 || ^7.0 || ^8.0",
                 "symfony/polyfill-ctype": "^1.8"
             },
+            "conflict": {
+                "phpstan/phpstan": "<0.12.20",
+                "vimeo/psalm": "<3.9.1"
+            },
             "require-dev": {
-                "phpunit/phpunit": "^4.6",
-                "sebastian/version": "^1.0.1"
+                "phpunit/phpunit": "^4.8.36 || ^7.5.13"
             },
             "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.3-dev"
-                }
-            },
             "autoload": {
                 "psr-4": {
                     "Webmozart\\Assert\\": "src/"
@@ -2502,7 +3014,7 @@
                 "check",
                 "validate"
             ],
-            "time": "2018-12-25T11:19:39+00:00"
+            "time": "2020-07-08T17:02:28+00:00"
         }
     ],
     "aliases": [],
@@ -2516,5 +3028,6 @@
     "platform-dev": [],
     "platform-overrides": {
         "php": "7.1.3"
-    }
+    },
+    "plugin-api-version": "1.1.0"
 }
diff --git a/vendor/consolidation/annotated-command/CHANGELOG.md b/vendor/consolidation/annotated-command/CHANGELOG.md
index d7dbfdd59e030acae0400fcd596f8600a5806a0a..f34216440110247cb4e9563a38871d5f15fafdac 100644
--- a/vendor/consolidation/annotated-command/CHANGELOG.md
+++ b/vendor/consolidation/annotated-command/CHANGELOG.md
@@ -1,5 +1,9 @@
 # Change Log
 
+### 2.12.1 - 10 Oct 2020
+
+- Allow symfony/finder 5 (#213)
+
 ### 2.12.0 - 8 Mar 2019
 
 - Allow annotated args and options to specify their default values in their descriptions. (#186)
diff --git a/vendor/consolidation/annotated-command/LICENSE b/vendor/consolidation/annotated-command/LICENSE
index 7c4d73fd8f27cd9ad9fc210a915cb1caba6abf2c..8bea4b7726cd58e03d653f89156073ea997bf39e 100644
--- a/vendor/consolidation/annotated-command/LICENSE
+++ b/vendor/consolidation/annotated-command/LICENSE
@@ -1,6 +1,6 @@
 The MIT License (MIT)
 
-Copyright (c) 2016-2019 Consolidation Org Developers
+Copyright (c) 2016-2020 Consolidation Org Developers
 
 
 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
@@ -12,11 +12,11 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
 DEPENDENCY LICENSES:
 
 Name                             Version  License
-consolidation/output-formatters  3.4.0    MIT
+consolidation/output-formatters  3.5.1    MIT
 dflydev/dot-access-data          v1.1.0   MIT
-psr/log                          1.1.0    MIT
-symfony/console                  v2.8.49  MIT
-symfony/debug                    v2.8.49  MIT
-symfony/event-dispatcher         v2.8.49  MIT
-symfony/finder                   v2.8.49  MIT
-symfony/polyfill-mbstring        v1.10.0  MIT
\ No newline at end of file
+psr/log                          1.1.3    MIT
+symfony/console                  v2.8.52  MIT
+symfony/debug                    v2.8.52  MIT
+symfony/event-dispatcher         v2.8.52  MIT
+symfony/finder                   v2.8.52  MIT
+symfony/polyfill-mbstring        v1.18.1  MIT
\ No newline at end of file
diff --git a/vendor/consolidation/annotated-command/README.md b/vendor/consolidation/annotated-command/README.md
index efcba14b4480d35c2453a2cf9d319b72d31c145b..dc1e378f688650832718a6734367fdbd6dcbdcc7 100644
--- a/vendor/consolidation/annotated-command/README.md
+++ b/vendor/consolidation/annotated-command/README.md
@@ -131,7 +131,7 @@ There are ten types of hooks in the command processing request flow:
 - [Command](#command-hook)
    - @pre-command
    - @command
-   - @command-init
+   - @post-command
 - [Process](#process-hook)
    - @pre-process
    - @process
diff --git a/vendor/consolidation/annotated-command/composer.json b/vendor/consolidation/annotated-command/composer.json
index 27e7f7e6cf8922896da26fc2d43a3501140c04e9..3181527ed368a262ea3236f973e2fe573adff2ca 100644
--- a/vendor/consolidation/annotated-command/composer.json
+++ b/vendor/consolidation/annotated-command/composer.json
@@ -20,11 +20,11 @@
     },
     "require": {
         "php": ">=5.4.5",
-        "consolidation/output-formatters": "^3.4",
+        "consolidation/output-formatters": "^3.5.1",
         "psr/log": "^1",
         "symfony/console": "^2.8|^3|^4",
         "symfony/event-dispatcher": "^2.5|^3|^4",
-        "symfony/finder": "^2.5|^3|^4"
+        "symfony/finder": "^2.5|^3|^4|^5"
     },
     "require-dev": {
         "phpunit/phpunit": "^6",
@@ -55,6 +55,16 @@
     },
     "extra": {
         "scenarios": {
+            "finder5": {
+                "require": {
+                    "symfony/finder": "^5"
+                },
+                "config": {
+                    "platform": {
+                        "php": "7.2.5"
+                    }
+                }                
+            },
             "symfony4": {
                 "require": {
                     "symfony/console": "^4.0"
diff --git a/vendor/consolidation/annotated-command/composer.lock b/vendor/consolidation/annotated-command/composer.lock
index 6cac1772cd0139f5f260cca235ecf72a0021f3b7..2f4632ea7d93de77bc58ce128f7985093974caa0 100644
--- a/vendor/consolidation/annotated-command/composer.lock
+++ b/vendor/consolidation/annotated-command/composer.lock
@@ -4,34 +4,33 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "This file is @generated automatically"
     ],
-    "content-hash": "24232be7f7d45a8b43acde7b26f7f144",
+    "content-hash": "254144594976df901ad0eaa5e3b04d3a",
     "packages": [
         {
             "name": "consolidation/output-formatters",
-            "version": "3.4.0",
+            "version": "3.5.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/consolidation/output-formatters.git",
-                "reference": "a942680232094c4a5b21c0b7e54c20cce623ae19"
+                "reference": "0d38f13051ef05c223a2bb8e962d668e24785196"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/consolidation/output-formatters/zipball/a942680232094c4a5b21c0b7e54c20cce623ae19",
-                "reference": "a942680232094c4a5b21c0b7e54c20cce623ae19",
+                "url": "https://api.github.com/repos/consolidation/output-formatters/zipball/0d38f13051ef05c223a2bb8e962d668e24785196",
+                "reference": "0d38f13051ef05c223a2bb8e962d668e24785196",
                 "shasum": ""
             },
             "require": {
                 "dflydev/dot-access-data": "^1.1.0",
                 "php": ">=5.4.0",
                 "symfony/console": "^2.8|^3|^4",
-                "symfony/finder": "^2.5|^3|^4"
+                "symfony/finder": "^2.5|^3|^4|^5"
             },
             "require-dev": {
-                "g1a/composer-test-scenarios": "^2",
+                "g1a/composer-test-scenarios": "^3",
+                "php-coveralls/php-coveralls": "^1",
                 "phpunit/phpunit": "^5.7.27",
-                "satooshi/php-coveralls": "^2",
                 "squizlabs/php_codesniffer": "^2.7",
-                "symfony/console": "3.2.3",
                 "symfony/var-dumper": "^2.8|^3|^4",
                 "victorjonsson/markdowndocs": "^1.3"
             },
@@ -40,6 +39,62 @@
             },
             "type": "library",
             "extra": {
+                "scenarios": {
+                    "finder5": {
+                        "require": {
+                            "symfony/finder": "^5"
+                        },
+                        "config": {
+                            "platform": {
+                                "php": "7.2.5"
+                            }
+                        }
+                    },
+                    "symfony4": {
+                        "require": {
+                            "symfony/console": "^4.0"
+                        },
+                        "require-dev": {
+                            "phpunit/phpunit": "^6"
+                        },
+                        "config": {
+                            "platform": {
+                                "php": "7.1.3"
+                            }
+                        }
+                    },
+                    "symfony3": {
+                        "require": {
+                            "symfony/console": "^3.4",
+                            "symfony/finder": "^3.4",
+                            "symfony/var-dumper": "^3.4"
+                        },
+                        "config": {
+                            "platform": {
+                                "php": "5.6.32"
+                            }
+                        }
+                    },
+                    "symfony2": {
+                        "require": {
+                            "symfony/console": "^2.8"
+                        },
+                        "require-dev": {
+                            "phpunit/phpunit": "^4.8.36"
+                        },
+                        "remove": [
+                            "php-coveralls/php-coveralls"
+                        ],
+                        "config": {
+                            "platform": {
+                                "php": "5.4.8"
+                            }
+                        },
+                        "scenario-options": {
+                            "create-lockfile": "false"
+                        }
+                    }
+                },
                 "branch-alias": {
                     "dev-master": "3.x-dev"
                 }
@@ -60,7 +115,7 @@
                 }
             ],
             "description": "Format text by applying transformations provided by plug-in formatters.",
-            "time": "2018-10-19T22:35:38+00:00"
+            "time": "2020-10-11T04:15:32+00:00"
         },
         {
             "name": "dflydev/dot-access-data",
@@ -123,16 +178,16 @@
         },
         {
             "name": "psr/log",
-            "version": "1.1.0",
+            "version": "1.1.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/php-fig/log.git",
-                "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd"
+                "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/php-fig/log/zipball/6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd",
-                "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd",
+                "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc",
+                "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc",
                 "shasum": ""
             },
             "require": {
@@ -141,7 +196,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.0.x-dev"
+                    "dev-master": "1.1.x-dev"
                 }
             },
             "autoload": {
@@ -166,20 +221,20 @@
                 "psr",
                 "psr-3"
             ],
-            "time": "2018-11-20T15:27:04+00:00"
+            "time": "2020-03-23T09:12:05+00:00"
         },
         {
             "name": "symfony/console",
-            "version": "v3.4.21",
+            "version": "v3.4.45",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/console.git",
-                "reference": "a700b874d3692bc8342199adfb6d3b99f62cc61a"
+                "reference": "b28996bc0a3b08914b2a8609163ec35b36b30685"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/console/zipball/a700b874d3692bc8342199adfb6d3b99f62cc61a",
-                "reference": "a700b874d3692bc8342199adfb6d3b99f62cc61a",
+                "url": "https://api.github.com/repos/symfony/console/zipball/b28996bc0a3b08914b2a8609163ec35b36b30685",
+                "reference": "b28996bc0a3b08914b2a8609163ec35b36b30685",
                 "shasum": ""
             },
             "require": {
@@ -191,6 +246,9 @@
                 "symfony/dependency-injection": "<3.4",
                 "symfony/process": "<3.3"
             },
+            "provide": {
+                "psr/log-implementation": "1.0"
+            },
             "require-dev": {
                 "psr/log": "~1.0",
                 "symfony/config": "~3.3|~4.0",
@@ -200,7 +258,7 @@
                 "symfony/process": "~3.3|~4.0"
             },
             "suggest": {
-                "psr/log-implementation": "For using the console logger",
+                "psr/log": "For using the console logger",
                 "symfony/event-dispatcher": "",
                 "symfony/lock": "",
                 "symfony/process": ""
@@ -235,20 +293,34 @@
             ],
             "description": "Symfony Console Component",
             "homepage": "https://symfony.com",
-            "time": "2019-01-04T04:42:43+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-09T05:09:37+00:00"
         },
         {
             "name": "symfony/debug",
-            "version": "v3.4.21",
+            "version": "v3.4.45",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/debug.git",
-                "reference": "26d7f23b9bd0b93bee5583e4d6ca5cb1ab31b186"
+                "reference": "9109e4414e684d0b75276ae203883467476d25d0"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/debug/zipball/26d7f23b9bd0b93bee5583e4d6ca5cb1ab31b186",
-                "reference": "26d7f23b9bd0b93bee5583e4d6ca5cb1ab31b186",
+                "url": "https://api.github.com/repos/symfony/debug/zipball/9109e4414e684d0b75276ae203883467476d25d0",
+                "reference": "9109e4414e684d0b75276ae203883467476d25d0",
                 "shasum": ""
             },
             "require": {
@@ -291,20 +363,34 @@
             ],
             "description": "Symfony Debug Component",
             "homepage": "https://symfony.com",
-            "time": "2019-01-01T13:45:19+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-08T22:19:14+00:00"
         },
         {
             "name": "symfony/event-dispatcher",
-            "version": "v3.4.21",
+            "version": "v3.4.45",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/event-dispatcher.git",
-                "reference": "d1cdd46c53c264a2bd42505bd0e8ce21423bd0e2"
+                "reference": "0bb9ea263b39fce3a12ac9f78ef576bdd80dacb8"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/d1cdd46c53c264a2bd42505bd0e8ce21423bd0e2",
-                "reference": "d1cdd46c53c264a2bd42505bd0e8ce21423bd0e2",
+                "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/0bb9ea263b39fce3a12ac9f78ef576bdd80dacb8",
+                "reference": "0bb9ea263b39fce3a12ac9f78ef576bdd80dacb8",
                 "shasum": ""
             },
             "require": {
@@ -316,6 +402,7 @@
             "require-dev": {
                 "psr/log": "~1.0",
                 "symfony/config": "~2.8|~3.0|~4.0",
+                "symfony/debug": "~3.4|~4.4",
                 "symfony/dependency-injection": "~3.3|~4.0",
                 "symfony/expression-language": "~2.8|~3.0|~4.0",
                 "symfony/stopwatch": "~2.8|~3.0|~4.0"
@@ -354,20 +441,34 @@
             ],
             "description": "Symfony EventDispatcher Component",
             "homepage": "https://symfony.com",
-            "time": "2019-01-01T18:08:36+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-18T12:06:50+00:00"
         },
         {
             "name": "symfony/finder",
-            "version": "v3.4.21",
+            "version": "v3.4.45",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/finder.git",
-                "reference": "3f2a2ab6315dd7682d4c16dcae1e7b95c8b8555e"
+                "reference": "52140652ed31cee3dabd0c481b5577201fa769b4"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/finder/zipball/3f2a2ab6315dd7682d4c16dcae1e7b95c8b8555e",
-                "reference": "3f2a2ab6315dd7682d4c16dcae1e7b95c8b8555e",
+                "url": "https://api.github.com/repos/symfony/finder/zipball/52140652ed31cee3dabd0c481b5577201fa769b4",
+                "reference": "52140652ed31cee3dabd0c481b5577201fa769b4",
                 "shasum": ""
             },
             "require": {
@@ -403,20 +504,34 @@
             ],
             "description": "Symfony Finder Component",
             "homepage": "https://symfony.com",
-            "time": "2019-01-01T13:45:19+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-02T16:06:40+00:00"
         },
         {
             "name": "symfony/polyfill-mbstring",
-            "version": "v1.10.0",
+            "version": "v1.18.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-mbstring.git",
-                "reference": "c79c051f5b3a46be09205c73b80b346e4153e494"
+                "reference": "a6977d63bf9a0ad4c65cd352709e230876f9904a"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/c79c051f5b3a46be09205c73b80b346e4153e494",
-                "reference": "c79c051f5b3a46be09205c73b80b346e4153e494",
+                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/a6977d63bf9a0ad4c65cd352709e230876f9904a",
+                "reference": "a6977d63bf9a0ad4c65cd352709e230876f9904a",
                 "shasum": ""
             },
             "require": {
@@ -428,7 +543,11 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.9-dev"
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
                 }
             },
             "autoload": {
@@ -462,7 +581,21 @@
                 "portable",
                 "shim"
             ],
-            "time": "2018-09-21T13:07:52+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-14T12:35:20+00:00"
         }
     ],
     "packages-dev": [
@@ -522,27 +655,27 @@
         },
         {
             "name": "g1a/composer-test-scenarios",
-            "version": "3.0.1",
+            "version": "3.2.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/g1a/composer-test-scenarios.git",
-                "reference": "224531e20d13a07942a989a70759f726cd2df9a1"
+                "reference": "e7394206d845fd593d325440507fb940bef8cb62"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/g1a/composer-test-scenarios/zipball/224531e20d13a07942a989a70759f726cd2df9a1",
-                "reference": "224531e20d13a07942a989a70759f726cd2df9a1",
+                "url": "https://api.github.com/repos/g1a/composer-test-scenarios/zipball/e7394206d845fd593d325440507fb940bef8cb62",
+                "reference": "e7394206d845fd593d325440507fb940bef8cb62",
                 "shasum": ""
             },
             "require": {
-                "composer-plugin-api": "^1.0.0",
+                "composer-plugin-api": "^1.0.0 || ^2.0.0",
                 "php": ">=5.4"
             },
             "require-dev": {
-                "composer/composer": "^1.7",
+                "composer/composer": "^1.10.6 || ^2.0@rc",
                 "php-coveralls/php-coveralls": "^1.0",
                 "phpunit/phpunit": "^4.8.36|^6",
-                "squizlabs/php_codesniffer": "^2.8"
+                "squizlabs/php_codesniffer": "^3.5"
             },
             "bin": [
                 "scripts/dependency-licenses"
@@ -551,7 +684,7 @@
             "extra": {
                 "class": "ComposerTestScenarios\\Plugin",
                 "branch-alias": {
-                    "dev-master": "3.x-dev"
+                    "dev-main": "3.x-dev"
                 }
             },
             "autoload": {
@@ -570,7 +703,7 @@
                 }
             ],
             "description": "Useful scripts for testing multiple sets of Composer dependencies.",
-            "time": "2018-11-27T05:58:39+00:00"
+            "time": "2020-09-28T20:54:35+00:00"
         },
         {
             "name": "guzzle/guzzle",
@@ -929,27 +1062,28 @@
         },
         {
             "name": "phpdocumentor/reflection-docblock",
-            "version": "4.3.0",
+            "version": "4.3.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
-                "reference": "94fd0001232e47129dd3504189fa1c7225010d08"
+                "reference": "da3fd972d6bafd628114f7e7e036f45944b62e9c"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/94fd0001232e47129dd3504189fa1c7225010d08",
-                "reference": "94fd0001232e47129dd3504189fa1c7225010d08",
+                "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/da3fd972d6bafd628114f7e7e036f45944b62e9c",
+                "reference": "da3fd972d6bafd628114f7e7e036f45944b62e9c",
                 "shasum": ""
             },
             "require": {
                 "php": "^7.0",
-                "phpdocumentor/reflection-common": "^1.0.0",
-                "phpdocumentor/type-resolver": "^0.4.0",
+                "phpdocumentor/reflection-common": "^1.0.0 || ^2.0.0",
+                "phpdocumentor/type-resolver": "~0.4 || ^1.0.0",
                 "webmozart/assert": "^1.0"
             },
             "require-dev": {
-                "doctrine/instantiator": "~1.0.5",
+                "doctrine/instantiator": "^1.0.5",
                 "mockery/mockery": "^1.0",
+                "phpdocumentor/type-resolver": "0.4.*",
                 "phpunit/phpunit": "^6.4"
             },
             "type": "library",
@@ -976,29 +1110,29 @@
                 }
             ],
             "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
-            "time": "2017-11-30T07:14:17+00:00"
+            "time": "2019-12-28T18:55:12+00:00"
         },
         {
             "name": "phpdocumentor/type-resolver",
-            "version": "0.4.0",
+            "version": "0.5.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpDocumentor/TypeResolver.git",
-                "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7"
+                "reference": "cf842904952e64e703800d094cdf34e715a8a3ae"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7",
-                "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7",
+                "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/cf842904952e64e703800d094cdf34e715a8a3ae",
+                "reference": "cf842904952e64e703800d094cdf34e715a8a3ae",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.5 || ^7.0",
+                "php": "^7.0",
                 "phpdocumentor/reflection-common": "^1.0"
             },
             "require-dev": {
-                "mockery/mockery": "^0.9.4",
-                "phpunit/phpunit": "^5.2||^4.8.24"
+                "mockery/mockery": "^1.0",
+                "phpunit/phpunit": "^6.4"
             },
             "type": "library",
             "extra": {
@@ -1008,9 +1142,7 @@
             },
             "autoload": {
                 "psr-4": {
-                    "phpDocumentor\\Reflection\\": [
-                        "src/"
-                    ]
+                    "phpDocumentor\\Reflection\\": "src"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -1023,42 +1155,42 @@
                     "email": "me@mikevanriel.com"
                 }
             ],
-            "time": "2017-07-14T14:27:02+00:00"
+            "time": "2017-12-30T13:23:38+00:00"
         },
         {
             "name": "phpspec/prophecy",
-            "version": "1.8.0",
+            "version": "v1.10.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpspec/prophecy.git",
-                "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06"
+                "reference": "451c3cd1418cf640de218914901e51b064abb093"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpspec/prophecy/zipball/4ba436b55987b4bf311cb7c6ba82aa528aac0a06",
-                "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06",
+                "url": "https://api.github.com/repos/phpspec/prophecy/zipball/451c3cd1418cf640de218914901e51b064abb093",
+                "reference": "451c3cd1418cf640de218914901e51b064abb093",
                 "shasum": ""
             },
             "require": {
                 "doctrine/instantiator": "^1.0.2",
                 "php": "^5.3|^7.0",
-                "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0",
-                "sebastian/comparator": "^1.1|^2.0|^3.0",
-                "sebastian/recursion-context": "^1.0|^2.0|^3.0"
+                "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0",
+                "sebastian/comparator": "^1.2.3|^2.0|^3.0|^4.0",
+                "sebastian/recursion-context": "^1.0|^2.0|^3.0|^4.0"
             },
             "require-dev": {
-                "phpspec/phpspec": "^2.5|^3.2",
+                "phpspec/phpspec": "^2.5 || ^3.2",
                 "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.8.x-dev"
+                    "dev-master": "1.10.x-dev"
                 }
             },
             "autoload": {
-                "psr-0": {
-                    "Prophecy\\": "src/"
+                "psr-4": {
+                    "Prophecy\\": "src/Prophecy"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -1086,7 +1218,7 @@
                 "spy",
                 "stub"
             ],
-            "time": "2018-08-05T17:53:17+00:00"
+            "time": "2020-03-05T15:02:03+00:00"
         },
         {
             "name": "phpunit/php-code-coverage",
@@ -1335,20 +1467,21 @@
             "keywords": [
                 "tokenizer"
             ],
+            "abandoned": true,
             "time": "2017-11-27T05:48:46+00:00"
         },
         {
             "name": "phpunit/phpunit",
-            "version": "6.5.13",
+            "version": "6.5.14",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/phpunit.git",
-                "reference": "0973426fb012359b2f18d3bd1e90ef1172839693"
+                "reference": "bac23fe7ff13dbdb461481f706f0e9fe746334b7"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/0973426fb012359b2f18d3bd1e90ef1172839693",
-                "reference": "0973426fb012359b2f18d3bd1e90ef1172839693",
+                "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/bac23fe7ff13dbdb461481f706f0e9fe746334b7",
+                "reference": "bac23fe7ff13dbdb461481f706f0e9fe746334b7",
                 "shasum": ""
             },
             "require": {
@@ -1419,7 +1552,7 @@
                 "testing",
                 "xunit"
             ],
-            "time": "2018-09-08T15:10:43+00:00"
+            "time": "2019-02-01T05:22:47+00:00"
         },
         {
             "name": "phpunit/phpunit-mock-objects",
@@ -1478,6 +1611,7 @@
                 "mock",
                 "xunit"
             ],
+            "abandoned": true,
             "time": "2018-08-09T05:50:03+00:00"
         },
         {
@@ -1693,16 +1827,16 @@
         },
         {
             "name": "sebastian/exporter",
-            "version": "3.1.0",
+            "version": "3.1.2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/exporter.git",
-                "reference": "234199f4528de6d12aaa58b612e98f7d36adb937"
+                "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/234199f4528de6d12aaa58b612e98f7d36adb937",
-                "reference": "234199f4528de6d12aaa58b612e98f7d36adb937",
+                "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/68609e1261d215ea5b21b7987539cbfbe156ec3e",
+                "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e",
                 "shasum": ""
             },
             "require": {
@@ -1729,6 +1863,10 @@
                 "BSD-3-Clause"
             ],
             "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                },
                 {
                     "name": "Jeff Welch",
                     "email": "whatthejeff@gmail.com"
@@ -1737,17 +1875,13 @@
                     "name": "Volker Dusch",
                     "email": "github@wallbash.com"
                 },
-                {
-                    "name": "Bernhard Schussek",
-                    "email": "bschussek@2bepublished.at"
-                },
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de"
-                },
                 {
                     "name": "Adam Harvey",
                     "email": "aharvey@php.net"
+                },
+                {
+                    "name": "Bernhard Schussek",
+                    "email": "bschussek@gmail.com"
                 }
             ],
             "description": "Provides the functionality to export PHP variables for visualization",
@@ -1756,7 +1890,7 @@
                 "export",
                 "exporter"
             ],
-            "time": "2017-04-03T13:19:02+00:00"
+            "time": "2019-09-14T09:02:43+00:00"
         },
         {
             "name": "sebastian/global-state",
@@ -2119,16 +2253,16 @@
         },
         {
             "name": "symfony/config",
-            "version": "v3.4.21",
+            "version": "v3.4.45",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/config.git",
-                "reference": "17c5d8941eb75a03d19bc76a43757738632d87b3"
+                "reference": "d061a451ff6bc170c5454f4ac9b41ad2179e3960"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/config/zipball/17c5d8941eb75a03d19bc76a43757738632d87b3",
-                "reference": "17c5d8941eb75a03d19bc76a43757738632d87b3",
+                "url": "https://api.github.com/repos/symfony/config/zipball/d061a451ff6bc170c5454f4ac9b41ad2179e3960",
+                "reference": "d061a451ff6bc170c5454f4ac9b41ad2179e3960",
                 "shasum": ""
             },
             "require": {
@@ -2179,20 +2313,34 @@
             ],
             "description": "Symfony Config Component",
             "homepage": "https://symfony.com",
-            "time": "2019-01-01T13:45:19+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-02T16:06:40+00:00"
         },
         {
             "name": "symfony/filesystem",
-            "version": "v3.4.21",
+            "version": "v3.4.45",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/filesystem.git",
-                "reference": "c24ce3d18ccc9bb9d7e1d6ce9330fcc6061cafde"
+                "reference": "495646f13d051cc5a8f77a68b68313dc854080aa"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/filesystem/zipball/c24ce3d18ccc9bb9d7e1d6ce9330fcc6061cafde",
-                "reference": "c24ce3d18ccc9bb9d7e1d6ce9330fcc6061cafde",
+                "url": "https://api.github.com/repos/symfony/filesystem/zipball/495646f13d051cc5a8f77a68b68313dc854080aa",
+                "reference": "495646f13d051cc5a8f77a68b68313dc854080aa",
                 "shasum": ""
             },
             "require": {
@@ -2229,20 +2377,34 @@
             ],
             "description": "Symfony Filesystem Component",
             "homepage": "https://symfony.com",
-            "time": "2019-01-01T13:45:19+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-02T16:06:40+00:00"
         },
         {
             "name": "symfony/polyfill-ctype",
-            "version": "v1.10.0",
+            "version": "v1.18.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-ctype.git",
-                "reference": "e3d826245268269cd66f8326bd8bc066687b4a19"
+                "reference": "1c302646f6efc070cd46856e600e5e0684d6b454"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/e3d826245268269cd66f8326bd8bc066687b4a19",
-                "reference": "e3d826245268269cd66f8326bd8bc066687b4a19",
+                "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/1c302646f6efc070cd46856e600e5e0684d6b454",
+                "reference": "1c302646f6efc070cd46856e600e5e0684d6b454",
                 "shasum": ""
             },
             "require": {
@@ -2254,7 +2416,11 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.9-dev"
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
                 }
             },
             "autoload": {
@@ -2270,13 +2436,13 @@
                 "MIT"
             ],
             "authors": [
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                },
                 {
                     "name": "Gert de Pagter",
                     "email": "BackEndTea@gmail.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
                 }
             ],
             "description": "Symfony polyfill for ctype functions",
@@ -2287,20 +2453,34 @@
                 "polyfill",
                 "portable"
             ],
-            "time": "2018-08-06T14:22:27+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-14T12:35:20+00:00"
         },
         {
             "name": "symfony/stopwatch",
-            "version": "v3.4.21",
+            "version": "v3.4.45",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/stopwatch.git",
-                "reference": "af55d31cb58c5452d2c160655fa1968b872a8084"
+                "reference": "a7a98f40dcc382a332c3729a6d04b298ffbb8f1f"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/stopwatch/zipball/af55d31cb58c5452d2c160655fa1968b872a8084",
-                "reference": "af55d31cb58c5452d2c160655fa1968b872a8084",
+                "url": "https://api.github.com/repos/symfony/stopwatch/zipball/a7a98f40dcc382a332c3729a6d04b298ffbb8f1f",
+                "reference": "a7a98f40dcc382a332c3729a6d04b298ffbb8f1f",
                 "shasum": ""
             },
             "require": {
@@ -2336,20 +2516,34 @@
             ],
             "description": "Symfony Stopwatch Component",
             "homepage": "https://symfony.com",
-            "time": "2019-01-01T13:45:19+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-03-15T09:38:08+00:00"
         },
         {
             "name": "symfony/yaml",
-            "version": "v3.4.21",
+            "version": "v3.4.45",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/yaml.git",
-                "reference": "554a59a1ccbaac238a89b19c8e551a556fd0e2ea"
+                "reference": "ec3c2ac4d881a4684c1f0317d2107f1a4152bad9"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/yaml/zipball/554a59a1ccbaac238a89b19c8e551a556fd0e2ea",
-                "reference": "554a59a1ccbaac238a89b19c8e551a556fd0e2ea",
+                "url": "https://api.github.com/repos/symfony/yaml/zipball/ec3c2ac4d881a4684c1f0317d2107f1a4152bad9",
+                "reference": "ec3c2ac4d881a4684c1f0317d2107f1a4152bad9",
                 "shasum": ""
             },
             "require": {
@@ -2395,20 +2589,34 @@
             ],
             "description": "Symfony Yaml Component",
             "homepage": "https://symfony.com",
-            "time": "2019-01-01T13:45:19+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-18T15:58:55+00:00"
         },
         {
             "name": "theseer/tokenizer",
-            "version": "1.1.0",
+            "version": "1.1.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/theseer/tokenizer.git",
-                "reference": "cb2f008f3f05af2893a87208fe6a6c4985483f8b"
+                "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/theseer/tokenizer/zipball/cb2f008f3f05af2893a87208fe6a6c4985483f8b",
-                "reference": "cb2f008f3f05af2893a87208fe6a6c4985483f8b",
+                "url": "https://api.github.com/repos/theseer/tokenizer/zipball/11336f6f84e16a720dae9d8e6ed5019efa85a0f9",
+                "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9",
                 "shasum": ""
             },
             "require": {
@@ -2435,36 +2643,34 @@
                 }
             ],
             "description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
-            "time": "2017-04-07T12:08:54+00:00"
+            "time": "2019-06-13T22:48:21+00:00"
         },
         {
             "name": "webmozart/assert",
-            "version": "1.4.0",
+            "version": "1.9.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/webmozart/assert.git",
-                "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9"
+                "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/webmozart/assert/zipball/83e253c8e0be5b0257b881e1827274667c5c17a9",
-                "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9",
+                "url": "https://api.github.com/repos/webmozart/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389",
+                "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.3.3 || ^7.0",
+                "php": "^5.3.3 || ^7.0 || ^8.0",
                 "symfony/polyfill-ctype": "^1.8"
             },
+            "conflict": {
+                "phpstan/phpstan": "<0.12.20",
+                "vimeo/psalm": "<3.9.1"
+            },
             "require-dev": {
-                "phpunit/phpunit": "^4.6",
-                "sebastian/version": "^1.0.1"
+                "phpunit/phpunit": "^4.8.36 || ^7.5.13"
             },
             "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.3-dev"
-                }
-            },
             "autoload": {
                 "psr-4": {
                     "Webmozart\\Assert\\": "src/"
@@ -2486,7 +2692,7 @@
                 "check",
                 "validate"
             ],
-            "time": "2018-12-25T11:19:39+00:00"
+            "time": "2020-07-08T17:02:28+00:00"
         }
     ],
     "aliases": [],
@@ -2500,5 +2706,6 @@
     "platform-dev": [],
     "platform-overrides": {
         "php": "7.0.8"
-    }
+    },
+    "plugin-api-version": "1.1.0"
 }
diff --git a/vendor/consolidation/output-formatters/.scenarios.lock/finder5/.gitignore b/vendor/consolidation/output-formatters/.scenarios.lock/finder5/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..5657f6ea7d574e423dc2c297e2e19a9dbd7a7170
--- /dev/null
+++ b/vendor/consolidation/output-formatters/.scenarios.lock/finder5/.gitignore
@@ -0,0 +1 @@
+vendor
\ No newline at end of file
diff --git a/vendor/consolidation/output-formatters/.scenarios.lock/finder5/composer.json b/vendor/consolidation/output-formatters/.scenarios.lock/finder5/composer.json
new file mode 100644
index 0000000000000000000000000000000000000000..16c532a0c13aa6b59db1322cea852268e91dbdd3
--- /dev/null
+++ b/vendor/consolidation/output-formatters/.scenarios.lock/finder5/composer.json
@@ -0,0 +1,66 @@
+{
+    "name": "consolidation/output-formatters",
+    "description": "Format text by applying transformations provided by plug-in formatters.",
+    "license": "MIT",
+    "authors": [
+        {
+            "name": "Greg Anderson",
+            "email": "greg.1.anderson@greenknowe.org"
+        }
+    ],
+    "autoload": {
+        "psr-4": {
+            "Consolidation\\OutputFormatters\\": "../../src"
+        }
+    },
+    "autoload-dev": {
+        "psr-4": {
+            "Consolidation\\TestUtils\\": "../../tests/src"
+        }
+    },
+    "require": {
+        "symfony/finder": "^5",
+        "php": ">=5.4.0",
+        "dflydev/dot-access-data": "^1.1.0",
+        "symfony/console": "^2.8|^3|^4"
+    },
+    "require-dev": {
+        "g1a/composer-test-scenarios": "^3",
+        "php-coveralls/php-coveralls": "^1",
+        "phpunit/phpunit": "^5.7.27",
+        "squizlabs/php_codesniffer": "^2.7",
+        "symfony/var-dumper": "^2.8|^3|^4",
+        "victorjonsson/markdowndocs": "^1.3"
+    },
+    "suggest": {
+        "symfony/var-dumper": "For using the var_dump formatter"
+    },
+    "config": {
+        "platform": {
+            "php": "7.2.5"
+        },
+        "optimize-autoloader": true,
+        "sort-packages": true,
+        "vendor-dir": "../../vendor"
+    },
+    "scripts": {
+        "api": "phpdoc-md generate src > docs/api.md",
+        "cs": "phpcs --standard=PSR2 -n src",
+        "cbf": "phpcbf --standard=PSR2 -n src",
+        "unit": "phpunit --colors=always",
+        "lint": [
+            "find src -name '*.php' -print0 | xargs -0 -n1 php -l",
+            "find tests/src -name '*.php' -print0 | xargs -0 -n1 php -l"
+        ],
+        "test": [
+            "@lint",
+            "@unit",
+            "@cs"
+        ]
+    },
+    "extra": {
+        "branch-alias": {
+            "dev-master": "3.x-dev"
+        }
+    }
+}
diff --git a/vendor/drupal-composer/drupal-scaffold/.scenarios.lock/phpunit4/composer.lock b/vendor/consolidation/output-formatters/.scenarios.lock/finder5/composer.lock
similarity index 50%
rename from vendor/drupal-composer/drupal-scaffold/.scenarios.lock/phpunit4/composer.lock
rename to vendor/consolidation/output-formatters/.scenarios.lock/finder5/composer.lock
index 084a62b1e544d4725b2c8fa9c671ccc45b5fc85b..ed32d49a2049dd55c8827b7e7891aa1ee9340c74 100644
--- a/vendor/drupal-composer/drupal-scaffold/.scenarios.lock/phpunit4/composer.lock
+++ b/vendor/consolidation/output-formatters/.scenarios.lock/finder5/composer.lock
@@ -4,38 +4,34 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "This file is @generated automatically"
     ],
-    "content-hash": "445ab29fa63d93c2f4ff7da62f90de16",
+    "content-hash": "332b2dcb257e6b06110fe52b229c3f16",
     "packages": [
         {
-            "name": "composer/semver",
-            "version": "1.4.2",
+            "name": "dflydev/dot-access-data",
+            "version": "v1.1.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/composer/semver.git",
-                "reference": "c7cb9a2095a074d131b65a8a0cd294479d785573"
+                "url": "https://github.com/dflydev/dflydev-dot-access-data.git",
+                "reference": "3fbd874921ab2c041e899d044585a2ab9795df8a"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/composer/semver/zipball/c7cb9a2095a074d131b65a8a0cd294479d785573",
-                "reference": "c7cb9a2095a074d131b65a8a0cd294479d785573",
+                "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/3fbd874921ab2c041e899d044585a2ab9795df8a",
+                "reference": "3fbd874921ab2c041e899d044585a2ab9795df8a",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.3.2 || ^7.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^4.5 || ^5.0.5",
-                "phpunit/phpunit-mock-objects": "2.3.0 || ^3.0"
+                "php": ">=5.3.2"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.x-dev"
+                    "dev-master": "1.0-dev"
                 }
             },
             "autoload": {
-                "psr-4": {
-                    "Composer\\Semver\\": "src"
+                "psr-0": {
+                    "Dflydev\\DotAccessData": "src"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -44,65 +40,57 @@
             ],
             "authors": [
                 {
-                    "name": "Nils Adermann",
-                    "email": "naderman@naderman.de",
-                    "homepage": "http://www.naderman.de"
+                    "name": "Dragonfly Development Inc.",
+                    "email": "info@dflydev.com",
+                    "homepage": "http://dflydev.com"
                 },
                 {
-                    "name": "Jordi Boggiano",
-                    "email": "j.boggiano@seld.be",
-                    "homepage": "http://seld.be"
+                    "name": "Beau Simensen",
+                    "email": "beau@dflydev.com",
+                    "homepage": "http://beausimensen.com"
                 },
                 {
-                    "name": "Rob Bast",
-                    "email": "rob.bast@gmail.com",
-                    "homepage": "http://robbast.nl"
+                    "name": "Carlos Frutos",
+                    "email": "carlos@kiwing.it",
+                    "homepage": "https://github.com/cfrutos"
                 }
             ],
-            "description": "Semver library that offers utilities, version constraint parsing and validation.",
+            "description": "Given a deep data structure, access data by dot notation.",
+            "homepage": "https://github.com/dflydev/dflydev-dot-access-data",
             "keywords": [
-                "semantic",
-                "semver",
-                "validation",
-                "versioning"
+                "access",
+                "data",
+                "dot",
+                "notation"
             ],
-            "time": "2016-08-30T16:08:34+00:00"
-        }
-    ],
-    "packages-dev": [
+            "time": "2017-01-20T21:14:22+00:00"
+        },
         {
-            "name": "composer/ca-bundle",
-            "version": "1.1.1",
+            "name": "psr/container",
+            "version": "1.0.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/composer/ca-bundle.git",
-                "reference": "d2c0a83b7533d6912e8d516756ebd34f893e9169"
+                "url": "https://github.com/php-fig/container.git",
+                "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/composer/ca-bundle/zipball/d2c0a83b7533d6912e8d516756ebd34f893e9169",
-                "reference": "d2c0a83b7533d6912e8d516756ebd34f893e9169",
+                "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
+                "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
                 "shasum": ""
             },
             "require": {
-                "ext-openssl": "*",
-                "ext-pcre": "*",
-                "php": "^5.3.2 || ^7.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5",
-                "psr/log": "^1.0",
-                "symfony/process": "^2.5 || ^3.0 || ^4.0"
+                "php": ">=5.3.0"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.x-dev"
+                    "dev-master": "1.0.x-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Composer\\CaBundle\\": "src"
+                    "Psr\\Container\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -111,187 +99,442 @@
             ],
             "authors": [
                 {
-                    "name": "Jordi Boggiano",
-                    "email": "j.boggiano@seld.be",
-                    "homepage": "http://seld.be"
+                    "name": "PHP-FIG",
+                    "homepage": "http://www.php-fig.org/"
                 }
             ],
-            "description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.",
+            "description": "Common Container Interface (PHP FIG PSR-11)",
+            "homepage": "https://github.com/php-fig/container",
             "keywords": [
-                "cabundle",
-                "cacert",
-                "certificate",
-                "ssl",
-                "tls"
+                "PSR-11",
+                "container",
+                "container-interface",
+                "container-interop",
+                "psr"
             ],
-            "time": "2018-03-29T19:57:20+00:00"
+            "time": "2017-02-14T16:28:37+00:00"
         },
         {
-            "name": "composer/composer",
-            "version": "dev-master",
+            "name": "symfony/console",
+            "version": "v4.4.15",
             "source": {
                 "type": "git",
-                "url": "https://github.com/composer/composer.git",
-                "reference": "837ad7c14e8ce364296e0d0600d04c415b6e359d"
+                "url": "https://github.com/symfony/console.git",
+                "reference": "90933b39c7b312fc3ceaa1ddeac7eb48cb953124"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/composer/composer/zipball/837ad7c14e8ce364296e0d0600d04c415b6e359d",
-                "reference": "837ad7c14e8ce364296e0d0600d04c415b6e359d",
+                "url": "https://api.github.com/repos/symfony/console/zipball/90933b39c7b312fc3ceaa1ddeac7eb48cb953124",
+                "reference": "90933b39c7b312fc3ceaa1ddeac7eb48cb953124",
                 "shasum": ""
             },
             "require": {
-                "composer/ca-bundle": "^1.0",
-                "composer/semver": "^1.0",
-                "composer/spdx-licenses": "^1.2",
-                "composer/xdebug-handler": "^1.1",
-                "justinrainbow/json-schema": "^3.0 || ^4.0 || ^5.0",
-                "php": "^5.3.2 || ^7.0",
-                "psr/log": "^1.0",
-                "seld/jsonlint": "^1.4",
-                "seld/phar-utils": "^1.0",
-                "symfony/console": "^2.7 || ^3.0 || ^4.0",
-                "symfony/filesystem": "^2.7 || ^3.0 || ^4.0",
-                "symfony/finder": "^2.7 || ^3.0 || ^4.0",
-                "symfony/process": "^2.7 || ^3.0 || ^4.0"
+                "php": ">=7.1.3",
+                "symfony/polyfill-mbstring": "~1.0",
+                "symfony/polyfill-php73": "^1.8",
+                "symfony/polyfill-php80": "^1.15",
+                "symfony/service-contracts": "^1.1|^2"
             },
             "conflict": {
-                "symfony/console": "2.8.38"
+                "symfony/dependency-injection": "<3.4",
+                "symfony/event-dispatcher": "<4.3|>=5",
+                "symfony/lock": "<4.4",
+                "symfony/process": "<3.3"
+            },
+            "provide": {
+                "psr/log-implementation": "1.0"
             },
             "require-dev": {
-                "phpunit/phpunit": "^4.8.35 || ^5.7",
-                "phpunit/phpunit-mock-objects": "^2.3 || ^3.0"
+                "psr/log": "~1.0",
+                "symfony/config": "^3.4|^4.0|^5.0",
+                "symfony/dependency-injection": "^3.4|^4.0|^5.0",
+                "symfony/event-dispatcher": "^4.3",
+                "symfony/lock": "^4.4|^5.0",
+                "symfony/process": "^3.4|^4.0|^5.0",
+                "symfony/var-dumper": "^4.3|^5.0"
             },
             "suggest": {
-                "ext-openssl": "Enabling the openssl extension allows you to access https URLs for repositories and packages",
-                "ext-zip": "Enabling the zip extension allows you to unzip archives",
-                "ext-zlib": "Allow gzip compression of HTTP requests"
+                "psr/log": "For using the console logger",
+                "symfony/event-dispatcher": "",
+                "symfony/lock": "",
+                "symfony/process": ""
             },
-            "bin": [
-                "bin/composer"
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "4.4-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Console\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony Console Component",
+            "homepage": "https://symfony.com",
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
             ],
+            "time": "2020-09-15T07:58:55+00:00"
+        },
+        {
+            "name": "symfony/finder",
+            "version": "v5.1.7",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/finder.git",
+                "reference": "2c3ba7ad6884e6c4451ce2340e2dc23f6fa3e0d8"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/finder/zipball/2c3ba7ad6884e6c4451ce2340e2dc23f6fa3e0d8",
+                "reference": "2c3ba7ad6884e6c4451ce2340e2dc23f6fa3e0d8",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.2.5"
+            },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.7-dev"
+                    "dev-master": "5.1-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Composer\\": "src/Composer"
+                    "Symfony\\Component\\Finder\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony Finder Component",
+            "homepage": "https://symfony.com",
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-02T16:23:27+00:00"
+        },
+        {
+            "name": "symfony/polyfill-mbstring",
+            "version": "v1.18.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-mbstring.git",
+                "reference": "a6977d63bf9a0ad4c65cd352709e230876f9904a"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/a6977d63bf9a0ad4c65cd352709e230876f9904a",
+                "reference": "a6977d63bf9a0ad4c65cd352709e230876f9904a",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "suggest": {
+                "ext-mbstring": "For best performance"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
                 }
             },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Polyfill\\Mbstring\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
+                ]
+            },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
                 "MIT"
             ],
             "authors": [
                 {
-                    "name": "Nils Adermann",
-                    "email": "naderman@naderman.de",
-                    "homepage": "http://www.naderman.de"
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
                 },
                 {
-                    "name": "Jordi Boggiano",
-                    "email": "j.boggiano@seld.be",
-                    "homepage": "http://seld.be"
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
                 }
             ],
-            "description": "Composer helps you declare, manage and install dependencies of PHP projects, ensuring you have the right stack everywhere.",
-            "homepage": "https://getcomposer.org/",
+            "description": "Symfony polyfill for the Mbstring extension",
+            "homepage": "https://symfony.com",
             "keywords": [
-                "autoload",
-                "dependency",
-                "package"
+                "compatibility",
+                "mbstring",
+                "polyfill",
+                "portable",
+                "shim"
             ],
-            "time": "2018-06-07T09:15:18+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-14T12:35:20+00:00"
         },
         {
-            "name": "composer/spdx-licenses",
-            "version": "1.4.0",
+            "name": "symfony/polyfill-php73",
+            "version": "v1.18.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/composer/spdx-licenses.git",
-                "reference": "cb17687e9f936acd7e7245ad3890f953770dec1b"
+                "url": "https://github.com/symfony/polyfill-php73.git",
+                "reference": "fffa1a52a023e782cdcc221d781fe1ec8f87fcca"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/composer/spdx-licenses/zipball/cb17687e9f936acd7e7245ad3890f953770dec1b",
-                "reference": "cb17687e9f936acd7e7245ad3890f953770dec1b",
+                "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fffa1a52a023e782cdcc221d781fe1ec8f87fcca",
+                "reference": "fffa1a52a023e782cdcc221d781fe1ec8f87fcca",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.3.2 || ^7.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5",
-                "phpunit/phpunit-mock-objects": "2.3.0 || ^3.0"
+                "php": ">=5.3.3"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.x-dev"
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Composer\\Spdx\\": "src"
+                    "Symfony\\Polyfill\\Php73\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
+                ],
+                "classmap": [
+                    "Resources/stubs"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-14T12:35:20+00:00"
+        },
+        {
+            "name": "symfony/polyfill-php80",
+            "version": "v1.18.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-php80.git",
+                "reference": "d87d5766cbf48d72388a9f6b85f280c8ad51f981"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/d87d5766cbf48d72388a9f6b85f280c8ad51f981",
+                "reference": "d87d5766cbf48d72388a9f6b85f280c8ad51f981",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.0.8"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
                 }
             },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Polyfill\\Php80\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
+                ],
+                "classmap": [
+                    "Resources/stubs"
+                ]
+            },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
                 "MIT"
             ],
             "authors": [
                 {
-                    "name": "Nils Adermann",
-                    "email": "naderman@naderman.de",
-                    "homepage": "http://www.naderman.de"
+                    "name": "Ion Bazan",
+                    "email": "ion.bazan@gmail.com"
                 },
                 {
-                    "name": "Jordi Boggiano",
-                    "email": "j.boggiano@seld.be",
-                    "homepage": "http://seld.be"
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
                 },
                 {
-                    "name": "Rob Bast",
-                    "email": "rob.bast@gmail.com",
-                    "homepage": "http://robbast.nl"
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
                 }
             ],
-            "description": "SPDX licenses list and validation library.",
+            "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions",
+            "homepage": "https://symfony.com",
             "keywords": [
-                "license",
-                "spdx",
-                "validator"
+                "compatibility",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
             ],
-            "time": "2018-04-30T10:33:04+00:00"
+            "time": "2020-07-14T12:35:20+00:00"
         },
         {
-            "name": "composer/xdebug-handler",
-            "version": "1.1.0",
+            "name": "symfony/service-contracts",
+            "version": "v2.2.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/composer/xdebug-handler.git",
-                "reference": "c919dc6c62e221fc6406f861ea13433c0aa24f08"
+                "url": "https://github.com/symfony/service-contracts.git",
+                "reference": "d15da7ba4957ffb8f1747218be9e1a121fd298a1"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/c919dc6c62e221fc6406f861ea13433c0aa24f08",
-                "reference": "c919dc6c62e221fc6406f861ea13433c0aa24f08",
+                "url": "https://api.github.com/repos/symfony/service-contracts/zipball/d15da7ba4957ffb8f1747218be9e1a121fd298a1",
+                "reference": "d15da7ba4957ffb8f1747218be9e1a121fd298a1",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.3.2 || ^7.0",
-                "psr/log": "^1.0"
+                "php": ">=7.2.5",
+                "psr/container": "^1.0"
             },
-            "require-dev": {
-                "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5"
+            "suggest": {
+                "symfony/service-implementation": ""
             },
             "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.2-dev"
+                },
+                "thanks": {
+                    "name": "symfony/contracts",
+                    "url": "https://github.com/symfony/contracts"
+                }
+            },
             "autoload": {
                 "psr-4": {
-                    "Composer\\XdebugHandler\\": "src"
+                    "Symfony\\Contracts\\Service\\": ""
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -300,45 +543,72 @@
             ],
             "authors": [
                 {
-                    "name": "John Stevenson",
-                    "email": "john-stevenson@blueyonder.co.uk"
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
                 }
             ],
-            "description": "Restarts a process without xdebug.",
+            "description": "Generic abstractions related to writing services",
+            "homepage": "https://symfony.com",
             "keywords": [
-                "Xdebug",
-                "performance"
+                "abstractions",
+                "contracts",
+                "decoupling",
+                "interfaces",
+                "interoperability",
+                "standards"
             ],
-            "time": "2018-04-11T15:42:36+00:00"
-        },
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-07T11:33:47+00:00"
+        }
+    ],
+    "packages-dev": [
         {
             "name": "doctrine/instantiator",
-            "version": "1.0.5",
+            "version": "1.3.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/doctrine/instantiator.git",
-                "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d"
+                "reference": "f350df0268e904597e3bd9c4685c53e0e333feea"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d",
-                "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d",
+                "url": "https://api.github.com/repos/doctrine/instantiator/zipball/f350df0268e904597e3bd9c4685c53e0e333feea",
+                "reference": "f350df0268e904597e3bd9c4685c53e0e333feea",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3,<8.0-DEV"
+                "php": "^7.1 || ^8.0"
             },
             "require-dev": {
-                "athletic/athletic": "~0.1.8",
+                "doctrine/coding-standard": "^6.0",
                 "ext-pdo": "*",
                 "ext-phar": "*",
-                "phpunit/phpunit": "~4.0",
-                "squizlabs/php_codesniffer": "~2.0"
+                "phpbench/phpbench": "^0.13",
+                "phpstan/phpstan-phpunit": "^0.11",
+                "phpstan/phpstan-shim": "^0.11",
+                "phpunit/phpunit": "^7.0"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.0.x-dev"
+                    "dev-master": "1.2.x-dev"
                 }
             },
             "autoload": {
@@ -358,33 +628,66 @@
                 }
             ],
             "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
-            "homepage": "https://github.com/doctrine/instantiator",
+            "homepage": "https://www.doctrine-project.org/projects/instantiator.html",
             "keywords": [
                 "constructor",
                 "instantiate"
             ],
-            "time": "2015-06-14T21:17:01+00:00"
+            "funding": [
+                {
+                    "url": "https://www.doctrine-project.org/sponsorship.html",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://www.patreon.com/phpdoctrine",
+                    "type": "patreon"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-05-29T17:27:14+00:00"
         },
         {
             "name": "g1a/composer-test-scenarios",
-            "version": "2.1.0",
+            "version": "3.2.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/g1a/composer-test-scenarios.git",
-                "reference": "4c2b990712dbcb87a0ab618e46f908c731c3a0bb"
+                "reference": "e7394206d845fd593d325440507fb940bef8cb62"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/g1a/composer-test-scenarios/zipball/4c2b990712dbcb87a0ab618e46f908c731c3a0bb",
-                "reference": "4c2b990712dbcb87a0ab618e46f908c731c3a0bb",
+                "url": "https://api.github.com/repos/g1a/composer-test-scenarios/zipball/e7394206d845fd593d325440507fb940bef8cb62",
+                "reference": "e7394206d845fd593d325440507fb940bef8cb62",
                 "shasum": ""
             },
+            "require": {
+                "composer-plugin-api": "^1.0.0 || ^2.0.0",
+                "php": ">=5.4"
+            },
+            "require-dev": {
+                "composer/composer": "^1.10.6 || ^2.0@rc",
+                "php-coveralls/php-coveralls": "^1.0",
+                "phpunit/phpunit": "^4.8.36|^6",
+                "squizlabs/php_codesniffer": "^3.5"
+            },
             "bin": [
-                "scripts/create-scenario",
-                "scripts/dependency-licenses",
-                "scripts/install-scenario"
+                "scripts/dependency-licenses"
             ],
-            "type": "library",
+            "type": "composer-plugin",
+            "extra": {
+                "class": "ComposerTestScenarios\\Plugin",
+                "branch-alias": {
+                    "dev-main": "3.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "ComposerTestScenarios\\": "src/"
+                }
+            },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
                 "MIT"
@@ -396,42 +699,70 @@
                 }
             ],
             "description": "Useful scripts for testing multiple sets of Composer dependencies.",
-            "time": "2018-06-10T21:56:28+00:00"
+            "time": "2020-09-28T20:54:35+00:00"
         },
         {
-            "name": "justinrainbow/json-schema",
-            "version": "5.2.7",
+            "name": "guzzle/guzzle",
+            "version": "v3.8.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/justinrainbow/json-schema.git",
-                "reference": "8560d4314577199ba51bf2032f02cd1315587c23"
+                "url": "https://github.com/guzzle/guzzle.git",
+                "reference": "4de0618a01b34aa1c8c33a3f13f396dcd3882eba"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/8560d4314577199ba51bf2032f02cd1315587c23",
-                "reference": "8560d4314577199ba51bf2032f02cd1315587c23",
+                "url": "https://api.github.com/repos/guzzle/guzzle/zipball/4de0618a01b34aa1c8c33a3f13f396dcd3882eba",
+                "reference": "4de0618a01b34aa1c8c33a3f13f396dcd3882eba",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3"
+                "ext-curl": "*",
+                "php": ">=5.3.3",
+                "symfony/event-dispatcher": ">=2.1"
+            },
+            "replace": {
+                "guzzle/batch": "self.version",
+                "guzzle/cache": "self.version",
+                "guzzle/common": "self.version",
+                "guzzle/http": "self.version",
+                "guzzle/inflection": "self.version",
+                "guzzle/iterator": "self.version",
+                "guzzle/log": "self.version",
+                "guzzle/parser": "self.version",
+                "guzzle/plugin": "self.version",
+                "guzzle/plugin-async": "self.version",
+                "guzzle/plugin-backoff": "self.version",
+                "guzzle/plugin-cache": "self.version",
+                "guzzle/plugin-cookie": "self.version",
+                "guzzle/plugin-curlauth": "self.version",
+                "guzzle/plugin-error-response": "self.version",
+                "guzzle/plugin-history": "self.version",
+                "guzzle/plugin-log": "self.version",
+                "guzzle/plugin-md5": "self.version",
+                "guzzle/plugin-mock": "self.version",
+                "guzzle/plugin-oauth": "self.version",
+                "guzzle/service": "self.version",
+                "guzzle/stream": "self.version"
             },
             "require-dev": {
-                "friendsofphp/php-cs-fixer": "^2.1",
-                "json-schema/json-schema-test-suite": "1.2.0",
-                "phpunit/phpunit": "^4.8.35"
+                "doctrine/cache": "*",
+                "monolog/monolog": "1.*",
+                "phpunit/phpunit": "3.7.*",
+                "psr/log": "1.0.*",
+                "symfony/class-loader": "*",
+                "zendframework/zend-cache": "<2.3",
+                "zendframework/zend-log": "<2.3"
             },
-            "bin": [
-                "bin/validate-json"
-            ],
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "5.0.x-dev"
+                    "dev-master": "3.8-dev"
                 }
             },
             "autoload": {
-                "psr-4": {
-                    "JsonSchema\\": "src/JsonSchema/"
+                "psr-0": {
+                    "Guzzle": "src/",
+                    "Guzzle\\Tests": "tests/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -440,61 +771,170 @@
             ],
             "authors": [
                 {
-                    "name": "Bruno Prieto Reis",
-                    "email": "bruno.p.reis@gmail.com"
+                    "name": "Michael Dowling",
+                    "email": "mtdowling@gmail.com",
+                    "homepage": "https://github.com/mtdowling"
                 },
                 {
-                    "name": "Justin Rainbow",
-                    "email": "justin.rainbow@gmail.com"
+                    "name": "Guzzle Community",
+                    "homepage": "https://github.com/guzzle/guzzle/contributors"
+                }
+            ],
+            "description": "Guzzle is a PHP HTTP client library and framework for building RESTful web service clients",
+            "homepage": "http://guzzlephp.org/",
+            "keywords": [
+                "client",
+                "curl",
+                "framework",
+                "http",
+                "http client",
+                "rest",
+                "web service"
+            ],
+            "abandoned": "guzzlehttp/guzzle",
+            "time": "2014-01-28T22:29:15+00:00"
+        },
+        {
+            "name": "myclabs/deep-copy",
+            "version": "1.10.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/myclabs/DeepCopy.git",
+                "reference": "969b211f9a51aa1f6c01d1d2aef56d3bd91598e5"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/969b211f9a51aa1f6c01d1d2aef56d3bd91598e5",
+                "reference": "969b211f9a51aa1f6c01d1d2aef56d3bd91598e5",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.1 || ^8.0"
+            },
+            "replace": {
+                "myclabs/deep-copy": "self.version"
+            },
+            "require-dev": {
+                "doctrine/collections": "^1.0",
+                "doctrine/common": "^2.6",
+                "phpunit/phpunit": "^7.1"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "DeepCopy\\": "src/DeepCopy/"
                 },
+                "files": [
+                    "src/DeepCopy/deep_copy.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "Create deep copies (clones) of your objects",
+            "keywords": [
+                "clone",
+                "copy",
+                "duplicate",
+                "object",
+                "object graph"
+            ],
+            "funding": [
                 {
-                    "name": "Igor Wiedler",
-                    "email": "igor@wiedler.ch"
-                },
+                    "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-06-29T13:22:24+00:00"
+        },
+        {
+            "name": "php-coveralls/php-coveralls",
+            "version": "v1.1.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/php-coveralls/php-coveralls.git",
+                "reference": "37f8f83fe22224eb9d9c6d593cdeb33eedd2a9ad"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/php-coveralls/php-coveralls/zipball/37f8f83fe22224eb9d9c6d593cdeb33eedd2a9ad",
+                "reference": "37f8f83fe22224eb9d9c6d593cdeb33eedd2a9ad",
+                "shasum": ""
+            },
+            "require": {
+                "ext-json": "*",
+                "ext-simplexml": "*",
+                "guzzle/guzzle": "^2.8 || ^3.0",
+                "php": "^5.3.3 || ^7.0",
+                "psr/log": "^1.0",
+                "symfony/config": "^2.1 || ^3.0 || ^4.0",
+                "symfony/console": "^2.1 || ^3.0 || ^4.0",
+                "symfony/stopwatch": "^2.0 || ^3.0 || ^4.0",
+                "symfony/yaml": "^2.0 || ^3.0 || ^4.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^4.8.35 || ^5.4.3 || ^6.0"
+            },
+            "suggest": {
+                "symfony/http-kernel": "Allows Symfony integration"
+            },
+            "bin": [
+                "bin/coveralls"
+            ],
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Satooshi\\": "src/Satooshi/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
                 {
-                    "name": "Robert Schönthal",
-                    "email": "seroscho@googlemail.com"
+                    "name": "Kitamura Satoshi",
+                    "email": "with.no.parachute@gmail.com",
+                    "homepage": "https://www.facebook.com/satooshi.jp"
                 }
             ],
-            "description": "A library to validate a json schema.",
-            "homepage": "https://github.com/justinrainbow/json-schema",
+            "description": "PHP client library for Coveralls API",
+            "homepage": "https://github.com/php-coveralls/php-coveralls",
             "keywords": [
-                "json",
-                "schema"
+                "ci",
+                "coverage",
+                "github",
+                "test"
             ],
-            "time": "2018-02-14T22:26:30+00:00"
+            "time": "2017-12-06T23:17:56+00:00"
         },
         {
             "name": "phpdocumentor/reflection-common",
-            "version": "1.0.1",
+            "version": "2.2.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpDocumentor/ReflectionCommon.git",
-                "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6"
+                "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6",
-                "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6",
+                "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b",
+                "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.5"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^4.6"
+                "php": "^7.2 || ^8.0"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.0.x-dev"
+                    "dev-2.x": "2.x-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "phpDocumentor\\Reflection\\": [
-                        "src"
-                    ]
+                    "phpDocumentor\\Reflection\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -516,38 +956,41 @@
                 "reflection",
                 "static analysis"
             ],
-            "time": "2017-09-11T18:02:19+00:00"
+            "time": "2020-06-27T09:03:43+00:00"
         },
         {
             "name": "phpdocumentor/reflection-docblock",
-            "version": "3.2.2",
+            "version": "5.2.2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
-                "reference": "4aada1f93c72c35e22fb1383b47fee43b8f1d157"
+                "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/4aada1f93c72c35e22fb1383b47fee43b8f1d157",
-                "reference": "4aada1f93c72c35e22fb1383b47fee43b8f1d157",
+                "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/069a785b2141f5bcf49f3e353548dc1cce6df556",
+                "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.5",
-                "phpdocumentor/reflection-common": "^1.0@dev",
-                "phpdocumentor/type-resolver": "^0.3.0",
-                "webmozart/assert": "^1.0"
+                "ext-filter": "*",
+                "php": "^7.2 || ^8.0",
+                "phpdocumentor/reflection-common": "^2.2",
+                "phpdocumentor/type-resolver": "^1.3",
+                "webmozart/assert": "^1.9.1"
             },
             "require-dev": {
-                "mockery/mockery": "^0.9.4",
-                "phpunit/phpunit": "^4.4"
+                "mockery/mockery": "~1.3.2"
             },
             "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "5.x-dev"
+                }
+            },
             "autoload": {
                 "psr-4": {
-                    "phpDocumentor\\Reflection\\": [
-                        "src/"
-                    ]
+                    "phpDocumentor\\Reflection\\": "src"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -558,44 +1001,45 @@
                 {
                     "name": "Mike van Riel",
                     "email": "me@mikevanriel.com"
+                },
+                {
+                    "name": "Jaap van Otterdijk",
+                    "email": "account@ijaap.nl"
                 }
             ],
             "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
-            "time": "2017-08-08T06:39:58+00:00"
+            "time": "2020-09-03T19:13:55+00:00"
         },
         {
             "name": "phpdocumentor/type-resolver",
-            "version": "0.3.0",
+            "version": "1.4.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpDocumentor/TypeResolver.git",
-                "reference": "fb3933512008d8162b3cdf9e18dba9309b7c3773"
+                "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/fb3933512008d8162b3cdf9e18dba9309b7c3773",
-                "reference": "fb3933512008d8162b3cdf9e18dba9309b7c3773",
+                "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0",
+                "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.5 || ^7.0",
-                "phpdocumentor/reflection-common": "^1.0"
+                "php": "^7.2 || ^8.0",
+                "phpdocumentor/reflection-common": "^2.0"
             },
             "require-dev": {
-                "mockery/mockery": "^0.9.4",
-                "phpunit/phpunit": "^5.2||^4.8.24"
+                "ext-tokenizer": "*"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.0.x-dev"
+                    "dev-1.x": "1.x-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "phpDocumentor\\Reflection\\": [
-                        "src/"
-                    ]
+                    "phpDocumentor\\Reflection\\": "src"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -608,42 +1052,43 @@
                     "email": "me@mikevanriel.com"
                 }
             ],
-            "time": "2017-06-03T08:32:36+00:00"
+            "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
+            "time": "2020-09-17T18:55:26+00:00"
         },
         {
             "name": "phpspec/prophecy",
-            "version": "1.7.6",
+            "version": "v1.10.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpspec/prophecy.git",
-                "reference": "33a7e3c4fda54e912ff6338c48823bd5c0f0b712"
+                "reference": "451c3cd1418cf640de218914901e51b064abb093"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpspec/prophecy/zipball/33a7e3c4fda54e912ff6338c48823bd5c0f0b712",
-                "reference": "33a7e3c4fda54e912ff6338c48823bd5c0f0b712",
+                "url": "https://api.github.com/repos/phpspec/prophecy/zipball/451c3cd1418cf640de218914901e51b064abb093",
+                "reference": "451c3cd1418cf640de218914901e51b064abb093",
                 "shasum": ""
             },
             "require": {
                 "doctrine/instantiator": "^1.0.2",
                 "php": "^5.3|^7.0",
-                "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0",
-                "sebastian/comparator": "^1.1|^2.0|^3.0",
-                "sebastian/recursion-context": "^1.0|^2.0|^3.0"
+                "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0",
+                "sebastian/comparator": "^1.2.3|^2.0|^3.0|^4.0",
+                "sebastian/recursion-context": "^1.0|^2.0|^3.0|^4.0"
             },
             "require-dev": {
-                "phpspec/phpspec": "^2.5|^3.2",
-                "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5"
+                "phpspec/phpspec": "^2.5 || ^3.2",
+                "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.7.x-dev"
+                    "dev-master": "1.10.x-dev"
                 }
             },
             "autoload": {
-                "psr-0": {
-                    "Prophecy\\": "src/"
+                "psr-4": {
+                    "Prophecy\\": "src/Prophecy"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -671,43 +1116,44 @@
                 "spy",
                 "stub"
             ],
-            "time": "2018-04-18T13:57:24+00:00"
+            "time": "2020-03-05T15:02:03+00:00"
         },
         {
             "name": "phpunit/php-code-coverage",
-            "version": "2.2.4",
+            "version": "4.0.8",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
-                "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979"
+                "reference": "ef7b2f56815df854e66ceaee8ebe9393ae36a40d"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/eabf68b476ac7d0f73793aada060f1c1a9bf8979",
-                "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/ef7b2f56815df854e66ceaee8ebe9393ae36a40d",
+                "reference": "ef7b2f56815df854e66ceaee8ebe9393ae36a40d",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3",
-                "phpunit/php-file-iterator": "~1.3",
-                "phpunit/php-text-template": "~1.2",
-                "phpunit/php-token-stream": "~1.3",
-                "sebastian/environment": "^1.3.2",
-                "sebastian/version": "~1.0"
+                "ext-dom": "*",
+                "ext-xmlwriter": "*",
+                "php": "^5.6 || ^7.0",
+                "phpunit/php-file-iterator": "^1.3",
+                "phpunit/php-text-template": "^1.2",
+                "phpunit/php-token-stream": "^1.4.2 || ^2.0",
+                "sebastian/code-unit-reverse-lookup": "^1.0",
+                "sebastian/environment": "^1.3.2 || ^2.0",
+                "sebastian/version": "^1.0 || ^2.0"
             },
             "require-dev": {
-                "ext-xdebug": ">=2.1.4",
-                "phpunit/phpunit": "~4"
+                "ext-xdebug": "^2.1.4",
+                "phpunit/phpunit": "^5.7"
             },
             "suggest": {
-                "ext-dom": "*",
-                "ext-xdebug": ">=2.2.1",
-                "ext-xmlwriter": "*"
+                "ext-xdebug": "^2.5.1"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.2.x-dev"
+                    "dev-master": "4.0.x-dev"
                 }
             },
             "autoload": {
@@ -733,7 +1179,7 @@
                 "testing",
                 "xunit"
             ],
-            "time": "2015-10-06T15:47:00+00:00"
+            "time": "2017-04-02T07:44:40+00:00"
         },
         {
             "name": "phpunit/php-file-iterator",
@@ -874,29 +1320,29 @@
         },
         {
             "name": "phpunit/php-token-stream",
-            "version": "1.4.12",
+            "version": "2.0.2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/php-token-stream.git",
-                "reference": "1ce90ba27c42e4e44e6d8458241466380b51fa16"
+                "reference": "791198a2c6254db10131eecfe8c06670700904db"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/1ce90ba27c42e4e44e6d8458241466380b51fa16",
-                "reference": "1ce90ba27c42e4e44e6d8458241466380b51fa16",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/791198a2c6254db10131eecfe8c06670700904db",
+                "reference": "791198a2c6254db10131eecfe8c06670700904db",
                 "shasum": ""
             },
             "require": {
                 "ext-tokenizer": "*",
-                "php": ">=5.3.3"
+                "php": "^7.0"
             },
             "require-dev": {
-                "phpunit/phpunit": "~4.2"
+                "phpunit/phpunit": "^6.2.4"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.4-dev"
+                    "dev-master": "2.0-dev"
                 }
             },
             "autoload": {
@@ -919,44 +1365,55 @@
             "keywords": [
                 "tokenizer"
             ],
-            "time": "2017-12-04T08:55:13+00:00"
+            "abandoned": true,
+            "time": "2017-11-27T05:48:46+00:00"
         },
         {
             "name": "phpunit/phpunit",
-            "version": "4.8.36",
+            "version": "5.7.27",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/phpunit.git",
-                "reference": "46023de9a91eec7dfb06cc56cb4e260017298517"
+                "reference": "b7803aeca3ccb99ad0a506fa80b64cd6a56bbc0c"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/46023de9a91eec7dfb06cc56cb4e260017298517",
-                "reference": "46023de9a91eec7dfb06cc56cb4e260017298517",
+                "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/b7803aeca3ccb99ad0a506fa80b64cd6a56bbc0c",
+                "reference": "b7803aeca3ccb99ad0a506fa80b64cd6a56bbc0c",
                 "shasum": ""
             },
             "require": {
                 "ext-dom": "*",
                 "ext-json": "*",
-                "ext-pcre": "*",
-                "ext-reflection": "*",
-                "ext-spl": "*",
-                "php": ">=5.3.3",
-                "phpspec/prophecy": "^1.3.1",
-                "phpunit/php-code-coverage": "~2.1",
+                "ext-libxml": "*",
+                "ext-mbstring": "*",
+                "ext-xml": "*",
+                "myclabs/deep-copy": "~1.3",
+                "php": "^5.6 || ^7.0",
+                "phpspec/prophecy": "^1.6.2",
+                "phpunit/php-code-coverage": "^4.0.4",
                 "phpunit/php-file-iterator": "~1.4",
                 "phpunit/php-text-template": "~1.2",
                 "phpunit/php-timer": "^1.0.6",
-                "phpunit/phpunit-mock-objects": "~2.3",
-                "sebastian/comparator": "~1.2.2",
-                "sebastian/diff": "~1.2",
-                "sebastian/environment": "~1.3",
-                "sebastian/exporter": "~1.2",
-                "sebastian/global-state": "~1.0",
-                "sebastian/version": "~1.0",
-                "symfony/yaml": "~2.1|~3.0"
+                "phpunit/phpunit-mock-objects": "^3.2",
+                "sebastian/comparator": "^1.2.4",
+                "sebastian/diff": "^1.4.3",
+                "sebastian/environment": "^1.3.4 || ^2.0",
+                "sebastian/exporter": "~2.0",
+                "sebastian/global-state": "^1.1",
+                "sebastian/object-enumerator": "~2.0",
+                "sebastian/resource-operations": "~1.0",
+                "sebastian/version": "^1.0.6|^2.0.1",
+                "symfony/yaml": "~2.1|~3.0|~4.0"
+            },
+            "conflict": {
+                "phpdocumentor/reflection-docblock": "3.0.2"
+            },
+            "require-dev": {
+                "ext-pdo": "*"
             },
             "suggest": {
+                "ext-xdebug": "*",
                 "phpunit/php-invoker": "~1.1"
             },
             "bin": [
@@ -965,7 +1422,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "4.8.x-dev"
+                    "dev-master": "5.7.x-dev"
                 }
             },
             "autoload": {
@@ -991,30 +1448,33 @@
                 "testing",
                 "xunit"
             ],
-            "time": "2017-06-21T08:07:12+00:00"
+            "time": "2018-02-01T05:50:59+00:00"
         },
         {
             "name": "phpunit/phpunit-mock-objects",
-            "version": "2.3.8",
+            "version": "3.4.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git",
-                "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983"
+                "reference": "a23b761686d50a560cc56233b9ecf49597cc9118"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/ac8e7a3db35738d56ee9a76e78a4e03d97628983",
-                "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983",
+                "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/a23b761686d50a560cc56233b9ecf49597cc9118",
+                "reference": "a23b761686d50a560cc56233b9ecf49597cc9118",
                 "shasum": ""
             },
             "require": {
                 "doctrine/instantiator": "^1.0.2",
-                "php": ">=5.3.3",
-                "phpunit/php-text-template": "~1.2",
-                "sebastian/exporter": "~1.2"
+                "php": "^5.6 || ^7.0",
+                "phpunit/php-text-template": "^1.2",
+                "sebastian/exporter": "^1.2 || ^2.0"
+            },
+            "conflict": {
+                "phpunit/phpunit": "<5.4.0"
             },
             "require-dev": {
-                "phpunit/phpunit": "~4.4"
+                "phpunit/phpunit": "^5.4"
             },
             "suggest": {
                 "ext-soap": "*"
@@ -1022,7 +1482,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.3.x-dev"
+                    "dev-master": "3.2.x-dev"
                 }
             },
             "autoload": {
@@ -1047,20 +1507,21 @@
                 "mock",
                 "xunit"
             ],
-            "time": "2015-10-02T06:51:40+00:00"
+            "abandoned": true,
+            "time": "2017-06-30T09:13:00+00:00"
         },
         {
             "name": "psr/log",
-            "version": "1.0.2",
+            "version": "1.1.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/php-fig/log.git",
-                "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d"
+                "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d",
-                "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d",
+                "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc",
+                "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc",
                 "shasum": ""
             },
             "require": {
@@ -1069,7 +1530,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.0.x-dev"
+                    "dev-master": "1.1.x-dev"
                 }
             },
             "autoload": {
@@ -1094,7 +1555,52 @@
                 "psr",
                 "psr-3"
             ],
-            "time": "2016-10-10T12:19:37+00:00"
+            "time": "2020-03-23T09:12:05+00:00"
+        },
+        {
+            "name": "sebastian/code-unit-reverse-lookup",
+            "version": "1.0.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git",
+                "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18",
+                "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^5.6 || ^7.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^5.7 || ^6.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                }
+            ],
+            "description": "Looks up which function or method a line of code belongs to",
+            "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/",
+            "time": "2017-03-04T06:30:41+00:00"
         },
         {
             "name": "sebastian/comparator",
@@ -1214,28 +1720,28 @@
         },
         {
             "name": "sebastian/environment",
-            "version": "1.3.8",
+            "version": "2.0.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/environment.git",
-                "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea"
+                "reference": "5795ffe5dc5b02460c3e34222fee8cbe245d8fac"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/be2c607e43ce4c89ecd60e75c6a85c126e754aea",
-                "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea",
+                "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/5795ffe5dc5b02460c3e34222fee8cbe245d8fac",
+                "reference": "5795ffe5dc5b02460c3e34222fee8cbe245d8fac",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.3.3 || ^7.0"
+                "php": "^5.6 || ^7.0"
             },
             "require-dev": {
-                "phpunit/phpunit": "^4.8 || ^5.0"
+                "phpunit/phpunit": "^5.0"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.3.x-dev"
+                    "dev-master": "2.0.x-dev"
                 }
             },
             "autoload": {
@@ -1260,25 +1766,25 @@
                 "environment",
                 "hhvm"
             ],
-            "time": "2016-08-18T05:49:44+00:00"
+            "time": "2016-11-26T07:53:53+00:00"
         },
         {
             "name": "sebastian/exporter",
-            "version": "1.2.2",
+            "version": "2.0.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/exporter.git",
-                "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4"
+                "reference": "ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/42c4c2eec485ee3e159ec9884f95b431287edde4",
-                "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4",
+                "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4",
+                "reference": "ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4",
                 "shasum": ""
             },
             "require": {
                 "php": ">=5.3.3",
-                "sebastian/recursion-context": "~1.0"
+                "sebastian/recursion-context": "~2.0"
             },
             "require-dev": {
                 "ext-mbstring": "*",
@@ -1287,7 +1793,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.3.x-dev"
+                    "dev-master": "2.0.x-dev"
                 }
             },
             "autoload": {
@@ -1327,7 +1833,7 @@
                 "export",
                 "exporter"
             ],
-            "time": "2016-06-17T09:04:28+00:00"
+            "time": "2016-11-19T08:54:04+00:00"
         },
         {
             "name": "sebastian/global-state",
@@ -1381,29 +1887,30 @@
             "time": "2015-10-12T03:26:01+00:00"
         },
         {
-            "name": "sebastian/recursion-context",
-            "version": "1.0.5",
+            "name": "sebastian/object-enumerator",
+            "version": "2.0.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/sebastianbergmann/recursion-context.git",
-                "reference": "b19cc3298482a335a95f3016d2f8a6950f0fbcd7"
+                "url": "https://github.com/sebastianbergmann/object-enumerator.git",
+                "reference": "1311872ac850040a79c3c058bea3e22d0f09cbb7"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/b19cc3298482a335a95f3016d2f8a6950f0fbcd7",
-                "reference": "b19cc3298482a335a95f3016d2f8a6950f0fbcd7",
+                "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/1311872ac850040a79c3c058bea3e22d0f09cbb7",
+                "reference": "1311872ac850040a79c3c058bea3e22d0f09cbb7",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3"
+                "php": ">=5.6",
+                "sebastian/recursion-context": "~2.0"
             },
             "require-dev": {
-                "phpunit/phpunit": "~4.4"
+                "phpunit/phpunit": "~5"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.0.x-dev"
+                    "dev-master": "2.0.x-dev"
                 }
             },
             "autoload": {
@@ -1416,38 +1923,41 @@
                 "BSD-3-Clause"
             ],
             "authors": [
-                {
-                    "name": "Jeff Welch",
-                    "email": "whatthejeff@gmail.com"
-                },
                 {
                     "name": "Sebastian Bergmann",
                     "email": "sebastian@phpunit.de"
-                },
-                {
-                    "name": "Adam Harvey",
-                    "email": "aharvey@php.net"
                 }
             ],
-            "description": "Provides functionality to recursively process PHP variables",
-            "homepage": "http://www.github.com/sebastianbergmann/recursion-context",
-            "time": "2016-10-03T07:41:43+00:00"
+            "description": "Traverses array structures and object graphs to enumerate all referenced objects",
+            "homepage": "https://github.com/sebastianbergmann/object-enumerator/",
+            "time": "2017-02-18T15:18:39+00:00"
         },
         {
-            "name": "sebastian/version",
-            "version": "1.0.6",
+            "name": "sebastian/recursion-context",
+            "version": "2.0.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/sebastianbergmann/version.git",
-                "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6"
+                "url": "https://github.com/sebastianbergmann/recursion-context.git",
+                "reference": "2c3ba150cbec723aa057506e73a8d33bdb286c9a"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/58b3a85e7999757d6ad81c787a1fbf5ff6c628c6",
-                "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6",
+                "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/2c3ba150cbec723aa057506e73a8d33bdb286c9a",
+                "reference": "2c3ba150cbec723aa057506e73a8d33bdb286c9a",
                 "shasum": ""
             },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~4.4"
+            },
             "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.0.x-dev"
+                }
+            },
             "autoload": {
                 "classmap": [
                     "src/"
@@ -1458,121 +1968,120 @@
                 "BSD-3-Clause"
             ],
             "authors": [
+                {
+                    "name": "Jeff Welch",
+                    "email": "whatthejeff@gmail.com"
+                },
                 {
                     "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de",
-                    "role": "lead"
+                    "email": "sebastian@phpunit.de"
+                },
+                {
+                    "name": "Adam Harvey",
+                    "email": "aharvey@php.net"
                 }
-            ],
-            "description": "Library that helps with managing the version number of Git-hosted PHP projects",
-            "homepage": "https://github.com/sebastianbergmann/version",
-            "time": "2015-06-21T13:59:46+00:00"
+            ],
+            "description": "Provides functionality to recursively process PHP variables",
+            "homepage": "http://www.github.com/sebastianbergmann/recursion-context",
+            "time": "2016-11-19T07:33:16+00:00"
         },
         {
-            "name": "seld/jsonlint",
-            "version": "1.7.1",
+            "name": "sebastian/resource-operations",
+            "version": "1.0.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/Seldaek/jsonlint.git",
-                "reference": "d15f59a67ff805a44c50ea0516d2341740f81a38"
+                "url": "https://github.com/sebastianbergmann/resource-operations.git",
+                "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/d15f59a67ff805a44c50ea0516d2341740f81a38",
-                "reference": "d15f59a67ff805a44c50ea0516d2341740f81a38",
+                "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/ce990bb21759f94aeafd30209e8cfcdfa8bc3f52",
+                "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.3 || ^7.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0"
+                "php": ">=5.6.0"
             },
-            "bin": [
-                "bin/jsonlint"
-            ],
             "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Seld\\JsonLint\\": "src/Seld/JsonLint/"
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0.x-dev"
                 }
             },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "MIT"
+                "BSD-3-Clause"
             ],
             "authors": [
                 {
-                    "name": "Jordi Boggiano",
-                    "email": "j.boggiano@seld.be",
-                    "homepage": "http://seld.be"
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
                 }
             ],
-            "description": "JSON Linter",
-            "keywords": [
-                "json",
-                "linter",
-                "parser",
-                "validator"
-            ],
-            "time": "2018-01-24T12:46:19+00:00"
+            "description": "Provides a list of PHP built-in functions that operate on resources",
+            "homepage": "https://www.github.com/sebastianbergmann/resource-operations",
+            "time": "2015-07-28T20:34:47+00:00"
         },
         {
-            "name": "seld/phar-utils",
-            "version": "1.0.1",
+            "name": "sebastian/version",
+            "version": "2.0.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/Seldaek/phar-utils.git",
-                "reference": "7009b5139491975ef6486545a39f3e6dad5ac30a"
+                "url": "https://github.com/sebastianbergmann/version.git",
+                "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/Seldaek/phar-utils/zipball/7009b5139491975ef6486545a39f3e6dad5ac30a",
-                "reference": "7009b5139491975ef6486545a39f3e6dad5ac30a",
+                "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019",
+                "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3"
+                "php": ">=5.6"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.x-dev"
+                    "dev-master": "2.0.x-dev"
                 }
             },
             "autoload": {
-                "psr-4": {
-                    "Seld\\PharUtils\\": "src/"
-                }
+                "classmap": [
+                    "src/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "MIT"
+                "BSD-3-Clause"
             ],
             "authors": [
                 {
-                    "name": "Jordi Boggiano",
-                    "email": "j.boggiano@seld.be"
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de",
+                    "role": "lead"
                 }
             ],
-            "description": "PHAR file format utilities, for when PHP phars you up",
-            "keywords": [
-                "phra"
-            ],
-            "time": "2015-10-13T18:44:15+00:00"
+            "description": "Library that helps with managing the version number of Git-hosted PHP projects",
+            "homepage": "https://github.com/sebastianbergmann/version",
+            "time": "2016-10-03T07:35:21+00:00"
         },
         {
             "name": "squizlabs/php_codesniffer",
-            "version": "2.9.1",
+            "version": "2.9.2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/squizlabs/PHP_CodeSniffer.git",
-                "reference": "dcbed1074f8244661eecddfc2a675430d8d33f62"
+                "reference": "2acf168de78487db620ab4bc524135a13cfe6745"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/dcbed1074f8244661eecddfc2a675430d8d33f62",
-                "reference": "dcbed1074f8244661eecddfc2a675430d8d33f62",
+                "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/2acf168de78487db620ab4bc524135a13cfe6745",
+                "reference": "2acf168de78487db620ab4bc524135a13cfe6745",
                 "shasum": ""
             },
             "require": {
@@ -1637,54 +2146,49 @@
                 "phpcs",
                 "standards"
             ],
-            "time": "2017-05-22T02:43:20+00:00"
+            "time": "2018-11-07T22:31:41+00:00"
         },
         {
-            "name": "symfony/console",
-            "version": "v3.4.11",
+            "name": "symfony/config",
+            "version": "v4.4.15",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/console.git",
-                "reference": "36f83f642443c46f3cf751d4d2ee5d047d757a27"
+                "url": "https://github.com/symfony/config.git",
+                "reference": "7c5a1002178a612787c291a4f515f87b19176b61"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/console/zipball/36f83f642443c46f3cf751d4d2ee5d047d757a27",
-                "reference": "36f83f642443c46f3cf751d4d2ee5d047d757a27",
+                "url": "https://api.github.com/repos/symfony/config/zipball/7c5a1002178a612787c291a4f515f87b19176b61",
+                "reference": "7c5a1002178a612787c291a4f515f87b19176b61",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.5.9|>=7.0.8",
-                "symfony/debug": "~2.8|~3.0|~4.0",
-                "symfony/polyfill-mbstring": "~1.0"
+                "php": ">=7.1.3",
+                "symfony/filesystem": "^3.4|^4.0|^5.0",
+                "symfony/polyfill-ctype": "~1.8"
             },
             "conflict": {
-                "symfony/dependency-injection": "<3.4",
-                "symfony/process": "<3.3"
+                "symfony/finder": "<3.4"
             },
             "require-dev": {
-                "psr/log": "~1.0",
-                "symfony/config": "~3.3|~4.0",
-                "symfony/dependency-injection": "~3.4|~4.0",
-                "symfony/event-dispatcher": "~2.8|~3.0|~4.0",
-                "symfony/lock": "~3.4|~4.0",
-                "symfony/process": "~3.3|~4.0"
+                "symfony/event-dispatcher": "^3.4|^4.0|^5.0",
+                "symfony/finder": "^3.4|^4.0|^5.0",
+                "symfony/messenger": "^4.1|^5.0",
+                "symfony/service-contracts": "^1.1|^2",
+                "symfony/yaml": "^3.4|^4.0|^5.0"
             },
             "suggest": {
-                "psr/log-implementation": "For using the console logger",
-                "symfony/event-dispatcher": "",
-                "symfony/lock": "",
-                "symfony/process": ""
+                "symfony/yaml": "To use the yaml reference dumper"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "3.4-dev"
+                    "dev-master": "4.4-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Symfony\\Component\\Console\\": ""
+                    "Symfony\\Component\\Config\\": ""
                 },
                 "exclude-from-classmap": [
                     "/Tests/"
@@ -1704,43 +2208,72 @@
                     "homepage": "https://symfony.com/contributors"
                 }
             ],
-            "description": "Symfony Console Component",
+            "description": "Symfony Config Component",
             "homepage": "https://symfony.com",
-            "time": "2018-05-16T08:49:21+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-10-02T07:34:48+00:00"
         },
         {
-            "name": "symfony/debug",
-            "version": "v3.4.11",
+            "name": "symfony/event-dispatcher",
+            "version": "v4.4.15",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/debug.git",
-                "reference": "b28fd73fefbac341f673f5efd707d539d6a19f68"
+                "url": "https://github.com/symfony/event-dispatcher.git",
+                "reference": "e17bb5e0663dc725f7cdcafc932132735b4725cd"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/debug/zipball/b28fd73fefbac341f673f5efd707d539d6a19f68",
-                "reference": "b28fd73fefbac341f673f5efd707d539d6a19f68",
+                "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/e17bb5e0663dc725f7cdcafc932132735b4725cd",
+                "reference": "e17bb5e0663dc725f7cdcafc932132735b4725cd",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.5.9|>=7.0.8",
-                "psr/log": "~1.0"
+                "php": ">=7.1.3",
+                "symfony/event-dispatcher-contracts": "^1.1"
             },
             "conflict": {
-                "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2"
+                "symfony/dependency-injection": "<3.4"
+            },
+            "provide": {
+                "psr/event-dispatcher-implementation": "1.0",
+                "symfony/event-dispatcher-implementation": "1.1"
             },
             "require-dev": {
-                "symfony/http-kernel": "~2.8|~3.0|~4.0"
+                "psr/log": "~1.0",
+                "symfony/config": "^3.4|^4.0|^5.0",
+                "symfony/dependency-injection": "^3.4|^4.0|^5.0",
+                "symfony/error-handler": "~3.4|~4.4",
+                "symfony/expression-language": "^3.4|^4.0|^5.0",
+                "symfony/http-foundation": "^3.4|^4.0|^5.0",
+                "symfony/service-contracts": "^1.1|^2",
+                "symfony/stopwatch": "^3.4|^4.0|^5.0"
+            },
+            "suggest": {
+                "symfony/dependency-injection": "",
+                "symfony/http-kernel": ""
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "3.4-dev"
+                    "dev-master": "4.4-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Symfony\\Component\\Debug\\": ""
+                    "Symfony\\Component\\EventDispatcher\\": ""
                 },
                 "exclude-from-classmap": [
                     "/Tests/"
@@ -1760,41 +2293,59 @@
                     "homepage": "https://symfony.com/contributors"
                 }
             ],
-            "description": "Symfony Debug Component",
+            "description": "Symfony EventDispatcher Component",
             "homepage": "https://symfony.com",
-            "time": "2018-05-16T14:03:39+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-18T14:07:46+00:00"
         },
         {
-            "name": "symfony/filesystem",
-            "version": "v3.4.11",
+            "name": "symfony/event-dispatcher-contracts",
+            "version": "v1.1.9",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/filesystem.git",
-                "reference": "8e03ca3fa52a0f56b87506f38cf7bd3f9442b3a0"
+                "url": "https://github.com/symfony/event-dispatcher-contracts.git",
+                "reference": "84e23fdcd2517bf37aecbd16967e83f0caee25a7"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/filesystem/zipball/8e03ca3fa52a0f56b87506f38cf7bd3f9442b3a0",
-                "reference": "8e03ca3fa52a0f56b87506f38cf7bd3f9442b3a0",
+                "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/84e23fdcd2517bf37aecbd16967e83f0caee25a7",
+                "reference": "84e23fdcd2517bf37aecbd16967e83f0caee25a7",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.5.9|>=7.0.8",
-                "symfony/polyfill-ctype": "~1.8"
+                "php": ">=7.1.3"
+            },
+            "suggest": {
+                "psr/event-dispatcher": "",
+                "symfony/event-dispatcher-implementation": ""
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "3.4-dev"
+                    "dev-master": "1.1-dev"
+                },
+                "thanks": {
+                    "name": "symfony/contracts",
+                    "url": "https://github.com/symfony/contracts"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Symfony\\Component\\Filesystem\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
+                    "Symfony\\Contracts\\EventDispatcher\\": ""
+                }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
@@ -1802,44 +2353,67 @@
             ],
             "authors": [
                 {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
                 },
                 {
                     "name": "Symfony Community",
                     "homepage": "https://symfony.com/contributors"
                 }
             ],
-            "description": "Symfony Filesystem Component",
+            "description": "Generic abstractions related to dispatching event",
             "homepage": "https://symfony.com",
-            "time": "2018-05-16T08:49:21+00:00"
+            "keywords": [
+                "abstractions",
+                "contracts",
+                "decoupling",
+                "interfaces",
+                "interoperability",
+                "standards"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-06T13:19:58+00:00"
         },
         {
-            "name": "symfony/finder",
-            "version": "v3.4.11",
+            "name": "symfony/filesystem",
+            "version": "v5.1.7",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/finder.git",
-                "reference": "472a92f3df8b247b49ae364275fb32943b9656c6"
+                "url": "https://github.com/symfony/filesystem.git",
+                "reference": "1a8697545a8d87b9f2f6b1d32414199cc5e20aae"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/finder/zipball/472a92f3df8b247b49ae364275fb32943b9656c6",
-                "reference": "472a92f3df8b247b49ae364275fb32943b9656c6",
+                "url": "https://api.github.com/repos/symfony/filesystem/zipball/1a8697545a8d87b9f2f6b1d32414199cc5e20aae",
+                "reference": "1a8697545a8d87b9f2f6b1d32414199cc5e20aae",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.5.9|>=7.0.8"
+                "php": ">=7.2.5",
+                "symfony/polyfill-ctype": "~1.8"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "3.4-dev"
+                    "dev-master": "5.1-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Symfony\\Component\\Finder\\": ""
+                    "Symfony\\Component\\Filesystem\\": ""
                 },
                 "exclude-from-classmap": [
                     "/Tests/"
@@ -1859,31 +2433,52 @@
                     "homepage": "https://symfony.com/contributors"
                 }
             ],
-            "description": "Symfony Finder Component",
+            "description": "Symfony Filesystem Component",
             "homepage": "https://symfony.com",
-            "time": "2018-05-16T08:49:21+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-27T14:02:37+00:00"
         },
         {
             "name": "symfony/polyfill-ctype",
-            "version": "v1.8.0",
+            "version": "v1.18.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-ctype.git",
-                "reference": "7cc359f1b7b80fc25ed7796be7d96adc9b354bae"
+                "reference": "1c302646f6efc070cd46856e600e5e0684d6b454"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/7cc359f1b7b80fc25ed7796be7d96adc9b354bae",
-                "reference": "7cc359f1b7b80fc25ed7796be7d96adc9b354bae",
+                "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/1c302646f6efc070cd46856e600e5e0684d6b454",
+                "reference": "1c302646f6efc070cd46856e600e5e0684d6b454",
                 "shasum": ""
             },
             "require": {
                 "php": ">=5.3.3"
             },
+            "suggest": {
+                "ext-ctype": "For best performance"
+            },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.8-dev"
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
                 }
             },
             "autoload": {
@@ -1899,13 +2494,13 @@
                 "MIT"
             ],
             "authors": [
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                },
                 {
                     "name": "Gert de Pagter",
                     "email": "BackEndTea@gmail.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
                 }
             ],
             "description": "Symfony polyfill for ctype functions",
@@ -1916,37 +2511,52 @@
                 "polyfill",
                 "portable"
             ],
-            "time": "2018-04-30T19:57:29+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-14T12:35:20+00:00"
         },
         {
-            "name": "symfony/polyfill-mbstring",
-            "version": "v1.8.0",
+            "name": "symfony/polyfill-php72",
+            "version": "v1.18.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/polyfill-mbstring.git",
-                "reference": "3296adf6a6454a050679cde90f95350ad604b171"
+                "url": "https://github.com/symfony/polyfill-php72.git",
+                "reference": "639447d008615574653fb3bc60d1986d7172eaae"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/3296adf6a6454a050679cde90f95350ad604b171",
-                "reference": "3296adf6a6454a050679cde90f95350ad604b171",
+                "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/639447d008615574653fb3bc60d1986d7172eaae",
+                "reference": "639447d008615574653fb3bc60d1986d7172eaae",
                 "shasum": ""
             },
             "require": {
                 "php": ">=5.3.3"
             },
-            "suggest": {
-                "ext-mbstring": "For best performance"
-            },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.8-dev"
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Symfony\\Polyfill\\Mbstring\\": ""
+                    "Symfony\\Polyfill\\Php72\\": ""
                 },
                 "files": [
                     "bootstrap.php"
@@ -1966,43 +2576,57 @@
                     "homepage": "https://symfony.com/contributors"
                 }
             ],
-            "description": "Symfony polyfill for the Mbstring extension",
+            "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions",
             "homepage": "https://symfony.com",
             "keywords": [
                 "compatibility",
-                "mbstring",
                 "polyfill",
                 "portable",
                 "shim"
             ],
-            "time": "2018-04-26T10:06:28+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-14T12:35:20+00:00"
         },
         {
-            "name": "symfony/process",
-            "version": "v3.4.11",
+            "name": "symfony/stopwatch",
+            "version": "v4.4.15",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/process.git",
-                "reference": "4cbf2db9abcb01486a21b7a059e03a62fae63187"
+                "url": "https://github.com/symfony/stopwatch.git",
+                "reference": "6f89e19772cf61b3c65bab329fe0e318259fbd91"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/process/zipball/4cbf2db9abcb01486a21b7a059e03a62fae63187",
-                "reference": "4cbf2db9abcb01486a21b7a059e03a62fae63187",
+                "url": "https://api.github.com/repos/symfony/stopwatch/zipball/6f89e19772cf61b3c65bab329fe0e318259fbd91",
+                "reference": "6f89e19772cf61b3c65bab329fe0e318259fbd91",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.5.9|>=7.0.8"
+                "php": ">=7.1.3",
+                "symfony/service-contracts": "^1.0|^2"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "3.4-dev"
+                    "dev-master": "4.4-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Symfony\\Component\\Process\\": ""
+                    "Symfony\\Component\\Stopwatch\\": ""
                 },
                 "exclude-from-classmap": [
                     "/Tests/"
@@ -2022,33 +2646,138 @@
                     "homepage": "https://symfony.com/contributors"
                 }
             ],
-            "description": "Symfony Process Component",
+            "description": "Symfony Stopwatch Component",
+            "homepage": "https://symfony.com",
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-02T16:08:58+00:00"
+        },
+        {
+            "name": "symfony/var-dumper",
+            "version": "v4.4.15",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/var-dumper.git",
+                "reference": "0dc22bdf9d1197467bb04d505355180b6f20bcca"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/var-dumper/zipball/0dc22bdf9d1197467bb04d505355180b6f20bcca",
+                "reference": "0dc22bdf9d1197467bb04d505355180b6f20bcca",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.1.3",
+                "symfony/polyfill-mbstring": "~1.0",
+                "symfony/polyfill-php72": "~1.5",
+                "symfony/polyfill-php80": "^1.15"
+            },
+            "conflict": {
+                "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0",
+                "symfony/console": "<3.4"
+            },
+            "require-dev": {
+                "ext-iconv": "*",
+                "symfony/console": "^3.4|^4.0|^5.0",
+                "symfony/process": "^4.4|^5.0",
+                "twig/twig": "^1.34|^2.4|^3.0"
+            },
+            "suggest": {
+                "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).",
+                "ext-intl": "To show region name in time zone dump",
+                "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script"
+            },
+            "bin": [
+                "Resources/bin/var-dump-server"
+            ],
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "4.4-dev"
+                }
+            },
+            "autoload": {
+                "files": [
+                    "Resources/functions/dump.php"
+                ],
+                "psr-4": {
+                    "Symfony\\Component\\VarDumper\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony mechanism for exploring and dumping PHP variables",
             "homepage": "https://symfony.com",
-            "time": "2018-05-16T08:49:21+00:00"
+            "keywords": [
+                "debug",
+                "dump"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-18T08:35:10+00:00"
         },
         {
             "name": "symfony/yaml",
-            "version": "v3.4.11",
+            "version": "v4.4.15",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/yaml.git",
-                "reference": "c5010cc1692ce1fa328b1fb666961eb3d4a85bb0"
+                "reference": "c7885964b1eceb70b0981556d0a9b01d2d97c8d1"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/yaml/zipball/c5010cc1692ce1fa328b1fb666961eb3d4a85bb0",
-                "reference": "c5010cc1692ce1fa328b1fb666961eb3d4a85bb0",
+                "url": "https://api.github.com/repos/symfony/yaml/zipball/c7885964b1eceb70b0981556d0a9b01d2d97c8d1",
+                "reference": "c7885964b1eceb70b0981556d0a9b01d2d97c8d1",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.5.9|>=7.0.8",
+                "php": ">=7.1.3",
                 "symfony/polyfill-ctype": "~1.8"
             },
             "conflict": {
                 "symfony/console": "<3.4"
             },
             "require-dev": {
-                "symfony/console": "~3.4|~4.0"
+                "symfony/console": "^3.4|^4.0|^5.0"
             },
             "suggest": {
                 "symfony/console": "For validating YAML files using the lint command"
@@ -2056,7 +2785,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "3.4-dev"
+                    "dev-master": "4.4-dev"
                 }
             },
             "autoload": {
@@ -2083,35 +2812,92 @@
             ],
             "description": "Symfony Yaml Component",
             "homepage": "https://symfony.com",
-            "time": "2018-05-03T23:18:14+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-27T03:36:23+00:00"
         },
         {
-            "name": "webmozart/assert",
-            "version": "1.3.0",
+            "name": "victorjonsson/markdowndocs",
+            "version": "1.3.8",
             "source": {
                 "type": "git",
-                "url": "https://github.com/webmozart/assert.git",
-                "reference": "0df1908962e7a3071564e857d86874dad1ef204a"
+                "url": "https://github.com/victorjonsson/PHP-Markdown-Documentation-Generator.git",
+                "reference": "c5eb16ff5bd15ee60223883ddacba0ab8797268d"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/webmozart/assert/zipball/0df1908962e7a3071564e857d86874dad1ef204a",
-                "reference": "0df1908962e7a3071564e857d86874dad1ef204a",
+                "url": "https://api.github.com/repos/victorjonsson/PHP-Markdown-Documentation-Generator/zipball/c5eb16ff5bd15ee60223883ddacba0ab8797268d",
+                "reference": "c5eb16ff5bd15ee60223883ddacba0ab8797268d",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.3.3 || ^7.0"
+                "php": ">=5.5.0",
+                "symfony/console": ">=2.6"
             },
             "require-dev": {
-                "phpunit/phpunit": "^4.6",
-                "sebastian/version": "^1.0.1"
+                "phpunit/phpunit": "3.7.23"
             },
+            "bin": [
+                "bin/phpdoc-md"
+            ],
             "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.3-dev"
+            "autoload": {
+                "psr-0": {
+                    "PHPDocsMD": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Victor Jonsson",
+                    "email": "kontakt@victorjonsson.se"
                 }
+            ],
+            "description": "Command line tool for generating markdown-formatted class documentation",
+            "homepage": "https://github.com/victorjonsson/PHP-Markdown-Documentation-Generator",
+            "time": "2017-04-20T09:52:47+00:00"
+        },
+        {
+            "name": "webmozart/assert",
+            "version": "1.9.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/webmozart/assert.git",
+                "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/webmozart/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389",
+                "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^5.3.3 || ^7.0 || ^8.0",
+                "symfony/polyfill-ctype": "^1.8"
+            },
+            "conflict": {
+                "phpstan/phpstan": "<0.12.20",
+                "vimeo/psalm": "<3.9.1"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^4.8.36 || ^7.5.13"
             },
+            "type": "library",
             "autoload": {
                 "psr-4": {
                     "Webmozart\\Assert\\": "src/"
@@ -2133,21 +2919,20 @@
                 "check",
                 "validate"
             ],
-            "time": "2018-01-29T19:49:41+00:00"
+            "time": "2020-07-08T17:02:28+00:00"
         }
     ],
     "aliases": [],
     "minimum-stability": "stable",
-    "stability-flags": {
-        "composer/composer": 20
-    },
+    "stability-flags": [],
     "prefer-stable": false,
     "prefer-lowest": false,
     "platform": {
-        "php": ">=5.4.5"
+        "php": ">=5.4.0"
     },
     "platform-dev": [],
     "platform-overrides": {
-        "php": "5.5.27"
-    }
+        "php": "7.2.5"
+    },
+    "plugin-api-version": "1.1.0"
 }
diff --git a/vendor/consolidation/output-formatters/.scenarios.lock/install b/vendor/consolidation/output-formatters/.scenarios.lock/install
old mode 100644
new mode 100755
index 16c69e107cce7f71e33e04207254d005200f9fd4..4d8a777705dd1ce798857719d69a989d29271a6f
--- a/vendor/consolidation/output-formatters/.scenarios.lock/install
+++ b/vendor/consolidation/output-formatters/.scenarios.lock/install
@@ -4,16 +4,16 @@ SCENARIO=$1
 DEPENDENCIES=${2-install}
 
 # Convert the aliases 'highest', 'lowest' and 'lock' to
-# the corresponding composer command to run.
+# the corresponding composer update command to run.
 case $DEPENDENCIES in
   highest)
-    DEPENDENCIES=update
+    UPDATE_COMMAND=update
     ;;
   lowest)
-    DEPENDENCIES='update --prefer-lowest'
+    UPDATE_COMMAND='update --prefer-lowest'
     ;;
   lock|default|"")
-    DEPENDENCIES=install
+    UPDATE_COMMAND=''
     ;;
 esac
 
@@ -48,7 +48,11 @@ echo
 set -ex
 
 composer -n validate --working-dir=$dir --no-check-all --ansi
-composer -n --working-dir=$dir ${DEPENDENCIES} --prefer-dist --no-scripts
+
+if [ ! -z "$UPDATE_COMMAND" ] ; then
+  composer -n --working-dir=$dir ${UPDATE_COMMAND} --prefer-dist --no-scripts
+fi
+composer -n --working-dir=$dir install --prefer-dist
 
 # If called from a CI context, print out some extra information about
 # what we just installed.
diff --git a/vendor/consolidation/output-formatters/.scenarios.lock/symfony2/composer.json b/vendor/consolidation/output-formatters/.scenarios.lock/symfony2/composer.json
index 338f4265fc511ec0edc4a155d5d5ba7b69acf812..b003dce2e0aed5b58aa1724b89877a711bf6a8d9 100644
--- a/vendor/consolidation/output-formatters/.scenarios.lock/symfony2/composer.json
+++ b/vendor/consolidation/output-formatters/.scenarios.lock/symfony2/composer.json
@@ -22,7 +22,7 @@
         "symfony/console": "^2.8",
         "php": ">=5.4.0",
         "dflydev/dot-access-data": "^1.1.0",
-        "symfony/finder": "^2.5|^3|^4"
+        "symfony/finder": "^2.5|^3|^4|^5"
     },
     "require-dev": {
         "phpunit/phpunit": "^4.8.36",
diff --git a/vendor/consolidation/output-formatters/.scenarios.lock/symfony3/composer.lock b/vendor/consolidation/output-formatters/.scenarios.lock/symfony3/composer.lock
index 1e190041722540d17d482e8c44c5f4eadc0690cd..816a884d2c57c4aded55a3ca9567f4463f3c9c30 100644
--- a/vendor/consolidation/output-formatters/.scenarios.lock/symfony3/composer.lock
+++ b/vendor/consolidation/output-formatters/.scenarios.lock/symfony3/composer.lock
@@ -67,16 +67,16 @@
         },
         {
             "name": "psr/log",
-            "version": "1.1.0",
+            "version": "1.1.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/php-fig/log.git",
-                "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd"
+                "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/php-fig/log/zipball/6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd",
-                "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd",
+                "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc",
+                "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc",
                 "shasum": ""
             },
             "require": {
@@ -85,7 +85,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.0.x-dev"
+                    "dev-master": "1.1.x-dev"
                 }
             },
             "autoload": {
@@ -110,20 +110,20 @@
                 "psr",
                 "psr-3"
             ],
-            "time": "2018-11-20T15:27:04+00:00"
+            "time": "2020-03-23T09:12:05+00:00"
         },
         {
             "name": "symfony/console",
-            "version": "v3.4.18",
+            "version": "v3.4.45",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/console.git",
-                "reference": "1d228fb4602047d7b26a0554e0d3efd567da5803"
+                "reference": "b28996bc0a3b08914b2a8609163ec35b36b30685"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/console/zipball/1d228fb4602047d7b26a0554e0d3efd567da5803",
-                "reference": "1d228fb4602047d7b26a0554e0d3efd567da5803",
+                "url": "https://api.github.com/repos/symfony/console/zipball/b28996bc0a3b08914b2a8609163ec35b36b30685",
+                "reference": "b28996bc0a3b08914b2a8609163ec35b36b30685",
                 "shasum": ""
             },
             "require": {
@@ -135,6 +135,9 @@
                 "symfony/dependency-injection": "<3.4",
                 "symfony/process": "<3.3"
             },
+            "provide": {
+                "psr/log-implementation": "1.0"
+            },
             "require-dev": {
                 "psr/log": "~1.0",
                 "symfony/config": "~3.3|~4.0",
@@ -144,7 +147,7 @@
                 "symfony/process": "~3.3|~4.0"
             },
             "suggest": {
-                "psr/log-implementation": "For using the console logger",
+                "psr/log": "For using the console logger",
                 "symfony/event-dispatcher": "",
                 "symfony/lock": "",
                 "symfony/process": ""
@@ -179,20 +182,34 @@
             ],
             "description": "Symfony Console Component",
             "homepage": "https://symfony.com",
-            "time": "2018-10-30T16:50:50+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-09T05:09:37+00:00"
         },
         {
             "name": "symfony/debug",
-            "version": "v3.4.18",
+            "version": "v3.4.45",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/debug.git",
-                "reference": "fe9793af008b651c5441bdeab21ede8172dab097"
+                "reference": "9109e4414e684d0b75276ae203883467476d25d0"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/debug/zipball/fe9793af008b651c5441bdeab21ede8172dab097",
-                "reference": "fe9793af008b651c5441bdeab21ede8172dab097",
+                "url": "https://api.github.com/repos/symfony/debug/zipball/9109e4414e684d0b75276ae203883467476d25d0",
+                "reference": "9109e4414e684d0b75276ae203883467476d25d0",
                 "shasum": ""
             },
             "require": {
@@ -235,20 +252,34 @@
             ],
             "description": "Symfony Debug Component",
             "homepage": "https://symfony.com",
-            "time": "2018-10-31T09:06:03+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-08T22:19:14+00:00"
         },
         {
             "name": "symfony/finder",
-            "version": "v3.4.18",
+            "version": "v3.4.45",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/finder.git",
-                "reference": "54ba444dddc5bd5708a34bd095ea67c6eb54644d"
+                "reference": "52140652ed31cee3dabd0c481b5577201fa769b4"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/finder/zipball/54ba444dddc5bd5708a34bd095ea67c6eb54644d",
-                "reference": "54ba444dddc5bd5708a34bd095ea67c6eb54644d",
+                "url": "https://api.github.com/repos/symfony/finder/zipball/52140652ed31cee3dabd0c481b5577201fa769b4",
+                "reference": "52140652ed31cee3dabd0c481b5577201fa769b4",
                 "shasum": ""
             },
             "require": {
@@ -284,20 +315,34 @@
             ],
             "description": "Symfony Finder Component",
             "homepage": "https://symfony.com",
-            "time": "2018-10-03T08:46:40+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-02T16:06:40+00:00"
         },
         {
             "name": "symfony/polyfill-mbstring",
-            "version": "v1.10.0",
+            "version": "v1.18.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-mbstring.git",
-                "reference": "c79c051f5b3a46be09205c73b80b346e4153e494"
+                "reference": "a6977d63bf9a0ad4c65cd352709e230876f9904a"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/c79c051f5b3a46be09205c73b80b346e4153e494",
-                "reference": "c79c051f5b3a46be09205c73b80b346e4153e494",
+                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/a6977d63bf9a0ad4c65cd352709e230876f9904a",
+                "reference": "a6977d63bf9a0ad4c65cd352709e230876f9904a",
                 "shasum": ""
             },
             "require": {
@@ -309,7 +354,11 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.9-dev"
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
                 }
             },
             "autoload": {
@@ -343,20 +392,34 @@
                 "portable",
                 "shim"
             ],
-            "time": "2018-09-21T13:07:52+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-14T12:35:20+00:00"
         },
         {
             "name": "symfony/var-dumper",
-            "version": "v3.4.18",
+            "version": "v3.4.45",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/var-dumper.git",
-                "reference": "ff8ac19e97e5c7c3979236b584719a1190f84181"
+                "reference": "df8fe9c1c5dc3eb968db32ffa6b699d89fee2606"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/var-dumper/zipball/ff8ac19e97e5c7c3979236b584719a1190f84181",
-                "reference": "ff8ac19e97e5c7c3979236b584719a1190f84181",
+                "url": "https://api.github.com/repos/symfony/var-dumper/zipball/df8fe9c1c5dc3eb968db32ffa6b699d89fee2606",
+                "reference": "df8fe9c1c5dc3eb968db32ffa6b699d89fee2606",
                 "shasum": ""
             },
             "require": {
@@ -412,7 +475,21 @@
                 "debug",
                 "dump"
             ],
-            "time": "2018-10-02T16:33:53+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-18T08:10:16+00:00"
         }
     ],
     "packages-dev": [
@@ -472,27 +549,27 @@
         },
         {
             "name": "g1a/composer-test-scenarios",
-            "version": "3.0.0",
+            "version": "3.2.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/g1a/composer-test-scenarios.git",
-                "reference": "2a7156f1572898888ea50ad1d48a6b4d3f9fbf78"
+                "reference": "e7394206d845fd593d325440507fb940bef8cb62"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/g1a/composer-test-scenarios/zipball/2a7156f1572898888ea50ad1d48a6b4d3f9fbf78",
-                "reference": "2a7156f1572898888ea50ad1d48a6b4d3f9fbf78",
+                "url": "https://api.github.com/repos/g1a/composer-test-scenarios/zipball/e7394206d845fd593d325440507fb940bef8cb62",
+                "reference": "e7394206d845fd593d325440507fb940bef8cb62",
                 "shasum": ""
             },
             "require": {
-                "composer-plugin-api": "^1.0.0",
+                "composer-plugin-api": "^1.0.0 || ^2.0.0",
                 "php": ">=5.4"
             },
             "require-dev": {
-                "composer/composer": "^1.7",
+                "composer/composer": "^1.10.6 || ^2.0@rc",
                 "php-coveralls/php-coveralls": "^1.0",
                 "phpunit/phpunit": "^4.8.36|^6",
-                "squizlabs/php_codesniffer": "^2.8"
+                "squizlabs/php_codesniffer": "^3.5"
             },
             "bin": [
                 "scripts/dependency-licenses"
@@ -501,7 +578,7 @@
             "extra": {
                 "class": "ComposerTestScenarios\\Plugin",
                 "branch-alias": {
-                    "dev-master": "3.x-dev"
+                    "dev-main": "3.x-dev"
                 }
             },
             "autoload": {
@@ -520,7 +597,7 @@
                 }
             ],
             "description": "Useful scripts for testing multiple sets of Composer dependencies.",
-            "time": "2018-11-22T05:10:20+00:00"
+            "time": "2020-09-28T20:54:35+00:00"
         },
         {
             "name": "guzzle/guzzle",
@@ -872,38 +949,38 @@
         },
         {
             "name": "phpspec/prophecy",
-            "version": "1.8.0",
+            "version": "v1.10.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpspec/prophecy.git",
-                "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06"
+                "reference": "451c3cd1418cf640de218914901e51b064abb093"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpspec/prophecy/zipball/4ba436b55987b4bf311cb7c6ba82aa528aac0a06",
-                "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06",
+                "url": "https://api.github.com/repos/phpspec/prophecy/zipball/451c3cd1418cf640de218914901e51b064abb093",
+                "reference": "451c3cd1418cf640de218914901e51b064abb093",
                 "shasum": ""
             },
             "require": {
                 "doctrine/instantiator": "^1.0.2",
                 "php": "^5.3|^7.0",
-                "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0",
-                "sebastian/comparator": "^1.1|^2.0|^3.0",
-                "sebastian/recursion-context": "^1.0|^2.0|^3.0"
+                "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0",
+                "sebastian/comparator": "^1.2.3|^2.0|^3.0|^4.0",
+                "sebastian/recursion-context": "^1.0|^2.0|^3.0|^4.0"
             },
             "require-dev": {
-                "phpspec/phpspec": "^2.5|^3.2",
+                "phpspec/phpspec": "^2.5 || ^3.2",
                 "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.8.x-dev"
+                    "dev-master": "1.10.x-dev"
                 }
             },
             "autoload": {
-                "psr-0": {
-                    "Prophecy\\": "src/"
+                "psr-4": {
+                    "Prophecy\\": "src/Prophecy"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -931,7 +1008,7 @@
                 "spy",
                 "stub"
             ],
-            "time": "2018-08-05T17:53:17+00:00"
+            "time": "2020-03-05T15:02:03+00:00"
         },
         {
             "name": "phpunit/php-code-coverage",
@@ -1180,6 +1257,7 @@
             "keywords": [
                 "tokenizer"
             ],
+            "abandoned": true,
             "time": "2017-12-04T08:55:13+00:00"
         },
         {
@@ -1321,6 +1399,7 @@
                 "mock",
                 "xunit"
             ],
+            "abandoned": true,
             "time": "2017-06-30T09:13:00+00:00"
         },
         {
@@ -1916,16 +1995,16 @@
         },
         {
             "name": "symfony/config",
-            "version": "v3.4.18",
+            "version": "v3.4.45",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/config.git",
-                "reference": "99b2fa8acc244e656cdf324ff419fbe6fd300a4d"
+                "reference": "d061a451ff6bc170c5454f4ac9b41ad2179e3960"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/config/zipball/99b2fa8acc244e656cdf324ff419fbe6fd300a4d",
-                "reference": "99b2fa8acc244e656cdf324ff419fbe6fd300a4d",
+                "url": "https://api.github.com/repos/symfony/config/zipball/d061a451ff6bc170c5454f4ac9b41ad2179e3960",
+                "reference": "d061a451ff6bc170c5454f4ac9b41ad2179e3960",
                 "shasum": ""
             },
             "require": {
@@ -1976,20 +2055,34 @@
             ],
             "description": "Symfony Config Component",
             "homepage": "https://symfony.com",
-            "time": "2018-10-31T09:06:03+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-02T16:06:40+00:00"
         },
         {
             "name": "symfony/event-dispatcher",
-            "version": "v2.8.47",
+            "version": "v2.8.52",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/event-dispatcher.git",
-                "reference": "76494bc38ff38d90d01913d23b5271acd4d78dd3"
+                "reference": "a77e974a5fecb4398833b0709210e3d5e334ffb0"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/76494bc38ff38d90d01913d23b5271acd4d78dd3",
-                "reference": "76494bc38ff38d90d01913d23b5271acd4d78dd3",
+                "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/a77e974a5fecb4398833b0709210e3d5e334ffb0",
+                "reference": "a77e974a5fecb4398833b0709210e3d5e334ffb0",
                 "shasum": ""
             },
             "require": {
@@ -2036,20 +2129,20 @@
             ],
             "description": "Symfony EventDispatcher Component",
             "homepage": "https://symfony.com",
-            "time": "2018-10-20T23:16:31+00:00"
+            "time": "2018-11-21T14:20:20+00:00"
         },
         {
             "name": "symfony/filesystem",
-            "version": "v3.4.18",
+            "version": "v3.4.45",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/filesystem.git",
-                "reference": "d69930fc337d767607267d57c20a7403d0a822a4"
+                "reference": "495646f13d051cc5a8f77a68b68313dc854080aa"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/filesystem/zipball/d69930fc337d767607267d57c20a7403d0a822a4",
-                "reference": "d69930fc337d767607267d57c20a7403d0a822a4",
+                "url": "https://api.github.com/repos/symfony/filesystem/zipball/495646f13d051cc5a8f77a68b68313dc854080aa",
+                "reference": "495646f13d051cc5a8f77a68b68313dc854080aa",
                 "shasum": ""
             },
             "require": {
@@ -2086,20 +2179,34 @@
             ],
             "description": "Symfony Filesystem Component",
             "homepage": "https://symfony.com",
-            "time": "2018-10-02T12:28:39+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-02T16:06:40+00:00"
         },
         {
             "name": "symfony/polyfill-ctype",
-            "version": "v1.10.0",
+            "version": "v1.18.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-ctype.git",
-                "reference": "e3d826245268269cd66f8326bd8bc066687b4a19"
+                "reference": "1c302646f6efc070cd46856e600e5e0684d6b454"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/e3d826245268269cd66f8326bd8bc066687b4a19",
-                "reference": "e3d826245268269cd66f8326bd8bc066687b4a19",
+                "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/1c302646f6efc070cd46856e600e5e0684d6b454",
+                "reference": "1c302646f6efc070cd46856e600e5e0684d6b454",
                 "shasum": ""
             },
             "require": {
@@ -2111,7 +2218,11 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.9-dev"
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
                 }
             },
             "autoload": {
@@ -2127,13 +2238,13 @@
                 "MIT"
             ],
             "authors": [
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                },
                 {
                     "name": "Gert de Pagter",
                     "email": "BackEndTea@gmail.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
                 }
             ],
             "description": "Symfony polyfill for ctype functions",
@@ -2144,20 +2255,34 @@
                 "polyfill",
                 "portable"
             ],
-            "time": "2018-08-06T14:22:27+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-14T12:35:20+00:00"
         },
         {
             "name": "symfony/stopwatch",
-            "version": "v3.4.18",
+            "version": "v3.4.45",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/stopwatch.git",
-                "reference": "05e52a39de52ba690aebaed462b2bc8a9649f0a4"
+                "reference": "a7a98f40dcc382a332c3729a6d04b298ffbb8f1f"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/stopwatch/zipball/05e52a39de52ba690aebaed462b2bc8a9649f0a4",
-                "reference": "05e52a39de52ba690aebaed462b2bc8a9649f0a4",
+                "url": "https://api.github.com/repos/symfony/stopwatch/zipball/a7a98f40dcc382a332c3729a6d04b298ffbb8f1f",
+                "reference": "a7a98f40dcc382a332c3729a6d04b298ffbb8f1f",
                 "shasum": ""
             },
             "require": {
@@ -2193,20 +2318,34 @@
             ],
             "description": "Symfony Stopwatch Component",
             "homepage": "https://symfony.com",
-            "time": "2018-10-02T12:28:39+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-03-15T09:38:08+00:00"
         },
         {
             "name": "symfony/yaml",
-            "version": "v3.4.18",
+            "version": "v3.4.45",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/yaml.git",
-                "reference": "640b6c27fed4066d64b64d5903a86043f4a4de7f"
+                "reference": "ec3c2ac4d881a4684c1f0317d2107f1a4152bad9"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/yaml/zipball/640b6c27fed4066d64b64d5903a86043f4a4de7f",
-                "reference": "640b6c27fed4066d64b64d5903a86043f4a4de7f",
+                "url": "https://api.github.com/repos/symfony/yaml/zipball/ec3c2ac4d881a4684c1f0317d2107f1a4152bad9",
+                "reference": "ec3c2ac4d881a4684c1f0317d2107f1a4152bad9",
                 "shasum": ""
             },
             "require": {
@@ -2252,7 +2391,21 @@
             ],
             "description": "Symfony Yaml Component",
             "homepage": "https://symfony.com",
-            "time": "2018-10-02T16:33:53+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-18T15:58:55+00:00"
         },
         {
             "name": "victorjonsson/markdowndocs",
@@ -2300,31 +2453,30 @@
         },
         {
             "name": "webmozart/assert",
-            "version": "1.3.0",
+            "version": "1.9.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/webmozart/assert.git",
-                "reference": "0df1908962e7a3071564e857d86874dad1ef204a"
+                "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/webmozart/assert/zipball/0df1908962e7a3071564e857d86874dad1ef204a",
-                "reference": "0df1908962e7a3071564e857d86874dad1ef204a",
+                "url": "https://api.github.com/repos/webmozart/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389",
+                "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.3.3 || ^7.0"
+                "php": "^5.3.3 || ^7.0 || ^8.0",
+                "symfony/polyfill-ctype": "^1.8"
+            },
+            "conflict": {
+                "phpstan/phpstan": "<0.12.20",
+                "vimeo/psalm": "<3.9.1"
             },
             "require-dev": {
-                "phpunit/phpunit": "^4.6",
-                "sebastian/version": "^1.0.1"
+                "phpunit/phpunit": "^4.8.36 || ^7.5.13"
             },
             "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.3-dev"
-                }
-            },
             "autoload": {
                 "psr-4": {
                     "Webmozart\\Assert\\": "src/"
@@ -2346,7 +2498,7 @@
                 "check",
                 "validate"
             ],
-            "time": "2018-01-29T19:49:41+00:00"
+            "time": "2020-07-08T17:02:28+00:00"
         }
     ],
     "aliases": [],
@@ -2360,5 +2512,6 @@
     "platform-dev": [],
     "platform-overrides": {
         "php": "5.6.32"
-    }
+    },
+    "plugin-api-version": "1.1.0"
 }
diff --git a/vendor/consolidation/output-formatters/.scenarios.lock/symfony4/composer.json b/vendor/consolidation/output-formatters/.scenarios.lock/symfony4/composer.json
index 176720571555b8f262c9e08d5bdf99388045faee..7368e472a3ab01e7290524823caf89a96950b70f 100644
--- a/vendor/consolidation/output-formatters/.scenarios.lock/symfony4/composer.json
+++ b/vendor/consolidation/output-formatters/.scenarios.lock/symfony4/composer.json
@@ -22,7 +22,7 @@
         "symfony/console": "^4.0",
         "php": ">=5.4.0",
         "dflydev/dot-access-data": "^1.1.0",
-        "symfony/finder": "^2.5|^3|^4"
+        "symfony/finder": "^2.5|^3|^4|^5"
     },
     "require-dev": {
         "phpunit/phpunit": "^6",
diff --git a/vendor/consolidation/output-formatters/.scenarios.lock/symfony4/composer.lock b/vendor/consolidation/output-formatters/.scenarios.lock/symfony4/composer.lock
index c43421e24c52f0c4cecf625e0243f731cefd117b..4982bda58022549fb1d920cafa1d8dfbaa16daff 100644
--- a/vendor/consolidation/output-formatters/.scenarios.lock/symfony4/composer.lock
+++ b/vendor/consolidation/output-formatters/.scenarios.lock/symfony4/composer.lock
@@ -4,7 +4,7 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "This file is @generated automatically"
     ],
-    "content-hash": "8be5eb98a4ffa6ddd6a6c8f27bf99e5a",
+    "content-hash": "a2c830502baaa91f8f4c59cc4815fb06",
     "packages": [
         {
             "name": "dflydev/dot-access-data",
@@ -65,38 +65,96 @@
             ],
             "time": "2017-01-20T21:14:22+00:00"
         },
+        {
+            "name": "psr/container",
+            "version": "1.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/php-fig/container.git",
+                "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
+                "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Psr\\Container\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "PHP-FIG",
+                    "homepage": "http://www.php-fig.org/"
+                }
+            ],
+            "description": "Common Container Interface (PHP FIG PSR-11)",
+            "homepage": "https://github.com/php-fig/container",
+            "keywords": [
+                "PSR-11",
+                "container",
+                "container-interface",
+                "container-interop",
+                "psr"
+            ],
+            "time": "2017-02-14T16:28:37+00:00"
+        },
         {
             "name": "symfony/console",
-            "version": "v4.1.7",
+            "version": "v4.4.15",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/console.git",
-                "reference": "432122af37d8cd52fba1b294b11976e0d20df595"
+                "reference": "90933b39c7b312fc3ceaa1ddeac7eb48cb953124"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/console/zipball/432122af37d8cd52fba1b294b11976e0d20df595",
-                "reference": "432122af37d8cd52fba1b294b11976e0d20df595",
+                "url": "https://api.github.com/repos/symfony/console/zipball/90933b39c7b312fc3ceaa1ddeac7eb48cb953124",
+                "reference": "90933b39c7b312fc3ceaa1ddeac7eb48cb953124",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.1.3",
-                "symfony/polyfill-mbstring": "~1.0"
+                "php": ">=7.1.3",
+                "symfony/polyfill-mbstring": "~1.0",
+                "symfony/polyfill-php73": "^1.8",
+                "symfony/polyfill-php80": "^1.15",
+                "symfony/service-contracts": "^1.1|^2"
             },
             "conflict": {
                 "symfony/dependency-injection": "<3.4",
+                "symfony/event-dispatcher": "<4.3|>=5",
+                "symfony/lock": "<4.4",
                 "symfony/process": "<3.3"
             },
+            "provide": {
+                "psr/log-implementation": "1.0"
+            },
             "require-dev": {
                 "psr/log": "~1.0",
-                "symfony/config": "~3.4|~4.0",
-                "symfony/dependency-injection": "~3.4|~4.0",
-                "symfony/event-dispatcher": "~3.4|~4.0",
-                "symfony/lock": "~3.4|~4.0",
-                "symfony/process": "~3.4|~4.0"
+                "symfony/config": "^3.4|^4.0|^5.0",
+                "symfony/dependency-injection": "^3.4|^4.0|^5.0",
+                "symfony/event-dispatcher": "^4.3",
+                "symfony/lock": "^4.4|^5.0",
+                "symfony/process": "^3.4|^4.0|^5.0",
+                "symfony/var-dumper": "^4.3|^5.0"
             },
             "suggest": {
-                "psr/log-implementation": "For using the console logger",
+                "psr/log": "For using the console logger",
                 "symfony/event-dispatcher": "",
                 "symfony/lock": "",
                 "symfony/process": ""
@@ -104,7 +162,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "4.1-dev"
+                    "dev-master": "4.4-dev"
                 }
             },
             "autoload": {
@@ -131,29 +189,43 @@
             ],
             "description": "Symfony Console Component",
             "homepage": "https://symfony.com",
-            "time": "2018-10-31T09:30:44+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-15T07:58:55+00:00"
         },
         {
             "name": "symfony/finder",
-            "version": "v4.1.7",
+            "version": "v4.4.15",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/finder.git",
-                "reference": "1f17195b44543017a9c9b2d437c670627e96ad06"
+                "reference": "60d08560f9aa72997c44077c40d47aa28a963230"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/finder/zipball/1f17195b44543017a9c9b2d437c670627e96ad06",
-                "reference": "1f17195b44543017a9c9b2d437c670627e96ad06",
+                "url": "https://api.github.com/repos/symfony/finder/zipball/60d08560f9aa72997c44077c40d47aa28a963230",
+                "reference": "60d08560f9aa72997c44077c40d47aa28a963230",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.1.3"
+                "php": ">=7.1.3"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "4.1-dev"
+                    "dev-master": "4.4-dev"
                 }
             },
             "autoload": {
@@ -180,20 +252,34 @@
             ],
             "description": "Symfony Finder Component",
             "homepage": "https://symfony.com",
-            "time": "2018-10-03T08:47:56+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-10-02T07:34:48+00:00"
         },
         {
             "name": "symfony/polyfill-mbstring",
-            "version": "v1.10.0",
+            "version": "v1.18.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-mbstring.git",
-                "reference": "c79c051f5b3a46be09205c73b80b346e4153e494"
+                "reference": "a6977d63bf9a0ad4c65cd352709e230876f9904a"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/c79c051f5b3a46be09205c73b80b346e4153e494",
-                "reference": "c79c051f5b3a46be09205c73b80b346e4153e494",
+                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/a6977d63bf9a0ad4c65cd352709e230876f9904a",
+                "reference": "a6977d63bf9a0ad4c65cd352709e230876f9904a",
                 "shasum": ""
             },
             "require": {
@@ -205,7 +291,11 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.9-dev"
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
                 }
             },
             "autoload": {
@@ -239,33 +329,281 @@
                 "portable",
                 "shim"
             ],
-            "time": "2018-09-21T13:07:52+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-14T12:35:20+00:00"
+        },
+        {
+            "name": "symfony/polyfill-php73",
+            "version": "v1.18.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-php73.git",
+                "reference": "fffa1a52a023e782cdcc221d781fe1ec8f87fcca"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fffa1a52a023e782cdcc221d781fe1ec8f87fcca",
+                "reference": "fffa1a52a023e782cdcc221d781fe1ec8f87fcca",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Polyfill\\Php73\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
+                ],
+                "classmap": [
+                    "Resources/stubs"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-14T12:35:20+00:00"
+        },
+        {
+            "name": "symfony/polyfill-php80",
+            "version": "v1.18.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-php80.git",
+                "reference": "d87d5766cbf48d72388a9f6b85f280c8ad51f981"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/d87d5766cbf48d72388a9f6b85f280c8ad51f981",
+                "reference": "d87d5766cbf48d72388a9f6b85f280c8ad51f981",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.0.8"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Polyfill\\Php80\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
+                ],
+                "classmap": [
+                    "Resources/stubs"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Ion Bazan",
+                    "email": "ion.bazan@gmail.com"
+                },
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-14T12:35:20+00:00"
+        },
+        {
+            "name": "symfony/service-contracts",
+            "version": "v1.1.9",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/service-contracts.git",
+                "reference": "b776d18b303a39f56c63747bcb977ad4b27aca26"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/service-contracts/zipball/b776d18b303a39f56c63747bcb977ad4b27aca26",
+                "reference": "b776d18b303a39f56c63747bcb977ad4b27aca26",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.1.3",
+                "psr/container": "^1.0"
+            },
+            "suggest": {
+                "symfony/service-implementation": ""
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.1-dev"
+                },
+                "thanks": {
+                    "name": "symfony/contracts",
+                    "url": "https://github.com/symfony/contracts"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Contracts\\Service\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Generic abstractions related to writing services",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "abstractions",
+                "contracts",
+                "decoupling",
+                "interfaces",
+                "interoperability",
+                "standards"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-06T13:19:58+00:00"
         }
     ],
     "packages-dev": [
         {
             "name": "doctrine/instantiator",
-            "version": "1.1.0",
+            "version": "1.3.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/doctrine/instantiator.git",
-                "reference": "185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda"
+                "reference": "f350df0268e904597e3bd9c4685c53e0e333feea"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/instantiator/zipball/185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda",
-                "reference": "185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda",
+                "url": "https://api.github.com/repos/doctrine/instantiator/zipball/f350df0268e904597e3bd9c4685c53e0e333feea",
+                "reference": "f350df0268e904597e3bd9c4685c53e0e333feea",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.1"
+                "php": "^7.1 || ^8.0"
             },
             "require-dev": {
-                "athletic/athletic": "~0.1.8",
+                "doctrine/coding-standard": "^6.0",
                 "ext-pdo": "*",
                 "ext-phar": "*",
-                "phpunit/phpunit": "^6.2.3",
-                "squizlabs/php_codesniffer": "^3.0.2"
+                "phpbench/phpbench": "^0.13",
+                "phpstan/phpstan-phpunit": "^0.11",
+                "phpstan/phpstan-shim": "^0.11",
+                "phpunit/phpunit": "^7.0"
             },
             "type": "library",
             "extra": {
@@ -290,36 +628,50 @@
                 }
             ],
             "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
-            "homepage": "https://github.com/doctrine/instantiator",
+            "homepage": "https://www.doctrine-project.org/projects/instantiator.html",
             "keywords": [
                 "constructor",
                 "instantiate"
             ],
-            "time": "2017-07-22T11:58:36+00:00"
+            "funding": [
+                {
+                    "url": "https://www.doctrine-project.org/sponsorship.html",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://www.patreon.com/phpdoctrine",
+                    "type": "patreon"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-05-29T17:27:14+00:00"
         },
         {
             "name": "g1a/composer-test-scenarios",
-            "version": "3.0.0",
+            "version": "3.2.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/g1a/composer-test-scenarios.git",
-                "reference": "2a7156f1572898888ea50ad1d48a6b4d3f9fbf78"
+                "reference": "e7394206d845fd593d325440507fb940bef8cb62"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/g1a/composer-test-scenarios/zipball/2a7156f1572898888ea50ad1d48a6b4d3f9fbf78",
-                "reference": "2a7156f1572898888ea50ad1d48a6b4d3f9fbf78",
+                "url": "https://api.github.com/repos/g1a/composer-test-scenarios/zipball/e7394206d845fd593d325440507fb940bef8cb62",
+                "reference": "e7394206d845fd593d325440507fb940bef8cb62",
                 "shasum": ""
             },
             "require": {
-                "composer-plugin-api": "^1.0.0",
+                "composer-plugin-api": "^1.0.0 || ^2.0.0",
                 "php": ">=5.4"
             },
             "require-dev": {
-                "composer/composer": "^1.7",
+                "composer/composer": "^1.10.6 || ^2.0@rc",
                 "php-coveralls/php-coveralls": "^1.0",
                 "phpunit/phpunit": "^4.8.36|^6",
-                "squizlabs/php_codesniffer": "^2.8"
+                "squizlabs/php_codesniffer": "^3.5"
             },
             "bin": [
                 "scripts/dependency-licenses"
@@ -328,7 +680,7 @@
             "extra": {
                 "class": "ComposerTestScenarios\\Plugin",
                 "branch-alias": {
-                    "dev-master": "3.x-dev"
+                    "dev-main": "3.x-dev"
                 }
             },
             "autoload": {
@@ -347,26 +699,26 @@
                 }
             ],
             "description": "Useful scripts for testing multiple sets of Composer dependencies.",
-            "time": "2018-11-22T05:10:20+00:00"
+            "time": "2020-09-28T20:54:35+00:00"
         },
         {
             "name": "guzzle/guzzle",
-            "version": "v3.9.3",
+            "version": "v3.8.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/guzzle/guzzle3.git",
-                "reference": "0645b70d953bc1c067bbc8d5bc53194706b628d9"
+                "url": "https://github.com/guzzle/guzzle.git",
+                "reference": "4de0618a01b34aa1c8c33a3f13f396dcd3882eba"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/guzzle/guzzle3/zipball/0645b70d953bc1c067bbc8d5bc53194706b628d9",
-                "reference": "0645b70d953bc1c067bbc8d5bc53194706b628d9",
+                "url": "https://api.github.com/repos/guzzle/guzzle/zipball/4de0618a01b34aa1c8c33a3f13f396dcd3882eba",
+                "reference": "4de0618a01b34aa1c8c33a3f13f396dcd3882eba",
                 "shasum": ""
             },
             "require": {
                 "ext-curl": "*",
                 "php": ">=5.3.3",
-                "symfony/event-dispatcher": "~2.1"
+                "symfony/event-dispatcher": ">=2.1"
             },
             "replace": {
                 "guzzle/batch": "self.version",
@@ -393,21 +745,18 @@
                 "guzzle/stream": "self.version"
             },
             "require-dev": {
-                "doctrine/cache": "~1.3",
-                "monolog/monolog": "~1.0",
+                "doctrine/cache": "*",
+                "monolog/monolog": "1.*",
                 "phpunit/phpunit": "3.7.*",
-                "psr/log": "~1.0",
-                "symfony/class-loader": "~2.1",
-                "zendframework/zend-cache": "2.*,<2.3",
-                "zendframework/zend-log": "2.*,<2.3"
-            },
-            "suggest": {
-                "guzzlehttp/guzzle": "Guzzle 5 has moved to a new package name. The package you have installed, Guzzle 3, is deprecated."
+                "psr/log": "1.0.*",
+                "symfony/class-loader": "*",
+                "zendframework/zend-cache": "<2.3",
+                "zendframework/zend-log": "<2.3"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "3.9-dev"
+                    "dev-master": "3.8-dev"
                 }
             },
             "autoload": {
@@ -431,7 +780,7 @@
                     "homepage": "https://github.com/guzzle/guzzle/contributors"
                 }
             ],
-            "description": "PHP HTTP client. This library is deprecated in favor of https://packagist.org/packages/guzzlehttp/guzzle",
+            "description": "Guzzle is a PHP HTTP client library and framework for building RESTful web service clients",
             "homepage": "http://guzzlephp.org/",
             "keywords": [
                 "client",
@@ -443,24 +792,24 @@
                 "web service"
             ],
             "abandoned": "guzzlehttp/guzzle",
-            "time": "2015-03-18T18:23:50+00:00"
+            "time": "2014-01-28T22:29:15+00:00"
         },
         {
             "name": "myclabs/deep-copy",
-            "version": "1.8.1",
+            "version": "1.10.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/myclabs/DeepCopy.git",
-                "reference": "3e01bdad3e18354c3dce54466b7fbe33a9f9f7f8"
+                "reference": "969b211f9a51aa1f6c01d1d2aef56d3bd91598e5"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3e01bdad3e18354c3dce54466b7fbe33a9f9f7f8",
-                "reference": "3e01bdad3e18354c3dce54466b7fbe33a9f9f7f8",
+                "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/969b211f9a51aa1f6c01d1d2aef56d3bd91598e5",
+                "reference": "969b211f9a51aa1f6c01d1d2aef56d3bd91598e5",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.1"
+                "php": "^7.1 || ^8.0"
             },
             "replace": {
                 "myclabs/deep-copy": "self.version"
@@ -491,7 +840,13 @@
                 "object",
                 "object graph"
             ],
-            "time": "2018-06-11T23:09:50+00:00"
+            "funding": [
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-06-29T13:22:24+00:00"
         },
         {
             "name": "phar-io/manifest",
@@ -658,35 +1013,30 @@
         },
         {
             "name": "phpdocumentor/reflection-common",
-            "version": "1.0.1",
+            "version": "2.1.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpDocumentor/ReflectionCommon.git",
-                "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6"
+                "reference": "6568f4687e5b41b054365f9ae03fcb1ed5f2069b"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6",
-                "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6",
+                "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/6568f4687e5b41b054365f9ae03fcb1ed5f2069b",
+                "reference": "6568f4687e5b41b054365f9ae03fcb1ed5f2069b",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.5"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^4.6"
+                "php": ">=7.1"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.0.x-dev"
+                    "dev-master": "2.x-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "phpDocumentor\\Reflection\\": [
-                        "src"
-                    ]
+                    "phpDocumentor\\Reflection\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -708,31 +1058,32 @@
                 "reflection",
                 "static analysis"
             ],
-            "time": "2017-09-11T18:02:19+00:00"
+            "time": "2020-04-27T09:25:28+00:00"
         },
         {
             "name": "phpdocumentor/reflection-docblock",
-            "version": "4.3.0",
+            "version": "4.3.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
-                "reference": "94fd0001232e47129dd3504189fa1c7225010d08"
+                "reference": "da3fd972d6bafd628114f7e7e036f45944b62e9c"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/94fd0001232e47129dd3504189fa1c7225010d08",
-                "reference": "94fd0001232e47129dd3504189fa1c7225010d08",
+                "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/da3fd972d6bafd628114f7e7e036f45944b62e9c",
+                "reference": "da3fd972d6bafd628114f7e7e036f45944b62e9c",
                 "shasum": ""
             },
             "require": {
                 "php": "^7.0",
-                "phpdocumentor/reflection-common": "^1.0.0",
-                "phpdocumentor/type-resolver": "^0.4.0",
+                "phpdocumentor/reflection-common": "^1.0.0 || ^2.0.0",
+                "phpdocumentor/type-resolver": "~0.4 || ^1.0.0",
                 "webmozart/assert": "^1.0"
             },
             "require-dev": {
-                "doctrine/instantiator": "~1.0.5",
+                "doctrine/instantiator": "^1.0.5",
                 "mockery/mockery": "^1.0",
+                "phpdocumentor/type-resolver": "0.4.*",
                 "phpunit/phpunit": "^6.4"
             },
             "type": "library",
@@ -759,41 +1110,40 @@
                 }
             ],
             "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
-            "time": "2017-11-30T07:14:17+00:00"
+            "time": "2019-12-28T18:55:12+00:00"
         },
         {
             "name": "phpdocumentor/type-resolver",
-            "version": "0.4.0",
+            "version": "1.0.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpDocumentor/TypeResolver.git",
-                "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7"
+                "reference": "2e32a6d48972b2c1976ed5d8967145b6cec4a4a9"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7",
-                "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7",
+                "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/2e32a6d48972b2c1976ed5d8967145b6cec4a4a9",
+                "reference": "2e32a6d48972b2c1976ed5d8967145b6cec4a4a9",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.5 || ^7.0",
-                "phpdocumentor/reflection-common": "^1.0"
+                "php": "^7.1",
+                "phpdocumentor/reflection-common": "^2.0"
             },
             "require-dev": {
-                "mockery/mockery": "^0.9.4",
-                "phpunit/phpunit": "^5.2||^4.8.24"
+                "ext-tokenizer": "^7.1",
+                "mockery/mockery": "~1",
+                "phpunit/phpunit": "^7.0"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.0.x-dev"
+                    "dev-master": "1.x-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "phpDocumentor\\Reflection\\": [
-                        "src/"
-                    ]
+                    "phpDocumentor\\Reflection\\": "src"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -806,42 +1156,43 @@
                     "email": "me@mikevanriel.com"
                 }
             ],
-            "time": "2017-07-14T14:27:02+00:00"
+            "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
+            "time": "2019-08-22T18:11:29+00:00"
         },
         {
             "name": "phpspec/prophecy",
-            "version": "1.8.0",
+            "version": "v1.10.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpspec/prophecy.git",
-                "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06"
+                "reference": "451c3cd1418cf640de218914901e51b064abb093"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpspec/prophecy/zipball/4ba436b55987b4bf311cb7c6ba82aa528aac0a06",
-                "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06",
+                "url": "https://api.github.com/repos/phpspec/prophecy/zipball/451c3cd1418cf640de218914901e51b064abb093",
+                "reference": "451c3cd1418cf640de218914901e51b064abb093",
                 "shasum": ""
             },
             "require": {
                 "doctrine/instantiator": "^1.0.2",
                 "php": "^5.3|^7.0",
-                "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0",
-                "sebastian/comparator": "^1.1|^2.0|^3.0",
-                "sebastian/recursion-context": "^1.0|^2.0|^3.0"
+                "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0",
+                "sebastian/comparator": "^1.2.3|^2.0|^3.0|^4.0",
+                "sebastian/recursion-context": "^1.0|^2.0|^3.0|^4.0"
             },
             "require-dev": {
-                "phpspec/phpspec": "^2.5|^3.2",
+                "phpspec/phpspec": "^2.5 || ^3.2",
                 "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.8.x-dev"
+                    "dev-master": "1.10.x-dev"
                 }
             },
             "autoload": {
-                "psr-0": {
-                    "Prophecy\\": "src/"
+                "psr-4": {
+                    "Prophecy\\": "src/Prophecy"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -869,7 +1220,7 @@
                 "spy",
                 "stub"
             ],
-            "time": "2018-08-05T17:53:17+00:00"
+            "time": "2020-03-05T15:02:03+00:00"
         },
         {
             "name": "phpunit/php-code-coverage",
@@ -1118,20 +1469,21 @@
             "keywords": [
                 "tokenizer"
             ],
+            "abandoned": true,
             "time": "2017-11-27T05:48:46+00:00"
         },
         {
             "name": "phpunit/phpunit",
-            "version": "6.5.13",
+            "version": "6.5.14",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/phpunit.git",
-                "reference": "0973426fb012359b2f18d3bd1e90ef1172839693"
+                "reference": "bac23fe7ff13dbdb461481f706f0e9fe746334b7"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/0973426fb012359b2f18d3bd1e90ef1172839693",
-                "reference": "0973426fb012359b2f18d3bd1e90ef1172839693",
+                "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/bac23fe7ff13dbdb461481f706f0e9fe746334b7",
+                "reference": "bac23fe7ff13dbdb461481f706f0e9fe746334b7",
                 "shasum": ""
             },
             "require": {
@@ -1202,7 +1554,7 @@
                 "testing",
                 "xunit"
             ],
-            "time": "2018-09-08T15:10:43+00:00"
+            "time": "2019-02-01T05:22:47+00:00"
         },
         {
             "name": "phpunit/phpunit-mock-objects",
@@ -1261,20 +1613,21 @@
                 "mock",
                 "xunit"
             ],
+            "abandoned": true,
             "time": "2018-08-09T05:50:03+00:00"
         },
         {
             "name": "psr/log",
-            "version": "1.1.0",
+            "version": "1.1.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/php-fig/log.git",
-                "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd"
+                "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/php-fig/log/zipball/6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd",
-                "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd",
+                "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc",
+                "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc",
                 "shasum": ""
             },
             "require": {
@@ -1283,7 +1636,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.0.x-dev"
+                    "dev-master": "1.1.x-dev"
                 }
             },
             "autoload": {
@@ -1308,7 +1661,7 @@
                 "psr",
                 "psr-3"
             ],
-            "time": "2018-11-20T15:27:04+00:00"
+            "time": "2020-03-23T09:12:05+00:00"
         },
         {
             "name": "sebastian/code-unit-reverse-lookup",
@@ -1523,16 +1876,16 @@
         },
         {
             "name": "sebastian/exporter",
-            "version": "3.1.0",
+            "version": "3.1.2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/exporter.git",
-                "reference": "234199f4528de6d12aaa58b612e98f7d36adb937"
+                "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/234199f4528de6d12aaa58b612e98f7d36adb937",
-                "reference": "234199f4528de6d12aaa58b612e98f7d36adb937",
+                "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/68609e1261d215ea5b21b7987539cbfbe156ec3e",
+                "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e",
                 "shasum": ""
             },
             "require": {
@@ -1559,6 +1912,10 @@
                 "BSD-3-Clause"
             ],
             "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                },
                 {
                     "name": "Jeff Welch",
                     "email": "whatthejeff@gmail.com"
@@ -1567,17 +1924,13 @@
                     "name": "Volker Dusch",
                     "email": "github@wallbash.com"
                 },
-                {
-                    "name": "Bernhard Schussek",
-                    "email": "bschussek@2bepublished.at"
-                },
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de"
-                },
                 {
                     "name": "Adam Harvey",
                     "email": "aharvey@php.net"
+                },
+                {
+                    "name": "Bernhard Schussek",
+                    "email": "bschussek@gmail.com"
                 }
             ],
             "description": "Provides the functionality to export PHP variables for visualization",
@@ -1586,7 +1939,7 @@
                 "export",
                 "exporter"
             ],
-            "time": "2017-04-03T13:19:02+00:00"
+            "time": "2019-09-14T09:02:43+00:00"
         },
         {
             "name": "sebastian/global-state",
@@ -1949,31 +2302,32 @@
         },
         {
             "name": "symfony/config",
-            "version": "v4.1.7",
+            "version": "v4.4.15",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/config.git",
-                "reference": "991fec8bbe77367fc8b48ecbaa8a4bd6e905a238"
+                "reference": "7c5a1002178a612787c291a4f515f87b19176b61"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/config/zipball/991fec8bbe77367fc8b48ecbaa8a4bd6e905a238",
-                "reference": "991fec8bbe77367fc8b48ecbaa8a4bd6e905a238",
+                "url": "https://api.github.com/repos/symfony/config/zipball/7c5a1002178a612787c291a4f515f87b19176b61",
+                "reference": "7c5a1002178a612787c291a4f515f87b19176b61",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.1.3",
-                "symfony/filesystem": "~3.4|~4.0",
+                "php": ">=7.1.3",
+                "symfony/filesystem": "^3.4|^4.0|^5.0",
                 "symfony/polyfill-ctype": "~1.8"
             },
             "conflict": {
                 "symfony/finder": "<3.4"
             },
             "require-dev": {
-                "symfony/dependency-injection": "~3.4|~4.0",
-                "symfony/event-dispatcher": "~3.4|~4.0",
-                "symfony/finder": "~3.4|~4.0",
-                "symfony/yaml": "~3.4|~4.0"
+                "symfony/event-dispatcher": "^3.4|^4.0|^5.0",
+                "symfony/finder": "^3.4|^4.0|^5.0",
+                "symfony/messenger": "^4.1|^5.0",
+                "symfony/service-contracts": "^1.1|^2",
+                "symfony/yaml": "^3.4|^4.0|^5.0"
             },
             "suggest": {
                 "symfony/yaml": "To use the yaml reference dumper"
@@ -1981,7 +2335,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "4.1-dev"
+                    "dev-master": "4.4-dev"
                 }
             },
             "autoload": {
@@ -2008,31 +2362,56 @@
             ],
             "description": "Symfony Config Component",
             "homepage": "https://symfony.com",
-            "time": "2018-10-31T09:09:42+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-10-02T07:34:48+00:00"
         },
         {
             "name": "symfony/event-dispatcher",
-            "version": "v2.8.47",
+            "version": "v4.4.15",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/event-dispatcher.git",
-                "reference": "76494bc38ff38d90d01913d23b5271acd4d78dd3"
+                "reference": "e17bb5e0663dc725f7cdcafc932132735b4725cd"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/76494bc38ff38d90d01913d23b5271acd4d78dd3",
-                "reference": "76494bc38ff38d90d01913d23b5271acd4d78dd3",
+                "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/e17bb5e0663dc725f7cdcafc932132735b4725cd",
+                "reference": "e17bb5e0663dc725f7cdcafc932132735b4725cd",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.9"
+                "php": ">=7.1.3",
+                "symfony/event-dispatcher-contracts": "^1.1"
+            },
+            "conflict": {
+                "symfony/dependency-injection": "<3.4"
+            },
+            "provide": {
+                "psr/event-dispatcher-implementation": "1.0",
+                "symfony/event-dispatcher-implementation": "1.1"
             },
             "require-dev": {
                 "psr/log": "~1.0",
-                "symfony/config": "^2.0.5|~3.0.0",
-                "symfony/dependency-injection": "~2.6|~3.0.0",
-                "symfony/expression-language": "~2.6|~3.0.0",
-                "symfony/stopwatch": "~2.3|~3.0.0"
+                "symfony/config": "^3.4|^4.0|^5.0",
+                "symfony/dependency-injection": "^3.4|^4.0|^5.0",
+                "symfony/error-handler": "~3.4|~4.4",
+                "symfony/expression-language": "^3.4|^4.0|^5.0",
+                "symfony/http-foundation": "^3.4|^4.0|^5.0",
+                "symfony/service-contracts": "^1.1|^2",
+                "symfony/stopwatch": "^3.4|^4.0|^5.0"
             },
             "suggest": {
                 "symfony/dependency-injection": "",
@@ -2041,7 +2420,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.8-dev"
+                    "dev-master": "4.4-dev"
                 }
             },
             "autoload": {
@@ -2068,30 +2447,120 @@
             ],
             "description": "Symfony EventDispatcher Component",
             "homepage": "https://symfony.com",
-            "time": "2018-10-20T23:16:31+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-18T14:07:46+00:00"
+        },
+        {
+            "name": "symfony/event-dispatcher-contracts",
+            "version": "v1.1.9",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/event-dispatcher-contracts.git",
+                "reference": "84e23fdcd2517bf37aecbd16967e83f0caee25a7"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/84e23fdcd2517bf37aecbd16967e83f0caee25a7",
+                "reference": "84e23fdcd2517bf37aecbd16967e83f0caee25a7",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.1.3"
+            },
+            "suggest": {
+                "psr/event-dispatcher": "",
+                "symfony/event-dispatcher-implementation": ""
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.1-dev"
+                },
+                "thanks": {
+                    "name": "symfony/contracts",
+                    "url": "https://github.com/symfony/contracts"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Contracts\\EventDispatcher\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Generic abstractions related to dispatching event",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "abstractions",
+                "contracts",
+                "decoupling",
+                "interfaces",
+                "interoperability",
+                "standards"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-06T13:19:58+00:00"
         },
         {
             "name": "symfony/filesystem",
-            "version": "v4.1.7",
+            "version": "v4.4.15",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/filesystem.git",
-                "reference": "fd7bd6535beb1f0a0a9e3ee960666d0598546981"
+                "reference": "ebc51494739d3b081ea543ed7c462fa73a4f74db"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/filesystem/zipball/fd7bd6535beb1f0a0a9e3ee960666d0598546981",
-                "reference": "fd7bd6535beb1f0a0a9e3ee960666d0598546981",
+                "url": "https://api.github.com/repos/symfony/filesystem/zipball/ebc51494739d3b081ea543ed7c462fa73a4f74db",
+                "reference": "ebc51494739d3b081ea543ed7c462fa73a4f74db",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.1.3",
+                "php": ">=7.1.3",
                 "symfony/polyfill-ctype": "~1.8"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "4.1-dev"
+                    "dev-master": "4.4-dev"
                 }
             },
             "autoload": {
@@ -2118,20 +2587,34 @@
             ],
             "description": "Symfony Filesystem Component",
             "homepage": "https://symfony.com",
-            "time": "2018-10-30T13:18:25+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-27T13:54:16+00:00"
         },
         {
             "name": "symfony/polyfill-ctype",
-            "version": "v1.10.0",
+            "version": "v1.18.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-ctype.git",
-                "reference": "e3d826245268269cd66f8326bd8bc066687b4a19"
+                "reference": "1c302646f6efc070cd46856e600e5e0684d6b454"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/e3d826245268269cd66f8326bd8bc066687b4a19",
-                "reference": "e3d826245268269cd66f8326bd8bc066687b4a19",
+                "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/1c302646f6efc070cd46856e600e5e0684d6b454",
+                "reference": "1c302646f6efc070cd46856e600e5e0684d6b454",
                 "shasum": ""
             },
             "require": {
@@ -2143,7 +2626,11 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.9-dev"
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
                 }
             },
             "autoload": {
@@ -2159,13 +2646,13 @@
                 "MIT"
             ],
             "authors": [
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                },
                 {
                     "name": "Gert de Pagter",
                     "email": "BackEndTea@gmail.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
                 }
             ],
             "description": "Symfony polyfill for ctype functions",
@@ -2176,20 +2663,34 @@
                 "polyfill",
                 "portable"
             ],
-            "time": "2018-08-06T14:22:27+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-14T12:35:20+00:00"
         },
         {
             "name": "symfony/polyfill-php72",
-            "version": "v1.10.0",
+            "version": "v1.18.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-php72.git",
-                "reference": "9050816e2ca34a8e916c3a0ae8b9c2fccf68b631"
+                "reference": "639447d008615574653fb3bc60d1986d7172eaae"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/9050816e2ca34a8e916c3a0ae8b9c2fccf68b631",
-                "reference": "9050816e2ca34a8e916c3a0ae8b9c2fccf68b631",
+                "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/639447d008615574653fb3bc60d1986d7172eaae",
+                "reference": "639447d008615574653fb3bc60d1986d7172eaae",
                 "shasum": ""
             },
             "require": {
@@ -2198,7 +2699,11 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.9-dev"
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
                 }
             },
             "autoload": {
@@ -2231,29 +2736,44 @@
                 "portable",
                 "shim"
             ],
-            "time": "2018-09-21T13:07:52+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-14T12:35:20+00:00"
         },
         {
             "name": "symfony/stopwatch",
-            "version": "v4.1.7",
+            "version": "v4.4.15",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/stopwatch.git",
-                "reference": "5bfc064125b73ff81229e19381ce1c34d3416f4b"
+                "reference": "6f89e19772cf61b3c65bab329fe0e318259fbd91"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/stopwatch/zipball/5bfc064125b73ff81229e19381ce1c34d3416f4b",
-                "reference": "5bfc064125b73ff81229e19381ce1c34d3416f4b",
+                "url": "https://api.github.com/repos/symfony/stopwatch/zipball/6f89e19772cf61b3c65bab329fe0e318259fbd91",
+                "reference": "6f89e19772cf61b3c65bab329fe0e318259fbd91",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.1.3"
+                "php": ">=7.1.3",
+                "symfony/service-contracts": "^1.0|^2"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "4.1-dev"
+                    "dev-master": "4.4-dev"
                 }
             },
             "autoload": {
@@ -2280,26 +2800,41 @@
             ],
             "description": "Symfony Stopwatch Component",
             "homepage": "https://symfony.com",
-            "time": "2018-10-02T12:40:59+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-02T16:08:58+00:00"
         },
         {
             "name": "symfony/var-dumper",
-            "version": "v4.1.7",
+            "version": "v4.4.15",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/var-dumper.git",
-                "reference": "60319b45653580b0cdacca499344577d87732f16"
+                "reference": "0dc22bdf9d1197467bb04d505355180b6f20bcca"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/var-dumper/zipball/60319b45653580b0cdacca499344577d87732f16",
-                "reference": "60319b45653580b0cdacca499344577d87732f16",
+                "url": "https://api.github.com/repos/symfony/var-dumper/zipball/0dc22bdf9d1197467bb04d505355180b6f20bcca",
+                "reference": "0dc22bdf9d1197467bb04d505355180b6f20bcca",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.1.3",
+                "php": ">=7.1.3",
                 "symfony/polyfill-mbstring": "~1.0",
-                "symfony/polyfill-php72": "~1.5"
+                "symfony/polyfill-php72": "~1.5",
+                "symfony/polyfill-php80": "^1.15"
             },
             "conflict": {
                 "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0",
@@ -2307,8 +2842,9 @@
             },
             "require-dev": {
                 "ext-iconv": "*",
-                "symfony/process": "~3.4|~4.0",
-                "twig/twig": "~1.34|~2.4"
+                "symfony/console": "^3.4|^4.0|^5.0",
+                "symfony/process": "^4.4|^5.0",
+                "twig/twig": "^1.34|^2.4|^3.0"
             },
             "suggest": {
                 "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).",
@@ -2321,7 +2857,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "4.1-dev"
+                    "dev-master": "4.4-dev"
                 }
             },
             "autoload": {
@@ -2355,31 +2891,45 @@
                 "debug",
                 "dump"
             ],
-            "time": "2018-10-02T16:36:10+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-18T08:35:10+00:00"
         },
         {
             "name": "symfony/yaml",
-            "version": "v4.1.7",
+            "version": "v4.4.15",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/yaml.git",
-                "reference": "367e689b2fdc19965be435337b50bc8adf2746c9"
+                "reference": "c7885964b1eceb70b0981556d0a9b01d2d97c8d1"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/yaml/zipball/367e689b2fdc19965be435337b50bc8adf2746c9",
-                "reference": "367e689b2fdc19965be435337b50bc8adf2746c9",
+                "url": "https://api.github.com/repos/symfony/yaml/zipball/c7885964b1eceb70b0981556d0a9b01d2d97c8d1",
+                "reference": "c7885964b1eceb70b0981556d0a9b01d2d97c8d1",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.1.3",
+                "php": ">=7.1.3",
                 "symfony/polyfill-ctype": "~1.8"
             },
             "conflict": {
                 "symfony/console": "<3.4"
             },
             "require-dev": {
-                "symfony/console": "~3.4|~4.0"
+                "symfony/console": "^3.4|^4.0|^5.0"
             },
             "suggest": {
                 "symfony/console": "For validating YAML files using the lint command"
@@ -2387,7 +2937,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "4.1-dev"
+                    "dev-master": "4.4-dev"
                 }
             },
             "autoload": {
@@ -2414,20 +2964,34 @@
             ],
             "description": "Symfony Yaml Component",
             "homepage": "https://symfony.com",
-            "time": "2018-10-02T16:36:10+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-27T03:36:23+00:00"
         },
         {
             "name": "theseer/tokenizer",
-            "version": "1.1.0",
+            "version": "1.1.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/theseer/tokenizer.git",
-                "reference": "cb2f008f3f05af2893a87208fe6a6c4985483f8b"
+                "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/theseer/tokenizer/zipball/cb2f008f3f05af2893a87208fe6a6c4985483f8b",
-                "reference": "cb2f008f3f05af2893a87208fe6a6c4985483f8b",
+                "url": "https://api.github.com/repos/theseer/tokenizer/zipball/11336f6f84e16a720dae9d8e6ed5019efa85a0f9",
+                "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9",
                 "shasum": ""
             },
             "require": {
@@ -2454,7 +3018,7 @@
                 }
             ],
             "description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
-            "time": "2017-04-07T12:08:54+00:00"
+            "time": "2019-06-13T22:48:21+00:00"
         },
         {
             "name": "victorjonsson/markdowndocs",
@@ -2502,31 +3066,30 @@
         },
         {
             "name": "webmozart/assert",
-            "version": "1.3.0",
+            "version": "1.9.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/webmozart/assert.git",
-                "reference": "0df1908962e7a3071564e857d86874dad1ef204a"
+                "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/webmozart/assert/zipball/0df1908962e7a3071564e857d86874dad1ef204a",
-                "reference": "0df1908962e7a3071564e857d86874dad1ef204a",
+                "url": "https://api.github.com/repos/webmozart/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389",
+                "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.3.3 || ^7.0"
+                "php": "^5.3.3 || ^7.0 || ^8.0",
+                "symfony/polyfill-ctype": "^1.8"
+            },
+            "conflict": {
+                "phpstan/phpstan": "<0.12.20",
+                "vimeo/psalm": "<3.9.1"
             },
             "require-dev": {
-                "phpunit/phpunit": "^4.6",
-                "sebastian/version": "^1.0.1"
+                "phpunit/phpunit": "^4.8.36 || ^7.5.13"
             },
             "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.3-dev"
-                }
-            },
             "autoload": {
                 "psr-4": {
                     "Webmozart\\Assert\\": "src/"
@@ -2548,7 +3111,7 @@
                 "check",
                 "validate"
             ],
-            "time": "2018-01-29T19:49:41+00:00"
+            "time": "2020-07-08T17:02:28+00:00"
         }
     ],
     "aliases": [],
@@ -2562,5 +3125,6 @@
     "platform-dev": [],
     "platform-overrides": {
         "php": "7.1.3"
-    }
+    },
+    "plugin-api-version": "1.1.0"
 }
diff --git a/vendor/consolidation/output-formatters/CHANGELOG.md b/vendor/consolidation/output-formatters/CHANGELOG.md
index c7dfff53f059976b598a852fd0a0d7a0fb3a4fcb..87d0ac93d680342db21dec1d8afb86d52d5a60b8 100644
--- a/vendor/consolidation/output-formatters/CHANGELOG.md
+++ b/vendor/consolidation/output-formatters/CHANGELOG.md
@@ -1,5 +1,9 @@
 # Change Log
 
+### 3.5.1 - 10 October 2020
+
+- Allow symfony/finder ^5 in output-formatters 3.x. (#87)
+
 ### 3.5.0 - 30 May 2019
 
 - Add `@default-table-fields` to specify the fields to use with the table formatter and other "human readable" output formats.
diff --git a/vendor/consolidation/output-formatters/LICENSE b/vendor/consolidation/output-formatters/LICENSE
index 5f6b7d1744b0c98ac715a8c429df230f665d588c..3ce4262e0ee3992063a2dc44f83a6826a3a6fb0a 100644
--- a/vendor/consolidation/output-formatters/LICENSE
+++ b/vendor/consolidation/output-formatters/LICENSE
@@ -1,4 +1,4 @@
-Copyright (c) 2016-2018 Consolidation Org Developers
+Copyright (c) 2016-2020 Consolidation Org Developers
 
 
 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
@@ -11,8 +11,8 @@ DEPENDENCY LICENSES:
 
 Name                       Version  License
 dflydev/dot-access-data    v1.1.0   MIT
-psr/log                    1.1.0    MIT
-symfony/console            v3.4.18  MIT
-symfony/debug              v3.4.18  MIT
-symfony/finder             v3.4.18  MIT
-symfony/polyfill-mbstring  v1.10.0  MIT
\ No newline at end of file
+psr/log                    1.1.3    MIT
+symfony/console            v3.4.45  MIT
+symfony/debug              v3.4.45  MIT
+symfony/finder             v3.4.45  MIT
+symfony/polyfill-mbstring  v1.18.1  MIT
\ No newline at end of file
diff --git a/vendor/consolidation/output-formatters/composer.json b/vendor/consolidation/output-formatters/composer.json
index e8d9a044360a126beb02104d79e95ffa07a1e94c..e3d6e8cd4e6bb73d29210fb775c625802f3f1ad0 100644
--- a/vendor/consolidation/output-formatters/composer.json
+++ b/vendor/consolidation/output-formatters/composer.json
@@ -22,7 +22,7 @@
         "php": ">=5.4.0",
         "dflydev/dot-access-data": "^1.1.0",
         "symfony/console": "^2.8|^3|^4",
-        "symfony/finder": "^2.5|^3|^4"
+        "symfony/finder": "^2.5|^3|^4|^5"
     },
     "require-dev": {
         "g1a/composer-test-scenarios": "^3",
@@ -59,6 +59,16 @@
     },
     "extra": {
         "scenarios": {
+            "finder5": {
+                "require": {
+                    "symfony/finder": "^5"
+                },
+                "config": {
+                    "platform": {
+                        "php": "7.2.5"
+                    }
+                }                
+            },
             "symfony4": {
                 "require": {
                     "symfony/console": "^4.0"
diff --git a/vendor/consolidation/output-formatters/composer.lock b/vendor/consolidation/output-formatters/composer.lock
index 2dfee91f875ea50d80673f3c4c6d5227d9009809..d432b0d74ebce5881857b06e78c0f9a2c9f313b0 100644
--- a/vendor/consolidation/output-formatters/composer.lock
+++ b/vendor/consolidation/output-formatters/composer.lock
@@ -4,7 +4,7 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "This file is @generated automatically"
     ],
-    "content-hash": "ee70f32509f8c43ebd69a87705e29cad",
+    "content-hash": "067804939d9b5ba5a90e64c9fe3cc29e",
     "packages": [
         {
             "name": "dflydev/dot-access-data",
@@ -67,16 +67,16 @@
         },
         {
             "name": "psr/log",
-            "version": "1.1.0",
+            "version": "1.1.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/php-fig/log.git",
-                "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd"
+                "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/php-fig/log/zipball/6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd",
-                "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd",
+                "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc",
+                "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc",
                 "shasum": ""
             },
             "require": {
@@ -85,7 +85,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.0.x-dev"
+                    "dev-master": "1.1.x-dev"
                 }
             },
             "autoload": {
@@ -110,20 +110,20 @@
                 "psr",
                 "psr-3"
             ],
-            "time": "2018-11-20T15:27:04+00:00"
+            "time": "2020-03-23T09:12:05+00:00"
         },
         {
             "name": "symfony/console",
-            "version": "v3.4.18",
+            "version": "v3.4.45",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/console.git",
-                "reference": "1d228fb4602047d7b26a0554e0d3efd567da5803"
+                "reference": "b28996bc0a3b08914b2a8609163ec35b36b30685"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/console/zipball/1d228fb4602047d7b26a0554e0d3efd567da5803",
-                "reference": "1d228fb4602047d7b26a0554e0d3efd567da5803",
+                "url": "https://api.github.com/repos/symfony/console/zipball/b28996bc0a3b08914b2a8609163ec35b36b30685",
+                "reference": "b28996bc0a3b08914b2a8609163ec35b36b30685",
                 "shasum": ""
             },
             "require": {
@@ -135,6 +135,9 @@
                 "symfony/dependency-injection": "<3.4",
                 "symfony/process": "<3.3"
             },
+            "provide": {
+                "psr/log-implementation": "1.0"
+            },
             "require-dev": {
                 "psr/log": "~1.0",
                 "symfony/config": "~3.3|~4.0",
@@ -144,7 +147,7 @@
                 "symfony/process": "~3.3|~4.0"
             },
             "suggest": {
-                "psr/log-implementation": "For using the console logger",
+                "psr/log": "For using the console logger",
                 "symfony/event-dispatcher": "",
                 "symfony/lock": "",
                 "symfony/process": ""
@@ -179,20 +182,34 @@
             ],
             "description": "Symfony Console Component",
             "homepage": "https://symfony.com",
-            "time": "2018-10-30T16:50:50+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-09T05:09:37+00:00"
         },
         {
             "name": "symfony/debug",
-            "version": "v3.4.18",
+            "version": "v3.4.45",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/debug.git",
-                "reference": "fe9793af008b651c5441bdeab21ede8172dab097"
+                "reference": "9109e4414e684d0b75276ae203883467476d25d0"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/debug/zipball/fe9793af008b651c5441bdeab21ede8172dab097",
-                "reference": "fe9793af008b651c5441bdeab21ede8172dab097",
+                "url": "https://api.github.com/repos/symfony/debug/zipball/9109e4414e684d0b75276ae203883467476d25d0",
+                "reference": "9109e4414e684d0b75276ae203883467476d25d0",
                 "shasum": ""
             },
             "require": {
@@ -235,20 +252,34 @@
             ],
             "description": "Symfony Debug Component",
             "homepage": "https://symfony.com",
-            "time": "2018-10-31T09:06:03+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-08T22:19:14+00:00"
         },
         {
             "name": "symfony/finder",
-            "version": "v3.4.18",
+            "version": "v3.4.45",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/finder.git",
-                "reference": "54ba444dddc5bd5708a34bd095ea67c6eb54644d"
+                "reference": "52140652ed31cee3dabd0c481b5577201fa769b4"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/finder/zipball/54ba444dddc5bd5708a34bd095ea67c6eb54644d",
-                "reference": "54ba444dddc5bd5708a34bd095ea67c6eb54644d",
+                "url": "https://api.github.com/repos/symfony/finder/zipball/52140652ed31cee3dabd0c481b5577201fa769b4",
+                "reference": "52140652ed31cee3dabd0c481b5577201fa769b4",
                 "shasum": ""
             },
             "require": {
@@ -284,20 +315,34 @@
             ],
             "description": "Symfony Finder Component",
             "homepage": "https://symfony.com",
-            "time": "2018-10-03T08:46:40+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-02T16:06:40+00:00"
         },
         {
             "name": "symfony/polyfill-mbstring",
-            "version": "v1.10.0",
+            "version": "v1.18.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-mbstring.git",
-                "reference": "c79c051f5b3a46be09205c73b80b346e4153e494"
+                "reference": "a6977d63bf9a0ad4c65cd352709e230876f9904a"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/c79c051f5b3a46be09205c73b80b346e4153e494",
-                "reference": "c79c051f5b3a46be09205c73b80b346e4153e494",
+                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/a6977d63bf9a0ad4c65cd352709e230876f9904a",
+                "reference": "a6977d63bf9a0ad4c65cd352709e230876f9904a",
                 "shasum": ""
             },
             "require": {
@@ -309,7 +354,11 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.9-dev"
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
                 }
             },
             "autoload": {
@@ -343,7 +392,21 @@
                 "portable",
                 "shim"
             ],
-            "time": "2018-09-21T13:07:52+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-14T12:35:20+00:00"
         }
     ],
     "packages-dev": [
@@ -403,27 +466,27 @@
         },
         {
             "name": "g1a/composer-test-scenarios",
-            "version": "3.0.0",
+            "version": "3.2.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/g1a/composer-test-scenarios.git",
-                "reference": "2a7156f1572898888ea50ad1d48a6b4d3f9fbf78"
+                "reference": "e7394206d845fd593d325440507fb940bef8cb62"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/g1a/composer-test-scenarios/zipball/2a7156f1572898888ea50ad1d48a6b4d3f9fbf78",
-                "reference": "2a7156f1572898888ea50ad1d48a6b4d3f9fbf78",
+                "url": "https://api.github.com/repos/g1a/composer-test-scenarios/zipball/e7394206d845fd593d325440507fb940bef8cb62",
+                "reference": "e7394206d845fd593d325440507fb940bef8cb62",
                 "shasum": ""
             },
             "require": {
-                "composer-plugin-api": "^1.0.0",
+                "composer-plugin-api": "^1.0.0 || ^2.0.0",
                 "php": ">=5.4"
             },
             "require-dev": {
-                "composer/composer": "^1.7",
+                "composer/composer": "^1.10.6 || ^2.0@rc",
                 "php-coveralls/php-coveralls": "^1.0",
                 "phpunit/phpunit": "^4.8.36|^6",
-                "squizlabs/php_codesniffer": "^2.8"
+                "squizlabs/php_codesniffer": "^3.5"
             },
             "bin": [
                 "scripts/dependency-licenses"
@@ -432,7 +495,7 @@
             "extra": {
                 "class": "ComposerTestScenarios\\Plugin",
                 "branch-alias": {
-                    "dev-master": "3.x-dev"
+                    "dev-main": "3.x-dev"
                 }
             },
             "autoload": {
@@ -451,7 +514,7 @@
                 }
             ],
             "description": "Useful scripts for testing multiple sets of Composer dependencies.",
-            "time": "2018-11-22T05:10:20+00:00"
+            "time": "2020-09-28T20:54:35+00:00"
         },
         {
             "name": "guzzle/guzzle",
@@ -803,38 +866,38 @@
         },
         {
             "name": "phpspec/prophecy",
-            "version": "1.8.0",
+            "version": "v1.10.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpspec/prophecy.git",
-                "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06"
+                "reference": "451c3cd1418cf640de218914901e51b064abb093"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpspec/prophecy/zipball/4ba436b55987b4bf311cb7c6ba82aa528aac0a06",
-                "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06",
+                "url": "https://api.github.com/repos/phpspec/prophecy/zipball/451c3cd1418cf640de218914901e51b064abb093",
+                "reference": "451c3cd1418cf640de218914901e51b064abb093",
                 "shasum": ""
             },
             "require": {
                 "doctrine/instantiator": "^1.0.2",
                 "php": "^5.3|^7.0",
-                "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0",
-                "sebastian/comparator": "^1.1|^2.0|^3.0",
-                "sebastian/recursion-context": "^1.0|^2.0|^3.0"
+                "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0",
+                "sebastian/comparator": "^1.2.3|^2.0|^3.0|^4.0",
+                "sebastian/recursion-context": "^1.0|^2.0|^3.0|^4.0"
             },
             "require-dev": {
-                "phpspec/phpspec": "^2.5|^3.2",
+                "phpspec/phpspec": "^2.5 || ^3.2",
                 "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.8.x-dev"
+                    "dev-master": "1.10.x-dev"
                 }
             },
             "autoload": {
-                "psr-0": {
-                    "Prophecy\\": "src/"
+                "psr-4": {
+                    "Prophecy\\": "src/Prophecy"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -862,7 +925,7 @@
                 "spy",
                 "stub"
             ],
-            "time": "2018-08-05T17:53:17+00:00"
+            "time": "2020-03-05T15:02:03+00:00"
         },
         {
             "name": "phpunit/php-code-coverage",
@@ -1111,6 +1174,7 @@
             "keywords": [
                 "tokenizer"
             ],
+            "abandoned": true,
             "time": "2017-12-04T08:55:13+00:00"
         },
         {
@@ -1252,6 +1316,7 @@
                 "mock",
                 "xunit"
             ],
+            "abandoned": true,
             "time": "2017-06-30T09:13:00+00:00"
         },
         {
@@ -1847,16 +1912,16 @@
         },
         {
             "name": "symfony/config",
-            "version": "v3.4.18",
+            "version": "v3.4.45",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/config.git",
-                "reference": "99b2fa8acc244e656cdf324ff419fbe6fd300a4d"
+                "reference": "d061a451ff6bc170c5454f4ac9b41ad2179e3960"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/config/zipball/99b2fa8acc244e656cdf324ff419fbe6fd300a4d",
-                "reference": "99b2fa8acc244e656cdf324ff419fbe6fd300a4d",
+                "url": "https://api.github.com/repos/symfony/config/zipball/d061a451ff6bc170c5454f4ac9b41ad2179e3960",
+                "reference": "d061a451ff6bc170c5454f4ac9b41ad2179e3960",
                 "shasum": ""
             },
             "require": {
@@ -1907,20 +1972,34 @@
             ],
             "description": "Symfony Config Component",
             "homepage": "https://symfony.com",
-            "time": "2018-10-31T09:06:03+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-02T16:06:40+00:00"
         },
         {
             "name": "symfony/event-dispatcher",
-            "version": "v2.8.47",
+            "version": "v2.8.52",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/event-dispatcher.git",
-                "reference": "76494bc38ff38d90d01913d23b5271acd4d78dd3"
+                "reference": "a77e974a5fecb4398833b0709210e3d5e334ffb0"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/76494bc38ff38d90d01913d23b5271acd4d78dd3",
-                "reference": "76494bc38ff38d90d01913d23b5271acd4d78dd3",
+                "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/a77e974a5fecb4398833b0709210e3d5e334ffb0",
+                "reference": "a77e974a5fecb4398833b0709210e3d5e334ffb0",
                 "shasum": ""
             },
             "require": {
@@ -1967,20 +2046,20 @@
             ],
             "description": "Symfony EventDispatcher Component",
             "homepage": "https://symfony.com",
-            "time": "2018-10-20T23:16:31+00:00"
+            "time": "2018-11-21T14:20:20+00:00"
         },
         {
             "name": "symfony/filesystem",
-            "version": "v3.4.18",
+            "version": "v3.4.45",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/filesystem.git",
-                "reference": "d69930fc337d767607267d57c20a7403d0a822a4"
+                "reference": "495646f13d051cc5a8f77a68b68313dc854080aa"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/filesystem/zipball/d69930fc337d767607267d57c20a7403d0a822a4",
-                "reference": "d69930fc337d767607267d57c20a7403d0a822a4",
+                "url": "https://api.github.com/repos/symfony/filesystem/zipball/495646f13d051cc5a8f77a68b68313dc854080aa",
+                "reference": "495646f13d051cc5a8f77a68b68313dc854080aa",
                 "shasum": ""
             },
             "require": {
@@ -2017,20 +2096,34 @@
             ],
             "description": "Symfony Filesystem Component",
             "homepage": "https://symfony.com",
-            "time": "2018-10-02T12:28:39+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-02T16:06:40+00:00"
         },
         {
             "name": "symfony/polyfill-ctype",
-            "version": "v1.10.0",
+            "version": "v1.18.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-ctype.git",
-                "reference": "e3d826245268269cd66f8326bd8bc066687b4a19"
+                "reference": "1c302646f6efc070cd46856e600e5e0684d6b454"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/e3d826245268269cd66f8326bd8bc066687b4a19",
-                "reference": "e3d826245268269cd66f8326bd8bc066687b4a19",
+                "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/1c302646f6efc070cd46856e600e5e0684d6b454",
+                "reference": "1c302646f6efc070cd46856e600e5e0684d6b454",
                 "shasum": ""
             },
             "require": {
@@ -2042,7 +2135,11 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.9-dev"
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
                 }
             },
             "autoload": {
@@ -2058,13 +2155,13 @@
                 "MIT"
             ],
             "authors": [
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                },
                 {
                     "name": "Gert de Pagter",
                     "email": "BackEndTea@gmail.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
                 }
             ],
             "description": "Symfony polyfill for ctype functions",
@@ -2075,20 +2172,34 @@
                 "polyfill",
                 "portable"
             ],
-            "time": "2018-08-06T14:22:27+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-14T12:35:20+00:00"
         },
         {
             "name": "symfony/stopwatch",
-            "version": "v3.4.18",
+            "version": "v3.4.45",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/stopwatch.git",
-                "reference": "05e52a39de52ba690aebaed462b2bc8a9649f0a4"
+                "reference": "a7a98f40dcc382a332c3729a6d04b298ffbb8f1f"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/stopwatch/zipball/05e52a39de52ba690aebaed462b2bc8a9649f0a4",
-                "reference": "05e52a39de52ba690aebaed462b2bc8a9649f0a4",
+                "url": "https://api.github.com/repos/symfony/stopwatch/zipball/a7a98f40dcc382a332c3729a6d04b298ffbb8f1f",
+                "reference": "a7a98f40dcc382a332c3729a6d04b298ffbb8f1f",
                 "shasum": ""
             },
             "require": {
@@ -2124,20 +2235,34 @@
             ],
             "description": "Symfony Stopwatch Component",
             "homepage": "https://symfony.com",
-            "time": "2018-10-02T12:28:39+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-03-15T09:38:08+00:00"
         },
         {
             "name": "symfony/var-dumper",
-            "version": "v3.4.18",
+            "version": "v3.4.45",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/var-dumper.git",
-                "reference": "ff8ac19e97e5c7c3979236b584719a1190f84181"
+                "reference": "df8fe9c1c5dc3eb968db32ffa6b699d89fee2606"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/var-dumper/zipball/ff8ac19e97e5c7c3979236b584719a1190f84181",
-                "reference": "ff8ac19e97e5c7c3979236b584719a1190f84181",
+                "url": "https://api.github.com/repos/symfony/var-dumper/zipball/df8fe9c1c5dc3eb968db32ffa6b699d89fee2606",
+                "reference": "df8fe9c1c5dc3eb968db32ffa6b699d89fee2606",
                 "shasum": ""
             },
             "require": {
@@ -2193,20 +2318,34 @@
                 "debug",
                 "dump"
             ],
-            "time": "2018-10-02T16:33:53+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-18T08:10:16+00:00"
         },
         {
             "name": "symfony/yaml",
-            "version": "v3.4.18",
+            "version": "v3.4.45",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/yaml.git",
-                "reference": "640b6c27fed4066d64b64d5903a86043f4a4de7f"
+                "reference": "ec3c2ac4d881a4684c1f0317d2107f1a4152bad9"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/yaml/zipball/640b6c27fed4066d64b64d5903a86043f4a4de7f",
-                "reference": "640b6c27fed4066d64b64d5903a86043f4a4de7f",
+                "url": "https://api.github.com/repos/symfony/yaml/zipball/ec3c2ac4d881a4684c1f0317d2107f1a4152bad9",
+                "reference": "ec3c2ac4d881a4684c1f0317d2107f1a4152bad9",
                 "shasum": ""
             },
             "require": {
@@ -2252,7 +2391,21 @@
             ],
             "description": "Symfony Yaml Component",
             "homepage": "https://symfony.com",
-            "time": "2018-10-02T16:33:53+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-18T15:58:55+00:00"
         },
         {
             "name": "victorjonsson/markdowndocs",
@@ -2300,31 +2453,30 @@
         },
         {
             "name": "webmozart/assert",
-            "version": "1.3.0",
+            "version": "1.9.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/webmozart/assert.git",
-                "reference": "0df1908962e7a3071564e857d86874dad1ef204a"
+                "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/webmozart/assert/zipball/0df1908962e7a3071564e857d86874dad1ef204a",
-                "reference": "0df1908962e7a3071564e857d86874dad1ef204a",
+                "url": "https://api.github.com/repos/webmozart/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389",
+                "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.3.3 || ^7.0"
+                "php": "^5.3.3 || ^7.0 || ^8.0",
+                "symfony/polyfill-ctype": "^1.8"
+            },
+            "conflict": {
+                "phpstan/phpstan": "<0.12.20",
+                "vimeo/psalm": "<3.9.1"
             },
             "require-dev": {
-                "phpunit/phpunit": "^4.6",
-                "sebastian/version": "^1.0.1"
+                "phpunit/phpunit": "^4.8.36 || ^7.5.13"
             },
             "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.3-dev"
-                }
-            },
             "autoload": {
                 "psr-4": {
                     "Webmozart\\Assert\\": "src/"
@@ -2346,7 +2498,7 @@
                 "check",
                 "validate"
             ],
-            "time": "2018-01-29T19:49:41+00:00"
+            "time": "2020-07-08T17:02:28+00:00"
         }
     ],
     "aliases": [],
@@ -2360,5 +2512,6 @@
     "platform-dev": [],
     "platform-overrides": {
         "php": "5.6.32"
-    }
+    },
+    "plugin-api-version": "1.1.0"
 }
diff --git a/vendor/consolidation/robo/.scenarios.lock/finder5/.gitignore b/vendor/consolidation/robo/.scenarios.lock/finder5/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..5657f6ea7d574e423dc2c297e2e19a9dbd7a7170
--- /dev/null
+++ b/vendor/consolidation/robo/.scenarios.lock/finder5/.gitignore
@@ -0,0 +1 @@
+vendor
\ No newline at end of file
diff --git a/vendor/consolidation/robo/.scenarios.lock/finder5/composer.json b/vendor/consolidation/robo/.scenarios.lock/finder5/composer.json
new file mode 100644
index 0000000000000000000000000000000000000000..e9a1241f19c798ec46ebc94aec5a613dec7ae8bc
--- /dev/null
+++ b/vendor/consolidation/robo/.scenarios.lock/finder5/composer.json
@@ -0,0 +1,87 @@
+{
+    "name": "consolidation/robo",
+    "description": "Modern task runner",
+    "license": "MIT",
+    "authors": [
+        {
+            "name": "Davert",
+            "email": "davert.php@resend.cc"
+        }
+    ],
+    "autoload": {
+        "psr-4": {
+            "Robo\\": "../../src"
+        }
+    },
+    "autoload-dev": {
+        "psr-4": {
+            "Robo\\": "../../tests/src",
+            "RoboExample\\": "../../examples/src"
+        }
+    },
+    "bin": [
+        "robo"
+    ],
+    "require": {
+        "symfony/finder": "^5",
+        "php": ">=5.5.0",
+        "consolidation/annotated-command": "^2.12.1|^4.1",
+        "consolidation/config": "^1.2.1",
+        "consolidation/log": "^1.1.1|^2",
+        "consolidation/output-formatters": "^3.5.1|^4.1",
+        "consolidation/self-update": "^1.1.5",
+        "grasmash/yaml-expander": "^1.4",
+        "league/container": "^2.4.1",
+        "symfony/console": "^2.8|^3|^4",
+        "symfony/event-dispatcher": "^2.5|^3|^4",
+        "symfony/filesystem": "^2.5|^3|^4",
+        "symfony/process": "^2.5|^3|^4"
+    },
+    "require-dev": {
+        "g1a/composer-test-scenarios": "^3",
+        "natxet/cssmin": "3.0.4",
+        "patchwork/jsqueeze": "^2",
+        "pear/archive_tar": "^1.4.4",
+        "php-coveralls/php-coveralls": "^1",
+        "phpunit/phpunit": "^5.7.27",
+        "squizlabs/php_codesniffer": "^3"
+    },
+    "scripts": {
+        "cs": "./robo sniff",
+        "unit": "phpunit",
+        "lint": [
+            "find src -name '*.php' -print0 | xargs -0 -n1 php -l",
+            "find tests/src -name '*.php' -print0 | xargs -0 -n1 php -l"
+        ],
+        "test": [
+            "@lint",
+            "@unit",
+            "@cs"
+        ],
+        "pre-install-cmd": [
+            "Robo\\composer\\ScriptHandler::checkDependencies"
+        ]
+    },
+    "config": {
+        "platform": {
+            "php": "7.2.5"
+        },
+        "optimize-autoloader": true,
+        "sort-packages": true,
+        "vendor-dir": "../../vendor"
+    },
+    "extra": {
+        "branch-alias": {
+            "dev-master": "1.x-dev"
+        }
+    },
+    "suggest": {
+        "pear/archive_tar": "Allows tar archives to be created and extracted in taskPack and taskExtract, respectively.",
+        "henrikbjorn/lurker": "For monitoring filesystem changes in taskWatch",
+        "patchwork/jsqueeze": "For minifying JS files in taskMinify",
+        "natxet/CssMin": "For minifying CSS files in taskMinify"
+    },
+    "replace": {
+        "codegyre/robo": "< 1.0"
+    }
+}
diff --git a/vendor/consolidation/robo/.scenarios.lock/finder5/composer.lock b/vendor/consolidation/robo/.scenarios.lock/finder5/composer.lock
new file mode 100644
index 0000000000000000000000000000000000000000..19bde45faf7632f4fe967cff99530ecd37a094bb
--- /dev/null
+++ b/vendor/consolidation/robo/.scenarios.lock/finder5/composer.lock
@@ -0,0 +1,3588 @@
+{
+    "_readme": [
+        "This file locks the dependencies of your project to a known state",
+        "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
+        "This file is @generated automatically"
+    ],
+    "content-hash": "5e862565f20b2a2701ae2f8bb2f8e724",
+    "packages": [
+        {
+            "name": "consolidation/annotated-command",
+            "version": "4.2.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/consolidation/annotated-command.git",
+                "reference": "4b596872f24c39d9c04d7b3adb6bc51baa1f2fd5"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/consolidation/annotated-command/zipball/4b596872f24c39d9c04d7b3adb6bc51baa1f2fd5",
+                "reference": "4b596872f24c39d9c04d7b3adb6bc51baa1f2fd5",
+                "shasum": ""
+            },
+            "require": {
+                "consolidation/output-formatters": "^4.1.1",
+                "php": ">=7.1.3",
+                "psr/log": "^1|^2",
+                "symfony/console": "^4.4.8|^5",
+                "symfony/event-dispatcher": "^4.4.8|^5",
+                "symfony/finder": "^4.4.8|^5"
+            },
+            "require-dev": {
+                "g1a/composer-test-scenarios": "^3",
+                "php-coveralls/php-coveralls": "^2.2",
+                "phpunit/phpunit": "^6",
+                "squizlabs/php_codesniffer": "^3"
+            },
+            "type": "library",
+            "extra": {
+                "scenarios": {
+                    "symfony4": {
+                        "require": {
+                            "symfony/console": "^4.0"
+                        },
+                        "config": {
+                            "platform": {
+                                "php": "7.1.3"
+                            }
+                        }
+                    }
+                },
+                "branch-alias": {
+                    "dev-main": "4.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Consolidation\\AnnotatedCommand\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Greg Anderson",
+                    "email": "greg.1.anderson@greenknowe.org"
+                }
+            ],
+            "description": "Initialize Symfony Console commands from annotated command class methods.",
+            "time": "2020-10-03T14:28:42+00:00"
+        },
+        {
+            "name": "consolidation/config",
+            "version": "1.2.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/consolidation/config.git",
+                "reference": "cac1279bae7efb5c7fb2ca4c3ba4b8eb741a96c1"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/consolidation/config/zipball/cac1279bae7efb5c7fb2ca4c3ba4b8eb741a96c1",
+                "reference": "cac1279bae7efb5c7fb2ca4c3ba4b8eb741a96c1",
+                "shasum": ""
+            },
+            "require": {
+                "dflydev/dot-access-data": "^1.1.0",
+                "grasmash/expander": "^1",
+                "php": ">=5.4.0"
+            },
+            "require-dev": {
+                "g1a/composer-test-scenarios": "^3",
+                "php-coveralls/php-coveralls": "^1",
+                "phpunit/phpunit": "^5",
+                "squizlabs/php_codesniffer": "2.*",
+                "symfony/console": "^2.5|^3|^4",
+                "symfony/yaml": "^2.8.11|^3|^4"
+            },
+            "suggest": {
+                "symfony/yaml": "Required to use Consolidation\\Config\\Loader\\YamlConfigLoader"
+            },
+            "type": "library",
+            "extra": {
+                "scenarios": {
+                    "symfony4": {
+                        "require-dev": {
+                            "symfony/console": "^4.0"
+                        },
+                        "config": {
+                            "platform": {
+                                "php": "7.1.3"
+                            }
+                        }
+                    },
+                    "symfony2": {
+                        "require-dev": {
+                            "symfony/console": "^2.8",
+                            "symfony/event-dispatcher": "^2.8",
+                            "phpunit/phpunit": "^4.8.36"
+                        },
+                        "remove": [
+                            "php-coveralls/php-coveralls"
+                        ],
+                        "config": {
+                            "platform": {
+                                "php": "5.4.8"
+                            }
+                        }
+                    }
+                },
+                "branch-alias": {
+                    "dev-master": "1.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Consolidation\\Config\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Greg Anderson",
+                    "email": "greg.1.anderson@greenknowe.org"
+                }
+            ],
+            "description": "Provide configuration services for a commandline tool.",
+            "time": "2019-03-03T19:37:04+00:00"
+        },
+        {
+            "name": "consolidation/log",
+            "version": "2.0.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/consolidation/log.git",
+                "reference": "ba0bf6af1fbd09ed4dc18fc2f27b12ceff487cbf"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/consolidation/log/zipball/ba0bf6af1fbd09ed4dc18fc2f27b12ceff487cbf",
+                "reference": "ba0bf6af1fbd09ed4dc18fc2f27b12ceff487cbf",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.1.3",
+                "psr/log": "^1.0",
+                "symfony/console": "^4|^5"
+            },
+            "require-dev": {
+                "g1a/composer-test-scenarios": "^3",
+                "php-coveralls/php-coveralls": "^2.2",
+                "phpunit/phpunit": "^6",
+                "squizlabs/php_codesniffer": "^3"
+            },
+            "type": "library",
+            "extra": {
+                "scenarios": {
+                    "symfony4": {
+                        "require-dev": {
+                            "symfony/console": "^4"
+                        },
+                        "config": {
+                            "platform": {
+                                "php": "7.1.3"
+                            }
+                        }
+                    }
+                },
+                "branch-alias": {
+                    "dev-master": "2.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Consolidation\\Log\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Greg Anderson",
+                    "email": "greg.1.anderson@greenknowe.org"
+                }
+            ],
+            "description": "Improved Psr-3 / Psr\\Log logger based on Symfony Console components.",
+            "time": "2020-05-27T17:06:13+00:00"
+        },
+        {
+            "name": "consolidation/output-formatters",
+            "version": "4.1.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/consolidation/output-formatters.git",
+                "reference": "9deeddd6a916d0a756b216a8b40ce1016e17c0b9"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/consolidation/output-formatters/zipball/9deeddd6a916d0a756b216a8b40ce1016e17c0b9",
+                "reference": "9deeddd6a916d0a756b216a8b40ce1016e17c0b9",
+                "shasum": ""
+            },
+            "require": {
+                "dflydev/dot-access-data": "^1.1.0",
+                "php": ">=7.1.3",
+                "symfony/console": "^4|^5",
+                "symfony/finder": "^4|^5"
+            },
+            "require-dev": {
+                "g1a/composer-test-scenarios": "^3",
+                "php-coveralls/php-coveralls": "^2.2",
+                "phpunit/phpunit": "^6",
+                "squizlabs/php_codesniffer": "^3",
+                "symfony/var-dumper": "^4",
+                "symfony/yaml": "^4"
+            },
+            "suggest": {
+                "symfony/var-dumper": "For using the var_dump formatter"
+            },
+            "type": "library",
+            "extra": {
+                "scenarios": {
+                    "symfony4": {
+                        "require": {
+                            "symfony/console": "^4.0"
+                        },
+                        "config": {
+                            "platform": {
+                                "php": "7.1.3"
+                            }
+                        }
+                    }
+                },
+                "branch-alias": {
+                    "dev-master": "4.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Consolidation\\OutputFormatters\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Greg Anderson",
+                    "email": "greg.1.anderson@greenknowe.org"
+                }
+            ],
+            "description": "Format text by applying transformations provided by plug-in formatters.",
+            "time": "2020-05-27T20:51:17+00:00"
+        },
+        {
+            "name": "consolidation/self-update",
+            "version": "1.2.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/consolidation/self-update.git",
+                "reference": "dba6b2c0708f20fa3ba8008a2353b637578849b4"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/consolidation/self-update/zipball/dba6b2c0708f20fa3ba8008a2353b637578849b4",
+                "reference": "dba6b2c0708f20fa3ba8008a2353b637578849b4",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.5.0",
+                "symfony/console": "^2.8|^3|^4|^5",
+                "symfony/filesystem": "^2.5|^3|^4|^5"
+            },
+            "bin": [
+                "scripts/release"
+            ],
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "SelfUpdate\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Alexander Menk",
+                    "email": "menk@mestrona.net"
+                },
+                {
+                    "name": "Greg Anderson",
+                    "email": "greg.1.anderson@greenknowe.org"
+                }
+            ],
+            "description": "Provides a self:update command for Symfony Console applications.",
+            "time": "2020-04-13T02:49:20+00:00"
+        },
+        {
+            "name": "container-interop/container-interop",
+            "version": "1.2.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/container-interop/container-interop.git",
+                "reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/container-interop/container-interop/zipball/79cbf1341c22ec75643d841642dd5d6acd83bdb8",
+                "reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8",
+                "shasum": ""
+            },
+            "require": {
+                "psr/container": "^1.0"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Interop\\Container\\": "src/Interop/Container/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "Promoting the interoperability of container objects (DIC, SL, etc.)",
+            "homepage": "https://github.com/container-interop/container-interop",
+            "abandoned": "psr/container",
+            "time": "2017-02-14T19:40:03+00:00"
+        },
+        {
+            "name": "dflydev/dot-access-data",
+            "version": "v1.1.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/dflydev/dflydev-dot-access-data.git",
+                "reference": "3fbd874921ab2c041e899d044585a2ab9795df8a"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/3fbd874921ab2c041e899d044585a2ab9795df8a",
+                "reference": "3fbd874921ab2c041e899d044585a2ab9795df8a",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.2"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "Dflydev\\DotAccessData": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Dragonfly Development Inc.",
+                    "email": "info@dflydev.com",
+                    "homepage": "http://dflydev.com"
+                },
+                {
+                    "name": "Beau Simensen",
+                    "email": "beau@dflydev.com",
+                    "homepage": "http://beausimensen.com"
+                },
+                {
+                    "name": "Carlos Frutos",
+                    "email": "carlos@kiwing.it",
+                    "homepage": "https://github.com/cfrutos"
+                }
+            ],
+            "description": "Given a deep data structure, access data by dot notation.",
+            "homepage": "https://github.com/dflydev/dflydev-dot-access-data",
+            "keywords": [
+                "access",
+                "data",
+                "dot",
+                "notation"
+            ],
+            "time": "2017-01-20T21:14:22+00:00"
+        },
+        {
+            "name": "grasmash/expander",
+            "version": "1.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/grasmash/expander.git",
+                "reference": "95d6037344a4be1dd5f8e0b0b2571a28c397578f"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/grasmash/expander/zipball/95d6037344a4be1dd5f8e0b0b2571a28c397578f",
+                "reference": "95d6037344a4be1dd5f8e0b0b2571a28c397578f",
+                "shasum": ""
+            },
+            "require": {
+                "dflydev/dot-access-data": "^1.1.0",
+                "php": ">=5.4"
+            },
+            "require-dev": {
+                "greg-1-anderson/composer-test-scenarios": "^1",
+                "phpunit/phpunit": "^4|^5.5.4",
+                "satooshi/php-coveralls": "^1.0.2|dev-master",
+                "squizlabs/php_codesniffer": "^2.7"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Grasmash\\Expander\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Matthew Grasmick"
+                }
+            ],
+            "description": "Expands internal property references in PHP arrays file.",
+            "time": "2017-12-21T22:14:55+00:00"
+        },
+        {
+            "name": "grasmash/yaml-expander",
+            "version": "1.4.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/grasmash/yaml-expander.git",
+                "reference": "3f0f6001ae707a24f4d9733958d77d92bf9693b1"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/grasmash/yaml-expander/zipball/3f0f6001ae707a24f4d9733958d77d92bf9693b1",
+                "reference": "3f0f6001ae707a24f4d9733958d77d92bf9693b1",
+                "shasum": ""
+            },
+            "require": {
+                "dflydev/dot-access-data": "^1.1.0",
+                "php": ">=5.4",
+                "symfony/yaml": "^2.8.11|^3|^4"
+            },
+            "require-dev": {
+                "greg-1-anderson/composer-test-scenarios": "^1",
+                "phpunit/phpunit": "^4.8|^5.5.4",
+                "satooshi/php-coveralls": "^1.0.2|dev-master",
+                "squizlabs/php_codesniffer": "^2.7"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Grasmash\\YamlExpander\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Matthew Grasmick"
+                }
+            ],
+            "description": "Expands internal property references in a yaml file.",
+            "time": "2017-12-16T16:06:03+00:00"
+        },
+        {
+            "name": "league/container",
+            "version": "2.4.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/thephpleague/container.git",
+                "reference": "43f35abd03a12977a60ffd7095efd6a7808488c0"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/thephpleague/container/zipball/43f35abd03a12977a60ffd7095efd6a7808488c0",
+                "reference": "43f35abd03a12977a60ffd7095efd6a7808488c0",
+                "shasum": ""
+            },
+            "require": {
+                "container-interop/container-interop": "^1.2",
+                "php": "^5.4.0 || ^7.0"
+            },
+            "provide": {
+                "container-interop/container-interop-implementation": "^1.2",
+                "psr/container-implementation": "^1.0"
+            },
+            "replace": {
+                "orno/di": "~2.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "4.*"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-2.x": "2.x-dev",
+                    "dev-1.x": "1.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "League\\Container\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Phil Bennett",
+                    "email": "philipobenito@gmail.com",
+                    "homepage": "http://www.philipobenito.com",
+                    "role": "Developer"
+                }
+            ],
+            "description": "A fast and intuitive dependency injection container.",
+            "homepage": "https://github.com/thephpleague/container",
+            "keywords": [
+                "container",
+                "dependency",
+                "di",
+                "injection",
+                "league",
+                "provider",
+                "service"
+            ],
+            "time": "2017-05-10T09:20:27+00:00"
+        },
+        {
+            "name": "psr/container",
+            "version": "1.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/php-fig/container.git",
+                "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
+                "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Psr\\Container\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "PHP-FIG",
+                    "homepage": "http://www.php-fig.org/"
+                }
+            ],
+            "description": "Common Container Interface (PHP FIG PSR-11)",
+            "homepage": "https://github.com/php-fig/container",
+            "keywords": [
+                "PSR-11",
+                "container",
+                "container-interface",
+                "container-interop",
+                "psr"
+            ],
+            "time": "2017-02-14T16:28:37+00:00"
+        },
+        {
+            "name": "psr/log",
+            "version": "1.1.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/php-fig/log.git",
+                "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc",
+                "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.1.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Psr\\Log\\": "Psr/Log/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "PHP-FIG",
+                    "homepage": "http://www.php-fig.org/"
+                }
+            ],
+            "description": "Common interface for logging libraries",
+            "homepage": "https://github.com/php-fig/log",
+            "keywords": [
+                "log",
+                "psr",
+                "psr-3"
+            ],
+            "time": "2020-03-23T09:12:05+00:00"
+        },
+        {
+            "name": "symfony/console",
+            "version": "v4.4.15",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/console.git",
+                "reference": "90933b39c7b312fc3ceaa1ddeac7eb48cb953124"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/console/zipball/90933b39c7b312fc3ceaa1ddeac7eb48cb953124",
+                "reference": "90933b39c7b312fc3ceaa1ddeac7eb48cb953124",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.1.3",
+                "symfony/polyfill-mbstring": "~1.0",
+                "symfony/polyfill-php73": "^1.8",
+                "symfony/polyfill-php80": "^1.15",
+                "symfony/service-contracts": "^1.1|^2"
+            },
+            "conflict": {
+                "symfony/dependency-injection": "<3.4",
+                "symfony/event-dispatcher": "<4.3|>=5",
+                "symfony/lock": "<4.4",
+                "symfony/process": "<3.3"
+            },
+            "provide": {
+                "psr/log-implementation": "1.0"
+            },
+            "require-dev": {
+                "psr/log": "~1.0",
+                "symfony/config": "^3.4|^4.0|^5.0",
+                "symfony/dependency-injection": "^3.4|^4.0|^5.0",
+                "symfony/event-dispatcher": "^4.3",
+                "symfony/lock": "^4.4|^5.0",
+                "symfony/process": "^3.4|^4.0|^5.0",
+                "symfony/var-dumper": "^4.3|^5.0"
+            },
+            "suggest": {
+                "psr/log": "For using the console logger",
+                "symfony/event-dispatcher": "",
+                "symfony/lock": "",
+                "symfony/process": ""
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "4.4-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Console\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony Console Component",
+            "homepage": "https://symfony.com",
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-15T07:58:55+00:00"
+        },
+        {
+            "name": "symfony/event-dispatcher",
+            "version": "v4.4.15",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/event-dispatcher.git",
+                "reference": "e17bb5e0663dc725f7cdcafc932132735b4725cd"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/e17bb5e0663dc725f7cdcafc932132735b4725cd",
+                "reference": "e17bb5e0663dc725f7cdcafc932132735b4725cd",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.1.3",
+                "symfony/event-dispatcher-contracts": "^1.1"
+            },
+            "conflict": {
+                "symfony/dependency-injection": "<3.4"
+            },
+            "provide": {
+                "psr/event-dispatcher-implementation": "1.0",
+                "symfony/event-dispatcher-implementation": "1.1"
+            },
+            "require-dev": {
+                "psr/log": "~1.0",
+                "symfony/config": "^3.4|^4.0|^5.0",
+                "symfony/dependency-injection": "^3.4|^4.0|^5.0",
+                "symfony/error-handler": "~3.4|~4.4",
+                "symfony/expression-language": "^3.4|^4.0|^5.0",
+                "symfony/http-foundation": "^3.4|^4.0|^5.0",
+                "symfony/service-contracts": "^1.1|^2",
+                "symfony/stopwatch": "^3.4|^4.0|^5.0"
+            },
+            "suggest": {
+                "symfony/dependency-injection": "",
+                "symfony/http-kernel": ""
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "4.4-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\EventDispatcher\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony EventDispatcher Component",
+            "homepage": "https://symfony.com",
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-18T14:07:46+00:00"
+        },
+        {
+            "name": "symfony/event-dispatcher-contracts",
+            "version": "v1.1.9",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/event-dispatcher-contracts.git",
+                "reference": "84e23fdcd2517bf37aecbd16967e83f0caee25a7"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/84e23fdcd2517bf37aecbd16967e83f0caee25a7",
+                "reference": "84e23fdcd2517bf37aecbd16967e83f0caee25a7",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.1.3"
+            },
+            "suggest": {
+                "psr/event-dispatcher": "",
+                "symfony/event-dispatcher-implementation": ""
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.1-dev"
+                },
+                "thanks": {
+                    "name": "symfony/contracts",
+                    "url": "https://github.com/symfony/contracts"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Contracts\\EventDispatcher\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Generic abstractions related to dispatching event",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "abstractions",
+                "contracts",
+                "decoupling",
+                "interfaces",
+                "interoperability",
+                "standards"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-06T13:19:58+00:00"
+        },
+        {
+            "name": "symfony/filesystem",
+            "version": "v4.4.15",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/filesystem.git",
+                "reference": "ebc51494739d3b081ea543ed7c462fa73a4f74db"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/filesystem/zipball/ebc51494739d3b081ea543ed7c462fa73a4f74db",
+                "reference": "ebc51494739d3b081ea543ed7c462fa73a4f74db",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.1.3",
+                "symfony/polyfill-ctype": "~1.8"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "4.4-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Filesystem\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony Filesystem Component",
+            "homepage": "https://symfony.com",
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-27T13:54:16+00:00"
+        },
+        {
+            "name": "symfony/finder",
+            "version": "v5.1.7",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/finder.git",
+                "reference": "2c3ba7ad6884e6c4451ce2340e2dc23f6fa3e0d8"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/finder/zipball/2c3ba7ad6884e6c4451ce2340e2dc23f6fa3e0d8",
+                "reference": "2c3ba7ad6884e6c4451ce2340e2dc23f6fa3e0d8",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.2.5"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "5.1-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Finder\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony Finder Component",
+            "homepage": "https://symfony.com",
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-02T16:23:27+00:00"
+        },
+        {
+            "name": "symfony/polyfill-ctype",
+            "version": "v1.18.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-ctype.git",
+                "reference": "1c302646f6efc070cd46856e600e5e0684d6b454"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/1c302646f6efc070cd46856e600e5e0684d6b454",
+                "reference": "1c302646f6efc070cd46856e600e5e0684d6b454",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "suggest": {
+                "ext-ctype": "For best performance"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Polyfill\\Ctype\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Gert de Pagter",
+                    "email": "BackEndTea@gmail.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill for ctype functions",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "ctype",
+                "polyfill",
+                "portable"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-14T12:35:20+00:00"
+        },
+        {
+            "name": "symfony/polyfill-mbstring",
+            "version": "v1.18.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-mbstring.git",
+                "reference": "a6977d63bf9a0ad4c65cd352709e230876f9904a"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/a6977d63bf9a0ad4c65cd352709e230876f9904a",
+                "reference": "a6977d63bf9a0ad4c65cd352709e230876f9904a",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "suggest": {
+                "ext-mbstring": "For best performance"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Polyfill\\Mbstring\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill for the Mbstring extension",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "mbstring",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-14T12:35:20+00:00"
+        },
+        {
+            "name": "symfony/polyfill-php73",
+            "version": "v1.18.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-php73.git",
+                "reference": "fffa1a52a023e782cdcc221d781fe1ec8f87fcca"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fffa1a52a023e782cdcc221d781fe1ec8f87fcca",
+                "reference": "fffa1a52a023e782cdcc221d781fe1ec8f87fcca",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Polyfill\\Php73\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
+                ],
+                "classmap": [
+                    "Resources/stubs"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-14T12:35:20+00:00"
+        },
+        {
+            "name": "symfony/polyfill-php80",
+            "version": "v1.18.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-php80.git",
+                "reference": "d87d5766cbf48d72388a9f6b85f280c8ad51f981"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/d87d5766cbf48d72388a9f6b85f280c8ad51f981",
+                "reference": "d87d5766cbf48d72388a9f6b85f280c8ad51f981",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.0.8"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Polyfill\\Php80\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
+                ],
+                "classmap": [
+                    "Resources/stubs"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Ion Bazan",
+                    "email": "ion.bazan@gmail.com"
+                },
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-14T12:35:20+00:00"
+        },
+        {
+            "name": "symfony/process",
+            "version": "v4.4.15",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/process.git",
+                "reference": "9b887acc522935f77555ae8813495958c7771ba7"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/process/zipball/9b887acc522935f77555ae8813495958c7771ba7",
+                "reference": "9b887acc522935f77555ae8813495958c7771ba7",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.1.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "4.4-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Process\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony Process Component",
+            "homepage": "https://symfony.com",
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-02T16:08:58+00:00"
+        },
+        {
+            "name": "symfony/service-contracts",
+            "version": "v2.2.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/service-contracts.git",
+                "reference": "d15da7ba4957ffb8f1747218be9e1a121fd298a1"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/service-contracts/zipball/d15da7ba4957ffb8f1747218be9e1a121fd298a1",
+                "reference": "d15da7ba4957ffb8f1747218be9e1a121fd298a1",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.2.5",
+                "psr/container": "^1.0"
+            },
+            "suggest": {
+                "symfony/service-implementation": ""
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.2-dev"
+                },
+                "thanks": {
+                    "name": "symfony/contracts",
+                    "url": "https://github.com/symfony/contracts"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Contracts\\Service\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Generic abstractions related to writing services",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "abstractions",
+                "contracts",
+                "decoupling",
+                "interfaces",
+                "interoperability",
+                "standards"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-07T11:33:47+00:00"
+        },
+        {
+            "name": "symfony/yaml",
+            "version": "v4.4.15",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/yaml.git",
+                "reference": "c7885964b1eceb70b0981556d0a9b01d2d97c8d1"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/yaml/zipball/c7885964b1eceb70b0981556d0a9b01d2d97c8d1",
+                "reference": "c7885964b1eceb70b0981556d0a9b01d2d97c8d1",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.1.3",
+                "symfony/polyfill-ctype": "~1.8"
+            },
+            "conflict": {
+                "symfony/console": "<3.4"
+            },
+            "require-dev": {
+                "symfony/console": "^3.4|^4.0|^5.0"
+            },
+            "suggest": {
+                "symfony/console": "For validating YAML files using the lint command"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "4.4-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Yaml\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony Yaml Component",
+            "homepage": "https://symfony.com",
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-27T03:36:23+00:00"
+        }
+    ],
+    "packages-dev": [
+        {
+            "name": "doctrine/instantiator",
+            "version": "1.3.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/doctrine/instantiator.git",
+                "reference": "f350df0268e904597e3bd9c4685c53e0e333feea"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/doctrine/instantiator/zipball/f350df0268e904597e3bd9c4685c53e0e333feea",
+                "reference": "f350df0268e904597e3bd9c4685c53e0e333feea",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.1 || ^8.0"
+            },
+            "require-dev": {
+                "doctrine/coding-standard": "^6.0",
+                "ext-pdo": "*",
+                "ext-phar": "*",
+                "phpbench/phpbench": "^0.13",
+                "phpstan/phpstan-phpunit": "^0.11",
+                "phpstan/phpstan-shim": "^0.11",
+                "phpunit/phpunit": "^7.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.2.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Marco Pivetta",
+                    "email": "ocramius@gmail.com",
+                    "homepage": "http://ocramius.github.com/"
+                }
+            ],
+            "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
+            "homepage": "https://www.doctrine-project.org/projects/instantiator.html",
+            "keywords": [
+                "constructor",
+                "instantiate"
+            ],
+            "funding": [
+                {
+                    "url": "https://www.doctrine-project.org/sponsorship.html",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://www.patreon.com/phpdoctrine",
+                    "type": "patreon"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-05-29T17:27:14+00:00"
+        },
+        {
+            "name": "g1a/composer-test-scenarios",
+            "version": "3.2.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/g1a/composer-test-scenarios.git",
+                "reference": "e7394206d845fd593d325440507fb940bef8cb62"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/g1a/composer-test-scenarios/zipball/e7394206d845fd593d325440507fb940bef8cb62",
+                "reference": "e7394206d845fd593d325440507fb940bef8cb62",
+                "shasum": ""
+            },
+            "require": {
+                "composer-plugin-api": "^1.0.0 || ^2.0.0",
+                "php": ">=5.4"
+            },
+            "require-dev": {
+                "composer/composer": "^1.10.6 || ^2.0@rc",
+                "php-coveralls/php-coveralls": "^1.0",
+                "phpunit/phpunit": "^4.8.36|^6",
+                "squizlabs/php_codesniffer": "^3.5"
+            },
+            "bin": [
+                "scripts/dependency-licenses"
+            ],
+            "type": "composer-plugin",
+            "extra": {
+                "class": "ComposerTestScenarios\\Plugin",
+                "branch-alias": {
+                    "dev-main": "3.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "ComposerTestScenarios\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Greg Anderson",
+                    "email": "greg.1.anderson@greenknowe.org"
+                }
+            ],
+            "description": "Useful scripts for testing multiple sets of Composer dependencies.",
+            "time": "2020-09-28T20:54:35+00:00"
+        },
+        {
+            "name": "guzzle/guzzle",
+            "version": "v3.8.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/guzzle/guzzle.git",
+                "reference": "4de0618a01b34aa1c8c33a3f13f396dcd3882eba"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/guzzle/guzzle/zipball/4de0618a01b34aa1c8c33a3f13f396dcd3882eba",
+                "reference": "4de0618a01b34aa1c8c33a3f13f396dcd3882eba",
+                "shasum": ""
+            },
+            "require": {
+                "ext-curl": "*",
+                "php": ">=5.3.3",
+                "symfony/event-dispatcher": ">=2.1"
+            },
+            "replace": {
+                "guzzle/batch": "self.version",
+                "guzzle/cache": "self.version",
+                "guzzle/common": "self.version",
+                "guzzle/http": "self.version",
+                "guzzle/inflection": "self.version",
+                "guzzle/iterator": "self.version",
+                "guzzle/log": "self.version",
+                "guzzle/parser": "self.version",
+                "guzzle/plugin": "self.version",
+                "guzzle/plugin-async": "self.version",
+                "guzzle/plugin-backoff": "self.version",
+                "guzzle/plugin-cache": "self.version",
+                "guzzle/plugin-cookie": "self.version",
+                "guzzle/plugin-curlauth": "self.version",
+                "guzzle/plugin-error-response": "self.version",
+                "guzzle/plugin-history": "self.version",
+                "guzzle/plugin-log": "self.version",
+                "guzzle/plugin-md5": "self.version",
+                "guzzle/plugin-mock": "self.version",
+                "guzzle/plugin-oauth": "self.version",
+                "guzzle/service": "self.version",
+                "guzzle/stream": "self.version"
+            },
+            "require-dev": {
+                "doctrine/cache": "*",
+                "monolog/monolog": "1.*",
+                "phpunit/phpunit": "3.7.*",
+                "psr/log": "1.0.*",
+                "symfony/class-loader": "*",
+                "zendframework/zend-cache": "<2.3",
+                "zendframework/zend-log": "<2.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.8-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "Guzzle": "src/",
+                    "Guzzle\\Tests": "tests/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Michael Dowling",
+                    "email": "mtdowling@gmail.com",
+                    "homepage": "https://github.com/mtdowling"
+                },
+                {
+                    "name": "Guzzle Community",
+                    "homepage": "https://github.com/guzzle/guzzle/contributors"
+                }
+            ],
+            "description": "Guzzle is a PHP HTTP client library and framework for building RESTful web service clients",
+            "homepage": "http://guzzlephp.org/",
+            "keywords": [
+                "client",
+                "curl",
+                "framework",
+                "http",
+                "http client",
+                "rest",
+                "web service"
+            ],
+            "abandoned": "guzzlehttp/guzzle",
+            "time": "2014-01-28T22:29:15+00:00"
+        },
+        {
+            "name": "myclabs/deep-copy",
+            "version": "1.10.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/myclabs/DeepCopy.git",
+                "reference": "969b211f9a51aa1f6c01d1d2aef56d3bd91598e5"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/969b211f9a51aa1f6c01d1d2aef56d3bd91598e5",
+                "reference": "969b211f9a51aa1f6c01d1d2aef56d3bd91598e5",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.1 || ^8.0"
+            },
+            "replace": {
+                "myclabs/deep-copy": "self.version"
+            },
+            "require-dev": {
+                "doctrine/collections": "^1.0",
+                "doctrine/common": "^2.6",
+                "phpunit/phpunit": "^7.1"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "DeepCopy\\": "src/DeepCopy/"
+                },
+                "files": [
+                    "src/DeepCopy/deep_copy.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "Create deep copies (clones) of your objects",
+            "keywords": [
+                "clone",
+                "copy",
+                "duplicate",
+                "object",
+                "object graph"
+            ],
+            "funding": [
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-06-29T13:22:24+00:00"
+        },
+        {
+            "name": "natxet/cssmin",
+            "version": "v3.0.4",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/natxet/CssMin.git",
+                "reference": "92de3fe3ccb4f8298d31952490ef7d5395855c39"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/natxet/CssMin/zipball/92de3fe3ccb4f8298d31952490ef7d5395855c39",
+                "reference": "92de3fe3ccb4f8298d31952490ef7d5395855c39",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.0-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Joe Scylla",
+                    "email": "joe.scylla@gmail.com",
+                    "homepage": "https://profiles.google.com/joe.scylla"
+                }
+            ],
+            "description": "Minifying CSS",
+            "homepage": "http://code.google.com/p/cssmin/",
+            "keywords": [
+                "css",
+                "minify"
+            ],
+            "time": "2015-09-25T11:13:11+00:00"
+        },
+        {
+            "name": "patchwork/jsqueeze",
+            "version": "v2.0.5",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/tchwork/jsqueeze.git",
+                "reference": "693d64850eab2ce6a7c8f7cf547e1ab46e69d542"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/tchwork/jsqueeze/zipball/693d64850eab2ce6a7c8f7cf547e1ab46e69d542",
+                "reference": "693d64850eab2ce6a7c8f7cf547e1ab46e69d542",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.0-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Patchwork\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "(Apache-2.0 or GPL-2.0)"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                }
+            ],
+            "description": "Efficient JavaScript minification in PHP",
+            "homepage": "https://github.com/tchwork/jsqueeze",
+            "keywords": [
+                "compression",
+                "javascript",
+                "minification"
+            ],
+            "abandoned": true,
+            "time": "2016-04-19T09:28:22+00:00"
+        },
+        {
+            "name": "pear/archive_tar",
+            "version": "1.4.10",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/pear/Archive_Tar.git",
+                "reference": "bbb4f10f71a1da2715ec6d9a683f4f23c507a49b"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/pear/Archive_Tar/zipball/bbb4f10f71a1da2715ec6d9a683f4f23c507a49b",
+                "reference": "bbb4f10f71a1da2715ec6d9a683f4f23c507a49b",
+                "shasum": ""
+            },
+            "require": {
+                "pear/pear-core-minimal": "^1.10.0alpha2",
+                "php": ">=5.2.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "*"
+            },
+            "suggest": {
+                "ext-bz2": "Bz2 compression support.",
+                "ext-xz": "Lzma2 compression support.",
+                "ext-zlib": "Gzip compression support."
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.4.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-0": {
+                    "Archive_Tar": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "include-path": [
+                "./"
+            ],
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Vincent Blavet",
+                    "email": "vincent@phpconcept.net"
+                },
+                {
+                    "name": "Greg Beaver",
+                    "email": "greg@chiaraquartet.net"
+                },
+                {
+                    "name": "Michiel Rook",
+                    "email": "mrook@php.net"
+                }
+            ],
+            "description": "Tar file management class with compression support (gzip, bzip2, lzma2)",
+            "homepage": "https://github.com/pear/Archive_Tar",
+            "keywords": [
+                "archive",
+                "tar"
+            ],
+            "time": "2020-09-15T14:13:23+00:00"
+        },
+        {
+            "name": "pear/console_getopt",
+            "version": "v1.4.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/pear/Console_Getopt.git",
+                "reference": "a41f8d3e668987609178c7c4a9fe48fecac53fa0"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/pear/Console_Getopt/zipball/a41f8d3e668987609178c7c4a9fe48fecac53fa0",
+                "reference": "a41f8d3e668987609178c7c4a9fe48fecac53fa0",
+                "shasum": ""
+            },
+            "type": "library",
+            "autoload": {
+                "psr-0": {
+                    "Console": "./"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "include-path": [
+                "./"
+            ],
+            "license": [
+                "BSD-2-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Andrei Zmievski",
+                    "email": "andrei@php.net",
+                    "role": "Lead"
+                },
+                {
+                    "name": "Stig Bakken",
+                    "email": "stig@php.net",
+                    "role": "Developer"
+                },
+                {
+                    "name": "Greg Beaver",
+                    "email": "cellog@php.net",
+                    "role": "Helper"
+                }
+            ],
+            "description": "More info available on: http://pear.php.net/package/Console_Getopt",
+            "time": "2019-11-20T18:27:48+00:00"
+        },
+        {
+            "name": "pear/pear-core-minimal",
+            "version": "v1.10.10",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/pear/pear-core-minimal.git",
+                "reference": "625a3c429d9b2c1546438679074cac1b089116a7"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/pear/pear-core-minimal/zipball/625a3c429d9b2c1546438679074cac1b089116a7",
+                "reference": "625a3c429d9b2c1546438679074cac1b089116a7",
+                "shasum": ""
+            },
+            "require": {
+                "pear/console_getopt": "~1.4",
+                "pear/pear_exception": "~1.0"
+            },
+            "replace": {
+                "rsky/pear-core-min": "self.version"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-0": {
+                    "": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "include-path": [
+                "src/"
+            ],
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Christian Weiske",
+                    "email": "cweiske@php.net",
+                    "role": "Lead"
+                }
+            ],
+            "description": "Minimal set of PEAR core files to be used as composer dependency",
+            "time": "2019-11-19T19:00:24+00:00"
+        },
+        {
+            "name": "pear/pear_exception",
+            "version": "v1.0.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/pear/PEAR_Exception.git",
+                "reference": "dbb42a5a0e45f3adcf99babfb2a1ba77b8ac36a7"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/pear/PEAR_Exception/zipball/dbb42a5a0e45f3adcf99babfb2a1ba77b8ac36a7",
+                "reference": "dbb42a5a0e45f3adcf99babfb2a1ba77b8ac36a7",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=4.4.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "*"
+            },
+            "type": "class",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "PEAR/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "include-path": [
+                "."
+            ],
+            "license": [
+                "BSD-2-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Helgi Thormar",
+                    "email": "dufuz@php.net"
+                },
+                {
+                    "name": "Greg Beaver",
+                    "email": "cellog@php.net"
+                }
+            ],
+            "description": "The PEAR Exception base class.",
+            "homepage": "https://github.com/pear/PEAR_Exception",
+            "keywords": [
+                "exception"
+            ],
+            "time": "2019-12-10T10:24:42+00:00"
+        },
+        {
+            "name": "php-coveralls/php-coveralls",
+            "version": "v1.1.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/php-coveralls/php-coveralls.git",
+                "reference": "37f8f83fe22224eb9d9c6d593cdeb33eedd2a9ad"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/php-coveralls/php-coveralls/zipball/37f8f83fe22224eb9d9c6d593cdeb33eedd2a9ad",
+                "reference": "37f8f83fe22224eb9d9c6d593cdeb33eedd2a9ad",
+                "shasum": ""
+            },
+            "require": {
+                "ext-json": "*",
+                "ext-simplexml": "*",
+                "guzzle/guzzle": "^2.8 || ^3.0",
+                "php": "^5.3.3 || ^7.0",
+                "psr/log": "^1.0",
+                "symfony/config": "^2.1 || ^3.0 || ^4.0",
+                "symfony/console": "^2.1 || ^3.0 || ^4.0",
+                "symfony/stopwatch": "^2.0 || ^3.0 || ^4.0",
+                "symfony/yaml": "^2.0 || ^3.0 || ^4.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^4.8.35 || ^5.4.3 || ^6.0"
+            },
+            "suggest": {
+                "symfony/http-kernel": "Allows Symfony integration"
+            },
+            "bin": [
+                "bin/coveralls"
+            ],
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Satooshi\\": "src/Satooshi/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Kitamura Satoshi",
+                    "email": "with.no.parachute@gmail.com",
+                    "homepage": "https://www.facebook.com/satooshi.jp"
+                }
+            ],
+            "description": "PHP client library for Coveralls API",
+            "homepage": "https://github.com/php-coveralls/php-coveralls",
+            "keywords": [
+                "ci",
+                "coverage",
+                "github",
+                "test"
+            ],
+            "time": "2017-12-06T23:17:56+00:00"
+        },
+        {
+            "name": "phpdocumentor/reflection-common",
+            "version": "2.2.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/phpDocumentor/ReflectionCommon.git",
+                "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b",
+                "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.2 || ^8.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-2.x": "2.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "phpDocumentor\\Reflection\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Jaap van Otterdijk",
+                    "email": "opensource@ijaap.nl"
+                }
+            ],
+            "description": "Common reflection classes used by phpdocumentor to reflect the code structure",
+            "homepage": "http://www.phpdoc.org",
+            "keywords": [
+                "FQSEN",
+                "phpDocumentor",
+                "phpdoc",
+                "reflection",
+                "static analysis"
+            ],
+            "time": "2020-06-27T09:03:43+00:00"
+        },
+        {
+            "name": "phpdocumentor/reflection-docblock",
+            "version": "5.2.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
+                "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/069a785b2141f5bcf49f3e353548dc1cce6df556",
+                "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556",
+                "shasum": ""
+            },
+            "require": {
+                "ext-filter": "*",
+                "php": "^7.2 || ^8.0",
+                "phpdocumentor/reflection-common": "^2.2",
+                "phpdocumentor/type-resolver": "^1.3",
+                "webmozart/assert": "^1.9.1"
+            },
+            "require-dev": {
+                "mockery/mockery": "~1.3.2"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "5.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "phpDocumentor\\Reflection\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Mike van Riel",
+                    "email": "me@mikevanriel.com"
+                },
+                {
+                    "name": "Jaap van Otterdijk",
+                    "email": "account@ijaap.nl"
+                }
+            ],
+            "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
+            "time": "2020-09-03T19:13:55+00:00"
+        },
+        {
+            "name": "phpdocumentor/type-resolver",
+            "version": "1.4.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/phpDocumentor/TypeResolver.git",
+                "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0",
+                "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.2 || ^8.0",
+                "phpdocumentor/reflection-common": "^2.0"
+            },
+            "require-dev": {
+                "ext-tokenizer": "*"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-1.x": "1.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "phpDocumentor\\Reflection\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Mike van Riel",
+                    "email": "me@mikevanriel.com"
+                }
+            ],
+            "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
+            "time": "2020-09-17T18:55:26+00:00"
+        },
+        {
+            "name": "phpspec/prophecy",
+            "version": "v1.10.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/phpspec/prophecy.git",
+                "reference": "451c3cd1418cf640de218914901e51b064abb093"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/phpspec/prophecy/zipball/451c3cd1418cf640de218914901e51b064abb093",
+                "reference": "451c3cd1418cf640de218914901e51b064abb093",
+                "shasum": ""
+            },
+            "require": {
+                "doctrine/instantiator": "^1.0.2",
+                "php": "^5.3|^7.0",
+                "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0",
+                "sebastian/comparator": "^1.2.3|^2.0|^3.0|^4.0",
+                "sebastian/recursion-context": "^1.0|^2.0|^3.0|^4.0"
+            },
+            "require-dev": {
+                "phpspec/phpspec": "^2.5 || ^3.2",
+                "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.10.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Prophecy\\": "src/Prophecy"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Konstantin Kudryashov",
+                    "email": "ever.zet@gmail.com",
+                    "homepage": "http://everzet.com"
+                },
+                {
+                    "name": "Marcello Duarte",
+                    "email": "marcello.duarte@gmail.com"
+                }
+            ],
+            "description": "Highly opinionated mocking framework for PHP 5.3+",
+            "homepage": "https://github.com/phpspec/prophecy",
+            "keywords": [
+                "Double",
+                "Dummy",
+                "fake",
+                "mock",
+                "spy",
+                "stub"
+            ],
+            "time": "2020-03-05T15:02:03+00:00"
+        },
+        {
+            "name": "phpunit/php-code-coverage",
+            "version": "4.0.8",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
+                "reference": "ef7b2f56815df854e66ceaee8ebe9393ae36a40d"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/ef7b2f56815df854e66ceaee8ebe9393ae36a40d",
+                "reference": "ef7b2f56815df854e66ceaee8ebe9393ae36a40d",
+                "shasum": ""
+            },
+            "require": {
+                "ext-dom": "*",
+                "ext-xmlwriter": "*",
+                "php": "^5.6 || ^7.0",
+                "phpunit/php-file-iterator": "^1.3",
+                "phpunit/php-text-template": "^1.2",
+                "phpunit/php-token-stream": "^1.4.2 || ^2.0",
+                "sebastian/code-unit-reverse-lookup": "^1.0",
+                "sebastian/environment": "^1.3.2 || ^2.0",
+                "sebastian/version": "^1.0 || ^2.0"
+            },
+            "require-dev": {
+                "ext-xdebug": "^2.1.4",
+                "phpunit/phpunit": "^5.7"
+            },
+            "suggest": {
+                "ext-xdebug": "^2.5.1"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "4.0.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sb@sebastian-bergmann.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
+            "homepage": "https://github.com/sebastianbergmann/php-code-coverage",
+            "keywords": [
+                "coverage",
+                "testing",
+                "xunit"
+            ],
+            "time": "2017-04-02T07:44:40+00:00"
+        },
+        {
+            "name": "phpunit/php-file-iterator",
+            "version": "1.4.5",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
+                "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/730b01bc3e867237eaac355e06a36b85dd93a8b4",
+                "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.4.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sb@sebastian-bergmann.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "FilterIterator implementation that filters files based on a list of suffixes.",
+            "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
+            "keywords": [
+                "filesystem",
+                "iterator"
+            ],
+            "time": "2017-11-27T13:52:08+00:00"
+        },
+        {
+            "name": "phpunit/php-text-template",
+            "version": "1.2.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/php-text-template.git",
+                "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
+                "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "type": "library",
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "Simple template engine.",
+            "homepage": "https://github.com/sebastianbergmann/php-text-template/",
+            "keywords": [
+                "template"
+            ],
+            "time": "2015-06-21T13:50:34+00:00"
+        },
+        {
+            "name": "phpunit/php-timer",
+            "version": "1.0.9",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/php-timer.git",
+                "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f",
+                "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^5.3.3 || ^7.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sb@sebastian-bergmann.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "Utility class for timing",
+            "homepage": "https://github.com/sebastianbergmann/php-timer/",
+            "keywords": [
+                "timer"
+            ],
+            "time": "2017-02-26T11:10:40+00:00"
+        },
+        {
+            "name": "phpunit/php-token-stream",
+            "version": "2.0.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/php-token-stream.git",
+                "reference": "791198a2c6254db10131eecfe8c06670700904db"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/791198a2c6254db10131eecfe8c06670700904db",
+                "reference": "791198a2c6254db10131eecfe8c06670700904db",
+                "shasum": ""
+            },
+            "require": {
+                "ext-tokenizer": "*",
+                "php": "^7.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^6.2.4"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.0-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                }
+            ],
+            "description": "Wrapper around PHP's tokenizer extension.",
+            "homepage": "https://github.com/sebastianbergmann/php-token-stream/",
+            "keywords": [
+                "tokenizer"
+            ],
+            "abandoned": true,
+            "time": "2017-11-27T05:48:46+00:00"
+        },
+        {
+            "name": "phpunit/phpunit",
+            "version": "5.7.27",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/phpunit.git",
+                "reference": "b7803aeca3ccb99ad0a506fa80b64cd6a56bbc0c"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/b7803aeca3ccb99ad0a506fa80b64cd6a56bbc0c",
+                "reference": "b7803aeca3ccb99ad0a506fa80b64cd6a56bbc0c",
+                "shasum": ""
+            },
+            "require": {
+                "ext-dom": "*",
+                "ext-json": "*",
+                "ext-libxml": "*",
+                "ext-mbstring": "*",
+                "ext-xml": "*",
+                "myclabs/deep-copy": "~1.3",
+                "php": "^5.6 || ^7.0",
+                "phpspec/prophecy": "^1.6.2",
+                "phpunit/php-code-coverage": "^4.0.4",
+                "phpunit/php-file-iterator": "~1.4",
+                "phpunit/php-text-template": "~1.2",
+                "phpunit/php-timer": "^1.0.6",
+                "phpunit/phpunit-mock-objects": "^3.2",
+                "sebastian/comparator": "^1.2.4",
+                "sebastian/diff": "^1.4.3",
+                "sebastian/environment": "^1.3.4 || ^2.0",
+                "sebastian/exporter": "~2.0",
+                "sebastian/global-state": "^1.1",
+                "sebastian/object-enumerator": "~2.0",
+                "sebastian/resource-operations": "~1.0",
+                "sebastian/version": "^1.0.6|^2.0.1",
+                "symfony/yaml": "~2.1|~3.0|~4.0"
+            },
+            "conflict": {
+                "phpdocumentor/reflection-docblock": "3.0.2"
+            },
+            "require-dev": {
+                "ext-pdo": "*"
+            },
+            "suggest": {
+                "ext-xdebug": "*",
+                "phpunit/php-invoker": "~1.1"
+            },
+            "bin": [
+                "phpunit"
+            ],
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "5.7.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "The PHP Unit Testing framework.",
+            "homepage": "https://phpunit.de/",
+            "keywords": [
+                "phpunit",
+                "testing",
+                "xunit"
+            ],
+            "time": "2018-02-01T05:50:59+00:00"
+        },
+        {
+            "name": "phpunit/phpunit-mock-objects",
+            "version": "3.4.4",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git",
+                "reference": "a23b761686d50a560cc56233b9ecf49597cc9118"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/a23b761686d50a560cc56233b9ecf49597cc9118",
+                "reference": "a23b761686d50a560cc56233b9ecf49597cc9118",
+                "shasum": ""
+            },
+            "require": {
+                "doctrine/instantiator": "^1.0.2",
+                "php": "^5.6 || ^7.0",
+                "phpunit/php-text-template": "^1.2",
+                "sebastian/exporter": "^1.2 || ^2.0"
+            },
+            "conflict": {
+                "phpunit/phpunit": "<5.4.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^5.4"
+            },
+            "suggest": {
+                "ext-soap": "*"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.2.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sb@sebastian-bergmann.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "Mock Object library for PHPUnit",
+            "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/",
+            "keywords": [
+                "mock",
+                "xunit"
+            ],
+            "abandoned": true,
+            "time": "2017-06-30T09:13:00+00:00"
+        },
+        {
+            "name": "sebastian/code-unit-reverse-lookup",
+            "version": "1.0.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git",
+                "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18",
+                "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^5.6 || ^7.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^5.7 || ^6.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                }
+            ],
+            "description": "Looks up which function or method a line of code belongs to",
+            "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/",
+            "time": "2017-03-04T06:30:41+00:00"
+        },
+        {
+            "name": "sebastian/comparator",
+            "version": "1.2.4",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/comparator.git",
+                "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2b7424b55f5047b47ac6e5ccb20b2aea4011d9be",
+                "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3",
+                "sebastian/diff": "~1.2",
+                "sebastian/exporter": "~1.2 || ~2.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~4.4"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.2.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Jeff Welch",
+                    "email": "whatthejeff@gmail.com"
+                },
+                {
+                    "name": "Volker Dusch",
+                    "email": "github@wallbash.com"
+                },
+                {
+                    "name": "Bernhard Schussek",
+                    "email": "bschussek@2bepublished.at"
+                },
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                }
+            ],
+            "description": "Provides the functionality to compare PHP values for equality",
+            "homepage": "http://www.github.com/sebastianbergmann/comparator",
+            "keywords": [
+                "comparator",
+                "compare",
+                "equality"
+            ],
+            "time": "2017-01-29T09:50:25+00:00"
+        },
+        {
+            "name": "sebastian/diff",
+            "version": "1.4.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/diff.git",
+                "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/7f066a26a962dbe58ddea9f72a4e82874a3975a4",
+                "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^5.3.3 || ^7.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.4-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Kore Nordmann",
+                    "email": "mail@kore-nordmann.de"
+                },
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                }
+            ],
+            "description": "Diff implementation",
+            "homepage": "https://github.com/sebastianbergmann/diff",
+            "keywords": [
+                "diff"
+            ],
+            "time": "2017-05-22T07:24:03+00:00"
+        },
+        {
+            "name": "sebastian/environment",
+            "version": "2.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/environment.git",
+                "reference": "5795ffe5dc5b02460c3e34222fee8cbe245d8fac"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/5795ffe5dc5b02460c3e34222fee8cbe245d8fac",
+                "reference": "5795ffe5dc5b02460c3e34222fee8cbe245d8fac",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^5.6 || ^7.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^5.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.0.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                }
+            ],
+            "description": "Provides functionality to handle HHVM/PHP environments",
+            "homepage": "http://www.github.com/sebastianbergmann/environment",
+            "keywords": [
+                "Xdebug",
+                "environment",
+                "hhvm"
+            ],
+            "time": "2016-11-26T07:53:53+00:00"
+        },
+        {
+            "name": "sebastian/exporter",
+            "version": "2.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/exporter.git",
+                "reference": "ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4",
+                "reference": "ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3",
+                "sebastian/recursion-context": "~2.0"
+            },
+            "require-dev": {
+                "ext-mbstring": "*",
+                "phpunit/phpunit": "~4.4"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.0.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Jeff Welch",
+                    "email": "whatthejeff@gmail.com"
+                },
+                {
+                    "name": "Volker Dusch",
+                    "email": "github@wallbash.com"
+                },
+                {
+                    "name": "Bernhard Schussek",
+                    "email": "bschussek@2bepublished.at"
+                },
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                },
+                {
+                    "name": "Adam Harvey",
+                    "email": "aharvey@php.net"
+                }
+            ],
+            "description": "Provides the functionality to export PHP variables for visualization",
+            "homepage": "http://www.github.com/sebastianbergmann/exporter",
+            "keywords": [
+                "export",
+                "exporter"
+            ],
+            "time": "2016-11-19T08:54:04+00:00"
+        },
+        {
+            "name": "sebastian/global-state",
+            "version": "1.1.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/global-state.git",
+                "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4",
+                "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~4.2"
+            },
+            "suggest": {
+                "ext-uopz": "*"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                }
+            ],
+            "description": "Snapshotting of global state",
+            "homepage": "http://www.github.com/sebastianbergmann/global-state",
+            "keywords": [
+                "global state"
+            ],
+            "time": "2015-10-12T03:26:01+00:00"
+        },
+        {
+            "name": "sebastian/object-enumerator",
+            "version": "2.0.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/object-enumerator.git",
+                "reference": "1311872ac850040a79c3c058bea3e22d0f09cbb7"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/1311872ac850040a79c3c058bea3e22d0f09cbb7",
+                "reference": "1311872ac850040a79c3c058bea3e22d0f09cbb7",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.6",
+                "sebastian/recursion-context": "~2.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~5"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.0.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                }
+            ],
+            "description": "Traverses array structures and object graphs to enumerate all referenced objects",
+            "homepage": "https://github.com/sebastianbergmann/object-enumerator/",
+            "time": "2017-02-18T15:18:39+00:00"
+        },
+        {
+            "name": "sebastian/recursion-context",
+            "version": "2.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/recursion-context.git",
+                "reference": "2c3ba150cbec723aa057506e73a8d33bdb286c9a"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/2c3ba150cbec723aa057506e73a8d33bdb286c9a",
+                "reference": "2c3ba150cbec723aa057506e73a8d33bdb286c9a",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~4.4"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.0.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Jeff Welch",
+                    "email": "whatthejeff@gmail.com"
+                },
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                },
+                {
+                    "name": "Adam Harvey",
+                    "email": "aharvey@php.net"
+                }
+            ],
+            "description": "Provides functionality to recursively process PHP variables",
+            "homepage": "http://www.github.com/sebastianbergmann/recursion-context",
+            "time": "2016-11-19T07:33:16+00:00"
+        },
+        {
+            "name": "sebastian/resource-operations",
+            "version": "1.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/resource-operations.git",
+                "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/ce990bb21759f94aeafd30209e8cfcdfa8bc3f52",
+                "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.6.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                }
+            ],
+            "description": "Provides a list of PHP built-in functions that operate on resources",
+            "homepage": "https://www.github.com/sebastianbergmann/resource-operations",
+            "time": "2015-07-28T20:34:47+00:00"
+        },
+        {
+            "name": "sebastian/version",
+            "version": "2.0.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/version.git",
+                "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019",
+                "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.6"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.0.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "Library that helps with managing the version number of Git-hosted PHP projects",
+            "homepage": "https://github.com/sebastianbergmann/version",
+            "time": "2016-10-03T07:35:21+00:00"
+        },
+        {
+            "name": "squizlabs/php_codesniffer",
+            "version": "3.5.6",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/squizlabs/PHP_CodeSniffer.git",
+                "reference": "e97627871a7eab2f70e59166072a6b767d5834e0"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/e97627871a7eab2f70e59166072a6b767d5834e0",
+                "reference": "e97627871a7eab2f70e59166072a6b767d5834e0",
+                "shasum": ""
+            },
+            "require": {
+                "ext-simplexml": "*",
+                "ext-tokenizer": "*",
+                "ext-xmlwriter": "*",
+                "php": ">=5.4.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0"
+            },
+            "bin": [
+                "bin/phpcs",
+                "bin/phpcbf"
+            ],
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.x-dev"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Greg Sherwood",
+                    "role": "lead"
+                }
+            ],
+            "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.",
+            "homepage": "https://github.com/squizlabs/PHP_CodeSniffer",
+            "keywords": [
+                "phpcs",
+                "standards"
+            ],
+            "time": "2020-08-10T04:50:15+00:00"
+        },
+        {
+            "name": "symfony/config",
+            "version": "v4.4.15",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/config.git",
+                "reference": "7c5a1002178a612787c291a4f515f87b19176b61"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/config/zipball/7c5a1002178a612787c291a4f515f87b19176b61",
+                "reference": "7c5a1002178a612787c291a4f515f87b19176b61",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.1.3",
+                "symfony/filesystem": "^3.4|^4.0|^5.0",
+                "symfony/polyfill-ctype": "~1.8"
+            },
+            "conflict": {
+                "symfony/finder": "<3.4"
+            },
+            "require-dev": {
+                "symfony/event-dispatcher": "^3.4|^4.0|^5.0",
+                "symfony/finder": "^3.4|^4.0|^5.0",
+                "symfony/messenger": "^4.1|^5.0",
+                "symfony/service-contracts": "^1.1|^2",
+                "symfony/yaml": "^3.4|^4.0|^5.0"
+            },
+            "suggest": {
+                "symfony/yaml": "To use the yaml reference dumper"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "4.4-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Config\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony Config Component",
+            "homepage": "https://symfony.com",
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-10-02T07:34:48+00:00"
+        },
+        {
+            "name": "symfony/stopwatch",
+            "version": "v4.4.15",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/stopwatch.git",
+                "reference": "6f89e19772cf61b3c65bab329fe0e318259fbd91"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/stopwatch/zipball/6f89e19772cf61b3c65bab329fe0e318259fbd91",
+                "reference": "6f89e19772cf61b3c65bab329fe0e318259fbd91",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.1.3",
+                "symfony/service-contracts": "^1.0|^2"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "4.4-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Stopwatch\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony Stopwatch Component",
+            "homepage": "https://symfony.com",
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-02T16:08:58+00:00"
+        },
+        {
+            "name": "webmozart/assert",
+            "version": "1.9.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/webmozart/assert.git",
+                "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/webmozart/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389",
+                "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^5.3.3 || ^7.0 || ^8.0",
+                "symfony/polyfill-ctype": "^1.8"
+            },
+            "conflict": {
+                "phpstan/phpstan": "<0.12.20",
+                "vimeo/psalm": "<3.9.1"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^4.8.36 || ^7.5.13"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Webmozart\\Assert\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Bernhard Schussek",
+                    "email": "bschussek@gmail.com"
+                }
+            ],
+            "description": "Assertions to validate method input/output with nice error messages.",
+            "keywords": [
+                "assert",
+                "check",
+                "validate"
+            ],
+            "time": "2020-07-08T17:02:28+00:00"
+        }
+    ],
+    "aliases": [],
+    "minimum-stability": "stable",
+    "stability-flags": [],
+    "prefer-stable": false,
+    "prefer-lowest": false,
+    "platform": {
+        "php": ">=5.5.0"
+    },
+    "platform-dev": [],
+    "platform-overrides": {
+        "php": "7.2.5"
+    },
+    "plugin-api-version": "1.1.0"
+}
diff --git a/vendor/consolidation/robo/.scenarios.lock/install b/vendor/consolidation/robo/.scenarios.lock/install
index 16c69e107cce7f71e33e04207254d005200f9fd4..4d8a777705dd1ce798857719d69a989d29271a6f 100755
--- a/vendor/consolidation/robo/.scenarios.lock/install
+++ b/vendor/consolidation/robo/.scenarios.lock/install
@@ -4,16 +4,16 @@ SCENARIO=$1
 DEPENDENCIES=${2-install}
 
 # Convert the aliases 'highest', 'lowest' and 'lock' to
-# the corresponding composer command to run.
+# the corresponding composer update command to run.
 case $DEPENDENCIES in
   highest)
-    DEPENDENCIES=update
+    UPDATE_COMMAND=update
     ;;
   lowest)
-    DEPENDENCIES='update --prefer-lowest'
+    UPDATE_COMMAND='update --prefer-lowest'
     ;;
   lock|default|"")
-    DEPENDENCIES=install
+    UPDATE_COMMAND=''
     ;;
 esac
 
@@ -48,7 +48,11 @@ echo
 set -ex
 
 composer -n validate --working-dir=$dir --no-check-all --ansi
-composer -n --working-dir=$dir ${DEPENDENCIES} --prefer-dist --no-scripts
+
+if [ ! -z "$UPDATE_COMMAND" ] ; then
+  composer -n --working-dir=$dir ${UPDATE_COMMAND} --prefer-dist --no-scripts
+fi
+composer -n --working-dir=$dir install --prefer-dist
 
 # If called from a CI context, print out some extra information about
 # what we just installed.
diff --git a/vendor/consolidation/robo/.scenarios.lock/symfony2/composer.json b/vendor/consolidation/robo/.scenarios.lock/symfony2/composer.json
index d11ea0fadcf7baa9d8d3736be067c4c6fac118eb..0acc7d2ceacd7a81e6559d1a200d0b3dedf83a38 100644
--- a/vendor/consolidation/robo/.scenarios.lock/symfony2/composer.json
+++ b/vendor/consolidation/robo/.scenarios.lock/symfony2/composer.json
@@ -25,35 +25,29 @@
     "require": {
         "symfony/console": "^2.8",
         "php": ">=5.5.0",
-        "league/container": "^2.2",
-        "consolidation/log": "~1",
-        "consolidation/config": "^1.2",
-        "consolidation/annotated-command": "^2.10.2",
-        "consolidation/output-formatters": "^3.1.13",
-        "consolidation/self-update": "^1",
-        "grasmash/yaml-expander": "^1.3",
-        "symfony/finder": "^2.5|^3|^4",
-        "symfony/process": "^2.5|^3|^4",
+        "consolidation/annotated-command": "^2.12.1|^4.1",
+        "consolidation/config": "^1.2.1",
+        "consolidation/log": "^1.1.1|^2",
+        "consolidation/output-formatters": "^3.5.1|^4.1",
+        "consolidation/self-update": "^1.1.5",
+        "grasmash/yaml-expander": "^1.4",
+        "league/container": "^2.4.1",
+        "symfony/event-dispatcher": "^2.5|^3|^4",
         "symfony/filesystem": "^2.5|^3|^4",
-        "symfony/event-dispatcher": "^2.5|^3|^4"
+        "symfony/finder": "^2.5|^3|^4|^5",
+        "symfony/process": "^2.5|^3|^4"
     },
     "require-dev": {
+        "phpunit/phpunit": "^4.8.36",
         "g1a/composer-test-scenarios": "^3",
-        "patchwork/jsqueeze": "~2",
-        "natxet/CssMin": "3.0.4",
+        "natxet/cssmin": "3.0.4",
+        "patchwork/jsqueeze": "^2",
         "pear/archive_tar": "^1.4.4",
-        "codeception/base": "^2.3.7",
-        "codeception/verify": "^0.3.2",
-        "codeception/aspect-mock": "^1|^2.1.1",
-        "goaop/parser-reflection": "^1.1.0",
-        "nikic/php-parser": "^3.1.5",
-        "php-coveralls/php-coveralls": "^1",
-        "phpunit/php-code-coverage": "~2|~4",
-        "squizlabs/php_codesniffer": "^2.8"
+        "squizlabs/php_codesniffer": "^3"
     },
     "scripts": {
         "cs": "./robo sniff",
-        "unit": "./robo test --coverage",
+        "unit": "phpunit",
         "lint": [
             "find src -name '*.php' -print0 | xargs -0 -n1 php -l",
             "find tests/src -name '*.php' -print0 | xargs -0 -n1 php -l"
@@ -77,7 +71,7 @@
     },
     "extra": {
         "branch-alias": {
-            "dev-master": "2.x-dev"
+            "dev-master": "1.x-dev"
         }
     },
     "suggest": {
diff --git a/vendor/consolidation/robo/.scenarios.lock/symfony4/composer.json b/vendor/consolidation/robo/.scenarios.lock/symfony4/composer.json
index e09d66c9c3a0e4ef9871b14949bb863998d3e479..afd02904f5728008b939c4205353d4315c1bfe4b 100644
--- a/vendor/consolidation/robo/.scenarios.lock/symfony4/composer.json
+++ b/vendor/consolidation/robo/.scenarios.lock/symfony4/composer.json
@@ -25,36 +25,30 @@
     "require": {
         "symfony/console": "^4",
         "php": ">=5.5.0",
-        "league/container": "^2.2",
-        "consolidation/log": "~1",
-        "consolidation/config": "^1.2",
-        "consolidation/annotated-command": "^2.10.2",
-        "consolidation/output-formatters": "^3.1.13",
-        "consolidation/self-update": "^1",
-        "grasmash/yaml-expander": "^1.3",
-        "symfony/finder": "^2.5|^3|^4",
-        "symfony/process": "^2.5|^3|^4",
+        "consolidation/annotated-command": "^2.12.1|^4.1",
+        "consolidation/config": "^1.2.1",
+        "consolidation/log": "^1.1.1|^2",
+        "consolidation/output-formatters": "^3.5.1|^4.1",
+        "consolidation/self-update": "^1.1.5",
+        "grasmash/yaml-expander": "^1.4",
+        "league/container": "^2.4.1",
+        "symfony/event-dispatcher": "^2.5|^3|^4",
         "symfony/filesystem": "^2.5|^3|^4",
-        "symfony/event-dispatcher": "^2.5|^3|^4"
+        "symfony/finder": "^2.5|^3|^4|^5",
+        "symfony/process": "^2.5|^3|^4"
     },
     "require-dev": {
         "g1a/composer-test-scenarios": "^3",
-        "patchwork/jsqueeze": "~2",
-        "natxet/CssMin": "3.0.4",
+        "natxet/cssmin": "3.0.4",
+        "patchwork/jsqueeze": "^2",
         "pear/archive_tar": "^1.4.4",
-        "codeception/base": "^2.3.7",
-        "goaop/framework": "~2.1.2",
-        "codeception/verify": "^0.3.2",
-        "codeception/aspect-mock": "^1|^2.1.1",
-        "goaop/parser-reflection": "^1.1.0",
-        "nikic/php-parser": "^3.1.5",
         "php-coveralls/php-coveralls": "^1",
-        "phpunit/php-code-coverage": "~2|~4",
-        "squizlabs/php_codesniffer": "^2.8"
+        "phpunit/phpunit": "^5.7.27",
+        "squizlabs/php_codesniffer": "^3"
     },
     "scripts": {
         "cs": "./robo sniff",
-        "unit": "./robo test --coverage",
+        "unit": "phpunit",
         "lint": [
             "find src -name '*.php' -print0 | xargs -0 -n1 php -l",
             "find tests/src -name '*.php' -print0 | xargs -0 -n1 php -l"
@@ -78,7 +72,7 @@
     },
     "extra": {
         "branch-alias": {
-            "dev-master": "2.x-dev"
+            "dev-master": "1.x-dev"
         }
     },
     "suggest": {
diff --git a/vendor/consolidation/robo/.scenarios.lock/symfony4/composer.lock b/vendor/consolidation/robo/.scenarios.lock/symfony4/composer.lock
index 1e19800b3f8de9dd2c650eee7b623fb9d4fffa4c..a3341115b24ab3bc45a744a27c7b832d67e140bd 100644
--- a/vendor/consolidation/robo/.scenarios.lock/symfony4/composer.lock
+++ b/vendor/consolidation/robo/.scenarios.lock/symfony4/composer.lock
@@ -4,35 +4,35 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "This file is @generated automatically"
     ],
-    "content-hash": "1a613bb086d612b492b42f2bc2a3b56a",
+    "content-hash": "112ff582ad73faeb2172d29338e7d237",
     "packages": [
         {
             "name": "consolidation/annotated-command",
-            "version": "2.11.2",
+            "version": "4.2.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/consolidation/annotated-command.git",
-                "reference": "004af26391cd7d1cd04b0ac736dc1324d1b4f572"
+                "reference": "4b596872f24c39d9c04d7b3adb6bc51baa1f2fd5"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/consolidation/annotated-command/zipball/004af26391cd7d1cd04b0ac736dc1324d1b4f572",
-                "reference": "004af26391cd7d1cd04b0ac736dc1324d1b4f572",
+                "url": "https://api.github.com/repos/consolidation/annotated-command/zipball/4b596872f24c39d9c04d7b3adb6bc51baa1f2fd5",
+                "reference": "4b596872f24c39d9c04d7b3adb6bc51baa1f2fd5",
                 "shasum": ""
             },
             "require": {
-                "consolidation/output-formatters": "^3.4",
-                "php": ">=5.4.5",
-                "psr/log": "^1",
-                "symfony/console": "^2.8|^3|^4",
-                "symfony/event-dispatcher": "^2.5|^3|^4",
-                "symfony/finder": "^2.5|^3|^4"
+                "consolidation/output-formatters": "^4.1.1",
+                "php": ">=7.1.3",
+                "psr/log": "^1|^2",
+                "symfony/console": "^4.4.8|^5",
+                "symfony/event-dispatcher": "^4.4.8|^5",
+                "symfony/finder": "^4.4.8|^5"
             },
             "require-dev": {
                 "g1a/composer-test-scenarios": "^3",
-                "php-coveralls/php-coveralls": "^1",
+                "php-coveralls/php-coveralls": "^2.2",
                 "phpunit/phpunit": "^6",
-                "squizlabs/php_codesniffer": "^2.7"
+                "squizlabs/php_codesniffer": "^3"
             },
             "type": "library",
             "extra": {
@@ -46,42 +46,10 @@
                                 "php": "7.1.3"
                             }
                         }
-                    },
-                    "symfony2": {
-                        "require": {
-                            "symfony/console": "^2.8"
-                        },
-                        "require-dev": {
-                            "phpunit/phpunit": "^4.8.36"
-                        },
-                        "remove": [
-                            "php-coveralls/php-coveralls"
-                        ],
-                        "config": {
-                            "platform": {
-                                "php": "5.4.8"
-                            }
-                        },
-                        "scenario-options": {
-                            "create-lockfile": "false"
-                        }
-                    },
-                    "phpunit4": {
-                        "require-dev": {
-                            "phpunit/phpunit": "^4.8.36"
-                        },
-                        "remove": [
-                            "php-coveralls/php-coveralls"
-                        ],
-                        "config": {
-                            "platform": {
-                                "php": "5.4.8"
-                            }
-                        }
                     }
                 },
                 "branch-alias": {
-                    "dev-master": "2.x-dev"
+                    "dev-main": "4.x-dev"
                 }
             },
             "autoload": {
@@ -100,20 +68,20 @@
                 }
             ],
             "description": "Initialize Symfony Console commands from annotated command class methods.",
-            "time": "2019-02-02T02:29:53+00:00"
+            "time": "2020-10-03T14:28:42+00:00"
         },
         {
             "name": "consolidation/config",
-            "version": "1.2.0",
+            "version": "1.2.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/consolidation/config.git",
-                "reference": "11ab7ecd19131ce084390171b9c070eedecf7dab"
+                "reference": "cac1279bae7efb5c7fb2ca4c3ba4b8eb741a96c1"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/consolidation/config/zipball/11ab7ecd19131ce084390171b9c070eedecf7dab",
-                "reference": "11ab7ecd19131ce084390171b9c070eedecf7dab",
+                "url": "https://api.github.com/repos/consolidation/config/zipball/cac1279bae7efb5c7fb2ca4c3ba4b8eb741a96c1",
+                "reference": "cac1279bae7efb5c7fb2ca4c3ba4b8eb741a96c1",
                 "shasum": ""
             },
             "require": {
@@ -181,78 +149,49 @@
                 }
             ],
             "description": "Provide configuration services for a commandline tool.",
-            "time": "2019-02-16T01:18:47+00:00"
+            "time": "2019-03-03T19:37:04+00:00"
         },
         {
             "name": "consolidation/log",
-            "version": "1.1.1",
+            "version": "2.0.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/consolidation/log.git",
-                "reference": "b2e887325ee90abc96b0a8b7b474cd9e7c896e3a"
+                "reference": "ba0bf6af1fbd09ed4dc18fc2f27b12ceff487cbf"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/consolidation/log/zipball/b2e887325ee90abc96b0a8b7b474cd9e7c896e3a",
-                "reference": "b2e887325ee90abc96b0a8b7b474cd9e7c896e3a",
+                "url": "https://api.github.com/repos/consolidation/log/zipball/ba0bf6af1fbd09ed4dc18fc2f27b12ceff487cbf",
+                "reference": "ba0bf6af1fbd09ed4dc18fc2f27b12ceff487cbf",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.4.5",
+                "php": ">=7.1.3",
                 "psr/log": "^1.0",
-                "symfony/console": "^2.8|^3|^4"
+                "symfony/console": "^4|^5"
             },
             "require-dev": {
                 "g1a/composer-test-scenarios": "^3",
-                "php-coveralls/php-coveralls": "^1",
+                "php-coveralls/php-coveralls": "^2.2",
                 "phpunit/phpunit": "^6",
-                "squizlabs/php_codesniffer": "^2"
+                "squizlabs/php_codesniffer": "^3"
             },
             "type": "library",
             "extra": {
                 "scenarios": {
                     "symfony4": {
-                        "require": {
-                            "symfony/console": "^4.0"
-                        },
-                        "config": {
-                            "platform": {
-                                "php": "7.1.3"
-                            }
-                        }
-                    },
-                    "symfony2": {
-                        "require": {
-                            "symfony/console": "^2.8"
-                        },
                         "require-dev": {
-                            "phpunit/phpunit": "^4.8.36"
-                        },
-                        "remove": [
-                            "php-coveralls/php-coveralls"
-                        ],
-                        "config": {
-                            "platform": {
-                                "php": "5.4.8"
-                            }
-                        }
-                    },
-                    "phpunit4": {
-                        "require-dev": {
-                            "phpunit/phpunit": "^4.8.36"
+                            "symfony/console": "^4"
                         },
-                        "remove": [
-                            "php-coveralls/php-coveralls"
-                        ],
                         "config": {
                             "platform": {
-                                "php": "5.4.8"
+                                "php": "7.1.3"
                             }
                         }
                     }
                 },
                 "branch-alias": {
-                    "dev-master": "1.x-dev"
+                    "dev-master": "2.x-dev"
                 }
             },
             "autoload": {
@@ -271,44 +210,55 @@
                 }
             ],
             "description": "Improved Psr-3 / Psr\\Log logger based on Symfony Console components.",
-            "time": "2019-01-01T17:30:51+00:00"
+            "time": "2020-05-27T17:06:13+00:00"
         },
         {
             "name": "consolidation/output-formatters",
-            "version": "3.4.0",
+            "version": "4.1.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/consolidation/output-formatters.git",
-                "reference": "a942680232094c4a5b21c0b7e54c20cce623ae19"
+                "reference": "9deeddd6a916d0a756b216a8b40ce1016e17c0b9"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/consolidation/output-formatters/zipball/a942680232094c4a5b21c0b7e54c20cce623ae19",
-                "reference": "a942680232094c4a5b21c0b7e54c20cce623ae19",
+                "url": "https://api.github.com/repos/consolidation/output-formatters/zipball/9deeddd6a916d0a756b216a8b40ce1016e17c0b9",
+                "reference": "9deeddd6a916d0a756b216a8b40ce1016e17c0b9",
                 "shasum": ""
             },
             "require": {
                 "dflydev/dot-access-data": "^1.1.0",
-                "php": ">=5.4.0",
-                "symfony/console": "^2.8|^3|^4",
-                "symfony/finder": "^2.5|^3|^4"
+                "php": ">=7.1.3",
+                "symfony/console": "^4|^5",
+                "symfony/finder": "^4|^5"
             },
             "require-dev": {
-                "g1a/composer-test-scenarios": "^2",
-                "phpunit/phpunit": "^5.7.27",
-                "satooshi/php-coveralls": "^2",
-                "squizlabs/php_codesniffer": "^2.7",
-                "symfony/console": "3.2.3",
-                "symfony/var-dumper": "^2.8|^3|^4",
-                "victorjonsson/markdowndocs": "^1.3"
+                "g1a/composer-test-scenarios": "^3",
+                "php-coveralls/php-coveralls": "^2.2",
+                "phpunit/phpunit": "^6",
+                "squizlabs/php_codesniffer": "^3",
+                "symfony/var-dumper": "^4",
+                "symfony/yaml": "^4"
             },
             "suggest": {
                 "symfony/var-dumper": "For using the var_dump formatter"
             },
             "type": "library",
             "extra": {
+                "scenarios": {
+                    "symfony4": {
+                        "require": {
+                            "symfony/console": "^4.0"
+                        },
+                        "config": {
+                            "platform": {
+                                "php": "7.1.3"
+                            }
+                        }
+                    }
+                },
                 "branch-alias": {
-                    "dev-master": "3.x-dev"
+                    "dev-master": "4.x-dev"
                 }
             },
             "autoload": {
@@ -327,26 +277,26 @@
                 }
             ],
             "description": "Format text by applying transformations provided by plug-in formatters.",
-            "time": "2018-10-19T22:35:38+00:00"
+            "time": "2020-05-27T20:51:17+00:00"
         },
         {
             "name": "consolidation/self-update",
-            "version": "1.1.5",
+            "version": "1.2.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/consolidation/self-update.git",
-                "reference": "a1c273b14ce334789825a09d06d4c87c0a02ad54"
+                "reference": "dba6b2c0708f20fa3ba8008a2353b637578849b4"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/consolidation/self-update/zipball/a1c273b14ce334789825a09d06d4c87c0a02ad54",
-                "reference": "a1c273b14ce334789825a09d06d4c87c0a02ad54",
+                "url": "https://api.github.com/repos/consolidation/self-update/zipball/dba6b2c0708f20fa3ba8008a2353b637578849b4",
+                "reference": "dba6b2c0708f20fa3ba8008a2353b637578849b4",
                 "shasum": ""
             },
             "require": {
                 "php": ">=5.5.0",
-                "symfony/console": "^2.8|^3|^4",
-                "symfony/filesystem": "^2.5|^3|^4"
+                "symfony/console": "^2.8|^3|^4|^5",
+                "symfony/filesystem": "^2.5|^3|^4|^5"
             },
             "bin": [
                 "scripts/release"
@@ -367,17 +317,17 @@
                 "MIT"
             ],
             "authors": [
-                {
-                    "name": "Greg Anderson",
-                    "email": "greg.1.anderson@greenknowe.org"
-                },
                 {
                     "name": "Alexander Menk",
                     "email": "menk@mestrona.net"
+                },
+                {
+                    "name": "Greg Anderson",
+                    "email": "greg.1.anderson@greenknowe.org"
                 }
             ],
             "description": "Provides a self:update command for Symfony Console applications.",
-            "time": "2018-10-28T01:52:03+00:00"
+            "time": "2020-04-13T02:49:20+00:00"
         },
         {
             "name": "container-interop/container-interop",
@@ -408,6 +358,7 @@
             ],
             "description": "Promoting the interoperability of container objects (DIC, SL, etc.)",
             "homepage": "https://github.com/container-interop/container-interop",
+            "abandoned": "psr/container",
             "time": "2017-02-14T19:40:03+00:00"
         },
         {
@@ -680,16 +631,16 @@
         },
         {
             "name": "psr/log",
-            "version": "1.1.0",
+            "version": "1.1.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/php-fig/log.git",
-                "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd"
+                "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/php-fig/log/zipball/6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd",
-                "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd",
+                "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc",
+                "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc",
                 "shasum": ""
             },
             "require": {
@@ -698,7 +649,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.0.x-dev"
+                    "dev-master": "1.1.x-dev"
                 }
             },
             "autoload": {
@@ -723,29 +674,33 @@
                 "psr",
                 "psr-3"
             ],
-            "time": "2018-11-20T15:27:04+00:00"
+            "time": "2020-03-23T09:12:05+00:00"
         },
         {
             "name": "symfony/console",
-            "version": "v4.2.3",
+            "version": "v4.4.15",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/console.git",
-                "reference": "1f0ad51dfde4da8a6070f06adc58b4e37cbb37a4"
+                "reference": "90933b39c7b312fc3ceaa1ddeac7eb48cb953124"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/console/zipball/1f0ad51dfde4da8a6070f06adc58b4e37cbb37a4",
-                "reference": "1f0ad51dfde4da8a6070f06adc58b4e37cbb37a4",
+                "url": "https://api.github.com/repos/symfony/console/zipball/90933b39c7b312fc3ceaa1ddeac7eb48cb953124",
+                "reference": "90933b39c7b312fc3ceaa1ddeac7eb48cb953124",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.1.3",
-                "symfony/contracts": "^1.0",
-                "symfony/polyfill-mbstring": "~1.0"
+                "php": ">=7.1.3",
+                "symfony/polyfill-mbstring": "~1.0",
+                "symfony/polyfill-php73": "^1.8",
+                "symfony/polyfill-php80": "^1.15",
+                "symfony/service-contracts": "^1.1|^2"
             },
             "conflict": {
                 "symfony/dependency-injection": "<3.4",
+                "symfony/event-dispatcher": "<4.3|>=5",
+                "symfony/lock": "<4.4",
                 "symfony/process": "<3.3"
             },
             "provide": {
@@ -753,11 +708,12 @@
             },
             "require-dev": {
                 "psr/log": "~1.0",
-                "symfony/config": "~3.4|~4.0",
-                "symfony/dependency-injection": "~3.4|~4.0",
-                "symfony/event-dispatcher": "~3.4|~4.0",
-                "symfony/lock": "~3.4|~4.0",
-                "symfony/process": "~3.4|~4.0"
+                "symfony/config": "^3.4|^4.0|^5.0",
+                "symfony/dependency-injection": "^3.4|^4.0|^5.0",
+                "symfony/event-dispatcher": "^4.3",
+                "symfony/lock": "^4.4|^5.0",
+                "symfony/process": "^3.4|^4.0|^5.0",
+                "symfony/var-dumper": "^4.3|^5.0"
             },
             "suggest": {
                 "psr/log": "For using the console logger",
@@ -768,7 +724,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "4.2-dev"
+                    "dev-master": "4.4-dev"
                 }
             },
             "autoload": {
@@ -795,48 +751,73 @@
             ],
             "description": "Symfony Console Component",
             "homepage": "https://symfony.com",
-            "time": "2019-01-25T14:35:16+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-15T07:58:55+00:00"
         },
         {
-            "name": "symfony/contracts",
-            "version": "v1.0.2",
+            "name": "symfony/event-dispatcher",
+            "version": "v4.4.15",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/contracts.git",
-                "reference": "1aa7ab2429c3d594dd70689604b5cf7421254cdf"
+                "url": "https://github.com/symfony/event-dispatcher.git",
+                "reference": "e17bb5e0663dc725f7cdcafc932132735b4725cd"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/contracts/zipball/1aa7ab2429c3d594dd70689604b5cf7421254cdf",
-                "reference": "1aa7ab2429c3d594dd70689604b5cf7421254cdf",
+                "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/e17bb5e0663dc725f7cdcafc932132735b4725cd",
+                "reference": "e17bb5e0663dc725f7cdcafc932132735b4725cd",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.1.3"
+                "php": ">=7.1.3",
+                "symfony/event-dispatcher-contracts": "^1.1"
+            },
+            "conflict": {
+                "symfony/dependency-injection": "<3.4"
+            },
+            "provide": {
+                "psr/event-dispatcher-implementation": "1.0",
+                "symfony/event-dispatcher-implementation": "1.1"
             },
             "require-dev": {
-                "psr/cache": "^1.0",
-                "psr/container": "^1.0"
+                "psr/log": "~1.0",
+                "symfony/config": "^3.4|^4.0|^5.0",
+                "symfony/dependency-injection": "^3.4|^4.0|^5.0",
+                "symfony/error-handler": "~3.4|~4.4",
+                "symfony/expression-language": "^3.4|^4.0|^5.0",
+                "symfony/http-foundation": "^3.4|^4.0|^5.0",
+                "symfony/service-contracts": "^1.1|^2",
+                "symfony/stopwatch": "^3.4|^4.0|^5.0"
             },
             "suggest": {
-                "psr/cache": "When using the Cache contracts",
-                "psr/container": "When using the Service contracts",
-                "symfony/cache-contracts-implementation": "",
-                "symfony/service-contracts-implementation": "",
-                "symfony/translation-contracts-implementation": ""
+                "symfony/dependency-injection": "",
+                "symfony/http-kernel": ""
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.0-dev"
+                    "dev-master": "4.4-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Symfony\\Contracts\\": ""
+                    "Symfony\\Component\\EventDispatcher\\": ""
                 },
                 "exclude-from-classmap": [
-                    "**/Tests/"
+                    "/Tests/"
                 ]
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -845,71 +826,67 @@
             ],
             "authors": [
                 {
-                    "name": "Nicolas Grekas",
-                    "email": "p@tchwork.com"
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
                 },
                 {
                     "name": "Symfony Community",
                     "homepage": "https://symfony.com/contributors"
                 }
             ],
-            "description": "A set of abstractions extracted out of the Symfony components",
+            "description": "Symfony EventDispatcher Component",
             "homepage": "https://symfony.com",
-            "keywords": [
-                "abstractions",
-                "contracts",
-                "decoupling",
-                "interfaces",
-                "interoperability",
-                "standards"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
             ],
-            "time": "2018-12-05T08:06:11+00:00"
+            "time": "2020-09-18T14:07:46+00:00"
         },
         {
-            "name": "symfony/event-dispatcher",
-            "version": "v4.2.3",
+            "name": "symfony/event-dispatcher-contracts",
+            "version": "v1.1.9",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/event-dispatcher.git",
-                "reference": "bd09ad265cd50b2b9d09d65ce6aba2d29bc81fe1"
+                "url": "https://github.com/symfony/event-dispatcher-contracts.git",
+                "reference": "84e23fdcd2517bf37aecbd16967e83f0caee25a7"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/bd09ad265cd50b2b9d09d65ce6aba2d29bc81fe1",
-                "reference": "bd09ad265cd50b2b9d09d65ce6aba2d29bc81fe1",
+                "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/84e23fdcd2517bf37aecbd16967e83f0caee25a7",
+                "reference": "84e23fdcd2517bf37aecbd16967e83f0caee25a7",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.1.3",
-                "symfony/contracts": "^1.0"
-            },
-            "conflict": {
-                "symfony/dependency-injection": "<3.4"
-            },
-            "require-dev": {
-                "psr/log": "~1.0",
-                "symfony/config": "~3.4|~4.0",
-                "symfony/dependency-injection": "~3.4|~4.0",
-                "symfony/expression-language": "~3.4|~4.0",
-                "symfony/stopwatch": "~3.4|~4.0"
+                "php": ">=7.1.3"
             },
             "suggest": {
-                "symfony/dependency-injection": "",
-                "symfony/http-kernel": ""
+                "psr/event-dispatcher": "",
+                "symfony/event-dispatcher-implementation": ""
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "4.2-dev"
+                    "dev-master": "1.1-dev"
+                },
+                "thanks": {
+                    "name": "symfony/contracts",
+                    "url": "https://github.com/symfony/contracts"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Symfony\\Component\\EventDispatcher\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
+                    "Symfony\\Contracts\\EventDispatcher\\": ""
+                }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
@@ -917,40 +894,62 @@
             ],
             "authors": [
                 {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
                 },
                 {
                     "name": "Symfony Community",
                     "homepage": "https://symfony.com/contributors"
                 }
             ],
-            "description": "Symfony EventDispatcher Component",
+            "description": "Generic abstractions related to dispatching event",
             "homepage": "https://symfony.com",
-            "time": "2019-01-16T20:35:37+00:00"
+            "keywords": [
+                "abstractions",
+                "contracts",
+                "decoupling",
+                "interfaces",
+                "interoperability",
+                "standards"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-06T13:19:58+00:00"
         },
         {
             "name": "symfony/filesystem",
-            "version": "v4.2.3",
+            "version": "v4.4.15",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/filesystem.git",
-                "reference": "7c16ebc2629827d4ec915a52ac809768d060a4ee"
+                "reference": "ebc51494739d3b081ea543ed7c462fa73a4f74db"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/filesystem/zipball/7c16ebc2629827d4ec915a52ac809768d060a4ee",
-                "reference": "7c16ebc2629827d4ec915a52ac809768d060a4ee",
+                "url": "https://api.github.com/repos/symfony/filesystem/zipball/ebc51494739d3b081ea543ed7c462fa73a4f74db",
+                "reference": "ebc51494739d3b081ea543ed7c462fa73a4f74db",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.1.3",
+                "php": ">=7.1.3",
                 "symfony/polyfill-ctype": "~1.8"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "4.2-dev"
+                    "dev-master": "4.4-dev"
                 }
             },
             "autoload": {
@@ -977,29 +976,43 @@
             ],
             "description": "Symfony Filesystem Component",
             "homepage": "https://symfony.com",
-            "time": "2019-01-16T20:35:37+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-27T13:54:16+00:00"
         },
         {
             "name": "symfony/finder",
-            "version": "v3.4.22",
+            "version": "v4.4.15",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/finder.git",
-                "reference": "7c0c627220308928e958a87c293108e5891cde1d"
+                "reference": "60d08560f9aa72997c44077c40d47aa28a963230"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/finder/zipball/7c0c627220308928e958a87c293108e5891cde1d",
-                "reference": "7c0c627220308928e958a87c293108e5891cde1d",
+                "url": "https://api.github.com/repos/symfony/finder/zipball/60d08560f9aa72997c44077c40d47aa28a963230",
+                "reference": "60d08560f9aa72997c44077c40d47aa28a963230",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.5.9|>=7.0.8"
+                "php": ">=7.1.3"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "3.4-dev"
+                    "dev-master": "4.4-dev"
                 }
             },
             "autoload": {
@@ -1026,20 +1039,34 @@
             ],
             "description": "Symfony Finder Component",
             "homepage": "https://symfony.com",
-            "time": "2019-01-16T13:43:35+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-10-02T07:34:48+00:00"
         },
         {
             "name": "symfony/polyfill-ctype",
-            "version": "v1.10.0",
+            "version": "v1.18.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-ctype.git",
-                "reference": "e3d826245268269cd66f8326bd8bc066687b4a19"
+                "reference": "1c302646f6efc070cd46856e600e5e0684d6b454"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/e3d826245268269cd66f8326bd8bc066687b4a19",
-                "reference": "e3d826245268269cd66f8326bd8bc066687b4a19",
+                "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/1c302646f6efc070cd46856e600e5e0684d6b454",
+                "reference": "1c302646f6efc070cd46856e600e5e0684d6b454",
                 "shasum": ""
             },
             "require": {
@@ -1051,7 +1078,11 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.9-dev"
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
                 }
             },
             "autoload": {
@@ -1067,13 +1098,13 @@
                 "MIT"
             ],
             "authors": [
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                },
                 {
                     "name": "Gert de Pagter",
                     "email": "BackEndTea@gmail.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
                 }
             ],
             "description": "Symfony polyfill for ctype functions",
@@ -1084,20 +1115,34 @@
                 "polyfill",
                 "portable"
             ],
-            "time": "2018-08-06T14:22:27+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-14T12:35:20+00:00"
         },
         {
             "name": "symfony/polyfill-mbstring",
-            "version": "v1.10.0",
+            "version": "v1.18.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-mbstring.git",
-                "reference": "c79c051f5b3a46be09205c73b80b346e4153e494"
+                "reference": "a6977d63bf9a0ad4c65cd352709e230876f9904a"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/c79c051f5b3a46be09205c73b80b346e4153e494",
-                "reference": "c79c051f5b3a46be09205c73b80b346e4153e494",
+                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/a6977d63bf9a0ad4c65cd352709e230876f9904a",
+                "reference": "a6977d63bf9a0ad4c65cd352709e230876f9904a",
                 "shasum": ""
             },
             "require": {
@@ -1109,7 +1154,11 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.9-dev"
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
                 }
             },
             "autoload": {
@@ -1143,37 +1192,58 @@
                 "portable",
                 "shim"
             ],
-            "time": "2018-09-21T13:07:52+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-14T12:35:20+00:00"
         },
         {
-            "name": "symfony/process",
-            "version": "v4.2.3",
+            "name": "symfony/polyfill-php73",
+            "version": "v1.18.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/process.git",
-                "reference": "6c05edb11fbeff9e2b324b4270ecb17911a8b7ad"
+                "url": "https://github.com/symfony/polyfill-php73.git",
+                "reference": "fffa1a52a023e782cdcc221d781fe1ec8f87fcca"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/process/zipball/6c05edb11fbeff9e2b324b4270ecb17911a8b7ad",
-                "reference": "6c05edb11fbeff9e2b324b4270ecb17911a8b7ad",
+                "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fffa1a52a023e782cdcc221d781fe1ec8f87fcca",
+                "reference": "fffa1a52a023e782cdcc221d781fe1ec8f87fcca",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.1.3"
+                "php": ">=5.3.3"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "4.2-dev"
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Symfony\\Component\\Process\\": ""
+                    "Symfony\\Polyfill\\Php73\\": ""
                 },
-                "exclude-from-classmap": [
-                    "/Tests/"
+                "files": [
+                    "bootstrap.php"
+                ],
+                "classmap": [
+                    "Resources/stubs"
                 ]
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -1182,57 +1252,74 @@
             ],
             "authors": [
                 {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
                 },
                 {
                     "name": "Symfony Community",
                     "homepage": "https://symfony.com/contributors"
                 }
             ],
-            "description": "Symfony Process Component",
+            "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions",
             "homepage": "https://symfony.com",
-            "time": "2019-01-24T22:05:03+00:00"
+            "keywords": [
+                "compatibility",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-14T12:35:20+00:00"
         },
         {
-            "name": "symfony/yaml",
-            "version": "v4.2.3",
+            "name": "symfony/polyfill-php80",
+            "version": "v1.18.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/yaml.git",
-                "reference": "d461670ee145092b7e2a56c1da7118f19cadadb0"
+                "url": "https://github.com/symfony/polyfill-php80.git",
+                "reference": "d87d5766cbf48d72388a9f6b85f280c8ad51f981"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/yaml/zipball/d461670ee145092b7e2a56c1da7118f19cadadb0",
-                "reference": "d461670ee145092b7e2a56c1da7118f19cadadb0",
+                "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/d87d5766cbf48d72388a9f6b85f280c8ad51f981",
+                "reference": "d87d5766cbf48d72388a9f6b85f280c8ad51f981",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.1.3",
-                "symfony/polyfill-ctype": "~1.8"
-            },
-            "conflict": {
-                "symfony/console": "<3.4"
-            },
-            "require-dev": {
-                "symfony/console": "~3.4|~4.0"
-            },
-            "suggest": {
-                "symfony/console": "For validating YAML files using the lint command"
+                "php": ">=7.0.8"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "4.2-dev"
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Symfony\\Component\\Yaml\\": ""
+                    "Symfony\\Polyfill\\Php80\\": ""
                 },
-                "exclude-from-classmap": [
-                    "/Tests/"
+                "files": [
+                    "bootstrap.php"
+                ],
+                "classmap": [
+                    "Resources/stubs"
                 ]
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -1241,44 +1328,58 @@
             ],
             "authors": [
                 {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
+                    "name": "Ion Bazan",
+                    "email": "ion.bazan@gmail.com"
+                },
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
                 },
                 {
                     "name": "Symfony Community",
                     "homepage": "https://symfony.com/contributors"
                 }
             ],
-            "description": "Symfony Yaml Component",
+            "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions",
             "homepage": "https://symfony.com",
-            "time": "2019-01-16T20:35:37+00:00"
-        }
-    ],
-    "packages-dev": [
+            "keywords": [
+                "compatibility",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-14T12:35:20+00:00"
+        },
         {
-            "name": "behat/gherkin",
-            "version": "v4.6.0",
+            "name": "symfony/process",
+            "version": "v4.4.15",
             "source": {
                 "type": "git",
-                "url": "https://github.com/Behat/Gherkin.git",
-                "reference": "ab0a02ea14893860bca00f225f5621d351a3ad07"
+                "url": "https://github.com/symfony/process.git",
+                "reference": "9b887acc522935f77555ae8813495958c7771ba7"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/Behat/Gherkin/zipball/ab0a02ea14893860bca00f225f5621d351a3ad07",
-                "reference": "ab0a02ea14893860bca00f225f5621d351a3ad07",
+                "url": "https://api.github.com/repos/symfony/process/zipball/9b887acc522935f77555ae8813495958c7771ba7",
+                "reference": "9b887acc522935f77555ae8813495958c7771ba7",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.1"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "~4.5|~5",
-                "symfony/phpunit-bridge": "~2.7|~3|~4",
-                "symfony/yaml": "~2.3|~3|~4"
-            },
-            "suggest": {
-                "symfony/yaml": "If you want to parse features, represented in YAML files"
+                "php": ">=7.1.3"
             },
             "type": "library",
             "extra": {
@@ -1287,9 +1388,12 @@
                 }
             },
             "autoload": {
-                "psr-0": {
-                    "Behat\\Gherkin": "src/"
-                }
+                "psr-4": {
+                    "Symfony\\Component\\Process\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
@@ -1297,132 +1401,66 @@
             ],
             "authors": [
                 {
-                    "name": "Konstantin Kudryashov",
-                    "email": "ever.zet@gmail.com",
-                    "homepage": "http://everzet.com"
-                }
-            ],
-            "description": "Gherkin DSL parser for PHP 5.3",
-            "homepage": "http://behat.org/",
-            "keywords": [
-                "BDD",
-                "Behat",
-                "Cucumber",
-                "DSL",
-                "gherkin",
-                "parser"
-            ],
-            "time": "2019-01-16T14:22:17+00:00"
-        },
-        {
-            "name": "codeception/aspect-mock",
-            "version": "2.1.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/Codeception/AspectMock.git",
-                "reference": "bf3c000599c0dc75ecb52e19dee2b8ed294cf7ba"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/Codeception/AspectMock/zipball/bf3c000599c0dc75ecb52e19dee2b8ed294cf7ba",
-                "reference": "bf3c000599c0dc75ecb52e19dee2b8ed294cf7ba",
-                "shasum": ""
-            },
-            "require": {
-                "goaop/framework": "^2.0.0",
-                "php": ">=5.6.0",
-                "symfony/finder": "~2.4|~3.0"
-            },
-            "require-dev": {
-                "codeception/base": "~2.1",
-                "codeception/specify": "~0.3",
-                "codeception/verify": "~0.2"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-0": {
-                    "AspectMock": "src/"
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
                 }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
             ],
-            "authors": [
+            "description": "Symfony Process Component",
+            "homepage": "https://symfony.com",
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
                 {
-                    "name": "Michael Bodnarchuk",
-                    "email": "davert@codeception.com"
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
                 }
             ],
-            "description": "Experimental Mocking Framework powered by Aspects",
-            "time": "2017-10-24T10:20:17+00:00"
+            "time": "2020-09-02T16:08:58+00:00"
         },
         {
-            "name": "codeception/base",
-            "version": "2.5.3",
+            "name": "symfony/service-contracts",
+            "version": "v1.1.9",
             "source": {
                 "type": "git",
-                "url": "https://github.com/Codeception/base.git",
-                "reference": "ceff0b4fee4846b6bd8b5a37abbbb1acd6e78f58"
+                "url": "https://github.com/symfony/service-contracts.git",
+                "reference": "b776d18b303a39f56c63747bcb977ad4b27aca26"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/Codeception/base/zipball/ceff0b4fee4846b6bd8b5a37abbbb1acd6e78f58",
-                "reference": "ceff0b4fee4846b6bd8b5a37abbbb1acd6e78f58",
+                "url": "https://api.github.com/repos/symfony/service-contracts/zipball/b776d18b303a39f56c63747bcb977ad4b27aca26",
+                "reference": "b776d18b303a39f56c63747bcb977ad4b27aca26",
                 "shasum": ""
             },
             "require": {
-                "behat/gherkin": "^4.4.0",
-                "codeception/phpunit-wrapper": "^6.0.9|^7.0.6",
-                "codeception/stub": "^2.0",
-                "ext-curl": "*",
-                "ext-json": "*",
-                "ext-mbstring": "*",
-                "guzzlehttp/psr7": "~1.0",
-                "php": ">=5.6.0 <8.0",
-                "symfony/browser-kit": ">=2.7 <5.0",
-                "symfony/console": ">=2.7 <5.0",
-                "symfony/css-selector": ">=2.7 <5.0",
-                "symfony/dom-crawler": ">=2.7 <5.0",
-                "symfony/event-dispatcher": ">=2.7 <5.0",
-                "symfony/finder": ">=2.7 <5.0",
-                "symfony/yaml": ">=2.7 <5.0"
-            },
-            "require-dev": {
-                "codeception/specify": "~0.3",
-                "facebook/graph-sdk": "~5.3",
-                "flow/jsonpath": "~0.2",
-                "monolog/monolog": "~1.8",
-                "pda/pheanstalk": "~3.0",
-                "php-amqplib/php-amqplib": "~2.4",
-                "predis/predis": "^1.0",
-                "squizlabs/php_codesniffer": "~2.0",
-                "symfony/process": ">=2.7 <5.0",
-                "vlucas/phpdotenv": "^3.0"
+                "php": ">=7.1.3",
+                "psr/container": "^1.0"
             },
             "suggest": {
-                "aws/aws-sdk-php": "For using AWS Auth in REST module and Queue module",
-                "codeception/phpbuiltinserver": "Start and stop PHP built-in web server for your tests",
-                "codeception/specify": "BDD-style code blocks",
-                "codeception/verify": "BDD-style assertions",
-                "flow/jsonpath": "For using JSONPath in REST module",
-                "league/factory-muffin": "For DataFactory module",
-                "league/factory-muffin-faker": "For Faker support in DataFactory module",
-                "phpseclib/phpseclib": "for SFTP option in FTP Module",
-                "stecman/symfony-console-completion": "For BASH autocompletion",
-                "symfony/phpunit-bridge": "For phpunit-bridge support"
+                "symfony/service-implementation": ""
             },
-            "bin": [
-                "codecept"
-            ],
             "type": "library",
             "extra": {
-                "branch-alias": []
+                "branch-alias": {
+                    "dev-master": "1.1-dev"
+                },
+                "thanks": {
+                    "name": "symfony/contracts",
+                    "url": "https://github.com/symfony/contracts"
+                }
             },
             "autoload": {
                 "psr-4": {
-                    "Codeception\\": "src/Codeception",
-                    "Codeception\\Extension\\": "ext"
+                    "Symfony\\Contracts\\Service\\": ""
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -1431,166 +1469,80 @@
             ],
             "authors": [
                 {
-                    "name": "Michael Bodnarchuk",
-                    "email": "davert@mail.ua",
-                    "homepage": "http://codegyre.com"
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
                 }
             ],
-            "description": "BDD-style testing framework",
-            "homepage": "http://codeception.com/",
+            "description": "Generic abstractions related to writing services",
+            "homepage": "https://symfony.com",
             "keywords": [
-                "BDD",
-                "TDD",
-                "acceptance testing",
-                "functional testing",
-                "unit testing"
-            ],
-            "time": "2019-02-02T16:29:38+00:00"
-        },
-        {
-            "name": "codeception/phpunit-wrapper",
-            "version": "6.0.14",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/Codeception/phpunit-wrapper.git",
-                "reference": "3b64beb0af3e63145af982e64718ab80d2417739"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/Codeception/phpunit-wrapper/zipball/3b64beb0af3e63145af982e64718ab80d2417739",
-                "reference": "3b64beb0af3e63145af982e64718ab80d2417739",
-                "shasum": ""
-            },
-            "require": {
-                "phpunit/php-code-coverage": ">=4.0.4 <6.0",
-                "phpunit/phpunit": ">=5.7.27 <6.5.13",
-                "sebastian/comparator": ">=1.2.4 <3.0",
-                "sebastian/diff": ">=1.4 <4.0"
-            },
-            "replace": {
-                "codeception/phpunit-wrapper": "*"
-            },
-            "require-dev": {
-                "codeception/specify": "*",
-                "vlucas/phpdotenv": "^2.4"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Codeception\\PHPUnit\\": "src\\"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
+                "abstractions",
+                "contracts",
+                "decoupling",
+                "interfaces",
+                "interoperability",
+                "standards"
             ],
-            "authors": [
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
                 {
-                    "name": "Davert",
-                    "email": "davert.php@resend.cc"
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
                 }
             ],
-            "description": "PHPUnit classes used by Codeception",
-            "time": "2019-01-13T10:35:17+00:00"
+            "time": "2020-07-06T13:19:58+00:00"
         },
         {
-            "name": "codeception/stub",
-            "version": "2.0.4",
+            "name": "symfony/yaml",
+            "version": "v4.4.15",
             "source": {
                 "type": "git",
-                "url": "https://github.com/Codeception/Stub.git",
-                "reference": "f50bc271f392a2836ff80690ce0c058efe1ae03e"
+                "url": "https://github.com/symfony/yaml.git",
+                "reference": "c7885964b1eceb70b0981556d0a9b01d2d97c8d1"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/Codeception/Stub/zipball/f50bc271f392a2836ff80690ce0c058efe1ae03e",
-                "reference": "f50bc271f392a2836ff80690ce0c058efe1ae03e",
+                "url": "https://api.github.com/repos/symfony/yaml/zipball/c7885964b1eceb70b0981556d0a9b01d2d97c8d1",
+                "reference": "c7885964b1eceb70b0981556d0a9b01d2d97c8d1",
                 "shasum": ""
             },
             "require": {
-                "phpunit/phpunit": ">=4.8 <8.0"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Codeception\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "description": "Flexible Stub wrapper for PHPUnit's Mock Builder",
-            "time": "2018-07-26T11:55:37+00:00"
-        },
-        {
-            "name": "codeception/verify",
-            "version": "0.3.3",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/Codeception/Verify.git",
-                "reference": "5d649dda453cd814dadc4bb053060cd2c6bb4b4c"
+                "php": ">=7.1.3",
+                "symfony/polyfill-ctype": "~1.8"
             },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/Codeception/Verify/zipball/5d649dda453cd814dadc4bb053060cd2c6bb4b4c",
-                "reference": "5d649dda453cd814dadc4bb053060cd2c6bb4b4c",
-                "shasum": ""
+            "conflict": {
+                "symfony/console": "<3.4"
             },
             "require-dev": {
-                "phpunit/phpunit": "~4.0"
-            },
-            "type": "library",
-            "autoload": {
-                "files": [
-                    "src/Codeception/function.php"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Michael Bodnarchuk",
-                    "email": "davert.php@mailican.com"
-                }
-            ],
-            "description": "BDD assertion library for PHPUnit",
-            "time": "2017-01-09T10:58:51+00:00"
-        },
-        {
-            "name": "doctrine/annotations",
-            "version": "v1.6.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/doctrine/annotations.git",
-                "reference": "c7f2050c68a9ab0bdb0f98567ec08d80ea7d24d5"
+                "symfony/console": "^3.4|^4.0|^5.0"
             },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/annotations/zipball/c7f2050c68a9ab0bdb0f98567ec08d80ea7d24d5",
-                "reference": "c7f2050c68a9ab0bdb0f98567ec08d80ea7d24d5",
-                "shasum": ""
-            },
-            "require": {
-                "doctrine/lexer": "1.*",
-                "php": "^7.1"
-            },
-            "require-dev": {
-                "doctrine/cache": "1.*",
-                "phpunit/phpunit": "^6.4"
+            "suggest": {
+                "symfony/console": "For validating YAML files using the lint command"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.6.x-dev"
+                    "dev-master": "4.4-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations"
-                }
+                    "Symfony\\Component\\Yaml\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
@@ -1598,58 +1550,59 @@
             ],
             "authors": [
                 {
-                    "name": "Roman Borschel",
-                    "email": "roman@code-factory.org"
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
                 },
                 {
-                    "name": "Benjamin Eberlei",
-                    "email": "kontakt@beberlei.de"
-                },
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony Yaml Component",
+            "homepage": "https://symfony.com",
+            "funding": [
                 {
-                    "name": "Guilherme Blanco",
-                    "email": "guilhermeblanco@gmail.com"
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
                 },
                 {
-                    "name": "Jonathan Wage",
-                    "email": "jonwage@gmail.com"
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
                 },
                 {
-                    "name": "Johannes Schmitt",
-                    "email": "schmittjoh@gmail.com"
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
                 }
             ],
-            "description": "Docblock Annotations Parser",
-            "homepage": "http://www.doctrine-project.org",
-            "keywords": [
-                "annotations",
-                "docblock",
-                "parser"
-            ],
-            "time": "2017-12-06T07:11:42+00:00"
-        },
+            "time": "2020-09-27T03:36:23+00:00"
+        }
+    ],
+    "packages-dev": [
         {
             "name": "doctrine/instantiator",
-            "version": "1.1.0",
+            "version": "1.3.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/doctrine/instantiator.git",
-                "reference": "185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda"
+                "reference": "f350df0268e904597e3bd9c4685c53e0e333feea"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/instantiator/zipball/185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda",
-                "reference": "185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda",
+                "url": "https://api.github.com/repos/doctrine/instantiator/zipball/f350df0268e904597e3bd9c4685c53e0e333feea",
+                "reference": "f350df0268e904597e3bd9c4685c53e0e333feea",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.1"
+                "php": "^7.1 || ^8.0"
             },
             "require-dev": {
-                "athletic/athletic": "~0.1.8",
+                "doctrine/coding-standard": "^6.0",
                 "ext-pdo": "*",
                 "ext-phar": "*",
-                "phpunit/phpunit": "^6.2.3",
-                "squizlabs/php_codesniffer": "^3.0.2"
+                "phpbench/phpbench": "^0.13",
+                "phpstan/phpstan-phpunit": "^0.11",
+                "phpstan/phpstan-shim": "^0.11",
+                "phpunit/phpunit": "^7.0"
             },
             "type": "library",
             "extra": {
@@ -1674,90 +1627,50 @@
                 }
             ],
             "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
-            "homepage": "https://github.com/doctrine/instantiator",
+            "homepage": "https://www.doctrine-project.org/projects/instantiator.html",
             "keywords": [
                 "constructor",
                 "instantiate"
             ],
-            "time": "2017-07-22T11:58:36+00:00"
-        },
-        {
-            "name": "doctrine/lexer",
-            "version": "v1.0.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/doctrine/lexer.git",
-                "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/lexer/zipball/83893c552fd2045dd78aef794c31e694c37c0b8c",
-                "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.2"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.0.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-0": {
-                    "Doctrine\\Common\\Lexer\\": "lib/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
+            "funding": [
                 {
-                    "name": "Roman Borschel",
-                    "email": "roman@code-factory.org"
+                    "url": "https://www.doctrine-project.org/sponsorship.html",
+                    "type": "custom"
                 },
                 {
-                    "name": "Guilherme Blanco",
-                    "email": "guilhermeblanco@gmail.com"
+                    "url": "https://www.patreon.com/phpdoctrine",
+                    "type": "patreon"
                 },
                 {
-                    "name": "Johannes Schmitt",
-                    "email": "schmittjoh@gmail.com"
+                    "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator",
+                    "type": "tidelift"
                 }
             ],
-            "description": "Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers.",
-            "homepage": "http://www.doctrine-project.org",
-            "keywords": [
-                "lexer",
-                "parser"
-            ],
-            "time": "2014-09-09T13:34:57+00:00"
+            "time": "2020-05-29T17:27:14+00:00"
         },
         {
             "name": "g1a/composer-test-scenarios",
-            "version": "3.0.2",
+            "version": "3.2.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/g1a/composer-test-scenarios.git",
-                "reference": "28f932580981e912ab8f01d15788f1dee06550c8"
+                "reference": "e7394206d845fd593d325440507fb940bef8cb62"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/g1a/composer-test-scenarios/zipball/28f932580981e912ab8f01d15788f1dee06550c8",
-                "reference": "28f932580981e912ab8f01d15788f1dee06550c8",
+                "url": "https://api.github.com/repos/g1a/composer-test-scenarios/zipball/e7394206d845fd593d325440507fb940bef8cb62",
+                "reference": "e7394206d845fd593d325440507fb940bef8cb62",
                 "shasum": ""
             },
             "require": {
-                "composer-plugin-api": "^1.0.0",
+                "composer-plugin-api": "^1.0.0 || ^2.0.0",
                 "php": ">=5.4"
             },
             "require-dev": {
-                "composer/composer": "^1.7",
+                "composer/composer": "^1.10.6 || ^2.0@rc",
                 "php-coveralls/php-coveralls": "^1.0",
                 "phpunit/phpunit": "^4.8.36|^6",
-                "squizlabs/php_codesniffer": "^2.8"
+                "squizlabs/php_codesniffer": "^3.5"
             },
             "bin": [
                 "scripts/dependency-licenses"
@@ -1766,7 +1679,7 @@
             "extra": {
                 "class": "ComposerTestScenarios\\Plugin",
                 "branch-alias": {
-                    "dev-master": "3.x-dev"
+                    "dev-main": "3.x-dev"
                 }
             },
             "autoload": {
@@ -1785,121 +1698,7 @@
                 }
             ],
             "description": "Useful scripts for testing multiple sets of Composer dependencies.",
-            "time": "2019-02-11T20:22:44+00:00"
-        },
-        {
-            "name": "goaop/framework",
-            "version": "2.1.2",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/goaop/framework.git",
-                "reference": "6e2a0fe13c1943db02a67588cfd27692bddaffa5"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/goaop/framework/zipball/6e2a0fe13c1943db02a67588cfd27692bddaffa5",
-                "reference": "6e2a0fe13c1943db02a67588cfd27692bddaffa5",
-                "shasum": ""
-            },
-            "require": {
-                "doctrine/annotations": "~1.0",
-                "goaop/parser-reflection": "~1.2",
-                "jakubledl/dissect": "~1.0",
-                "php": ">=5.6.0"
-            },
-            "require-dev": {
-                "adlawson/vfs": "^0.12",
-                "doctrine/orm": "^2.5",
-                "phpunit/phpunit": "^4.8",
-                "symfony/console": "^2.7|^3.0"
-            },
-            "suggest": {
-                "symfony/console": "Enables the usage of the command-line tool."
-            },
-            "bin": [
-                "bin/aspect"
-            ],
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.0-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Go\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Lisachenko Alexander",
-                    "homepage": "https://github.com/lisachenko"
-                }
-            ],
-            "description": "Framework for aspect-oriented programming in PHP.",
-            "homepage": "http://go.aopphp.com/",
-            "keywords": [
-                "aop",
-                "aspect",
-                "library",
-                "php"
-            ],
-            "time": "2017-07-12T11:46:25+00:00"
-        },
-        {
-            "name": "goaop/parser-reflection",
-            "version": "1.4.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/goaop/parser-reflection.git",
-                "reference": "d9c1dcc7ce4a5284fe3530e011faf9c9c10e1166"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/goaop/parser-reflection/zipball/d9c1dcc7ce4a5284fe3530e011faf9c9c10e1166",
-                "reference": "d9c1dcc7ce4a5284fe3530e011faf9c9c10e1166",
-                "shasum": ""
-            },
-            "require": {
-                "nikic/php-parser": "^1.2|^2.0|^3.0",
-                "php": ">=5.6.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "~4.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Go\\ParserReflection\\": "src"
-                },
-                "files": [
-                    "src/bootstrap.php"
-                ],
-                "exclude-from-classmap": [
-                    "/tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Alexander Lisachenko",
-                    "email": "lisachenko.it@gmail.com"
-                }
-            ],
-            "description": "Provides reflection information, based on raw source",
-            "time": "2018-03-19T15:57:41+00:00"
+            "time": "2020-09-28T20:54:35+00:00"
         },
         {
             "name": "guzzle/guzzle",
@@ -1994,144 +1793,22 @@
             "abandoned": "guzzlehttp/guzzle",
             "time": "2014-01-28T22:29:15+00:00"
         },
-        {
-            "name": "guzzlehttp/psr7",
-            "version": "1.5.2",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/guzzle/psr7.git",
-                "reference": "9f83dded91781a01c63574e387eaa769be769115"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/guzzle/psr7/zipball/9f83dded91781a01c63574e387eaa769be769115",
-                "reference": "9f83dded91781a01c63574e387eaa769be769115",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.4.0",
-                "psr/http-message": "~1.0",
-                "ralouphie/getallheaders": "^2.0.5"
-            },
-            "provide": {
-                "psr/http-message-implementation": "1.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.5-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "GuzzleHttp\\Psr7\\": "src/"
-                },
-                "files": [
-                    "src/functions_include.php"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Michael Dowling",
-                    "email": "mtdowling@gmail.com",
-                    "homepage": "https://github.com/mtdowling"
-                },
-                {
-                    "name": "Tobias Schultze",
-                    "homepage": "https://github.com/Tobion"
-                }
-            ],
-            "description": "PSR-7 message implementation that also provides common utility methods",
-            "keywords": [
-                "http",
-                "message",
-                "psr-7",
-                "request",
-                "response",
-                "stream",
-                "uri",
-                "url"
-            ],
-            "time": "2018-12-04T20:46:45+00:00"
-        },
-        {
-            "name": "jakubledl/dissect",
-            "version": "v1.0.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/jakubledl/dissect.git",
-                "reference": "d3a391de31e45a247e95cef6cf58a91c05af67c4"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/jakubledl/dissect/zipball/d3a391de31e45a247e95cef6cf58a91c05af67c4",
-                "reference": "d3a391de31e45a247e95cef6cf58a91c05af67c4",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.3"
-            },
-            "require-dev": {
-                "symfony/console": "~2.1"
-            },
-            "suggest": {
-                "symfony/console": "for the command-line tool"
-            },
-            "bin": [
-                "bin/dissect.php",
-                "bin/dissect"
-            ],
-            "type": "library",
-            "autoload": {
-                "psr-0": {
-                    "Dissect": [
-                        "src/"
-                    ]
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "unlicense"
-            ],
-            "authors": [
-                {
-                    "name": "Jakub Lédl",
-                    "email": "jakubledl@gmail.com"
-                }
-            ],
-            "description": "Lexing and parsing in pure PHP",
-            "homepage": "https://github.com/jakubledl/dissect",
-            "keywords": [
-                "ast",
-                "lexing",
-                "parser",
-                "parsing"
-            ],
-            "time": "2013-01-29T21:29:14+00:00"
-        },
         {
             "name": "myclabs/deep-copy",
-            "version": "1.8.1",
+            "version": "1.10.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/myclabs/DeepCopy.git",
-                "reference": "3e01bdad3e18354c3dce54466b7fbe33a9f9f7f8"
+                "reference": "969b211f9a51aa1f6c01d1d2aef56d3bd91598e5"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3e01bdad3e18354c3dce54466b7fbe33a9f9f7f8",
-                "reference": "3e01bdad3e18354c3dce54466b7fbe33a9f9f7f8",
+                "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/969b211f9a51aa1f6c01d1d2aef56d3bd91598e5",
+                "reference": "969b211f9a51aa1f6c01d1d2aef56d3bd91598e5",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.1"
+                "php": "^7.1 || ^8.0"
             },
             "replace": {
                 "myclabs/deep-copy": "self.version"
@@ -2162,79 +1839,31 @@
                 "object",
                 "object graph"
             ],
-            "time": "2018-06-11T23:09:50+00:00"
-        },
-        {
-            "name": "natxet/CssMin",
-            "version": "v3.0.4",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/natxet/CssMin.git",
-                "reference": "92de3fe3ccb4f8298d31952490ef7d5395855c39"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/natxet/CssMin/zipball/92de3fe3ccb4f8298d31952490ef7d5395855c39",
-                "reference": "92de3fe3ccb4f8298d31952490ef7d5395855c39",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.0-dev"
-                }
-            },
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
+            "funding": [
                 {
-                    "name": "Joe Scylla",
-                    "email": "joe.scylla@gmail.com",
-                    "homepage": "https://profiles.google.com/joe.scylla"
+                    "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy",
+                    "type": "tidelift"
                 }
             ],
-            "description": "Minifying CSS",
-            "homepage": "http://code.google.com/p/cssmin/",
-            "keywords": [
-                "css",
-                "minify"
-            ],
-            "time": "2015-09-25T11:13:11+00:00"
+            "time": "2020-06-29T13:22:24+00:00"
         },
         {
-            "name": "nikic/php-parser",
-            "version": "v3.1.5",
+            "name": "natxet/cssmin",
+            "version": "v3.0.4",
             "source": {
                 "type": "git",
-                "url": "https://github.com/nikic/PHP-Parser.git",
-                "reference": "bb87e28e7d7b8d9a7fda231d37457c9210faf6ce"
+                "url": "https://github.com/natxet/CssMin.git",
+                "reference": "92de3fe3ccb4f8298d31952490ef7d5395855c39"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/bb87e28e7d7b8d9a7fda231d37457c9210faf6ce",
-                "reference": "bb87e28e7d7b8d9a7fda231d37457c9210faf6ce",
+                "url": "https://api.github.com/repos/natxet/CssMin/zipball/92de3fe3ccb4f8298d31952490ef7d5395855c39",
+                "reference": "92de3fe3ccb4f8298d31952490ef7d5395855c39",
                 "shasum": ""
             },
             "require": {
-                "ext-tokenizer": "*",
-                "php": ">=5.5"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "~4.0|~5.0"
+                "php": ">=5.0"
             },
-            "bin": [
-                "bin/php-parse"
-            ],
             "type": "library",
             "extra": {
                 "branch-alias": {
@@ -2242,25 +1871,28 @@
                 }
             },
             "autoload": {
-                "psr-4": {
-                    "PhpParser\\": "lib/PhpParser"
-                }
+                "classmap": [
+                    "src/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "BSD-3-Clause"
+                "MIT"
             ],
             "authors": [
                 {
-                    "name": "Nikita Popov"
+                    "name": "Joe Scylla",
+                    "email": "joe.scylla@gmail.com",
+                    "homepage": "https://profiles.google.com/joe.scylla"
                 }
             ],
-            "description": "A PHP parser written in PHP",
+            "description": "Minifying CSS",
+            "homepage": "http://code.google.com/p/cssmin/",
             "keywords": [
-                "parser",
-                "php"
+                "css",
+                "minify"
             ],
-            "time": "2018-02-28T20:30:58+00:00"
+            "time": "2015-09-25T11:13:11+00:00"
         },
         {
             "name": "patchwork/jsqueeze",
@@ -2307,20 +1939,21 @@
                 "javascript",
                 "minification"
             ],
+            "abandoned": true,
             "time": "2016-04-19T09:28:22+00:00"
         },
         {
             "name": "pear/archive_tar",
-            "version": "1.4.6",
+            "version": "1.4.10",
             "source": {
                 "type": "git",
                 "url": "https://github.com/pear/Archive_Tar.git",
-                "reference": "b8e33f9063a7cd1d20f079014f8382b3a7aee47e"
+                "reference": "bbb4f10f71a1da2715ec6d9a683f4f23c507a49b"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/pear/Archive_Tar/zipball/b8e33f9063a7cd1d20f079014f8382b3a7aee47e",
-                "reference": "b8e33f9063a7cd1d20f079014f8382b3a7aee47e",
+                "url": "https://api.github.com/repos/pear/Archive_Tar/zipball/bbb4f10f71a1da2715ec6d9a683f4f23c507a49b",
+                "reference": "bbb4f10f71a1da2715ec6d9a683f4f23c507a49b",
                 "shasum": ""
             },
             "require": {
@@ -2373,20 +2006,20 @@
                 "archive",
                 "tar"
             ],
-            "time": "2019-02-01T11:10:38+00:00"
+            "time": "2020-09-15T14:13:23+00:00"
         },
         {
             "name": "pear/console_getopt",
-            "version": "v1.4.2",
+            "version": "v1.4.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/pear/Console_Getopt.git",
-                "reference": "6c77aeb625b32bd752e89ee17972d103588b90c0"
+                "reference": "a41f8d3e668987609178c7c4a9fe48fecac53fa0"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/pear/Console_Getopt/zipball/6c77aeb625b32bd752e89ee17972d103588b90c0",
-                "reference": "6c77aeb625b32bd752e89ee17972d103588b90c0",
+                "url": "https://api.github.com/repos/pear/Console_Getopt/zipball/a41f8d3e668987609178c7c4a9fe48fecac53fa0",
+                "reference": "a41f8d3e668987609178c7c4a9fe48fecac53fa0",
                 "shasum": ""
             },
             "type": "library",
@@ -2403,11 +2036,6 @@
                 "BSD-2-Clause"
             ],
             "authors": [
-                {
-                    "name": "Greg Beaver",
-                    "email": "cellog@php.net",
-                    "role": "Helper"
-                },
                 {
                     "name": "Andrei Zmievski",
                     "email": "andrei@php.net",
@@ -2417,23 +2045,28 @@
                     "name": "Stig Bakken",
                     "email": "stig@php.net",
                     "role": "Developer"
+                },
+                {
+                    "name": "Greg Beaver",
+                    "email": "cellog@php.net",
+                    "role": "Helper"
                 }
             ],
             "description": "More info available on: http://pear.php.net/package/Console_Getopt",
-            "time": "2019-02-06T16:52:33+00:00"
+            "time": "2019-11-20T18:27:48+00:00"
         },
         {
             "name": "pear/pear-core-minimal",
-            "version": "v1.10.7",
+            "version": "v1.10.10",
             "source": {
                 "type": "git",
                 "url": "https://github.com/pear/pear-core-minimal.git",
-                "reference": "19a3e0fcd50492c4357372f623f55f1b144346da"
+                "reference": "625a3c429d9b2c1546438679074cac1b089116a7"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/pear/pear-core-minimal/zipball/19a3e0fcd50492c4357372f623f55f1b144346da",
-                "reference": "19a3e0fcd50492c4357372f623f55f1b144346da",
+                "url": "https://api.github.com/repos/pear/pear-core-minimal/zipball/625a3c429d9b2c1546438679074cac1b089116a7",
+                "reference": "625a3c429d9b2c1546438679074cac1b089116a7",
                 "shasum": ""
             },
             "require": {
@@ -2464,20 +2097,20 @@
                 }
             ],
             "description": "Minimal set of PEAR core files to be used as composer dependency",
-            "time": "2018-12-05T20:03:52+00:00"
+            "time": "2019-11-19T19:00:24+00:00"
         },
         {
             "name": "pear/pear_exception",
-            "version": "v1.0.0",
+            "version": "v1.0.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/pear/PEAR_Exception.git",
-                "reference": "8c18719fdae000b690e3912be401c76e406dd13b"
+                "reference": "dbb42a5a0e45f3adcf99babfb2a1ba77b8ac36a7"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/pear/PEAR_Exception/zipball/8c18719fdae000b690e3912be401c76e406dd13b",
-                "reference": "8c18719fdae000b690e3912be401c76e406dd13b",
+                "url": "https://api.github.com/repos/pear/PEAR_Exception/zipball/dbb42a5a0e45f3adcf99babfb2a1ba77b8ac36a7",
+                "reference": "dbb42a5a0e45f3adcf99babfb2a1ba77b8ac36a7",
                 "shasum": ""
             },
             "require": {
@@ -2493,9 +2126,9 @@
                 }
             },
             "autoload": {
-                "psr-0": {
-                    "PEAR": ""
-                }
+                "classmap": [
+                    "PEAR/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "include-path": [
@@ -2519,7 +2152,7 @@
             "keywords": [
                 "exception"
             ],
-            "time": "2015-02-10T20:07:52+00:00"
+            "time": "2019-12-10T10:24:42+00:00"
         },
         {
             "name": "php-coveralls/php-coveralls",
@@ -2584,35 +2217,30 @@
         },
         {
             "name": "phpdocumentor/reflection-common",
-            "version": "1.0.1",
+            "version": "2.1.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpDocumentor/ReflectionCommon.git",
-                "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6"
+                "reference": "6568f4687e5b41b054365f9ae03fcb1ed5f2069b"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6",
-                "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6",
+                "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/6568f4687e5b41b054365f9ae03fcb1ed5f2069b",
+                "reference": "6568f4687e5b41b054365f9ae03fcb1ed5f2069b",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.5"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^4.6"
+                "php": ">=7.1"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.0.x-dev"
+                    "dev-master": "2.x-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "phpDocumentor\\Reflection\\": [
-                        "src"
-                    ]
+                    "phpDocumentor\\Reflection\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -2634,31 +2262,32 @@
                 "reflection",
                 "static analysis"
             ],
-            "time": "2017-09-11T18:02:19+00:00"
+            "time": "2020-04-27T09:25:28+00:00"
         },
         {
             "name": "phpdocumentor/reflection-docblock",
-            "version": "4.3.0",
+            "version": "4.3.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
-                "reference": "94fd0001232e47129dd3504189fa1c7225010d08"
+                "reference": "da3fd972d6bafd628114f7e7e036f45944b62e9c"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/94fd0001232e47129dd3504189fa1c7225010d08",
-                "reference": "94fd0001232e47129dd3504189fa1c7225010d08",
+                "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/da3fd972d6bafd628114f7e7e036f45944b62e9c",
+                "reference": "da3fd972d6bafd628114f7e7e036f45944b62e9c",
                 "shasum": ""
             },
             "require": {
                 "php": "^7.0",
-                "phpdocumentor/reflection-common": "^1.0.0",
-                "phpdocumentor/type-resolver": "^0.4.0",
+                "phpdocumentor/reflection-common": "^1.0.0 || ^2.0.0",
+                "phpdocumentor/type-resolver": "~0.4 || ^1.0.0",
                 "webmozart/assert": "^1.0"
             },
             "require-dev": {
-                "doctrine/instantiator": "~1.0.5",
+                "doctrine/instantiator": "^1.0.5",
                 "mockery/mockery": "^1.0",
+                "phpdocumentor/type-resolver": "0.4.*",
                 "phpunit/phpunit": "^6.4"
             },
             "type": "library",
@@ -2685,41 +2314,40 @@
                 }
             ],
             "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
-            "time": "2017-11-30T07:14:17+00:00"
+            "time": "2019-12-28T18:55:12+00:00"
         },
         {
             "name": "phpdocumentor/type-resolver",
-            "version": "0.4.0",
+            "version": "1.0.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpDocumentor/TypeResolver.git",
-                "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7"
+                "reference": "2e32a6d48972b2c1976ed5d8967145b6cec4a4a9"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7",
-                "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7",
+                "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/2e32a6d48972b2c1976ed5d8967145b6cec4a4a9",
+                "reference": "2e32a6d48972b2c1976ed5d8967145b6cec4a4a9",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.5 || ^7.0",
-                "phpdocumentor/reflection-common": "^1.0"
+                "php": "^7.1",
+                "phpdocumentor/reflection-common": "^2.0"
             },
             "require-dev": {
-                "mockery/mockery": "^0.9.4",
-                "phpunit/phpunit": "^5.2||^4.8.24"
+                "ext-tokenizer": "^7.1",
+                "mockery/mockery": "~1",
+                "phpunit/phpunit": "^7.0"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.0.x-dev"
+                    "dev-master": "1.x-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "phpDocumentor\\Reflection\\": [
-                        "src/"
-                    ]
+                    "phpDocumentor\\Reflection\\": "src"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -2732,42 +2360,43 @@
                     "email": "me@mikevanriel.com"
                 }
             ],
-            "time": "2017-07-14T14:27:02+00:00"
+            "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
+            "time": "2019-08-22T18:11:29+00:00"
         },
         {
             "name": "phpspec/prophecy",
-            "version": "1.8.0",
+            "version": "v1.10.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpspec/prophecy.git",
-                "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06"
+                "reference": "451c3cd1418cf640de218914901e51b064abb093"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpspec/prophecy/zipball/4ba436b55987b4bf311cb7c6ba82aa528aac0a06",
-                "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06",
+                "url": "https://api.github.com/repos/phpspec/prophecy/zipball/451c3cd1418cf640de218914901e51b064abb093",
+                "reference": "451c3cd1418cf640de218914901e51b064abb093",
                 "shasum": ""
             },
             "require": {
                 "doctrine/instantiator": "^1.0.2",
                 "php": "^5.3|^7.0",
-                "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0",
-                "sebastian/comparator": "^1.1|^2.0|^3.0",
-                "sebastian/recursion-context": "^1.0|^2.0|^3.0"
+                "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0",
+                "sebastian/comparator": "^1.2.3|^2.0|^3.0|^4.0",
+                "sebastian/recursion-context": "^1.0|^2.0|^3.0|^4.0"
             },
             "require-dev": {
-                "phpspec/phpspec": "^2.5|^3.2",
+                "phpspec/phpspec": "^2.5 || ^3.2",
                 "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.8.x-dev"
+                    "dev-master": "1.10.x-dev"
                 }
             },
             "autoload": {
-                "psr-0": {
-                    "Prophecy\\": "src/"
+                "psr-4": {
+                    "Prophecy\\": "src/Prophecy"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -2795,7 +2424,7 @@
                 "spy",
                 "stub"
             ],
-            "time": "2018-08-05T17:53:17+00:00"
+            "time": "2020-03-05T15:02:03+00:00"
         },
         {
             "name": "phpunit/php-code-coverage",
@@ -3044,6 +2673,7 @@
             "keywords": [
                 "tokenizer"
             ],
+            "abandoned": true,
             "time": "2017-11-27T05:48:46+00:00"
         },
         {
@@ -3185,98 +2815,9 @@
                 "mock",
                 "xunit"
             ],
+            "abandoned": true,
             "time": "2017-06-30T09:13:00+00:00"
         },
-        {
-            "name": "psr/http-message",
-            "version": "1.0.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/php-fig/http-message.git",
-                "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363",
-                "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.0.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Psr\\Http\\Message\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "PHP-FIG",
-                    "homepage": "http://www.php-fig.org/"
-                }
-            ],
-            "description": "Common interface for HTTP messages",
-            "homepage": "https://github.com/php-fig/http-message",
-            "keywords": [
-                "http",
-                "http-message",
-                "psr",
-                "psr-7",
-                "request",
-                "response"
-            ],
-            "time": "2016-08-06T14:39:51+00:00"
-        },
-        {
-            "name": "ralouphie/getallheaders",
-            "version": "2.0.5",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/ralouphie/getallheaders.git",
-                "reference": "5601c8a83fbba7ef674a7369456d12f1e0d0eafa"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/5601c8a83fbba7ef674a7369456d12f1e0d0eafa",
-                "reference": "5601c8a83fbba7ef674a7369456d12f1e0d0eafa",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "~3.7.0",
-                "satooshi/php-coveralls": ">=1.0"
-            },
-            "type": "library",
-            "autoload": {
-                "files": [
-                    "src/getallheaders.php"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Ralph Khattar",
-                    "email": "ralph.khattar@gmail.com"
-                }
-            ],
-            "description": "A polyfill for getallheaders.",
-            "time": "2016-02-11T07:05:27+00:00"
-        },
         {
             "name": "sebastian/code-unit-reverse-lookup",
             "version": "1.0.1",
@@ -3792,64 +3333,37 @@
         },
         {
             "name": "squizlabs/php_codesniffer",
-            "version": "2.9.2",
+            "version": "3.5.6",
             "source": {
                 "type": "git",
                 "url": "https://github.com/squizlabs/PHP_CodeSniffer.git",
-                "reference": "2acf168de78487db620ab4bc524135a13cfe6745"
+                "reference": "e97627871a7eab2f70e59166072a6b767d5834e0"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/2acf168de78487db620ab4bc524135a13cfe6745",
-                "reference": "2acf168de78487db620ab4bc524135a13cfe6745",
+                "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/e97627871a7eab2f70e59166072a6b767d5834e0",
+                "reference": "e97627871a7eab2f70e59166072a6b767d5834e0",
                 "shasum": ""
             },
             "require": {
                 "ext-simplexml": "*",
                 "ext-tokenizer": "*",
                 "ext-xmlwriter": "*",
-                "php": ">=5.1.2"
+                "php": ">=5.4.0"
             },
             "require-dev": {
-                "phpunit/phpunit": "~4.0"
+                "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0"
             },
             "bin": [
-                "scripts/phpcs",
-                "scripts/phpcbf"
+                "bin/phpcs",
+                "bin/phpcbf"
             ],
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.x-dev"
+                    "dev-master": "3.x-dev"
                 }
             },
-            "autoload": {
-                "classmap": [
-                    "CodeSniffer.php",
-                    "CodeSniffer/CLI.php",
-                    "CodeSniffer/Exception.php",
-                    "CodeSniffer/File.php",
-                    "CodeSniffer/Fixer.php",
-                    "CodeSniffer/Report.php",
-                    "CodeSniffer/Reporting.php",
-                    "CodeSniffer/Sniff.php",
-                    "CodeSniffer/Tokens.php",
-                    "CodeSniffer/Reports/",
-                    "CodeSniffer/Tokenizers/",
-                    "CodeSniffer/DocGenerators/",
-                    "CodeSniffer/Standards/AbstractPatternSniff.php",
-                    "CodeSniffer/Standards/AbstractScopeSniff.php",
-                    "CodeSniffer/Standards/AbstractVariableSniff.php",
-                    "CodeSniffer/Standards/IncorrectPatternException.php",
-                    "CodeSniffer/Standards/Generic/Sniffs/",
-                    "CodeSniffer/Standards/MySource/Sniffs/",
-                    "CodeSniffer/Standards/PEAR/Sniffs/",
-                    "CodeSniffer/Standards/PSR1/Sniffs/",
-                    "CodeSniffer/Standards/PSR2/Sniffs/",
-                    "CodeSniffer/Standards/Squiz/Sniffs/",
-                    "CodeSniffer/Standards/Zend/Sniffs/"
-                ]
-            },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
                 "BSD-3-Clause"
@@ -3861,97 +3375,41 @@
                 }
             ],
             "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.",
-            "homepage": "http://www.squizlabs.com/php-codesniffer",
+            "homepage": "https://github.com/squizlabs/PHP_CodeSniffer",
             "keywords": [
                 "phpcs",
                 "standards"
             ],
-            "time": "2018-11-07T22:31:41+00:00"
-        },
-        {
-            "name": "symfony/browser-kit",
-            "version": "v4.2.3",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/browser-kit.git",
-                "reference": "ee4462581eb54bf34b746e4a5d522a4f21620160"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/browser-kit/zipball/ee4462581eb54bf34b746e4a5d522a4f21620160",
-                "reference": "ee4462581eb54bf34b746e4a5d522a4f21620160",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^7.1.3",
-                "symfony/dom-crawler": "~3.4|~4.0"
-            },
-            "require-dev": {
-                "symfony/css-selector": "~3.4|~4.0",
-                "symfony/process": "~3.4|~4.0"
-            },
-            "suggest": {
-                "symfony/process": ""
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "4.2-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\BrowserKit\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony BrowserKit Component",
-            "homepage": "https://symfony.com",
-            "time": "2019-01-16T21:31:25+00:00"
+            "time": "2020-08-10T04:50:15+00:00"
         },
         {
             "name": "symfony/config",
-            "version": "v4.2.3",
+            "version": "v4.4.15",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/config.git",
-                "reference": "25a2e7abe0d97e70282537292e3df45cf6da7b98"
+                "reference": "7c5a1002178a612787c291a4f515f87b19176b61"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/config/zipball/25a2e7abe0d97e70282537292e3df45cf6da7b98",
-                "reference": "25a2e7abe0d97e70282537292e3df45cf6da7b98",
+                "url": "https://api.github.com/repos/symfony/config/zipball/7c5a1002178a612787c291a4f515f87b19176b61",
+                "reference": "7c5a1002178a612787c291a4f515f87b19176b61",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.1.3",
-                "symfony/filesystem": "~3.4|~4.0",
+                "php": ">=7.1.3",
+                "symfony/filesystem": "^3.4|^4.0|^5.0",
                 "symfony/polyfill-ctype": "~1.8"
             },
             "conflict": {
                 "symfony/finder": "<3.4"
             },
             "require-dev": {
-                "symfony/dependency-injection": "~3.4|~4.0",
-                "symfony/event-dispatcher": "~3.4|~4.0",
-                "symfony/finder": "~3.4|~4.0",
-                "symfony/yaml": "~3.4|~4.0"
+                "symfony/event-dispatcher": "^3.4|^4.0|^5.0",
+                "symfony/finder": "^3.4|^4.0|^5.0",
+                "symfony/messenger": "^4.1|^5.0",
+                "symfony/service-contracts": "^1.1|^2",
+                "symfony/yaml": "^3.4|^4.0|^5.0"
             },
             "suggest": {
                 "symfony/yaml": "To use the yaml reference dumper"
@@ -3959,7 +3417,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "4.2-dev"
+                    "dev-master": "4.4-dev"
                 }
             },
             "autoload": {
@@ -3986,95 +3444,49 @@
             ],
             "description": "Symfony Config Component",
             "homepage": "https://symfony.com",
-            "time": "2019-01-30T11:44:30+00:00"
-        },
-        {
-            "name": "symfony/css-selector",
-            "version": "v4.2.3",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/css-selector.git",
-                "reference": "48eddf66950fa57996e1be4a55916d65c10c604a"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/css-selector/zipball/48eddf66950fa57996e1be4a55916d65c10c604a",
-                "reference": "48eddf66950fa57996e1be4a55916d65c10c604a",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^7.1.3"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "4.2-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\CssSelector\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
+            "funding": [
                 {
-                    "name": "Jean-François Simon",
-                    "email": "jeanfrancois.simon@sensiolabs.com"
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
                 },
                 {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
                 },
                 {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
                 }
             ],
-            "description": "Symfony CssSelector Component",
-            "homepage": "https://symfony.com",
-            "time": "2019-01-16T20:31:39+00:00"
+            "time": "2020-10-02T07:34:48+00:00"
         },
         {
-            "name": "symfony/dom-crawler",
-            "version": "v4.2.3",
+            "name": "symfony/stopwatch",
+            "version": "v4.4.15",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/dom-crawler.git",
-                "reference": "d8476760b04cdf7b499c8718aa437c20a9155103"
+                "url": "https://github.com/symfony/stopwatch.git",
+                "reference": "6f89e19772cf61b3c65bab329fe0e318259fbd91"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/d8476760b04cdf7b499c8718aa437c20a9155103",
-                "reference": "d8476760b04cdf7b499c8718aa437c20a9155103",
+                "url": "https://api.github.com/repos/symfony/stopwatch/zipball/6f89e19772cf61b3c65bab329fe0e318259fbd91",
+                "reference": "6f89e19772cf61b3c65bab329fe0e318259fbd91",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.1.3",
-                "symfony/polyfill-ctype": "~1.8",
-                "symfony/polyfill-mbstring": "~1.0"
-            },
-            "require-dev": {
-                "symfony/css-selector": "~3.4|~4.0"
-            },
-            "suggest": {
-                "symfony/css-selector": ""
+                "php": ">=7.1.3",
+                "symfony/service-contracts": "^1.0|^2"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "4.2-dev"
+                    "dev-master": "4.4-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Symfony\\Component\\DomCrawler\\": ""
+                    "Symfony\\Component\\Stopwatch\\": ""
                 },
                 "exclude-from-classmap": [
                     "/Tests/"
@@ -4094,88 +3506,50 @@
                     "homepage": "https://symfony.com/contributors"
                 }
             ],
-            "description": "Symfony DomCrawler Component",
+            "description": "Symfony Stopwatch Component",
             "homepage": "https://symfony.com",
-            "time": "2019-01-16T20:35:37+00:00"
-        },
-        {
-            "name": "symfony/stopwatch",
-            "version": "v4.2.3",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/stopwatch.git",
-                "reference": "b1a5f646d56a3290230dbc8edf2a0d62cda23f67"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/stopwatch/zipball/b1a5f646d56a3290230dbc8edf2a0d62cda23f67",
-                "reference": "b1a5f646d56a3290230dbc8edf2a0d62cda23f67",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^7.1.3",
-                "symfony/contracts": "^1.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "4.2-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\Stopwatch\\": ""
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
                 },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
                 {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
                 },
                 {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
                 }
             ],
-            "description": "Symfony Stopwatch Component",
-            "homepage": "https://symfony.com",
-            "time": "2019-01-16T20:31:39+00:00"
+            "time": "2020-09-02T16:08:58+00:00"
         },
         {
             "name": "webmozart/assert",
-            "version": "1.4.0",
+            "version": "1.9.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/webmozart/assert.git",
-                "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9"
+                "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/webmozart/assert/zipball/83e253c8e0be5b0257b881e1827274667c5c17a9",
-                "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9",
+                "url": "https://api.github.com/repos/webmozart/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389",
+                "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.3.3 || ^7.0",
+                "php": "^5.3.3 || ^7.0 || ^8.0",
                 "symfony/polyfill-ctype": "^1.8"
             },
+            "conflict": {
+                "phpstan/phpstan": "<0.12.20",
+                "vimeo/psalm": "<3.9.1"
+            },
             "require-dev": {
-                "phpunit/phpunit": "^4.6",
-                "sebastian/version": "^1.0.1"
+                "phpunit/phpunit": "^4.8.36 || ^7.5.13"
             },
             "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.3-dev"
-                }
-            },
             "autoload": {
                 "psr-4": {
                     "Webmozart\\Assert\\": "src/"
@@ -4197,7 +3571,7 @@
                 "check",
                 "validate"
             ],
-            "time": "2018-12-25T11:19:39+00:00"
+            "time": "2020-07-08T17:02:28+00:00"
         }
     ],
     "aliases": [],
@@ -4211,5 +3585,6 @@
     "platform-dev": [],
     "platform-overrides": {
         "php": "7.1.3"
-    }
+    },
+    "plugin-api-version": "1.1.0"
 }
diff --git a/vendor/consolidation/robo/CHANGELOG.md b/vendor/consolidation/robo/CHANGELOG.md
index 9352dddef498e3826bedd107ff289aa3fc2c73cf..283520e34f8083a9714a82bcbf1138f1f9ef4415 100644
--- a/vendor/consolidation/robo/CHANGELOG.md
+++ b/vendor/consolidation/robo/CHANGELOG.md
@@ -1,6 +1,40 @@
 # Changelog
 
-### 1.4.7 - 1.4.8 2/19/2019
+### 1.4.13 - 10/10/2020
+
+- Allow symfony/finder ^5 (#992)
+- Fix #981: PHP 7.3 compatibility fixes (#982)
+
+### 1.4.12 2/18/2020
+
+- Fixed #922: PHP 7.4 compatibility. (#923) (#928)
+- Test on PHP 7.4. Backport removal of Codeception to 1.x branch. (#925)
+- Copy branches documentation to the 1.x branch.
+- Fix incosistent white space formatting in code example. (#916)
+- Viktor Szépe extract() is not our friend (#903)
+- Viktor Szépe Old variables in ImageMinify (#904)
+- Viktor Szépe RuntimeException used realtively (#905)
+
+### 1.4.11 10/29/2019
+
+- Deprecate $this->io() and provide style injector instead. (#910)
+- Jordon Replogle Changed leafo to scssphp as leafo is archived (#900)
+- Patrick Kollitsch Add missing code formatting to sample code (#861)
+- Patrick Kollitsch Adding documentation as option to pull_request_template.md (#862)
+- RTLcoil Tiny formatting fix in README (#874)
+- Tal Ater Updated README with command for initiating a RoboFile (#875)
+
+### 1.4.10 7/29/2019
+
+* Allow default argument for confirm() questions by Dane Powell (#850)
+* Allow command classes to end in Commands or Command by Jelle Sebreghts (#878)
+* ImageMinify: Prevent undefined variable error by Dan (#852) (#854)
+* Add sample with changed file handling to Base/Watch documentation by Patrick Kollitsch (#847)
+* Clearer explanation of --load-from option by Jordan Koplowicz (#872)
+* Fix PHPDoc @param and @return type hints by Andor (#886)
+* Update PHPDoc mismatch by Filippo Tessarotto (#883)
+
+### 1.4.7 - 1.4.9 2/19/2019
 
 * Re-release 1.4.6 to remove artifacts inadvertantly added to tagged release.
 
diff --git a/vendor/consolidation/robo/CONTRIBUTING.md b/vendor/consolidation/robo/CONTRIBUTING.md
index 438681469fd2929757732912e54032dc5b06e6d5..189f18987aeaec9244d23fffd11d4cf3d35575b7 100644
--- a/vendor/consolidation/robo/CONTRIBUTING.md
+++ b/vendor/consolidation/robo/CONTRIBUTING.md
@@ -12,4 +12,8 @@ robo sniff src/Foo.php --autofix
 ```
 The above will run the PHP Codesniffer on the `src/Foo.php` file and automatically correct variances from the PSR-2 standard. Please ensure all contributions are compliant _before_ submitting a pull request.
 
+## Tests
 
+Note that in the past, Robo used Codeception / Aspect Mock etc. in its unit tests. These components proved to be difficult to maintain when testing on mutiple PHP versions, so they were removed. The tests formerly in tests/cli were all ported to straight phpunit tests in the tests/integration directory. Some of the unit tests from tests/unit were ported to tests/phpunit; however, a number of tests that still use AspectMock still exist in tests/unit, although these are not currently being used.
+
+Pull requests that touch parts of the code formerly tested by these disabled tests must also convert the AspectMock test to Prophecy or some other mocking system. Alternately, getting AspectMock working again on the master and 1.x branches is another option, if someone wants to stand up to do that work.
diff --git a/vendor/consolidation/robo/LICENSE b/vendor/consolidation/robo/LICENSE
index d1fc34655aaf78ab3e51ef5f35bad0613c730614..738df1d9fe2ea9f9d0945f9a1b126ae4af5f0ee1 100644
--- a/vendor/consolidation/robo/LICENSE
+++ b/vendor/consolidation/robo/LICENSE
@@ -1,6 +1,6 @@
 The MIT License (MIT)
 
-Copyright (c) 2014-2019 Codegyre Developers Team, Consolidation Team
+Copyright (c) 2014-2020 Codegyre Developers Team, Consolidation Team
 
 Permission is hereby granted, free of charge, to any person obtaining a copy of
 this software and associated documentation files (the "Software"), to deal in
@@ -22,23 +22,23 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 DEPENDENCY LICENSES:
 
 Name                                 Version  License
-consolidation/annotated-command      2.11.2   MIT
-consolidation/config                 1.2.0    MIT
-consolidation/log                    1.1.1    MIT
-consolidation/output-formatters      3.4.0    MIT
-consolidation/self-update            1.1.5    MIT
+consolidation/annotated-command      4.2.3    MIT
+consolidation/config                 1.2.1    MIT
+consolidation/log                    2.0.1    MIT
+consolidation/output-formatters      4.1.1    MIT
+consolidation/self-update            1.2.0    MIT
 container-interop/container-interop  1.2.0    MIT
 dflydev/dot-access-data              v1.1.0   MIT
 grasmash/expander                    1.0.0    MIT
 grasmash/yaml-expander               1.4.0    MIT
 league/container                     2.4.1    MIT
 psr/container                        1.0.0    MIT
-psr/log                              1.1.0    MIT
-symfony/console                      v4.2.3   MIT
-symfony/event-dispatcher             v4.2.3   MIT
-symfony/filesystem                   v4.2.3   MIT
-symfony/finder                       v3.4.22  MIT
-symfony/polyfill-ctype               v1.10.0  MIT
-symfony/polyfill-mbstring            v1.10.0  MIT
-symfony/process                      v4.2.3   MIT
-symfony/yaml                         v4.2.3   MIT
\ No newline at end of file
+psr/log                              1.1.3    MIT
+symfony/console                      v4.4.15  MIT
+symfony/event-dispatcher             v4.4.15  MIT
+symfony/filesystem                   v4.4.15  MIT
+symfony/finder                       v4.4.15  MIT
+symfony/polyfill-ctype               v1.18.1  MIT
+symfony/polyfill-mbstring            v1.18.1  MIT
+symfony/process                      v4.4.15  MIT
+symfony/yaml                         v4.4.15  MIT
\ No newline at end of file
diff --git a/vendor/consolidation/robo/README.md b/vendor/consolidation/robo/README.md
index 73a8feb22bff49c9e173b5b8bcb5e2398f069245..5a77b7a17bcb55bcd88156c55cacb9b52c00a3e6 100644
--- a/vendor/consolidation/robo/README.md
+++ b/vendor/consolidation/robo/README.md
@@ -1,20 +1,17 @@
 # RoboTask
 
-_This is the 1.x (stable) branch of the Robo task runner. Development for Robo 2.x (future) is happening on the [master](https://github.com/consolidation/Robo/tree/master) branch._
-
 **Modern and simple PHP task runner** inspired by Gulp and Rake aimed to automate common tasks:
 
 [![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/consolidation/Robo?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) 
 [![Latest Stable Version](https://poser.pugx.org/consolidation/robo/v/stable.png)](https://packagist.org/packages/consolidation/robo) 
 [![Latest Unstable Version](https://poser.pugx.org/consolidation/robo/v/unstable.png)](https://packagist.org/packages/consolidation/robo) 
 [![Total Downloads](https://poser.pugx.org/consolidation/robo/downloads.png)](https://packagist.org/packages/consolidation/robo) 
-[![PHP 7 ready](http://php7ready.timesplinter.ch/consolidation/Robo/badge.svg)](https://travis-ci.org/consolidation/Robo)
-[![License](https://poser.pugx.org/consolidation/robo/license.png)](https://www.versioneye.com/user/projects/57c4a6fe968d64004d97620a?child=57c4a6fe968d64004d97620a#tab-licenses)
+[![PHP 5 supported](https://img.shields.io/badge/PHP%205-supported-92a9ed)](https://travis-ci.org/consolidation/Robo)
 
 [![Build Status](https://travis-ci.org/consolidation/Robo.svg?branch=master)](https://travis-ci.org/consolidation/Robo) 
 [![Windows CI](https://ci.appveyor.com/api/projects/status/0823hnh06pw8ir4d?svg=true)](https://ci.appveyor.com/project/greg-1-anderson/robo)
 [![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/consolidation/Robo/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/consolidation/Robo/?branch=master)
-[![Dependency Status](https://www.versioneye.com/user/projects/57c4a6fe968d64004d97620a/badge.svg?style=flat-square)](https://www.versioneye.com/user/projects/57c4a6fe968d64004d97620a)
+[![License](https://img.shields.io/badge/license-MIT-408677.svg)](LICENSE)
 
 * writing cross-platform scripts
 * processing assets (less, sass, minification)
@@ -23,6 +20,15 @@ _This is the 1.x (stable) branch of the Robo task runner. Development for Robo 2
 * watching filesystem changes
 * deployment with sftp/ssh/docker
 
+## Branches
+
+| Branch | Symfony Versions | PHP Versions |
+| ------ | ---------------- | ------------ |
+| [master](https://github.com/consolidation/robo)      | 4 only    | [![PHP 7 only](https://img.shields.io/badge/PHP%207-only-92a9ed)](https://travis-ci.org/consolidation/Robo) |
+| [1.x](https://github.com/consolidation/robotree/1.x) | 2, 3 or 4 | [![PHP 5 supported](https://img.shields.io/badge/PHP%205-supported-408677)](https://travis-ci.org/consolidation/Robo) |
+
+Robo versions 2.x and 1.x are largely compatible; however, Robo 2.x supports fewer versions of PHP and Symfony. This is to make ongoing maintenance easier; Robo 1.x will be supported less and less over time. Projects should update to Robo ^2 if possible.
+
 ## Installing
 
 ### Phar
@@ -53,13 +59,13 @@ Now you can use it just like `robo`.
 
 ## Usage
 
-All tasks are defined as **public methods** in `RoboFile.php`. It can be created by running `robo`.
+All tasks are defined as **public methods** in `RoboFile.php`. It can be created by running `robo init`.
 All protected methods in traits that start with `task` prefix are tasks and can be configured and executed in your tasks.
 
 ## Examples
 
 The best way to learn Robo by example is to take a look into [its own RoboFile](https://github.com/consolidation/Robo/blob/master/RoboFile.php)
- or [RoboFile of Codeception project](https://github.com/Codeception/Codeception/blob/2.4/RoboFile.php). There are also some basic example commands in examples/RoboFile.php.
+ or [RoboFile of Codeception project](https://github.com/Codeception/Codeception/blob/2.4/RoboFile.php). There are also some basic example commands in `examples/RoboFile.php`.
 
 Here are some snippets from them:
 
@@ -83,12 +89,12 @@ class RoboFile extends \Robo\Tasks
             ->run();
 
        // running Selenium server in background
-        $this->taskExec('java -jar ' . $seleniumPath)
+       $this->taskExec('java -jar ' . $seleniumPath)
             ->background()
             ->run();
 
-        // loading Symfony Command and running with passed argument
-        $this->taskSymfonyCommand(new \Codeception\Command\Run('run'))
+       // loading Symfony Command and running with passed argument
+       $this->taskSymfonyCommand(new \Codeception\Command\Run('run'))
             ->arg('suite','acceptance')
             ->run();
     }
diff --git a/vendor/consolidation/robo/RoboFile.php b/vendor/consolidation/robo/RoboFile.php
index 2dcb09cd146b82de685c728c42802ca2e85cf664..a35502a4790d6dc711fec3761663f157b656332d 100644
--- a/vendor/consolidation/robo/RoboFile.php
+++ b/vendor/consolidation/robo/RoboFile.php
@@ -5,6 +5,10 @@ class RoboFile extends \Robo\Tasks
 {
     /**
      * Run the Robo unit tests.
+     *
+     * n.b. The CI jobs use `composer unit` rather than this function
+     * to run the tests. This command also runs the remaining Codeception
+     * tests. You must re-add Codeception to the project to use this.
      */
     public function test(array $args, $options =
         [
@@ -12,7 +16,11 @@ public function test(array $args, $options =
             'coverage' => false
         ])
     {
-        $taskCodecept = $this->taskCodecept()
+        $collection = $this->collectionBuilder();
+
+        $taskPHPUnit = $collection->taskPHPUnit();
+
+        $taskCodecept = $collection->taskCodecept()
             ->args($args);
 
         if ($options['coverage']) {
@@ -22,7 +30,7 @@ public function test(array $args, $options =
             $taskCodecept->coverageHtml('../../build/logs/coverage');
         }
 
-        return $taskCodecept->run();
+        return $collection;
      }
 
     /**
@@ -59,8 +67,9 @@ public function sniff(
     /**
      * Generate a new Robo task that wraps an existing utility class.
      *
-     * @param $className The name of the existing utility class to wrap.
-     * @param $wrapperClassName The name of the wrapper class to create. Optional.
+     * @param string $className The name of the existing utility class to wrap.
+     * @param string $wrapperClassName The name of the wrapper class to create. Optional.
+     *
      * @usage generate:task 'Symfony\Component\Filesystem\Filesystem' FilesystemStack
      */
     public function generateTask($className, $wrapperClassName = "")
diff --git a/vendor/consolidation/robo/codeception.yml b/vendor/consolidation/robo/codeception.yml
index 09763ea714360ce3ea0ab0e6d7b7152498fb1bac..793adae8ea04fdc473048406a4273a2ae3cd513e 100644
--- a/vendor/consolidation/robo/codeception.yml
+++ b/vendor/consolidation/robo/codeception.yml
@@ -4,8 +4,8 @@ paths:
     log: tests/_log
     data: tests/_data
     helpers: tests/_helpers
+bootstrap: _bootstrap.php
 settings:
-    bootstrap: _bootstrap.php
     colors: true
     memory_limit: 1024M
 modules:
diff --git a/vendor/consolidation/robo/composer.json b/vendor/consolidation/robo/composer.json
index 8ff652444574768c02c302cbd8a3848a1ecc1113..75606d437a67e9fc08b7d00a519c6183c5f7be67 100644
--- a/vendor/consolidation/robo/composer.json
+++ b/vendor/consolidation/robo/composer.json
@@ -22,37 +22,31 @@
     "bin":["robo"],
     "require": {
         "php": ">=5.5.0",
-        "league/container": "^2.2",
-        "consolidation/log": "~1",
-        "consolidation/config": "^1.2",
-        "consolidation/annotated-command": "^2.10.2",
-        "consolidation/output-formatters": "^3.1.13",
-        "consolidation/self-update": "^1",
-        "grasmash/yaml-expander": "^1.3",
-        "symfony/finder": "^2.5|^3|^4",
+        "consolidation/annotated-command": "^2.12.1|^4.1",
+        "consolidation/config": "^1.2.1",
+        "consolidation/log": "^1.1.1|^2",
+        "consolidation/output-formatters": "^3.5.1|^4.1",
+        "consolidation/self-update": "^1.1.5",
+        "grasmash/yaml-expander": "^1.4",
+        "league/container": "^2.4.1",
         "symfony/console": "^2.8|^3|^4",
-        "symfony/process": "^2.5|^3|^4",
+        "symfony/event-dispatcher": "^2.5|^3|^4",
         "symfony/filesystem": "^2.5|^3|^4",
-        "symfony/event-dispatcher": "^2.5|^3|^4"
+        "symfony/finder": "^2.5|^3|^4|^5",
+        "symfony/process": "^2.5|^3|^4"
     },
     "require-dev": {
         "g1a/composer-test-scenarios": "^3",
-        "patchwork/jsqueeze": "~2",
-        "natxet/CssMin": "3.0.4",
+        "natxet/cssmin": "3.0.4",
+        "patchwork/jsqueeze": "^2",
         "pear/archive_tar": "^1.4.4",
-        "codeception/base": "^2.3.7",
-        "goaop/framework": "~2.1.2",
-        "codeception/verify": "^0.3.2",
-        "codeception/aspect-mock": "^1|^2.1.1",
-        "goaop/parser-reflection": "^1.1.0",
-        "nikic/php-parser": "^3.1.5",
         "php-coveralls/php-coveralls": "^1",
-        "phpunit/php-code-coverage": "~2|~4",
-        "squizlabs/php_codesniffer": "^2.8"
+        "phpunit/phpunit": "^5.7.27",
+        "squizlabs/php_codesniffer": "^3"
     },
     "scripts": {
         "cs": "./robo sniff",
-        "unit": "./robo test --coverage",
+        "unit": "phpunit",
         "lint": [
             "find src -name '*.php' -print0 | xargs -0 -n1 php -l",
             "find tests/src -name '*.php' -print0 | xargs -0 -n1 php -l"
@@ -75,6 +69,16 @@
     },
     "extra": {
         "scenarios": {
+            "finder5": {
+                "require": {
+                    "symfony/finder": "^5"
+                },
+                "config": {
+                    "platform": {
+                        "php": "7.2.5"
+                    }
+                }                
+            },
             "symfony4": {
                 "require": {
                     "symfony/console": "^4"
@@ -89,8 +93,11 @@
                 "require": {
                     "symfony/console": "^2.8"
                 },
+                "require-dev": {
+                    "phpunit/phpunit": "^4.8.36"
+                },
                 "remove": [
-                    "goaop/framework"
+                    "php-coveralls/php-coveralls"
                 ],
                 "config": {
                     "platform": {
@@ -103,7 +110,7 @@
             }
         },
         "branch-alias": {
-            "dev-master": "2.x-dev"
+            "dev-master": "1.x-dev"
         }
     },
     "suggest": {
diff --git a/vendor/consolidation/robo/composer.lock b/vendor/consolidation/robo/composer.lock
index 3a709f76bb4fb9e686f6682b1071e1a7583c226c..871c4ea5de5a2e4871425e3f6953678039767ecf 100644
--- a/vendor/consolidation/robo/composer.lock
+++ b/vendor/consolidation/robo/composer.lock
@@ -4,29 +4,29 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "This file is @generated automatically"
     ],
-    "content-hash": "90d835cb3183287ad1fb46b4c4b32c7b",
+    "content-hash": "2a1b2eeb6baa01fec984c8b922282930",
     "packages": [
         {
             "name": "consolidation/annotated-command",
-            "version": "2.11.2",
+            "version": "2.12.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/consolidation/annotated-command.git",
-                "reference": "004af26391cd7d1cd04b0ac736dc1324d1b4f572"
+                "reference": "0ee361762df2274f360c085e3239784a53f850b5"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/consolidation/annotated-command/zipball/004af26391cd7d1cd04b0ac736dc1324d1b4f572",
-                "reference": "004af26391cd7d1cd04b0ac736dc1324d1b4f572",
+                "url": "https://api.github.com/repos/consolidation/annotated-command/zipball/0ee361762df2274f360c085e3239784a53f850b5",
+                "reference": "0ee361762df2274f360c085e3239784a53f850b5",
                 "shasum": ""
             },
             "require": {
-                "consolidation/output-formatters": "^3.4",
+                "consolidation/output-formatters": "^3.5.1",
                 "php": ">=5.4.5",
                 "psr/log": "^1",
                 "symfony/console": "^2.8|^3|^4",
                 "symfony/event-dispatcher": "^2.5|^3|^4",
-                "symfony/finder": "^2.5|^3|^4"
+                "symfony/finder": "^2.5|^3|^4|^5"
             },
             "require-dev": {
                 "g1a/composer-test-scenarios": "^3",
@@ -37,6 +37,16 @@
             "type": "library",
             "extra": {
                 "scenarios": {
+                    "finder5": {
+                        "require": {
+                            "symfony/finder": "^5"
+                        },
+                        "config": {
+                            "platform": {
+                                "php": "7.2.5"
+                            }
+                        }
+                    },
                     "symfony4": {
                         "require": {
                             "symfony/console": "^4.0"
@@ -100,20 +110,20 @@
                 }
             ],
             "description": "Initialize Symfony Console commands from annotated command class methods.",
-            "time": "2019-02-02T02:29:53+00:00"
+            "time": "2020-10-11T04:30:03+00:00"
         },
         {
             "name": "consolidation/config",
-            "version": "1.2.0",
+            "version": "1.2.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/consolidation/config.git",
-                "reference": "11ab7ecd19131ce084390171b9c070eedecf7dab"
+                "reference": "cac1279bae7efb5c7fb2ca4c3ba4b8eb741a96c1"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/consolidation/config/zipball/11ab7ecd19131ce084390171b9c070eedecf7dab",
-                "reference": "11ab7ecd19131ce084390171b9c070eedecf7dab",
+                "url": "https://api.github.com/repos/consolidation/config/zipball/cac1279bae7efb5c7fb2ca4c3ba4b8eb741a96c1",
+                "reference": "cac1279bae7efb5c7fb2ca4c3ba4b8eb741a96c1",
                 "shasum": ""
             },
             "require": {
@@ -181,7 +191,7 @@
                 }
             ],
             "description": "Provide configuration services for a commandline tool.",
-            "time": "2019-02-16T01:18:47+00:00"
+            "time": "2019-03-03T19:37:04+00:00"
         },
         {
             "name": "consolidation/log",
@@ -275,30 +285,29 @@
         },
         {
             "name": "consolidation/output-formatters",
-            "version": "3.4.0",
+            "version": "3.5.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/consolidation/output-formatters.git",
-                "reference": "a942680232094c4a5b21c0b7e54c20cce623ae19"
+                "reference": "0d38f13051ef05c223a2bb8e962d668e24785196"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/consolidation/output-formatters/zipball/a942680232094c4a5b21c0b7e54c20cce623ae19",
-                "reference": "a942680232094c4a5b21c0b7e54c20cce623ae19",
+                "url": "https://api.github.com/repos/consolidation/output-formatters/zipball/0d38f13051ef05c223a2bb8e962d668e24785196",
+                "reference": "0d38f13051ef05c223a2bb8e962d668e24785196",
                 "shasum": ""
             },
             "require": {
                 "dflydev/dot-access-data": "^1.1.0",
                 "php": ">=5.4.0",
                 "symfony/console": "^2.8|^3|^4",
-                "symfony/finder": "^2.5|^3|^4"
+                "symfony/finder": "^2.5|^3|^4|^5"
             },
             "require-dev": {
-                "g1a/composer-test-scenarios": "^2",
+                "g1a/composer-test-scenarios": "^3",
+                "php-coveralls/php-coveralls": "^1",
                 "phpunit/phpunit": "^5.7.27",
-                "satooshi/php-coveralls": "^2",
                 "squizlabs/php_codesniffer": "^2.7",
-                "symfony/console": "3.2.3",
                 "symfony/var-dumper": "^2.8|^3|^4",
                 "victorjonsson/markdowndocs": "^1.3"
             },
@@ -307,6 +316,62 @@
             },
             "type": "library",
             "extra": {
+                "scenarios": {
+                    "finder5": {
+                        "require": {
+                            "symfony/finder": "^5"
+                        },
+                        "config": {
+                            "platform": {
+                                "php": "7.2.5"
+                            }
+                        }
+                    },
+                    "symfony4": {
+                        "require": {
+                            "symfony/console": "^4.0"
+                        },
+                        "require-dev": {
+                            "phpunit/phpunit": "^6"
+                        },
+                        "config": {
+                            "platform": {
+                                "php": "7.1.3"
+                            }
+                        }
+                    },
+                    "symfony3": {
+                        "require": {
+                            "symfony/console": "^3.4",
+                            "symfony/finder": "^3.4",
+                            "symfony/var-dumper": "^3.4"
+                        },
+                        "config": {
+                            "platform": {
+                                "php": "5.6.32"
+                            }
+                        }
+                    },
+                    "symfony2": {
+                        "require": {
+                            "symfony/console": "^2.8"
+                        },
+                        "require-dev": {
+                            "phpunit/phpunit": "^4.8.36"
+                        },
+                        "remove": [
+                            "php-coveralls/php-coveralls"
+                        ],
+                        "config": {
+                            "platform": {
+                                "php": "5.4.8"
+                            }
+                        },
+                        "scenario-options": {
+                            "create-lockfile": "false"
+                        }
+                    }
+                },
                 "branch-alias": {
                     "dev-master": "3.x-dev"
                 }
@@ -327,26 +392,26 @@
                 }
             ],
             "description": "Format text by applying transformations provided by plug-in formatters.",
-            "time": "2018-10-19T22:35:38+00:00"
+            "time": "2020-10-11T04:15:32+00:00"
         },
         {
             "name": "consolidation/self-update",
-            "version": "1.1.5",
+            "version": "1.2.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/consolidation/self-update.git",
-                "reference": "a1c273b14ce334789825a09d06d4c87c0a02ad54"
+                "reference": "dba6b2c0708f20fa3ba8008a2353b637578849b4"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/consolidation/self-update/zipball/a1c273b14ce334789825a09d06d4c87c0a02ad54",
-                "reference": "a1c273b14ce334789825a09d06d4c87c0a02ad54",
+                "url": "https://api.github.com/repos/consolidation/self-update/zipball/dba6b2c0708f20fa3ba8008a2353b637578849b4",
+                "reference": "dba6b2c0708f20fa3ba8008a2353b637578849b4",
                 "shasum": ""
             },
             "require": {
                 "php": ">=5.5.0",
-                "symfony/console": "^2.8|^3|^4",
-                "symfony/filesystem": "^2.5|^3|^4"
+                "symfony/console": "^2.8|^3|^4|^5",
+                "symfony/filesystem": "^2.5|^3|^4|^5"
             },
             "bin": [
                 "scripts/release"
@@ -367,17 +432,17 @@
                 "MIT"
             ],
             "authors": [
-                {
-                    "name": "Greg Anderson",
-                    "email": "greg.1.anderson@greenknowe.org"
-                },
                 {
                     "name": "Alexander Menk",
                     "email": "menk@mestrona.net"
+                },
+                {
+                    "name": "Greg Anderson",
+                    "email": "greg.1.anderson@greenknowe.org"
                 }
             ],
             "description": "Provides a self:update command for Symfony Console applications.",
-            "time": "2018-10-28T01:52:03+00:00"
+            "time": "2020-04-13T02:49:20+00:00"
         },
         {
             "name": "container-interop/container-interop",
@@ -408,6 +473,7 @@
             ],
             "description": "Promoting the interoperability of container objects (DIC, SL, etc.)",
             "homepage": "https://github.com/container-interop/container-interop",
+            "abandoned": "psr/container",
             "time": "2017-02-14T19:40:03+00:00"
         },
         {
@@ -680,16 +746,16 @@
         },
         {
             "name": "psr/log",
-            "version": "1.1.0",
+            "version": "1.1.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/php-fig/log.git",
-                "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd"
+                "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/php-fig/log/zipball/6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd",
-                "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd",
+                "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc",
+                "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc",
                 "shasum": ""
             },
             "require": {
@@ -698,7 +764,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.0.x-dev"
+                    "dev-master": "1.1.x-dev"
                 }
             },
             "autoload": {
@@ -723,20 +789,20 @@
                 "psr",
                 "psr-3"
             ],
-            "time": "2018-11-20T15:27:04+00:00"
+            "time": "2020-03-23T09:12:05+00:00"
         },
         {
             "name": "symfony/console",
-            "version": "v3.4.22",
+            "version": "v3.4.45",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/console.git",
-                "reference": "069bf3f0e8f871a2169a06e43d9f3f03f355e9be"
+                "reference": "b28996bc0a3b08914b2a8609163ec35b36b30685"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/console/zipball/069bf3f0e8f871a2169a06e43d9f3f03f355e9be",
-                "reference": "069bf3f0e8f871a2169a06e43d9f3f03f355e9be",
+                "url": "https://api.github.com/repos/symfony/console/zipball/b28996bc0a3b08914b2a8609163ec35b36b30685",
+                "reference": "b28996bc0a3b08914b2a8609163ec35b36b30685",
                 "shasum": ""
             },
             "require": {
@@ -795,20 +861,34 @@
             ],
             "description": "Symfony Console Component",
             "homepage": "https://symfony.com",
-            "time": "2019-01-25T10:42:12+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-09T05:09:37+00:00"
         },
         {
             "name": "symfony/debug",
-            "version": "v3.4.22",
+            "version": "v3.4.45",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/debug.git",
-                "reference": "667a26c4dd6bc75c67f06bc9bcd015bdecc7cbb8"
+                "reference": "9109e4414e684d0b75276ae203883467476d25d0"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/debug/zipball/667a26c4dd6bc75c67f06bc9bcd015bdecc7cbb8",
-                "reference": "667a26c4dd6bc75c67f06bc9bcd015bdecc7cbb8",
+                "url": "https://api.github.com/repos/symfony/debug/zipball/9109e4414e684d0b75276ae203883467476d25d0",
+                "reference": "9109e4414e684d0b75276ae203883467476d25d0",
                 "shasum": ""
             },
             "require": {
@@ -851,20 +931,34 @@
             ],
             "description": "Symfony Debug Component",
             "homepage": "https://symfony.com",
-            "time": "2019-01-25T10:19:25+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-08T22:19:14+00:00"
         },
         {
             "name": "symfony/event-dispatcher",
-            "version": "v3.4.22",
+            "version": "v3.4.45",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/event-dispatcher.git",
-                "reference": "ed5be1663fa66623b3a7004d5d51a14c4045399b"
+                "reference": "0bb9ea263b39fce3a12ac9f78ef576bdd80dacb8"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/ed5be1663fa66623b3a7004d5d51a14c4045399b",
-                "reference": "ed5be1663fa66623b3a7004d5d51a14c4045399b",
+                "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/0bb9ea263b39fce3a12ac9f78ef576bdd80dacb8",
+                "reference": "0bb9ea263b39fce3a12ac9f78ef576bdd80dacb8",
                 "shasum": ""
             },
             "require": {
@@ -876,6 +970,7 @@
             "require-dev": {
                 "psr/log": "~1.0",
                 "symfony/config": "~2.8|~3.0|~4.0",
+                "symfony/debug": "~3.4|~4.4",
                 "symfony/dependency-injection": "~3.3|~4.0",
                 "symfony/expression-language": "~2.8|~3.0|~4.0",
                 "symfony/stopwatch": "~2.8|~3.0|~4.0"
@@ -914,20 +1009,34 @@
             ],
             "description": "Symfony EventDispatcher Component",
             "homepage": "https://symfony.com",
-            "time": "2019-01-16T13:27:11+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-18T12:06:50+00:00"
         },
         {
             "name": "symfony/filesystem",
-            "version": "v3.4.22",
+            "version": "v3.4.45",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/filesystem.git",
-                "reference": "b52454ec66fe5082b7a66a491339d1f1da9a5a0d"
+                "reference": "495646f13d051cc5a8f77a68b68313dc854080aa"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/filesystem/zipball/b52454ec66fe5082b7a66a491339d1f1da9a5a0d",
-                "reference": "b52454ec66fe5082b7a66a491339d1f1da9a5a0d",
+                "url": "https://api.github.com/repos/symfony/filesystem/zipball/495646f13d051cc5a8f77a68b68313dc854080aa",
+                "reference": "495646f13d051cc5a8f77a68b68313dc854080aa",
                 "shasum": ""
             },
             "require": {
@@ -964,20 +1073,34 @@
             ],
             "description": "Symfony Filesystem Component",
             "homepage": "https://symfony.com",
-            "time": "2019-01-16T13:27:11+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-02T16:06:40+00:00"
         },
         {
             "name": "symfony/finder",
-            "version": "v3.4.22",
+            "version": "v3.4.45",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/finder.git",
-                "reference": "7c0c627220308928e958a87c293108e5891cde1d"
+                "reference": "52140652ed31cee3dabd0c481b5577201fa769b4"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/finder/zipball/7c0c627220308928e958a87c293108e5891cde1d",
-                "reference": "7c0c627220308928e958a87c293108e5891cde1d",
+                "url": "https://api.github.com/repos/symfony/finder/zipball/52140652ed31cee3dabd0c481b5577201fa769b4",
+                "reference": "52140652ed31cee3dabd0c481b5577201fa769b4",
                 "shasum": ""
             },
             "require": {
@@ -1013,20 +1136,34 @@
             ],
             "description": "Symfony Finder Component",
             "homepage": "https://symfony.com",
-            "time": "2019-01-16T13:43:35+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-02T16:06:40+00:00"
         },
         {
             "name": "symfony/polyfill-ctype",
-            "version": "v1.10.0",
+            "version": "v1.18.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-ctype.git",
-                "reference": "e3d826245268269cd66f8326bd8bc066687b4a19"
+                "reference": "1c302646f6efc070cd46856e600e5e0684d6b454"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/e3d826245268269cd66f8326bd8bc066687b4a19",
-                "reference": "e3d826245268269cd66f8326bd8bc066687b4a19",
+                "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/1c302646f6efc070cd46856e600e5e0684d6b454",
+                "reference": "1c302646f6efc070cd46856e600e5e0684d6b454",
                 "shasum": ""
             },
             "require": {
@@ -1038,7 +1175,11 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.9-dev"
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
                 }
             },
             "autoload": {
@@ -1054,13 +1195,13 @@
                 "MIT"
             ],
             "authors": [
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                },
                 {
                     "name": "Gert de Pagter",
                     "email": "BackEndTea@gmail.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
                 }
             ],
             "description": "Symfony polyfill for ctype functions",
@@ -1071,20 +1212,34 @@
                 "polyfill",
                 "portable"
             ],
-            "time": "2018-08-06T14:22:27+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-14T12:35:20+00:00"
         },
         {
             "name": "symfony/polyfill-mbstring",
-            "version": "v1.10.0",
+            "version": "v1.18.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-mbstring.git",
-                "reference": "c79c051f5b3a46be09205c73b80b346e4153e494"
+                "reference": "a6977d63bf9a0ad4c65cd352709e230876f9904a"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/c79c051f5b3a46be09205c73b80b346e4153e494",
-                "reference": "c79c051f5b3a46be09205c73b80b346e4153e494",
+                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/a6977d63bf9a0ad4c65cd352709e230876f9904a",
+                "reference": "a6977d63bf9a0ad4c65cd352709e230876f9904a",
                 "shasum": ""
             },
             "require": {
@@ -1096,7 +1251,11 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.9-dev"
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
                 }
             },
             "autoload": {
@@ -1130,20 +1289,34 @@
                 "portable",
                 "shim"
             ],
-            "time": "2018-09-21T13:07:52+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-14T12:35:20+00:00"
         },
         {
             "name": "symfony/process",
-            "version": "v3.4.22",
+            "version": "v3.4.45",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/process.git",
-                "reference": "009f8dda80930e89e8344a4e310b08f9ff07dd2e"
+                "reference": "46a862d0f334e51c1ed831b49cbe12863ffd5475"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/process/zipball/009f8dda80930e89e8344a4e310b08f9ff07dd2e",
-                "reference": "009f8dda80930e89e8344a4e310b08f9ff07dd2e",
+                "url": "https://api.github.com/repos/symfony/process/zipball/46a862d0f334e51c1ed831b49cbe12863ffd5475",
+                "reference": "46a862d0f334e51c1ed831b49cbe12863ffd5475",
                 "shasum": ""
             },
             "require": {
@@ -1179,20 +1352,34 @@
             ],
             "description": "Symfony Process Component",
             "homepage": "https://symfony.com",
-            "time": "2019-01-16T13:27:11+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-02T16:06:40+00:00"
         },
         {
             "name": "symfony/yaml",
-            "version": "v3.4.22",
+            "version": "v3.4.45",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/yaml.git",
-                "reference": "ba11776e9e6c15ad5759a07bffb15899bac75c2d"
+                "reference": "ec3c2ac4d881a4684c1f0317d2107f1a4152bad9"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/yaml/zipball/ba11776e9e6c15ad5759a07bffb15899bac75c2d",
-                "reference": "ba11776e9e6c15ad5759a07bffb15899bac75c2d",
+                "url": "https://api.github.com/repos/symfony/yaml/zipball/ec3c2ac4d881a4684c1f0317d2107f1a4152bad9",
+                "reference": "ec3c2ac4d881a4684c1f0317d2107f1a4152bad9",
                 "shasum": ""
             },
             "require": {
@@ -1238,44 +1425,57 @@
             ],
             "description": "Symfony Yaml Component",
             "homepage": "https://symfony.com",
-            "time": "2019-01-16T10:59:17+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-09-18T15:58:55+00:00"
         }
     ],
     "packages-dev": [
         {
-            "name": "behat/gherkin",
-            "version": "v4.6.0",
+            "name": "doctrine/instantiator",
+            "version": "1.0.5",
             "source": {
                 "type": "git",
-                "url": "https://github.com/Behat/Gherkin.git",
-                "reference": "ab0a02ea14893860bca00f225f5621d351a3ad07"
+                "url": "https://github.com/doctrine/instantiator.git",
+                "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/Behat/Gherkin/zipball/ab0a02ea14893860bca00f225f5621d351a3ad07",
-                "reference": "ab0a02ea14893860bca00f225f5621d351a3ad07",
+                "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d",
+                "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.1"
+                "php": ">=5.3,<8.0-DEV"
             },
             "require-dev": {
-                "phpunit/phpunit": "~4.5|~5",
-                "symfony/phpunit-bridge": "~2.7|~3|~4",
-                "symfony/yaml": "~2.3|~3|~4"
-            },
-            "suggest": {
-                "symfony/yaml": "If you want to parse features, represented in YAML files"
+                "athletic/athletic": "~0.1.8",
+                "ext-pdo": "*",
+                "ext-phar": "*",
+                "phpunit/phpunit": "~4.0",
+                "squizlabs/php_codesniffer": "~2.0"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "4.4-dev"
+                    "dev-master": "1.0.x-dev"
                 }
             },
             "autoload": {
-                "psr-0": {
-                    "Behat\\Gherkin": "src/"
+                "psr-4": {
+                    "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -1284,51 +1484,56 @@
             ],
             "authors": [
                 {
-                    "name": "Konstantin Kudryashov",
-                    "email": "ever.zet@gmail.com",
-                    "homepage": "http://everzet.com"
+                    "name": "Marco Pivetta",
+                    "email": "ocramius@gmail.com",
+                    "homepage": "http://ocramius.github.com/"
                 }
             ],
-            "description": "Gherkin DSL parser for PHP 5.3",
-            "homepage": "http://behat.org/",
+            "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
+            "homepage": "https://github.com/doctrine/instantiator",
             "keywords": [
-                "BDD",
-                "Behat",
-                "Cucumber",
-                "DSL",
-                "gherkin",
-                "parser"
-            ],
-            "time": "2019-01-16T14:22:17+00:00"
+                "constructor",
+                "instantiate"
+            ],
+            "time": "2015-06-14T21:17:01+00:00"
         },
         {
-            "name": "codeception/aspect-mock",
-            "version": "2.1.1",
+            "name": "g1a/composer-test-scenarios",
+            "version": "3.2.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/Codeception/AspectMock.git",
-                "reference": "bf3c000599c0dc75ecb52e19dee2b8ed294cf7ba"
+                "url": "https://github.com/g1a/composer-test-scenarios.git",
+                "reference": "e7394206d845fd593d325440507fb940bef8cb62"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/Codeception/AspectMock/zipball/bf3c000599c0dc75ecb52e19dee2b8ed294cf7ba",
-                "reference": "bf3c000599c0dc75ecb52e19dee2b8ed294cf7ba",
+                "url": "https://api.github.com/repos/g1a/composer-test-scenarios/zipball/e7394206d845fd593d325440507fb940bef8cb62",
+                "reference": "e7394206d845fd593d325440507fb940bef8cb62",
                 "shasum": ""
             },
             "require": {
-                "goaop/framework": "^2.0.0",
-                "php": ">=5.6.0",
-                "symfony/finder": "~2.4|~3.0"
+                "composer-plugin-api": "^1.0.0 || ^2.0.0",
+                "php": ">=5.4"
             },
             "require-dev": {
-                "codeception/base": "~2.1",
-                "codeception/specify": "~0.3",
-                "codeception/verify": "~0.2"
+                "composer/composer": "^1.10.6 || ^2.0@rc",
+                "php-coveralls/php-coveralls": "^1.0",
+                "phpunit/phpunit": "^4.8.36|^6",
+                "squizlabs/php_codesniffer": "^3.5"
+            },
+            "bin": [
+                "scripts/dependency-licenses"
+            ],
+            "type": "composer-plugin",
+            "extra": {
+                "class": "ComposerTestScenarios\\Plugin",
+                "branch-alias": {
+                    "dev-main": "3.x-dev"
+                }
             },
-            "type": "library",
             "autoload": {
-                "psr-0": {
-                    "AspectMock": "src/"
+                "psr-4": {
+                    "ComposerTestScenarios\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -1337,79 +1542,75 @@
             ],
             "authors": [
                 {
-                    "name": "Michael Bodnarchuk",
-                    "email": "davert@codeception.com"
+                    "name": "Greg Anderson",
+                    "email": "greg.1.anderson@greenknowe.org"
                 }
             ],
-            "description": "Experimental Mocking Framework powered by Aspects",
-            "time": "2017-10-24T10:20:17+00:00"
+            "description": "Useful scripts for testing multiple sets of Composer dependencies.",
+            "time": "2020-09-28T20:54:35+00:00"
         },
         {
-            "name": "codeception/base",
-            "version": "2.5.3",
+            "name": "guzzle/guzzle",
+            "version": "v3.8.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/Codeception/base.git",
-                "reference": "ceff0b4fee4846b6bd8b5a37abbbb1acd6e78f58"
+                "url": "https://github.com/guzzle/guzzle.git",
+                "reference": "4de0618a01b34aa1c8c33a3f13f396dcd3882eba"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/Codeception/base/zipball/ceff0b4fee4846b6bd8b5a37abbbb1acd6e78f58",
-                "reference": "ceff0b4fee4846b6bd8b5a37abbbb1acd6e78f58",
+                "url": "https://api.github.com/repos/guzzle/guzzle/zipball/4de0618a01b34aa1c8c33a3f13f396dcd3882eba",
+                "reference": "4de0618a01b34aa1c8c33a3f13f396dcd3882eba",
                 "shasum": ""
             },
             "require": {
-                "behat/gherkin": "^4.4.0",
-                "codeception/phpunit-wrapper": "^6.0.9|^7.0.6",
-                "codeception/stub": "^2.0",
                 "ext-curl": "*",
-                "ext-json": "*",
-                "ext-mbstring": "*",
-                "guzzlehttp/psr7": "~1.0",
-                "php": ">=5.6.0 <8.0",
-                "symfony/browser-kit": ">=2.7 <5.0",
-                "symfony/console": ">=2.7 <5.0",
-                "symfony/css-selector": ">=2.7 <5.0",
-                "symfony/dom-crawler": ">=2.7 <5.0",
-                "symfony/event-dispatcher": ">=2.7 <5.0",
-                "symfony/finder": ">=2.7 <5.0",
-                "symfony/yaml": ">=2.7 <5.0"
+                "php": ">=5.3.3",
+                "symfony/event-dispatcher": ">=2.1"
             },
-            "require-dev": {
-                "codeception/specify": "~0.3",
-                "facebook/graph-sdk": "~5.3",
-                "flow/jsonpath": "~0.2",
-                "monolog/monolog": "~1.8",
-                "pda/pheanstalk": "~3.0",
-                "php-amqplib/php-amqplib": "~2.4",
-                "predis/predis": "^1.0",
-                "squizlabs/php_codesniffer": "~2.0",
-                "symfony/process": ">=2.7 <5.0",
-                "vlucas/phpdotenv": "^3.0"
+            "replace": {
+                "guzzle/batch": "self.version",
+                "guzzle/cache": "self.version",
+                "guzzle/common": "self.version",
+                "guzzle/http": "self.version",
+                "guzzle/inflection": "self.version",
+                "guzzle/iterator": "self.version",
+                "guzzle/log": "self.version",
+                "guzzle/parser": "self.version",
+                "guzzle/plugin": "self.version",
+                "guzzle/plugin-async": "self.version",
+                "guzzle/plugin-backoff": "self.version",
+                "guzzle/plugin-cache": "self.version",
+                "guzzle/plugin-cookie": "self.version",
+                "guzzle/plugin-curlauth": "self.version",
+                "guzzle/plugin-error-response": "self.version",
+                "guzzle/plugin-history": "self.version",
+                "guzzle/plugin-log": "self.version",
+                "guzzle/plugin-md5": "self.version",
+                "guzzle/plugin-mock": "self.version",
+                "guzzle/plugin-oauth": "self.version",
+                "guzzle/service": "self.version",
+                "guzzle/stream": "self.version"
             },
-            "suggest": {
-                "aws/aws-sdk-php": "For using AWS Auth in REST module and Queue module",
-                "codeception/phpbuiltinserver": "Start and stop PHP built-in web server for your tests",
-                "codeception/specify": "BDD-style code blocks",
-                "codeception/verify": "BDD-style assertions",
-                "flow/jsonpath": "For using JSONPath in REST module",
-                "league/factory-muffin": "For DataFactory module",
-                "league/factory-muffin-faker": "For Faker support in DataFactory module",
-                "phpseclib/phpseclib": "for SFTP option in FTP Module",
-                "stecman/symfony-console-completion": "For BASH autocompletion",
-                "symfony/phpunit-bridge": "For phpunit-bridge support"
+            "require-dev": {
+                "doctrine/cache": "*",
+                "monolog/monolog": "1.*",
+                "phpunit/phpunit": "3.7.*",
+                "psr/log": "1.0.*",
+                "symfony/class-loader": "*",
+                "zendframework/zend-cache": "<2.3",
+                "zendframework/zend-log": "<2.3"
             },
-            "bin": [
-                "codecept"
-            ],
             "type": "library",
             "extra": {
-                "branch-alias": []
+                "branch-alias": {
+                    "dev-master": "3.8-dev"
+                }
             },
             "autoload": {
-                "psr-4": {
-                    "Codeception\\": "src/Codeception",
-                    "Codeception\\Extension\\": "ext"
+                "psr-0": {
+                    "Guzzle": "src/",
+                    "Guzzle\\Tests": "tests/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -1418,557 +1619,17 @@
             ],
             "authors": [
                 {
-                    "name": "Michael Bodnarchuk",
-                    "email": "davert@mail.ua",
-                    "homepage": "http://codegyre.com"
+                    "name": "Michael Dowling",
+                    "email": "mtdowling@gmail.com",
+                    "homepage": "https://github.com/mtdowling"
+                },
+                {
+                    "name": "Guzzle Community",
+                    "homepage": "https://github.com/guzzle/guzzle/contributors"
                 }
             ],
-            "description": "BDD-style testing framework",
-            "homepage": "http://codeception.com/",
-            "keywords": [
-                "BDD",
-                "TDD",
-                "acceptance testing",
-                "functional testing",
-                "unit testing"
-            ],
-            "time": "2019-02-02T16:29:38+00:00"
-        },
-        {
-            "name": "codeception/phpunit-wrapper",
-            "version": "6.0.14",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/Codeception/phpunit-wrapper.git",
-                "reference": "3b64beb0af3e63145af982e64718ab80d2417739"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/Codeception/phpunit-wrapper/zipball/3b64beb0af3e63145af982e64718ab80d2417739",
-                "reference": "3b64beb0af3e63145af982e64718ab80d2417739",
-                "shasum": ""
-            },
-            "require": {
-                "phpunit/php-code-coverage": ">=4.0.4 <6.0",
-                "phpunit/phpunit": ">=5.7.27 <6.5.13",
-                "sebastian/comparator": ">=1.2.4 <3.0",
-                "sebastian/diff": ">=1.4 <4.0"
-            },
-            "replace": {
-                "codeception/phpunit-wrapper": "*"
-            },
-            "require-dev": {
-                "codeception/specify": "*",
-                "vlucas/phpdotenv": "^2.4"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Codeception\\PHPUnit\\": "src\\"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Davert",
-                    "email": "davert.php@resend.cc"
-                }
-            ],
-            "description": "PHPUnit classes used by Codeception",
-            "time": "2019-01-13T10:35:17+00:00"
-        },
-        {
-            "name": "codeception/stub",
-            "version": "2.0.4",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/Codeception/Stub.git",
-                "reference": "f50bc271f392a2836ff80690ce0c058efe1ae03e"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/Codeception/Stub/zipball/f50bc271f392a2836ff80690ce0c058efe1ae03e",
-                "reference": "f50bc271f392a2836ff80690ce0c058efe1ae03e",
-                "shasum": ""
-            },
-            "require": {
-                "phpunit/phpunit": ">=4.8 <8.0"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Codeception\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "description": "Flexible Stub wrapper for PHPUnit's Mock Builder",
-            "time": "2018-07-26T11:55:37+00:00"
-        },
-        {
-            "name": "codeception/verify",
-            "version": "0.3.3",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/Codeception/Verify.git",
-                "reference": "5d649dda453cd814dadc4bb053060cd2c6bb4b4c"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/Codeception/Verify/zipball/5d649dda453cd814dadc4bb053060cd2c6bb4b4c",
-                "reference": "5d649dda453cd814dadc4bb053060cd2c6bb4b4c",
-                "shasum": ""
-            },
-            "require-dev": {
-                "phpunit/phpunit": "~4.0"
-            },
-            "type": "library",
-            "autoload": {
-                "files": [
-                    "src/Codeception/function.php"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Michael Bodnarchuk",
-                    "email": "davert.php@mailican.com"
-                }
-            ],
-            "description": "BDD assertion library for PHPUnit",
-            "time": "2017-01-09T10:58:51+00:00"
-        },
-        {
-            "name": "doctrine/annotations",
-            "version": "v1.4.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/doctrine/annotations.git",
-                "reference": "54cacc9b81758b14e3ce750f205a393d52339e97"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/annotations/zipball/54cacc9b81758b14e3ce750f205a393d52339e97",
-                "reference": "54cacc9b81758b14e3ce750f205a393d52339e97",
-                "shasum": ""
-            },
-            "require": {
-                "doctrine/lexer": "1.*",
-                "php": "^5.6 || ^7.0"
-            },
-            "require-dev": {
-                "doctrine/cache": "1.*",
-                "phpunit/phpunit": "^5.7"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.4.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Roman Borschel",
-                    "email": "roman@code-factory.org"
-                },
-                {
-                    "name": "Benjamin Eberlei",
-                    "email": "kontakt@beberlei.de"
-                },
-                {
-                    "name": "Guilherme Blanco",
-                    "email": "guilhermeblanco@gmail.com"
-                },
-                {
-                    "name": "Jonathan Wage",
-                    "email": "jonwage@gmail.com"
-                },
-                {
-                    "name": "Johannes Schmitt",
-                    "email": "schmittjoh@gmail.com"
-                }
-            ],
-            "description": "Docblock Annotations Parser",
-            "homepage": "http://www.doctrine-project.org",
-            "keywords": [
-                "annotations",
-                "docblock",
-                "parser"
-            ],
-            "time": "2017-02-24T16:22:25+00:00"
-        },
-        {
-            "name": "doctrine/instantiator",
-            "version": "1.0.5",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/doctrine/instantiator.git",
-                "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d",
-                "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3,<8.0-DEV"
-            },
-            "require-dev": {
-                "athletic/athletic": "~0.1.8",
-                "ext-pdo": "*",
-                "ext-phar": "*",
-                "phpunit/phpunit": "~4.0",
-                "squizlabs/php_codesniffer": "~2.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.0.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Marco Pivetta",
-                    "email": "ocramius@gmail.com",
-                    "homepage": "http://ocramius.github.com/"
-                }
-            ],
-            "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
-            "homepage": "https://github.com/doctrine/instantiator",
-            "keywords": [
-                "constructor",
-                "instantiate"
-            ],
-            "time": "2015-06-14T21:17:01+00:00"
-        },
-        {
-            "name": "doctrine/lexer",
-            "version": "v1.0.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/doctrine/lexer.git",
-                "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/lexer/zipball/83893c552fd2045dd78aef794c31e694c37c0b8c",
-                "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.2"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.0.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-0": {
-                    "Doctrine\\Common\\Lexer\\": "lib/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Roman Borschel",
-                    "email": "roman@code-factory.org"
-                },
-                {
-                    "name": "Guilherme Blanco",
-                    "email": "guilhermeblanco@gmail.com"
-                },
-                {
-                    "name": "Johannes Schmitt",
-                    "email": "schmittjoh@gmail.com"
-                }
-            ],
-            "description": "Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers.",
-            "homepage": "http://www.doctrine-project.org",
-            "keywords": [
-                "lexer",
-                "parser"
-            ],
-            "time": "2014-09-09T13:34:57+00:00"
-        },
-        {
-            "name": "g1a/composer-test-scenarios",
-            "version": "3.0.2",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/g1a/composer-test-scenarios.git",
-                "reference": "28f932580981e912ab8f01d15788f1dee06550c8"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/g1a/composer-test-scenarios/zipball/28f932580981e912ab8f01d15788f1dee06550c8",
-                "reference": "28f932580981e912ab8f01d15788f1dee06550c8",
-                "shasum": ""
-            },
-            "require": {
-                "composer-plugin-api": "^1.0.0",
-                "php": ">=5.4"
-            },
-            "require-dev": {
-                "composer/composer": "^1.7",
-                "php-coveralls/php-coveralls": "^1.0",
-                "phpunit/phpunit": "^4.8.36|^6",
-                "squizlabs/php_codesniffer": "^2.8"
-            },
-            "bin": [
-                "scripts/dependency-licenses"
-            ],
-            "type": "composer-plugin",
-            "extra": {
-                "class": "ComposerTestScenarios\\Plugin",
-                "branch-alias": {
-                    "dev-master": "3.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "ComposerTestScenarios\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Greg Anderson",
-                    "email": "greg.1.anderson@greenknowe.org"
-                }
-            ],
-            "description": "Useful scripts for testing multiple sets of Composer dependencies.",
-            "time": "2019-02-11T20:22:44+00:00"
-        },
-        {
-            "name": "goaop/framework",
-            "version": "2.1.2",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/goaop/framework.git",
-                "reference": "6e2a0fe13c1943db02a67588cfd27692bddaffa5"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/goaop/framework/zipball/6e2a0fe13c1943db02a67588cfd27692bddaffa5",
-                "reference": "6e2a0fe13c1943db02a67588cfd27692bddaffa5",
-                "shasum": ""
-            },
-            "require": {
-                "doctrine/annotations": "~1.0",
-                "goaop/parser-reflection": "~1.2",
-                "jakubledl/dissect": "~1.0",
-                "php": ">=5.6.0"
-            },
-            "require-dev": {
-                "adlawson/vfs": "^0.12",
-                "doctrine/orm": "^2.5",
-                "phpunit/phpunit": "^4.8",
-                "symfony/console": "^2.7|^3.0"
-            },
-            "suggest": {
-                "symfony/console": "Enables the usage of the command-line tool."
-            },
-            "bin": [
-                "bin/aspect"
-            ],
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.0-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Go\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Lisachenko Alexander",
-                    "homepage": "https://github.com/lisachenko"
-                }
-            ],
-            "description": "Framework for aspect-oriented programming in PHP.",
-            "homepage": "http://go.aopphp.com/",
-            "keywords": [
-                "aop",
-                "aspect",
-                "library",
-                "php"
-            ],
-            "time": "2017-07-12T11:46:25+00:00"
-        },
-        {
-            "name": "goaop/parser-reflection",
-            "version": "1.4.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/goaop/parser-reflection.git",
-                "reference": "d9c1dcc7ce4a5284fe3530e011faf9c9c10e1166"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/goaop/parser-reflection/zipball/d9c1dcc7ce4a5284fe3530e011faf9c9c10e1166",
-                "reference": "d9c1dcc7ce4a5284fe3530e011faf9c9c10e1166",
-                "shasum": ""
-            },
-            "require": {
-                "nikic/php-parser": "^1.2|^2.0|^3.0",
-                "php": ">=5.6.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "~4.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Go\\ParserReflection\\": "src"
-                },
-                "files": [
-                    "src/bootstrap.php"
-                ],
-                "exclude-from-classmap": [
-                    "/tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Alexander Lisachenko",
-                    "email": "lisachenko.it@gmail.com"
-                }
-            ],
-            "description": "Provides reflection information, based on raw source",
-            "time": "2018-03-19T15:57:41+00:00"
-        },
-        {
-            "name": "guzzle/guzzle",
-            "version": "v3.8.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/guzzle/guzzle.git",
-                "reference": "4de0618a01b34aa1c8c33a3f13f396dcd3882eba"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/guzzle/guzzle/zipball/4de0618a01b34aa1c8c33a3f13f396dcd3882eba",
-                "reference": "4de0618a01b34aa1c8c33a3f13f396dcd3882eba",
-                "shasum": ""
-            },
-            "require": {
-                "ext-curl": "*",
-                "php": ">=5.3.3",
-                "symfony/event-dispatcher": ">=2.1"
-            },
-            "replace": {
-                "guzzle/batch": "self.version",
-                "guzzle/cache": "self.version",
-                "guzzle/common": "self.version",
-                "guzzle/http": "self.version",
-                "guzzle/inflection": "self.version",
-                "guzzle/iterator": "self.version",
-                "guzzle/log": "self.version",
-                "guzzle/parser": "self.version",
-                "guzzle/plugin": "self.version",
-                "guzzle/plugin-async": "self.version",
-                "guzzle/plugin-backoff": "self.version",
-                "guzzle/plugin-cache": "self.version",
-                "guzzle/plugin-cookie": "self.version",
-                "guzzle/plugin-curlauth": "self.version",
-                "guzzle/plugin-error-response": "self.version",
-                "guzzle/plugin-history": "self.version",
-                "guzzle/plugin-log": "self.version",
-                "guzzle/plugin-md5": "self.version",
-                "guzzle/plugin-mock": "self.version",
-                "guzzle/plugin-oauth": "self.version",
-                "guzzle/service": "self.version",
-                "guzzle/stream": "self.version"
-            },
-            "require-dev": {
-                "doctrine/cache": "*",
-                "monolog/monolog": "1.*",
-                "phpunit/phpunit": "3.7.*",
-                "psr/log": "1.0.*",
-                "symfony/class-loader": "*",
-                "zendframework/zend-cache": "<2.3",
-                "zendframework/zend-log": "<2.3"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.8-dev"
-                }
-            },
-            "autoload": {
-                "psr-0": {
-                    "Guzzle": "src/",
-                    "Guzzle\\Tests": "tests/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Michael Dowling",
-                    "email": "mtdowling@gmail.com",
-                    "homepage": "https://github.com/mtdowling"
-                },
-                {
-                    "name": "Guzzle Community",
-                    "homepage": "https://github.com/guzzle/guzzle/contributors"
-                }
-            ],
-            "description": "Guzzle is a PHP HTTP client library and framework for building RESTful web service clients",
-            "homepage": "http://guzzlephp.org/",
+            "description": "Guzzle is a PHP HTTP client library and framework for building RESTful web service clients",
+            "homepage": "http://guzzlephp.org/",
             "keywords": [
                 "client",
                 "curl",
@@ -1981,128 +1642,6 @@
             "abandoned": "guzzlehttp/guzzle",
             "time": "2014-01-28T22:29:15+00:00"
         },
-        {
-            "name": "guzzlehttp/psr7",
-            "version": "1.5.2",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/guzzle/psr7.git",
-                "reference": "9f83dded91781a01c63574e387eaa769be769115"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/guzzle/psr7/zipball/9f83dded91781a01c63574e387eaa769be769115",
-                "reference": "9f83dded91781a01c63574e387eaa769be769115",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.4.0",
-                "psr/http-message": "~1.0",
-                "ralouphie/getallheaders": "^2.0.5"
-            },
-            "provide": {
-                "psr/http-message-implementation": "1.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.5-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "GuzzleHttp\\Psr7\\": "src/"
-                },
-                "files": [
-                    "src/functions_include.php"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Michael Dowling",
-                    "email": "mtdowling@gmail.com",
-                    "homepage": "https://github.com/mtdowling"
-                },
-                {
-                    "name": "Tobias Schultze",
-                    "homepage": "https://github.com/Tobion"
-                }
-            ],
-            "description": "PSR-7 message implementation that also provides common utility methods",
-            "keywords": [
-                "http",
-                "message",
-                "psr-7",
-                "request",
-                "response",
-                "stream",
-                "uri",
-                "url"
-            ],
-            "time": "2018-12-04T20:46:45+00:00"
-        },
-        {
-            "name": "jakubledl/dissect",
-            "version": "v1.0.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/jakubledl/dissect.git",
-                "reference": "d3a391de31e45a247e95cef6cf58a91c05af67c4"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/jakubledl/dissect/zipball/d3a391de31e45a247e95cef6cf58a91c05af67c4",
-                "reference": "d3a391de31e45a247e95cef6cf58a91c05af67c4",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.3"
-            },
-            "require-dev": {
-                "symfony/console": "~2.1"
-            },
-            "suggest": {
-                "symfony/console": "for the command-line tool"
-            },
-            "bin": [
-                "bin/dissect.php",
-                "bin/dissect"
-            ],
-            "type": "library",
-            "autoload": {
-                "psr-0": {
-                    "Dissect": [
-                        "src/"
-                    ]
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "unlicense"
-            ],
-            "authors": [
-                {
-                    "name": "Jakub Lédl",
-                    "email": "jakubledl@gmail.com"
-                }
-            ],
-            "description": "Lexing and parsing in pure PHP",
-            "homepage": "https://github.com/jakubledl/dissect",
-            "keywords": [
-                "ast",
-                "lexing",
-                "parser",
-                "parsing"
-            ],
-            "time": "2013-01-29T21:29:14+00:00"
-        },
         {
             "name": "myclabs/deep-copy",
             "version": "1.7.0",
@@ -2144,81 +1683,27 @@
                 "copy",
                 "duplicate",
                 "object",
-                "object graph"
-            ],
-            "time": "2017-10-19T19:58:43+00:00"
-        },
-        {
-            "name": "natxet/CssMin",
-            "version": "v3.0.4",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/natxet/CssMin.git",
-                "reference": "92de3fe3ccb4f8298d31952490ef7d5395855c39"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/natxet/CssMin/zipball/92de3fe3ccb4f8298d31952490ef7d5395855c39",
-                "reference": "92de3fe3ccb4f8298d31952490ef7d5395855c39",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.0-dev"
-                }
-            },
-            "autoload": {
-                "classmap": [
-                    "src/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Joe Scylla",
-                    "email": "joe.scylla@gmail.com",
-                    "homepage": "https://profiles.google.com/joe.scylla"
-                }
-            ],
-            "description": "Minifying CSS",
-            "homepage": "http://code.google.com/p/cssmin/",
-            "keywords": [
-                "css",
-                "minify"
+                "object graph"
             ],
-            "time": "2015-09-25T11:13:11+00:00"
+            "time": "2017-10-19T19:58:43+00:00"
         },
         {
-            "name": "nikic/php-parser",
-            "version": "v3.1.5",
+            "name": "natxet/cssmin",
+            "version": "v3.0.4",
             "source": {
                 "type": "git",
-                "url": "https://github.com/nikic/PHP-Parser.git",
-                "reference": "bb87e28e7d7b8d9a7fda231d37457c9210faf6ce"
+                "url": "https://github.com/natxet/CssMin.git",
+                "reference": "92de3fe3ccb4f8298d31952490ef7d5395855c39"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/bb87e28e7d7b8d9a7fda231d37457c9210faf6ce",
-                "reference": "bb87e28e7d7b8d9a7fda231d37457c9210faf6ce",
+                "url": "https://api.github.com/repos/natxet/CssMin/zipball/92de3fe3ccb4f8298d31952490ef7d5395855c39",
+                "reference": "92de3fe3ccb4f8298d31952490ef7d5395855c39",
                 "shasum": ""
             },
             "require": {
-                "ext-tokenizer": "*",
-                "php": ">=5.5"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "~4.0|~5.0"
+                "php": ">=5.0"
             },
-            "bin": [
-                "bin/php-parse"
-            ],
             "type": "library",
             "extra": {
                 "branch-alias": {
@@ -2226,25 +1711,28 @@
                 }
             },
             "autoload": {
-                "psr-4": {
-                    "PhpParser\\": "lib/PhpParser"
-                }
+                "classmap": [
+                    "src/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "BSD-3-Clause"
+                "MIT"
             ],
             "authors": [
                 {
-                    "name": "Nikita Popov"
+                    "name": "Joe Scylla",
+                    "email": "joe.scylla@gmail.com",
+                    "homepage": "https://profiles.google.com/joe.scylla"
                 }
             ],
-            "description": "A PHP parser written in PHP",
+            "description": "Minifying CSS",
+            "homepage": "http://code.google.com/p/cssmin/",
             "keywords": [
-                "parser",
-                "php"
+                "css",
+                "minify"
             ],
-            "time": "2018-02-28T20:30:58+00:00"
+            "time": "2015-09-25T11:13:11+00:00"
         },
         {
             "name": "patchwork/jsqueeze",
@@ -2291,20 +1779,21 @@
                 "javascript",
                 "minification"
             ],
+            "abandoned": true,
             "time": "2016-04-19T09:28:22+00:00"
         },
         {
             "name": "pear/archive_tar",
-            "version": "1.4.6",
+            "version": "1.4.10",
             "source": {
                 "type": "git",
                 "url": "https://github.com/pear/Archive_Tar.git",
-                "reference": "b8e33f9063a7cd1d20f079014f8382b3a7aee47e"
+                "reference": "bbb4f10f71a1da2715ec6d9a683f4f23c507a49b"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/pear/Archive_Tar/zipball/b8e33f9063a7cd1d20f079014f8382b3a7aee47e",
-                "reference": "b8e33f9063a7cd1d20f079014f8382b3a7aee47e",
+                "url": "https://api.github.com/repos/pear/Archive_Tar/zipball/bbb4f10f71a1da2715ec6d9a683f4f23c507a49b",
+                "reference": "bbb4f10f71a1da2715ec6d9a683f4f23c507a49b",
                 "shasum": ""
             },
             "require": {
@@ -2357,20 +1846,20 @@
                 "archive",
                 "tar"
             ],
-            "time": "2019-02-01T11:10:38+00:00"
+            "time": "2020-09-15T14:13:23+00:00"
         },
         {
             "name": "pear/console_getopt",
-            "version": "v1.4.2",
+            "version": "v1.4.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/pear/Console_Getopt.git",
-                "reference": "6c77aeb625b32bd752e89ee17972d103588b90c0"
+                "reference": "a41f8d3e668987609178c7c4a9fe48fecac53fa0"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/pear/Console_Getopt/zipball/6c77aeb625b32bd752e89ee17972d103588b90c0",
-                "reference": "6c77aeb625b32bd752e89ee17972d103588b90c0",
+                "url": "https://api.github.com/repos/pear/Console_Getopt/zipball/a41f8d3e668987609178c7c4a9fe48fecac53fa0",
+                "reference": "a41f8d3e668987609178c7c4a9fe48fecac53fa0",
                 "shasum": ""
             },
             "type": "library",
@@ -2387,11 +1876,6 @@
                 "BSD-2-Clause"
             ],
             "authors": [
-                {
-                    "name": "Greg Beaver",
-                    "email": "cellog@php.net",
-                    "role": "Helper"
-                },
                 {
                     "name": "Andrei Zmievski",
                     "email": "andrei@php.net",
@@ -2401,23 +1885,28 @@
                     "name": "Stig Bakken",
                     "email": "stig@php.net",
                     "role": "Developer"
+                },
+                {
+                    "name": "Greg Beaver",
+                    "email": "cellog@php.net",
+                    "role": "Helper"
                 }
             ],
             "description": "More info available on: http://pear.php.net/package/Console_Getopt",
-            "time": "2019-02-06T16:52:33+00:00"
+            "time": "2019-11-20T18:27:48+00:00"
         },
         {
             "name": "pear/pear-core-minimal",
-            "version": "v1.10.7",
+            "version": "v1.10.10",
             "source": {
                 "type": "git",
                 "url": "https://github.com/pear/pear-core-minimal.git",
-                "reference": "19a3e0fcd50492c4357372f623f55f1b144346da"
+                "reference": "625a3c429d9b2c1546438679074cac1b089116a7"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/pear/pear-core-minimal/zipball/19a3e0fcd50492c4357372f623f55f1b144346da",
-                "reference": "19a3e0fcd50492c4357372f623f55f1b144346da",
+                "url": "https://api.github.com/repos/pear/pear-core-minimal/zipball/625a3c429d9b2c1546438679074cac1b089116a7",
+                "reference": "625a3c429d9b2c1546438679074cac1b089116a7",
                 "shasum": ""
             },
             "require": {
@@ -2448,20 +1937,20 @@
                 }
             ],
             "description": "Minimal set of PEAR core files to be used as composer dependency",
-            "time": "2018-12-05T20:03:52+00:00"
+            "time": "2019-11-19T19:00:24+00:00"
         },
         {
             "name": "pear/pear_exception",
-            "version": "v1.0.0",
+            "version": "v1.0.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/pear/PEAR_Exception.git",
-                "reference": "8c18719fdae000b690e3912be401c76e406dd13b"
+                "reference": "dbb42a5a0e45f3adcf99babfb2a1ba77b8ac36a7"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/pear/PEAR_Exception/zipball/8c18719fdae000b690e3912be401c76e406dd13b",
-                "reference": "8c18719fdae000b690e3912be401c76e406dd13b",
+                "url": "https://api.github.com/repos/pear/PEAR_Exception/zipball/dbb42a5a0e45f3adcf99babfb2a1ba77b8ac36a7",
+                "reference": "dbb42a5a0e45f3adcf99babfb2a1ba77b8ac36a7",
                 "shasum": ""
             },
             "require": {
@@ -2477,9 +1966,9 @@
                 }
             },
             "autoload": {
-                "psr-0": {
-                    "PEAR": ""
-                }
+                "classmap": [
+                    "PEAR/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "include-path": [
@@ -2503,7 +1992,7 @@
             "keywords": [
                 "exception"
             ],
-            "time": "2015-02-10T20:07:52+00:00"
+            "time": "2019-12-10T10:24:42+00:00"
         },
         {
             "name": "php-coveralls/php-coveralls",
@@ -2714,38 +2203,38 @@
         },
         {
             "name": "phpspec/prophecy",
-            "version": "1.8.0",
+            "version": "v1.10.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpspec/prophecy.git",
-                "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06"
+                "reference": "451c3cd1418cf640de218914901e51b064abb093"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpspec/prophecy/zipball/4ba436b55987b4bf311cb7c6ba82aa528aac0a06",
-                "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06",
+                "url": "https://api.github.com/repos/phpspec/prophecy/zipball/451c3cd1418cf640de218914901e51b064abb093",
+                "reference": "451c3cd1418cf640de218914901e51b064abb093",
                 "shasum": ""
             },
             "require": {
                 "doctrine/instantiator": "^1.0.2",
                 "php": "^5.3|^7.0",
-                "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0",
-                "sebastian/comparator": "^1.1|^2.0|^3.0",
-                "sebastian/recursion-context": "^1.0|^2.0|^3.0"
+                "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0",
+                "sebastian/comparator": "^1.2.3|^2.0|^3.0|^4.0",
+                "sebastian/recursion-context": "^1.0|^2.0|^3.0|^4.0"
             },
             "require-dev": {
-                "phpspec/phpspec": "^2.5|^3.2",
+                "phpspec/phpspec": "^2.5 || ^3.2",
                 "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.8.x-dev"
+                    "dev-master": "1.10.x-dev"
                 }
             },
             "autoload": {
-                "psr-0": {
-                    "Prophecy\\": "src/"
+                "psr-4": {
+                    "Prophecy\\": "src/Prophecy"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -2773,7 +2262,7 @@
                 "spy",
                 "stub"
             ],
-            "time": "2018-08-05T17:53:17+00:00"
+            "time": "2020-03-05T15:02:03+00:00"
         },
         {
             "name": "phpunit/php-code-coverage",
@@ -3022,6 +2511,7 @@
             "keywords": [
                 "tokenizer"
             ],
+            "abandoned": true,
             "time": "2017-12-04T08:55:13+00:00"
         },
         {
@@ -3163,98 +2653,9 @@
                 "mock",
                 "xunit"
             ],
+            "abandoned": true,
             "time": "2017-06-30T09:13:00+00:00"
         },
-        {
-            "name": "psr/http-message",
-            "version": "1.0.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/php-fig/http-message.git",
-                "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363",
-                "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.0.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Psr\\Http\\Message\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "PHP-FIG",
-                    "homepage": "http://www.php-fig.org/"
-                }
-            ],
-            "description": "Common interface for HTTP messages",
-            "homepage": "https://github.com/php-fig/http-message",
-            "keywords": [
-                "http",
-                "http-message",
-                "psr",
-                "psr-7",
-                "request",
-                "response"
-            ],
-            "time": "2016-08-06T14:39:51+00:00"
-        },
-        {
-            "name": "ralouphie/getallheaders",
-            "version": "2.0.5",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/ralouphie/getallheaders.git",
-                "reference": "5601c8a83fbba7ef674a7369456d12f1e0d0eafa"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/5601c8a83fbba7ef674a7369456d12f1e0d0eafa",
-                "reference": "5601c8a83fbba7ef674a7369456d12f1e0d0eafa",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "~3.7.0",
-                "satooshi/php-coveralls": ">=1.0"
-            },
-            "type": "library",
-            "autoload": {
-                "files": [
-                    "src/getallheaders.php"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Ralph Khattar",
-                    "email": "ralph.khattar@gmail.com"
-                }
-            ],
-            "description": "A polyfill for getallheaders.",
-            "time": "2016-02-11T07:05:27+00:00"
-        },
         {
             "name": "sebastian/code-unit-reverse-lookup",
             "version": "1.0.1",
@@ -3770,64 +3171,37 @@
         },
         {
             "name": "squizlabs/php_codesniffer",
-            "version": "2.9.2",
+            "version": "3.5.6",
             "source": {
                 "type": "git",
                 "url": "https://github.com/squizlabs/PHP_CodeSniffer.git",
-                "reference": "2acf168de78487db620ab4bc524135a13cfe6745"
+                "reference": "e97627871a7eab2f70e59166072a6b767d5834e0"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/2acf168de78487db620ab4bc524135a13cfe6745",
-                "reference": "2acf168de78487db620ab4bc524135a13cfe6745",
+                "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/e97627871a7eab2f70e59166072a6b767d5834e0",
+                "reference": "e97627871a7eab2f70e59166072a6b767d5834e0",
                 "shasum": ""
             },
             "require": {
                 "ext-simplexml": "*",
                 "ext-tokenizer": "*",
                 "ext-xmlwriter": "*",
-                "php": ">=5.1.2"
+                "php": ">=5.4.0"
             },
             "require-dev": {
-                "phpunit/phpunit": "~4.0"
+                "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0"
             },
             "bin": [
-                "scripts/phpcs",
-                "scripts/phpcbf"
+                "bin/phpcs",
+                "bin/phpcbf"
             ],
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.x-dev"
+                    "dev-master": "3.x-dev"
                 }
             },
-            "autoload": {
-                "classmap": [
-                    "CodeSniffer.php",
-                    "CodeSniffer/CLI.php",
-                    "CodeSniffer/Exception.php",
-                    "CodeSniffer/File.php",
-                    "CodeSniffer/Fixer.php",
-                    "CodeSniffer/Report.php",
-                    "CodeSniffer/Reporting.php",
-                    "CodeSniffer/Sniff.php",
-                    "CodeSniffer/Tokens.php",
-                    "CodeSniffer/Reports/",
-                    "CodeSniffer/Tokenizers/",
-                    "CodeSniffer/DocGenerators/",
-                    "CodeSniffer/Standards/AbstractPatternSniff.php",
-                    "CodeSniffer/Standards/AbstractScopeSniff.php",
-                    "CodeSniffer/Standards/AbstractVariableSniff.php",
-                    "CodeSniffer/Standards/IncorrectPatternException.php",
-                    "CodeSniffer/Standards/Generic/Sniffs/",
-                    "CodeSniffer/Standards/MySource/Sniffs/",
-                    "CodeSniffer/Standards/PEAR/Sniffs/",
-                    "CodeSniffer/Standards/PSR1/Sniffs/",
-                    "CodeSniffer/Standards/PSR2/Sniffs/",
-                    "CodeSniffer/Standards/Squiz/Sniffs/",
-                    "CodeSniffer/Standards/Zend/Sniffs/"
-                ]
-            },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
                 "BSD-3-Clause"
@@ -3839,82 +3213,25 @@
                 }
             ],
             "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.",
-            "homepage": "http://www.squizlabs.com/php-codesniffer",
+            "homepage": "https://github.com/squizlabs/PHP_CodeSniffer",
             "keywords": [
                 "phpcs",
                 "standards"
             ],
-            "time": "2018-11-07T22:31:41+00:00"
-        },
-        {
-            "name": "symfony/browser-kit",
-            "version": "v3.4.22",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/browser-kit.git",
-                "reference": "884689e5d29fc3c48498a0038e96d60e4f91b471"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/browser-kit/zipball/884689e5d29fc3c48498a0038e96d60e4f91b471",
-                "reference": "884689e5d29fc3c48498a0038e96d60e4f91b471",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^5.5.9|>=7.0.8",
-                "symfony/dom-crawler": "~2.8|~3.0|~4.0"
-            },
-            "require-dev": {
-                "symfony/css-selector": "~2.8|~3.0|~4.0",
-                "symfony/process": "~2.8|~3.0|~4.0"
-            },
-            "suggest": {
-                "symfony/process": ""
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.4-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\BrowserKit\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony BrowserKit Component",
-            "homepage": "https://symfony.com",
-            "time": "2019-01-16T09:39:14+00:00"
+            "time": "2020-08-10T04:50:15+00:00"
         },
         {
             "name": "symfony/config",
-            "version": "v3.4.22",
+            "version": "v3.4.45",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/config.git",
-                "reference": "c9bc510c217075d42d4a927e285917d0c2001cf4"
+                "reference": "d061a451ff6bc170c5454f4ac9b41ad2179e3960"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/config/zipball/c9bc510c217075d42d4a927e285917d0c2001cf4",
-                "reference": "c9bc510c217075d42d4a927e285917d0c2001cf4",
+                "url": "https://api.github.com/repos/symfony/config/zipball/d061a451ff6bc170c5454f4ac9b41ad2179e3960",
+                "reference": "d061a451ff6bc170c5454f4ac9b41ad2179e3960",
                 "shasum": ""
             },
             "require": {
@@ -3965,85 +3282,38 @@
             ],
             "description": "Symfony Config Component",
             "homepage": "https://symfony.com",
-            "time": "2019-01-30T11:33:42+00:00"
-        },
-        {
-            "name": "symfony/css-selector",
-            "version": "v3.4.22",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/css-selector.git",
-                "reference": "8ca29297c29b64fb3a1a135e71cb25f67f9fdccf"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/css-selector/zipball/8ca29297c29b64fb3a1a135e71cb25f67f9fdccf",
-                "reference": "8ca29297c29b64fb3a1a135e71cb25f67f9fdccf",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^5.5.9|>=7.0.8"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.4-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\CssSelector\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
+            "funding": [
                 {
-                    "name": "Jean-François Simon",
-                    "email": "jeanfrancois.simon@sensiolabs.com"
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
                 },
                 {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
                 },
                 {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
                 }
             ],
-            "description": "Symfony CssSelector Component",
-            "homepage": "https://symfony.com",
-            "time": "2019-01-16T09:39:14+00:00"
+            "time": "2020-09-02T16:06:40+00:00"
         },
         {
-            "name": "symfony/dom-crawler",
-            "version": "v3.4.22",
+            "name": "symfony/stopwatch",
+            "version": "v3.4.45",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/dom-crawler.git",
-                "reference": "32cb577c07bd900ee883a9d4b55d4098aa02e422"
+                "url": "https://github.com/symfony/stopwatch.git",
+                "reference": "a7a98f40dcc382a332c3729a6d04b298ffbb8f1f"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/32cb577c07bd900ee883a9d4b55d4098aa02e422",
-                "reference": "32cb577c07bd900ee883a9d4b55d4098aa02e422",
+                "url": "https://api.github.com/repos/symfony/stopwatch/zipball/a7a98f40dcc382a332c3729a6d04b298ffbb8f1f",
+                "reference": "a7a98f40dcc382a332c3729a6d04b298ffbb8f1f",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.5.9|>=7.0.8",
-                "symfony/polyfill-ctype": "~1.8",
-                "symfony/polyfill-mbstring": "~1.0"
-            },
-            "require-dev": {
-                "symfony/css-selector": "~2.8|~3.0|~4.0"
-            },
-            "suggest": {
-                "symfony/css-selector": ""
+                "php": "^5.5.9|>=7.0.8"
             },
             "type": "library",
             "extra": {
@@ -4053,7 +3323,7 @@
             },
             "autoload": {
                 "psr-4": {
-                    "Symfony\\Component\\DomCrawler\\": ""
+                    "Symfony\\Component\\Stopwatch\\": ""
                 },
                 "exclude-from-classmap": [
                     "/Tests/"
@@ -4073,87 +3343,50 @@
                     "homepage": "https://symfony.com/contributors"
                 }
             ],
-            "description": "Symfony DomCrawler Component",
+            "description": "Symfony Stopwatch Component",
             "homepage": "https://symfony.com",
-            "time": "2019-01-16T13:27:11+00:00"
-        },
-        {
-            "name": "symfony/stopwatch",
-            "version": "v3.4.22",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/stopwatch.git",
-                "reference": "2a651c2645c10bbedd21170771f122d935e0dd58"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/stopwatch/zipball/2a651c2645c10bbedd21170771f122d935e0dd58",
-                "reference": "2a651c2645c10bbedd21170771f122d935e0dd58",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^5.5.9|>=7.0.8"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.4-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\Stopwatch\\": ""
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
                 },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
                 {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
                 },
                 {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
                 }
             ],
-            "description": "Symfony Stopwatch Component",
-            "homepage": "https://symfony.com",
-            "time": "2019-01-16T09:39:14+00:00"
+            "time": "2020-03-15T09:38:08+00:00"
         },
         {
             "name": "webmozart/assert",
-            "version": "1.4.0",
+            "version": "1.9.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/webmozart/assert.git",
-                "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9"
+                "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/webmozart/assert/zipball/83e253c8e0be5b0257b881e1827274667c5c17a9",
-                "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9",
+                "url": "https://api.github.com/repos/webmozart/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389",
+                "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.3.3 || ^7.0",
+                "php": "^5.3.3 || ^7.0 || ^8.0",
                 "symfony/polyfill-ctype": "^1.8"
             },
+            "conflict": {
+                "phpstan/phpstan": "<0.12.20",
+                "vimeo/psalm": "<3.9.1"
+            },
             "require-dev": {
-                "phpunit/phpunit": "^4.6",
-                "sebastian/version": "^1.0.1"
+                "phpunit/phpunit": "^4.8.36 || ^7.5.13"
             },
             "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.3-dev"
-                }
-            },
             "autoload": {
                 "psr-4": {
                     "Webmozart\\Assert\\": "src/"
@@ -4175,7 +3408,7 @@
                 "check",
                 "validate"
             ],
-            "time": "2018-12-25T11:19:39+00:00"
+            "time": "2020-07-08T17:02:28+00:00"
         }
     ],
     "aliases": [],
@@ -4189,5 +3422,6 @@
     "platform-dev": [],
     "platform-overrides": {
         "php": "5.6.3"
-    }
+    },
+    "plugin-api-version": "1.1.0"
 }
diff --git a/vendor/consolidation/robo/phpunit.xml b/vendor/consolidation/robo/phpunit.xml.dist
similarity index 77%
rename from vendor/consolidation/robo/phpunit.xml
rename to vendor/consolidation/robo/phpunit.xml.dist
index b2d8394aa3230e3e7f2e7a09ee08b562629ee753..f7925d2dc7a91502f413593299e691195667c12f 100644
--- a/vendor/consolidation/robo/phpunit.xml
+++ b/vendor/consolidation/robo/phpunit.xml.dist
@@ -24,6 +24,15 @@
         <ini name="error_reporting" value="E_ALL" />
     </php>
 
+    <testsuites>
+        <testsuite name="integration">
+            <directory prefix="" suffix="Test.php">tests/integration</directory>
+        </testsuite>
+        <testsuite name="unit">
+            <directory prefix="" suffix="Test.php">tests/phpunit</directory>
+        </testsuite>
+    </testsuites>
+
     <filter>
         <whitelist processUncoveredFilesFromWhitelist="true">
             <directory suffix=".php">./src</directory>
diff --git a/vendor/consolidation/robo/src/Application.php b/vendor/consolidation/robo/src/Application.php
index 6e9bc0dcd8ad7ced9bca6b0124a0717fe6d5b80b..388f1512f57e63d4c3ba25a06d07769bfd6906a8 100644
--- a/vendor/consolidation/robo/src/Application.php
+++ b/vendor/consolidation/robo/src/Application.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo;
 
 use SelfUpdate\SelfUpdateCommand;
@@ -42,7 +43,7 @@ public function addInitRoboFileCommand($roboFile, $roboClass)
         $createRoboFile->setCode(function () use ($roboClass, $roboFile) {
             $output = Robo::output();
             $output->writeln("<comment>  ~~~ Welcome to Robo! ~~~~ </comment>");
-            $output->writeln("<comment>  ". basename($roboFile) ." will be created in the current directory </comment>");
+            $output->writeln("<comment>  " . basename($roboFile) . " will be created in the current directory </comment>");
             file_put_contents(
                 $roboFile,
                 '<?php'
@@ -61,7 +62,8 @@ public function addInitRoboFileCommand($roboFile, $roboClass)
     /**
      * Add self update command, do nothing if null is provided
      *
-     * @param string $repository GitHub Repository for self update
+     * @param string $repository
+     *   GitHub Repository for self update.
      */
     public function addSelfUpdateCommand($repository = null)
     {
diff --git a/vendor/consolidation/robo/src/ClassDiscovery/ClassDiscoveryInterface.php b/vendor/consolidation/robo/src/ClassDiscovery/ClassDiscoveryInterface.php
index ebbb6727287349d0e36859faed8661b6beb34e77..31c1f6ca78946e23970cd2d47981dc7994e8155d 100644
--- a/vendor/consolidation/robo/src/ClassDiscovery/ClassDiscoveryInterface.php
+++ b/vendor/consolidation/robo/src/ClassDiscovery/ClassDiscoveryInterface.php
@@ -10,7 +10,7 @@
 interface ClassDiscoveryInterface
 {
     /**
-     * @param $searchPattern
+     * @param string $searchPattern
      *
      * @return $this
      */
@@ -22,7 +22,7 @@ public function setSearchPattern($searchPattern);
     public function getClasses();
 
     /**
-     * @param $class
+     * @param string $class
      *
      * @return string|null
      */
diff --git a/vendor/consolidation/robo/src/ClassDiscovery/RelativeNamespaceDiscovery.php b/vendor/consolidation/robo/src/ClassDiscovery/RelativeNamespaceDiscovery.php
index 766de3a4d7c5365fae8d201b44fe729be9619846..762dcf1aa9cea561361fcc8910d9231cd34f3dbb 100644
--- a/vendor/consolidation/robo/src/ClassDiscovery/RelativeNamespaceDiscovery.php
+++ b/vendor/consolidation/robo/src/ClassDiscovery/RelativeNamespaceDiscovery.php
@@ -35,7 +35,7 @@ public function __construct(ClassLoader $classLoader)
     /**
      * @param string $relativeNamespace
      *
-     * @return RelativeNamespaceDiscovery
+     * @return $this
      */
     public function setRelativeNamespace($relativeNamespace)
     {
@@ -45,7 +45,7 @@ public function setRelativeNamespace($relativeNamespace)
     }
 
     /**
-     * @inheritDoc
+     * {@inheritDoc}
      */
     public function getClasses()
     {
@@ -54,13 +54,13 @@ public function getClasses()
 
         foreach ($this->classLoader->getPrefixesPsr4() as $baseNamespace => $directories) {
             $directories = array_filter(array_map(function ($directory) use ($relativePath) {
-                return $directory.$relativePath;
+                return $directory . $relativePath;
             }, $directories), 'is_dir');
 
             if ($directories) {
                 foreach ($this->search($directories, $this->searchPattern) as $file) {
                     $relativePathName = $file->getRelativePathname();
-                    $classes[] = $baseNamespace.$this->convertPathToNamespace($relativePath.'/'.$relativePathName);
+                    $classes[] = $baseNamespace . $this->convertPathToNamespace($relativePath . '/' . $relativePathName);
                 }
             }
         }
@@ -77,8 +77,8 @@ public function getFile($class)
     }
 
     /**
-     * @param $directories
-     * @param $pattern
+     * @param string|array $directories
+     * @param string $pattern
      *
      * @return \Symfony\Component\Finder\Finder
      */
@@ -93,9 +93,9 @@ protected function search($directories, $pattern)
     }
 
     /**
-     * @param $path
+     * @param string $path
      *
-     * @return mixed
+     * @return string
      */
     protected function convertPathToNamespace($path)
     {
@@ -103,10 +103,12 @@ protected function convertPathToNamespace($path)
     }
 
     /**
+     * @param string $namespace
+     *
      * @return string
      */
     public function convertNamespaceToPath($namespace)
     {
-        return '/'.str_replace("\\", '/', trim($namespace, '\\'));
+        return '/' . str_replace("\\", '/', trim($namespace, '\\'));
     }
 }
diff --git a/vendor/consolidation/robo/src/Collection/CallableTask.php b/vendor/consolidation/robo/src/Collection/CallableTask.php
index ae9c54fc517d380d73ae79ecdb00713abdfe9af7..6d511501e667a75493258df070df2f9a6dbe813c 100644
--- a/vendor/consolidation/robo/src/Collection/CallableTask.php
+++ b/vendor/consolidation/robo/src/Collection/CallableTask.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Collection;
 
 use Robo\Result;
@@ -32,7 +33,7 @@ public function __construct(callable $fn, TaskInterface $reference)
     }
 
     /**
-     * @return \Robo\Result
+     * {@inheritdoc}
      */
     public function run()
     {
@@ -52,6 +53,9 @@ public function run()
         return $result;
     }
 
+    /**
+     * @return \Robo\State\Data
+     */
     public function getState()
     {
         if ($this->reference instanceof StateAwareInterface) {
diff --git a/vendor/consolidation/robo/src/Collection/Collection.php b/vendor/consolidation/robo/src/Collection/Collection.php
index e3e34796b9c6f85f7377ea7248c7d68b62831876..17a699b4a5bc693d371e146d01303d7cb1a3e933 100644
--- a/vendor/consolidation/robo/src/Collection/Collection.php
+++ b/vendor/consolidation/robo/src/Collection/Collection.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Collection;
 
 use Robo\Exception\AbortTasksException;
@@ -13,7 +14,6 @@
 use Robo\Exception\TaskException;
 use Robo\Exception\TaskExitException;
 use Robo\Contract\CommandInterface;
-
 use Robo\Contract\InflectionInterface;
 use Robo\State\StateAwareInterface;
 use Robo\State\StateAwareTrait;
@@ -42,17 +42,17 @@ class Collection extends BaseTask implements CollectionInterface, CommandInterfa
     protected $taskList = [];
 
     /**
-     * @var TaskInterface[]
+     * @var \Robo\Contract\TaskInterface[]
      */
     protected $rollbackStack = [];
 
     /**
-     * @var TaskInterface[]
+     * @var \Robo\Contract\TaskInterface[]
      */
     protected $completionStack = [];
 
     /**
-     * @var CollectionInterface
+     * @var \Robo\Collection\CollectionInterface
      */
     protected $parentCollection;
 
@@ -74,6 +74,9 @@ public function __construct()
         $this->resetState();
     }
 
+    /**
+     * @param int $interval
+     */
     public function setProgressBarAutoDisplayInterval($interval)
     {
         if (!$this->progressIndicator) {
@@ -209,7 +212,7 @@ function () use ($collection, $rollbackTask) {
      *
      * @param string $method
      * @param string $name
-     * @param callable|TaskInterface $task
+     * @param callable|\Robo\Contract\TaskInterface $task
      * @param string $nameOfTaskToAdd
      *
      * @return $this
@@ -280,7 +283,7 @@ public function ignoreErrorsCodeWrapper(callable $task)
     /**
      * Return the list of task names added to this collection.
      *
-     * @return array
+     * @return string[]
      */
     public function taskNames()
     {
@@ -308,7 +311,7 @@ public function hasTask($name)
      * @param string $name
      *   The name of the task to insert before.  The named task MUST exist.
      *
-     * @return Element
+     * @return \Robo\Collection\Element
      *   The task group for the named task. Generally this is only
      *   used to call 'before()' and 'after()'.
      */
@@ -323,7 +326,7 @@ protected function namedTask($name)
     /**
      * Add a list of tasks to our task collection.
      *
-     * @param TaskInterface[] $tasks
+     * @param \Robo\Contract\TaskInterface[] $tasks
      *   An array of tasks to run with rollback protection
      *
      * @return $this
@@ -342,7 +345,7 @@ public function addTaskList(array $tasks)
      * @param string $name
      * @param \Robo\Contract\TaskInterface $task
      *
-     * @return \Robo\Collection\Collection
+     * @return $this
      */
     protected function addToTaskList($name, TaskInterface $task)
     {
@@ -392,7 +395,7 @@ public function setParentCollection(NestedCollectionInterface $parentCollection)
     /**
      * Get the appropriate parent collection to use
      *
-     * @return CollectionInterface
+     * @return \Robo\Collection\CollectionInterface|$this
      */
     public function getParentCollection()
     {
@@ -413,8 +416,10 @@ public function getParentCollection()
      * function directly is to add a task that sends notification
      * when a task fails.
      *
-     * @param TaskInterface $rollbackTask
+     * @param \Robo\Contract\TaskInterface $rollbackTask
      *   The rollback task to run on failure.
+     *
+     * @return null
      */
     public function registerRollback(TaskInterface $rollbackTask)
     {
@@ -441,8 +446,10 @@ public function registerRollback(TaskInterface $rollbackTask)
      * the nested task completes; they are not deferred to the end of
      * the containing collection's execution.
      *
-     * @param TaskInterface $completionTask
+     * @param \Robo\Contract\TaskInterface $completionTask
      *   The completion task to run at the end of all other operations.
+     *
+     * @return null
      */
     public function registerCompletion(TaskInterface $completionTask)
     {
@@ -547,7 +554,7 @@ private function runWithoutCompletion()
      * Return the failing result, or success if all tasks run.
      *
      * @param string $name
-     * @param TaskInterface[] $taskList
+     * @param \Robo\Contract\TaskInterface[] $taskList
      * @param \Robo\Result $result
      *
      * @return \Robo\Result
@@ -641,7 +648,7 @@ protected function runRollbackTasks()
     }
 
     /**
-     * @param TaskInterface|NestedCollectionInterface|WrappedTaskInterface $task
+     * @param \Robo\Contract\TaskInterface|\Robo\Collection\NestedCollectionInterface|\Robo\Contract\WrappedTaskInterface $task
      *
      * @return \Robo\Result
      */
@@ -662,6 +669,10 @@ protected function runSubtask($task)
         return $taskResult;
     }
 
+    /**
+     * @param \Robo\Contract\TaskInterface $task
+     * @param \Robo\State\Data $taskResult
+     */
     protected function doStateUpdates($task, Data $taskResult)
     {
         $this->updateState($taskResult);
@@ -674,6 +685,13 @@ protected function doStateUpdates($task, Data $taskResult)
         }
     }
 
+    /**
+     * @param \Robo\Contract\TaskInterface $task
+     * @param string $key
+     * @param string $source
+     *
+     * @return $this
+     */
     public function storeState($task, $key, $source = '')
     {
         $this->messageStoreKeys[spl_object_hash($task)] = [$key, $source];
@@ -681,6 +699,13 @@ public function storeState($task, $key, $source = '')
         return $this;
     }
 
+    /**
+     * @param \Robo\Contract\TaskInterface $task
+     * @param string $functionName
+     * @param string $stateKey
+     *
+     * @return $this
+     */
     public function deferTaskConfiguration($task, $functionName, $stateKey)
     {
         return $this->defer(
@@ -698,6 +723,11 @@ function ($task, $state) use ($functionName, $stateKey) {
      * runs. Use this time to provide more settings for the task, e.g. from
      * the collection's shared state, which is populated with the results
      * of previous test runs.
+     *
+     * @param \Robo\Contract\TaskInterface $task
+     * @param callable $callback
+     *
+     * @return $this
      */
     public function defer($task, $callback)
     {
@@ -706,6 +736,9 @@ public function defer($task, $callback)
         return $this;
     }
 
+    /**
+     * @param \Robo\Contract\TaskInterface $task
+     */
     protected function doDeferredInitialization($task)
     {
         // If the task is a state consumer, then call its receiveState method
@@ -727,7 +760,7 @@ protected function doDeferredInitialization($task)
 
     /**
      * @param TaskInterface|NestedCollectionInterface|WrappedTaskInterface $task
-     * @param $parentCollection
+     * @param \Robo\Collection\CollectionInterface $parentCollection
      */
     protected function setParentCollectionForTask($task, $parentCollection)
     {
@@ -744,7 +777,7 @@ protected function setParentCollectionForTask($task, $parentCollection)
      *
      * This is used to roll back or complete.
      *
-     * @param TaskInterface[] $taskList
+     * @param \Robo\Contract\TaskInterface[] $taskList
      */
     protected function runTaskListIgnoringFailures(array $taskList)
     {
@@ -766,7 +799,7 @@ protected function runTaskListIgnoringFailures(array $taskList)
     /**
      * Give all of our tasks to the provided collection builder.
      *
-     * @param CollectionBuilder $builder
+     * @param \Robo\Collection\CollectionBuilder $builder
      */
     public function transferTasks($builder)
     {
diff --git a/vendor/consolidation/robo/src/Collection/CollectionBuilder.php b/vendor/consolidation/robo/src/Collection/CollectionBuilder.php
index 3e037b01e98cf5473d1c7360631c19a4460e9bea..5b4ecde8ff254c4e95fa3b4d94148c4f7749df12 100644
--- a/vendor/consolidation/robo/src/Collection/CollectionBuilder.php
+++ b/vendor/consolidation/robo/src/Collection/CollectionBuilder.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Collection;
 
 use Consolidation\Config\Inject\ConfigForSetters;
@@ -55,12 +56,12 @@ class CollectionBuilder extends BaseTask implements NestedCollectionInterface, W
     protected $commandFile;
 
     /**
-     * @var CollectionInterface
+     * @var \Robo\Collection\CollectionInterface
      */
     protected $collection;
 
     /**
-     * @var TaskInterface
+     * @var \Robo\Contract\TaskInterface
      */
     protected $currentTask;
 
@@ -78,6 +79,12 @@ public function __construct($commandFile)
         $this->resetState();
     }
 
+    /**
+     * @param \League\Container\ContainerInterface $container
+     * @param \Robo\Tasks $commandFile
+     *
+     * @return static
+     */
     public static function create($container, $commandFile)
     {
         $builder = new self($commandFile);
@@ -141,8 +148,9 @@ public function tmpDir($prefix = 'tmp', $base = '', $includeRandomPart = true)
      * any results already in place will be moved out of the way and
      * then deleted.
      *
-     * @param string $finalDestination The path where the working directory
-     *   will be moved once the task collection completes.
+     * @param string $finalDestination
+     *   The path where the working directory will be moved once the task
+     *   collection completes.
      *
      * @return string
      */
@@ -152,6 +160,9 @@ public function workDir($finalDestination)
         return $this->taskWorkDir($finalDestination)->getPath();
     }
 
+    /**
+     * @return $this
+     */
     public function addTask(TaskInterface $task)
     {
         $this->getCollection()->add($task);
@@ -165,6 +176,7 @@ public function addTask(TaskInterface $task)
    *
    * @param callable $code
    * @param int|string $name
+   *
    * @return $this
    */
     public function addCode(callable $code, $name = \Robo\Collection\CollectionInterface::UNNAMEDTASK)
@@ -176,7 +188,7 @@ public function addCode(callable $code, $name = \Robo\Collection\CollectionInter
     /**
      * Add a list of tasks to our task collection.
      *
-     * @param TaskInterface[] $tasks
+     * @param \Robo\Contract\TaskInterface[] $tasks
      *   An array of tasks to run with rollback protection
      *
      * @return $this
@@ -187,6 +199,9 @@ public function addTaskList(array $tasks)
         return $this;
     }
 
+    /**
+     * @return $this
+     */
     public function rollback(TaskInterface $task)
     {
         // Ensure that we have a collection if we are going to add
@@ -195,18 +210,27 @@ public function rollback(TaskInterface $task)
         return $this;
     }
 
+    /**
+     * @return $this
+     */
     public function rollbackCode(callable $rollbackCode)
     {
         $this->getCollection()->rollbackCode($rollbackCode);
         return $this;
     }
 
+    /**
+     * @return $this
+     */
     public function completion(TaskInterface $task)
     {
         $this->getCollection()->completion($task);
         return $this;
     }
 
+    /**
+     * @return $this
+     */
     public function completionCode(callable $completionCode)
     {
         $this->getCollection()->completionCode($completionCode);
@@ -227,8 +251,6 @@ public function progressMessage($text, $context = [], $level = LogLevel::NOTICE)
     }
 
     /**
-     * @param \Robo\Collection\NestedCollectionInterface $parentCollection
-     *
      * @return $this
      */
     public function setParentCollection(NestedCollectionInterface $parentCollection)
@@ -243,7 +265,7 @@ public function setParentCollection(NestedCollectionInterface $parentCollection)
      *
      * TODO: protected
      *
-     * @param TaskInterface $task
+     * @param \Robo\Contract\TaskInterface $task
      *
      * @return $this
      */
@@ -265,28 +287,54 @@ public function addTaskToCollection($task)
         return $this;
     }
 
+    /**
+     * @return \Robo\State\Data
+     */
     public function getState()
     {
         $collection = $this->getCollection();
         return $collection->getState();
     }
 
+    /**
+     * @param int|string $key
+     * @param mixed $source
+     *
+     * @return $this
+     */
     public function storeState($key, $source = '')
     {
-        return $this->callCollectionStateFuntion(__FUNCTION__, func_get_args());
+        return $this->callCollectionStateFunction(__FUNCTION__, func_get_args());
     }
 
+    /**
+     * @param string $functionName
+     * @param int|string $stateKey
+     *
+     * @return $this
+     */
     public function deferTaskConfiguration($functionName, $stateKey)
     {
-        return $this->callCollectionStateFuntion(__FUNCTION__, func_get_args());
+        return $this->callCollectionStateFunction(__FUNCTION__, func_get_args());
     }
 
+    /**
+     * @param callable$callback
+     *
+     * @return $this
+     */
     public function defer($callback)
     {
-        return $this->callCollectionStateFuntion(__FUNCTION__, func_get_args());
+        return $this->callCollectionStateFunction(__FUNCTION__, func_get_args());
     }
 
-    protected function callCollectionStateFuntion($functionName, $args)
+    /**
+     * @param string $functionName
+     * @param array $args
+     *
+     * @return $this
+     */
+    protected function callCollectionStateFunction($functionName, $args)
     {
         $currentTask = ($this->currentTask instanceof WrappedTaskInterface) ? $this->currentTask->original() : $this->currentTask;
 
@@ -298,6 +346,24 @@ protected function callCollectionStateFuntion($functionName, $args)
         return $this;
     }
 
+    /**
+     * @param string $functionName
+     * @param array $args
+     *
+     * @return $this
+     *
+     * @deprecated Use ::callCollectionStateFunction() instead.
+     */
+    protected function callCollectionStateFuntion($functionName, $args)
+    {
+        return $this->callCollectionStateFunction($functionName, $args);
+    }
+
+    /**
+     * @param int $verbosityThreshold
+     *
+     * @return $this
+     */
     public function setVerbosityThreshold($verbosityThreshold)
     {
         $currentTask = ($this->currentTask instanceof WrappedTaskInterface) ? $this->currentTask->original() : $this->currentTask;
@@ -324,7 +390,7 @@ public function getCollectionBuilderCurrentTask()
     /**
      * Create a new builder with its own task collection
      *
-     * @return CollectionBuilder
+     * @return \Robo\Collection\CollectionBuilder
      */
     public function newBuilder()
     {
@@ -413,14 +479,14 @@ public function __call($fn, $args)
      * @param string|object $name
      * @param array $args
      *
-     * @return \Robo\Collection\CollectionBuilder
+     * @return $this
      */
     public function build($name, $args)
     {
         $reflection = new ReflectionClass($name);
         $task = $reflection->newInstanceArgs($args);
         if (!$task) {
-            throw new RuntimeException("Can not construct task $name");
+            throw new \RuntimeException("Can not construct task $name");
         }
         $task = $this->fixTask($task, $args);
         $this->configureTask($name, $task);
@@ -428,7 +494,7 @@ public function build($name, $args)
     }
 
     /**
-     * @param InflectionInterface $task
+     * @param \Robo\Contract\TaskInterface $task
      * @param array $args
      *
      * @return \Robo\Collection\CompletionWrapper|\Robo\Task\Simulator
@@ -479,6 +545,9 @@ protected function fixTask($task, $args)
     /**
      * Check to see if there are any setter methods defined in configuration
      * for this task.
+     *
+     * @param string $taskClass
+     * @param \Robo\Contract\TaskInterface $task
      */
     protected function configureTask($taskClass, $task)
     {
@@ -526,7 +595,7 @@ protected function runTasks()
     }
 
     /**
-     * @return string
+     * {@inheritdoc}
      */
     public function getCommand()
     {
@@ -542,7 +611,7 @@ public function getCommand()
     }
 
     /**
-     * @return \Robo\Collection\Collection
+     * @return \Robo\Collection\CollectionInterface
      */
     public function original()
     {
@@ -552,7 +621,7 @@ public function original()
     /**
      * Return the collection of tasks associated with this builder.
      *
-     * @return CollectionInterface
+     * @return \Robo\Collection\CollectionInterface
      */
     public function getCollection()
     {
diff --git a/vendor/consolidation/robo/src/Collection/CollectionInterface.php b/vendor/consolidation/robo/src/Collection/CollectionInterface.php
index 173ca169cc7d52b588349011e2ce834d6718789e..5bed6f3aa78f5b2d138319980d05fef057bab298 100644
--- a/vendor/consolidation/robo/src/Collection/CollectionInterface.php
+++ b/vendor/consolidation/robo/src/Collection/CollectionInterface.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Collection;
 
 use Psr\Log\LogLevel;
@@ -23,20 +24,21 @@ interface CollectionInterface extends NestedCollectionInterface
      * method ONLY if its 'run()' method completes successfully, and some
      * task added after it fails.
      *
-     * @param TaskInterface $task
+     * @param \Robo\Contract\TaskInterface $task
      *   The task to add to our collection.
      * @param int|string $name
      *   An optional name for the task -- missing or UNNAMEDTASK for unnamed tasks.
      *   Names are used for positioning before and after tasks.
      *
-     * @return CollectionInterface
+     * @return $this
      */
     public function add(TaskInterface $task, $name = self::UNNAMEDTASK);
 
     /**
      * Add arbitrary code to execute as a task.
      *
-     * @param callable $code Code to execute as a task
+     * @param callable $code
+     *   Code to execute as a task
      * @param int|string $name
      *   An optional name for the task -- missing or UNNAMEDTASK for unnamed tasks.
      *   Names are used for positioning before and after tasks.
@@ -51,8 +53,10 @@ public function addCode(callable $code, $name = self::UNNAMEDTASK);
      * provided callback is a TaskInterface or Collection, then it will be
      * executed.
      *
-     * @param CollectionInterface|array $iterable A collection of things to iterate
-     * @param $code $code A callback function to call for each item in the collection.
+     * @param static|array $iterable
+     *   A collection of things to iterate.
+     * @param callable $code
+     *   A callback function to call for each item in the collection.
      *
      * @return $this
      */
@@ -63,7 +67,7 @@ public function addIterable($iterable, callable $code);
      * will execute ONLY if all of the tasks added before it complete
      * successfully, AND some task added after it fails.
      *
-     * @param TaskInterface $rollbackTask
+     * @param \Robo\Contract\TaskInterface $rollbackTask
      *   The rollback task to add.  Note that the 'run()' method of the
      *   task executes, not its 'rollback()' method.  To use the 'rollback()'
      *   method, add the task via 'Collection::add()' instead.
@@ -75,7 +79,8 @@ public function rollback(TaskInterface $rollbackTask);
     /**
      * Add arbitrary code to execute as a rollback.
      *
-     * @param callable $rollbackTask Code to execute during rollback processing
+     * @param callable $rollbackTask
+     *   Code to execute during rollback processing.
      *
      * @return $this
      */
@@ -87,7 +92,7 @@ public function rollbackCode(callable $rollbackTask);
      * any task fails.  Completion tasks never cause errors to be returned
      * from Collection::run(), even if they fail.
      *
-     * @param TaskInterface $completionTask
+     * @param \Robo\Contract\TaskInterface $completionTask
      *   The completion task to add.  Note that the 'run()' method of the
      *   task executes, just as if the task was added normally.
      *
@@ -98,7 +103,8 @@ public function completion(TaskInterface $completionTask);
     /**
      * Add arbitrary code to execute as a completion.
      *
-     * @param callable $completionTask Code to execute after collection completes
+     * @param callable $completionTask
+     *   Code to execute after collection completes
      *
      * @return $this
      */
@@ -109,7 +115,7 @@ public function completionCode(callable $completionTask);
      *
      * @param string $name
      *   The name of the task to insert before.  The named task MUST exist.
-     * @param callable|TaskInterface $task
+     * @param callable|\Robo\Contract\TaskInterface $task
      *   The task to add.
      * @param int|string $nameOfTaskToAdd
      *   The name of the task to add. If not provided, will be associated
@@ -124,7 +130,7 @@ public function before($name, $task, $nameOfTaskToAdd = self::UNNAMEDTASK);
      *
      * @param string $name
      *   The name of the task to insert before.  The named task MUST exist.
-     * @param callable|TaskInterface $task
+     * @param callable|\Robo\Contract\TaskInterface $task
      *   The task to add.
      * @param int|string $nameOfTaskToAdd
      *   The name of the task to add. If not provided, will be associated
@@ -140,10 +146,13 @@ public function after($name, $task, $nameOfTaskToAdd = self::UNNAMEDTASK);
      * method was called. If one of the previous tasks fail, then this
      * message will not be printed.
      *
-     * @param string $text Message to print.
-     * @param array $context Extra context data for use by the logger. Note
+     * @param string $text
+     *   Message to print.
+     * @param array $context
+     *   Extra context data for use by the logger. Note
      *   that the data from the collection state is merged with the provided context.
-     * @param \Psr\Log\LogLevel|string $level The log level to print the information at. Default is NOTICE.
+     * @param \Psr\Log\LogLevel|string $level
+     *   The log level to print the information at. Default is NOTICE.
      *
      * @return $this
      */
diff --git a/vendor/consolidation/robo/src/Collection/CollectionProcessHook.php b/vendor/consolidation/robo/src/Collection/CollectionProcessHook.php
index 91efde747163d42c4cc384e1dbbc875ce7747585..e30a5a2c92a02e12604656c7d6e44154e214a1dc 100644
--- a/vendor/consolidation/robo/src/Collection/CollectionProcessHook.php
+++ b/vendor/consolidation/robo/src/Collection/CollectionProcessHook.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Collection;
 
 use Consolidation\AnnotatedCommand\Hooks\ProcessResultInterface;
@@ -17,7 +18,7 @@
 class CollectionProcessHook implements ProcessResultInterface
 {
     /**
-     * @param \Robo\Result|\Robo\Contract\TaskInterface $result
+     * @param \Robo\Contract\TaskInterface|mixed $result
      * @param \Consolidation\AnnotatedCommand\CommandData $commandData
      *
      * @return null|\Robo\Result
diff --git a/vendor/consolidation/robo/src/Collection/CompletionWrapper.php b/vendor/consolidation/robo/src/Collection/CompletionWrapper.php
index 3e81bd91cb723d69f322098372168ee9568caae1..d19a789879b9f687f43627abcae8cc6abc254d3b 100644
--- a/vendor/consolidation/robo/src/Collection/CompletionWrapper.php
+++ b/vendor/consolidation/robo/src/Collection/CompletionWrapper.php
@@ -52,7 +52,7 @@ class CompletionWrapper extends BaseTask implements WrappedTaskInterface
      *
      * @param \Robo\Collection\Collection $collection
      * @param \Robo\Contract\TaskInterface $task
-     * @param \Robo\Contract\TaskInterface|NULL $rollbackTask
+     * @param \Robo\Contract\TaskInterface|null $rollbackTask
      */
     public function __construct(Collection $collection, TaskInterface $task, TaskInterface $rollbackTask = null)
     {
diff --git a/vendor/consolidation/robo/src/Collection/Element.php b/vendor/consolidation/robo/src/Collection/Element.php
index b67b56bbd087585b247f8a4226c6a68492ba0306..074c05636c716c3f2b04dc40e1fcb69e6db2b1c9 100644
--- a/vendor/consolidation/robo/src/Collection/Element.php
+++ b/vendor/consolidation/robo/src/Collection/Element.php
@@ -20,12 +20,12 @@ class Element
     protected $task;
 
     /**
-     * @var array
+     * @var \Robo\Contract\TaskInterface[]|callable[]
      */
     protected $before = [];
 
     /**
-     * @var array
+     * @var \Robo\Contract\TaskInterface[]|callable[]
      */
     protected $after = [];
 
@@ -35,7 +35,7 @@ public function __construct(TaskInterface $task)
     }
 
     /**
-     * @param mixed $before
+     * @param \Robo\Contract\TaskInterface|callable $before
      * @param string $name
      */
     public function before($before, $name)
@@ -48,7 +48,7 @@ public function before($before, $name)
     }
 
     /**
-     * @param mixed $after
+     * @param \Robo\Contract\TaskInterface|callable $after
      * @param string $name
      */
     public function after($after, $name)
@@ -61,7 +61,7 @@ public function after($after, $name)
     }
 
     /**
-     * @return array
+     * @return \Robo\Contract\TaskInterface[]|callable[]
      */
     public function getBefore()
     {
@@ -69,7 +69,7 @@ public function getBefore()
     }
 
     /**
-     * @return array
+     * @return \Robo\Contract\TaskInterface[]|callable[]
      */
     public function getAfter()
     {
@@ -85,7 +85,7 @@ public function getTask()
     }
 
     /**
-     * @return array
+     * @return \Robo\Contract\TaskInterface[]|callable[]
      */
     public function getTaskList()
     {
diff --git a/vendor/consolidation/robo/src/Collection/NestedCollectionInterface.php b/vendor/consolidation/robo/src/Collection/NestedCollectionInterface.php
index 5e32cf37ab63bc5bb29f8d55bafa7d0dc1feb1ea..dad29888fdb060d7d2e8075638556302e055c28b 100644
--- a/vendor/consolidation/robo/src/Collection/NestedCollectionInterface.php
+++ b/vendor/consolidation/robo/src/Collection/NestedCollectionInterface.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Collection;
 
 interface NestedCollectionInterface
diff --git a/vendor/consolidation/robo/src/Collection/TaskForEach.php b/vendor/consolidation/robo/src/Collection/TaskForEach.php
index 030e50890baff7f4b36266472d9c6a9165997545..a7396b46a1acc15dbff7098333fbfe553f265ea8 100644
--- a/vendor/consolidation/robo/src/Collection/TaskForEach.php
+++ b/vendor/consolidation/robo/src/Collection/TaskForEach.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Collection;
 
 use Robo\Result;
@@ -110,7 +111,7 @@ public function withEachKeyValueCall(callable $fn)
     /**
      * @param callable $fn
      *
-     * @return \Robo\Collection\TaskForEach
+     * @return $this
      */
     public function call(callable $fn)
     {
@@ -124,7 +125,7 @@ function ($key, $value) use ($fn) {
     /**
      * @param callable $fn
      *
-     * @return \Robo\Collection\TaskForEach
+     * @return $this
      */
     public function withBuilder(callable $fn)
     {
diff --git a/vendor/consolidation/robo/src/Collection/Temporary.php b/vendor/consolidation/robo/src/Collection/Temporary.php
index dad25e34cedc3d6718b4eefdb76e01f915cea4b5..9b1352a3dc2facdd339ed256cde78e8eb17d08ad 100644
--- a/vendor/consolidation/robo/src/Collection/Temporary.php
+++ b/vendor/consolidation/robo/src/Collection/Temporary.php
@@ -25,10 +25,16 @@
  */
 class Temporary
 {
+
+    /**
+     * @var \Robo\Collection\Collection
+     */
     private static $collection;
 
     /**
      * Provides direct access to the collection of temporaries, if necessary.
+     *
+     * @return \Robo\Collection\Collection
      */
     public static function getCollection()
     {
diff --git a/vendor/consolidation/robo/src/Collection/loadTasks.php b/vendor/consolidation/robo/src/Collection/loadTasks.php
index 63a872990e7266676df0fe9403bec897f1289d51..19d5dd841efbe392fe647050cf56c865a79cb00f 100644
--- a/vendor/consolidation/robo/src/Collection/loadTasks.php
+++ b/vendor/consolidation/robo/src/Collection/loadTasks.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Collection;
 
 trait loadTasks
diff --git a/vendor/consolidation/robo/src/Common/CommandArguments.php b/vendor/consolidation/robo/src/Common/CommandArguments.php
index 12c2e89fd2badf9ba0c653e3694be2663d2116c5..276b82b083cb325ad564d7ce61a24b1a2364aa4a 100644
--- a/vendor/consolidation/robo/src/Common/CommandArguments.php
+++ b/vendor/consolidation/robo/src/Common/CommandArguments.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Common;
 
 use Robo\Common\ProcessUtils;
@@ -35,8 +36,9 @@ public function arg($arg)
      */
     public function args($args)
     {
+        $func_args = func_get_args();
         if (!is_array($args)) {
-            $args = func_get_args();
+            $args = $func_args;
         }
         $this->arguments .= ' ' . implode(' ', array_map('static::escape', $args));
         return $this;
@@ -96,6 +98,11 @@ public function option($option, $value = null, $separator = ' ')
      * Pass multiple options to executable. The associative array contains
      * the key:value pairs that become `--key value`, for each item in the array.
      * Values are automatically escaped.
+     *
+     * @param array $options
+     * @param string $separator
+     *
+     * @return $this
      */
     public function options(array $options, $separator = ' ')
     {
diff --git a/vendor/consolidation/robo/src/Common/CommandReceiver.php b/vendor/consolidation/robo/src/Common/CommandReceiver.php
index 03b20fced191d4224bcaf62cd5e324d7a838130a..091aa6c5cf938ec0a0ff8523646a9239aff2f069 100644
--- a/vendor/consolidation/robo/src/Common/CommandReceiver.php
+++ b/vendor/consolidation/robo/src/Common/CommandReceiver.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Common;
 
 use Robo\Contract\CommandInterface;
diff --git a/vendor/consolidation/robo/src/Common/ConfigAwareTrait.php b/vendor/consolidation/robo/src/Common/ConfigAwareTrait.php
index 74b48f073b73e8228e18c642fd97476e576d68ea..c70d1581fae32503bfe3e426584a90d67bb923e0 100644
--- a/vendor/consolidation/robo/src/Common/ConfigAwareTrait.php
+++ b/vendor/consolidation/robo/src/Common/ConfigAwareTrait.php
@@ -8,14 +8,14 @@
 trait ConfigAwareTrait
 {
     /**
-     * @var ConfigInterface
+     * @var \Consolidation\Config\ConfigInterface
      */
     protected $config;
 
     /**
      * Set the config management object.
      *
-     * @param ConfigInterface $config
+     * @param \Consolidation\Config\ConfigInterface $config
      *
      * @return $this
      */
@@ -29,7 +29,7 @@ public function setConfig(ConfigInterface $config)
     /**
      * Get the config management object.
      *
-     * @return \Robo\Config\Config
+     * @return \Consolidation\Config\ConfigInterface
      */
     public function getConfig()
     {
@@ -79,7 +79,7 @@ private static function getClassKey($key)
     /**
      * @param string $key
      * @param mixed $value
-     * @param Config|null $config
+     * @param \Consolidation\Config\ConfigInterface|null $config
      */
     public static function configure($key, $value, $config = null)
     {
diff --git a/vendor/consolidation/robo/src/Common/DynamicParams.php b/vendor/consolidation/robo/src/Common/DynamicParams.php
index 28a1d150f9320b1403969d72ab243cca39a4b113..dfee6f91e69e3958dcd19f03ebd34a8f9e338e27 100644
--- a/vendor/consolidation/robo/src/Common/DynamicParams.php
+++ b/vendor/consolidation/robo/src/Common/DynamicParams.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Common;
 
 /**
@@ -20,7 +21,7 @@ trait DynamicParams
     public function __call($property, $args)
     {
         if (!property_exists($this, $property)) {
-            throw new \RuntimeException("Property $property in task ".get_class($this).' does not exists');
+            throw new \RuntimeException("Property $property in task " . get_class($this) . ' does not exists');
         }
 
         // toggle boolean values
diff --git a/vendor/consolidation/robo/src/Common/ExecCommand.php b/vendor/consolidation/robo/src/Common/ExecCommand.php
index c3e6c3af636c77db54884ae85d66b3f5583139ea..aec7587bc35a5d054b935c3a7a12077d51f76eb1 100644
--- a/vendor/consolidation/robo/src/Common/ExecCommand.php
+++ b/vendor/consolidation/robo/src/Common/ExecCommand.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Common;
 
 use Robo\Result;
@@ -124,6 +125,9 @@ protected function useCallOnWindows($cmd)
         return $cmd;
     }
 
+    /**
+     * {@inheritdoc}
+     */
     protected function getCommandDescription()
     {
         return $this->process->getCommandLine();
diff --git a/vendor/consolidation/robo/src/Common/ExecOneCommand.php b/vendor/consolidation/robo/src/Common/ExecOneCommand.php
index 601375149772c93e13addc143a1673a97eb21163..7a908fc256abff35803f24ce04b2985331c1104a 100644
--- a/vendor/consolidation/robo/src/Common/ExecOneCommand.php
+++ b/vendor/consolidation/robo/src/Common/ExecOneCommand.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Common;
 
 /**
diff --git a/vendor/consolidation/robo/src/Common/ExecTrait.php b/vendor/consolidation/robo/src/Common/ExecTrait.php
index 85a9f4c9d503c1aaa6df639641c2eba9228c48d1..5c6bc54a9b4fd7789b76aed9453e6297bba71fdc 100644
--- a/vendor/consolidation/robo/src/Common/ExecTrait.php
+++ b/vendor/consolidation/robo/src/Common/ExecTrait.php
@@ -66,22 +66,60 @@ trait ExecTrait
      */
     abstract public function getCommandDescription();
 
-    /** Typically provided by Timer trait via ProgressIndicatorAwareTrait. */
-    abstract public function startTimer();
-    abstract public function stopTimer();
-    abstract public function getExecutionTime();
+    /**
+     * @see \Robo\Common\ProgressIndicatorAwareTrait
+     * @see \Robo\Common\Timer
+     */
+    abstract protected function startTimer();
+
+    /**
+     * @see \Robo\Common\ProgressIndicatorAwareTrait
+     * @see \Robo\Common\Timer
+     */
+    abstract protected function stopTimer();
+
+    /**
+     * @return null|float
+     *
+     * @see \Robo\Common\ProgressIndicatorAwareTrait
+     * @see \Robo\Common\Timer
+     */
+    abstract protected function getExecutionTime();
+
+    /**
+     * @return bool
+     *
+     * @see \Robo\Common\TaskIO
+     */
+    abstract protected function hideTaskProgress();
+
+    /**
+     * @param bool $inProgress
+     *
+     * @see \Robo\Common\TaskIO
+     */
+    abstract protected function showTaskProgress($inProgress);
 
     /**
-     * Typically provided by TaskIO Trait.
+     * @param string $text
+     * @param null|array $context
+     *
+     * @see \Robo\Common\TaskIO
      */
-    abstract public function hideTaskProgress();
-    abstract public function showTaskProgress($inProgress);
-    abstract public function printTaskInfo($text, $context = null);
+    abstract protected function printTaskInfo($text, $context = null);
 
     /**
-     * Typically provided by VerbosityThresholdTrait.
+     * @return bool
+     *
+     * @see \Robo\Common\VerbosityThresholdTrait
      */
     abstract public function verbosityMeetsThreshold();
+
+    /**
+     * @param string $message
+     *
+     * @see \Robo\Common\VerbosityThresholdTrait
+     */
     abstract public function writeMessage($message);
 
     /**
@@ -105,6 +143,8 @@ public function detectInteractive()
     /**
      * Executes command in background mode (asynchronously)
      *
+     * @param bool $arg
+     *
      * @return $this
      */
     public function background($arg = true)
@@ -141,6 +181,11 @@ public function idleTimeout($timeout)
 
     /**
      * Set a single environment variable, or multiple.
+     *
+     * @param string|array $env
+     * @param bool|string $value
+     *
+     * @return $this
      */
     public function env($env, $value = null)
     {
@@ -179,7 +224,7 @@ public function setInput($input)
     /**
      * Attach tty to process for interactive input
      *
-     * @param $interactive bool
+     * @param bool $interactive
      *
      * @return $this
      */
@@ -275,7 +320,7 @@ public function printMetadata($arg)
     }
 
     /**
-     * @param Process $process
+     * @param \Symfony\Component\Process\Process $process
      * @param callable $output_callback
      *
      * @return \Robo\ResultData
@@ -354,9 +399,6 @@ protected function execute($process, $output_callback = null)
         return new ResultData($this->process->getExitCode());
     }
 
-    /**
-     *
-     */
     protected function stop()
     {
         if ($this->background && isset($this->process) && $this->process->isRunning()) {
@@ -384,9 +426,9 @@ protected function printAction($context = [])
     }
 
     /**
-     * @param $command
+     * @param string $command
      *
-     * @return mixed
+     * @return string
      */
     protected function formatCommandDisplay($command)
     {
diff --git a/vendor/consolidation/robo/src/Common/IO.php b/vendor/consolidation/robo/src/Common/IO.php
index d6c77bff8dd3f0ccf50c6cd7a40ec979f89d3c62..9f0a9955ee6bbe5da450844a9ce6a379a3bbe8e8 100644
--- a/vendor/consolidation/robo/src/Common/IO.php
+++ b/vendor/consolidation/robo/src/Common/IO.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Common;
 
 use Symfony\Component\Console\Helper\QuestionHelper;
@@ -19,7 +20,9 @@ trait IO
     /**
      * Provide access to SymfonyStyle object.
      *
-     * @return SymfonyStyle
+     * @deprecated Use a style injector instead
+     *
+     * @return \Symfony\Component\Console\Style\SymfonyStyle
      *
      * @see http://symfony.com/blog/new-in-symfony-2-8-console-style-guide
      */
@@ -125,12 +128,13 @@ protected function askDefault($question, $default)
 
     /**
      * @param string $question
+     * @param bool $default
      *
      * @return string
      */
-    protected function confirm($question)
+    protected function confirm($question, $default = false)
     {
-        return $this->doAsk(new ConfirmationQuestion($this->formatQuestion($question . ' (y/n)'), false));
+        return $this->doAsk(new ConfirmationQuestion($this->formatQuestion($question . ' (y/n)'), $default));
     }
 
     /**
diff --git a/vendor/consolidation/robo/src/Common/InflectionTrait.php b/vendor/consolidation/robo/src/Common/InflectionTrait.php
index 8bc4e831c3178def48b4248d01132135a513612c..0dec2aa6295f991bfb32dee1100ead8f82d40a76 100644
--- a/vendor/consolidation/robo/src/Common/InflectionTrait.php
+++ b/vendor/consolidation/robo/src/Common/InflectionTrait.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Common;
 
 use Robo\Contract\InflectionInterface;
diff --git a/vendor/consolidation/robo/src/Common/OutputAdapter.php b/vendor/consolidation/robo/src/Common/OutputAdapter.php
index b8e795f23cb48d1d449ba547383b1199fcf05317..556a2fe800412c17543377395cf192453b5fa318 100644
--- a/vendor/consolidation/robo/src/Common/OutputAdapter.php
+++ b/vendor/consolidation/robo/src/Common/OutputAdapter.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Common;
 
 use Robo\Contract\OutputAdapterInterface;
@@ -13,6 +14,9 @@ class OutputAdapter implements OutputAdapterInterface, OutputAwareInterface
 {
     use OutputAwareTrait;
 
+    /**
+     * @var int[]
+     */
     protected $verbosityMap = [
         VerbosityThresholdInterface::VERBOSITY_NORMAL => OutputInterface::VERBOSITY_NORMAL,
         VerbosityThresholdInterface::VERBOSITY_VERBOSE => OutputInterface::VERBOSITY_VERBOSE,
@@ -20,6 +24,9 @@ class OutputAdapter implements OutputAdapterInterface, OutputAwareInterface
         VerbosityThresholdInterface::VERBOSITY_DEBUG => OutputInterface::VERBOSITY_DEBUG,
     ];
 
+    /**
+     * {@inheritdoc}
+     */
     public function verbosityMeetsThreshold($verbosityThreshold)
     {
         if (!isset($this->verbosityMap[$verbosityThreshold])) {
@@ -31,6 +38,9 @@ public function verbosityMeetsThreshold($verbosityThreshold)
         return $verbosity >= $verbosityThreshold;
     }
 
+    /**
+     * {@inheritdoc}
+     */
     public function writeMessage($message)
     {
         $this->output()->write($message);
diff --git a/vendor/consolidation/robo/src/Common/ProcessExecutor.php b/vendor/consolidation/robo/src/Common/ProcessExecutor.php
index f78a477521dcf4a3881b640222581f33aa28b5cb..a8629780b01361c4aba8230b7bb6f5e16c3e0766 100644
--- a/vendor/consolidation/robo/src/Common/ProcessExecutor.php
+++ b/vendor/consolidation/robo/src/Common/ProcessExecutor.php
@@ -16,14 +16,19 @@ class ProcessExecutor implements ConfigAwareInterface, LoggerAwareInterface, Out
     use OutputAwareTrait;
 
     /**
-     * @param Process $process
-     * @return type
+     * @param \Symfony\Component\Process\Process $process
      */
     public function __construct(Process $process)
     {
         $this->process = $process;
     }
 
+    /**
+     * @param \League\Container\ContainerInterface $container
+     * @param \Symfony\Component\Process\Process $process
+     *
+     * @return static
+     */
     public static function create($container, $process)
     {
         $processExecutor = new self($process);
@@ -37,7 +42,7 @@ public static function create($container, $process)
     }
 
     /**
-     * @return string
+     * {@inheritdoc}
      */
     protected function getCommandDescription()
     {
diff --git a/vendor/consolidation/robo/src/Common/ProcessUtils.php b/vendor/consolidation/robo/src/Common/ProcessUtils.php
index 7dc4e55317a1a2d1a49b3c9ab6740a92ec7ec11d..5dcb3e70ca7a6bac3bba3a5bcd60d2319ba4e3c0 100644
--- a/vendor/consolidation/robo/src/Common/ProcessUtils.php
+++ b/vendor/consolidation/robo/src/Common/ProcessUtils.php
@@ -26,15 +26,17 @@ private function __construct()
     /**
      * Escapes a string to be used as a shell argument.
      *
-     * @param string $argument The argument that will be escaped
+     * @param string $argument
+     *   The argument that will be escaped.
      *
-     * @return string The escaped argument
+     * @return string
+     *   The escaped argument.
      *
      * @deprecated since version 3.3, to be removed in 4.0. Use a command line array or give env vars to the `Process::start/run()` method instead.
      */
     public static function escapeArgument($argument)
     {
-        @trigger_error('The '.__METHOD__.'() method is a copy of a method that was deprecated by Symfony 3.3 and removed in Symfony 4; it will be removed in Robo 2.0.', E_USER_DEPRECATED);
+        @trigger_error('The ' . __METHOD__ . '() method is a copy of a method that was deprecated by Symfony 3.3 and removed in Symfony 4; it will be removed in Robo 2.0.', E_USER_DEPRECATED);
 
         //Fix for PHP bug #43784 escapeshellarg removes % from given string
         //Fix for PHP bug #49446 escapeshellarg doesn't work on Windows
@@ -52,7 +54,7 @@ public static function escapeArgument($argument)
                     $escapedArgument .= '\\"';
                 } elseif (self::isSurroundedBy($part, '%')) {
                     // Avoid environment variable expansion
-                    $escapedArgument .= '^%"'.substr($part, 1, -1).'"^%';
+                    $escapedArgument .= '^%"' . substr($part, 1, -1) . '"^%';
                 } else {
                     // escape trailing backslash
                     if ('\\' === substr($part, -1)) {
@@ -63,13 +65,13 @@ public static function escapeArgument($argument)
                 }
             }
             if ($quote) {
-                $escapedArgument = '"'.$escapedArgument.'"';
+                $escapedArgument = '"' . $escapedArgument . '"';
             }
 
             return $escapedArgument;
         }
 
-        return "'".str_replace("'", "'\\''", $argument)."'";
+        return "'" . str_replace("'", "'\\''", $argument) . "'";
     }
 
     private static function isSurroundedBy($arg, $char)
diff --git a/vendor/consolidation/robo/src/Common/ProgressIndicator.php b/vendor/consolidation/robo/src/Common/ProgressIndicator.php
index fe6c9298ee91f21ead6707fb8c15b7a10e73c394..1da42a6df7dcb35094c305f847deb8c53a018518 100644
--- a/vendor/consolidation/robo/src/Common/ProgressIndicator.php
+++ b/vendor/consolidation/robo/src/Common/ProgressIndicator.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Common;
 
 /**
diff --git a/vendor/consolidation/robo/src/Common/ProgressIndicatorAwareTrait.php b/vendor/consolidation/robo/src/Common/ProgressIndicatorAwareTrait.php
index 060e039a18440e15d6d1b237f68898a928ec63b2..544ecd234b42bdec77182d7559898b0c5cf2e065 100644
--- a/vendor/consolidation/robo/src/Common/ProgressIndicatorAwareTrait.php
+++ b/vendor/consolidation/robo/src/Common/ProgressIndicatorAwareTrait.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Common;
 
 use Robo\Contract\ProgressIndicatorAwareInterface;
@@ -24,7 +25,7 @@ public function progressIndicatorSteps()
     /**
      * @param null|\Robo\Common\ProgressIndicator $progressIndicator
      *
-     * @return ProgressIndicatorAwareInterface
+     * @return $this
      */
     public function setProgressIndicator($progressIndicator)
     {
@@ -78,7 +79,8 @@ protected function startProgressIndicator()
     {
         $this->startTimer();
         if ($this instanceof VerbosityThresholdInterface
-            && !$this->verbosityMeetsThreshold()) {
+            && !$this->verbosityMeetsThreshold()
+        ) {
             return;
         }
         if (!$this->progressIndicator) {
diff --git a/vendor/consolidation/robo/src/Common/ResourceExistenceChecker.php b/vendor/consolidation/robo/src/Common/ResourceExistenceChecker.php
index 233f90a9b7e0304307a0a834fb3bcaf79fa73f29..ad0a614a7fdff18662fbacaf03ac6facdada0417 100644
--- a/vendor/consolidation/robo/src/Common/ResourceExistenceChecker.php
+++ b/vendor/consolidation/robo/src/Common/ResourceExistenceChecker.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Common;
 
 trait ResourceExistenceChecker
@@ -7,9 +8,11 @@ trait ResourceExistenceChecker
      * Checks if the given input is a file or folder.
      *
      * @param string|string[] $resources
-     * @param string $type "file", "dir", "fileAndDir"
+     * @param string $type
+     *   Allowed values: "file", "dir", "fileAndDir"
      *
-     * @return bool True if no errors were encountered otherwise false.
+     * @return bool
+     *   True if no errors were encountered otherwise false.
      */
     protected function checkResources($resources, $type = 'fileAndDir')
     {
@@ -41,8 +44,10 @@ protected function checkResources($resources, $type = 'fileAndDir')
      *
      * It will print an error as well on the console.
      *
-     * @param string $resource File or folder.
-     * @param string $type "file", "dir", "fileAndDir"
+     * @param string $resource
+     *   File or folder.
+     * @param string $type
+     *   Allowed values: "file", "dir", "fileAndDir".
      *
      * @return bool
      */
diff --git a/vendor/consolidation/robo/src/Common/TaskIO.php b/vendor/consolidation/robo/src/Common/TaskIO.php
index 49b5ccd86c4a1c999115f5f0eb013d3351d89566..297982a50eb74d0415e32329fb080c970630e529 100644
--- a/vendor/consolidation/robo/src/Common/TaskIO.php
+++ b/vendor/consolidation/robo/src/Common/TaskIO.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Common;
 
 use Robo\Robo;
@@ -22,7 +23,7 @@ trait TaskIO
     use VerbosityThresholdTrait;
 
     /**
-     * @return mixed|null|\Psr\Log\LoggerInterface
+     * @return null|\Psr\Log\LoggerInterface
      */
     public function logger()
     {
@@ -169,7 +170,7 @@ protected function hideTaskProgress()
     }
 
     /**
-     * @param $inProgress
+     * @param bool $inProgress
      */
     protected function showTaskProgress($inProgress)
     {
@@ -218,7 +219,8 @@ protected function getPrintedTaskName($task = null)
     /**
      * @param null|array $context
      *
-     * @return array with context information
+     * @return array
+     *   Context information.
      */
     protected function getTaskContext($context = null)
     {
diff --git a/vendor/consolidation/robo/src/Common/TimeKeeper.php b/vendor/consolidation/robo/src/Common/TimeKeeper.php
index 1cd3e33444efed089098dec32b46dcc7c580cc16..a57881e60459e0572ad1a7bf42cf1ce34d371f22 100644
--- a/vendor/consolidation/robo/src/Common/TimeKeeper.php
+++ b/vendor/consolidation/robo/src/Common/TimeKeeper.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Common;
 
 class TimeKeeper
@@ -44,9 +45,10 @@ public function elapsed()
     }
 
     /**
-     * Format a duration into a human-readable time
+     * Format a duration into a human-readable time.
      *
-     * @param float $duration Duration in seconds, with fractional component
+     * @param float $duration
+     *   Duration in seconds, with fractional component.
      *
      * @return string
      */
@@ -64,6 +66,6 @@ public static function formatDuration($duration)
         if ($duration > self::MINUTE) {
             return gmdate("i:s", $duration);
         }
-        return round($duration, 3).'s';
+        return round($duration, 3) . 's';
     }
 }
diff --git a/vendor/consolidation/robo/src/Common/Timer.php b/vendor/consolidation/robo/src/Common/Timer.php
index 955eb5bb3bfb2af0b9f1870e6fdabf8914ac9d72..dfa8b14cfcb6a66d0f91fa712640506a51d465b5 100644
--- a/vendor/consolidation/robo/src/Common/Timer.php
+++ b/vendor/consolidation/robo/src/Common/Timer.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Common;
 
 trait Timer
diff --git a/vendor/consolidation/robo/src/Common/VerbosityThresholdTrait.php b/vendor/consolidation/robo/src/Common/VerbosityThresholdTrait.php
index 2fc51c22b7097ca68832d72240aff8b34d05c525..afdeff5c5c8cbc38ddaf47dc166f21964000dcc0 100644
--- a/vendor/consolidation/robo/src/Common/VerbosityThresholdTrait.php
+++ b/vendor/consolidation/robo/src/Common/VerbosityThresholdTrait.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Common;
 
 use Robo\Robo;
@@ -20,13 +21,23 @@
  */
 trait VerbosityThresholdTrait
 {
-    /** var OutputAdapterInterface */
+    /**
+     * @var \Robo\Contract\OutputAdapterInterface
+     */
     protected $outputAdapter;
+
+    /**
+     * @var int
+     */
     protected $verbosityThreshold = 0;
 
     /**
-     * Required verbocity level before any TaskIO output will be produced.
+     * Required verbosity level before any TaskIO output will be produced.
      * e.g. OutputInterface::VERBOSITY_VERBOSE
+     *
+     * @param int $verbosityThreshold
+     *
+     * @return $this
      */
     public function setVerbosityThreshold($verbosityThreshold)
     {
@@ -34,6 +45,9 @@ public function setVerbosityThreshold($verbosityThreshold)
         return $this;
     }
 
+    /**
+     * @return int
+     */
     public function verbosityThreshold()
     {
         return $this->verbosityThreshold;
@@ -45,18 +59,24 @@ public function setOutputAdapter(OutputAdapterInterface $outputAdapter)
     }
 
     /**
-     * @return OutputAdapterInterface
+     * @return \Robo\Contract\OutputAdapterInterface
      */
     public function outputAdapter()
     {
         return $this->outputAdapter;
     }
 
+    /**
+     * @return bool
+     */
     public function hasOutputAdapter()
     {
         return isset($this->outputAdapter);
     }
 
+    /**
+     * @return bool
+     */
     public function verbosityMeetsThreshold()
     {
         if ($this->hasOutputAdapter()) {
@@ -67,7 +87,9 @@ public function verbosityMeetsThreshold()
 
     /**
      * Print a message if the selected verbosity level is over this task's
-     * verbosity threshhold.
+     * verbosity threshold.
+     *
+     * @param string $message
      */
     public function writeMessage($message)
     {
diff --git a/vendor/consolidation/robo/src/Config.php b/vendor/consolidation/robo/src/Config.php
index 9e9370d8117fd470c3e425d4aea9d1a50ac9859e..e1b328a631645f3fbf2f47e6bbd70129877b570f 100644
--- a/vendor/consolidation/robo/src/Config.php
+++ b/vendor/consolidation/robo/src/Config.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo;
 
 /**
diff --git a/vendor/consolidation/robo/src/Config/Config.php b/vendor/consolidation/robo/src/Config/Config.php
index 78b135a32a5ffa26e2dd451c51a2db1f614a1883..7f2186e94cf7dfd929f9fe49c5499d518cc13c71 100644
--- a/vendor/consolidation/robo/src/Config/Config.php
+++ b/vendor/consolidation/robo/src/Config/Config.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Config;
 
 use Consolidation\Config\Util\ConfigOverlay;
@@ -70,6 +71,10 @@ public function getGlobalOptionDefaultValues()
 
     /**
      * Remove the 'options.' prefix from the global options list.
+     *
+     * @param array $globalOptions
+     *
+     * @return array
      */
     protected function trimPrefixFromGlobalOptions($globalOptions)
     {
diff --git a/vendor/consolidation/robo/src/Config/GlobalOptionDefaultValuesInterface.php b/vendor/consolidation/robo/src/Config/GlobalOptionDefaultValuesInterface.php
index f76394554814d232d6eb9cc490e4b581d0988ba9..313494f73032eb0c68df77c299001ef36e01245d 100644
--- a/vendor/consolidation/robo/src/Config/GlobalOptionDefaultValuesInterface.php
+++ b/vendor/consolidation/robo/src/Config/GlobalOptionDefaultValuesInterface.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Config;
 
 /**
diff --git a/vendor/consolidation/robo/src/Contract/CommandInterface.php b/vendor/consolidation/robo/src/Contract/CommandInterface.php
index e5099b043c729693b4f721fc51ea761504b11c1c..4d8cccecfd8eb52ba160de490c32dcdf7a21ca9c 100644
--- a/vendor/consolidation/robo/src/Contract/CommandInterface.php
+++ b/vendor/consolidation/robo/src/Contract/CommandInterface.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Contract;
 
 /**
diff --git a/vendor/consolidation/robo/src/Contract/CompletionInterface.php b/vendor/consolidation/robo/src/Contract/CompletionInterface.php
index a3b1c4e8da7a67513692ee090f7986fddffe4db3..8521ff3025cdc4120819262558a2303259825eaf 100644
--- a/vendor/consolidation/robo/src/Contract/CompletionInterface.php
+++ b/vendor/consolidation/robo/src/Contract/CompletionInterface.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Contract;
 
 /**
diff --git a/vendor/consolidation/robo/src/Contract/IOAwareInterface.php b/vendor/consolidation/robo/src/Contract/IOAwareInterface.php
index 2daa5fb64cdf74a3303bff2e7f9a56bf54a46c55..d5d8b32dc312fbfe4bd49ede8d47cc55e3145e8c 100644
--- a/vendor/consolidation/robo/src/Contract/IOAwareInterface.php
+++ b/vendor/consolidation/robo/src/Contract/IOAwareInterface.php
@@ -6,7 +6,7 @@
 
 namespace Robo\Contract;
 
-use \Symfony\Component\Console\Input\InputAwareInterface;
+use Symfony\Component\Console\Input\InputAwareInterface;
 
 interface IOAwareInterface extends OutputAwareInterface, InputAwareInterface
 {
diff --git a/vendor/consolidation/robo/src/Contract/InflectionInterface.php b/vendor/consolidation/robo/src/Contract/InflectionInterface.php
index 449cecfecb901c28b03a69842768021ea8fd67ab..a15680c61ee2318e6973c1c5a207ceffbfee3476 100644
--- a/vendor/consolidation/robo/src/Contract/InflectionInterface.php
+++ b/vendor/consolidation/robo/src/Contract/InflectionInterface.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Contract;
 
 interface InflectionInterface
diff --git a/vendor/consolidation/robo/src/Contract/OutputAdapterInterface.php b/vendor/consolidation/robo/src/Contract/OutputAdapterInterface.php
index 948d384cba8e1dfcdf272b449aa270785a5fa67d..7002579262bf5011ad3ae053f497c2b9983df327 100644
--- a/vendor/consolidation/robo/src/Contract/OutputAdapterInterface.php
+++ b/vendor/consolidation/robo/src/Contract/OutputAdapterInterface.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Contract;
 
 /**
@@ -6,6 +7,15 @@
  */
 interface OutputAdapterInterface
 {
+    /**
+     * @param int $verbosityThreshold
+     *
+     * @return bool
+     */
     public function verbosityMeetsThreshold($verbosityThreshold);
+
+    /**
+     * @param string $message
+     */
     public function writeMessage($message);
 }
diff --git a/vendor/consolidation/robo/src/Contract/PrintedInterface.php b/vendor/consolidation/robo/src/Contract/PrintedInterface.php
index d380643ba15705a4a2c41b3a92e44241cae3aba2..3cf4edfa26c8efc02de16fb89009ef8d75a5d3a6 100644
--- a/vendor/consolidation/robo/src/Contract/PrintedInterface.php
+++ b/vendor/consolidation/robo/src/Contract/PrintedInterface.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Contract;
 
 /**
diff --git a/vendor/consolidation/robo/src/Contract/ProgressIndicatorAwareInterface.php b/vendor/consolidation/robo/src/Contract/ProgressIndicatorAwareInterface.php
index 47cede9ce0f4aa2a2a0a4a6cc9814b97c6bf5c46..7bc8243532b2ff8436f750aa92fcf6d412c87829 100644
--- a/vendor/consolidation/robo/src/Contract/ProgressIndicatorAwareInterface.php
+++ b/vendor/consolidation/robo/src/Contract/ProgressIndicatorAwareInterface.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Contract;
 
 /**
diff --git a/vendor/consolidation/robo/src/Contract/RollbackInterface.php b/vendor/consolidation/robo/src/Contract/RollbackInterface.php
index 394822cd45a213065548b11b2241ff868f06a0e3..947544e4c2fddeb9f8084774db359e2af72144fa 100644
--- a/vendor/consolidation/robo/src/Contract/RollbackInterface.php
+++ b/vendor/consolidation/robo/src/Contract/RollbackInterface.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Contract;
 
 /**
diff --git a/vendor/consolidation/robo/src/Contract/SimulatedInterface.php b/vendor/consolidation/robo/src/Contract/SimulatedInterface.php
index 826f4b96c2118567b562b6c3e46913b9f60f11db..f98f9a84da32cdfbb80d19db65cf682d669ca850 100644
--- a/vendor/consolidation/robo/src/Contract/SimulatedInterface.php
+++ b/vendor/consolidation/robo/src/Contract/SimulatedInterface.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Contract;
 
 /**
diff --git a/vendor/consolidation/robo/src/Contract/TaskInterface.php b/vendor/consolidation/robo/src/Contract/TaskInterface.php
index c477d16cfa8a0846e6a300bec450ca3a48128e05..82366d8407d3f7375895c3d0a96d3656a82035fe 100644
--- a/vendor/consolidation/robo/src/Contract/TaskInterface.php
+++ b/vendor/consolidation/robo/src/Contract/TaskInterface.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Contract;
 
 /**
diff --git a/vendor/consolidation/robo/src/Contract/VerbosityThresholdInterface.php b/vendor/consolidation/robo/src/Contract/VerbosityThresholdInterface.php
index e63a1f7044b0eeadf3e22b756c269c79ea259ab9..23bd29c29c55cbaa146d63f41d63f0fa149d8e50 100644
--- a/vendor/consolidation/robo/src/Contract/VerbosityThresholdInterface.php
+++ b/vendor/consolidation/robo/src/Contract/VerbosityThresholdInterface.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Contract;
 
 use Robo\Contract\OutputAdapterInterface;
@@ -14,11 +15,40 @@ interface VerbosityThresholdInterface
     const VERBOSITY_VERY_VERBOSE = 3;
     const VERBOSITY_DEBUG = 4;
 
+    /**
+     * @param int $verbosityThreshold
+     *
+     * @return $this
+     */
     public function setVerbosityThreshold($verbosityThreshold);
+
+    /**
+     * @return int
+     */
     public function verbosityThreshold();
+
+    /**
+     * @param \Robo\Contract\OutputAdapterInterface $outputAdapter
+     */
     public function setOutputAdapter(OutputAdapterInterface $outputAdapter);
+
+    /**
+     * @return \Robo\Contract\OutputAdapterInterface
+     */
     public function outputAdapter();
+
+    /**
+     * @return bool
+     */
     public function hasOutputAdapter();
+
+    /**
+     * @return int
+     */
     public function verbosityMeetsThreshold();
+
+    /**
+     * @param string $message
+     */
     public function writeMessage($message);
 }
diff --git a/vendor/consolidation/robo/src/Contract/WrappedTaskInterface.php b/vendor/consolidation/robo/src/Contract/WrappedTaskInterface.php
index 65028769fa00d1ddd495dfa2b9e7b008ff7822fb..d164c6a3177015b8e0e5a77b6534501ed3fc9c62 100644
--- a/vendor/consolidation/robo/src/Contract/WrappedTaskInterface.php
+++ b/vendor/consolidation/robo/src/Contract/WrappedTaskInterface.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Contract;
 
 interface WrappedTaskInterface extends TaskInterface
diff --git a/vendor/consolidation/robo/src/Exception/AbortTasksException.php b/vendor/consolidation/robo/src/Exception/AbortTasksException.php
index 120451f0aeee68913ea652367bdb7eef050dcac8..118907574b61f03489f9eef1cfdc538b8c551a51 100644
--- a/vendor/consolidation/robo/src/Exception/AbortTasksException.php
+++ b/vendor/consolidation/robo/src/Exception/AbortTasksException.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Exception;
 
 /**
diff --git a/vendor/consolidation/robo/src/Exception/TaskException.php b/vendor/consolidation/robo/src/Exception/TaskException.php
index fdc84a5e4b62864b87015f7555566d1e7072cd48..3b6a48497cdaeae73685986cb15a8d7941af8923 100644
--- a/vendor/consolidation/robo/src/Exception/TaskException.php
+++ b/vendor/consolidation/robo/src/Exception/TaskException.php
@@ -1,8 +1,16 @@
 <?php
+
 namespace Robo\Exception;
 
 class TaskException extends \Exception
 {
+
+    /**
+     * TaskException constructor.
+     *
+     * @param string|object $class
+     * @param string $message
+     */
     public function __construct($class, $message)
     {
         if (is_object($class)) {
diff --git a/vendor/consolidation/robo/src/Exception/TaskExitException.php b/vendor/consolidation/robo/src/Exception/TaskExitException.php
index 9db5329ab6081d83705ebba247251b0100fdf773..6f1a627b34c8159b08b935fe31450a85dead425b 100644
--- a/vendor/consolidation/robo/src/Exception/TaskExitException.php
+++ b/vendor/consolidation/robo/src/Exception/TaskExitException.php
@@ -1,8 +1,17 @@
 <?php
+
 namespace Robo\Exception;
 
 class TaskExitException extends \Exception
 {
+
+    /**
+     * TaskExitException constructor.
+     *
+     * @param string|object $class
+     * @param string $message
+     * @param int $status
+     */
     public function __construct($class, $message, $status)
     {
         if (is_object($class)) {
diff --git a/vendor/consolidation/robo/src/GlobalOptionsEventListener.php b/vendor/consolidation/robo/src/GlobalOptionsEventListener.php
index b26d10cd0eea6b7452122d4d267d529b25926089..b32cb25857669ce3077c519eea21607c3f7297fa 100644
--- a/vendor/consolidation/robo/src/GlobalOptionsEventListener.php
+++ b/vendor/consolidation/robo/src/GlobalOptionsEventListener.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo;
 
 use Symfony\Component\Console\ConsoleEvents;
@@ -12,10 +13,14 @@ class GlobalOptionsEventListener implements EventSubscriberInterface, ConfigAwar
 {
     use ConfigAwareTrait;
 
-    /** @var Application */
+    /**
+     * @var \Robo\Application
+     */
     protected $application;
 
-    /** @var string */
+    /**
+     * @var string
+     */
     protected $prefix;
 
     /**
@@ -28,6 +33,10 @@ public function __construct()
 
     /**
      * Add a reference to the Symfony Console application object.
+     *
+     * @param \Robo\Application $application
+     *
+     * @return $this
      */
     public function setApplication($application)
     {
@@ -37,7 +46,10 @@ public function setApplication($application)
 
     /**
      * Stipulate the prefix to use for option injection.
+     *
      * @param string $prefix
+     *
+     * @return $this
      */
     public function setGlobalOptionsPrefix($prefix)
     {
@@ -118,6 +130,7 @@ public function setConfigurationValues(ConsoleCommandEvent $event)
      * the input string contains no '=' character, then the value will be 'true'.
      *
      * @param string $value
+     *
      * @return array
      */
     protected function splitConfigKeyValue($value)
@@ -130,6 +143,8 @@ protected function splitConfigKeyValue($value)
     /**
      * Get default option values from the Symfony Console application, if
      * it is available.
+     *
+     * @return array
      */
     protected function applicationOptionDefaultValues()
     {
diff --git a/vendor/consolidation/robo/src/LoadAllTasks.php b/vendor/consolidation/robo/src/LoadAllTasks.php
index 3183d5b6a3f46af06fe0916dd1cce32f95e17e4d..6a6b9cbf38dcc1092c4a3fea7cf99ded1de16586 100644
--- a/vendor/consolidation/robo/src/LoadAllTasks.php
+++ b/vendor/consolidation/robo/src/LoadAllTasks.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo;
 
 trait LoadAllTasks
diff --git a/vendor/consolidation/robo/src/Log/ResultPrinter.php b/vendor/consolidation/robo/src/Log/ResultPrinter.php
index a6f166a0936ad651f6edc733e3c7feca5d08bb9d..6e0dfd83f453dcb3444a8eea59b44803226d4f55 100644
--- a/vendor/consolidation/robo/src/Log/ResultPrinter.php
+++ b/vendor/consolidation/robo/src/Log/ResultPrinter.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Log;
 
 use Robo\Result;
@@ -6,7 +7,6 @@
 use Robo\Contract\ProgressIndicatorAwareInterface;
 use Robo\Contract\VerbosityThresholdInterface;
 use Robo\Common\ProgressIndicatorAwareTrait;
-
 use Psr\Log\LogLevel;
 use Psr\Log\LoggerAwareInterface;
 use Psr\Log\LoggerAwareTrait;
@@ -27,7 +27,7 @@ class ResultPrinter implements LoggerAwareInterface, ProgressIndicatorAwareInter
      *
      * @param \Robo\Result $result
      *
-     * @return bool
+     * @return null|bool
      */
     public function printResult(Result $result)
     {
diff --git a/vendor/consolidation/robo/src/Log/RoboLogLevel.php b/vendor/consolidation/robo/src/Log/RoboLogLevel.php
index d7d5eb0a6e09fa459ba3e3e77a2deba2b17c0110..7a710b08b9327617b5056ab253095119f8582b87 100644
--- a/vendor/consolidation/robo/src/Log/RoboLogLevel.php
+++ b/vendor/consolidation/robo/src/Log/RoboLogLevel.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Log;
 
 class RoboLogLevel extends \Consolidation\Log\ConsoleLogLevel
diff --git a/vendor/consolidation/robo/src/Log/RoboLogStyle.php b/vendor/consolidation/robo/src/Log/RoboLogStyle.php
index e4999a8793121bd257fd7cf04bdc480026cbe6a8..2c1b71ee8229822a8f2e6dcda59dd87983db7309 100644
--- a/vendor/consolidation/robo/src/Log/RoboLogStyle.php
+++ b/vendor/consolidation/robo/src/Log/RoboLogStyle.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Log;
 
 use Robo\Common\TimeKeeper;
diff --git a/vendor/consolidation/robo/src/Log/RoboLogger.php b/vendor/consolidation/robo/src/Log/RoboLogger.php
index 75cf23f7ccba486101a75ad1b4e1e63f76acb0d8..2ff3b384bc990b2f7e9163a907d20170210c6635 100644
--- a/vendor/consolidation/robo/src/Log/RoboLogger.php
+++ b/vendor/consolidation/robo/src/Log/RoboLogger.php
@@ -1,8 +1,8 @@
 <?php
+
 namespace Robo\Log;
 
 use Consolidation\Log\Logger;
-
 use Psr\Log\LogLevel;
 use Symfony\Component\Console\Output\OutputInterface;
 
diff --git a/vendor/consolidation/robo/src/Result.php b/vendor/consolidation/robo/src/Result.php
index 7d77935209251cb0f0a1395e211f75930ad49a79..b343b8c565344d155bd8fab00a4581026510b90e 100644
--- a/vendor/consolidation/robo/src/Result.php
+++ b/vendor/consolidation/robo/src/Result.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo;
 
 use Robo\Contract\TaskInterface;
@@ -19,7 +20,7 @@ class Result extends ResultData
 
     /**
      * @param \Robo\Contract\TaskInterface $task
-     * @param string $exitCode
+     * @param int $exitCode
      * @param string $message
      * @param array $data
      */
@@ -37,6 +38,11 @@ public function __construct(TaskInterface $task, $exitCode, $message = '', $data
     /**
      * Tasks should always return a Result. However, they are also
      * allowed to return NULL or an array to indicate success.
+     *
+     * @param \Robo\Contract\TaskInterface $task
+     * @param \Robo\Result|\Robo\State\Data|\Robo\ResultData|array|null
+     *
+     * @return static
      */
     public static function ensureResult($task, $result)
     {
@@ -79,7 +85,7 @@ protected function printResult()
      * @param string $extension
      * @param string $service
      *
-     * @return \Robo\Result
+     * @return static
      */
     public static function errorMissingExtension(TaskInterface $task, $extension, $service)
     {
@@ -94,7 +100,7 @@ public static function errorMissingExtension(TaskInterface $task, $extension, $s
      * @param string $class
      * @param string $package
      *
-     * @return \Robo\Result
+     * @return static
      */
     public static function errorMissingPackage(TaskInterface $task, $class, $package)
     {
@@ -109,7 +115,7 @@ public static function errorMissingPackage(TaskInterface $task, $class, $package
      * @param string $message
      * @param array $data
      *
-     * @return \Robo\Result
+     * @return static
      */
     public static function error(TaskInterface $task, $message, $data = [])
     {
@@ -121,7 +127,7 @@ public static function error(TaskInterface $task, $message, $data = [])
      * @param \Exception $e
      * @param array $data
      *
-     * @return \Robo\Result
+     * @return static
      */
     public static function fromException(TaskInterface $task, \Exception $e, $data = [])
     {
@@ -137,7 +143,7 @@ public static function fromException(TaskInterface $task, \Exception $e, $data =
      * @param string $message
      * @param array $data
      *
-     * @return \Robo\Result
+     * @return static
      */
     public static function success(TaskInterface $task, $message = '', $data = [])
     {
diff --git a/vendor/consolidation/robo/src/ResultData.php b/vendor/consolidation/robo/src/ResultData.php
index 90baf6e9243e299291de8b2687ce2eca1026bf73..bf064d6509f9c001f4e426100cd09e8a56c2db9d 100644
--- a/vendor/consolidation/robo/src/ResultData.php
+++ b/vendor/consolidation/robo/src/ResultData.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo;
 
 use Consolidation\AnnotatedCommand\ExitCodeInterface;
@@ -40,7 +41,7 @@ public function __construct($exitCode = self::EXITCODE_OK, $message = '', $data
      * @param string $message
      * @param array $data
      *
-     * @return \Robo\ResultData
+     * @return static
      */
     public static function message($message, $data = [])
     {
@@ -51,7 +52,7 @@ public static function message($message, $data = [])
      * @param string $message
      * @param array $data
      *
-     * @return \Robo\ResultData
+     * @return static
      */
     public static function cancelled($message = '', $data = [])
     {
diff --git a/vendor/consolidation/robo/src/Robo.php b/vendor/consolidation/robo/src/Robo.php
index 0b39a0794d89fb6e616ab2cb95a145b3b2ae1044..46f48dc2814b88239b1150108e88d55ab99a024a 100644
--- a/vendor/consolidation/robo/src/Robo.php
+++ b/vendor/consolidation/robo/src/Robo.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo;
 
 use Composer\Autoload\ClassLoader;
@@ -20,12 +21,12 @@
 class Robo
 {
     const APPLICATION_NAME = 'Robo';
-    const VERSION = '1.4.9';
+    const VERSION = '1.4.13';
 
     /**
      * The currently active container object, or NULL if not initialized yet.
      *
-     * @var ContainerInterface|null
+     * @var \League\Container\ContainerInterface|null
      */
     protected static $container;
 
@@ -37,6 +38,7 @@ class Robo
      * @param null|string $appName
      * @param null|string $appVersion
      * @param null|\Symfony\Component\Console\Output\OutputInterface $output
+     * @param null|string $repository
      *
      * @return int
      */
@@ -51,7 +53,7 @@ public static function run($argv, $commandClasses, $appName = null, $appVersion
     /**
      * Sets a new global container.
      *
-     * @param ContainerInterface $container
+     * @param \League\Container\ContainerInterface $container
      *   A new container instance to replace the current.
      */
     public static function setContainer(ContainerInterface $container)
@@ -94,6 +96,10 @@ public static function hasContainer()
 
     /**
      * Create a config object and load it from the provided paths.
+     *
+     * @param string[] $paths
+     *
+     * @return \Consolidation\Config\ConfigInterface
      */
     public static function createConfiguration($paths)
     {
@@ -104,6 +110,9 @@ public static function createConfiguration($paths)
 
     /**
      * Use a simple config loader to load configuration values from specified paths
+     *
+     * @param string[] $paths
+     * @param null|\Consolidation\Config\ConfigInterface $config
      */
     public static function loadConfiguration($paths, $config = null)
     {
@@ -127,7 +136,7 @@ public static function loadConfiguration($paths, $config = null)
      * @param null|\Symfony\Component\Console\Input\InputInterface $input
      * @param null|\Symfony\Component\Console\Output\OutputInterface $output
      * @param null|\Robo\Application $app
-     * @param null|ConfigInterface $config
+     * @param null|\Consolidation\Config\ConfigInterface $config
      * @param null|\Composer\Autoload\ClassLoader $classLoader
      *
      * @return \League\Container\Container|\League\Container\ContainerInterface
@@ -174,7 +183,7 @@ public static function createDefaultContainer($input = null, $output = null, $ap
      *
      * @param \League\Container\ContainerInterface $container
      * @param \Symfony\Component\Console\Application $app
-     * @param ConfigInterface $config
+     * @param \Consolidation\Config\ConfigInterface $config
      * @param null|\Symfony\Component\Console\Input\InputInterface $input
      * @param null|\Symfony\Component\Console\Output\OutputInterface $output
      * @param null|\Composer\Autoload\ClassLoader $classLoader
@@ -237,10 +246,14 @@ public static function configureContainer(ContainerInterface $container, Symfony
             ->withMethodCall('addDefaultSimplifiers', []);
         $container->share('prepareTerminalWidthOption', \Consolidation\AnnotatedCommand\Options\PrepareTerminalWidthOption::class)
             ->withMethodCall('setApplication', ['application']);
+        $container->share('symfonyStyleInjector', \Robo\Symfony\SymfonyStyleInjector::class);
+        $container->share('parameterInjection', \Consolidation\AnnotatedCommand\ParameterInjection::class)
+            ->withMethodCall('register', ['Symfony\Component\Console\Style\SymfonyStyle', 'symfonyStyleInjector']);
         $container->share('commandProcessor', \Consolidation\AnnotatedCommand\CommandProcessor::class)
             ->withArgument('hookManager')
             ->withMethodCall('setFormatterManager', ['formatterManager'])
             ->withMethodCall('addPrepareFormatter', ['prepareTerminalWidthOption'])
+            ->withMethodCall('setParameterInjection', ['parameterInjection'])
             ->withMethodCall(
                 'setDisplayErrorFunction',
                 [
@@ -356,7 +369,7 @@ public static function resultPrinter()
     }
 
     /**
-     * @return ConfigInterface
+     * @return \Consolidation\Config\ConfigInterface
      */
     public static function config()
     {
@@ -399,6 +412,9 @@ public static function input()
         return static::service('input');
     }
 
+    /**
+     * @return \Robo\Common\ProcessExecutor
+     */
     public static function process(Process $process)
     {
         return ProcessExecutor::create(static::getContainer(), $process);
diff --git a/vendor/consolidation/robo/src/Runner.php b/vendor/consolidation/robo/src/Runner.php
index 026ac871bc8c60ffb55e9e08e806abff78e9c0e2..eb786b5ebd98f9e5a1e196582763dd8cb138bcce 100644
--- a/vendor/consolidation/robo/src/Runner.php
+++ b/vendor/consolidation/robo/src/Runner.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo;
 
 use Composer\Autoload\ClassLoader;
@@ -14,12 +15,12 @@
 
 class Runner implements ContainerAwareInterface
 {
-    const ROBOCLASS = 'RoboFile';
-    const ROBOFILE = 'RoboFile.php';
-
     use IO;
     use ContainerAwareTrait;
 
+    const ROBOCLASS = 'RoboFile';
+    const ROBOFILE = 'RoboFile.php';
+
     /**
      * @var string
      */
@@ -31,7 +32,9 @@ class Runner implements ContainerAwareInterface
     protected $roboFile;
 
     /**
-     * @var string working dir of Robo
+     * Working dir of Robo.
+     *
+     * @var string
      */
     protected $dir;
 
@@ -41,12 +44,16 @@ class Runner implements ContainerAwareInterface
     protected $errorConditions = [];
 
     /**
-     * @var string GitHub Repo for SelfUpdate
+     * GitHub Repo for SelfUpdate.
+     *
+     * @var string
      */
     protected $selfUpdateRepository = null;
 
     /**
-     * @var string filename to load configuration from (set to 'robo.yml' for RoboFiles)
+     * Filename to load configuration from (set to 'robo.yml' for RoboFiles).
+     *
+     * @var string
      */
     protected $configFilename = 'conf.yml';
 
@@ -56,7 +63,7 @@ class Runner implements ContainerAwareInterface
     protected $envConfigPrefix = false;
 
     /**
-     * @var \Composer\Autoload\ClassLoader
+     * @var null|\Composer\Autoload\ClassLoader
      */
     protected $classLoader = null;
 
@@ -79,6 +86,10 @@ public function __construct($roboClass = null, $roboFile = null)
         $this->dir = getcwd();
     }
 
+    /**
+     * @param string $msg
+     * @param string $errorType
+     */
     protected function errorCondition($msg, $errorType)
     {
         $this->errorConditions[$msg] = $errorType;
@@ -147,6 +158,9 @@ public function execute($argv, $appName = null, $appVersion = null, $output = nu
 
     /**
      * Get a list of locations where config files may be loaded
+     *
+     * @param string $userConfig
+     *
      * @return string[]
      */
     protected function getConfigFilePaths($userConfig)
@@ -258,16 +272,16 @@ public function registerCommandClasses($app, $commandClasses)
     }
 
     /**
-     * @param $relativeNamespace
+     * @param string $relativeNamespace
      *
-     * @return array|string[]
+     * @return string[]
      */
     protected function discoverCommandClasses($relativeNamespace)
     {
         /** @var \Robo\ClassDiscovery\RelativeNamespaceDiscovery $discovery */
         $discovery = Robo::service('relativeNamespaceDiscovery');
-        $discovery->setRelativeNamespace($relativeNamespace.'\Commands')
-            ->setSearchPattern('*Commands.php');
+        $discovery->setRelativeNamespace($relativeNamespace . '\Commands')
+            ->setSearchPattern('/.*Commands?\.php$/');
         return $discovery->getClasses();
     }
 
@@ -275,7 +289,7 @@ protected function discoverCommandClasses($relativeNamespace)
      * @param \Robo\Application $app
      * @param string|BuilderAwareInterface|ContainerAwareInterface $commandClass
      *
-     * @return mixed|void
+     * @return null|object
      */
     public function registerCommandClass($app, $commandClass)
     {
@@ -295,7 +309,7 @@ public function registerCommandClass($app, $commandClass)
     }
 
     /**
-     * @param string|BuilderAwareInterface|ContainerAwareInterface  $commandClass
+     * @param string|\Robo\Contract\BuilderAwareInterface|\League\Container\ContainerAwareInterface $commandClass
      *
      * @return null|object
      */
@@ -344,7 +358,8 @@ public function installRoboHandlers()
      *
      * @param array $args
      *
-     * @return array $args with shebang script removed
+     * @return array $args
+     *   With shebang script removed.
      */
     protected function shebang($args)
     {
@@ -371,9 +386,11 @@ protected function shebang($args)
      * Determine if the specified argument is a path to a shebang script.
      * If so, load it.
      *
-     * @param string $filepath file to check
+     * @param string $filepath
+     *   File to check.
      *
-     * @return bool Returns TRUE if shebang script was processed
+     * @return bool
+     *   Returns TRUE if shebang script was processed.
      */
     protected function isShebangFile($filepath)
     {
@@ -444,9 +461,9 @@ protected function processRoboOptions($argv)
 
         if (substr($argv[$pos], 0, 12) == '--load-from=') {
             $this->dir = substr($argv[$pos], 12);
-        } elseif (isset($argv[$pos +1])) {
-            $this->dir = $argv[$pos +1];
-            unset($argv[$pos +1]);
+        } elseif (isset($argv[$pos + 1])) {
+            $this->dir = $argv[$pos + 1];
+            unset($argv[$pos + 1]);
         }
         unset($argv[$pos]);
         // Make adjustments if '--load-from' points at a file.
diff --git a/vendor/consolidation/robo/src/State/Consumer.php b/vendor/consolidation/robo/src/State/Consumer.php
index ab9c0e27781f54bd5c9222fb6c20f0990bf8184d..f2527a117bd3f98152d7f3f56e07e1e407050840 100644
--- a/vendor/consolidation/robo/src/State/Consumer.php
+++ b/vendor/consolidation/robo/src/State/Consumer.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\State;
 
 use Robo\State\Data;
@@ -6,7 +7,7 @@
 interface Consumer
 {
     /**
-     * @return Data
+     * @return \Robo\State\Data
      */
     public function receiveState(Data $state);
 }
diff --git a/vendor/consolidation/robo/src/State/Data.php b/vendor/consolidation/robo/src/State/Data.php
index 34cb5c761a9ac606d17be0f12e7bf95217bcd613..e6027d9735959765a95eab800e0ab1ef28e3509e 100644
--- a/vendor/consolidation/robo/src/State/Data.php
+++ b/vendor/consolidation/robo/src/State/Data.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\State;
 
 /**
@@ -40,7 +41,7 @@ public function getMessage()
     }
 
     /**
-     * @param string message
+     * @param string $message
      */
     public function setMessage($message)
     {
@@ -52,7 +53,7 @@ public function setMessage($message)
      * existing in this result takes precedence over the
      * data in the Result being merged.
      *
-     * @param \Robo\ResultData $result
+     * @param \Robo\State\Data $result
      *
      * @return $this
      */
@@ -123,6 +124,10 @@ public function getExecutionTime()
 
     /**
      * Accumulate execution time
+     *
+     * @param array|float $duration
+     *
+     * @return null|float
      */
     public function accumulateExecutionTime($duration)
     {
@@ -136,6 +141,10 @@ public function accumulateExecutionTime($duration)
 
     /**
      * Accumulate the message.
+     *
+     * @param string $message
+     *
+     * @return string
      */
     public function accumulateMessage($message)
     {
diff --git a/vendor/consolidation/robo/src/State/StateAwareInterface.php b/vendor/consolidation/robo/src/State/StateAwareInterface.php
index f86bccb87fe3e61649cded81b65894e49ec067eb..95bb823c2884143a7dd2bc60c76526989ec2b950 100644
--- a/vendor/consolidation/robo/src/State/StateAwareInterface.php
+++ b/vendor/consolidation/robo/src/State/StateAwareInterface.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\State;
 
 use Robo\State\Data;
@@ -6,23 +7,24 @@
 interface StateAwareInterface
 {
     /**
-     * @return Data
+     * @return \Robo\State\Data
      */
     public function getState();
 
     /**
-     * @param Data state
+     * @param \Robo\State\Data $state
      */
     public function setState(Data $state);
 
     /**
-     * @param $key
-     * @param value
+     * @param int|string $key
+     * @param mixed $value
      */
     public function setStateValue($key, $value);
 
     /**
-     * @param Data update state takes precedence over current state.
+     * @param \Robo\State\Data
+     *   Update state takes precedence over current state.
      */
     public function updateState(Data $update);
 
diff --git a/vendor/consolidation/robo/src/State/StateAwareTrait.php b/vendor/consolidation/robo/src/State/StateAwareTrait.php
index a1de1f15c610fa7d292116aeb8df752c1acd6026..da0101028bdd5f1c273fd56ce04a838ecbf5345b 100644
--- a/vendor/consolidation/robo/src/State/StateAwareTrait.php
+++ b/vendor/consolidation/robo/src/State/StateAwareTrait.php
@@ -1,47 +1,46 @@
 <?php
+
 namespace Robo\State;
 
 use Robo\State\Data;
 
+/**
+ * @see \Robo\State\StateAwareInterface
+ */
 trait StateAwareTrait
 {
+    /**
+     * @var \Robo\State\Data
+     */
     protected $state;
 
     /**
-     * {@inheritdoc}
+     * @return \Robo\State\Data
      */
     public function getState()
     {
         return $this->state;
     }
 
-    /**
-     * {@inheritdoc}
-     */
     public function setState(Data $state)
     {
         $this->state = $state;
     }
 
     /**
-     * {@inheritdoc}
+     * @param int|string $key
+     * @param mixed $value
      */
     public function setStateValue($key, $value)
     {
         $this->state[$key] = $value;
     }
 
-    /**
-     * {@inheritdoc}
-     */
     public function updateState(Data $update)
     {
         $this->state->update($update);
     }
 
-    /**
-     * {@inheritdoc}
-     */
     public function resetState()
     {
         $this->state = new Data();
diff --git a/vendor/consolidation/robo/src/Symfony/SymfonyStyleInjector.php b/vendor/consolidation/robo/src/Symfony/SymfonyStyleInjector.php
new file mode 100644
index 0000000000000000000000000000000000000000..b6149ac34c6a691ec4c3144715396069a24f4d40
--- /dev/null
+++ b/vendor/consolidation/robo/src/Symfony/SymfonyStyleInjector.php
@@ -0,0 +1,16 @@
+<?php
+
+namespace Robo\Symfony;
+
+use Consolidation\AnnotatedCommand\CommandData;
+use Consolidation\AnnotatedCommand\CommandProcessor;
+use Consolidation\AnnotatedCommand\ParameterInjector;
+use Symfony\Component\Console\Style\SymfonyStyle;
+
+class SymfonyStyleInjector implements ParameterInjector
+{
+    public function get(CommandData $commandData, $interfaceName)
+    {
+        return new SymfonyStyle($commandData->input(), $commandData->output());
+    }
+}
diff --git a/vendor/consolidation/robo/src/Task/ApiGen/ApiGen.php b/vendor/consolidation/robo/src/Task/ApiGen/ApiGen.php
index 11ff764c21aa090e09794f68015676095e6b0a62..73c98fa5a14f58f6ae8af5383dddd123a9702ea1 100644
--- a/vendor/consolidation/robo/src/Task/ApiGen/ApiGen.php
+++ b/vendor/consolidation/robo/src/Task/ApiGen/ApiGen.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\ApiGen;
 
 use Robo\Contract\CommandInterface;
@@ -31,6 +32,10 @@ class ApiGen extends BaseTask implements CommandInterface
      * @var string
      */
     protected $command;
+
+    /**
+     * @var string
+     */
     protected $operation = 'generate';
 
     /**
@@ -68,8 +73,9 @@ public function __construct($pathToApiGen = null)
      */
     public function args($args)
     {
+        $func_args = func_get_args();
         if (!is_array($args)) {
-            $args = func_get_args();
+            $args = $func_args;
         }
         $args = array_map(function ($arg) {
             if (preg_match('/^\w+$/', trim($arg)) === 1) {
@@ -84,10 +90,12 @@ public function args($args)
     }
 
     /**
-     * @param array|Traversable|string $arg a single object or something traversable
+     * @param array|\Traversable|string $arg
+     *   A single object or something traversable.
      *
-     * @return array|Traversable the provided argument if it was already traversable, or the given
-     *                           argument returned as a one-element array
+     * @return array|\Traversable
+     *   The provided argument if it was already traversable, or the given
+     *   argument returned as a one-element array.
      */
     protected static function forceTraversable($arg)
     {
@@ -99,10 +107,12 @@ protected static function forceTraversable($arg)
     }
 
     /**
-     * @param array|string $arg a single argument or an array of multiple string values
+     * @param array|string $arg
+     *   A single argument or an array of multiple string values.
      *
-     * @return string a comma-separated string of all of the provided arguments, suitable
-     *                as a command-line "list" type argument for ApiGen
+     * @return string
+     *   A comma-separated string of all of the provided arguments, suitable as
+     *   a command-line "list" type argument for ApiGen.
      */
     protected static function asList($arg)
     {
@@ -111,13 +121,15 @@ protected static function asList($arg)
     }
 
     /**
-     * @param bool|string $val an argument to be normalized
-     * @param string $default one of self::BOOL_YES or self::BOOK_NO if the provided
-     *               value could not deterministically be converted to a
-     *               yes or no value
+     * @param bool|string $val
+     *   An argument to be normalized.
+     * @param string $default
+     *   One of self::BOOL_YES or self::BOOK_NO if the provided value could not
+     *   deterministically be converted to a yes or no value.
      *
-     * @return string the given value as a command-line "yes|no" type of argument for ApiGen,
-     *                or the default value if none could be determined
+     * @return string
+     *   The given value as a command-line "yes|no" type of argument for ApiGen,
+     *   or the default value if none could be determined.
      */
     protected static function asTextBool($val, $default)
     {
@@ -155,7 +167,8 @@ public function config($config)
     }
 
     /**
-     * @param array|string|Traversable $src one or more source values
+     * @param array|string|\Traversable $src
+     *   One or more source values.
      *
      * @return $this
      */
@@ -179,7 +192,8 @@ public function destination($dest)
     }
 
     /**
-     * @param array|string $exts one or more extensions
+     * @param array|string $exts
+     *   One or more extensions.
      *
      * @return $this
      */
@@ -190,7 +204,8 @@ public function extensions($exts)
     }
 
     /**
-     * @param array|string $exclude one or more exclusions
+     * @param array|string $exclude
+     *   One or more exclusions.
      *
      * @return $this
      */
@@ -203,7 +218,8 @@ public function exclude($exclude)
     }
 
     /**
-     * @param array|string|Traversable $path one or more skip-doc-path values
+     * @param array|string|\Traversable $path
+     *   One or more skip-doc-path values.
      *
      * @return $this
      */
@@ -216,7 +232,8 @@ public function skipDocPath($path)
     }
 
     /**
-     * @param array|string|Traversable $prefix one or more skip-doc-prefix values
+     * @param array|string|\Traversable $prefix
+     *   One or more skip-doc-prefix values.
      *
      * @return $this
      */
@@ -229,7 +246,8 @@ public function skipDocPrefix($prefix)
     }
 
     /**
-     * @param array|string $charset one or more charsets
+     * @param array|string $charset
+     *   One or more charsets.
      *
      * @return $this
      */
@@ -306,7 +324,8 @@ public function templateConfig($templateConfig)
     }
 
     /**
-     * @param array|string $tags one or more supported html tags
+     * @param array|string $tags
+     *   One or more supported html tags.
      *
      * @return $this
      */
@@ -328,7 +347,8 @@ public function groups($groups)
     }
 
     /**
-     * @param array|string $types or more supported autocomplete types
+     * @param array|string $types
+     *   One or more supported autocomplete types.
      *
      * @return $this
      */
@@ -339,7 +359,8 @@ public function autocomplete($types)
     }
 
     /**
-     * @param array|string $levels one or more access levels
+     * @param array|string $levels
+     *   One or more access levels.
      *
      * @return $this
      */
@@ -350,7 +371,8 @@ public function accessLevels($levels)
     }
 
     /**
-     * @param boolean|string $internal 'yes' or true if internal, 'no' or false if not
+     * @param boolean|string $internal
+     *   'yes' or true if internal, 'no' or false if not.
      *
      * @return $this
      */
@@ -361,8 +383,9 @@ public function internal($internal)
     }
 
     /**
-     * @param boolean|string $php 'yes' or true to generate documentation for internal php classes,
-     *                            'no' or false otherwise
+     * @param bool|string $php
+     *   'yes' or true to generate documentation for internal php classes, 'no'
+     *   or false otherwise.
      *
      * @return $this
      */
@@ -373,7 +396,9 @@ public function php($php)
     }
 
     /**
-     * @param bool|string $tree 'yes' or true to generate a tree view of classes, 'no' or false otherwise
+     * @param bool|string $tree
+     *   'yes' or true to generate a tree view of classes, 'no' or false
+     *   otherwise.
      *
      * @return $this
      */
@@ -384,7 +409,9 @@ public function tree($tree)
     }
 
     /**
-     * @param bool|string $dep 'yes' or true to generate documentation for deprecated classes, 'no' or false otherwise
+     * @param bool|string $dep
+     *   'yes' or true to generate documentation for deprecated classes, 'no' or
+     *   false otherwise.
      *
      * @return $this
      */
@@ -395,7 +422,8 @@ public function deprecated($dep)
     }
 
     /**
-     * @param bool|string $todo 'yes' or true to document tasks, 'no' or false otherwise
+     * @param bool|string $todo
+     *   'yes' or true to document tasks, 'no' or false otherwise.
      *
      * @return $this
      */
@@ -406,7 +434,9 @@ public function todo($todo)
     }
 
     /**
-     * @param bool|string $src 'yes' or true to generate highlighted source code, 'no' or false otherwise
+     * @param bool|string $src
+     *   'yes' or true to generate highlighted source code, 'no' or false
+     *   otherwise.
      *
      * @return $this
      */
@@ -417,7 +447,9 @@ public function sourceCode($src)
     }
 
     /**
-     * @param bool|string $zipped 'yes' or true to generate downloadable documentation, 'no' or false otherwise
+     * @param bool|string $zipped
+     *   'yes' or true to generate downloadable documentation, 'no' or false
+     *   otherwise.
      *
      * @return $this
      */
@@ -427,6 +459,11 @@ public function download($zipped)
         return $this;
     }
 
+    /**
+     * @param string $path
+     *
+     * @return $this
+     */
     public function report($path)
     {
         $this->option('report', $path);
@@ -434,7 +471,9 @@ public function report($path)
     }
 
     /**
-     * @param bool|string $wipeout 'yes' or true to clear out the destination directory, 'no' or false otherwise
+     * @param bool|string $wipeout
+     *   'yes' or true to clear out the destination directory, 'no' or false
+     *   otherwise.
      *
      * @return $this
      */
@@ -445,7 +484,8 @@ public function wipeout($wipeout)
     }
 
     /**
-     * @param bool|string $quiet 'yes' or true for quiet, 'no' or false otherwise
+     * @param bool|string $quiet
+     *   'yes' or true for quiet, 'no' or false otherwise.
      *
      * @return $this
      */
@@ -456,7 +496,8 @@ public function quiet($quiet)
     }
 
     /**
-     * @param bool|string $bar 'yes' or true to display a progress bar, 'no' or false otherwise
+     * @param bool|string $bar
+     *   'yes' or true to display a progress bar, 'no' or false otherwise.
      *
      * @return $this
      */
@@ -467,7 +508,8 @@ public function progressbar($bar)
     }
 
     /**
-     * @param bool|string $colors 'yes' or true colorize the output, 'no' or false otherwise
+     * @param bool|string $colors
+     *   'yes' or true colorize the output, 'no' or false otherwise.
      *
      * @return $this
      */
@@ -478,7 +520,8 @@ public function colors($colors)
     }
 
     /**
-     * @param bool|string $check 'yes' or true to check for updates, 'no' or false otherwise
+     * @param bool|string $check
+     *   'yes' or true to check for updates, 'no' or false otherwise.
      *
      * @return $this
      */
@@ -489,7 +532,8 @@ public function updateCheck($check)
     }
 
     /**
-     * @param bool|string $debug 'yes' or true to enable debug mode, 'no' or false otherwise
+     * @param bool|string $debug
+     *   'yes' or true to enable debug mode, 'no' or false otherwise.
      *
      * @return $this
      */
diff --git a/vendor/consolidation/robo/src/Task/ApiGen/loadTasks.php b/vendor/consolidation/robo/src/Task/ApiGen/loadTasks.php
index e8cd372af357cf21eebe6d31516cf43f3b364d33..62b59311de7051387598d5d49a65c74161c82249 100644
--- a/vendor/consolidation/robo/src/Task/ApiGen/loadTasks.php
+++ b/vendor/consolidation/robo/src/Task/ApiGen/loadTasks.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\ApiGen;
 
 trait loadTasks
@@ -6,7 +7,7 @@ trait loadTasks
     /**
      * @param null|string $pathToApiGen
      *
-     * @return \Robo\Task\ApiGen\ApiGen
+     * @return \Robo\Task\ApiGen\ApiGen|\Robo\Collection\CollectionBuilder
      */
     protected function taskApiGen($pathToApiGen = null)
     {
diff --git a/vendor/consolidation/robo/src/Task/Archive/Extract.php b/vendor/consolidation/robo/src/Task/Archive/Extract.php
index a00a0baf86bc4a000064afa21556d06e01a8d6b9..72d708bac70657d4d647f4b4e83098f267b5d9be 100644
--- a/vendor/consolidation/robo/src/Task/Archive/Extract.php
+++ b/vendor/consolidation/robo/src/Task/Archive/Extract.php
@@ -274,6 +274,6 @@ protected static function archiveType($filename)
      */
     protected static function getTmpDir()
     {
-        return getcwd().'/tmp'.rand().time();
+        return getcwd() . '/tmp' . rand() . time();
     }
 }
diff --git a/vendor/consolidation/robo/src/Task/Archive/Pack.php b/vendor/consolidation/robo/src/Task/Archive/Pack.php
index 0970f8e88e81272a352026318bbd1c40d4bf43ea..90db1a94a23114f3452feb2bc4cac7fa6b3638dd 100644
--- a/vendor/consolidation/robo/src/Task/Archive/Pack.php
+++ b/vendor/consolidation/robo/src/Task/Archive/Pack.php
@@ -40,7 +40,8 @@ class Pack extends BaseTask implements PrintedInterface
     /**
      * Construct the class.
      *
-     * @param string $archiveFile The full path and name of the archive file to create.
+     * @param string $archiveFile
+     *   The full path and name of the archive file to create.
      *
      * @since   1.0
      */
@@ -52,7 +53,8 @@ public function __construct($archiveFile)
     /**
      * Satisfy the parent requirement.
      *
-     * @return bool Always returns true.
+     * @return bool
+     *   Always returns true.
      *
      * @since   1.0
      */
@@ -76,10 +78,10 @@ public function archiveFile($archiveFile)
      * Add an item to the archive. Like file_exists(), the parameter
      * may be a file or a directory.
      *
-     * @var string
-     *             Relative path and name of item to store in archive
-     * @var string
-     *             Absolute or relative path to file or directory's location in filesystem
+     * @param string $placementLocation
+     *   Relative path and name of item to store in archive.
+     * @param string $filesystemLocation
+     *   Absolute or relative path to file or directory's location in filesystem.
      *
      * @return $this
      */
@@ -94,10 +96,10 @@ public function addFile($placementLocation, $filesystemLocation)
      * Alias for addFile, in case anyone has angst about using
      * addFile with a directory.
      *
-     * @var string
-     *             Relative path and name of directory to store in archive
-     * @var string
-     *             Absolute or relative path to directory or directory's location in filesystem
+     * @param string $placementLocation
+     *   Relative path and name of directory to store in archive.
+     * @param string $filesystemLocation
+     *   Absolute or relative path to directory or directory's location in filesystem.
      *
      * @return $this
      */
@@ -111,13 +113,14 @@ public function addDir($placementLocation, $filesystemLocation)
     /**
      * Add a file or directory, or list of same to the archive.
      *
-     * @var string|array
-     *                   If given a string, should contain the relative filesystem path to the
-     *                   the item to store in archive; this will also be used as the item's
-     *                   path in the archive, so absolute paths should not be used here.
-     *                   If given an array, the key of each item should be the path to store
-     *                   in the archive, and the value should be the filesystem path to the
-     *                   item to store.
+     * @param string|array $item
+     *   If given a string, should contain the relative filesystem path to the
+     *   the item to store in archive; this will also be used as the item's
+     *   path in the archive, so absolute paths should not be used here.
+     *   If given an array, the key of each item should be the path to store
+     *   in the archive, and the value should be the filesystem path to the
+     *   item to store.
+     *
      * @return $this
      */
     public function add($item)
@@ -208,7 +211,7 @@ protected function archiveTar($archiveFile, $items)
      */
     protected function archiveZip($archiveFile, $items)
     {
-        if (!extension_loaded('zlib')) {
+        if (!extension_loaded('zlib') || !class_exists(\ZipArchive::class)) {
             return Result::errorMissingExtension($this, 'zlib', 'zip packing');
         }
 
diff --git a/vendor/consolidation/robo/src/Task/Archive/loadTasks.php b/vendor/consolidation/robo/src/Task/Archive/loadTasks.php
index cf846fdf82adb30315738124e0f9b0bccf90c0be..0e30852a7678b3a7d720f7ca08bee8a29ada063c 100644
--- a/vendor/consolidation/robo/src/Task/Archive/loadTasks.php
+++ b/vendor/consolidation/robo/src/Task/Archive/loadTasks.php
@@ -1,12 +1,13 @@
 <?php
+
 namespace Robo\Task\Archive;
 
 trait loadTasks
 {
     /**
-     * @param $filename
+     * @param string $filename
      *
-     * @return Pack
+     * @return \Robo\Task\Archive\Pack|\Robo\Collection\CollectionBuilder
      */
     protected function taskPack($filename)
     {
@@ -14,9 +15,9 @@ protected function taskPack($filename)
     }
 
     /**
-     * @param $filename
+     * @param string $filename
      *
-     * @return Extract
+     * @return \Robo\Task\Archive\Extract|\Robo\Collection\CollectionBuilder
      */
     protected function taskExtract($filename)
     {
diff --git a/vendor/consolidation/robo/src/Task/Assets/ImageMinify.php b/vendor/consolidation/robo/src/Task/Assets/ImageMinify.php
index 1aa625932fcdbb53280af20923f9e1ccac9f3df4..ef61eb3aa8e674c0a7fbf5517c68b69d2976add7 100644
--- a/vendor/consolidation/robo/src/Task/Assets/ImageMinify.php
+++ b/vendor/consolidation/robo/src/Task/Assets/ImageMinify.php
@@ -150,7 +150,7 @@ class ImageMinify extends BaseTask
      *
      * @link https://github.com/imagemin
      *
-     * @var array
+     * @var string[]
      */
     protected $imageminRepos = [
         // PNG
@@ -171,6 +171,9 @@ class ImageMinify extends BaseTask
         'cwebp' => 'https://github.com/imagemin/cwebp-bin', // note: we do not support this minifier because it creates WebP from non-WebP files
     ];
 
+    /**
+     * @param string|string[] $dirs
+     */
     public function __construct($dirs)
     {
         is_array($dirs)
@@ -182,12 +185,12 @@ public function __construct($dirs)
         // guess the best path for the executables based on __DIR__
         if (($pos = strpos(__DIR__, 'consolidation/robo')) !== false) {
             // the executables should be stored in vendor/bin
-            $this->executableTargetDir = substr(__DIR__, 0, $pos).'bin';
+            $this->executableTargetDir = substr(__DIR__, 0, $pos) . 'bin';
         }
 
         // check if the executables are already available
         foreach ($this->imageminRepos as $exec => $url) {
-            $path = $this->executableTargetDir.'/'.$exec;
+            $path = $this->executableTargetDir . '/' . $exec;
             // if this is Windows add a .exe extension
             if (substr($this->getOS(), 0, 3) == 'win') {
                 $path .= '.exe';
@@ -257,7 +260,7 @@ public function minifier($minifier, array $options = [])
     }
 
     /**
-     * @param array $dirs
+     * @param string[] $dirs
      *
      * @return array|\Robo\Result
      *
@@ -289,7 +292,7 @@ protected function findFiles($dirs)
             } catch (\InvalidArgumentException $e) {
                 // if finder cannot handle it, try with in()->name()
                 if (strpos($dir, '/') === false) {
-                    $dir = './'.$dir;
+                    $dir = './' . $dir;
                 }
                 $parts = explode('/', $dir);
                 $new_dir = implode('/', array_slice($parts, 0, -1));
@@ -319,13 +322,13 @@ protected function findFiles($dirs)
      */
     protected function getTarget($file, $to)
     {
-        $target = $to.'/'.basename($file);
+        $target = $to . '/' . basename($file);
 
         return $target;
     }
 
     /**
-     * @param array $files
+     * @param string[] $files
      *
      * @return \Robo\Result
      */
@@ -339,6 +342,8 @@ protected function minify($files)
 
         // loop through the files
         foreach ($files as $from => $to) {
+            $minifier = '';
+
             if (!isset($this->minifier)) {
                 // check filetype based on the extension
                 $extension = strtolower(pathinfo($from, PATHINFO_EXTENSION));
@@ -399,7 +404,7 @@ protected function minify($files)
                             $this->printTaskSuccess($result->getMessage());
                             // retry the conversion with the downloaded executable
                             if (is_callable($minifier)) {
-                                $command = call_user_func($minifier, $from, $to, $minifierOptions);
+                                $command = call_user_func($minifier, $from, $to, $this->minifierOptions);
                             } elseif (method_exists($this, $minifier)) {
                                 $command = $this->{$minifier}($from, $to);
                             }
@@ -432,7 +437,7 @@ protected function minify($files)
     protected function getOS()
     {
         $os = php_uname('s');
-        $os .= '/'.php_uname('m');
+        $os .= '/' . php_uname('m');
         // replace x86_64 to x64, because the imagemin repo uses that
         $os = str_replace('x86_64', 'x64', $os);
         // replace i386, i686, etc to x86, because of imagemin
@@ -492,10 +497,10 @@ protected function installFromImagemin($executable)
         $this->printTaskInfo('Downloading the {executable} executable from the imagemin repository', ['executable' => $executable]);
 
         $os = $this->getOS();
-        $url = $this->imageminRepos[$executable].'/blob/master/vendor/'.$os.'/'.$executable.'?raw=true';
+        $url = $this->imageminRepos[$executable] . '/blob/master/vendor/' . $os . '/' . $executable . '?raw=true';
         if (substr($os, 0, 3) == 'win') {
             // if it is win, add a .exe extension
-            $url = $this->imageminRepos[$executable].'/blob/master/vendor/'.$os.'/'.$executable.'.exe?raw=true';
+            $url = $this->imageminRepos[$executable] . '/blob/master/vendor/' . $os . '/' . $executable . '.exe?raw=true';
         }
         $data = @file_get_contents($url, false, null);
         if ($data === false) {
@@ -525,14 +530,14 @@ protected function installFromImagemin($executable)
             mkdir($this->executableTargetDir);
         }
         // save the executable into the target dir
-        $path = $this->executableTargetDir.'/'.$executable;
+        $path = $this->executableTargetDir . '/' . $executable;
         if (substr($os, 0, 3) == 'win') {
             // if it is win, add a .exe extension
-            $path = $this->executableTargetDir.'/'.$executable.'.exe';
+            $path = $this->executableTargetDir . '/' . $executable . '.exe';
         }
         $result = file_put_contents($path, $data);
         if ($result === false) {
-            $message = sprintf('Could not copy the executable <info>%s</info> to %s', $executable, $target_dir);
+            $message = sprintf('Could not copy the executable <info>%s</info> to %s', $executable, $path);
 
             return Result::error($this, $message);
         }
@@ -540,7 +545,7 @@ protected function installFromImagemin($executable)
         chmod($path, 0755);
 
         // if everything successful, store the executable path
-        $this->executablePaths[$executable] = $this->executableTargetDir.'/'.$executable;
+        $this->executablePaths[$executable] = $this->executableTargetDir . '/' . $executable;
         // if it is win, add a .exe extension
         if (substr($os, 0, 3) == 'win') {
             $this->executablePaths[$executable] .= '.exe';
@@ -582,6 +587,12 @@ protected function jpegtran($from, $to)
         return $command;
     }
 
+    /**
+     * @param string $from
+     * @param string $to
+     *
+     * @return string
+     */
     protected function gifsicle($from, $to)
     {
         $command = sprintf('gifsicle -o "%s" "%s"', $to, $from);
diff --git a/vendor/consolidation/robo/src/Task/Assets/Less.php b/vendor/consolidation/robo/src/Task/Assets/Less.php
index 4cfa097802c68fb2f0453cb4050312b209440293..ca8aa08df3f07c9c9275861fbd5393cea2d7fa27 100644
--- a/vendor/consolidation/robo/src/Task/Assets/Less.php
+++ b/vendor/consolidation/robo/src/Task/Assets/Less.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Assets;
 
 use Robo\Result;
diff --git a/vendor/consolidation/robo/src/Task/Assets/Minify.php b/vendor/consolidation/robo/src/Task/Assets/Minify.php
index 3187714ecc02c867ace50db3b6713b7fec00b74f..4c9798e458d581fbad7d326596c0f0cf3c247dcf 100644
--- a/vendor/consolidation/robo/src/Task/Assets/Minify.php
+++ b/vendor/consolidation/robo/src/Task/Assets/Minify.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Assets;
 
 use Robo\Result;
@@ -23,7 +24,7 @@
 class Minify extends BaseTask
 {
     /**
-     * @var array
+     * @var string[]
      */
     protected $types = ['css', 'js'];
 
@@ -43,7 +44,7 @@ class Minify extends BaseTask
     protected $type;
 
     /**
-     * @var array
+     * @var bool[]
      */
     protected $squeezeOptions = [
         'singleLine' => true,
@@ -87,7 +88,8 @@ public function to($dst)
     /**
      * Sets type with validation.
      *
-     * @param string $type css|js
+     * @param string $type
+     *   Allowed values: "css", "js".
      *
      * @return $this
      */
@@ -217,11 +219,11 @@ public function keepImportantComments($keepImportantComments)
     }
 
     /**
-     * specialVarRx option for the JS minimisation.
+     * Set specialVarRx option for the JS minimisation.
      *
      * @param bool $specialVarRx
      *
-     * @return $this ;
+     * @return $this
      */
     public function specialVarRx($specialVarRx)
     {
diff --git a/vendor/consolidation/robo/src/Task/Assets/Scss.php b/vendor/consolidation/robo/src/Task/Assets/Scss.php
index ffd39345a05966c6b8a25a72f865db2fc1c35de1..999604b1abfda42b01f07e51ae916794bf9332a9 100644
--- a/vendor/consolidation/robo/src/Task/Assets/Scss.php
+++ b/vendor/consolidation/robo/src/Task/Assets/Scss.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Assets;
 
 use Robo\Result;
@@ -19,7 +20,7 @@
  * Use the following scss compiler in your project:
  *
  * ```
- * "leafo/scssphp": "~0.1",
+ * "scssphp/scssphp ": "~1.0.0",
  * ```
  *
  * You can implement additional compilers by extending this task and adding a
@@ -34,12 +35,12 @@ class Scss extends CssPreprocessor
      * @var string[]
      */
     protected $compilers = [
-        'scssphp', // https://github.com/leafo/scssphp
+        'scssphp', // https://github.com/scssphp/scssphp
     ];
 
     /**
      * scssphp compiler
-     * @link https://github.com/leafo/scssphp
+     * @link https://github.com/scssphp/scssphp
      *
      * @param string $file
      *
@@ -47,12 +48,12 @@ class Scss extends CssPreprocessor
      */
     protected function scssphp($file)
     {
-        if (!class_exists('\Leafo\ScssPhp\Compiler')) {
-            return Result::errorMissingPackage($this, 'scssphp', 'leafo/scssphp');
+        if (!class_exists('\ScssPhp\ScssPhp\Compiler')) {
+            return Result::errorMissingPackage($this, 'scssphp', 'scssphp/scssphp');
         }
 
         $scssCode = file_get_contents($file);
-        $scss = new \Leafo\ScssPhp\Compiler();
+        $scss = new \ScssPhp\ScssPhp\Compiler();
 
         // set options for the scssphp compiler
         if (isset($this->compilerOptions['importDirs'])) {
@@ -71,16 +72,16 @@ protected function scssphp($file)
      *
      * The method setFormatter($formatterName) sets the current formatter to $formatterName,
      * the name of a class as a string that implements the formatting interface. See the source
-     * for Leafo\ScssPhp\Formatter\Expanded for an example.
+     * for ScssPhp\ScssPhp\Formatter\Expanded for an example.
      *
-     * Five formatters are included with leafo/scssphp:
-     * - Leafo\ScssPhp\Formatter\Expanded
-     * - Leafo\ScssPhp\Formatter\Nested (default)
-     * - Leafo\ScssPhp\Formatter\Compressed
-     * - Leafo\ScssPhp\Formatter\Compact
-     * - Leafo\ScssPhp\Formatter\Crunched
+     * Five formatters are included with scssphp/scssphp:
+     * - ScssPhp\ScssPhp\Formatter\Expanded
+     * - ScssPhp\ScssPhp\Formatter\Nested (default)
+     * - ScssPhp\ScssPhp\Formatter\Compressed
+     * - ScssPhp\ScssPhp\Formatter\Compact
+     * - ScssPhp\ScssPhp\Formatter\Crunched
      *
-     * @link http://leafo.github.io/scssphp/docs/#output-formatting
+     * @link https://scssphp.github.io/scssphp/docs/#output-formatting
      *
      * @param string $formatterName
      *
diff --git a/vendor/consolidation/robo/src/Task/Assets/loadTasks.php b/vendor/consolidation/robo/src/Task/Assets/loadTasks.php
index 12192dd804cdc6fbc3a9c3decd03e06d41e34a8d..8b63765f8921f84b8a77d9a4fa244477c695285d 100644
--- a/vendor/consolidation/robo/src/Task/Assets/loadTasks.php
+++ b/vendor/consolidation/robo/src/Task/Assets/loadTasks.php
@@ -1,13 +1,14 @@
 <?php
+
 namespace Robo\Task\Assets;
 
 trait loadTasks
 {
     /**
-    * @param string $input
-    *
-     * @return \Robo\Task\Assets\Minify
-    */
+     * @param string $input
+     *
+     * @return \Robo\Task\Assets\Minify|\Robo\Collection\CollectionBuilder
+     */
     protected function taskMinify($input)
     {
         return $this->task(Minify::class, $input);
@@ -16,7 +17,7 @@ protected function taskMinify($input)
     /**
      * @param string|string[] $input
      *
-     * @return \Robo\Task\Assets\ImageMinify
+     * @return \Robo\Task\Assets\ImageMinify|\Robo\Collection\CollectionBuilder
      */
     protected function taskImageMinify($input)
     {
@@ -26,7 +27,7 @@ protected function taskImageMinify($input)
    /**
     * @param array $input
     *
-    * @return \Robo\Task\Assets\Less
+    * @return \Robo\Task\Assets\Less|\Robo\Collection\CollectionBuilder
     */
     protected function taskLess($input)
     {
@@ -36,7 +37,7 @@ protected function taskLess($input)
     /**
      * @param array $input
      *
-     * @return \Robo\Task\Assets\Scss
+     * @return \Robo\Task\Assets\Scss|\Robo\Collection\CollectionBuilder
      */
     protected function taskScss($input)
     {
diff --git a/vendor/consolidation/robo/src/Task/Base/Exec.php b/vendor/consolidation/robo/src/Task/Base/Exec.php
index 057c86a9bd280eef40b1f2101a7c7bb6f26729a3..6dd3752792480767911f2d06766b1ca0d04f30c0 100644
--- a/vendor/consolidation/robo/src/Task/Base/Exec.php
+++ b/vendor/consolidation/robo/src/Task/Base/Exec.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Base;
 
 use Robo\Common\ExecTrait;
@@ -50,9 +51,6 @@ public function __construct($command)
         $this->command = $this->receiveCommand($command);
     }
 
-    /**
-     *
-     */
     public function __destruct()
     {
         $this->stop();
@@ -61,6 +59,8 @@ public function __destruct()
     /**
      * Executes command in background mode (asynchronously)
      *
+     * @param bool $arg
+     *
      * @return $this
      */
     public function background($arg = true)
diff --git a/vendor/consolidation/robo/src/Task/Base/ExecStack.php b/vendor/consolidation/robo/src/Task/Base/ExecStack.php
index 51b39ef1d3db13cf3dbdf8c8b607b37e04aba5da..221e736fc077aa00812f47d20c4bf1ca9f7e8716 100644
--- a/vendor/consolidation/robo/src/Task/Base/ExecStack.php
+++ b/vendor/consolidation/robo/src/Task/Base/ExecStack.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Base;
 
 use Robo\Task\CommandStack;
diff --git a/vendor/consolidation/robo/src/Task/Base/ParallelExec.php b/vendor/consolidation/robo/src/Task/Base/ParallelExec.php
index c98b784196b7552ab2c34c1fbde50ccc313f0e56..51c5a39913bf32b1c5715f8d8afcdb72eb635d29 100644
--- a/vendor/consolidation/robo/src/Task/Base/ParallelExec.php
+++ b/vendor/consolidation/robo/src/Task/Base/ParallelExec.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Base;
 
 use Robo\Contract\CommandInterface;
@@ -187,7 +188,7 @@ public function run()
             if ($p->getExitCode() === 0) {
                 continue;
             }
-            $errorMessage .= "'" . $p->getCommandLine() . "' exited with code ". $p->getExitCode()." \n";
+            $errorMessage .= "'" . $p->getCommandLine() . "' exited with code " . $p->getExitCode() . " \n";
             $exitCode = max($exitCode, $p->getExitCode());
         }
         if (!$errorMessage) {
diff --git a/vendor/consolidation/robo/src/Task/Base/SymfonyCommand.php b/vendor/consolidation/robo/src/Task/Base/SymfonyCommand.php
index 708ea84512bf1bd88b3a5445d81616de1d00187c..ea8907bf2110e0965592bbbf8fe6c385d523b1cd 100644
--- a/vendor/consolidation/robo/src/Task/Base/SymfonyCommand.php
+++ b/vendor/consolidation/robo/src/Task/Base/SymfonyCommand.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Base;
 
 use Robo\Robo;
diff --git a/vendor/consolidation/robo/src/Task/Base/Watch.php b/vendor/consolidation/robo/src/Task/Base/Watch.php
index 3b2152d96fe48a94ebe7f19c3ec4b87e7c24ba34..7e1c210abce017cf5235ea3e63d37029844c73d8 100644
--- a/vendor/consolidation/robo/src/Task/Base/Watch.php
+++ b/vendor/consolidation/robo/src/Task/Base/Watch.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Base;
 
 use Lurker\ResourceWatcher;
@@ -37,6 +38,24 @@
  *      )->run();
  * ?>
  * ```
+ *
+ * Pass through the changed file to the callable function
+ *
+ * ```
+ * $this
+ *  ->taskWatch()
+ *  ->monitor(
+ *      'filename',
+ *      function ($event) {
+ *          $resource = $event->getResource();
+ *          ... do something with (string)$resource ...
+ *      },
+ *      FilesystemEvent::ALL
+ *  )
+ *  ->run();
+ * ```
+ *
+ * The $event parameter is a [standard Symfony file resource object](https://api.symfony.com/3.1/Symfony/Component/Config/Resource/FileResource.html)
  */
 class Watch extends BaseTask
 {
diff --git a/vendor/consolidation/robo/src/Task/Base/loadShortcuts.php b/vendor/consolidation/robo/src/Task/Base/loadShortcuts.php
index dba0af6610f58ea36acf0589df7b8dfdf4fc7556..f06ec9f8209ec452a13eecc37f871028f2e256be 100644
--- a/vendor/consolidation/robo/src/Task/Base/loadShortcuts.php
+++ b/vendor/consolidation/robo/src/Task/Base/loadShortcuts.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Base;
 
 trait loadShortcuts
diff --git a/vendor/consolidation/robo/src/Task/Base/loadTasks.php b/vendor/consolidation/robo/src/Task/Base/loadTasks.php
index ab5301bbe98124e3e901c37e57b2ff6a6a175fe5..01e04059d58f3e691218b5e1eefcecc88c45dcf2 100644
--- a/vendor/consolidation/robo/src/Task/Base/loadTasks.php
+++ b/vendor/consolidation/robo/src/Task/Base/loadTasks.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Base;
 
 trait loadTasks
@@ -6,7 +7,7 @@ trait loadTasks
     /**
      * @param string|\Robo\Contract\CommandInterface $command
      *
-     * @return Exec
+     * @return \Robo\Task\Base\Exec|\Robo\Collection\CollectionBuilder
      */
     protected function taskExec($command)
     {
@@ -14,7 +15,7 @@ protected function taskExec($command)
     }
 
     /**
-     * @return ExecStack
+     * @return \Robo\Task\Base\ExecStack|\Robo\Collection\CollectionBuilder
      */
     protected function taskExecStack()
     {
@@ -22,7 +23,7 @@ protected function taskExecStack()
     }
 
     /**
-     * @return ParallelExec
+     * @return \Robo\Task\Base\ParallelExec|\Robo\Collection\CollectionBuilder
      */
     protected function taskParallelExec()
     {
@@ -30,8 +31,9 @@ protected function taskParallelExec()
     }
 
     /**
-     * @param $command
-     * @return SymfonyCommand
+     * @param \Symfony\Component\Console\Command\Command $command
+     *
+     * @return \Robo\Task\Base\SymfonyCommand|\Robo\Collection\CollectionBuilder
      */
     protected function taskSymfonyCommand($command)
     {
@@ -39,7 +41,7 @@ protected function taskSymfonyCommand($command)
     }
 
     /**
-     * @return Watch
+     * @return \Robo\Task\Base\Watch|\Robo\Collection\CollectionBuilder
      */
     protected function taskWatch()
     {
diff --git a/vendor/consolidation/robo/src/Task/BaseTask.php b/vendor/consolidation/robo/src/Task/BaseTask.php
index 66155c0932a78299747e3a66a17555733ec5523f..40858532464cb8430bf20e81666592ee19b7a28e 100644
--- a/vendor/consolidation/robo/src/Task/BaseTask.php
+++ b/vendor/consolidation/robo/src/Task/BaseTask.php
@@ -1,9 +1,9 @@
 <?php
+
 namespace Robo\Task;
 
 use Robo\Common\InflectionTrait;
 use Robo\Contract\InflectionInterface;
-
 use Robo\Common\TaskIO;
 use Robo\Contract\TaskInterface;
 use Robo\Contract\ProgressIndicatorAwareInterface;
@@ -23,6 +23,8 @@ abstract class BaseTask implements TaskInterface, LoggerAwareInterface, Verbosit
      * ConfigAwareInterface uses this to decide where configuration
      * items come from. Default is this prefix + class name + key,
      * e.g. `task.Remote.Ssh.remoteDir`.
+     *
+     * @return string
      */
     protected static function configPrefix()
     {
@@ -33,6 +35,8 @@ protected static function configPrefix()
      * ConfigAwareInterface uses this to decide where configuration
      * items come from. Default is this prefix + class name + key,
      * e.g. `task.Ssh.remoteDir`.
+     *
+     * @return string
      */
     protected static function configPostfix()
     {
diff --git a/vendor/consolidation/robo/src/Task/Bower/Base.php b/vendor/consolidation/robo/src/Task/Bower/Base.php
index 9bc614c6321de88de6d98a1d6d50cb299b685343..cdaee7c4ca8b197e41cd9e07325332d17b8252da 100644
--- a/vendor/consolidation/robo/src/Task/Bower/Base.php
+++ b/vendor/consolidation/robo/src/Task/Bower/Base.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Bower;
 
 use Robo\Task\BaseTask;
@@ -8,7 +9,14 @@ abstract class Base extends BaseTask
 {
     use \Robo\Common\ExecOneCommand;
 
+    /**
+     * @var array
+     */
     protected $opts = [];
+
+    /**
+     * @var string
+     */
     protected $action = '';
 
     /**
diff --git a/vendor/consolidation/robo/src/Task/Bower/Install.php b/vendor/consolidation/robo/src/Task/Bower/Install.php
index c3c0ce7559715554679a730393c1da922c16005e..8e66562062eb1864c83ef47f2d38ed3e97c48100 100644
--- a/vendor/consolidation/robo/src/Task/Bower/Install.php
+++ b/vendor/consolidation/robo/src/Task/Bower/Install.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Bower;
 
 use Robo\Contract\CommandInterface;
diff --git a/vendor/consolidation/robo/src/Task/Bower/Update.php b/vendor/consolidation/robo/src/Task/Bower/Update.php
index f0dfa94e354a8f324ad4096becafb000988fb41e..b548aceabd51dbe6124bd9a1f7307325c16767ff 100644
--- a/vendor/consolidation/robo/src/Task/Bower/Update.php
+++ b/vendor/consolidation/robo/src/Task/Bower/Update.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Bower;
 
 /**
diff --git a/vendor/consolidation/robo/src/Task/Bower/loadTasks.php b/vendor/consolidation/robo/src/Task/Bower/loadTasks.php
index 6e33f8acf9b1adcb8968693db5734e4bd41baf6b..5d522d347ede56accbfe1089d514ae1d93cfcf12 100644
--- a/vendor/consolidation/robo/src/Task/Bower/loadTasks.php
+++ b/vendor/consolidation/robo/src/Task/Bower/loadTasks.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Bower;
 
 trait loadTasks
@@ -6,7 +7,7 @@ trait loadTasks
     /**
      * @param null|string $pathToBower
      *
-     * @return Install
+     * @return \Robo\Task\Bower\Install|\Robo\Collection\CollectionBuilder
      */
     protected function taskBowerInstall($pathToBower = null)
     {
@@ -16,7 +17,7 @@ protected function taskBowerInstall($pathToBower = null)
     /**
      * @param null|string $pathToBower
      *
-     * @return Update
+     * @return \Robo\Task\Bower\Update|\Robo\Collection\CollectionBuilder
      */
     protected function taskBowerUpdate($pathToBower = null)
     {
diff --git a/vendor/consolidation/robo/src/Task/CommandStack.php b/vendor/consolidation/robo/src/Task/CommandStack.php
index 43fbd7ccfe02a9750b26cb21d104af346ffa8893..9114ebbed5d6c28de01303a86ecc8f6dd544ce75 100644
--- a/vendor/consolidation/robo/src/Task/CommandStack.php
+++ b/vendor/consolidation/robo/src/Task/CommandStack.php
@@ -18,6 +18,9 @@ abstract class CommandStack extends BaseTask implements CommandInterface, Printe
      */
     protected $executable;
 
+    /**
+     * @var \Robo\Result
+     */
     protected $result;
 
     /**
@@ -69,9 +72,9 @@ public function exec($command)
             $command = $this->executable . ' ' . $this->stripExecutableFromCommand($command);
             $command = trim($command);
         }
-        
+
         $this->exec[] = $command;
-        
+
         return $this;
     }
 
diff --git a/vendor/consolidation/robo/src/Task/Composer/Base.php b/vendor/consolidation/robo/src/Task/Composer/Base.php
index de3fe2174c0d7b8338794acde1643ed640a4433d..edd93a32ceeb497b12429170c500ee825ed1b931 100644
--- a/vendor/consolidation/robo/src/Task/Composer/Base.php
+++ b/vendor/consolidation/robo/src/Task/Composer/Base.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Composer;
 
 use Robo\Contract\CommandInterface;
@@ -15,7 +16,7 @@ abstract class Base extends BaseTask implements CommandInterface
     protected $command = '';
 
     /**
-     * @var boolena
+     * @var bool
      */
     protected $built = false;
 
@@ -65,6 +66,8 @@ public function __construct($pathToComposer = null)
     /**
      * adds `prefer-dist` option to composer
      *
+     * @param bool $preferDist
+     *
      * @return $this
      */
     public function preferDist($preferDist = true)
@@ -90,6 +93,8 @@ public function preferSource()
     /**
      * adds `dev` option to composer
      *
+     * @param bool $dev
+     *
      * @return $this
      */
     public function dev($dev = true)
@@ -115,6 +120,8 @@ public function noDev()
     /**
      * adds `ansi` option to composer
      *
+     * @param bool $ansi
+     *
      * @return $this
      */
     public function ansi($ansi = true)
@@ -137,6 +144,11 @@ public function noAnsi()
         return $this;
     }
 
+    /**
+     * @param bool $interaction
+     *
+     * @return $this
+     */
     public function interaction($interaction = true)
     {
         if (!$interaction) {
@@ -159,6 +171,8 @@ public function noInteraction()
     /**
      * adds `optimize-autoloader` option to composer
      *
+     * @param bool $optimize
+     *
      * @return $this
      */
     public function optimizeAutoloader($optimize = true)
@@ -172,6 +186,8 @@ public function optimizeAutoloader($optimize = true)
     /**
      * adds `ignore-platform-reqs` option to composer
      *
+     * @param bool $ignore
+     *
      * @return $this
      */
     public function ignorePlatformRequirements($ignore = true)
@@ -183,6 +199,8 @@ public function ignorePlatformRequirements($ignore = true)
     /**
      * disable plugins
      *
+     * @param bool $disable
+     *
      * @return $this
      */
     public function disablePlugins($disable = true)
@@ -196,6 +214,8 @@ public function disablePlugins($disable = true)
     /**
      * skip scripts
      *
+     * @param bool $disable
+     *
      * @return $this
      */
     public function noScripts($disable = true)
@@ -209,6 +229,8 @@ public function noScripts($disable = true)
     /**
      * adds `--working-dir $dir` option to composer
      *
+     * @param string $dir
+     *
      * @return $this
      */
     public function workingDir($dir)
diff --git a/vendor/consolidation/robo/src/Task/Composer/Config.php b/vendor/consolidation/robo/src/Task/Composer/Config.php
index b5a6bbff977ce8ab60a7dec9fa7c84c10a608759..990fe2789eeba1c9791278688876960adc0f4ff2 100644
--- a/vendor/consolidation/robo/src/Task/Composer/Config.php
+++ b/vendor/consolidation/robo/src/Task/Composer/Config.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Composer;
 
 /**
@@ -19,7 +20,11 @@ class Config extends Base
     protected $action = 'config';
 
     /**
-     * Set a configuration value
+     * Set a configuration value.
+     *
+     * @param string $key
+     * @param string $value
+     *
      * @return $this
      */
     public function set($key, $value)
@@ -31,6 +36,9 @@ public function set($key, $value)
 
     /**
      * Operate on the global repository
+     *
+     * @param bool $useGlobal
+     *
      * @return $this
      */
     public function useGlobal($useGlobal = true)
@@ -42,6 +50,10 @@ public function useGlobal($useGlobal = true)
     }
 
     /**
+     * @param string $id
+     * @param string $uri
+     * @param string $repoType
+     *
      * @return $this
      */
     public function repository($id, $uri, $repoType = 'vcs')
@@ -53,6 +65,8 @@ public function repository($id, $uri, $repoType = 'vcs')
     }
 
     /**
+     * @param string $id
+     *
      * @return $this
      */
     public function removeRepository($id)
@@ -62,6 +76,8 @@ public function removeRepository($id)
     }
 
     /**
+     * @param string $id
+     *
      * @return $this
      */
     public function disableRepository($id)
@@ -72,6 +88,8 @@ public function disableRepository($id)
     }
 
     /**
+     * @param string $id
+     *
      * @return $this
      */
     public function enableRepository($id)
diff --git a/vendor/consolidation/robo/src/Task/Composer/CreateProject.php b/vendor/consolidation/robo/src/Task/Composer/CreateProject.php
index 5f979a646ca378ce71d82f09dc23a84b2fd2dc6a..e833ebac23cd1c6b8e02a6812d891329f20ba92c 100644
--- a/vendor/consolidation/robo/src/Task/Composer/CreateProject.php
+++ b/vendor/consolidation/robo/src/Task/Composer/CreateProject.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Composer;
 
 /**
@@ -18,11 +19,24 @@ class CreateProject extends Base
      */
     protected $action = 'create-project';
 
+    /**
+     * @var
+     */
     protected $source;
+
+    /**
+     * @var string
+     */
     protected $target = '';
+
+    /**
+     * @var string
+     */
     protected $version = '';
 
     /**
+     * @param string $source
+     *
      * @return $this
      */
     public function source($source)
@@ -32,6 +46,8 @@ public function source($source)
     }
 
     /**
+     * @param string $target
+     *
      * @return $this
      */
     public function target($target)
@@ -41,6 +57,8 @@ public function target($target)
     }
 
     /**
+     * @param string $version
+     *
      * @return $this
      */
     public function version($version)
@@ -49,6 +67,11 @@ public function version($version)
         return $this;
     }
 
+    /**
+     * @param bool $keep
+     *
+     * @return $this
+     */
     public function keepVcs($keep = true)
     {
         if ($keep) {
@@ -57,6 +80,11 @@ public function keepVcs($keep = true)
         return $this;
     }
 
+    /**
+     * @param bool $noInstall
+     *
+     * @return $this
+     */
     public function noInstall($noInstall = true)
     {
         if ($noInstall) {
@@ -66,6 +94,8 @@ public function noInstall($noInstall = true)
     }
 
     /**
+     * @param string $repository
+     *
      * @return $this
      */
     public function repository($repository)
@@ -77,6 +107,8 @@ public function repository($repository)
     }
 
     /**
+     * @param string $stability
+     *
      * @return $this
      */
     public function stability($stability)
@@ -87,6 +119,9 @@ public function stability($stability)
         return $this;
     }
 
+    /**
+     * {@inheritdoc}
+     */
     public function buildCommand()
     {
         $this->arg($this->source);
diff --git a/vendor/consolidation/robo/src/Task/Composer/DumpAutoload.php b/vendor/consolidation/robo/src/Task/Composer/DumpAutoload.php
index 55b1ea00e4fa237d70fa87ce3fbf41e6d5ff8e07..8fbdd8cd915b141f16765e2e1759976f35ef9bad 100644
--- a/vendor/consolidation/robo/src/Task/Composer/DumpAutoload.php
+++ b/vendor/consolidation/robo/src/Task/Composer/DumpAutoload.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Composer;
 
 /**
@@ -40,6 +41,8 @@ class DumpAutoload extends Base
     protected $optimize;
 
     /**
+     * @param bool $optimize
+     *
      * @return $this
      */
     public function optimize($optimize = true)
diff --git a/vendor/consolidation/robo/src/Task/Composer/Init.php b/vendor/consolidation/robo/src/Task/Composer/Init.php
index c841299ddbefe210cc6d2c7a74757cd00553ac28..ab7c44b52bc7ff5281ae3bc975f892da00a0ecaa 100644
--- a/vendor/consolidation/robo/src/Task/Composer/Init.php
+++ b/vendor/consolidation/robo/src/Task/Composer/Init.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Composer;
 
 /**
@@ -19,6 +20,8 @@ class Init extends Base
     protected $action = 'init';
 
     /**
+     * @param string $projectName
+     *
      * @return $this
      */
     public function projectName($projectName)
@@ -28,6 +31,8 @@ public function projectName($projectName)
     }
 
     /**
+     * @param string $description
+     *
      * @return $this
      */
     public function description($description)
@@ -37,6 +42,8 @@ public function description($description)
     }
 
     /**
+     * @param string $author
+     *
      * @return $this
      */
     public function author($author)
@@ -46,6 +53,8 @@ public function author($author)
     }
 
     /**
+     * @param string $type
+     *
      * @return $this
      */
     public function projectType($type)
@@ -55,6 +64,8 @@ public function projectType($type)
     }
 
     /**
+     * @param string $homepage
+     *
      * @return $this
      */
     public function homepage($homepage)
@@ -65,6 +76,10 @@ public function homepage($homepage)
 
     /**
      * 'require' is a keyword, so it cannot be a method name.
+     *
+     * @param string $project
+     * @param null|string $version
+     *
      * @return $this
      */
     public function dependency($project, $version = null)
@@ -77,6 +92,8 @@ public function dependency($project, $version = null)
     }
 
     /**
+     * @param string $stability
+     *
      * @return $this
      */
     public function stability($stability)
@@ -86,6 +103,8 @@ public function stability($stability)
     }
 
     /**
+     * @param string $license
+     *
      * @return $this
      */
     public function license($license)
@@ -95,6 +114,8 @@ public function license($license)
     }
 
     /**
+     * @param string $repository
+     *
      * @return $this
      */
     public function repository($repository)
diff --git a/vendor/consolidation/robo/src/Task/Composer/Install.php b/vendor/consolidation/robo/src/Task/Composer/Install.php
index 76cb9861f63b0a02e28043d13f6e4b02cd902aa7..9231287a7fe4dafb4c8a92f937fd10fc79c53bd1 100644
--- a/vendor/consolidation/robo/src/Task/Composer/Install.php
+++ b/vendor/consolidation/robo/src/Task/Composer/Install.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Composer;
 
 /**
diff --git a/vendor/consolidation/robo/src/Task/Composer/Remove.php b/vendor/consolidation/robo/src/Task/Composer/Remove.php
index b0316f0514e2a5f8245b0dd7d5dca98dbc46fb9d..29f5c19c117cc6c96d2608009ef0f6d851f5d3a4 100644
--- a/vendor/consolidation/robo/src/Task/Composer/Remove.php
+++ b/vendor/consolidation/robo/src/Task/Composer/Remove.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Composer;
 
 /**
@@ -19,6 +20,8 @@ class Remove extends Base
     protected $action = 'remove';
 
     /**
+     * @param bool $dev
+     *
      * @return $this
      */
     public function dev($dev = true)
@@ -30,6 +33,8 @@ public function dev($dev = true)
     }
 
     /**
+     * @param bool $noProgress
+     *
      * @return $this
      */
     public function noProgress($noProgress = true)
@@ -41,6 +46,8 @@ public function noProgress($noProgress = true)
     }
 
     /**
+     * @param bool $noUpdate
+     *
      * @return $this
      */
     public function noUpdate($noUpdate = true)
@@ -52,6 +59,8 @@ public function noUpdate($noUpdate = true)
     }
 
     /**
+     * @param bool $updateNoDev
+     *
      * @return $this
      */
     public function updateNoDev($updateNoDev = true)
@@ -63,6 +72,8 @@ public function updateNoDev($updateNoDev = true)
     }
 
     /**
+     * @param bool $updateWithDependencies
+     *
      * @return $this
      */
     public function noUpdateWithDependencies($updateWithDependencies = true)
diff --git a/vendor/consolidation/robo/src/Task/Composer/RequireDependency.php b/vendor/consolidation/robo/src/Task/Composer/RequireDependency.php
index 6cdbf61391f9109e9e97cb9d135a9b248805c96b..3ad74970e5e70f83ceac8e1af1003335036df984 100644
--- a/vendor/consolidation/robo/src/Task/Composer/RequireDependency.php
+++ b/vendor/consolidation/robo/src/Task/Composer/RequireDependency.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Composer;
 
 /**
@@ -20,6 +21,10 @@ class RequireDependency extends Base
 
     /**
      * 'require' is a keyword, so it cannot be a method name.
+     *
+     * @param string $project
+     * @param null|string $version
+     *
      * @return $this
      */
     public function dependency($project, $version = null)
diff --git a/vendor/consolidation/robo/src/Task/Composer/Update.php b/vendor/consolidation/robo/src/Task/Composer/Update.php
index 3a0a64afcbc9baae75e5d17bd80bfe3352ff5f1d..b3f2c7a2853c884c7941ff1f7d9eea4e623a6aa7 100644
--- a/vendor/consolidation/robo/src/Task/Composer/Update.php
+++ b/vendor/consolidation/robo/src/Task/Composer/Update.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Composer;
 
 /**
diff --git a/vendor/consolidation/robo/src/Task/Composer/Validate.php b/vendor/consolidation/robo/src/Task/Composer/Validate.php
index adb1585430ea85d26297c6565018705ad72db23e..0b17e1e2ff7737a7b1e8e014094b16b95db3cb99 100644
--- a/vendor/consolidation/robo/src/Task/Composer/Validate.php
+++ b/vendor/consolidation/robo/src/Task/Composer/Validate.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Composer;
 
 /**
@@ -19,6 +20,8 @@ class Validate extends Base
     protected $action = 'validate';
 
     /**
+     * @param bool $noCheckAll
+     *
      * @return $this
      */
     public function noCheckAll($noCheckAll = true)
@@ -30,6 +33,8 @@ public function noCheckAll($noCheckAll = true)
     }
 
     /**
+     * @param bool $noCheckLock
+     *
      * @return $this
      */
     public function noCheckLock($noCheckLock = true)
@@ -41,6 +46,8 @@ public function noCheckLock($noCheckLock = true)
     }
 
     /**
+     * @param bool $noCheckPublish
+     *
      * @return $this
      */
     public function noCheckPublish($noCheckPublish = true)
@@ -52,6 +59,8 @@ public function noCheckPublish($noCheckPublish = true)
     }
 
     /**
+     * @param bool $withDependencies
+     *
      * @return $this
      */
     public function withDependencies($withDependencies = true)
@@ -63,6 +72,8 @@ public function withDependencies($withDependencies = true)
     }
 
     /**
+     * @param bool $strict
+     *
      * @return $this
      */
     public function strict($strict = true)
diff --git a/vendor/consolidation/robo/src/Task/Composer/loadTasks.php b/vendor/consolidation/robo/src/Task/Composer/loadTasks.php
index a7149f8a2d45bedaf9da32737201b836d437e891..c4e77894e385665b37237a54f23ff4f05dd3d6b2 100644
--- a/vendor/consolidation/robo/src/Task/Composer/loadTasks.php
+++ b/vendor/consolidation/robo/src/Task/Composer/loadTasks.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Composer;
 
 trait loadTasks
@@ -6,7 +7,7 @@ trait loadTasks
     /**
      * @param null|string $pathToComposer
      *
-     * @return Install
+     * @return \Robo\Task\Composer\Install|\Robo\Collection\CollectionBuilder
      */
     protected function taskComposerInstall($pathToComposer = null)
     {
@@ -16,7 +17,7 @@ protected function taskComposerInstall($pathToComposer = null)
     /**
      * @param null|string $pathToComposer
      *
-     * @return Update
+     * @return \Robo\Task\Composer\Update|\Robo\Collection\CollectionBuilder
      */
     protected function taskComposerUpdate($pathToComposer = null)
     {
@@ -26,7 +27,7 @@ protected function taskComposerUpdate($pathToComposer = null)
     /**
      * @param null|string $pathToComposer
      *
-     * @return DumpAutoload
+     * @return \Robo\Task\Composer\DumpAutoload|\Robo\Collection\CollectionBuilder
      */
     protected function taskComposerDumpAutoload($pathToComposer = null)
     {
@@ -36,7 +37,7 @@ protected function taskComposerDumpAutoload($pathToComposer = null)
     /**
      * @param null|string $pathToComposer
      *
-     * @return Init
+     * @return \Robo\Task\Composer\Init|\Robo\Collection\CollectionBuilder
      */
     protected function taskComposerInit($pathToComposer = null)
     {
@@ -46,7 +47,7 @@ protected function taskComposerInit($pathToComposer = null)
     /**
      * @param null|string $pathToComposer
      *
-     * @return Config
+     * @return \Robo\Task\Composer\Config|\Robo\Collection\CollectionBuilder
      */
     protected function taskComposerConfig($pathToComposer = null)
     {
@@ -56,7 +57,7 @@ protected function taskComposerConfig($pathToComposer = null)
     /**
      * @param null|string $pathToComposer
      *
-     * @return Validate
+     * @return \Robo\Task\Composer\Validate|\Robo\Collection\CollectionBuilder
      */
     protected function taskComposerValidate($pathToComposer = null)
     {
@@ -66,7 +67,7 @@ protected function taskComposerValidate($pathToComposer = null)
     /**
      * @param null|string $pathToComposer
      *
-     * @return Remove
+     * @return \Robo\Task\Composer\Remove|\Robo\Collection\CollectionBuilder
      */
     protected function taskComposerRemove($pathToComposer = null)
     {
@@ -76,7 +77,7 @@ protected function taskComposerRemove($pathToComposer = null)
     /**
      * @param null|string $pathToComposer
      *
-     * @return RequireDependency
+     * @return \Robo\Task\Composer\RequireDependency|\Robo\Collection\CollectionBuilder
      */
     protected function taskComposerRequire($pathToComposer = null)
     {
@@ -86,7 +87,7 @@ protected function taskComposerRequire($pathToComposer = null)
     /**
      * @param null|string $pathToComposer
      *
-     * @return CreateProject
+     * @return \Robo\Task\Composer\CreateProject|\Robo\Collection\CollectionBuilder
      */
     protected function taskComposerCreateProject($pathToComposer = null)
     {
diff --git a/vendor/consolidation/robo/src/Task/Development/Changelog.php b/vendor/consolidation/robo/src/Task/Development/Changelog.php
index 44af6d82024468987c3abacdea484076f2aadf01..2496a15837c8b3222193620295f6f7075ac6fb41 100644
--- a/vendor/consolidation/robo/src/Task/Development/Changelog.php
+++ b/vendor/consolidation/robo/src/Task/Development/Changelog.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Development;
 
 use Robo\Task\BaseTask;
@@ -216,7 +217,7 @@ public function run()
     }
 
     /**
-     * @return \Robo\Result|string
+     * @return string
      */
     protected function generateBody()
     {
@@ -235,7 +236,7 @@ protected function generateHeader()
     }
 
     /**
-     * @param $i
+     * @param string $i
      *
      * @return string
      */
diff --git a/vendor/consolidation/robo/src/Task/Development/GenerateMarkdownDoc.php b/vendor/consolidation/robo/src/Task/Development/GenerateMarkdownDoc.php
index 490aef31fe453683780a4794135fbd0a5a346a17..053ba6ab4cbf6a53ca1c6451e7340c1869642404 100644
--- a/vendor/consolidation/robo/src/Task/Development/GenerateMarkdownDoc.php
+++ b/vendor/consolidation/robo/src/Task/Development/GenerateMarkdownDoc.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Development;
 
 use Robo\Task\BaseTask;
@@ -506,7 +507,7 @@ protected function documentClass($class)
 
         $methods = array_filter($methods);
 
-        $doc .= implode("\n", $methods)."\n";
+        $doc .= implode("\n", $methods) . "\n";
 
         return $doc;
     }
diff --git a/vendor/consolidation/robo/src/Task/Development/GenerateTask.php b/vendor/consolidation/robo/src/Task/Development/GenerateTask.php
index 9d7a698e9ca159b5f6e4ad7ef86b2d517eb0739a..2ea5ca01a96031388a226564be7c5f6f324a6ef8 100644
--- a/vendor/consolidation/robo/src/Task/Development/GenerateTask.php
+++ b/vendor/consolidation/robo/src/Task/Development/GenerateTask.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Development;
 
 use Robo\Task\BaseTask;
diff --git a/vendor/consolidation/robo/src/Task/Development/GitHub.php b/vendor/consolidation/robo/src/Task/Development/GitHub.php
index 9fc9909d4293fb968fda88553b0cb2e6dafa9bac..04d28e50674e6f117380c183305dc851c4b92bf3 100644
--- a/vendor/consolidation/robo/src/Task/Development/GitHub.php
+++ b/vendor/consolidation/robo/src/Task/Development/GitHub.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Development;
 
 use Robo\Exception\TaskException;
@@ -86,7 +87,7 @@ public function user($user)
     }
 
     /**
-     * @param $password
+     * @param string $password
      *
      * @return $this
      */
@@ -97,7 +98,7 @@ public function password($password)
     }
 
     /**
-     * @param $accessToken
+     * @param string $token
      *
      * @return $this
      */
diff --git a/vendor/consolidation/robo/src/Task/Development/GitHubRelease.php b/vendor/consolidation/robo/src/Task/Development/GitHubRelease.php
index bf7a4889e548ff41e690a43660450028d8ea9537..f9d218cd581b8de83c4afd3836b7621e6e38aeca 100644
--- a/vendor/consolidation/robo/src/Task/Development/GitHubRelease.php
+++ b/vendor/consolidation/robo/src/Task/Development/GitHubRelease.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Development;
 
 use Robo\Result;
diff --git a/vendor/consolidation/robo/src/Task/Development/OpenBrowser.php b/vendor/consolidation/robo/src/Task/Development/OpenBrowser.php
index ea01b326d846604d1c2715f282e57e9dcdafd3f6..ac3840badac7a659188302df3df991e6d12f5b8b 100644
--- a/vendor/consolidation/robo/src/Task/Development/OpenBrowser.php
+++ b/vendor/consolidation/robo/src/Task/Development/OpenBrowser.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Development;
 
 use Robo\Task\BaseTask;
@@ -31,7 +32,7 @@ class OpenBrowser extends BaseTask
     protected $urls = [];
 
     /**
-     * @param string|array $url
+     * @param string|string[] $url
      */
     public function __construct($url)
     {
diff --git a/vendor/consolidation/robo/src/Task/Development/PackPhar.php b/vendor/consolidation/robo/src/Task/Development/PackPhar.php
index 6d0a04d72aa1072776366350166c72c210097006..edcab5680ad885562b8ece6134b2c3c04c492cbd 100644
--- a/vendor/consolidation/robo/src/Task/Development/PackPhar.php
+++ b/vendor/consolidation/robo/src/Task/Development/PackPhar.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Development;
 
 use Robo\Contract\ProgressIndicatorAwareInterface;
@@ -129,7 +130,7 @@ public function progressIndicatorSteps()
     {
         // run() will call advanceProgressIndicator() once for each
         // file, one after calling stopBuffering, and again after compression.
-        return count($this->files)+2;
+        return count($this->files) + 2;
     }
 
     /**
diff --git a/vendor/consolidation/robo/src/Task/Development/PhpServer.php b/vendor/consolidation/robo/src/Task/Development/PhpServer.php
index 6dd36680a70819f779c2c4e0acec631c37bdb6bc..c274d8c30db47ba9574af279b6da84a04a6ae1d5 100644
--- a/vendor/consolidation/robo/src/Task/Development/PhpServer.php
+++ b/vendor/consolidation/robo/src/Task/Development/PhpServer.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Development;
 
 use Robo\Task\Base\Exec;
diff --git a/vendor/consolidation/robo/src/Task/Development/SemVer.php b/vendor/consolidation/robo/src/Task/Development/SemVer.php
index 639c15323af81b415548f618a05a303b3065684c..1c021baf8e7528c88f139b2f0d436ffb7f2c69da 100644
--- a/vendor/consolidation/robo/src/Task/Development/SemVer.php
+++ b/vendor/consolidation/robo/src/Task/Development/SemVer.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Development;
 
 use Robo\Result;
@@ -88,6 +89,11 @@ public function __toString()
         return str_replace($search, $replace, $this->format);
     }
 
+    /**
+     * @param string $version
+     *
+     * @return $this
+     */
     public function version($version)
     {
         $this->parseString($version);
@@ -220,14 +226,25 @@ protected function dump()
         if (empty($this->path)) {
             return true;
         }
-        extract($this->version);
-        $semver = sprintf(self::SEMVER, $major, $minor, $patch, $special, $metadata);
+        $semver = sprintf(
+            self::SEMVER,
+            $this->version['major'],
+            $this->version['minor'],
+            $this->version['patch'],
+            $this->version['special'],
+            $this->version['metadata']
+        );
         if (is_writeable($this->path) === false || file_put_contents($this->path, $semver) === false) {
             throw new TaskException($this, 'Failed to write semver file.');
         }
         return true;
     }
 
+    /**
+     * @param string $semverString
+     *
+     * @throws \Robo\Exception\TaskException
+     */
     protected function parseString($semverString)
     {
         if (!preg_match_all(self::REGEX_STRING, $semverString, $matches)) {
@@ -241,6 +258,8 @@ protected function parseString($semverString)
     }
 
     /**
+     * @param string $semverFileContents
+     *
      * @throws \Robo\Exception\TaskException
      */
     protected function parseFile($semverFileContents)
diff --git a/vendor/consolidation/robo/src/Task/Development/loadTasks.php b/vendor/consolidation/robo/src/Task/Development/loadTasks.php
index e3dc49a39def2baa700f7d546947c4ee527e2fe1..63f36bd2f34079964d48e19d6c6463e58f8d0002 100644
--- a/vendor/consolidation/robo/src/Task/Development/loadTasks.php
+++ b/vendor/consolidation/robo/src/Task/Development/loadTasks.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Development;
 
 trait loadTasks
@@ -6,7 +7,7 @@ trait loadTasks
     /**
      * @param string $filename
      *
-     * @return Changelog
+     * @return \Robo\Task\Development\Changelog|\Robo\Collection\CollectionBuilder
      */
     protected function taskChangelog($filename = 'CHANGELOG.md')
     {
@@ -16,7 +17,7 @@ protected function taskChangelog($filename = 'CHANGELOG.md')
     /**
      * @param string $filename
      *
-     * @return GenerateMarkdownDoc
+     * @return \Robo\Task\Development\GenerateMarkdownDoc|\Robo\Collection\CollectionBuilder
      */
     protected function taskGenDoc($filename)
     {
@@ -27,7 +28,7 @@ protected function taskGenDoc($filename)
      * @param string $className
      * @param string $wrapperClassName
      *
-     * @return \Robo\Task\Development\GenerateTask
+     * @return \Robo\Task\Development\GenerateTask|\Robo\Collection\CollectionBuilder
      */
     protected function taskGenTask($className, $wrapperClassName = '')
     {
@@ -37,7 +38,7 @@ protected function taskGenTask($className, $wrapperClassName = '')
     /**
      * @param string $pathToSemVer
      *
-     * @return SemVer
+     * @return \Robo\Task\Development\SemVer|\Robo\Collection\CollectionBuilder
      */
     protected function taskSemVer($pathToSemVer = '.semver')
     {
@@ -47,7 +48,7 @@ protected function taskSemVer($pathToSemVer = '.semver')
     /**
      * @param int $port
      *
-     * @return PhpServer
+     * @return \Robo\Task\Development\PhpServer|\Robo\Collection\CollectionBuilder
      */
     protected function taskServer($port = 8000)
     {
@@ -57,7 +58,7 @@ protected function taskServer($port = 8000)
     /**
      * @param string $filename
      *
-     * @return PackPhar
+     * @return \Robo\Task\Development\PackPhar|\Robo\Collection\CollectionBuilder
      */
     protected function taskPackPhar($filename)
     {
@@ -67,7 +68,7 @@ protected function taskPackPhar($filename)
     /**
      * @param string $tag
      *
-     * @return GitHubRelease
+     * @return \Robo\Task\Development\GitHubRelease|\Robo\Collection\CollectionBuilder
      */
     protected function taskGitHubRelease($tag)
     {
@@ -77,7 +78,7 @@ protected function taskGitHubRelease($tag)
     /**
      * @param string|array $url
      *
-     * @return OpenBrowser
+     * @return \Robo\Task\Development\OpenBrowser|\Robo\Collection\CollectionBuilder
      */
     protected function taskOpenBrowser($url)
     {
diff --git a/vendor/consolidation/robo/src/Task/Docker/Base.php b/vendor/consolidation/robo/src/Task/Docker/Base.php
index 135f39e7a503871a267696cec5b592c2422edfe4..dc7cc3fd0905f5e5f711f45841b49d9fc5155126 100644
--- a/vendor/consolidation/robo/src/Task/Docker/Base.php
+++ b/vendor/consolidation/robo/src/Task/Docker/Base.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Docker;
 
 use Robo\Common\ExecOneCommand;
diff --git a/vendor/consolidation/robo/src/Task/Docker/Build.php b/vendor/consolidation/robo/src/Task/Docker/Build.php
index 11eb92ab49a9942e9c7e3c8d39202f50c2ed6418..448a204bef13adf327ead7fe2aff0ad5e6330785 100644
--- a/vendor/consolidation/robo/src/Task/Docker/Build.php
+++ b/vendor/consolidation/robo/src/Task/Docker/Build.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Docker;
 
 /**
diff --git a/vendor/consolidation/robo/src/Task/Docker/Commit.php b/vendor/consolidation/robo/src/Task/Docker/Commit.php
index 302f1920ed9620f1f667c2b9834d70b8f55438bb..1660a492ea17e0463c8ca9479bec3fad27f133b2 100644
--- a/vendor/consolidation/robo/src/Task/Docker/Commit.php
+++ b/vendor/consolidation/robo/src/Task/Docker/Commit.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Docker;
 
 /**
@@ -54,7 +55,7 @@ public function getCommand()
     }
 
     /**
-     * @param $name
+     * @param string $name
      *
      * @return $this
      */
diff --git a/vendor/consolidation/robo/src/Task/Docker/Exec.php b/vendor/consolidation/robo/src/Task/Docker/Exec.php
index fa67c8da0e9d5dc621fe4a17b7ad732cbd42ec67..078ed60d4b69a70a1a27ef86712d76016c687de8 100644
--- a/vendor/consolidation/robo/src/Task/Docker/Exec.php
+++ b/vendor/consolidation/robo/src/Task/Docker/Exec.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Docker;
 
 use Robo\Common\CommandReceiver;
@@ -64,7 +65,7 @@ public function detached()
     }
 
     /**
-     * {@inheritdoc)}
+     * {@inheritdoc}
      */
     public function interactive($interactive = true)
     {
@@ -90,6 +91,6 @@ public function exec($command)
      */
     public function getCommand()
     {
-        return $this->command . ' ' . $this->arguments . ' ' . $this->cid.' '.$this->run;
+        return $this->command . ' ' . $this->arguments . ' ' . $this->cid . ' ' . $this->run;
     }
 }
diff --git a/vendor/consolidation/robo/src/Task/Docker/Pull.php b/vendor/consolidation/robo/src/Task/Docker/Pull.php
index 32ba5b40f83db567bbc9b71329376f1a4a2b2f6f..36c812ca5e1dc18c3e38b9f469351a9100d2b24c 100644
--- a/vendor/consolidation/robo/src/Task/Docker/Pull.php
+++ b/vendor/consolidation/robo/src/Task/Docker/Pull.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Docker;
 
 /**
diff --git a/vendor/consolidation/robo/src/Task/Docker/Remove.php b/vendor/consolidation/robo/src/Task/Docker/Remove.php
index 0a8c0ac619c7a15324f53c4cd94159f13d600db6..0aecca915494e88bcd5c407c8fdf85fa89f0c056 100644
--- a/vendor/consolidation/robo/src/Task/Docker/Remove.php
+++ b/vendor/consolidation/robo/src/Task/Docker/Remove.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Docker;
 
 /**
diff --git a/vendor/consolidation/robo/src/Task/Docker/Result.php b/vendor/consolidation/robo/src/Task/Docker/Result.php
index 0533159a8744af25af9b3fee715944842edd2860..c6fde9f12450069d1668988a92aebeb60404174e 100644
--- a/vendor/consolidation/robo/src/Task/Docker/Result.php
+++ b/vendor/consolidation/robo/src/Task/Docker/Result.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Docker;
 
 class Result extends \Robo\Result
diff --git a/vendor/consolidation/robo/src/Task/Docker/Run.php b/vendor/consolidation/robo/src/Task/Docker/Run.php
index a02ea76f63c9e6230531e289539f45f52d86af8f..9af7d51c38b615bd06337c27c088ef4182df92a3 100644
--- a/vendor/consolidation/robo/src/Task/Docker/Run.php
+++ b/vendor/consolidation/robo/src/Task/Docker/Run.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Docker;
 
 use Robo\Common\CommandReceiver;
@@ -115,7 +116,7 @@ public function detached()
     }
 
     /**
-     * {@inheritdoc)}
+     * {@inheritdoc}
      */
     public function interactive($interactive = true)
     {
@@ -155,7 +156,8 @@ public function volume($from, $to = null)
      * inherited from ExecTrait.
      *
      * @param array $env
-     * @return type
+     *
+     * @return $this
      */
     public function envVars(array $env)
     {
diff --git a/vendor/consolidation/robo/src/Task/Docker/Start.php b/vendor/consolidation/robo/src/Task/Docker/Start.php
index ef19d74d14c1742f9cea17db7cdf99551790cdfe..3c76a17a65762e8648dd1135b917a560607436e7 100644
--- a/vendor/consolidation/robo/src/Task/Docker/Start.php
+++ b/vendor/consolidation/robo/src/Task/Docker/Start.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Docker;
 
 /**
diff --git a/vendor/consolidation/robo/src/Task/Docker/Stop.php b/vendor/consolidation/robo/src/Task/Docker/Stop.php
index 4d0d436d3f4037546bf5de8e97c8e7add31b2cb6..25debaa07d5123d36f2e202a31b038934baca674 100644
--- a/vendor/consolidation/robo/src/Task/Docker/Stop.php
+++ b/vendor/consolidation/robo/src/Task/Docker/Stop.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Docker;
 
 /**
diff --git a/vendor/consolidation/robo/src/Task/Docker/loadTasks.php b/vendor/consolidation/robo/src/Task/Docker/loadTasks.php
index e58f5ef0c569fe1f611be0cc841813b838e18f48..6a5eab43256ce88efb963e3d74d0ef5ee53a4d09 100644
--- a/vendor/consolidation/robo/src/Task/Docker/loadTasks.php
+++ b/vendor/consolidation/robo/src/Task/Docker/loadTasks.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Docker;
 
 trait loadTasks
@@ -6,7 +7,7 @@ trait loadTasks
     /**
      * @param string $image
      *
-     * @return \Robo\Task\Docker\Run
+     * @return \Robo\Task\Docker\Run|\Robo\Collection\CollectionBuilder
      */
     protected function taskDockerRun($image)
     {
@@ -16,7 +17,7 @@ protected function taskDockerRun($image)
     /**
      * @param string $image
      *
-     * @return \Robo\Task\Docker\Pull
+     * @return \Robo\Task\Docker\Pull|\Robo\Collection\CollectionBuilder
      */
     protected function taskDockerPull($image)
     {
@@ -26,7 +27,7 @@ protected function taskDockerPull($image)
     /**
      * @param string $path
      *
-     * @return \Robo\Task\Docker\Build
+     * @return \Robo\Task\Docker\Build|\Robo\Collection\CollectionBuilder
      */
     protected function taskDockerBuild($path = '.')
     {
@@ -36,7 +37,7 @@ protected function taskDockerBuild($path = '.')
     /**
      * @param string|\Robo\Task\Docker\Result $cidOrResult
      *
-     * @return \Robo\Task\Docker\Stop
+     * @return \Robo\Task\Docker\Stop|\Robo\Collection\CollectionBuilder
      */
     protected function taskDockerStop($cidOrResult)
     {
@@ -46,7 +47,7 @@ protected function taskDockerStop($cidOrResult)
     /**
      * @param string|\Robo\Task\Docker\Result $cidOrResult
      *
-     * @return \Robo\Task\Docker\Commit
+     * @return \Robo\Task\Docker\Commit|\Robo\Collection\CollectionBuilder
      */
     protected function taskDockerCommit($cidOrResult)
     {
@@ -56,7 +57,7 @@ protected function taskDockerCommit($cidOrResult)
     /**
      * @param string|\Robo\Task\Docker\Result $cidOrResult
      *
-     * @return \Robo\Task\Docker\Start
+     * @return \Robo\Task\Docker\Start|\Robo\Collection\CollectionBuilder
      */
     protected function taskDockerStart($cidOrResult)
     {
@@ -66,7 +67,7 @@ protected function taskDockerStart($cidOrResult)
     /**
      * @param string|\Robo\Task\Docker\Result $cidOrResult
      *
-     * @return \Robo\Task\Docker\Remove
+     * @return \Robo\Task\Docker\Remove|\Robo\Collection\CollectionBuilder
      */
     protected function taskDockerRemove($cidOrResult)
     {
@@ -76,7 +77,7 @@ protected function taskDockerRemove($cidOrResult)
     /**
      * @param string|\Robo\Task\Docker\Result $cidOrResult
      *
-     * @return \Robo\Task\Docker\Exec
+     * @return \Robo\Task\Docker\Exec|\Robo\Collection\CollectionBuilder
      */
     protected function taskDockerExec($cidOrResult)
     {
diff --git a/vendor/consolidation/robo/src/Task/File/Concat.php b/vendor/consolidation/robo/src/Task/File/Concat.php
index 12b1eca00fe0bdbcd5f4f6ae39ee9e9add1a9d9b..43fd2fdba6ad36b797db2d895c3f687342dac144 100644
--- a/vendor/consolidation/robo/src/Task/File/Concat.php
+++ b/vendor/consolidation/robo/src/Task/File/Concat.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\File;
 
 use Iterator;
@@ -26,7 +27,7 @@ class Concat extends BaseTask
     use ResourceExistenceChecker;
 
     /**
-     * @var array|Iterator
+     * @var array|\Iterator
      */
     protected $files;
 
@@ -38,7 +39,7 @@ class Concat extends BaseTask
     /**
      * Constructor.
      *
-     * @param array|Iterator $files
+     * @param array|\Iterator $files
      */
     public function __construct($files)
     {
diff --git a/vendor/consolidation/robo/src/Task/File/Replace.php b/vendor/consolidation/robo/src/Task/File/Replace.php
index 0107df13c3e7c20e75c34ae07bcbe88ff1d325fc..7b4cd49d6a08b7e735d52985d759ab1cfaab1de6 100644
--- a/vendor/consolidation/robo/src/Task/File/Replace.php
+++ b/vendor/consolidation/robo/src/Task/File/Replace.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\File;
 
 use Robo\Result;
diff --git a/vendor/consolidation/robo/src/Task/File/Write.php b/vendor/consolidation/robo/src/Task/File/Write.php
index dc2199f927078a6e1448224068e18922a05b8202..d2b1e6a6b42afee35b8fea5bae61559b1be2a7e5 100644
--- a/vendor/consolidation/robo/src/Task/File/Write.php
+++ b/vendor/consolidation/robo/src/Task/File/Write.php
@@ -75,7 +75,8 @@ public function append($append = true)
      *
      * @param string $line
      *
-     * @return $this The current instance
+     * @return $this
+     *   The current instance.
      */
     public function line($line)
     {
@@ -88,7 +89,8 @@ public function line($line)
      *
      * @param array $lines
      *
-     * @return $this The current instance
+     * @return $this
+     *   The current instance.
      */
     public function lines(array $lines)
     {
@@ -101,7 +103,8 @@ public function lines(array $lines)
      *
      * @param string $text
      *
-     * @return $this The current instance
+     * @return $this
+     *   The current instance.
      */
     public function text($text)
     {
@@ -120,7 +123,8 @@ public function text($text)
      *
      * @param string $filename
      *
-     * @return $this The current instance
+     * @return $this
+     *   The current instance.
      */
     public function textFromFile($filename)
     {
@@ -134,11 +138,12 @@ public function textFromFile($filename)
      * @param string $name
      * @param string $val
      *
-     * @return $this The current instance
+     * @return $this
+     *   The current instance.
      */
     public function place($name, $val)
     {
-        $this->replace('{'.$name.'}', $val);
+        $this->replace('{' . $name . '}', $val);
 
         return $this;
     }
@@ -149,7 +154,8 @@ public function place($name, $val)
      * @param string $string
      * @param string $replacement
      *
-     * @return $this The current instance
+     * @return $this
+     *   The current instance.
      */
     public function replace($string, $replacement)
     {
@@ -163,7 +169,8 @@ public function replace($string, $replacement)
      * @param string $pattern
      * @param string $replacement
      *
-     * @return $this The current instance
+     * @return $this
+     *   The current instance.
      */
     public function regexReplace($pattern, $replacement)
     {
@@ -202,8 +209,8 @@ public function appendUnlessMatches($pattern, $text)
     }
 
     /**
-     * @param $contents string
-     * @param $filename string
+     * @param string $contents
+     * @param string $filename
      *
      * @return string
      */
diff --git a/vendor/consolidation/robo/src/Task/File/loadTasks.php b/vendor/consolidation/robo/src/Task/File/loadTasks.php
index c5f39c950024085ebf59bb68cc1ea9c9affe7efa..210fb40cdd73c4ad54c15428e72259bec7778031 100644
--- a/vendor/consolidation/robo/src/Task/File/loadTasks.php
+++ b/vendor/consolidation/robo/src/Task/File/loadTasks.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\File;
 
 trait loadTasks
@@ -6,7 +7,7 @@ trait loadTasks
     /**
      * @param array|\Iterator $files
      *
-     * @return \Robo\Task\File\Concat
+     * @return \Robo\Task\File\Concat|\Robo\Collection\CollectionBuilder
      */
     protected function taskConcat($files)
     {
@@ -16,7 +17,7 @@ protected function taskConcat($files)
     /**
      * @param string $file
      *
-     * @return \Robo\Task\File\Replace
+     * @return \Robo\Task\File\Replace|\Robo\Collection\CollectionBuilder
      */
     protected function taskReplaceInFile($file)
     {
@@ -26,7 +27,7 @@ protected function taskReplaceInFile($file)
     /**
      * @param string $file
      *
-     * @return \Robo\Task\File\Write
+     * @return \Robo\Task\File\Write|\Robo\Collection\CollectionBuilder
      */
     protected function taskWriteToFile($file)
     {
@@ -39,7 +40,7 @@ protected function taskWriteToFile($file)
      * @param string $baseDir
      * @param bool $includeRandomPart
      *
-     * @return \Robo\Task\File\TmpFile
+     * @return \Robo\Task\File\TmpFile|\Robo\Collection\CollectionBuilder
      */
     protected function taskTmpFile($filename = 'tmp', $extension = '', $baseDir = '', $includeRandomPart = true)
     {
diff --git a/vendor/consolidation/robo/src/Task/Filesystem/BaseDir.php b/vendor/consolidation/robo/src/Task/Filesystem/BaseDir.php
index 434334d79740638daa5313429776e9598364129b..b8146851fc5cb898d67ee9166ec97f53982c7d44 100644
--- a/vendor/consolidation/robo/src/Task/Filesystem/BaseDir.php
+++ b/vendor/consolidation/robo/src/Task/Filesystem/BaseDir.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Filesystem;
 
 use Robo\Task\BaseTask;
diff --git a/vendor/consolidation/robo/src/Task/Filesystem/CleanDir.php b/vendor/consolidation/robo/src/Task/Filesystem/CleanDir.php
index 762f8550962d9ef830a0b0f0a6b28a6ac25295eb..cfd8ad4899150d0700a22afed7b56a679bd6cc65 100644
--- a/vendor/consolidation/robo/src/Task/Filesystem/CleanDir.php
+++ b/vendor/consolidation/robo/src/Task/Filesystem/CleanDir.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Filesystem;
 
 use Robo\Common\ResourceExistenceChecker;
diff --git a/vendor/consolidation/robo/src/Task/Filesystem/CopyDir.php b/vendor/consolidation/robo/src/Task/Filesystem/CopyDir.php
index 084822229b4d59878663f7452f160c29f11eeafd..a14c7371e9d3b8300a8874204979b00faec93590 100644
--- a/vendor/consolidation/robo/src/Task/Filesystem/CopyDir.php
+++ b/vendor/consolidation/robo/src/Task/Filesystem/CopyDir.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Filesystem;
 
 use Robo\Common\ResourceExistenceChecker;
@@ -23,6 +24,8 @@ class CopyDir extends BaseDir
     /**
      * Explicitly declare our consturctor, so that
      * our copyDir() method does not look like a php4 constructor.
+     *
+     * @param string|string[] $dirs
      */
     public function __construct($dirs)
     {
@@ -140,6 +143,12 @@ protected function copyDir($src, $dst, $parent = '')
 
     /**
      * Check to see if the current item is excluded.
+     *
+     * @param string $file
+     * @param string $src
+     * @param string $parent
+     *
+     * @return bool
      */
     protected function excluded($file, $src, $parent)
     {
@@ -154,6 +163,10 @@ protected function excluded($file, $src, $parent)
     /**
      * Avoid problems comparing paths on Windows that may have a
      * combination of DIRECTORY_SEPARATOR and /.
+     *
+     * @param string$item
+     *
+     * @return string
      */
     protected function simplifyForCompare($item)
     {
diff --git a/vendor/consolidation/robo/src/Task/Filesystem/DeleteDir.php b/vendor/consolidation/robo/src/Task/Filesystem/DeleteDir.php
index 25cf007b59422d20dcbc941857fc6e1c3111db4b..eb1015a8f200edf0b0f07ca50fdafd35f5c8085f 100644
--- a/vendor/consolidation/robo/src/Task/Filesystem/DeleteDir.php
+++ b/vendor/consolidation/robo/src/Task/Filesystem/DeleteDir.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Filesystem;
 
 use Robo\Common\ResourceExistenceChecker;
diff --git a/vendor/consolidation/robo/src/Task/Filesystem/FilesystemStack.php b/vendor/consolidation/robo/src/Task/Filesystem/FilesystemStack.php
index 8663e245d3676e98a95ba983b9b37dbe4b1faa2a..5dbb5a78a290e1af489e2f6ab636d7268fc3e338 100644
--- a/vendor/consolidation/robo/src/Task/Filesystem/FilesystemStack.php
+++ b/vendor/consolidation/robo/src/Task/Filesystem/FilesystemStack.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Filesystem;
 
 use Robo\Task\StackBasedTask;
diff --git a/vendor/consolidation/robo/src/Task/Filesystem/FlattenDir.php b/vendor/consolidation/robo/src/Task/Filesystem/FlattenDir.php
index 6e885112e0f3ecab3eb170bd9a23230c25f219ea..c06a6bbbe1d219d47a5eeef773ac280833ba43b9 100644
--- a/vendor/consolidation/robo/src/Task/Filesystem/FlattenDir.php
+++ b/vendor/consolidation/robo/src/Task/Filesystem/FlattenDir.php
@@ -176,7 +176,7 @@ public function parentDir($dir)
     {
         if (!$this->fs->isAbsolutePath($dir)) {
             // attach the relative path to current working directory
-            $dir = getcwd().'/'.$dir;
+            $dir = getcwd() . '/' . $dir;
         }
         $this->parentDir = $dir;
 
@@ -230,7 +230,7 @@ protected function findFiles($dirs)
             } catch (\InvalidArgumentException $e) {
                 // if finder cannot handle it, try with in()->name()
                 if (strpos($dir, '/') === false) {
-                    $dir = './'.$dir;
+                    $dir = './' . $dir;
                 }
                 $parts = explode('/', $dir);
                 $new_dir = implode('/', array_slice($parts, 0, -1));
@@ -260,7 +260,7 @@ protected function findFiles($dirs)
      */
     protected function getTarget($file, $to)
     {
-        $target = $to.'/'.basename($file);
+        $target = $to . '/' . basename($file);
         if ($this->parents !== array(0, 0)) {
             // if the parent is set, create additional directories inside target
             // get relative path to parentDir
@@ -268,10 +268,10 @@ protected function getTarget($file, $to)
             // get top parents and bottom parents
             $parts = explode('/', rtrim($rel_path, '/'));
             $prefix_dir = '';
-            $prefix_dir .= ($this->parents[0] > 0 ? implode('/', array_slice($parts, 0, $this->parents[0])).'/' : '');
+            $prefix_dir .= ($this->parents[0] > 0 ? implode('/', array_slice($parts, 0, $this->parents[0])) . '/' : '');
             $prefix_dir .= ($this->parents[1] > 0 ? implode('/', array_slice($parts, (0 - $this->parents[1]), $this->parents[1])) : '');
             $prefix_dir = rtrim($prefix_dir, '/');
-            $target = $to.'/'.$prefix_dir.'/'.basename($file);
+            $target = $to . '/' . $prefix_dir . '/' . basename($file);
         }
 
         return $target;
diff --git a/vendor/consolidation/robo/src/Task/Filesystem/MirrorDir.php b/vendor/consolidation/robo/src/Task/Filesystem/MirrorDir.php
index 4eda9097bec44e5d30e9cf8ef4145523913a5703..a581d0c229df405dad41833b1465c124df861e6a 100644
--- a/vendor/consolidation/robo/src/Task/Filesystem/MirrorDir.php
+++ b/vendor/consolidation/robo/src/Task/Filesystem/MirrorDir.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Filesystem;
 
 use Robo\Result;
diff --git a/vendor/consolidation/robo/src/Task/Filesystem/loadShortcuts.php b/vendor/consolidation/robo/src/Task/Filesystem/loadShortcuts.php
index fe72ce5a43c5f6f501f4c58d0e5b34877dd60fe2..0863ca8049cb97a26c46e99c49f5ad100e67fac9 100644
--- a/vendor/consolidation/robo/src/Task/Filesystem/loadShortcuts.php
+++ b/vendor/consolidation/robo/src/Task/Filesystem/loadShortcuts.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Filesystem;
 
 trait loadShortcuts
diff --git a/vendor/consolidation/robo/src/Task/Filesystem/loadTasks.php b/vendor/consolidation/robo/src/Task/Filesystem/loadTasks.php
index 8fecaafff7c906422f2113357ec9587d6c39f5e5..577193020b1a43043b2bed3c4e3e8dbcdcb82920 100644
--- a/vendor/consolidation/robo/src/Task/Filesystem/loadTasks.php
+++ b/vendor/consolidation/robo/src/Task/Filesystem/loadTasks.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Filesystem;
 
 trait loadTasks
@@ -6,7 +7,7 @@ trait loadTasks
     /**
      * @param string|string[] $dirs
      *
-     * @return \Robo\Task\Filesystem\CleanDir
+     * @return \Robo\Task\Filesystem\CleanDir|\Robo\Collection\CollectionBuilder
      */
     protected function taskCleanDir($dirs)
     {
@@ -16,7 +17,7 @@ protected function taskCleanDir($dirs)
     /**
      * @param string|string[] $dirs
      *
-     * @return \Robo\Task\Filesystem\DeleteDir
+     * @return \Robo\Task\Filesystem\DeleteDir|\Robo\Collection\CollectionBuilder
      */
     protected function taskDeleteDir($dirs)
     {
@@ -28,7 +29,7 @@ protected function taskDeleteDir($dirs)
      * @param string $base
      * @param bool $includeRandomPart
      *
-     * @return \Robo\Task\Filesystem\WorkDir
+     * @return \Robo\Task\Filesystem\WorkDir|\Robo\Collection\CollectionBuilder
      */
     protected function taskTmpDir($prefix = 'tmp', $base = '', $includeRandomPart = true)
     {
@@ -38,7 +39,7 @@ protected function taskTmpDir($prefix = 'tmp', $base = '', $includeRandomPart =
     /**
      * @param string $finalDestination
      *
-     * @return \Robo\Task\Filesystem\TmpDir
+     * @return \Robo\Task\Filesystem\TmpDir|\Robo\Collection\CollectionBuilder
      */
     protected function taskWorkDir($finalDestination)
     {
@@ -48,7 +49,7 @@ protected function taskWorkDir($finalDestination)
     /**
      * @param string|string[] $dirs
      *
-     * @return \Robo\Task\Filesystem\CopyDir
+     * @return \Robo\Task\Filesystem\CopyDir|\Robo\Collection\CollectionBuilder
      */
     protected function taskCopyDir($dirs)
     {
@@ -58,7 +59,7 @@ protected function taskCopyDir($dirs)
     /**
      * @param string|string[] $dirs
      *
-     * @return \Robo\Task\Filesystem\MirrorDir
+     * @return \Robo\Task\Filesystem\MirrorDir|\Robo\Collection\CollectionBuilder
      */
     protected function taskMirrorDir($dirs)
     {
@@ -68,7 +69,7 @@ protected function taskMirrorDir($dirs)
     /**
      * @param string|string[] $dirs
      *
-     * @return \Robo\Task\Filesystem\FlattenDir
+     * @return \Robo\Task\Filesystem\FlattenDir|\Robo\Collection\CollectionBuilder
      */
     protected function taskFlattenDir($dirs)
     {
@@ -76,7 +77,7 @@ protected function taskFlattenDir($dirs)
     }
 
     /**
-     * @return \Robo\Task\Filesystem\FilesystemStack
+     * @return \Robo\Task\Filesystem\FilesystemStack|\Robo\Collection\CollectionBuilder
      */
     protected function taskFilesystemStack()
     {
diff --git a/vendor/consolidation/robo/src/Task/Gulp/Run.php b/vendor/consolidation/robo/src/Task/Gulp/Run.php
index 8f2077b57355dee59be5dbbfe955a638841b85a6..84a2506ab181e4c9c50d862506cf07869f6f28c3 100644
--- a/vendor/consolidation/robo/src/Task/Gulp/Run.php
+++ b/vendor/consolidation/robo/src/Task/Gulp/Run.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Gulp;
 
 use Robo\Contract\CommandInterface;
diff --git a/vendor/consolidation/robo/src/Task/Gulp/loadTasks.php b/vendor/consolidation/robo/src/Task/Gulp/loadTasks.php
index 6fdc6ca70a241a229c3051d38fb85d56f797c144..a29e405efc7b09692ee04f05070c6945003da1e2 100644
--- a/vendor/consolidation/robo/src/Task/Gulp/loadTasks.php
+++ b/vendor/consolidation/robo/src/Task/Gulp/loadTasks.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Gulp;
 
 trait loadTasks
@@ -7,7 +8,7 @@ trait loadTasks
      * @param string $task
      * @param null|string $pathToGulp
      *
-     * @return \Robo\Task\Gulp\Run
+     * @return \Robo\Task\Gulp\Run|\Robo\Collection\CollectionBuilder
      */
     protected function taskGulpRun($task = 'default', $pathToGulp = null)
     {
diff --git a/vendor/consolidation/robo/src/Task/Npm/Base.php b/vendor/consolidation/robo/src/Task/Npm/Base.php
index 35ff9c48f4319ad2d1fe2261cc8e9ccab293fe87..00b291f2994f34bc7676596f9af8a8c988246e46 100644
--- a/vendor/consolidation/robo/src/Task/Npm/Base.php
+++ b/vendor/consolidation/robo/src/Task/Npm/Base.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Npm;
 
 use Robo\Task\BaseTask;
diff --git a/vendor/consolidation/robo/src/Task/Npm/Install.php b/vendor/consolidation/robo/src/Task/Npm/Install.php
index 65cbe6189735b88fa3a44543ed8d9fc558814fc4..c43a5befbf0242c4d158bc62478028f08f1f2a02 100644
--- a/vendor/consolidation/robo/src/Task/Npm/Install.php
+++ b/vendor/consolidation/robo/src/Task/Npm/Install.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Npm;
 
 use Robo\Contract\CommandInterface;
@@ -21,7 +22,7 @@
 class Install extends Base implements CommandInterface
 {
     /**
-     * @var string
+     * {@inheritdoc}
      */
     protected $action = 'install';
 
diff --git a/vendor/consolidation/robo/src/Task/Npm/Update.php b/vendor/consolidation/robo/src/Task/Npm/Update.php
index 75421b307c0f37b0e53af34bb2ceeb651227db37..1321e4711b5c2f242e6f8676c8de78589d32f472 100644
--- a/vendor/consolidation/robo/src/Task/Npm/Update.php
+++ b/vendor/consolidation/robo/src/Task/Npm/Update.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Npm;
 
 /**
@@ -19,7 +20,7 @@
 class Update extends Base
 {
     /**
-     * @var string
+     * {@inheritdoc}
      */
     protected $action = 'update';
 
diff --git a/vendor/consolidation/robo/src/Task/Npm/loadTasks.php b/vendor/consolidation/robo/src/Task/Npm/loadTasks.php
index 4d9a26eb3be29c6455303787682dd8975a09f7c3..dd8d13767a5730260b522f65effea71270b2d632 100644
--- a/vendor/consolidation/robo/src/Task/Npm/loadTasks.php
+++ b/vendor/consolidation/robo/src/Task/Npm/loadTasks.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Npm;
 
 trait loadTasks
@@ -6,7 +7,7 @@ trait loadTasks
     /**
      * @param null|string $pathToNpm
      *
-     * @return \Robo\Task\Npm\Install
+     * @return \Robo\Task\Npm\Install|\Robo\Collection\CollectionBuilder
      */
     protected function taskNpmInstall($pathToNpm = null)
     {
@@ -16,7 +17,7 @@ protected function taskNpmInstall($pathToNpm = null)
     /**
      * @param null|string $pathToNpm
      *
-     * @return \Robo\Task\Npm\Update
+     * @return \Robo\Task\Npm\Update|\Robo\Collection\CollectionBuilder
      */
     protected function taskNpmUpdate($pathToNpm = null)
     {
diff --git a/vendor/consolidation/robo/src/Task/Remote/Rsync.php b/vendor/consolidation/robo/src/Task/Remote/Rsync.php
index 324a8d9a55752759f50f7f5b773b98bee191b15b..dc9404c47392c6242d4e8d2e7f76676bb8049e03 100644
--- a/vendor/consolidation/robo/src/Task/Remote/Rsync.php
+++ b/vendor/consolidation/robo/src/Task/Remote/Rsync.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Remote;
 
 use Robo\Contract\CommandInterface;
@@ -447,6 +448,8 @@ public function getCommand()
     }
 
     /**
+     * @param string $from
+     *
      * @return string
      */
     protected function getFromPathSpec($from)
diff --git a/vendor/consolidation/robo/src/Task/Remote/loadTasks.php b/vendor/consolidation/robo/src/Task/Remote/loadTasks.php
index 092d2a5547b775f5b18a74423fdf546d6a4a72bd..0506d681c3b49e4b000dd7f2a3973a4819aaa44c 100644
--- a/vendor/consolidation/robo/src/Task/Remote/loadTasks.php
+++ b/vendor/consolidation/robo/src/Task/Remote/loadTasks.php
@@ -1,10 +1,11 @@
 <?php
+
 namespace Robo\Task\Remote;
 
 trait loadTasks
 {
     /**
-     * @return \Robo\Task\Remote\Rsync
+     * @return \Robo\Task\Remote\Rsync|\Robo\Collection\CollectionBuilder
      */
     protected function taskRsync()
     {
@@ -15,7 +16,7 @@ protected function taskRsync()
      * @param null|string $hostname
      * @param null|string $user
      *
-     * @return \Robo\Task\Remote\Ssh
+     * @return \Robo\Task\Remote\Ssh|\Robo\Collection\CollectionBuilder
      */
     protected function taskSshExec($hostname = null, $user = null)
     {
diff --git a/vendor/consolidation/robo/src/Task/Simulator.php b/vendor/consolidation/robo/src/Task/Simulator.php
index e69d23fa39d67b8dd2442f86f8b069c503275e8e..d4d9b2e1443e93c72da75116bc4bf538d02b22a0 100644
--- a/vendor/consolidation/robo/src/Task/Simulator.php
+++ b/vendor/consolidation/robo/src/Task/Simulator.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task;
 
 use Robo\Contract\WrappedTaskInterface;
@@ -43,7 +44,7 @@ public function __construct(TaskInterface $task, $constructorParameters)
      * @param string $function
      * @param array $args
      *
-     * @return \Robo\Result|\Robo\Task\Simulator
+     * @return \Robo\Result|$this
      */
     public function __call($function, $args)
     {
@@ -109,7 +110,7 @@ public function getCommand()
     }
 
     /**
-     * @param string $action
+     * @param array $action
      *
      * @return string
      */
@@ -133,7 +134,7 @@ protected function convertParameter($item)
             return $this->shortenParameter(var_export($item, true));
         }
         if (is_object($item)) {
-            return '[' . get_class($item). ' object]';
+            return '[' . get_class($item) . ' object]';
         }
         if (is_string($item)) {
             return $this->shortenParameter("'$item'");
diff --git a/vendor/consolidation/robo/src/Task/StackBasedTask.php b/vendor/consolidation/robo/src/Task/StackBasedTask.php
index 91659f33a6bffeb43545a7e531b3c6f8b5519e8c..2e72182d8c0833a78c5d33fd0791bbf1677f1191 100644
--- a/vendor/consolidation/robo/src/Task/StackBasedTask.php
+++ b/vendor/consolidation/robo/src/Task/StackBasedTask.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task;
 
 use Robo\Result;
@@ -85,7 +86,7 @@ public function stopOnFail($stop = true)
      * this class.  Calling one of the delegate's methods will defer
      * execution until the run() method is called.
      *
-     * @return null
+     * @return null|object
      */
     protected function getDelegate()
     {
@@ -219,7 +220,7 @@ public function run()
      * Execute one task method
      *
      * @param string $command
-     * @param string $action
+     * @param array $action
      *
      * @return \Robo\Result
      */
diff --git a/vendor/consolidation/robo/src/Task/Testing/Atoum.php b/vendor/consolidation/robo/src/Task/Testing/Atoum.php
index 56b47d84f35ce0d759ae83138d9537f0213e9ee6..fbf478988eca554a8db650c63b056f524d8a8afa 100644
--- a/vendor/consolidation/robo/src/Task/Testing/Atoum.php
+++ b/vendor/consolidation/robo/src/Task/Testing/Atoum.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Testing;
 
 use Robo\Contract\CommandInterface;
@@ -48,7 +49,7 @@ public function __construct($pathToAtoum = null)
     /**
      * Tag or Tags to filter.
      *
-     * @param string|array $tags
+     * @param string|string[] $tags
      *
      * @return $this
      */
@@ -124,7 +125,7 @@ public function debug()
     /**
      * Test file or test files to run.
      *
-     * @param string|array
+     * @param string|string[]
      *
      * @return $this
      */
@@ -136,7 +137,8 @@ public function files($files)
     /**
      * Test directory or directories to run.
      *
-     * @param string|array A single directory or a list of directories.
+     * @param string|string[]
+     *   A single directory or a list of directories.
      *
      * @return $this
      */
@@ -147,7 +149,7 @@ public function directories($directories)
 
     /**
      * @param string $option
-     * @param string|array $values
+     * @param string|string[] $values
      *
      * @return $this
      */
diff --git a/vendor/consolidation/robo/src/Task/Testing/Behat.php b/vendor/consolidation/robo/src/Task/Testing/Behat.php
index 7e4f1d41a5a50b34ac90ae70b98d50f67eeaa432..c5e1f33c51569e12f074993dac045402ebe85a00 100644
--- a/vendor/consolidation/robo/src/Task/Testing/Behat.php
+++ b/vendor/consolidation/robo/src/Task/Testing/Behat.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Testing;
 
 use Robo\Contract\CommandInterface;
@@ -74,7 +75,7 @@ public function noInteraction()
     }
 
     /**
-     * @param $config_file
+     * @param string $config_file
      *
      * @return $this
      */
@@ -142,10 +143,7 @@ public function format($formater)
     }
 
     /**
-     * Returns command that can be executed.
-     * This method is used to pass generated command from one task to another.
-     *
-     * @return string
+     * {@inheritdoc}
      */
     public function getCommand()
     {
diff --git a/vendor/consolidation/robo/src/Task/Testing/Codecept.php b/vendor/consolidation/robo/src/Task/Testing/Codecept.php
index 1f8cce7034aa7176e981891f93c3bc35bd382874..da68ca2edadfaf36333c8d1cc47c22a7536cd43c 100644
--- a/vendor/consolidation/robo/src/Task/Testing/Codecept.php
+++ b/vendor/consolidation/robo/src/Task/Testing/Codecept.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Testing;
 
 use Robo\Contract\PrintedInterface;
@@ -28,7 +29,7 @@
 class Codecept extends BaseTask implements CommandInterface, PrintedInterface
 {
     use \Robo\Common\ExecOneCommand;
-    
+
     /**
      * @var string
      */
diff --git a/vendor/consolidation/robo/src/Task/Testing/PHPUnit.php b/vendor/consolidation/robo/src/Task/Testing/PHPUnit.php
index df67e1c75cd75348eda1e25fff4a0676b9dcbc27..bbb87b6cf5d8a34f302bbfaf42324e10f1bdcc34 100644
--- a/vendor/consolidation/robo/src/Task/Testing/PHPUnit.php
+++ b/vendor/consolidation/robo/src/Task/Testing/PHPUnit.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Testing;
 
 use Robo\Contract\CommandInterface;
@@ -35,6 +36,13 @@ class PHPUnit extends BaseTask implements CommandInterface, PrintedInterface
      */
     protected $files = '';
 
+    /**
+     * PHPUnit constructor.
+     *
+     * @param null|string $pathToPhpUnit
+     *
+     * @throws \Robo\Exception\TaskException
+     */
     public function __construct($pathToPhpUnit = null)
     {
         $this->command = $pathToPhpUnit;
@@ -150,7 +158,8 @@ public function debug()
     /**
      * Directory of test files or single test file to run.
      *
-     * @param string $files A single test file or a directory containing test files.
+     * @param string $files
+     *   A single test file or a directory containing test files.
      *
      * @return $this
      *
@@ -171,7 +180,8 @@ public function files($files)
     /**
      * Test the provided file.
      *
-     * @param string $file path to file to test
+     * @param string $file
+     *   Path to file to test.
      *
      * @return $this
      */
diff --git a/vendor/consolidation/robo/src/Task/Testing/Phpspec.php b/vendor/consolidation/robo/src/Task/Testing/Phpspec.php
index dd6a5ae77cc1859e0b38ed198f07e78fcf5c5690..9d8a343301176aa90af2d8061a779e09e321af63 100644
--- a/vendor/consolidation/robo/src/Task/Testing/Phpspec.php
+++ b/vendor/consolidation/robo/src/Task/Testing/Phpspec.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Testing;
 
 use Robo\Contract\PrintedInterface;
@@ -28,15 +29,24 @@ class Phpspec extends BaseTask implements CommandInterface, PrintedInterface
     protected $command;
 
     /**
-     * @var string[] $formaters available formaters for format option
+     * @var string[] $formaters
+     *   Available formaters for format option.
      */
     protected $formaters = ['progress', 'html', 'pretty', 'junit', 'dot', 'tap'];
 
     /**
-     * @var array $verbose_levels available verbose levels
+     * @var array $verbose_levels
+     *   Available verbose levels.
      */
     protected $verbose_levels = ['v', 'vv', 'vvv'];
 
+    /**
+     * Phpspec constructor.
+     *
+     * @param null|string $pathToPhpspec
+     *
+     * @throws \Robo\Exception\TaskException
+     */
     public function __construct($pathToPhpspec = null)
     {
         $this->command = $pathToPhpspec;
@@ -67,6 +77,11 @@ public function quiet()
         return $this;
     }
 
+    /**
+     * @param string $level
+     *
+     * @return $this
+     */
     public function verbose($level = 'v')
     {
         if (!in_array($level, $this->verbose_levels)) {
@@ -76,24 +91,40 @@ public function verbose($level = 'v')
         return $this;
     }
 
+    /**
+     * @return $this
+     */
     public function noAnsi()
     {
         $this->option('no-ansi');
         return $this;
     }
 
+    /**
+     * @return $this
+     */
     public function noInteraction()
     {
         $this->option('no-interaction');
         return $this;
     }
 
+    /**
+     * @param string $config_file
+     *
+     * @return $this
+     */
     public function config($config_file)
     {
         $this->option('config', $config_file);
         return $this;
     }
 
+    /**
+     * @param string $formater
+     *
+     * @return $this
+     */
     public function format($formater)
     {
         if (!in_array($formater, $this->formaters)) {
@@ -103,11 +134,17 @@ public function format($formater)
         return $this;
     }
 
+    /**
+     * {@inheritdoc}
+     */
     public function getCommand()
     {
         return $this->command . $this->arguments;
     }
 
+    /**
+     * {@inheritdoc}
+     */
     public function run()
     {
         $this->printTaskInfo('Running phpspec {arguments}', ['arguments' => $this->arguments]);
diff --git a/vendor/consolidation/robo/src/Task/Testing/loadTasks.php b/vendor/consolidation/robo/src/Task/Testing/loadTasks.php
index 43145b9b608c53fbc60917ee8ed444f9da17ec53..f864b1fb553f07131110b1cdfa31589773031016 100644
--- a/vendor/consolidation/robo/src/Task/Testing/loadTasks.php
+++ b/vendor/consolidation/robo/src/Task/Testing/loadTasks.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Testing;
 
 trait loadTasks
@@ -6,7 +7,7 @@ trait loadTasks
     /**
      * @param null|string $pathToCodeception
      *
-     * @return \Robo\Task\Testing\Codecept
+     * @return \Robo\Task\Testing\Codecept|\Robo\Collection\CollectionBuilder
      */
     protected function taskCodecept($pathToCodeception = null)
     {
@@ -16,7 +17,7 @@ protected function taskCodecept($pathToCodeception = null)
     /**
      * @param null|string $pathToPhpUnit
      *
-     * @return \Robo\Task\Testing\PHPUnit
+     * @return \Robo\Task\Testing\PHPUnit|\Robo\Collection\CollectionBuilder
      */
     protected function taskPhpUnit($pathToPhpUnit = null)
     {
@@ -24,9 +25,9 @@ protected function taskPhpUnit($pathToPhpUnit = null)
     }
 
     /**
-     * @param null $pathToPhpspec
+     * @param null|string $pathToPhpspec
      *
-     * @return \Robo\Task\Testing\Phpspec
+     * @return \Robo\Task\Testing\Phpspec|\Robo\Collection\CollectionBuilder
      */
     protected function taskPhpspec($pathToPhpspec = null)
     {
@@ -34,9 +35,9 @@ protected function taskPhpspec($pathToPhpspec = null)
     }
 
     /**
-     * @param null $pathToAtoum
+     * @param null|string $pathToAtoum
      *
-     * @return \Robo\Task\Testing\Atoum
+     * @return \Robo\Task\Testing\Atoum|\Robo\Collection\CollectionBuilder
      */
     protected function taskAtoum($pathToAtoum = null)
     {
@@ -44,9 +45,9 @@ protected function taskAtoum($pathToAtoum = null)
     }
 
     /**
-     * @param null $pathToBehat
+     * @param null|string $pathToBehat
      *
-     * @return \Robo\Task\Testing\Behat
+     * @return \Robo\Task\Testing\Behat|\Robo\Collection\CollectionBuilder
      */
     protected function taskBehat($pathToBehat = null)
     {
diff --git a/vendor/consolidation/robo/src/Task/Vcs/GitStack.php b/vendor/consolidation/robo/src/Task/Vcs/GitStack.php
index 6cb1783f0460b750ecfe846d6bdbcee56c1807bb..a72df6cc6efe8cc7192a4d198fd40d5a70e6b581 100644
--- a/vendor/consolidation/robo/src/Task/Vcs/GitStack.php
+++ b/vendor/consolidation/robo/src/Task/Vcs/GitStack.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Vcs;
 
 use Robo\Task\CommandStack;
@@ -42,6 +43,7 @@ public function __construct($pathToGit = 'git')
      *
      * @param string $repo
      * @param string $to
+     * @param string $branch
      *
      * @return $this
      */
diff --git a/vendor/consolidation/robo/src/Task/Vcs/HgStack.php b/vendor/consolidation/robo/src/Task/Vcs/HgStack.php
index 71cc0ca9c1639c3065a5ea6e0e7ccb6aa20faf56..76d32bdc6d33755f5f19d487f31881e64542df3b 100644
--- a/vendor/consolidation/robo/src/Task/Vcs/HgStack.php
+++ b/vendor/consolidation/robo/src/Task/Vcs/HgStack.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Vcs;
 
 use Robo\Task\CommandStack;
diff --git a/vendor/consolidation/robo/src/Task/Vcs/SvnStack.php b/vendor/consolidation/robo/src/Task/Vcs/SvnStack.php
index ec719b538bc178255174f5d8b86837d9c5df49f5..bae13f5492267f531bd594987dcf202574bec8b4 100644
--- a/vendor/consolidation/robo/src/Task/Vcs/SvnStack.php
+++ b/vendor/consolidation/robo/src/Task/Vcs/SvnStack.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Vcs;
 
 use Robo\Contract\CommandInterface;
@@ -34,7 +35,7 @@ class SvnStack extends CommandStack implements CommandInterface
     protected $stopOnFail = false;
 
     /**
-     * @var \Robo\Result
+     * {@inheritdoc}
      */
     protected $result;
 
@@ -60,7 +61,7 @@ public function __construct($username = '', $password = '', $pathToSvn = 'svn')
      *
      * @param string $path
      *
-     * @return $this;
+     * @return $this
      */
     public function update($path = '')
     {
diff --git a/vendor/consolidation/robo/src/Task/Vcs/loadShortcuts.php b/vendor/consolidation/robo/src/Task/Vcs/loadShortcuts.php
index 7d64ab58c3da01905900f854d62a81d5e257cca6..7aeaa0ff3c860da568b5115fc14440f437f690bb 100644
--- a/vendor/consolidation/robo/src/Task/Vcs/loadShortcuts.php
+++ b/vendor/consolidation/robo/src/Task/Vcs/loadShortcuts.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Vcs;
 
 trait loadShortcuts
diff --git a/vendor/consolidation/robo/src/Task/Vcs/loadTasks.php b/vendor/consolidation/robo/src/Task/Vcs/loadTasks.php
index 6dd06228a151d10e882ee4824bbe4cd9457c8f56..7b58392fcf56473c3307635c19872cf536850fb2 100644
--- a/vendor/consolidation/robo/src/Task/Vcs/loadTasks.php
+++ b/vendor/consolidation/robo/src/Task/Vcs/loadTasks.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo\Task\Vcs;
 
 trait loadTasks
@@ -8,7 +9,7 @@ trait loadTasks
      * @param string $password
      * @param string $pathToSvn
      *
-     * @return \Robo\Task\Vcs\SvnStack
+     * @return \Robo\Task\Vcs\SvnStack|\Robo\Collection\CollectionBuilder
      */
     protected function taskSvnStack($username = '', $password = '', $pathToSvn = 'svn')
     {
@@ -18,7 +19,7 @@ protected function taskSvnStack($username = '', $password = '', $pathToSvn = 'sv
     /**
      * @param string $pathToGit
      *
-     * @return \Robo\Task\Vcs\GitStack
+     * @return \Robo\Task\Vcs\GitStack|\Robo\Collection\CollectionBuilder
      */
     protected function taskGitStack($pathToGit = 'git')
     {
@@ -28,7 +29,7 @@ protected function taskGitStack($pathToGit = 'git')
     /**
      * @param string $pathToHg
      *
-     * @return \Robo\Task\Vcs\HgStack
+     * @return \Robo\Task\Vcs\HgStack|\Robo\Collection\CollectionBuilder
      */
     protected function taskHgStack($pathToHg = 'hg')
     {
diff --git a/vendor/consolidation/robo/src/TaskAccessor.php b/vendor/consolidation/robo/src/TaskAccessor.php
index e65cd3eb364afa71c5f0cbd4635271060635cfbb..ac5e9bf23f2a0edc37dcf7e758b263b480658f6c 100644
--- a/vendor/consolidation/robo/src/TaskAccessor.php
+++ b/vendor/consolidation/robo/src/TaskAccessor.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo;
 
 use Robo\Common\BuilderAwareTrait;
diff --git a/vendor/consolidation/robo/src/TaskInfo.php b/vendor/consolidation/robo/src/TaskInfo.php
index ce59c2d5560ef85872e549489bdbc1a177848cd2..05015016fddb11030394a46babfdf76b9ba9cbee 100644
--- a/vendor/consolidation/robo/src/TaskInfo.php
+++ b/vendor/consolidation/robo/src/TaskInfo.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo;
 
 class TaskInfo
diff --git a/vendor/consolidation/robo/src/Tasks.php b/vendor/consolidation/robo/src/Tasks.php
index 2822d7d506b3460e31242b45ff57adc7f4e59be5..14ff0b82edabff45848f4891eeda3fe57edae156 100644
--- a/vendor/consolidation/robo/src/Tasks.php
+++ b/vendor/consolidation/robo/src/Tasks.php
@@ -1,4 +1,5 @@
 <?php
+
 namespace Robo;
 
 use Robo\Common\IO;
diff --git a/vendor/consolidation/self-update/VERSION b/vendor/consolidation/self-update/VERSION
index e25d8d9f357cfa028ffbf2f7bdc597e28968696b..25b6557de3b86e714ae1d6e512831f17c80613a2 100644
--- a/vendor/consolidation/self-update/VERSION
+++ b/vendor/consolidation/self-update/VERSION
@@ -1 +1 @@
-1.1.5
+1.1.6-dev
diff --git a/vendor/consolidation/self-update/composer.json b/vendor/consolidation/self-update/composer.json
index 3125a65f60df5b3e31d2a0d63ede563727cd7f23..ccb04cb0754602176a66d3398a2954a4c33015bb 100644
--- a/vendor/consolidation/self-update/composer.json
+++ b/vendor/consolidation/self-update/composer.json
@@ -19,8 +19,8 @@
     },
     "require": {
         "php": ">=5.5.0",
-        "symfony/console": "^2.8|^3|^4",
-        "symfony/filesystem": "^2.5|^3|^4"
+        "symfony/console": "^2.8|^3|^4|^5",
+        "symfony/filesystem": "^2.5|^3|^4|^5"
     },
     "bin": [
         "scripts/release"
@@ -30,10 +30,7 @@
     },
     "config": {
         "optimize-autoloader": true,
-        "sort-packages": true,
-        "platform": {
-            "php": "5.6.3"
-        }
+        "sort-packages": true
     },
     "extra": {
         "branch-alias": {
diff --git a/vendor/consolidation/self-update/composer.lock b/vendor/consolidation/self-update/composer.lock
index af14184c818c80399303b7e5705ae1bf4eedcd8a..c092bd6f2363f3f3672f951315f91bca711e20b2 100644
--- a/vendor/consolidation/self-update/composer.lock
+++ b/vendor/consolidation/self-update/composer.lock
@@ -4,20 +4,20 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "This file is @generated automatically"
     ],
-    "content-hash": "3c87d0a607c776a773e52613a1ae51a9",
+    "content-hash": "52c2d7f576aaa24ebd91400d895ccd5d",
     "packages": [
         {
-            "name": "psr/log",
-            "version": "1.0.2",
+            "name": "psr/container",
+            "version": "1.0.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/php-fig/log.git",
-                "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d"
+                "url": "https://github.com/php-fig/container.git",
+                "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d",
-                "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d",
+                "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
+                "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
                 "shasum": ""
             },
             "require": {
@@ -31,7 +31,7 @@
             },
             "autoload": {
                 "psr-4": {
-                    "Psr\\Log\\": "Psr/Log/"
+                    "Psr\\Container\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -44,48 +44,57 @@
                     "homepage": "http://www.php-fig.org/"
                 }
             ],
-            "description": "Common interface for logging libraries",
-            "homepage": "https://github.com/php-fig/log",
+            "description": "Common Container Interface (PHP FIG PSR-11)",
+            "homepage": "https://github.com/php-fig/container",
             "keywords": [
-                "log",
-                "psr",
-                "psr-3"
+                "PSR-11",
+                "container",
+                "container-interface",
+                "container-interop",
+                "psr"
             ],
-            "time": "2016-10-10T12:19:37+00:00"
+            "time": "2017-02-14T16:28:37+00:00"
         },
         {
             "name": "symfony/console",
-            "version": "v3.4.14",
+            "version": "v5.0.7",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/console.git",
-                "reference": "6b217594552b9323bcdcfc14f8a0ce126e84cd73"
+                "reference": "5fa1caadc8cdaa17bcfb25219f3b53fe294a9935"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/console/zipball/6b217594552b9323bcdcfc14f8a0ce126e84cd73",
-                "reference": "6b217594552b9323bcdcfc14f8a0ce126e84cd73",
+                "url": "https://api.github.com/repos/symfony/console/zipball/5fa1caadc8cdaa17bcfb25219f3b53fe294a9935",
+                "reference": "5fa1caadc8cdaa17bcfb25219f3b53fe294a9935",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.5.9|>=7.0.8",
-                "symfony/debug": "~2.8|~3.0|~4.0",
-                "symfony/polyfill-mbstring": "~1.0"
+                "php": "^7.2.5",
+                "symfony/polyfill-mbstring": "~1.0",
+                "symfony/polyfill-php73": "^1.8",
+                "symfony/service-contracts": "^1.1|^2"
             },
             "conflict": {
-                "symfony/dependency-injection": "<3.4",
-                "symfony/process": "<3.3"
+                "symfony/dependency-injection": "<4.4",
+                "symfony/event-dispatcher": "<4.4",
+                "symfony/lock": "<4.4",
+                "symfony/process": "<4.4"
+            },
+            "provide": {
+                "psr/log-implementation": "1.0"
             },
             "require-dev": {
                 "psr/log": "~1.0",
-                "symfony/config": "~3.3|~4.0",
-                "symfony/dependency-injection": "~3.4|~4.0",
-                "symfony/event-dispatcher": "~2.8|~3.0|~4.0",
-                "symfony/lock": "~3.4|~4.0",
-                "symfony/process": "~3.3|~4.0"
+                "symfony/config": "^4.4|^5.0",
+                "symfony/dependency-injection": "^4.4|^5.0",
+                "symfony/event-dispatcher": "^4.4|^5.0",
+                "symfony/lock": "^4.4|^5.0",
+                "symfony/process": "^4.4|^5.0",
+                "symfony/var-dumper": "^4.4|^5.0"
             },
             "suggest": {
-                "psr/log-implementation": "For using the console logger",
+                "psr/log": "For using the console logger",
                 "symfony/event-dispatcher": "",
                 "symfony/lock": "",
                 "symfony/process": ""
@@ -93,7 +102,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "3.4-dev"
+                    "dev-master": "5.0-dev"
                 }
             },
             "autoload": {
@@ -120,41 +129,35 @@
             ],
             "description": "Symfony Console Component",
             "homepage": "https://symfony.com",
-            "time": "2018-07-26T11:19:56+00:00"
+            "time": "2020-03-30T11:42:42+00:00"
         },
         {
-            "name": "symfony/debug",
-            "version": "v3.4.14",
+            "name": "symfony/filesystem",
+            "version": "v5.0.7",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/debug.git",
-                "reference": "d5a058ff6ecad26b30c1ba452241306ea34c65cc"
+                "url": "https://github.com/symfony/filesystem.git",
+                "reference": "ca3b87dd09fff9b771731637f5379965fbfab420"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/debug/zipball/d5a058ff6ecad26b30c1ba452241306ea34c65cc",
-                "reference": "d5a058ff6ecad26b30c1ba452241306ea34c65cc",
+                "url": "https://api.github.com/repos/symfony/filesystem/zipball/ca3b87dd09fff9b771731637f5379965fbfab420",
+                "reference": "ca3b87dd09fff9b771731637f5379965fbfab420",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.5.9|>=7.0.8",
-                "psr/log": "~1.0"
-            },
-            "conflict": {
-                "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2"
-            },
-            "require-dev": {
-                "symfony/http-kernel": "~2.8|~3.0|~4.0"
+                "php": "^7.2.5",
+                "symfony/polyfill-ctype": "~1.8"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "3.4-dev"
+                    "dev-master": "5.0-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Symfony\\Component\\Debug\\": ""
+                    "Symfony\\Component\\Filesystem\\": ""
                 },
                 "exclude-from-classmap": [
                     "/Tests/"
@@ -174,40 +177,42 @@
                     "homepage": "https://symfony.com/contributors"
                 }
             ],
-            "description": "Symfony Debug Component",
+            "description": "Symfony Filesystem Component",
             "homepage": "https://symfony.com",
-            "time": "2018-07-26T11:19:56+00:00"
+            "time": "2020-03-27T16:56:45+00:00"
         },
         {
-            "name": "symfony/filesystem",
-            "version": "v3.4.14",
+            "name": "symfony/polyfill-ctype",
+            "version": "v1.15.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/filesystem.git",
-                "reference": "a59f917e3c5d82332514cb4538387638f5bde2d6"
+                "url": "https://github.com/symfony/polyfill-ctype.git",
+                "reference": "4719fa9c18b0464d399f1a63bf624b42b6fa8d14"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/filesystem/zipball/a59f917e3c5d82332514cb4538387638f5bde2d6",
-                "reference": "a59f917e3c5d82332514cb4538387638f5bde2d6",
+                "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/4719fa9c18b0464d399f1a63bf624b42b6fa8d14",
+                "reference": "4719fa9c18b0464d399f1a63bf624b42b6fa8d14",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.5.9|>=7.0.8",
-                "symfony/polyfill-ctype": "~1.8"
+                "php": ">=5.3.3"
+            },
+            "suggest": {
+                "ext-ctype": "For best performance"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "3.4-dev"
+                    "dev-master": "1.15-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Symfony\\Component\\Filesystem\\": ""
+                    "Symfony\\Polyfill\\Ctype\\": ""
                 },
-                "exclude-from-classmap": [
-                    "/Tests/"
+                "files": [
+                    "bootstrap.php"
                 ]
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -216,47 +221,67 @@
             ],
             "authors": [
                 {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
+                    "name": "Gert de Pagter",
+                    "email": "BackEndTea@gmail.com"
                 },
                 {
                     "name": "Symfony Community",
                     "homepage": "https://symfony.com/contributors"
                 }
             ],
-            "description": "Symfony Filesystem Component",
+            "description": "Symfony polyfill for ctype functions",
             "homepage": "https://symfony.com",
-            "time": "2018-07-26T11:19:56+00:00"
+            "keywords": [
+                "compatibility",
+                "ctype",
+                "polyfill",
+                "portable"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-02-27T09:26:54+00:00"
         },
         {
-            "name": "symfony/polyfill-ctype",
-            "version": "v1.9.0",
+            "name": "symfony/polyfill-mbstring",
+            "version": "v1.15.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/polyfill-ctype.git",
-                "reference": "e3d826245268269cd66f8326bd8bc066687b4a19"
+                "url": "https://github.com/symfony/polyfill-mbstring.git",
+                "reference": "81ffd3a9c6d707be22e3012b827de1c9775fc5ac"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/e3d826245268269cd66f8326bd8bc066687b4a19",
-                "reference": "e3d826245268269cd66f8326bd8bc066687b4a19",
+                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/81ffd3a9c6d707be22e3012b827de1c9775fc5ac",
+                "reference": "81ffd3a9c6d707be22e3012b827de1c9775fc5ac",
                 "shasum": ""
             },
             "require": {
                 "php": ">=5.3.3"
             },
             "suggest": {
-                "ext-ctype": "For best performance"
+                "ext-mbstring": "For best performance"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.9-dev"
+                    "dev-master": "1.15-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Symfony\\Polyfill\\Ctype\\": ""
+                    "Symfony\\Polyfill\\Mbstring\\": ""
                 },
                 "files": [
                     "bootstrap.php"
@@ -268,56 +293,71 @@
             ],
             "authors": [
                 {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
                 },
                 {
-                    "name": "Gert de Pagter",
-                    "email": "BackEndTea@gmail.com"
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
                 }
             ],
-            "description": "Symfony polyfill for ctype functions",
+            "description": "Symfony polyfill for the Mbstring extension",
             "homepage": "https://symfony.com",
             "keywords": [
                 "compatibility",
-                "ctype",
+                "mbstring",
                 "polyfill",
-                "portable"
+                "portable",
+                "shim"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
             ],
-            "time": "2018-08-06T14:22:27+00:00"
+            "time": "2020-03-09T19:04:49+00:00"
         },
         {
-            "name": "symfony/polyfill-mbstring",
-            "version": "v1.9.0",
+            "name": "symfony/polyfill-php73",
+            "version": "v1.15.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/polyfill-mbstring.git",
-                "reference": "d0cd638f4634c16d8df4508e847f14e9e43168b8"
+                "url": "https://github.com/symfony/polyfill-php73.git",
+                "reference": "0f27e9f464ea3da33cbe7ca3bdf4eb66def9d0f7"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/d0cd638f4634c16d8df4508e847f14e9e43168b8",
-                "reference": "d0cd638f4634c16d8df4508e847f14e9e43168b8",
+                "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/0f27e9f464ea3da33cbe7ca3bdf4eb66def9d0f7",
+                "reference": "0f27e9f464ea3da33cbe7ca3bdf4eb66def9d0f7",
                 "shasum": ""
             },
             "require": {
                 "php": ">=5.3.3"
             },
-            "suggest": {
-                "ext-mbstring": "For best performance"
-            },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.9-dev"
+                    "dev-master": "1.15-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Symfony\\Polyfill\\Mbstring\\": ""
+                    "Symfony\\Polyfill\\Php73\\": ""
                 },
                 "files": [
                     "bootstrap.php"
+                ],
+                "classmap": [
+                    "Resources/stubs"
                 ]
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -334,16 +374,87 @@
                     "homepage": "https://symfony.com/contributors"
                 }
             ],
-            "description": "Symfony polyfill for the Mbstring extension",
+            "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions",
             "homepage": "https://symfony.com",
             "keywords": [
                 "compatibility",
-                "mbstring",
                 "polyfill",
                 "portable",
                 "shim"
             ],
-            "time": "2018-08-06T14:22:27+00:00"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-02-27T09:26:54+00:00"
+        },
+        {
+            "name": "symfony/service-contracts",
+            "version": "v2.0.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/service-contracts.git",
+                "reference": "144c5e51266b281231e947b51223ba14acf1a749"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/service-contracts/zipball/144c5e51266b281231e947b51223ba14acf1a749",
+                "reference": "144c5e51266b281231e947b51223ba14acf1a749",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.2.5",
+                "psr/container": "^1.0"
+            },
+            "suggest": {
+                "symfony/service-implementation": ""
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.0-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Contracts\\Service\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Generic abstractions related to writing services",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "abstractions",
+                "contracts",
+                "decoupling",
+                "interfaces",
+                "interoperability",
+                "standards"
+            ],
+            "time": "2019-11-18T17:27:11+00:00"
         }
     ],
     "packages-dev": [],
@@ -356,7 +467,5 @@
         "php": ">=5.5.0"
     },
     "platform-dev": [],
-    "platform-overrides": {
-        "php": "5.6.3"
-    }
+    "plugin-api-version": "1.1.0"
 }
diff --git a/vendor/consolidation/site-alias/.scenarios.lock/install b/vendor/consolidation/site-alias/.scenarios.lock/install
index 16c69e107cce7f71e33e04207254d005200f9fd4..4d8a777705dd1ce798857719d69a989d29271a6f 100755
--- a/vendor/consolidation/site-alias/.scenarios.lock/install
+++ b/vendor/consolidation/site-alias/.scenarios.lock/install
@@ -4,16 +4,16 @@ SCENARIO=$1
 DEPENDENCIES=${2-install}
 
 # Convert the aliases 'highest', 'lowest' and 'lock' to
-# the corresponding composer command to run.
+# the corresponding composer update command to run.
 case $DEPENDENCIES in
   highest)
-    DEPENDENCIES=update
+    UPDATE_COMMAND=update
     ;;
   lowest)
-    DEPENDENCIES='update --prefer-lowest'
+    UPDATE_COMMAND='update --prefer-lowest'
     ;;
   lock|default|"")
-    DEPENDENCIES=install
+    UPDATE_COMMAND=''
     ;;
 esac
 
@@ -48,7 +48,11 @@ echo
 set -ex
 
 composer -n validate --working-dir=$dir --no-check-all --ansi
-composer -n --working-dir=$dir ${DEPENDENCIES} --prefer-dist --no-scripts
+
+if [ ! -z "$UPDATE_COMMAND" ] ; then
+  composer -n --working-dir=$dir ${UPDATE_COMMAND} --prefer-dist --no-scripts
+fi
+composer -n --working-dir=$dir install --prefer-dist
 
 # If called from a CI context, print out some extra information about
 # what we just installed.
diff --git a/vendor/consolidation/site-alias/.scenarios.lock/phpunit5/composer.json b/vendor/consolidation/site-alias/.scenarios.lock/phpunit5/composer.json
index 9df0d140f8fa830e489a221bb57a8b6b1f97fa8a..bc673b4fee48d9aab7fb85c52a2e678bb87ae264 100644
--- a/vendor/consolidation/site-alias/.scenarios.lock/phpunit5/composer.json
+++ b/vendor/consolidation/site-alias/.scenarios.lock/phpunit5/composer.json
@@ -24,13 +24,12 @@
     },
     "require": {
         "php": ">=5.5.0",
-        "consolidation/config": "^1.2.1"
+        "consolidation/config": "^1.2.1|^2"
     },
     "require-dev": {
         "phpunit/phpunit": "^5.7.27",
-        "symfony/yaml": "~2.3|^3",
-        "consolidation/Robo": "^1.2.3",
-        "symfony/console": "^2.8|^3|^4",
+        "symfony/yaml": "~2.3|^3|^4.4|^5",
+        "consolidation/robo": "^1.2.3|^2",
         "knplabs/github-api": "^2.7",
         "php-http/guzzle6-adapter": "^1.1",
         "g1a/composer-test-scenarios": "^3",
diff --git a/vendor/consolidation/site-alias/.scenarios.lock/phpunit5/composer.lock b/vendor/consolidation/site-alias/.scenarios.lock/phpunit5/composer.lock
index a42788f47642c2229fbe874343feccb11bcc90fa..096f6338d42b825bafa4c3c747b809a7e8072c34 100644
--- a/vendor/consolidation/site-alias/.scenarios.lock/phpunit5/composer.lock
+++ b/vendor/consolidation/site-alias/.scenarios.lock/phpunit5/composer.lock
@@ -4,7 +4,7 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "This file is @generated automatically"
     ],
-    "content-hash": "d7b07f5eeac1fc1152ef12b7f00abfdb",
+    "content-hash": "06283d1fe5e0c31a2d5ab2fa7dbf8ff0",
     "packages": [
         {
             "name": "consolidation/config",
@@ -197,16 +197,16 @@
     "packages-dev": [
         {
             "name": "clue/stream-filter",
-            "version": "v1.4.0",
+            "version": "v1.4.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/clue/php-stream-filter.git",
-                "reference": "d80fdee9b3a7e0d16fc330a22f41f3ad0eeb09d0"
+                "reference": "5a58cc30a8bd6a4eb8f856adf61dd3e013f53f71"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/clue/php-stream-filter/zipball/d80fdee9b3a7e0d16fc330a22f41f3ad0eeb09d0",
-                "reference": "d80fdee9b3a7e0d16fc330a22f41f3ad0eeb09d0",
+                "url": "https://api.github.com/repos/clue/php-stream-filter/zipball/5a58cc30a8bd6a4eb8f856adf61dd3e013f53f71",
+                "reference": "5a58cc30a8bd6a4eb8f856adf61dd3e013f53f71",
                 "shasum": ""
             },
             "require": {
@@ -221,7 +221,7 @@
                     "Clue\\StreamFilter\\": "src/"
                 },
                 "files": [
-                    "src/functions.php"
+                    "src/functions_include.php"
                 ]
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -245,7 +245,7 @@
                 "stream_filter_append",
                 "stream_filter_register"
             ],
-            "time": "2017-08-18T09:54:01+00:00"
+            "time": "2019-04-09T12:31:48+00:00"
         },
         {
             "name": "consolidation/annotated-command",
@@ -435,16 +435,16 @@
         },
         {
             "name": "consolidation/output-formatters",
-            "version": "3.4.0",
+            "version": "3.5.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/consolidation/output-formatters.git",
-                "reference": "a942680232094c4a5b21c0b7e54c20cce623ae19"
+                "reference": "99ec998ffb697e0eada5aacf81feebfb13023605"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/consolidation/output-formatters/zipball/a942680232094c4a5b21c0b7e54c20cce623ae19",
-                "reference": "a942680232094c4a5b21c0b7e54c20cce623ae19",
+                "url": "https://api.github.com/repos/consolidation/output-formatters/zipball/99ec998ffb697e0eada5aacf81feebfb13023605",
+                "reference": "99ec998ffb697e0eada5aacf81feebfb13023605",
                 "shasum": ""
             },
             "require": {
@@ -454,11 +454,10 @@
                 "symfony/finder": "^2.5|^3|^4"
             },
             "require-dev": {
-                "g1a/composer-test-scenarios": "^2",
+                "g1a/composer-test-scenarios": "^3",
+                "php-coveralls/php-coveralls": "^1",
                 "phpunit/phpunit": "^5.7.27",
-                "satooshi/php-coveralls": "^2",
                 "squizlabs/php_codesniffer": "^2.7",
-                "symfony/console": "3.2.3",
                 "symfony/var-dumper": "^2.8|^3|^4",
                 "victorjonsson/markdowndocs": "^1.3"
             },
@@ -467,6 +466,52 @@
             },
             "type": "library",
             "extra": {
+                "scenarios": {
+                    "symfony4": {
+                        "require": {
+                            "symfony/console": "^4.0"
+                        },
+                        "require-dev": {
+                            "phpunit/phpunit": "^6"
+                        },
+                        "config": {
+                            "platform": {
+                                "php": "7.1.3"
+                            }
+                        }
+                    },
+                    "symfony3": {
+                        "require": {
+                            "symfony/console": "^3.4",
+                            "symfony/finder": "^3.4",
+                            "symfony/var-dumper": "^3.4"
+                        },
+                        "config": {
+                            "platform": {
+                                "php": "5.6.32"
+                            }
+                        }
+                    },
+                    "symfony2": {
+                        "require": {
+                            "symfony/console": "^2.8"
+                        },
+                        "require-dev": {
+                            "phpunit/phpunit": "^4.8.36"
+                        },
+                        "remove": [
+                            "php-coveralls/php-coveralls"
+                        ],
+                        "config": {
+                            "platform": {
+                                "php": "5.4.8"
+                            }
+                        },
+                        "scenario-options": {
+                            "create-lockfile": "false"
+                        }
+                    }
+                },
                 "branch-alias": {
                     "dev-master": "3.x-dev"
                 }
@@ -487,30 +532,30 @@
                 }
             ],
             "description": "Format text by applying transformations provided by plug-in formatters.",
-            "time": "2018-10-19T22:35:38+00:00"
+            "time": "2019-05-30T23:16:01+00:00"
         },
         {
             "name": "consolidation/robo",
-            "version": "1.4.6",
+            "version": "1.4.12",
             "source": {
                 "type": "git",
                 "url": "https://github.com/consolidation/Robo.git",
-                "reference": "d4805a1abbc730e9a6d64ede2eba56f91a2b4eb3"
+                "reference": "eb45606f498b3426b9a98b7c85e300666a968e51"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/consolidation/Robo/zipball/d4805a1abbc730e9a6d64ede2eba56f91a2b4eb3",
-                "reference": "d4805a1abbc730e9a6d64ede2eba56f91a2b4eb3",
+                "url": "https://api.github.com/repos/consolidation/Robo/zipball/eb45606f498b3426b9a98b7c85e300666a968e51",
+                "reference": "eb45606f498b3426b9a98b7c85e300666a968e51",
                 "shasum": ""
             },
             "require": {
-                "consolidation/annotated-command": "^2.10.2",
-                "consolidation/config": "^1.0.10",
-                "consolidation/log": "~1",
-                "consolidation/output-formatters": "^3.1.13",
-                "consolidation/self-update": "^1",
-                "grasmash/yaml-expander": "^1.3",
-                "league/container": "^2.2",
+                "consolidation/annotated-command": "^2.11.0|^4.1",
+                "consolidation/config": "^1.2.1",
+                "consolidation/log": "^1.1.1|^2",
+                "consolidation/output-formatters": "^3.1.13|^4.1",
+                "consolidation/self-update": "^1.1.5",
+                "grasmash/yaml-expander": "^1.4",
+                "league/container": "^2.4.1",
                 "php": ">=5.5.0",
                 "symfony/console": "^2.8|^3|^4",
                 "symfony/event-dispatcher": "^2.5|^3|^4",
@@ -522,19 +567,13 @@
                 "codegyre/robo": "< 1.0"
             },
             "require-dev": {
-                "codeception/aspect-mock": "^1|^2.1.1",
-                "codeception/base": "^2.3.7",
-                "codeception/verify": "^0.3.2",
                 "g1a/composer-test-scenarios": "^3",
-                "goaop/framework": "~2.1.2",
-                "goaop/parser-reflection": "^1.1.0",
                 "natxet/cssmin": "3.0.4",
-                "nikic/php-parser": "^3.1.5",
-                "patchwork/jsqueeze": "~2",
+                "patchwork/jsqueeze": "^2",
                 "pear/archive_tar": "^1.4.4",
                 "php-coveralls/php-coveralls": "^1",
-                "phpunit/php-code-coverage": "~2|~4",
-                "squizlabs/php_codesniffer": "^2.8"
+                "phpunit/phpunit": "^5.7.27",
+                "squizlabs/php_codesniffer": "^3"
             },
             "suggest": {
                 "henrikbjorn/lurker": "For monitoring filesystem changes in taskWatch",
@@ -562,8 +601,11 @@
                         "require": {
                             "symfony/console": "^2.8"
                         },
+                        "require-dev": {
+                            "phpunit/phpunit": "^4.8.36"
+                        },
                         "remove": [
-                            "goaop/framework"
+                            "php-coveralls/php-coveralls"
                         ],
                         "config": {
                             "platform": {
@@ -576,7 +618,7 @@
                     }
                 },
                 "branch-alias": {
-                    "dev-master": "2.x-dev"
+                    "dev-master": "1.x-dev"
                 }
             },
             "autoload": {
@@ -595,26 +637,26 @@
                 }
             ],
             "description": "Modern task runner",
-            "time": "2019-02-17T05:32:27+00:00"
+            "time": "2020-02-18T17:31:26+00:00"
         },
         {
             "name": "consolidation/self-update",
-            "version": "1.1.5",
+            "version": "1.2.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/consolidation/self-update.git",
-                "reference": "a1c273b14ce334789825a09d06d4c87c0a02ad54"
+                "reference": "dba6b2c0708f20fa3ba8008a2353b637578849b4"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/consolidation/self-update/zipball/a1c273b14ce334789825a09d06d4c87c0a02ad54",
-                "reference": "a1c273b14ce334789825a09d06d4c87c0a02ad54",
+                "url": "https://api.github.com/repos/consolidation/self-update/zipball/dba6b2c0708f20fa3ba8008a2353b637578849b4",
+                "reference": "dba6b2c0708f20fa3ba8008a2353b637578849b4",
                 "shasum": ""
             },
             "require": {
                 "php": ">=5.5.0",
-                "symfony/console": "^2.8|^3|^4",
-                "symfony/filesystem": "^2.5|^3|^4"
+                "symfony/console": "^2.8|^3|^4|^5",
+                "symfony/filesystem": "^2.5|^3|^4|^5"
             },
             "bin": [
                 "scripts/release"
@@ -635,17 +677,17 @@
                 "MIT"
             ],
             "authors": [
-                {
-                    "name": "Greg Anderson",
-                    "email": "greg.1.anderson@greenknowe.org"
-                },
                 {
                     "name": "Alexander Menk",
                     "email": "menk@mestrona.net"
+                },
+                {
+                    "name": "Greg Anderson",
+                    "email": "greg.1.anderson@greenknowe.org"
                 }
             ],
             "description": "Provides a self:update command for Symfony Console applications.",
-            "time": "2018-10-28T01:52:03+00:00"
+            "time": "2020-04-13T02:49:20+00:00"
         },
         {
             "name": "container-interop/container-interop",
@@ -676,6 +718,7 @@
             ],
             "description": "Promoting the interoperability of container objects (DIC, SL, etc.)",
             "homepage": "https://github.com/container-interop/container-interop",
+            "abandoned": "psr/container",
             "time": "2017-02-14T19:40:03+00:00"
         },
         {
@@ -734,16 +777,16 @@
         },
         {
             "name": "g1a/composer-test-scenarios",
-            "version": "3.0.2",
+            "version": "3.0.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/g1a/composer-test-scenarios.git",
-                "reference": "28f932580981e912ab8f01d15788f1dee06550c8"
+                "reference": "78225430d4a5caf8e06b87d04149f8a9ace9368c"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/g1a/composer-test-scenarios/zipball/28f932580981e912ab8f01d15788f1dee06550c8",
-                "reference": "28f932580981e912ab8f01d15788f1dee06550c8",
+                "url": "https://api.github.com/repos/g1a/composer-test-scenarios/zipball/78225430d4a5caf8e06b87d04149f8a9ace9368c",
+                "reference": "78225430d4a5caf8e06b87d04149f8a9ace9368c",
                 "shasum": ""
             },
             "require": {
@@ -782,7 +825,7 @@
                 }
             ],
             "description": "Useful scripts for testing multiple sets of Composer dependencies.",
-            "time": "2019-02-11T20:22:44+00:00"
+            "time": "2019-09-13T01:24:52+00:00"
         },
         {
             "name": "grasmash/yaml-expander",
@@ -834,27 +877,29 @@
         },
         {
             "name": "guzzlehttp/guzzle",
-            "version": "6.3.3",
+            "version": "6.5.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/guzzle/guzzle.git",
-                "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba"
+                "reference": "a4a1b6930528a8f7ee03518e6442ec7a44155d9d"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/guzzle/guzzle/zipball/407b0cb880ace85c9b63c5f9551db498cb2d50ba",
-                "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba",
+                "url": "https://api.github.com/repos/guzzle/guzzle/zipball/a4a1b6930528a8f7ee03518e6442ec7a44155d9d",
+                "reference": "a4a1b6930528a8f7ee03518e6442ec7a44155d9d",
                 "shasum": ""
             },
             "require": {
+                "ext-json": "*",
                 "guzzlehttp/promises": "^1.0",
-                "guzzlehttp/psr7": "^1.4",
-                "php": ">=5.5"
+                "guzzlehttp/psr7": "^1.6.1",
+                "php": ">=5.5",
+                "symfony/polyfill-intl-idn": "1.17.0"
             },
             "require-dev": {
                 "ext-curl": "*",
                 "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0",
-                "psr/log": "^1.0"
+                "psr/log": "^1.1"
             },
             "suggest": {
                 "psr/log": "Required for using the Log middleware"
@@ -862,16 +907,16 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "6.3-dev"
+                    "dev-master": "6.5-dev"
                 }
             },
             "autoload": {
-                "files": [
-                    "src/functions_include.php"
-                ],
                 "psr-4": {
                     "GuzzleHttp\\": "src/"
-                }
+                },
+                "files": [
+                    "src/functions_include.php"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
@@ -895,7 +940,7 @@
                 "rest",
                 "web service"
             ],
-            "time": "2018-04-22T15:46:56+00:00"
+            "time": "2020-05-25T19:35:05+00:00"
         },
         {
             "name": "guzzlehttp/promises",
@@ -950,33 +995,37 @@
         },
         {
             "name": "guzzlehttp/psr7",
-            "version": "1.5.2",
+            "version": "1.6.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/guzzle/psr7.git",
-                "reference": "9f83dded91781a01c63574e387eaa769be769115"
+                "reference": "239400de7a173fe9901b9ac7c06497751f00727a"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/guzzle/psr7/zipball/9f83dded91781a01c63574e387eaa769be769115",
-                "reference": "9f83dded91781a01c63574e387eaa769be769115",
+                "url": "https://api.github.com/repos/guzzle/psr7/zipball/239400de7a173fe9901b9ac7c06497751f00727a",
+                "reference": "239400de7a173fe9901b9ac7c06497751f00727a",
                 "shasum": ""
             },
             "require": {
                 "php": ">=5.4.0",
                 "psr/http-message": "~1.0",
-                "ralouphie/getallheaders": "^2.0.5"
+                "ralouphie/getallheaders": "^2.0.5 || ^3.0.0"
             },
             "provide": {
                 "psr/http-message-implementation": "1.0"
             },
             "require-dev": {
+                "ext-zlib": "*",
                 "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8"
             },
+            "suggest": {
+                "zendframework/zend-httphandlerrunner": "Emit PSR-7 responses"
+            },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.5-dev"
+                    "dev-master": "1.6-dev"
                 }
             },
             "autoload": {
@@ -1013,7 +1062,7 @@
                 "uri",
                 "url"
             ],
-            "time": "2018-12-04T20:46:45+00:00"
+            "time": "2019-07-01T23:21:34+00:00"
         },
         {
             "name": "knplabs/github-api",
@@ -1250,16 +1299,16 @@
         },
         {
             "name": "php-http/client-common",
-            "version": "1.9.1",
+            "version": "1.10.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/php-http/client-common.git",
-                "reference": "0e156a12cc3e46f590c73bf57592a2252fc3dc48"
+                "reference": "c0390ae3c8f2ae9d50901feef0127fb9e396f6b4"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/php-http/client-common/zipball/0e156a12cc3e46f590c73bf57592a2252fc3dc48",
-                "reference": "0e156a12cc3e46f590c73bf57592a2252fc3dc48",
+                "url": "https://api.github.com/repos/php-http/client-common/zipball/c0390ae3c8f2ae9d50901feef0127fb9e396f6b4",
+                "reference": "c0390ae3c8f2ae9d50901feef0127fb9e396f6b4",
                 "shasum": ""
             },
             "require": {
@@ -1267,7 +1316,7 @@
                 "php-http/httplug": "^1.1",
                 "php-http/message": "^1.6",
                 "php-http/message-factory": "^1.0",
-                "symfony/options-resolver": "^2.6 || ^3.0 || ^4.0"
+                "symfony/options-resolver": "^2.6 || ^3.0 || ^4.0 || ^5.0"
             },
             "require-dev": {
                 "guzzlehttp/psr7": "^1.4",
@@ -1281,7 +1330,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.9.x-dev"
+                    "dev-master": "1.10.x-dev"
                 }
             },
             "autoload": {
@@ -1307,7 +1356,7 @@
                 "http",
                 "httplug"
             ],
-            "time": "2019-02-02T07:03:15+00:00"
+            "time": "2019-11-18T08:54:36+00:00"
         },
         {
             "name": "php-http/discovery",
@@ -1809,38 +1858,38 @@
         },
         {
             "name": "phpspec/prophecy",
-            "version": "1.8.0",
+            "version": "v1.10.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpspec/prophecy.git",
-                "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06"
+                "reference": "451c3cd1418cf640de218914901e51b064abb093"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpspec/prophecy/zipball/4ba436b55987b4bf311cb7c6ba82aa528aac0a06",
-                "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06",
+                "url": "https://api.github.com/repos/phpspec/prophecy/zipball/451c3cd1418cf640de218914901e51b064abb093",
+                "reference": "451c3cd1418cf640de218914901e51b064abb093",
                 "shasum": ""
             },
             "require": {
                 "doctrine/instantiator": "^1.0.2",
                 "php": "^5.3|^7.0",
-                "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0",
-                "sebastian/comparator": "^1.1|^2.0|^3.0",
-                "sebastian/recursion-context": "^1.0|^2.0|^3.0"
+                "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0",
+                "sebastian/comparator": "^1.2.3|^2.0|^3.0|^4.0",
+                "sebastian/recursion-context": "^1.0|^2.0|^3.0|^4.0"
             },
             "require-dev": {
-                "phpspec/phpspec": "^2.5|^3.2",
+                "phpspec/phpspec": "^2.5 || ^3.2",
                 "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.8.x-dev"
+                    "dev-master": "1.10.x-dev"
                 }
             },
             "autoload": {
-                "psr-0": {
-                    "Prophecy\\": "src/"
+                "psr-4": {
+                    "Prophecy\\": "src/Prophecy"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -1868,7 +1917,7 @@
                 "spy",
                 "stub"
             ],
-            "time": "2018-08-05T17:53:17+00:00"
+            "time": "2020-03-05T15:02:03+00:00"
         },
         {
             "name": "phpunit/php-code-coverage",
@@ -2408,16 +2457,16 @@
         },
         {
             "name": "psr/log",
-            "version": "1.1.0",
+            "version": "1.1.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/php-fig/log.git",
-                "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd"
+                "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/php-fig/log/zipball/6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd",
-                "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd",
+                "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc",
+                "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc",
                 "shasum": ""
             },
             "require": {
@@ -2426,7 +2475,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.0.x-dev"
+                    "dev-master": "1.1.x-dev"
                 }
             },
             "autoload": {
@@ -2451,28 +2500,28 @@
                 "psr",
                 "psr-3"
             ],
-            "time": "2018-11-20T15:27:04+00:00"
+            "time": "2020-03-23T09:12:05+00:00"
         },
         {
             "name": "ralouphie/getallheaders",
-            "version": "2.0.5",
+            "version": "3.0.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/ralouphie/getallheaders.git",
-                "reference": "5601c8a83fbba7ef674a7369456d12f1e0d0eafa"
+                "reference": "120b605dfeb996808c31b6477290a714d356e822"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/5601c8a83fbba7ef674a7369456d12f1e0d0eafa",
-                "reference": "5601c8a83fbba7ef674a7369456d12f1e0d0eafa",
+                "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822",
+                "reference": "120b605dfeb996808c31b6477290a714d356e822",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3"
+                "php": ">=5.6"
             },
             "require-dev": {
-                "phpunit/phpunit": "~3.7.0",
-                "satooshi/php-coveralls": ">=1.0"
+                "php-coveralls/php-coveralls": "^2.1",
+                "phpunit/phpunit": "^5 || ^6.5"
             },
             "type": "library",
             "autoload": {
@@ -2491,7 +2540,7 @@
                 }
             ],
             "description": "A polyfill for getallheaders.",
-            "time": "2016-02-11T07:05:27+00:00"
+            "time": "2019-03-08T08:55:37+00:00"
         },
         {
             "name": "sebastian/code-unit-reverse-lookup",
@@ -3086,16 +3135,16 @@
         },
         {
             "name": "symfony/console",
-            "version": "v3.4.23",
+            "version": "v3.4.40",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/console.git",
-                "reference": "71ce77f37af0c5ffb9590e43cc4f70e426945c5e"
+                "reference": "bf60d5e606cd595391c5f82bf6b570d9573fa120"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/console/zipball/71ce77f37af0c5ffb9590e43cc4f70e426945c5e",
-                "reference": "71ce77f37af0c5ffb9590e43cc4f70e426945c5e",
+                "url": "https://api.github.com/repos/symfony/console/zipball/bf60d5e606cd595391c5f82bf6b570d9573fa120",
+                "reference": "bf60d5e606cd595391c5f82bf6b570d9573fa120",
                 "shasum": ""
             },
             "require": {
@@ -3154,20 +3203,20 @@
             ],
             "description": "Symfony Console Component",
             "homepage": "https://symfony.com",
-            "time": "2019-02-23T15:06:07+00:00"
+            "time": "2020-03-27T17:07:22+00:00"
         },
         {
             "name": "symfony/debug",
-            "version": "v3.4.23",
+            "version": "v3.4.40",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/debug.git",
-                "reference": "8d8a9e877b3fcdc50ddecf8dcea146059753f782"
+                "reference": "ce9f3b5e8e1c50f849fded59b3a1b6bc3562ec29"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/debug/zipball/8d8a9e877b3fcdc50ddecf8dcea146059753f782",
-                "reference": "8d8a9e877b3fcdc50ddecf8dcea146059753f782",
+                "url": "https://api.github.com/repos/symfony/debug/zipball/ce9f3b5e8e1c50f849fded59b3a1b6bc3562ec29",
+                "reference": "ce9f3b5e8e1c50f849fded59b3a1b6bc3562ec29",
                 "shasum": ""
             },
             "require": {
@@ -3210,20 +3259,20 @@
             ],
             "description": "Symfony Debug Component",
             "homepage": "https://symfony.com",
-            "time": "2019-02-24T15:45:11+00:00"
+            "time": "2020-03-23T10:22:40+00:00"
         },
         {
             "name": "symfony/event-dispatcher",
-            "version": "v3.4.23",
+            "version": "v3.4.40",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/event-dispatcher.git",
-                "reference": "ec625e2fff7f584eeb91754821807317b2e79236"
+                "reference": "9d4e22943b73acc1ba50595b7de1a01fe9dbad48"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/ec625e2fff7f584eeb91754821807317b2e79236",
-                "reference": "ec625e2fff7f584eeb91754821807317b2e79236",
+                "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/9d4e22943b73acc1ba50595b7de1a01fe9dbad48",
+                "reference": "9d4e22943b73acc1ba50595b7de1a01fe9dbad48",
                 "shasum": ""
             },
             "require": {
@@ -3273,20 +3322,20 @@
             ],
             "description": "Symfony EventDispatcher Component",
             "homepage": "https://symfony.com",
-            "time": "2019-02-23T15:06:07+00:00"
+            "time": "2020-03-15T09:38:08+00:00"
         },
         {
             "name": "symfony/filesystem",
-            "version": "v3.4.23",
+            "version": "v3.4.40",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/filesystem.git",
-                "reference": "acf99758b1df8e9295e6b85aa69f294565c9fedb"
+                "reference": "78a93e5606a19d0fb490afc3c4a9b7ecd86e1515"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/filesystem/zipball/acf99758b1df8e9295e6b85aa69f294565c9fedb",
-                "reference": "acf99758b1df8e9295e6b85aa69f294565c9fedb",
+                "url": "https://api.github.com/repos/symfony/filesystem/zipball/78a93e5606a19d0fb490afc3c4a9b7ecd86e1515",
+                "reference": "78a93e5606a19d0fb490afc3c4a9b7ecd86e1515",
                 "shasum": ""
             },
             "require": {
@@ -3323,20 +3372,20 @@
             ],
             "description": "Symfony Filesystem Component",
             "homepage": "https://symfony.com",
-            "time": "2019-02-04T21:34:32+00:00"
+            "time": "2020-04-12T16:54:01+00:00"
         },
         {
             "name": "symfony/finder",
-            "version": "v3.4.23",
+            "version": "v3.4.40",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/finder.git",
-                "reference": "fcdde4aa38f48190ce70d782c166f23930084f9b"
+                "reference": "5ec813ccafa8164ef21757e8c725d3a57da59200"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/finder/zipball/fcdde4aa38f48190ce70d782c166f23930084f9b",
-                "reference": "fcdde4aa38f48190ce70d782c166f23930084f9b",
+                "url": "https://api.github.com/repos/symfony/finder/zipball/5ec813ccafa8164ef21757e8c725d3a57da59200",
+                "reference": "5ec813ccafa8164ef21757e8c725d3a57da59200",
                 "shasum": ""
             },
             "require": {
@@ -3372,20 +3421,20 @@
             ],
             "description": "Symfony Finder Component",
             "homepage": "https://symfony.com",
-            "time": "2019-02-22T14:44:53+00:00"
+            "time": "2020-02-14T07:34:21+00:00"
         },
         {
             "name": "symfony/options-resolver",
-            "version": "v3.4.23",
+            "version": "v3.4.40",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/options-resolver.git",
-                "reference": "926e3b797e6bb66c0e4d7da7eff3a174f7378bcf"
+                "reference": "79701529391f802604ec92080364d617f029974b"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/options-resolver/zipball/926e3b797e6bb66c0e4d7da7eff3a174f7378bcf",
-                "reference": "926e3b797e6bb66c0e4d7da7eff3a174f7378bcf",
+                "url": "https://api.github.com/repos/symfony/options-resolver/zipball/79701529391f802604ec92080364d617f029974b",
+                "reference": "79701529391f802604ec92080364d617f029974b",
                 "shasum": ""
             },
             "require": {
@@ -3426,20 +3475,20 @@
                 "configuration",
                 "options"
             ],
-            "time": "2019-02-23T15:06:07+00:00"
+            "time": "2020-04-06T08:30:32+00:00"
         },
         {
             "name": "symfony/polyfill-ctype",
-            "version": "v1.10.0",
+            "version": "v1.17.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-ctype.git",
-                "reference": "e3d826245268269cd66f8326bd8bc066687b4a19"
+                "reference": "e94c8b1bbe2bc77507a1056cdb06451c75b427f9"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/e3d826245268269cd66f8326bd8bc066687b4a19",
-                "reference": "e3d826245268269cd66f8326bd8bc066687b4a19",
+                "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/e94c8b1bbe2bc77507a1056cdb06451c75b427f9",
+                "reference": "e94c8b1bbe2bc77507a1056cdb06451c75b427f9",
                 "shasum": ""
             },
             "require": {
@@ -3451,7 +3500,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.9-dev"
+                    "dev-master": "1.17-dev"
                 }
             },
             "autoload": {
@@ -3467,13 +3516,13 @@
                 "MIT"
             ],
             "authors": [
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                },
                 {
                     "name": "Gert de Pagter",
                     "email": "BackEndTea@gmail.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
                 }
             ],
             "description": "Symfony polyfill for ctype functions",
@@ -3484,20 +3533,82 @@
                 "polyfill",
                 "portable"
             ],
-            "time": "2018-08-06T14:22:27+00:00"
+            "time": "2020-05-12T16:14:59+00:00"
+        },
+        {
+            "name": "symfony/polyfill-intl-idn",
+            "version": "v1.17.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-intl-idn.git",
+                "reference": "3bff59ea7047e925be6b7f2059d60af31bb46d6a"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/3bff59ea7047e925be6b7f2059d60af31bb46d6a",
+                "reference": "3bff59ea7047e925be6b7f2059d60af31bb46d6a",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3",
+                "symfony/polyfill-mbstring": "^1.3",
+                "symfony/polyfill-php72": "^1.10"
+            },
+            "suggest": {
+                "ext-intl": "For best performance"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.17-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Polyfill\\Intl\\Idn\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Laurent Bassin",
+                    "email": "laurent@bassin.info"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "idn",
+                "intl",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
+            "time": "2020-05-12T16:47:27+00:00"
         },
         {
             "name": "symfony/polyfill-mbstring",
-            "version": "v1.10.0",
+            "version": "v1.17.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-mbstring.git",
-                "reference": "c79c051f5b3a46be09205c73b80b346e4153e494"
+                "reference": "fa79b11539418b02fc5e1897267673ba2c19419c"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/c79c051f5b3a46be09205c73b80b346e4153e494",
-                "reference": "c79c051f5b3a46be09205c73b80b346e4153e494",
+                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fa79b11539418b02fc5e1897267673ba2c19419c",
+                "reference": "fa79b11539418b02fc5e1897267673ba2c19419c",
                 "shasum": ""
             },
             "require": {
@@ -3509,7 +3620,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.9-dev"
+                    "dev-master": "1.17-dev"
                 }
             },
             "autoload": {
@@ -3543,20 +3654,75 @@
                 "portable",
                 "shim"
             ],
-            "time": "2018-09-21T13:07:52+00:00"
+            "time": "2020-05-12T16:47:27+00:00"
+        },
+        {
+            "name": "symfony/polyfill-php72",
+            "version": "v1.17.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-php72.git",
+                "reference": "f048e612a3905f34931127360bdd2def19a5e582"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/f048e612a3905f34931127360bdd2def19a5e582",
+                "reference": "f048e612a3905f34931127360bdd2def19a5e582",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.17-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Polyfill\\Php72\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
+            "time": "2020-05-12T16:47:27+00:00"
         },
         {
             "name": "symfony/process",
-            "version": "v3.4.23",
+            "version": "v3.4.40",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/process.git",
-                "reference": "009f8dda80930e89e8344a4e310b08f9ff07dd2e"
+                "reference": "f5104c9dcbc2cfad45d01d5150c1da9836967271"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/process/zipball/009f8dda80930e89e8344a4e310b08f9ff07dd2e",
-                "reference": "009f8dda80930e89e8344a4e310b08f9ff07dd2e",
+                "url": "https://api.github.com/repos/symfony/process/zipball/f5104c9dcbc2cfad45d01d5150c1da9836967271",
+                "reference": "f5104c9dcbc2cfad45d01d5150c1da9836967271",
                 "shasum": ""
             },
             "require": {
@@ -3592,20 +3758,20 @@
             ],
             "description": "Symfony Process Component",
             "homepage": "https://symfony.com",
-            "time": "2019-01-16T13:27:11+00:00"
+            "time": "2020-04-12T14:33:46+00:00"
         },
         {
             "name": "symfony/yaml",
-            "version": "v3.4.23",
+            "version": "v3.4.40",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/yaml.git",
-                "reference": "57f1ce82c997f5a8701b89ef970e36bb657fd09c"
+                "reference": "8fef49ac1357f4e05c997a1f139467ccb186bffa"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/yaml/zipball/57f1ce82c997f5a8701b89ef970e36bb657fd09c",
-                "reference": "57f1ce82c997f5a8701b89ef970e36bb657fd09c",
+                "url": "https://api.github.com/repos/symfony/yaml/zipball/8fef49ac1357f4e05c997a1f139467ccb186bffa",
+                "reference": "8fef49ac1357f4e05c997a1f139467ccb186bffa",
                 "shasum": ""
             },
             "require": {
@@ -3651,36 +3817,33 @@
             ],
             "description": "Symfony Yaml Component",
             "homepage": "https://symfony.com",
-            "time": "2019-02-23T15:06:07+00:00"
+            "time": "2020-04-24T10:16:04+00:00"
         },
         {
             "name": "webmozart/assert",
-            "version": "1.4.0",
+            "version": "1.8.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/webmozart/assert.git",
-                "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9"
+                "reference": "ab2cb0b3b559010b75981b1bdce728da3ee90ad6"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/webmozart/assert/zipball/83e253c8e0be5b0257b881e1827274667c5c17a9",
-                "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9",
+                "url": "https://api.github.com/repos/webmozart/assert/zipball/ab2cb0b3b559010b75981b1bdce728da3ee90ad6",
+                "reference": "ab2cb0b3b559010b75981b1bdce728da3ee90ad6",
                 "shasum": ""
             },
             "require": {
                 "php": "^5.3.3 || ^7.0",
                 "symfony/polyfill-ctype": "^1.8"
             },
+            "conflict": {
+                "vimeo/psalm": "<3.9.1"
+            },
             "require-dev": {
-                "phpunit/phpunit": "^4.6",
-                "sebastian/version": "^1.0.1"
+                "phpunit/phpunit": "^4.8.36 || ^7.5.13"
             },
             "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.3-dev"
-                }
-            },
             "autoload": {
                 "psr-4": {
                     "Webmozart\\Assert\\": "src/"
@@ -3702,7 +3865,7 @@
                 "check",
                 "validate"
             ],
-            "time": "2018-12-25T11:19:39+00:00"
+            "time": "2020-04-18T12:12:48+00:00"
         }
     ],
     "aliases": [],
diff --git a/vendor/consolidation/site-alias/.travis.yml b/vendor/consolidation/site-alias/.travis.yml
index d9203d63e100ffc48ce7d8d1c435a271d813194f..597af7fa3a4dc0183e97e7e7fa27412c3d315c36 100644
--- a/vendor/consolidation/site-alias/.travis.yml
+++ b/vendor/consolidation/site-alias/.travis.yml
@@ -7,11 +7,15 @@ branches:
 matrix:
   fast_finish: true
   include:
-  - php: 7.2
+  - php: 7.4
     env: DEPENCENCIES=highest
+  - php: 7.4
+  - php: 7.3
   - php: 7.2
   - php: 7.1
+    env: SCENARIO=phpunit5
   - php: 7.0.11
+    env: SCENARIO=phpunit5
   - php: 5.6
     env: SCENARIO=phpunit5
   - php: 5.6
diff --git a/vendor/consolidation/site-alias/CHANGELOG.md b/vendor/consolidation/site-alias/CHANGELOG.md
index 66203faddfcfd5c602ea8983f16aa5efc6e52cf6..bffb89ef06ab62cbd48f3228f354b7e55b865a0a 100644
--- a/vendor/consolidation/site-alias/CHANGELOG.md
+++ b/vendor/consolidation/site-alias/CHANGELOG.md
@@ -1,5 +1,10 @@
 # Changelog
 
+### 3.0.1 2020-05-27
+
+* Symfony 5 support
+* Remove 'experimental' designation from wildcard environments.
+
 ### 3.0.0 2019-03-12
 
 * Make self.site.yml more discoverable. (#33)
diff --git a/vendor/consolidation/site-alias/LICENSE b/vendor/consolidation/site-alias/LICENSE
index 3565b38f750951640ebeef5ce6437adca9a99c3b..a342cabe789cd79a5607570c3f9f9937f5b67858 100644
--- a/vendor/consolidation/site-alias/LICENSE
+++ b/vendor/consolidation/site-alias/LICENSE
@@ -1,6 +1,6 @@
 The MIT License (MIT)
 
-Copyright (c) 2018-2019 Greg Anderson
+Copyright (c) 2018-2020 Greg Anderson
 
 Permission is hereby granted, free of charge, to any person obtaining a copy of
 this software and associated documentation files (the "Software"), to deal in
diff --git a/vendor/consolidation/site-alias/README.md b/vendor/consolidation/site-alias/README.md
index 55dee4d287fce54cdd47919e700719dcc28a6faa..c5ce14c63d8636c2f0e3aa87878c7a0320ea3b51 100644
--- a/vendor/consolidation/site-alias/README.md
+++ b/vendor/consolidation/site-alias/README.md
@@ -63,7 +63,7 @@ dev:
   user: www-data
 ```
 
-### Wildcard environments (Experimental)
+### Wildcard environments
 
 It is also possible to define "wildcard" environments that will match any provided environment name. This is only possible to do in instances where the contents of the wildcard aliases are all the same, except for places where the environment name appears. To substitute the name of the environment into a wildcard domain, use the variable replacement string `${env-name}`. For example, a wildcard alias that will match any multisite in a Drupal site might look something like the following example:
 ```
diff --git a/vendor/consolidation/site-alias/VERSION b/vendor/consolidation/site-alias/VERSION
index 56fea8a08d2faa60fec80b40241566d3c39744f7..13d683ccbfeed4ecf19a8f76e016a4e0296ea4cf 100644
--- a/vendor/consolidation/site-alias/VERSION
+++ b/vendor/consolidation/site-alias/VERSION
@@ -1 +1 @@
-3.0.0
\ No newline at end of file
+3.0.1
\ No newline at end of file
diff --git a/vendor/consolidation/site-alias/appveyor.yml b/vendor/consolidation/site-alias/appveyor.yml
index 0483b24f866e90f2f543a725c5e21513134c3032..65a69cc66dfb5c4eecdddcf6ee2951fd828ed59f 100644
--- a/vendor/consolidation/site-alias/appveyor.yml
+++ b/vendor/consolidation/site-alias/appveyor.yml
@@ -26,7 +26,7 @@ install:
   - SET PATH=C:\Program Files\MySql\MySQL Server 5.7\bin\;%PATH%
   #Install PHP per https://blog.wyrihaximus.net/2016/11/running-php-unit-tests-on-windows-using-appveyor-and-chocolatey/
   - ps: appveyor-retry cinst --ignore-checksums -y php --version ((choco search php --exact --all-versions -r | select-string -pattern $Env:php_ver_target | Select-Object -first 1) -replace '[php|]','')
-  - cd c:\tools\php70
+  - cd c:\tools\php74
   - copy php.ini-production php.ini
 
   - echo extension_dir=ext >> php.ini
@@ -43,7 +43,7 @@ install:
   - echo extension=php_pdo_sqlite.dll >> php.ini
   - echo extension=php_pgsql.dll >> php.ini
   - echo extension=php_gd2.dll >> php.ini
-  - SET PATH=C:\tools\php70;%PATH%
+  - SET PATH=C:\tools\php74;%PATH%
   #Install Composer
   - cd %APPVEYOR_BUILD_FOLDER%
   #- appveyor DownloadFile https://getcomposer.org/composer.phar
@@ -60,4 +60,4 @@ test_script:
 # environment variables
 environment:
   global:
-      php_ver_target: 7.0
+      php_ver_target: 7.4
diff --git a/vendor/consolidation/site-alias/composer.json b/vendor/consolidation/site-alias/composer.json
index f06b866ada10d6e7ed9423d84f3b0d14817e8df5..6f07d171ab88dfd2b5aa56e318d94de199f22df7 100644
--- a/vendor/consolidation/site-alias/composer.json
+++ b/vendor/consolidation/site-alias/composer.json
@@ -24,17 +24,16 @@
     },
     "require": {
         "php": ">=5.5.0",
-        "consolidation/config": "^1.2.1"
+        "consolidation/config": "^1.2.1|^2"
     },
     "require-dev": {
-        "symfony/yaml": "~2.3|^3",
-        "consolidation/Robo": "^1.2.3",
-        "symfony/console": "^2.8|^3|^4",
+        "symfony/yaml": "~2.3|^3|^4.4|^5",
+        "consolidation/robo": "^1.2.3|^2",
         "knplabs/github-api": "^2.7",
         "php-http/guzzle6-adapter": "^1.1",
         "phpunit/phpunit": "^6",
         "g1a/composer-test-scenarios": "^3",
-        "php-coveralls/php-coveralls": "^1",
+        "php-coveralls/php-coveralls": "^2.2",
         "squizlabs/php_codesniffer": "^2.8"
     },
     "scripts": {
@@ -63,7 +62,7 @@
         "optimize-autoloader": true,
         "sort-packages": true,
         "platform": {
-            "php": "7.0.8"
+            "php": "7.2.28"
         }
     },
     "extra": {
diff --git a/vendor/consolidation/site-alias/composer.lock b/vendor/consolidation/site-alias/composer.lock
index a890357107693b17c07f320d1504841f82012c87..dcd2243d4d38f5c50931513cc915b25f2e83c49d 100644
--- a/vendor/consolidation/site-alias/composer.lock
+++ b/vendor/consolidation/site-alias/composer.lock
@@ -4,34 +4,35 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "This file is @generated automatically"
     ],
-    "content-hash": "a8b7be6cbb24c26532b63db0ae0c3e39",
+    "content-hash": "644a67af42ce50b3a579fd1ac507163e",
     "packages": [
         {
             "name": "consolidation/config",
-            "version": "1.2.1",
+            "version": "2.0.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/consolidation/config.git",
-                "reference": "cac1279bae7efb5c7fb2ca4c3ba4b8eb741a96c1"
+                "reference": "9842670aad3406dbc8df3069fd680a9f8cd6edd7"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/consolidation/config/zipball/cac1279bae7efb5c7fb2ca4c3ba4b8eb741a96c1",
-                "reference": "cac1279bae7efb5c7fb2ca4c3ba4b8eb741a96c1",
+                "url": "https://api.github.com/repos/consolidation/config/zipball/9842670aad3406dbc8df3069fd680a9f8cd6edd7",
+                "reference": "9842670aad3406dbc8df3069fd680a9f8cd6edd7",
                 "shasum": ""
             },
             "require": {
                 "dflydev/dot-access-data": "^1.1.0",
                 "grasmash/expander": "^1",
-                "php": ">=5.4.0"
+                "php": ">=7.1.3"
             },
             "require-dev": {
                 "g1a/composer-test-scenarios": "^3",
-                "php-coveralls/php-coveralls": "^1",
-                "phpunit/phpunit": "^5",
-                "squizlabs/php_codesniffer": "2.*",
-                "symfony/console": "^2.5|^3|^4",
-                "symfony/yaml": "^2.8.11|^3|^4"
+                "php-coveralls/php-coveralls": "^2.2",
+                "phpunit/phpunit": "^6",
+                "squizlabs/php_codesniffer": "^3",
+                "symfony/console": "^4|^5",
+                "symfony/event-dispatcher": "^4|^5",
+                "symfony/yaml": "^4|^5"
             },
             "suggest": {
                 "symfony/yaml": "Required to use Consolidation\\Config\\Loader\\YamlConfigLoader"
@@ -41,32 +42,17 @@
                 "scenarios": {
                     "symfony4": {
                         "require-dev": {
-                            "symfony/console": "^4.0"
+                            "symfony/console": "^4"
                         },
                         "config": {
                             "platform": {
                                 "php": "7.1.3"
                             }
                         }
-                    },
-                    "symfony2": {
-                        "require-dev": {
-                            "symfony/console": "^2.8",
-                            "symfony/event-dispatcher": "^2.8",
-                            "phpunit/phpunit": "^4.8.36"
-                        },
-                        "remove": [
-                            "php-coveralls/php-coveralls"
-                        ],
-                        "config": {
-                            "platform": {
-                                "php": "5.4.8"
-                            }
-                        }
                     }
                 },
                 "branch-alias": {
-                    "dev-master": "1.x-dev"
+                    "dev-master": "2.x-dev"
                 }
             },
             "autoload": {
@@ -85,7 +71,7 @@
                 }
             ],
             "description": "Provide configuration services for a commandline tool.",
-            "time": "2019-03-03T19:37:04+00:00"
+            "time": "2020-05-27T17:11:23+00:00"
         },
         {
             "name": "dflydev/dot-access-data",
@@ -197,16 +183,16 @@
     "packages-dev": [
         {
             "name": "clue/stream-filter",
-            "version": "v1.4.0",
+            "version": "v1.4.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/clue/php-stream-filter.git",
-                "reference": "d80fdee9b3a7e0d16fc330a22f41f3ad0eeb09d0"
+                "reference": "5a58cc30a8bd6a4eb8f856adf61dd3e013f53f71"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/clue/php-stream-filter/zipball/d80fdee9b3a7e0d16fc330a22f41f3ad0eeb09d0",
-                "reference": "d80fdee9b3a7e0d16fc330a22f41f3ad0eeb09d0",
+                "url": "https://api.github.com/repos/clue/php-stream-filter/zipball/5a58cc30a8bd6a4eb8f856adf61dd3e013f53f71",
+                "reference": "5a58cc30a8bd6a4eb8f856adf61dd3e013f53f71",
                 "shasum": ""
             },
             "require": {
@@ -221,7 +207,7 @@
                     "Clue\\StreamFilter\\": "src/"
                 },
                 "files": [
-                    "src/functions.php"
+                    "src/functions_include.php"
                 ]
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -245,35 +231,35 @@
                 "stream_filter_append",
                 "stream_filter_register"
             ],
-            "time": "2017-08-18T09:54:01+00:00"
+            "time": "2019-04-09T12:31:48+00:00"
         },
         {
             "name": "consolidation/annotated-command",
-            "version": "2.12.0",
+            "version": "4.1.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/consolidation/annotated-command.git",
-                "reference": "512a2e54c98f3af377589de76c43b24652bcb789"
+                "reference": "efc58dc0f34a45539787c5190b41b5d2a50a08da"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/consolidation/annotated-command/zipball/512a2e54c98f3af377589de76c43b24652bcb789",
-                "reference": "512a2e54c98f3af377589de76c43b24652bcb789",
+                "url": "https://api.github.com/repos/consolidation/annotated-command/zipball/efc58dc0f34a45539787c5190b41b5d2a50a08da",
+                "reference": "efc58dc0f34a45539787c5190b41b5d2a50a08da",
                 "shasum": ""
             },
             "require": {
-                "consolidation/output-formatters": "^3.4",
-                "php": ">=5.4.5",
-                "psr/log": "^1",
-                "symfony/console": "^2.8|^3|^4",
-                "symfony/event-dispatcher": "^2.5|^3|^4",
-                "symfony/finder": "^2.5|^3|^4"
+                "consolidation/output-formatters": "^4.1.1",
+                "php": ">=7.1.3",
+                "psr/log": "^1|^2",
+                "symfony/console": "^4.4.8|^5",
+                "symfony/event-dispatcher": "^4.4.8|^5",
+                "symfony/finder": "^4.4.8|^5"
             },
             "require-dev": {
                 "g1a/composer-test-scenarios": "^3",
-                "php-coveralls/php-coveralls": "^1",
+                "php-coveralls/php-coveralls": "^2.2",
                 "phpunit/phpunit": "^6",
-                "squizlabs/php_codesniffer": "^2.7"
+                "squizlabs/php_codesniffer": "^3"
             },
             "type": "library",
             "extra": {
@@ -287,42 +273,10 @@
                                 "php": "7.1.3"
                             }
                         }
-                    },
-                    "symfony2": {
-                        "require": {
-                            "symfony/console": "^2.8"
-                        },
-                        "require-dev": {
-                            "phpunit/phpunit": "^4.8.36"
-                        },
-                        "remove": [
-                            "php-coveralls/php-coveralls"
-                        ],
-                        "config": {
-                            "platform": {
-                                "php": "5.4.8"
-                            }
-                        },
-                        "scenario-options": {
-                            "create-lockfile": "false"
-                        }
-                    },
-                    "phpunit4": {
-                        "require-dev": {
-                            "phpunit/phpunit": "^4.8.36"
-                        },
-                        "remove": [
-                            "php-coveralls/php-coveralls"
-                        ],
-                        "config": {
-                            "platform": {
-                                "php": "5.4.8"
-                            }
-                        }
                     }
                 },
                 "branch-alias": {
-                    "dev-master": "2.x-dev"
+                    "dev-master": "4.x-dev"
                 }
             },
             "autoload": {
@@ -341,78 +295,49 @@
                 }
             ],
             "description": "Initialize Symfony Console commands from annotated command class methods.",
-            "time": "2019-03-08T16:55:03+00:00"
+            "time": "2020-05-27T21:11:36+00:00"
         },
         {
             "name": "consolidation/log",
-            "version": "1.1.1",
+            "version": "2.0.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/consolidation/log.git",
-                "reference": "b2e887325ee90abc96b0a8b7b474cd9e7c896e3a"
+                "reference": "ba0bf6af1fbd09ed4dc18fc2f27b12ceff487cbf"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/consolidation/log/zipball/b2e887325ee90abc96b0a8b7b474cd9e7c896e3a",
-                "reference": "b2e887325ee90abc96b0a8b7b474cd9e7c896e3a",
+                "url": "https://api.github.com/repos/consolidation/log/zipball/ba0bf6af1fbd09ed4dc18fc2f27b12ceff487cbf",
+                "reference": "ba0bf6af1fbd09ed4dc18fc2f27b12ceff487cbf",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.4.5",
+                "php": ">=7.1.3",
                 "psr/log": "^1.0",
-                "symfony/console": "^2.8|^3|^4"
+                "symfony/console": "^4|^5"
             },
             "require-dev": {
                 "g1a/composer-test-scenarios": "^3",
-                "php-coveralls/php-coveralls": "^1",
+                "php-coveralls/php-coveralls": "^2.2",
                 "phpunit/phpunit": "^6",
-                "squizlabs/php_codesniffer": "^2"
+                "squizlabs/php_codesniffer": "^3"
             },
             "type": "library",
             "extra": {
                 "scenarios": {
                     "symfony4": {
-                        "require": {
-                            "symfony/console": "^4.0"
-                        },
-                        "config": {
-                            "platform": {
-                                "php": "7.1.3"
-                            }
-                        }
-                    },
-                    "symfony2": {
-                        "require": {
-                            "symfony/console": "^2.8"
-                        },
-                        "require-dev": {
-                            "phpunit/phpunit": "^4.8.36"
-                        },
-                        "remove": [
-                            "php-coveralls/php-coveralls"
-                        ],
-                        "config": {
-                            "platform": {
-                                "php": "5.4.8"
-                            }
-                        }
-                    },
-                    "phpunit4": {
                         "require-dev": {
-                            "phpunit/phpunit": "^4.8.36"
+                            "symfony/console": "^4"
                         },
-                        "remove": [
-                            "php-coveralls/php-coveralls"
-                        ],
                         "config": {
                             "platform": {
-                                "php": "5.4.8"
+                                "php": "7.1.3"
                             }
                         }
                     }
                 },
                 "branch-alias": {
-                    "dev-master": "1.x-dev"
+                    "dev-master": "2.x-dev"
                 }
             },
             "autoload": {
@@ -431,44 +356,55 @@
                 }
             ],
             "description": "Improved Psr-3 / Psr\\Log logger based on Symfony Console components.",
-            "time": "2019-01-01T17:30:51+00:00"
+            "time": "2020-05-27T17:06:13+00:00"
         },
         {
             "name": "consolidation/output-formatters",
-            "version": "3.4.0",
+            "version": "4.1.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/consolidation/output-formatters.git",
-                "reference": "a942680232094c4a5b21c0b7e54c20cce623ae19"
+                "reference": "9deeddd6a916d0a756b216a8b40ce1016e17c0b9"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/consolidation/output-formatters/zipball/a942680232094c4a5b21c0b7e54c20cce623ae19",
-                "reference": "a942680232094c4a5b21c0b7e54c20cce623ae19",
+                "url": "https://api.github.com/repos/consolidation/output-formatters/zipball/9deeddd6a916d0a756b216a8b40ce1016e17c0b9",
+                "reference": "9deeddd6a916d0a756b216a8b40ce1016e17c0b9",
                 "shasum": ""
             },
             "require": {
                 "dflydev/dot-access-data": "^1.1.0",
-                "php": ">=5.4.0",
-                "symfony/console": "^2.8|^3|^4",
-                "symfony/finder": "^2.5|^3|^4"
+                "php": ">=7.1.3",
+                "symfony/console": "^4|^5",
+                "symfony/finder": "^4|^5"
             },
             "require-dev": {
-                "g1a/composer-test-scenarios": "^2",
-                "phpunit/phpunit": "^5.7.27",
-                "satooshi/php-coveralls": "^2",
-                "squizlabs/php_codesniffer": "^2.7",
-                "symfony/console": "3.2.3",
-                "symfony/var-dumper": "^2.8|^3|^4",
-                "victorjonsson/markdowndocs": "^1.3"
+                "g1a/composer-test-scenarios": "^3",
+                "php-coveralls/php-coveralls": "^2.2",
+                "phpunit/phpunit": "^6",
+                "squizlabs/php_codesniffer": "^3",
+                "symfony/var-dumper": "^4",
+                "symfony/yaml": "^4"
             },
             "suggest": {
                 "symfony/var-dumper": "For using the var_dump formatter"
             },
             "type": "library",
             "extra": {
+                "scenarios": {
+                    "symfony4": {
+                        "require": {
+                            "symfony/console": "^4.0"
+                        },
+                        "config": {
+                            "platform": {
+                                "php": "7.1.3"
+                            }
+                        }
+                    }
+                },
                 "branch-alias": {
-                    "dev-master": "3.x-dev"
+                    "dev-master": "4.x-dev"
                 }
             },
             "autoload": {
@@ -487,58 +423,53 @@
                 }
             ],
             "description": "Format text by applying transformations provided by plug-in formatters.",
-            "time": "2018-10-19T22:35:38+00:00"
+            "time": "2020-05-27T20:51:17+00:00"
         },
         {
             "name": "consolidation/robo",
-            "version": "1.4.6",
+            "version": "2.1.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/consolidation/Robo.git",
-                "reference": "d4805a1abbc730e9a6d64ede2eba56f91a2b4eb3"
+                "reference": "a0415a2663f6d9426d3cb9013446d3f00225d76d"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/consolidation/Robo/zipball/d4805a1abbc730e9a6d64ede2eba56f91a2b4eb3",
-                "reference": "d4805a1abbc730e9a6d64ede2eba56f91a2b4eb3",
+                "url": "https://api.github.com/repos/consolidation/Robo/zipball/a0415a2663f6d9426d3cb9013446d3f00225d76d",
+                "reference": "a0415a2663f6d9426d3cb9013446d3f00225d76d",
                 "shasum": ""
             },
             "require": {
-                "consolidation/annotated-command": "^2.10.2",
-                "consolidation/config": "^1.0.10",
-                "consolidation/log": "~1",
-                "consolidation/output-formatters": "^3.1.13",
-                "consolidation/self-update": "^1",
-                "grasmash/yaml-expander": "^1.3",
-                "league/container": "^2.2",
-                "php": ">=5.5.0",
-                "symfony/console": "^2.8|^3|^4",
-                "symfony/event-dispatcher": "^2.5|^3|^4",
-                "symfony/filesystem": "^2.5|^3|^4",
-                "symfony/finder": "^2.5|^3|^4",
-                "symfony/process": "^2.5|^3|^4"
+                "consolidation/annotated-command": "^4.1.1",
+                "consolidation/config": "^1.2.1|^2",
+                "consolidation/log": "^1.1.1|^2.0.1",
+                "consolidation/output-formatters": "^4.1.1",
+                "consolidation/self-update": "^1.2",
+                "grasmash/yaml-expander": "^1.4",
+                "league/container": "^2.4.1",
+                "php": ">=7.1.3",
+                "symfony/console": "^4.4.8|^5",
+                "symfony/event-dispatcher": "^4.4.8|^5",
+                "symfony/filesystem": "^4.4.8|^5",
+                "symfony/finder": "^4.4.8|^5",
+                "symfony/process": "^4.4.8|^5"
             },
-            "replace": {
-                "codegyre/robo": "< 1.0"
+            "conflict": {
+                "codegyre/robo": "*"
             },
             "require-dev": {
-                "codeception/aspect-mock": "^1|^2.1.1",
-                "codeception/base": "^2.3.7",
-                "codeception/verify": "^0.3.2",
                 "g1a/composer-test-scenarios": "^3",
-                "goaop/framework": "~2.1.2",
-                "goaop/parser-reflection": "^1.1.0",
                 "natxet/cssmin": "3.0.4",
-                "nikic/php-parser": "^3.1.5",
-                "patchwork/jsqueeze": "~2",
+                "patchwork/jsqueeze": "^2",
                 "pear/archive_tar": "^1.4.4",
-                "php-coveralls/php-coveralls": "^1",
-                "phpunit/php-code-coverage": "~2|~4",
-                "squizlabs/php_codesniffer": "^2.8"
+                "php-coveralls/php-coveralls": "^2.2",
+                "phpdocumentor/reflection-docblock": "^4.3.2",
+                "phpunit/phpunit": "^6.5.14",
+                "squizlabs/php_codesniffer": "^3"
             },
             "suggest": {
                 "henrikbjorn/lurker": "For monitoring filesystem changes in taskWatch",
-                "natxet/CssMin": "For minifying CSS files in taskMinify",
+                "natxet/cssmin": "For minifying CSS files in taskMinify",
                 "patchwork/jsqueeze": "For minifying JS files in taskMinify",
                 "pear/archive_tar": "Allows tar archives to be created and extracted in taskPack and taskExtract, respectively."
             },
@@ -550,28 +481,21 @@
                 "scenarios": {
                     "symfony4": {
                         "require": {
-                            "symfony/console": "^4"
-                        },
-                        "config": {
-                            "platform": {
-                                "php": "7.1.3"
-                            }
-                        }
-                    },
-                    "symfony2": {
-                        "require": {
-                            "symfony/console": "^2.8"
+                            "symfony/console": "^4.4.8",
+                            "symfony/event-dispatcher": "^4.4.8",
+                            "symfony/filesystem": "^4.4.8",
+                            "symfony/finder": "^4.4.8",
+                            "symfony/process": "^4.4.8",
+                            "phpunit/phpunit": "^6",
+                            "nikic/php-parser": "^2"
                         },
                         "remove": [
-                            "goaop/framework"
+                            "codeception/phpunit-wrapper"
                         ],
                         "config": {
                             "platform": {
-                                "php": "5.5.9"
+                                "php": "7.1.3"
                             }
-                        },
-                        "scenario-options": {
-                            "create-lockfile": "false"
                         }
                     }
                 },
@@ -595,26 +519,26 @@
                 }
             ],
             "description": "Modern task runner",
-            "time": "2019-02-17T05:32:27+00:00"
+            "time": "2020-05-27T22:03:57+00:00"
         },
         {
             "name": "consolidation/self-update",
-            "version": "1.1.5",
+            "version": "1.2.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/consolidation/self-update.git",
-                "reference": "a1c273b14ce334789825a09d06d4c87c0a02ad54"
+                "reference": "dba6b2c0708f20fa3ba8008a2353b637578849b4"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/consolidation/self-update/zipball/a1c273b14ce334789825a09d06d4c87c0a02ad54",
-                "reference": "a1c273b14ce334789825a09d06d4c87c0a02ad54",
+                "url": "https://api.github.com/repos/consolidation/self-update/zipball/dba6b2c0708f20fa3ba8008a2353b637578849b4",
+                "reference": "dba6b2c0708f20fa3ba8008a2353b637578849b4",
                 "shasum": ""
             },
             "require": {
                 "php": ">=5.5.0",
-                "symfony/console": "^2.8|^3|^4",
-                "symfony/filesystem": "^2.5|^3|^4"
+                "symfony/console": "^2.8|^3|^4|^5",
+                "symfony/filesystem": "^2.5|^3|^4|^5"
             },
             "bin": [
                 "scripts/release"
@@ -635,17 +559,17 @@
                 "MIT"
             ],
             "authors": [
-                {
-                    "name": "Greg Anderson",
-                    "email": "greg.1.anderson@greenknowe.org"
-                },
                 {
                     "name": "Alexander Menk",
                     "email": "menk@mestrona.net"
+                },
+                {
+                    "name": "Greg Anderson",
+                    "email": "greg.1.anderson@greenknowe.org"
                 }
             ],
             "description": "Provides a self:update command for Symfony Console applications.",
-            "time": "2018-10-28T01:52:03+00:00"
+            "time": "2020-04-13T02:49:20+00:00"
         },
         {
             "name": "container-interop/container-interop",
@@ -676,36 +600,39 @@
             ],
             "description": "Promoting the interoperability of container objects (DIC, SL, etc.)",
             "homepage": "https://github.com/container-interop/container-interop",
+            "abandoned": "psr/container",
             "time": "2017-02-14T19:40:03+00:00"
         },
         {
             "name": "doctrine/instantiator",
-            "version": "1.0.5",
+            "version": "1.3.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/doctrine/instantiator.git",
-                "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d"
+                "reference": "ae466f726242e637cebdd526a7d991b9433bacf1"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d",
-                "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d",
+                "url": "https://api.github.com/repos/doctrine/instantiator/zipball/ae466f726242e637cebdd526a7d991b9433bacf1",
+                "reference": "ae466f726242e637cebdd526a7d991b9433bacf1",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3,<8.0-DEV"
+                "php": "^7.1"
             },
             "require-dev": {
-                "athletic/athletic": "~0.1.8",
+                "doctrine/coding-standard": "^6.0",
                 "ext-pdo": "*",
                 "ext-phar": "*",
-                "phpunit/phpunit": "~4.0",
-                "squizlabs/php_codesniffer": "~2.0"
+                "phpbench/phpbench": "^0.13",
+                "phpstan/phpstan-phpunit": "^0.11",
+                "phpstan/phpstan-shim": "^0.11",
+                "phpunit/phpunit": "^7.0"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.0.x-dev"
+                    "dev-master": "1.2.x-dev"
                 }
             },
             "autoload": {
@@ -725,25 +652,25 @@
                 }
             ],
             "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
-            "homepage": "https://github.com/doctrine/instantiator",
+            "homepage": "https://www.doctrine-project.org/projects/instantiator.html",
             "keywords": [
                 "constructor",
                 "instantiate"
             ],
-            "time": "2015-06-14T21:17:01+00:00"
+            "time": "2019-10-21T16:45:58+00:00"
         },
         {
             "name": "g1a/composer-test-scenarios",
-            "version": "3.0.2",
+            "version": "3.0.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/g1a/composer-test-scenarios.git",
-                "reference": "28f932580981e912ab8f01d15788f1dee06550c8"
+                "reference": "78225430d4a5caf8e06b87d04149f8a9ace9368c"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/g1a/composer-test-scenarios/zipball/28f932580981e912ab8f01d15788f1dee06550c8",
-                "reference": "28f932580981e912ab8f01d15788f1dee06550c8",
+                "url": "https://api.github.com/repos/g1a/composer-test-scenarios/zipball/78225430d4a5caf8e06b87d04149f8a9ace9368c",
+                "reference": "78225430d4a5caf8e06b87d04149f8a9ace9368c",
                 "shasum": ""
             },
             "require": {
@@ -782,7 +709,7 @@
                 }
             ],
             "description": "Useful scripts for testing multiple sets of Composer dependencies.",
-            "time": "2019-02-11T20:22:44+00:00"
+            "time": "2019-09-13T01:24:52+00:00"
         },
         {
             "name": "grasmash/yaml-expander",
@@ -832,122 +759,31 @@
             "description": "Expands internal property references in a yaml file.",
             "time": "2017-12-16T16:06:03+00:00"
         },
-        {
-            "name": "guzzle/guzzle",
-            "version": "v3.8.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/guzzle/guzzle.git",
-                "reference": "4de0618a01b34aa1c8c33a3f13f396dcd3882eba"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/guzzle/guzzle/zipball/4de0618a01b34aa1c8c33a3f13f396dcd3882eba",
-                "reference": "4de0618a01b34aa1c8c33a3f13f396dcd3882eba",
-                "shasum": ""
-            },
-            "require": {
-                "ext-curl": "*",
-                "php": ">=5.3.3",
-                "symfony/event-dispatcher": ">=2.1"
-            },
-            "replace": {
-                "guzzle/batch": "self.version",
-                "guzzle/cache": "self.version",
-                "guzzle/common": "self.version",
-                "guzzle/http": "self.version",
-                "guzzle/inflection": "self.version",
-                "guzzle/iterator": "self.version",
-                "guzzle/log": "self.version",
-                "guzzle/parser": "self.version",
-                "guzzle/plugin": "self.version",
-                "guzzle/plugin-async": "self.version",
-                "guzzle/plugin-backoff": "self.version",
-                "guzzle/plugin-cache": "self.version",
-                "guzzle/plugin-cookie": "self.version",
-                "guzzle/plugin-curlauth": "self.version",
-                "guzzle/plugin-error-response": "self.version",
-                "guzzle/plugin-history": "self.version",
-                "guzzle/plugin-log": "self.version",
-                "guzzle/plugin-md5": "self.version",
-                "guzzle/plugin-mock": "self.version",
-                "guzzle/plugin-oauth": "self.version",
-                "guzzle/service": "self.version",
-                "guzzle/stream": "self.version"
-            },
-            "require-dev": {
-                "doctrine/cache": "*",
-                "monolog/monolog": "1.*",
-                "phpunit/phpunit": "3.7.*",
-                "psr/log": "1.0.*",
-                "symfony/class-loader": "*",
-                "zendframework/zend-cache": "<2.3",
-                "zendframework/zend-log": "<2.3"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.8-dev"
-                }
-            },
-            "autoload": {
-                "psr-0": {
-                    "Guzzle": "src/",
-                    "Guzzle\\Tests": "tests/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Michael Dowling",
-                    "email": "mtdowling@gmail.com",
-                    "homepage": "https://github.com/mtdowling"
-                },
-                {
-                    "name": "Guzzle Community",
-                    "homepage": "https://github.com/guzzle/guzzle/contributors"
-                }
-            ],
-            "description": "Guzzle is a PHP HTTP client library and framework for building RESTful web service clients",
-            "homepage": "http://guzzlephp.org/",
-            "keywords": [
-                "client",
-                "curl",
-                "framework",
-                "http",
-                "http client",
-                "rest",
-                "web service"
-            ],
-            "abandoned": "guzzlehttp/guzzle",
-            "time": "2014-01-28T22:29:15+00:00"
-        },
         {
             "name": "guzzlehttp/guzzle",
-            "version": "6.3.3",
+            "version": "6.5.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/guzzle/guzzle.git",
-                "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba"
+                "reference": "a4a1b6930528a8f7ee03518e6442ec7a44155d9d"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/guzzle/guzzle/zipball/407b0cb880ace85c9b63c5f9551db498cb2d50ba",
-                "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba",
+                "url": "https://api.github.com/repos/guzzle/guzzle/zipball/a4a1b6930528a8f7ee03518e6442ec7a44155d9d",
+                "reference": "a4a1b6930528a8f7ee03518e6442ec7a44155d9d",
                 "shasum": ""
             },
             "require": {
+                "ext-json": "*",
                 "guzzlehttp/promises": "^1.0",
-                "guzzlehttp/psr7": "^1.4",
-                "php": ">=5.5"
+                "guzzlehttp/psr7": "^1.6.1",
+                "php": ">=5.5",
+                "symfony/polyfill-intl-idn": "1.17.0"
             },
             "require-dev": {
                 "ext-curl": "*",
                 "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0",
-                "psr/log": "^1.0"
+                "psr/log": "^1.1"
             },
             "suggest": {
                 "psr/log": "Required for using the Log middleware"
@@ -955,16 +791,16 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "6.3-dev"
+                    "dev-master": "6.5-dev"
                 }
             },
             "autoload": {
-                "files": [
-                    "src/functions_include.php"
-                ],
                 "psr-4": {
                     "GuzzleHttp\\": "src/"
-                }
+                },
+                "files": [
+                    "src/functions_include.php"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
@@ -988,7 +824,7 @@
                 "rest",
                 "web service"
             ],
-            "time": "2018-04-22T15:46:56+00:00"
+            "time": "2020-05-25T19:35:05+00:00"
         },
         {
             "name": "guzzlehttp/promises",
@@ -1043,33 +879,37 @@
         },
         {
             "name": "guzzlehttp/psr7",
-            "version": "1.5.2",
+            "version": "1.6.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/guzzle/psr7.git",
-                "reference": "9f83dded91781a01c63574e387eaa769be769115"
+                "reference": "239400de7a173fe9901b9ac7c06497751f00727a"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/guzzle/psr7/zipball/9f83dded91781a01c63574e387eaa769be769115",
-                "reference": "9f83dded91781a01c63574e387eaa769be769115",
+                "url": "https://api.github.com/repos/guzzle/psr7/zipball/239400de7a173fe9901b9ac7c06497751f00727a",
+                "reference": "239400de7a173fe9901b9ac7c06497751f00727a",
                 "shasum": ""
             },
             "require": {
                 "php": ">=5.4.0",
                 "psr/http-message": "~1.0",
-                "ralouphie/getallheaders": "^2.0.5"
+                "ralouphie/getallheaders": "^2.0.5 || ^3.0.0"
             },
             "provide": {
                 "psr/http-message-implementation": "1.0"
             },
             "require-dev": {
+                "ext-zlib": "*",
                 "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8"
             },
+            "suggest": {
+                "zendframework/zend-httphandlerrunner": "Emit PSR-7 responses"
+            },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.5-dev"
+                    "dev-master": "1.6-dev"
                 }
             },
             "autoload": {
@@ -1106,43 +946,43 @@
                 "uri",
                 "url"
             ],
-            "time": "2018-12-04T20:46:45+00:00"
+            "time": "2019-07-01T23:21:34+00:00"
         },
         {
             "name": "knplabs/github-api",
-            "version": "2.11.0",
+            "version": "v2.14.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/KnpLabs/php-github-api.git",
-                "reference": "7e67b4ccf9ef62fbd6321a314c61d3202c07b855"
+                "reference": "953c9b453d3258a97755ec3557d112f271176f74"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/KnpLabs/php-github-api/zipball/7e67b4ccf9ef62fbd6321a314c61d3202c07b855",
-                "reference": "7e67b4ccf9ef62fbd6321a314c61d3202c07b855",
+                "url": "https://api.github.com/repos/KnpLabs/php-github-api/zipball/953c9b453d3258a97755ec3557d112f271176f74",
+                "reference": "953c9b453d3258a97755ec3557d112f271176f74",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.6 || ^7.0",
+                "php": "^7.1",
                 "php-http/cache-plugin": "^1.4",
-                "php-http/client-common": "^1.6",
+                "php-http/client-common": "^1.6 || ^2.0",
                 "php-http/client-implementation": "^1.0",
                 "php-http/discovery": "^1.0",
-                "php-http/httplug": "^1.1",
+                "php-http/httplug": "^1.1 || ^2.0",
                 "psr/cache": "^1.0",
                 "psr/http-message": "^1.0"
             },
             "require-dev": {
                 "cache/array-adapter": "^0.4",
                 "guzzlehttp/psr7": "^1.2",
-                "php-http/guzzle6-adapter": "^1.0",
-                "php-http/mock-client": "^1.0",
-                "phpunit/phpunit": "^5.5 || ^6.0"
+                "php-http/guzzle6-adapter": "^1.0 || ^2.0",
+                "php-http/mock-client": "^1.2",
+                "phpunit/phpunit": "^7.0 || ^8.0"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.11.x-dev"
+                    "dev-master": "2.14.x-dev"
                 }
             },
             "autoload": {
@@ -1155,14 +995,14 @@
                 "MIT"
             ],
             "authors": [
+                {
+                    "name": "KnpLabs Team",
+                    "homepage": "http://knplabs.com"
+                },
                 {
                     "name": "Thibault Duplessis",
                     "email": "thibault.duplessis@gmail.com",
                     "homepage": "http://ornicar.github.com"
-                },
-                {
-                    "name": "KnpLabs Team",
-                    "homepage": "http://knplabs.com"
                 }
             ],
             "description": "GitHub API v3 client",
@@ -1173,7 +1013,7 @@
                 "gist",
                 "github"
             ],
-            "time": "2019-01-28T19:31:35+00:00"
+            "time": "2020-04-25T20:36:03+00:00"
         },
         {
             "name": "league/container",
@@ -1242,25 +1082,28 @@
         },
         {
             "name": "myclabs/deep-copy",
-            "version": "1.7.0",
+            "version": "1.9.5",
             "source": {
                 "type": "git",
                 "url": "https://github.com/myclabs/DeepCopy.git",
-                "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e"
+                "reference": "b2c28789e80a97badd14145fda39b545d83ca3ef"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e",
-                "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e",
+                "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/b2c28789e80a97badd14145fda39b545d83ca3ef",
+                "reference": "b2c28789e80a97badd14145fda39b545d83ca3ef",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.6 || ^7.0"
+                "php": "^7.1"
+            },
+            "replace": {
+                "myclabs/deep-copy": "self.version"
             },
             "require-dev": {
                 "doctrine/collections": "^1.0",
                 "doctrine/common": "^2.6",
-                "phpunit/phpunit": "^4.1"
+                "phpunit/phpunit": "^7.1"
             },
             "type": "library",
             "autoload": {
@@ -1283,7 +1126,7 @@
                 "object",
                 "object graph"
             ],
-            "time": "2017-10-19T19:58:43+00:00"
+            "time": "2020-01-17T21:11:47+00:00"
         },
         {
             "name": "phar-io/manifest",
@@ -1389,28 +1232,28 @@
         },
         {
             "name": "php-coveralls/php-coveralls",
-            "version": "v1.1.0",
+            "version": "v2.2.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/php-coveralls/php-coveralls.git",
-                "reference": "37f8f83fe22224eb9d9c6d593cdeb33eedd2a9ad"
+                "reference": "3e6420fa666ef7bae5e750ddeac903153e193bae"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/php-coveralls/php-coveralls/zipball/37f8f83fe22224eb9d9c6d593cdeb33eedd2a9ad",
-                "reference": "37f8f83fe22224eb9d9c6d593cdeb33eedd2a9ad",
+                "url": "https://api.github.com/repos/php-coveralls/php-coveralls/zipball/3e6420fa666ef7bae5e750ddeac903153e193bae",
+                "reference": "3e6420fa666ef7bae5e750ddeac903153e193bae",
                 "shasum": ""
             },
             "require": {
                 "ext-json": "*",
                 "ext-simplexml": "*",
-                "guzzle/guzzle": "^2.8 || ^3.0",
-                "php": "^5.3.3 || ^7.0",
+                "guzzlehttp/guzzle": "^6.0",
+                "php": "^5.5 || ^7.0",
                 "psr/log": "^1.0",
-                "symfony/config": "^2.1 || ^3.0 || ^4.0",
-                "symfony/console": "^2.1 || ^3.0 || ^4.0",
-                "symfony/stopwatch": "^2.0 || ^3.0 || ^4.0",
-                "symfony/yaml": "^2.0 || ^3.0 || ^4.0"
+                "symfony/config": "^2.1 || ^3.0 || ^4.0 || ^5.0",
+                "symfony/console": "^2.1 || ^3.0 || ^4.0 || ^5.0",
+                "symfony/stopwatch": "^2.0 || ^3.0 || ^4.0 || ^5.0",
+                "symfony/yaml": "^2.0.5 || ^3.0 || ^4.0 || ^5.0"
             },
             "require-dev": {
                 "phpunit/phpunit": "^4.8.35 || ^5.4.3 || ^6.0"
@@ -1419,12 +1262,17 @@
                 "symfony/http-kernel": "Allows Symfony integration"
             },
             "bin": [
-                "bin/coveralls"
+                "bin/php-coveralls"
             ],
             "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.2-dev"
+                }
+            },
             "autoload": {
                 "psr-4": {
-                    "Satooshi\\": "src/Satooshi/"
+                    "PhpCoveralls\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -1435,7 +1283,24 @@
                 {
                     "name": "Kitamura Satoshi",
                     "email": "with.no.parachute@gmail.com",
-                    "homepage": "https://www.facebook.com/satooshi.jp"
+                    "homepage": "https://www.facebook.com/satooshi.jp",
+                    "role": "Original creator"
+                },
+                {
+                    "name": "Takashi Matsuo",
+                    "email": "tmatsuo@google.com"
+                },
+                {
+                    "name": "Google Inc"
+                },
+                {
+                    "name": "Dariusz Ruminski",
+                    "email": "dariusz.ruminski@gmail.com",
+                    "homepage": "https://github.com/keradus"
+                },
+                {
+                    "name": "Contributors",
+                    "homepage": "https://github.com/php-coveralls/php-coveralls/graphs/contributors"
                 }
             ],
             "description": "PHP client library for Coveralls API",
@@ -1446,28 +1311,28 @@
                 "github",
                 "test"
             ],
-            "time": "2017-12-06T23:17:56+00:00"
+            "time": "2019-11-20T16:29:20+00:00"
         },
         {
             "name": "php-http/cache-plugin",
-            "version": "1.6.0",
+            "version": "1.7.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/php-http/cache-plugin.git",
-                "reference": "8e2505d2090316fac7cce637b39b6bbb5249c5a8"
+                "reference": "d137d46523343297e340cef697747381b6caeb66"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/php-http/cache-plugin/zipball/8e2505d2090316fac7cce637b39b6bbb5249c5a8",
-                "reference": "8e2505d2090316fac7cce637b39b6bbb5249c5a8",
+                "url": "https://api.github.com/repos/php-http/cache-plugin/zipball/d137d46523343297e340cef697747381b6caeb66",
+                "reference": "d137d46523343297e340cef697747381b6caeb66",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.4 || ^7.0",
+                "php": "^7.1",
                 "php-http/client-common": "^1.9 || ^2.0",
                 "php-http/message-factory": "^1.0",
                 "psr/cache": "^1.0",
-                "symfony/options-resolver": "^2.6 || ^3.0 || ^4.0"
+                "symfony/options-resolver": "^2.6 || ^3.0 || ^4.0 || ^5.0"
             },
             "require-dev": {
                 "henrikbjorn/phpspec-code-coverage": "^1.0",
@@ -1502,20 +1367,20 @@
                 "httplug",
                 "plugin"
             ],
-            "time": "2019-01-23T16:51:58+00:00"
+            "time": "2019-12-26T16:14:58+00:00"
         },
         {
             "name": "php-http/client-common",
-            "version": "1.9.1",
+            "version": "1.10.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/php-http/client-common.git",
-                "reference": "0e156a12cc3e46f590c73bf57592a2252fc3dc48"
+                "reference": "c0390ae3c8f2ae9d50901feef0127fb9e396f6b4"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/php-http/client-common/zipball/0e156a12cc3e46f590c73bf57592a2252fc3dc48",
-                "reference": "0e156a12cc3e46f590c73bf57592a2252fc3dc48",
+                "url": "https://api.github.com/repos/php-http/client-common/zipball/c0390ae3c8f2ae9d50901feef0127fb9e396f6b4",
+                "reference": "c0390ae3c8f2ae9d50901feef0127fb9e396f6b4",
                 "shasum": ""
             },
             "require": {
@@ -1523,7 +1388,7 @@
                 "php-http/httplug": "^1.1",
                 "php-http/message": "^1.6",
                 "php-http/message-factory": "^1.0",
-                "symfony/options-resolver": "^2.6 || ^3.0 || ^4.0"
+                "symfony/options-resolver": "^2.6 || ^3.0 || ^4.0 || ^5.0"
             },
             "require-dev": {
                 "guzzlehttp/psr7": "^1.4",
@@ -1537,7 +1402,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.9.x-dev"
+                    "dev-master": "1.10.x-dev"
                 }
             },
             "autoload": {
@@ -1563,32 +1428,33 @@
                 "http",
                 "httplug"
             ],
-            "time": "2019-02-02T07:03:15+00:00"
+            "time": "2019-11-18T08:54:36+00:00"
         },
         {
             "name": "php-http/discovery",
-            "version": "1.6.1",
+            "version": "1.7.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/php-http/discovery.git",
-                "reference": "684855f2c2e9d0a61868b8f8d6bd0295c8a4b651"
+                "reference": "82dbef649ccffd8e4f22e1953c3a5265992b83c0"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/php-http/discovery/zipball/684855f2c2e9d0a61868b8f8d6bd0295c8a4b651",
-                "reference": "684855f2c2e9d0a61868b8f8d6bd0295c8a4b651",
+                "url": "https://api.github.com/repos/php-http/discovery/zipball/82dbef649ccffd8e4f22e1953c3a5265992b83c0",
+                "reference": "82dbef649ccffd8e4f22e1953c3a5265992b83c0",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.5 || ^7.0"
+                "php": "^7.1"
             },
             "conflict": {
                 "nyholm/psr7": "<1.0"
             },
             "require-dev": {
+                "akeneo/phpspec-skip-example-extension": "^4.0",
                 "php-http/httplug": "^1.0 || ^2.0",
                 "php-http/message-factory": "^1.0",
-                "phpspec/phpspec": "^2.4",
+                "phpspec/phpspec": "^5.1",
                 "puli/composer-plugin": "1.0.0-beta10"
             },
             "suggest": {
@@ -1598,7 +1464,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.5-dev"
+                    "dev-master": "1.7-dev"
                 }
             },
             "autoload": {
@@ -1627,7 +1493,7 @@
                 "message",
                 "psr7"
             ],
-            "time": "2019-02-23T07:42:53+00:00"
+            "time": "2020-01-03T11:25:47+00:00"
         },
         {
             "name": "php-http/guzzle6-adapter",
@@ -1747,21 +1613,21 @@
         },
         {
             "name": "php-http/message",
-            "version": "1.7.2",
+            "version": "1.8.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/php-http/message.git",
-                "reference": "b159ffe570dffd335e22ef0b91a946eacb182fa1"
+                "reference": "ce8f43ac1e294b54aabf5808515c3554a19c1e1c"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/php-http/message/zipball/b159ffe570dffd335e22ef0b91a946eacb182fa1",
-                "reference": "b159ffe570dffd335e22ef0b91a946eacb182fa1",
+                "url": "https://api.github.com/repos/php-http/message/zipball/ce8f43ac1e294b54aabf5808515c3554a19c1e1c",
+                "reference": "ce8f43ac1e294b54aabf5808515c3554a19c1e1c",
                 "shasum": ""
             },
             "require": {
                 "clue/stream-filter": "^1.4",
-                "php": "^5.4 || ^7.0",
+                "php": "^7.1",
                 "php-http/message-factory": "^1.0.2",
                 "psr/http-message": "^1.0"
             },
@@ -1787,7 +1653,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.6-dev"
+                    "dev-master": "1.8-dev"
                 }
             },
             "autoload": {
@@ -1815,7 +1681,7 @@
                 "message",
                 "psr-7"
             ],
-            "time": "2018-11-01T09:32:41+00:00"
+            "time": "2019-08-05T06:55:08+00:00"
         },
         {
             "name": "php-http/message-factory",
@@ -1919,35 +1785,30 @@
         },
         {
             "name": "phpdocumentor/reflection-common",
-            "version": "1.0.1",
+            "version": "2.1.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpDocumentor/ReflectionCommon.git",
-                "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6"
+                "reference": "6568f4687e5b41b054365f9ae03fcb1ed5f2069b"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6",
-                "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6",
+                "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/6568f4687e5b41b054365f9ae03fcb1ed5f2069b",
+                "reference": "6568f4687e5b41b054365f9ae03fcb1ed5f2069b",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.5"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^4.6"
+                "php": ">=7.1"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.0.x-dev"
+                    "dev-master": "2.x-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "phpDocumentor\\Reflection\\": [
-                        "src"
-                    ]
+                    "phpDocumentor\\Reflection\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -1969,44 +1830,42 @@
                 "reflection",
                 "static analysis"
             ],
-            "time": "2017-09-11T18:02:19+00:00"
+            "time": "2020-04-27T09:25:28+00:00"
         },
         {
             "name": "phpdocumentor/reflection-docblock",
-            "version": "4.3.0",
+            "version": "5.1.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
-                "reference": "94fd0001232e47129dd3504189fa1c7225010d08"
+                "reference": "cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/94fd0001232e47129dd3504189fa1c7225010d08",
-                "reference": "94fd0001232e47129dd3504189fa1c7225010d08",
+                "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e",
+                "reference": "cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.0",
-                "phpdocumentor/reflection-common": "^1.0.0",
-                "phpdocumentor/type-resolver": "^0.4.0",
-                "webmozart/assert": "^1.0"
+                "ext-filter": "^7.1",
+                "php": "^7.2",
+                "phpdocumentor/reflection-common": "^2.0",
+                "phpdocumentor/type-resolver": "^1.0",
+                "webmozart/assert": "^1"
             },
             "require-dev": {
-                "doctrine/instantiator": "~1.0.5",
-                "mockery/mockery": "^1.0",
-                "phpunit/phpunit": "^6.4"
+                "doctrine/instantiator": "^1",
+                "mockery/mockery": "^1"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "4.x-dev"
+                    "dev-master": "5.x-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "phpDocumentor\\Reflection\\": [
-                        "src/"
-                    ]
+                    "phpDocumentor\\Reflection\\": "src"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -2017,44 +1876,46 @@
                 {
                     "name": "Mike van Riel",
                     "email": "me@mikevanriel.com"
+                },
+                {
+                    "name": "Jaap van Otterdijk",
+                    "email": "account@ijaap.nl"
                 }
             ],
             "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
-            "time": "2017-11-30T07:14:17+00:00"
+            "time": "2020-02-22T12:28:44+00:00"
         },
         {
             "name": "phpdocumentor/type-resolver",
-            "version": "0.4.0",
+            "version": "1.1.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpDocumentor/TypeResolver.git",
-                "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7"
+                "reference": "7462d5f123dfc080dfdf26897032a6513644fc95"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7",
-                "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7",
+                "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/7462d5f123dfc080dfdf26897032a6513644fc95",
+                "reference": "7462d5f123dfc080dfdf26897032a6513644fc95",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.5 || ^7.0",
-                "phpdocumentor/reflection-common": "^1.0"
+                "php": "^7.2",
+                "phpdocumentor/reflection-common": "^2.0"
             },
             "require-dev": {
-                "mockery/mockery": "^0.9.4",
-                "phpunit/phpunit": "^5.2||^4.8.24"
+                "ext-tokenizer": "^7.2",
+                "mockery/mockery": "~1"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.0.x-dev"
+                    "dev-master": "1.x-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "phpDocumentor\\Reflection\\": [
-                        "src/"
-                    ]
+                    "phpDocumentor\\Reflection\\": "src"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -2067,42 +1928,43 @@
                     "email": "me@mikevanriel.com"
                 }
             ],
-            "time": "2017-07-14T14:27:02+00:00"
+            "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
+            "time": "2020-02-18T18:59:58+00:00"
         },
         {
             "name": "phpspec/prophecy",
-            "version": "1.8.0",
+            "version": "v1.10.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpspec/prophecy.git",
-                "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06"
+                "reference": "451c3cd1418cf640de218914901e51b064abb093"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpspec/prophecy/zipball/4ba436b55987b4bf311cb7c6ba82aa528aac0a06",
-                "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06",
+                "url": "https://api.github.com/repos/phpspec/prophecy/zipball/451c3cd1418cf640de218914901e51b064abb093",
+                "reference": "451c3cd1418cf640de218914901e51b064abb093",
                 "shasum": ""
             },
             "require": {
                 "doctrine/instantiator": "^1.0.2",
                 "php": "^5.3|^7.0",
-                "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0",
-                "sebastian/comparator": "^1.1|^2.0|^3.0",
-                "sebastian/recursion-context": "^1.0|^2.0|^3.0"
+                "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0",
+                "sebastian/comparator": "^1.2.3|^2.0|^3.0|^4.0",
+                "sebastian/recursion-context": "^1.0|^2.0|^3.0|^4.0"
             },
             "require-dev": {
-                "phpspec/phpspec": "^2.5|^3.2",
+                "phpspec/phpspec": "^2.5 || ^3.2",
                 "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.8.x-dev"
+                    "dev-master": "1.10.x-dev"
                 }
             },
             "autoload": {
-                "psr-0": {
-                    "Prophecy\\": "src/"
+                "psr-4": {
+                    "Prophecy\\": "src/Prophecy"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -2130,7 +1992,7 @@
                 "spy",
                 "stub"
             ],
-            "time": "2018-08-05T17:53:17+00:00"
+            "time": "2020-03-05T15:02:03+00:00"
         },
         {
             "name": "phpunit/php-code-coverage",
@@ -2621,21 +2483,21 @@
             "time": "2017-02-14T16:28:37+00:00"
         },
         {
-            "name": "psr/http-message",
-            "version": "1.0.1",
+            "name": "psr/event-dispatcher",
+            "version": "1.0.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/php-fig/http-message.git",
-                "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363"
+                "url": "https://github.com/php-fig/event-dispatcher.git",
+                "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363",
-                "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363",
+                "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0",
+                "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.0"
+                "php": ">=7.2.0"
             },
             "type": "library",
             "extra": {
@@ -2645,7 +2507,7 @@
             },
             "autoload": {
                 "psr-4": {
-                    "Psr\\Http\\Message\\": "src/"
+                    "Psr\\EventDispatcher\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -2658,30 +2520,26 @@
                     "homepage": "http://www.php-fig.org/"
                 }
             ],
-            "description": "Common interface for HTTP messages",
-            "homepage": "https://github.com/php-fig/http-message",
+            "description": "Standard interfaces for event handling.",
             "keywords": [
-                "http",
-                "http-message",
+                "events",
                 "psr",
-                "psr-7",
-                "request",
-                "response"
+                "psr-14"
             ],
-            "time": "2016-08-06T14:39:51+00:00"
+            "time": "2019-01-08T18:20:26+00:00"
         },
         {
-            "name": "psr/log",
-            "version": "1.1.0",
+            "name": "psr/http-message",
+            "version": "1.0.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/php-fig/log.git",
-                "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd"
+                "url": "https://github.com/php-fig/http-message.git",
+                "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/php-fig/log/zipball/6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd",
-                "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd",
+                "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363",
+                "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363",
                 "shasum": ""
             },
             "require": {
@@ -2695,7 +2553,7 @@
             },
             "autoload": {
                 "psr-4": {
-                    "Psr\\Log\\": "Psr/Log/"
+                    "Psr\\Http\\Message\\": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -2708,35 +2566,85 @@
                     "homepage": "http://www.php-fig.org/"
                 }
             ],
-            "description": "Common interface for logging libraries",
-            "homepage": "https://github.com/php-fig/log",
-            "keywords": [
+            "description": "Common interface for HTTP messages",
+            "homepage": "https://github.com/php-fig/http-message",
+            "keywords": [
+                "http",
+                "http-message",
+                "psr",
+                "psr-7",
+                "request",
+                "response"
+            ],
+            "time": "2016-08-06T14:39:51+00:00"
+        },
+        {
+            "name": "psr/log",
+            "version": "1.1.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/php-fig/log.git",
+                "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc",
+                "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.1.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Psr\\Log\\": "Psr/Log/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "PHP-FIG",
+                    "homepage": "http://www.php-fig.org/"
+                }
+            ],
+            "description": "Common interface for logging libraries",
+            "homepage": "https://github.com/php-fig/log",
+            "keywords": [
                 "log",
                 "psr",
                 "psr-3"
             ],
-            "time": "2018-11-20T15:27:04+00:00"
+            "time": "2020-03-23T09:12:05+00:00"
         },
         {
             "name": "ralouphie/getallheaders",
-            "version": "2.0.5",
+            "version": "3.0.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/ralouphie/getallheaders.git",
-                "reference": "5601c8a83fbba7ef674a7369456d12f1e0d0eafa"
+                "reference": "120b605dfeb996808c31b6477290a714d356e822"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/5601c8a83fbba7ef674a7369456d12f1e0d0eafa",
-                "reference": "5601c8a83fbba7ef674a7369456d12f1e0d0eafa",
+                "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822",
+                "reference": "120b605dfeb996808c31b6477290a714d356e822",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3"
+                "php": ">=5.6"
             },
             "require-dev": {
-                "phpunit/phpunit": "~3.7.0",
-                "satooshi/php-coveralls": ">=1.0"
+                "php-coveralls/php-coveralls": "^2.1",
+                "phpunit/phpunit": "^5 || ^6.5"
             },
             "type": "library",
             "autoload": {
@@ -2755,7 +2663,7 @@
                 }
             ],
             "description": "A polyfill for getallheaders.",
-            "time": "2016-02-11T07:05:27+00:00"
+            "time": "2019-03-08T08:55:37+00:00"
         },
         {
             "name": "sebastian/code-unit-reverse-lookup",
@@ -2970,16 +2878,16 @@
         },
         {
             "name": "sebastian/exporter",
-            "version": "3.1.0",
+            "version": "3.1.2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/exporter.git",
-                "reference": "234199f4528de6d12aaa58b612e98f7d36adb937"
+                "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/234199f4528de6d12aaa58b612e98f7d36adb937",
-                "reference": "234199f4528de6d12aaa58b612e98f7d36adb937",
+                "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/68609e1261d215ea5b21b7987539cbfbe156ec3e",
+                "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e",
                 "shasum": ""
             },
             "require": {
@@ -3006,6 +2914,10 @@
                 "BSD-3-Clause"
             ],
             "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                },
                 {
                     "name": "Jeff Welch",
                     "email": "whatthejeff@gmail.com"
@@ -3014,17 +2926,13 @@
                     "name": "Volker Dusch",
                     "email": "github@wallbash.com"
                 },
-                {
-                    "name": "Bernhard Schussek",
-                    "email": "bschussek@2bepublished.at"
-                },
-                {
-                    "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de"
-                },
                 {
                     "name": "Adam Harvey",
                     "email": "aharvey@php.net"
+                },
+                {
+                    "name": "Bernhard Schussek",
+                    "email": "bschussek@gmail.com"
                 }
             ],
             "description": "Provides the functionality to export PHP variables for visualization",
@@ -3033,7 +2941,7 @@
                 "export",
                 "exporter"
             ],
-            "time": "2017-04-03T13:19:02+00:00"
+            "time": "2019-09-14T09:02:43+00:00"
         },
         {
             "name": "sebastian/global-state",
@@ -3396,32 +3304,32 @@
         },
         {
             "name": "symfony/config",
-            "version": "v3.4.23",
+            "version": "v5.0.8",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/config.git",
-                "reference": "177a276c01575253c95cefe0866e3d1b57637fe0"
+                "reference": "db1674e1a261148429f123871f30d211992294e7"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/config/zipball/177a276c01575253c95cefe0866e3d1b57637fe0",
-                "reference": "177a276c01575253c95cefe0866e3d1b57637fe0",
+                "url": "https://api.github.com/repos/symfony/config/zipball/db1674e1a261148429f123871f30d211992294e7",
+                "reference": "db1674e1a261148429f123871f30d211992294e7",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.5.9|>=7.0.8",
-                "symfony/filesystem": "~2.8|~3.0|~4.0",
+                "php": "^7.2.5",
+                "symfony/filesystem": "^4.4|^5.0",
                 "symfony/polyfill-ctype": "~1.8"
             },
             "conflict": {
-                "symfony/dependency-injection": "<3.3",
-                "symfony/finder": "<3.3"
+                "symfony/finder": "<4.4"
             },
             "require-dev": {
-                "symfony/dependency-injection": "~3.3|~4.0",
-                "symfony/event-dispatcher": "~3.3|~4.0",
-                "symfony/finder": "~3.3|~4.0",
-                "symfony/yaml": "~3.0|~4.0"
+                "symfony/event-dispatcher": "^4.4|^5.0",
+                "symfony/finder": "^4.4|^5.0",
+                "symfony/messenger": "^4.4|^5.0",
+                "symfony/service-contracts": "^1.1|^2",
+                "symfony/yaml": "^4.4|^5.0"
             },
             "suggest": {
                 "symfony/yaml": "To use the yaml reference dumper"
@@ -3429,7 +3337,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "3.4-dev"
+                    "dev-master": "5.0-dev"
                 }
             },
             "autoload": {
@@ -3456,41 +3364,45 @@
             ],
             "description": "Symfony Config Component",
             "homepage": "https://symfony.com",
-            "time": "2019-02-23T15:06:07+00:00"
+            "time": "2020-04-15T15:59:10+00:00"
         },
         {
             "name": "symfony/console",
-            "version": "v3.4.23",
+            "version": "v5.0.8",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/console.git",
-                "reference": "71ce77f37af0c5ffb9590e43cc4f70e426945c5e"
+                "reference": "5fa1caadc8cdaa17bcfb25219f3b53fe294a9935"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/console/zipball/71ce77f37af0c5ffb9590e43cc4f70e426945c5e",
-                "reference": "71ce77f37af0c5ffb9590e43cc4f70e426945c5e",
+                "url": "https://api.github.com/repos/symfony/console/zipball/5fa1caadc8cdaa17bcfb25219f3b53fe294a9935",
+                "reference": "5fa1caadc8cdaa17bcfb25219f3b53fe294a9935",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.5.9|>=7.0.8",
-                "symfony/debug": "~2.8|~3.0|~4.0",
-                "symfony/polyfill-mbstring": "~1.0"
+                "php": "^7.2.5",
+                "symfony/polyfill-mbstring": "~1.0",
+                "symfony/polyfill-php73": "^1.8",
+                "symfony/service-contracts": "^1.1|^2"
             },
             "conflict": {
-                "symfony/dependency-injection": "<3.4",
-                "symfony/process": "<3.3"
+                "symfony/dependency-injection": "<4.4",
+                "symfony/event-dispatcher": "<4.4",
+                "symfony/lock": "<4.4",
+                "symfony/process": "<4.4"
             },
             "provide": {
                 "psr/log-implementation": "1.0"
             },
             "require-dev": {
                 "psr/log": "~1.0",
-                "symfony/config": "~3.3|~4.0",
-                "symfony/dependency-injection": "~3.4|~4.0",
-                "symfony/event-dispatcher": "~2.8|~3.0|~4.0",
-                "symfony/lock": "~3.4|~4.0",
-                "symfony/process": "~3.3|~4.0"
+                "symfony/config": "^4.4|^5.0",
+                "symfony/dependency-injection": "^4.4|^5.0",
+                "symfony/event-dispatcher": "^4.4|^5.0",
+                "symfony/lock": "^4.4|^5.0",
+                "symfony/process": "^4.4|^5.0",
+                "symfony/var-dumper": "^4.4|^5.0"
             },
             "suggest": {
                 "psr/log": "For using the console logger",
@@ -3501,7 +3413,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "3.4-dev"
+                    "dev-master": "5.0-dev"
                 }
             },
             "autoload": {
@@ -3528,41 +3440,55 @@
             ],
             "description": "Symfony Console Component",
             "homepage": "https://symfony.com",
-            "time": "2019-02-23T15:06:07+00:00"
+            "time": "2020-03-30T11:42:42+00:00"
         },
         {
-            "name": "symfony/debug",
-            "version": "v3.4.23",
+            "name": "symfony/event-dispatcher",
+            "version": "v5.0.8",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/debug.git",
-                "reference": "8d8a9e877b3fcdc50ddecf8dcea146059753f782"
+                "url": "https://github.com/symfony/event-dispatcher.git",
+                "reference": "24f40d95385774ed5c71dbf014edd047e2f2f3dc"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/debug/zipball/8d8a9e877b3fcdc50ddecf8dcea146059753f782",
-                "reference": "8d8a9e877b3fcdc50ddecf8dcea146059753f782",
+                "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/24f40d95385774ed5c71dbf014edd047e2f2f3dc",
+                "reference": "24f40d95385774ed5c71dbf014edd047e2f2f3dc",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.5.9|>=7.0.8",
-                "psr/log": "~1.0"
+                "php": "^7.2.5",
+                "symfony/event-dispatcher-contracts": "^2"
             },
             "conflict": {
-                "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2"
+                "symfony/dependency-injection": "<4.4"
+            },
+            "provide": {
+                "psr/event-dispatcher-implementation": "1.0",
+                "symfony/event-dispatcher-implementation": "2.0"
             },
             "require-dev": {
-                "symfony/http-kernel": "~2.8|~3.0|~4.0"
+                "psr/log": "~1.0",
+                "symfony/config": "^4.4|^5.0",
+                "symfony/dependency-injection": "^4.4|^5.0",
+                "symfony/expression-language": "^4.4|^5.0",
+                "symfony/http-foundation": "^4.4|^5.0",
+                "symfony/service-contracts": "^1.1|^2",
+                "symfony/stopwatch": "^4.4|^5.0"
+            },
+            "suggest": {
+                "symfony/dependency-injection": "",
+                "symfony/http-kernel": ""
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "3.4-dev"
+                    "dev-master": "5.0-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Symfony\\Component\\Debug\\": ""
+                    "Symfony\\Component\\EventDispatcher\\": ""
                 },
                 "exclude-from-classmap": [
                     "/Tests/"
@@ -3582,54 +3508,41 @@
                     "homepage": "https://symfony.com/contributors"
                 }
             ],
-            "description": "Symfony Debug Component",
+            "description": "Symfony EventDispatcher Component",
             "homepage": "https://symfony.com",
-            "time": "2019-02-24T15:45:11+00:00"
+            "time": "2020-03-27T16:56:45+00:00"
         },
         {
-            "name": "symfony/event-dispatcher",
-            "version": "v3.4.23",
+            "name": "symfony/event-dispatcher-contracts",
+            "version": "v2.0.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/symfony/event-dispatcher.git",
-                "reference": "ec625e2fff7f584eeb91754821807317b2e79236"
+                "url": "https://github.com/symfony/event-dispatcher-contracts.git",
+                "reference": "af23c2584d4577d54661c434446fb8fbed6025dd"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/ec625e2fff7f584eeb91754821807317b2e79236",
-                "reference": "ec625e2fff7f584eeb91754821807317b2e79236",
+                "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/af23c2584d4577d54661c434446fb8fbed6025dd",
+                "reference": "af23c2584d4577d54661c434446fb8fbed6025dd",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.5.9|>=7.0.8"
-            },
-            "conflict": {
-                "symfony/dependency-injection": "<3.3"
-            },
-            "require-dev": {
-                "psr/log": "~1.0",
-                "symfony/config": "~2.8|~3.0|~4.0",
-                "symfony/dependency-injection": "~3.3|~4.0",
-                "symfony/expression-language": "~2.8|~3.0|~4.0",
-                "symfony/stopwatch": "~2.8|~3.0|~4.0"
+                "php": "^7.2.5",
+                "psr/event-dispatcher": "^1"
             },
             "suggest": {
-                "symfony/dependency-injection": "",
-                "symfony/http-kernel": ""
+                "symfony/event-dispatcher-implementation": ""
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "3.4-dev"
+                    "dev-master": "2.0-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
-                    "Symfony\\Component\\EventDispatcher\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
+                    "Symfony\\Contracts\\EventDispatcher\\": ""
+                }
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
@@ -3637,40 +3550,48 @@
             ],
             "authors": [
                 {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
                 },
                 {
                     "name": "Symfony Community",
                     "homepage": "https://symfony.com/contributors"
                 }
             ],
-            "description": "Symfony EventDispatcher Component",
+            "description": "Generic abstractions related to dispatching event",
             "homepage": "https://symfony.com",
-            "time": "2019-02-23T15:06:07+00:00"
+            "keywords": [
+                "abstractions",
+                "contracts",
+                "decoupling",
+                "interfaces",
+                "interoperability",
+                "standards"
+            ],
+            "time": "2019-11-18T17:27:11+00:00"
         },
         {
             "name": "symfony/filesystem",
-            "version": "v3.4.23",
+            "version": "v5.0.8",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/filesystem.git",
-                "reference": "acf99758b1df8e9295e6b85aa69f294565c9fedb"
+                "reference": "7cd0dafc4353a0f62e307df90b48466379c8cc91"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/filesystem/zipball/acf99758b1df8e9295e6b85aa69f294565c9fedb",
-                "reference": "acf99758b1df8e9295e6b85aa69f294565c9fedb",
+                "url": "https://api.github.com/repos/symfony/filesystem/zipball/7cd0dafc4353a0f62e307df90b48466379c8cc91",
+                "reference": "7cd0dafc4353a0f62e307df90b48466379c8cc91",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.5.9|>=7.0.8",
+                "php": "^7.2.5",
                 "symfony/polyfill-ctype": "~1.8"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "3.4-dev"
+                    "dev-master": "5.0-dev"
                 }
             },
             "autoload": {
@@ -3697,29 +3618,29 @@
             ],
             "description": "Symfony Filesystem Component",
             "homepage": "https://symfony.com",
-            "time": "2019-02-04T21:34:32+00:00"
+            "time": "2020-04-12T14:40:17+00:00"
         },
         {
             "name": "symfony/finder",
-            "version": "v3.4.23",
+            "version": "v5.0.8",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/finder.git",
-                "reference": "fcdde4aa38f48190ce70d782c166f23930084f9b"
+                "reference": "600a52c29afc0d1caa74acbec8d3095ca7e9910d"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/finder/zipball/fcdde4aa38f48190ce70d782c166f23930084f9b",
-                "reference": "fcdde4aa38f48190ce70d782c166f23930084f9b",
+                "url": "https://api.github.com/repos/symfony/finder/zipball/600a52c29afc0d1caa74acbec8d3095ca7e9910d",
+                "reference": "600a52c29afc0d1caa74acbec8d3095ca7e9910d",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.5.9|>=7.0.8"
+                "php": "^7.2.5"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "3.4-dev"
+                    "dev-master": "5.0-dev"
                 }
             },
             "autoload": {
@@ -3746,29 +3667,29 @@
             ],
             "description": "Symfony Finder Component",
             "homepage": "https://symfony.com",
-            "time": "2019-02-22T14:44:53+00:00"
+            "time": "2020-03-27T16:56:45+00:00"
         },
         {
             "name": "symfony/options-resolver",
-            "version": "v3.4.23",
+            "version": "v5.0.8",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/options-resolver.git",
-                "reference": "926e3b797e6bb66c0e4d7da7eff3a174f7378bcf"
+                "reference": "3707e3caeff2b797c0bfaadd5eba723dd44e6bf1"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/options-resolver/zipball/926e3b797e6bb66c0e4d7da7eff3a174f7378bcf",
-                "reference": "926e3b797e6bb66c0e4d7da7eff3a174f7378bcf",
+                "url": "https://api.github.com/repos/symfony/options-resolver/zipball/3707e3caeff2b797c0bfaadd5eba723dd44e6bf1",
+                "reference": "3707e3caeff2b797c0bfaadd5eba723dd44e6bf1",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.5.9|>=7.0.8"
+                "php": "^7.2.5"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "3.4-dev"
+                    "dev-master": "5.0-dev"
                 }
             },
             "autoload": {
@@ -3800,20 +3721,20 @@
                 "configuration",
                 "options"
             ],
-            "time": "2019-02-23T15:06:07+00:00"
+            "time": "2020-04-06T10:40:56+00:00"
         },
         {
             "name": "symfony/polyfill-ctype",
-            "version": "v1.10.0",
+            "version": "v1.17.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-ctype.git",
-                "reference": "e3d826245268269cd66f8326bd8bc066687b4a19"
+                "reference": "e94c8b1bbe2bc77507a1056cdb06451c75b427f9"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/e3d826245268269cd66f8326bd8bc066687b4a19",
-                "reference": "e3d826245268269cd66f8326bd8bc066687b4a19",
+                "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/e94c8b1bbe2bc77507a1056cdb06451c75b427f9",
+                "reference": "e94c8b1bbe2bc77507a1056cdb06451c75b427f9",
                 "shasum": ""
             },
             "require": {
@@ -3825,7 +3746,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.9-dev"
+                    "dev-master": "1.17-dev"
                 }
             },
             "autoload": {
@@ -3841,13 +3762,13 @@
                 "MIT"
             ],
             "authors": [
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                },
                 {
                     "name": "Gert de Pagter",
                     "email": "BackEndTea@gmail.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
                 }
             ],
             "description": "Symfony polyfill for ctype functions",
@@ -3858,20 +3779,82 @@
                 "polyfill",
                 "portable"
             ],
-            "time": "2018-08-06T14:22:27+00:00"
+            "time": "2020-05-12T16:14:59+00:00"
+        },
+        {
+            "name": "symfony/polyfill-intl-idn",
+            "version": "v1.17.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-intl-idn.git",
+                "reference": "3bff59ea7047e925be6b7f2059d60af31bb46d6a"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/3bff59ea7047e925be6b7f2059d60af31bb46d6a",
+                "reference": "3bff59ea7047e925be6b7f2059d60af31bb46d6a",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3",
+                "symfony/polyfill-mbstring": "^1.3",
+                "symfony/polyfill-php72": "^1.10"
+            },
+            "suggest": {
+                "ext-intl": "For best performance"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.17-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Polyfill\\Intl\\Idn\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Laurent Bassin",
+                    "email": "laurent@bassin.info"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "idn",
+                "intl",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
+            "time": "2020-05-12T16:47:27+00:00"
         },
         {
             "name": "symfony/polyfill-mbstring",
-            "version": "v1.10.0",
+            "version": "v1.17.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-mbstring.git",
-                "reference": "c79c051f5b3a46be09205c73b80b346e4153e494"
+                "reference": "fa79b11539418b02fc5e1897267673ba2c19419c"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/c79c051f5b3a46be09205c73b80b346e4153e494",
-                "reference": "c79c051f5b3a46be09205c73b80b346e4153e494",
+                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fa79b11539418b02fc5e1897267673ba2c19419c",
+                "reference": "fa79b11539418b02fc5e1897267673ba2c19419c",
                 "shasum": ""
             },
             "require": {
@@ -3883,7 +3866,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.9-dev"
+                    "dev-master": "1.17-dev"
                 }
             },
             "autoload": {
@@ -3917,29 +3900,142 @@
                 "portable",
                 "shim"
             ],
-            "time": "2018-09-21T13:07:52+00:00"
+            "time": "2020-05-12T16:47:27+00:00"
+        },
+        {
+            "name": "symfony/polyfill-php72",
+            "version": "v1.17.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-php72.git",
+                "reference": "f048e612a3905f34931127360bdd2def19a5e582"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/f048e612a3905f34931127360bdd2def19a5e582",
+                "reference": "f048e612a3905f34931127360bdd2def19a5e582",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.17-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Polyfill\\Php72\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
+            "time": "2020-05-12T16:47:27+00:00"
+        },
+        {
+            "name": "symfony/polyfill-php73",
+            "version": "v1.17.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-php73.git",
+                "reference": "a760d8964ff79ab9bf057613a5808284ec852ccc"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/a760d8964ff79ab9bf057613a5808284ec852ccc",
+                "reference": "a760d8964ff79ab9bf057613a5808284ec852ccc",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.17-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Polyfill\\Php73\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
+                ],
+                "classmap": [
+                    "Resources/stubs"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
+            "time": "2020-05-12T16:47:27+00:00"
         },
         {
             "name": "symfony/process",
-            "version": "v3.4.23",
+            "version": "v5.0.8",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/process.git",
-                "reference": "009f8dda80930e89e8344a4e310b08f9ff07dd2e"
+                "reference": "3179f68dff5bad14d38c4114a1dab98030801fd7"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/process/zipball/009f8dda80930e89e8344a4e310b08f9ff07dd2e",
-                "reference": "009f8dda80930e89e8344a4e310b08f9ff07dd2e",
+                "url": "https://api.github.com/repos/symfony/process/zipball/3179f68dff5bad14d38c4114a1dab98030801fd7",
+                "reference": "3179f68dff5bad14d38c4114a1dab98030801fd7",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.5.9|>=7.0.8"
+                "php": "^7.2.5"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "3.4-dev"
+                    "dev-master": "5.0-dev"
                 }
             },
             "autoload": {
@@ -3966,29 +4062,88 @@
             ],
             "description": "Symfony Process Component",
             "homepage": "https://symfony.com",
-            "time": "2019-01-16T13:27:11+00:00"
+            "time": "2020-04-15T15:59:10+00:00"
+        },
+        {
+            "name": "symfony/service-contracts",
+            "version": "v2.0.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/service-contracts.git",
+                "reference": "144c5e51266b281231e947b51223ba14acf1a749"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/service-contracts/zipball/144c5e51266b281231e947b51223ba14acf1a749",
+                "reference": "144c5e51266b281231e947b51223ba14acf1a749",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.2.5",
+                "psr/container": "^1.0"
+            },
+            "suggest": {
+                "symfony/service-implementation": ""
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.0-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Contracts\\Service\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Generic abstractions related to writing services",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "abstractions",
+                "contracts",
+                "decoupling",
+                "interfaces",
+                "interoperability",
+                "standards"
+            ],
+            "time": "2019-11-18T17:27:11+00:00"
         },
         {
             "name": "symfony/stopwatch",
-            "version": "v3.4.23",
+            "version": "v5.0.8",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/stopwatch.git",
-                "reference": "2a651c2645c10bbedd21170771f122d935e0dd58"
+                "reference": "a1d86d30d4522423afc998f32404efa34fcf5a73"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/stopwatch/zipball/2a651c2645c10bbedd21170771f122d935e0dd58",
-                "reference": "2a651c2645c10bbedd21170771f122d935e0dd58",
+                "url": "https://api.github.com/repos/symfony/stopwatch/zipball/a1d86d30d4522423afc998f32404efa34fcf5a73",
+                "reference": "a1d86d30d4522423afc998f32404efa34fcf5a73",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.5.9|>=7.0.8"
+                "php": "^7.2.5",
+                "symfony/service-contracts": "^1.0|^2"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "3.4-dev"
+                    "dev-master": "5.0-dev"
                 }
             },
             "autoload": {
@@ -4015,31 +4170,31 @@
             ],
             "description": "Symfony Stopwatch Component",
             "homepage": "https://symfony.com",
-            "time": "2019-01-16T09:39:14+00:00"
+            "time": "2020-03-27T16:56:45+00:00"
         },
         {
             "name": "symfony/yaml",
-            "version": "v3.4.23",
+            "version": "v4.4.8",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/yaml.git",
-                "reference": "57f1ce82c997f5a8701b89ef970e36bb657fd09c"
+                "reference": "b385dce1c0e9f839b384af90188638819433e252"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/yaml/zipball/57f1ce82c997f5a8701b89ef970e36bb657fd09c",
-                "reference": "57f1ce82c997f5a8701b89ef970e36bb657fd09c",
+                "url": "https://api.github.com/repos/symfony/yaml/zipball/b385dce1c0e9f839b384af90188638819433e252",
+                "reference": "b385dce1c0e9f839b384af90188638819433e252",
                 "shasum": ""
             },
             "require": {
-                "php": "^5.5.9|>=7.0.8",
+                "php": "^7.1.3",
                 "symfony/polyfill-ctype": "~1.8"
             },
             "conflict": {
                 "symfony/console": "<3.4"
             },
             "require-dev": {
-                "symfony/console": "~3.4|~4.0"
+                "symfony/console": "^3.4|^4.0|^5.0"
             },
             "suggest": {
                 "symfony/console": "For validating YAML files using the lint command"
@@ -4047,7 +4202,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "3.4-dev"
+                    "dev-master": "4.4-dev"
                 }
             },
             "autoload": {
@@ -4074,20 +4229,20 @@
             ],
             "description": "Symfony Yaml Component",
             "homepage": "https://symfony.com",
-            "time": "2019-02-23T15:06:07+00:00"
+            "time": "2020-04-28T17:55:16+00:00"
         },
         {
             "name": "theseer/tokenizer",
-            "version": "1.1.0",
+            "version": "1.1.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/theseer/tokenizer.git",
-                "reference": "cb2f008f3f05af2893a87208fe6a6c4985483f8b"
+                "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/theseer/tokenizer/zipball/cb2f008f3f05af2893a87208fe6a6c4985483f8b",
-                "reference": "cb2f008f3f05af2893a87208fe6a6c4985483f8b",
+                "url": "https://api.github.com/repos/theseer/tokenizer/zipball/11336f6f84e16a720dae9d8e6ed5019efa85a0f9",
+                "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9",
                 "shasum": ""
             },
             "require": {
@@ -4114,36 +4269,33 @@
                 }
             ],
             "description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
-            "time": "2017-04-07T12:08:54+00:00"
+            "time": "2019-06-13T22:48:21+00:00"
         },
         {
             "name": "webmozart/assert",
-            "version": "1.4.0",
+            "version": "1.8.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/webmozart/assert.git",
-                "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9"
+                "reference": "ab2cb0b3b559010b75981b1bdce728da3ee90ad6"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/webmozart/assert/zipball/83e253c8e0be5b0257b881e1827274667c5c17a9",
-                "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9",
+                "url": "https://api.github.com/repos/webmozart/assert/zipball/ab2cb0b3b559010b75981b1bdce728da3ee90ad6",
+                "reference": "ab2cb0b3b559010b75981b1bdce728da3ee90ad6",
                 "shasum": ""
             },
             "require": {
                 "php": "^5.3.3 || ^7.0",
                 "symfony/polyfill-ctype": "^1.8"
             },
+            "conflict": {
+                "vimeo/psalm": "<3.9.1"
+            },
             "require-dev": {
-                "phpunit/phpunit": "^4.6",
-                "sebastian/version": "^1.0.1"
+                "phpunit/phpunit": "^4.8.36 || ^7.5.13"
             },
             "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.3-dev"
-                }
-            },
             "autoload": {
                 "psr-4": {
                     "Webmozart\\Assert\\": "src/"
@@ -4165,7 +4317,7 @@
                 "check",
                 "validate"
             ],
-            "time": "2018-12-25T11:19:39+00:00"
+            "time": "2020-04-18T12:12:48+00:00"
         }
     ],
     "aliases": [],
@@ -4178,6 +4330,6 @@
     },
     "platform-dev": [],
     "platform-overrides": {
-        "php": "7.0.8"
+        "php": "7.2.28"
     }
 }
diff --git a/vendor/consolidation/site-process/CHANGELOG.md b/vendor/consolidation/site-process/CHANGELOG.md
index 7ca3bc0169dcab8e27c7d2992cc9cecdf7ed419d..9219b057ea4ba5e5907ad07f60b06744dbfb6a72 100644
--- a/vendor/consolidation/site-process/CHANGELOG.md
+++ b/vendor/consolidation/site-process/CHANGELOG.md
@@ -1,5 +1,13 @@
 # Changelog
 
+### 2.1.0 - 2019/Sep/10
+
+* Added environment variables in aliases (#47)
+
+### 2.0.4 - 2019/Aug/12
+
+* Bugfix: Better error reporting when json output fails to parse. (#46)
+
 ### 2.0.3 - 2019/Jun/4
 
 * Bugfix: Use posix_isatty when available. (#43)
diff --git a/vendor/consolidation/site-process/README.md b/vendor/consolidation/site-process/README.md
index 19d43168503a3e1b0caeefa0daa8e9ca9ed0762e..9ee69d3e2d88f2aa94eac36b603f5f3d3fabc6c3 100644
--- a/vendor/consolidation/site-process/README.md
+++ b/vendor/consolidation/site-process/README.md
@@ -13,7 +13,7 @@ A thin wrapper around the Symfony Process Component that allows applications to
 
 Site Process is a thin wrapper around the [Symfony Process Component](https://symfony.com/doc/3.4/components/process) that allows applications to use the [Site Alias library](https://github.com/consolidation/site-alias) to specify the target for a remote call.
 
-For comparison purposes, the `Process` obejct may be created to run an application on the local system using the standard Symfony Process Component API like so:
+For comparison purposes, the `Process` object may be created to run an application on the local system using the standard Symfony Process Component API like so:
 ```
 $process = new Process(['ls', '-lsa']);
 ```
diff --git a/vendor/consolidation/site-process/VERSION b/vendor/consolidation/site-process/VERSION
index 6acdb442890d24a5a111bf264099eec7962295c2..7ec1d6db40877765247db18e7f9a4e36a0def4ad 100644
--- a/vendor/consolidation/site-process/VERSION
+++ b/vendor/consolidation/site-process/VERSION
@@ -1 +1 @@
-2.0.3
\ No newline at end of file
+2.1.0
diff --git a/vendor/consolidation/site-process/appveyor.yml b/vendor/consolidation/site-process/appveyor.yml
index c19202f9be33f9f98313842d40e7dba70f5533dc..e22a006c51ce017cbbe2312a8a071769e141836b 100644
--- a/vendor/consolidation/site-process/appveyor.yml
+++ b/vendor/consolidation/site-process/appveyor.yml
@@ -24,10 +24,11 @@ install:
   - git clone -q https://github.com/acquia/DevDesktopCommon.git #For tar, cksum, ...
   - SET PATH=%APPVEYOR_BUILD_FOLDER%/DevDesktopCommon/bintools-win/msys/bin;%PATH%
   - SET PATH=C:\Program Files\MySql\MySQL Server 5.7\bin\;%PATH%
+  - choco search php --exact --all-versions -r
   #Install PHP per https://blog.wyrihaximus.net/2016/11/running-php-unit-tests-on-windows-using-appveyor-and-chocolatey/
   - ps: Set-Service wuauserv -StartupType Manual
   - ps: appveyor-retry cinst --ignore-checksums -y php --version ((choco search php --exact --all-versions -r | select-string -pattern $Env:php_ver_target | Select-Object -first 1) -replace '[php|]','')
-  - cd c:\tools\php71
+  - cd c:\tools\php73
   - copy php.ini-production php.ini
 
   - echo extension_dir=ext >> php.ini
@@ -44,7 +45,7 @@ install:
   - echo extension=php_pdo_sqlite.dll >> php.ini
   - echo extension=php_pgsql.dll >> php.ini
   - echo extension=php_gd2.dll >> php.ini
-  - SET PATH=C:\tools\php71;%PATH%
+  - SET PATH=C:\tools\php73;%PATH%
   #Install Composer
   - cd %APPVEYOR_BUILD_FOLDER%
   #- appveyor DownloadFile https://getcomposer.org/composer.phar
@@ -61,4 +62,4 @@ test_script:
 # environment variables
 environment:
   global:
-      php_ver_target: 7.1
+      php_ver_target: 7.3
diff --git a/vendor/consolidation/site-process/src/ProcessBase.php b/vendor/consolidation/site-process/src/ProcessBase.php
index e4725c05bf2193c74fbd4bc17588f5aa06e11f68..4db598f6592b4698bcd1d5c7de57f7e9ccd4e223 100644
--- a/vendor/consolidation/site-process/src/ProcessBase.php
+++ b/vendor/consolidation/site-process/src/ProcessBase.php
@@ -178,10 +178,14 @@ public function getOutputAsJson()
             // Revert of doubled backslashes.
             $output = preg_replace('#\\\\{2}#', '\\', $output);
         }
-        $output = $this->removeNonJsonJunk($output);
-        $json = json_decode($output, true);
+        $sanitizedOutput = $this->removeNonJsonJunk($output);
+        $json = json_decode($sanitizedOutput, true);
         if (!isset($json)) {
-            throw new \InvalidArgumentException('Unable to decode output into JSON.');
+            $msg = 'Unable to decode output into JSON: ' . json_last_error_msg();
+            if (json_last_error() == JSON_ERROR_SYNTAX) {
+                $msg .= "\n\n$output";
+            }
+            throw new \InvalidArgumentException($msg);
         }
         return $json;
     }
diff --git a/vendor/consolidation/site-process/src/SiteProcess.php b/vendor/consolidation/site-process/src/SiteProcess.php
index e54270ecc08f1452bb2cb48ea0d013296173ce01..88ec35a4fe7e2241414b944e535ff22895c9ef95 100644
--- a/vendor/consolidation/site-process/src/SiteProcess.php
+++ b/vendor/consolidation/site-process/src/SiteProcess.php
@@ -8,6 +8,7 @@
 use Consolidation\SiteProcess\Transport\SshTransport;
 use Consolidation\SiteProcess\Transport\TransportInterface;
 use Consolidation\Config\Util\Interpolator;
+use Consolidation\SiteProcess\Util\Shell;
 use Consolidation\SiteProcess\Util\ShellOperatorInterface;
 use Consolidation\SiteProcess\Util\Escape;
 
@@ -125,6 +126,11 @@ protected function processArgs()
             $this->optionsPassedAsArgs
         );
 
+        // Set environment variables if needed.
+        if ($this->siteAlias->has('env-vars')) {
+            $selectedArgs = $this->addEnvVars($this->siteAlias->get('env-vars'), $selectedArgs);
+        }
+
         // Ask the transport to drop in a 'cd' if needed.
         if ($this->getWorkingDirectory()) {
             $selectedArgs = $transport->addChdir($this->getWorkingDirectory(), $selectedArgs);
@@ -138,6 +144,21 @@ protected function processArgs()
         return $transport->wrap($processedArgs);
     }
 
+    /**
+     * Wrap the command/args in an env call.
+     * @todo Check if this needs to depend on linux/win.
+     * @todo Check if this needs to be delegated to transport.
+     */
+    public function addEnvVars($envVars, $args)
+    {
+        $envArgs = ['env'];
+        foreach ($envVars as $key => $value) {
+            $envArgs[] = Escape::forSite($this->siteAlias, $key) . '='
+            . Escape::forSite($this->siteAlias, $value);
+        }
+        return array_merge($envArgs, $args);
+    }
+
     public function setTransport($transport)
     {
         $this->transport = $transport;
diff --git a/vendor/consolidation/site-process/tests/SiteProcessTest.php b/vendor/consolidation/site-process/tests/SiteProcessTest.php
index 04228223bcc6f7640046bc6d13c8a37207b9dc9f..a207d8e86de49ac098a1c1fc5c3d94259b74ed6a 100644
--- a/vendor/consolidation/site-process/tests/SiteProcessTest.php
+++ b/vendor/consolidation/site-process/tests/SiteProcessTest.php
@@ -179,6 +179,17 @@ public function siteProcessTestValues()
                 ['exclude' => 'vendor'],
                 NULL,
             ],
+
+            [
+                "env foo=bar baz=zong drush status",
+                false,
+                false,
+                ['env-vars' => ['foo' => 'bar', 'baz' => 'zong']],
+                ['drush', 'status'],
+                [],
+                [],
+                NULL,
+            ],
         ];
     }
 
@@ -227,7 +238,7 @@ public function siteProcessJsonTestValues()
                 'LINUX',
             ],
             [
-                'Unable to decode output into JSON.',
+                "Unable to decode output into JSON: Syntax error\n\nNo json data here",
                 'No json data here',
                 NULL,
             ],
diff --git a/vendor/cweagans/composer-patches/README.md b/vendor/cweagans/composer-patches/README.md
index ff09eb60e08f6840059bb7c0ee1a35b5f9ab2d67..972694028def52240b512b43ff3be52bda1a91da 100644
--- a/vendor/cweagans/composer-patches/README.md
+++ b/vendor/cweagans/composer-patches/README.md
@@ -66,7 +66,7 @@ Then your `composer.patches.json` should look like this:
 
 ## Allowing patches to be applied from dependencies
 
-If you want your project to accept patches from dependencies, you must have the following in your composer file:
+If your project doesn't supply any patches of its own, but you still want to accept patches from dependencies, you must have the following in your composer file:
 
 ```json
 {
@@ -79,6 +79,8 @@ If you want your project to accept patches from dependencies, you must have the
 }
 ```
 
+If you do have a `patches` section in your composer file that defines your own set of patches then the `enable-patching` setting will be ignored and patches from dependencies will always be applied.
+
 ## Ignoring patches
 
 There may be situations in which you want to ignore a patch supplied by a dependency. For example:
@@ -115,6 +117,21 @@ There may be situations in which you want to ignore a patch supplied by a depend
 }
 ```
 
+## Allowing to force the patch level (-pX)
+
+Some situations require to force the patchLevel used to apply patches on a particular package.
+Its useful for packages like drupal/core which packages only a subdir of the original upstream project on which patches are based.
+
+```json
+{
+  "extra": {
+    "patchLevel": {
+      "drupal/core": "-p2"
+    }
+  }
+}
+```
+
 ## Using patches from HTTP URLs
 
 Composer [blocks](https://getcomposer.org/doc/06-config.md#secure-http) you from downloading anything from HTTP URLs, you can disable this for your project by adding a `secure-http` setting in the config section of your `composer.json`. Note that the `config` section should be under the root of your `composer.json`.
diff --git a/vendor/cweagans/composer-patches/composer.json b/vendor/cweagans/composer-patches/composer.json
index 1cdcd766254de707c25ce14c1cb05c6b72eacfac..1565b02f5c8446b3b7102e33f0821d2aa5ab731c 100644
--- a/vendor/cweagans/composer-patches/composer.json
+++ b/vendor/cweagans/composer-patches/composer.json
@@ -15,10 +15,10 @@
   ],
   "require": {
     "php": ">=5.3.0",
-    "composer-plugin-api": "^1.0"
+    "composer-plugin-api": "^1.0 || ^2.0"
   },
   "require-dev": {
-    "composer/composer": "~1.0",
+    "composer/composer": "~1.0 || ~2.0",
     "phpunit/phpunit": "~4.6"
   },
   "autoload": {
diff --git a/vendor/cweagans/composer-patches/composer.lock b/vendor/cweagans/composer-patches/composer.lock
index 2ca41b42d1318cdbd33ec7701e5eadb7512fcb1e..d5fe1777cc5c5f3d6d41da5842c6c469867f5542 100644
--- a/vendor/cweagans/composer-patches/composer.lock
+++ b/vendor/cweagans/composer-patches/composer.lock
@@ -1,47 +1,116 @@
 {
     "_readme": [
         "This file locks the dependencies of your project to a known state",
-        "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
+        "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "This file is @generated automatically"
     ],
-    "hash": "a2cd6826c202b7ebefe3050efc2a7b7f",
-    "content-hash": "0ed9361502c0f5f22a5b440c16640193",
+    "content-hash": "4a5c841252204815536a37cad51d347b",
     "packages": [],
     "packages-dev": [
+        {
+            "name": "composer/ca-bundle",
+            "version": "dev-master",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/composer/ca-bundle.git",
+                "reference": "95c63ab2117a72f48f5a55da9740a3273d45b7fd"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/composer/ca-bundle/zipball/95c63ab2117a72f48f5a55da9740a3273d45b7fd",
+                "reference": "95c63ab2117a72f48f5a55da9740a3273d45b7fd",
+                "shasum": ""
+            },
+            "require": {
+                "ext-openssl": "*",
+                "ext-pcre": "*",
+                "php": "^5.3.2 || ^7.0 || ^8.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^4.8.35 || ^5.7 || 6.5 - 8",
+                "psr/log": "^1.0",
+                "symfony/process": "^2.5 || ^3.0 || ^4.0 || ^5.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Composer\\CaBundle\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Jordi Boggiano",
+                    "email": "j.boggiano@seld.be",
+                    "homepage": "http://seld.be"
+                }
+            ],
+            "description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.",
+            "keywords": [
+                "cabundle",
+                "cacert",
+                "certificate",
+                "ssl",
+                "tls"
+            ],
+            "funding": [
+                {
+                    "url": "https://packagist.com",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/composer/composer",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-04-08T08:27:21+00:00"
+        },
         {
             "name": "composer/composer",
             "version": "dev-master",
             "source": {
                 "type": "git",
                 "url": "https://github.com/composer/composer.git",
-                "reference": "a54f84f05f915c6d42bed94de0cdcb4406a4707b"
+                "reference": "870fdc59dfcffe0bd2d43ca2de4235761d0dec7a"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/composer/composer/zipball/f2d606ae0c705907d8bfa1c6f884bced1255b827",
-                "reference": "a54f84f05f915c6d42bed94de0cdcb4406a4707b",
+                "url": "https://api.github.com/repos/composer/composer/zipball/870fdc59dfcffe0bd2d43ca2de4235761d0dec7a",
+                "reference": "870fdc59dfcffe0bd2d43ca2de4235761d0dec7a",
                 "shasum": ""
             },
             "require": {
-                "composer/semver": "^1.0",
-                "composer/spdx-licenses": "^1.0",
-                "justinrainbow/json-schema": "^1.4.4",
-                "php": ">=5.3.2",
-                "seld/cli-prompt": "~1.0",
-                "seld/jsonlint": "~1.0",
-                "seld/phar-utils": "~1.0",
-                "symfony/console": "~2.5",
-                "symfony/filesystem": "~2.5",
-                "symfony/finder": "~2.2",
-                "symfony/process": "~2.1"
+                "composer/ca-bundle": "^1.0",
+                "composer/semver": "^3.0",
+                "composer/spdx-licenses": "^1.2",
+                "composer/xdebug-handler": "^1.1",
+                "justinrainbow/json-schema": "^5.2.10",
+                "php": "^5.3.2 || ^7.0 || ^8.0",
+                "psr/log": "^1.0",
+                "react/promise": "^1.2 || ^2.7",
+                "seld/jsonlint": "^1.4",
+                "seld/phar-utils": "^1.0",
+                "symfony/console": "^2.8.52 || ^3.4.35 || ^4.4 || ^5.0",
+                "symfony/filesystem": "^2.8.52 || ^3.4.35 || ^4.4 || ^5.0",
+                "symfony/finder": "^2.8.52 || ^3.4.35 || ^4.4 || ^5.0",
+                "symfony/process": "^2.8.52 || ^3.4.35 || ^4.4 || ^5.0"
             },
             "require-dev": {
-                "phpunit/phpunit": "~4.5|^5.0.5",
-                "phpunit/phpunit-mock-objects": "2.3.0|~3.0"
+                "phpspec/prophecy": "^1.10",
+                "symfony/phpunit-bridge": "^4.2 || ^5.0"
             },
             "suggest": {
                 "ext-openssl": "Enabling the openssl extension allows you to access https URLs for repositories and packages",
-                "ext-zip": "Enabling the zip extension allows you to unzip archives, and allows gzip compression of all internet traffic"
+                "ext-zip": "Enabling the zip extension allows you to unzip archives",
+                "ext-zlib": "Allow gzip compression of HTTP requests"
             },
             "bin": [
                 "bin/composer"
@@ -49,12 +118,12 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.0-dev"
+                    "dev-master": "2.0-dev"
                 }
             },
             "autoload": {
-                "psr-0": {
-                    "Composer": "src/"
+                "psr-4": {
+                    "Composer\\": "src/Composer"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -65,48 +134,62 @@
                 {
                     "name": "Nils Adermann",
                     "email": "naderman@naderman.de",
-                    "homepage": "http://www.naderman.de"
+                    "homepage": "https://www.naderman.de"
                 },
                 {
                     "name": "Jordi Boggiano",
                     "email": "j.boggiano@seld.be",
-                    "homepage": "http://seld.be"
+                    "homepage": "https://seld.be"
                 }
             ],
-            "description": "Composer helps you declare, manage and install dependencies of PHP projects, ensuring you have the right stack everywhere.",
+            "description": "Composer helps you declare, manage and install dependencies of PHP projects. It ensures you have the right stack everywhere.",
             "homepage": "https://getcomposer.org/",
             "keywords": [
                 "autoload",
                 "dependency",
                 "package"
             ],
-            "time": "2015-10-13 13:09:04"
+            "funding": [
+                {
+                    "url": "https://packagist.com",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/composer",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/composer/composer",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-15T15:02:16+00:00"
         },
         {
             "name": "composer/semver",
-            "version": "1.0.0",
+            "version": "dev-master",
             "source": {
                 "type": "git",
                 "url": "https://github.com/composer/semver.git",
-                "reference": "d0e1ccc6d44ab318b758d709e19176037da6b1ba"
+                "reference": "00915994bb1de62e750ae279669c9c5a57379957"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/composer/semver/zipball/d0e1ccc6d44ab318b758d709e19176037da6b1ba",
-                "reference": "d0e1ccc6d44ab318b758d709e19176037da6b1ba",
+                "url": "https://api.github.com/repos/composer/semver/zipball/00915994bb1de62e750ae279669c9c5a57379957",
+                "reference": "00915994bb1de62e750ae279669c9c5a57379957",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.2"
+                "php": "^5.3.2 || ^7.0 || ^8.0"
             },
             "require-dev": {
-                "phpunit/phpunit": "~4.5",
-                "phpunit/phpunit-mock-objects": "~2.3"
+                "phpstan/phpstan": "^0.12.19",
+                "symfony/phpunit-bridge": "^4.2 || ^5"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "0.1-dev"
+                    "dev-master": "3.x-dev"
                 }
             },
             "autoload": {
@@ -119,10 +202,6 @@
                 "MIT"
             ],
             "authors": [
-                {
-                    "name": "Rob Bast",
-                    "email": "rob.bast@gmail.com"
-                },
                 {
                     "name": "Nils Adermann",
                     "email": "naderman@naderman.de",
@@ -132,6 +211,11 @@
                     "name": "Jordi Boggiano",
                     "email": "j.boggiano@seld.be",
                     "homepage": "http://seld.be"
+                },
+                {
+                    "name": "Rob Bast",
+                    "email": "rob.bast@gmail.com",
+                    "homepage": "http://robbast.nl"
                 }
             ],
             "description": "Semver library that offers utilities, version constraint parsing and validation.",
@@ -141,7 +225,21 @@
                 "validation",
                 "versioning"
             ],
-            "time": "2015-09-21 09:42:36"
+            "funding": [
+                {
+                    "url": "https://packagist.com",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/composer",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/composer/composer",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-05-31T11:44:06+00:00"
         },
         {
             "name": "composer/spdx-licenses",
@@ -149,20 +247,19 @@
             "source": {
                 "type": "git",
                 "url": "https://github.com/composer/spdx-licenses.git",
-                "reference": "b2dbc76d1c3f81f33857cdd49c0be6ce7b87897d"
+                "reference": "6946f785871e2314c60b4524851f3702ea4f2223"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/composer/spdx-licenses/zipball/022fc25ca664f612b1e7007e0d87642ef489f000",
-                "reference": "b2dbc76d1c3f81f33857cdd49c0be6ce7b87897d",
+                "url": "https://api.github.com/repos/composer/spdx-licenses/zipball/6946f785871e2314c60b4524851f3702ea4f2223",
+                "reference": "6946f785871e2314c60b4524851f3702ea4f2223",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.2"
+                "php": "^5.3.2 || ^7.0 || ^8.0"
             },
             "require-dev": {
-                "phpunit/phpunit": "~4.5",
-                "phpunit/phpunit-mock-objects": "~2.3"
+                "phpunit/phpunit": "^4.8.35 || ^5.7 || 6.5 - 7"
             },
             "type": "library",
             "extra": {
@@ -202,7 +299,79 @@
                 "spdx",
                 "validator"
             ],
-            "time": "2015-10-05 11:33:06"
+            "funding": [
+                {
+                    "url": "https://packagist.com",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/composer",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/composer/composer",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-15T15:35:07+00:00"
+        },
+        {
+            "name": "composer/xdebug-handler",
+            "version": "1.4.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/composer/xdebug-handler.git",
+                "reference": "fa2aaf99e2087f013a14f7432c1cd2dd7d8f1f51"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/fa2aaf99e2087f013a14f7432c1cd2dd7d8f1f51",
+                "reference": "fa2aaf99e2087f013a14f7432c1cd2dd7d8f1f51",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^5.3.2 || ^7.0 || ^8.0",
+                "psr/log": "^1.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^4.8.35 || ^5.7 || 6.5 - 8"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Composer\\XdebugHandler\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "John Stevenson",
+                    "email": "john-stevenson@blueyonder.co.uk"
+                }
+            ],
+            "description": "Restarts a process without Xdebug.",
+            "keywords": [
+                "Xdebug",
+                "performance"
+            ],
+            "funding": [
+                {
+                    "url": "https://packagist.com",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/composer",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/composer/composer",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-06-04T11:16:35+00:00"
         },
         {
             "name": "doctrine/instantiator",
@@ -256,29 +425,29 @@
                 "constructor",
                 "instantiate"
             ],
-            "time": "2015-06-14 21:17:01"
+            "time": "2015-06-14T21:17:01+00:00"
         },
         {
             "name": "justinrainbow/json-schema",
-            "version": "1.5.0",
+            "version": "5.x-dev",
             "source": {
                 "type": "git",
                 "url": "https://github.com/justinrainbow/json-schema.git",
-                "reference": "a4bee9f4b344b66e0a0d96c7afae1e92edf385fe"
+                "reference": "2ba9c8c862ecd5510ed16c6340aa9f6eadb4f31b"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/a4bee9f4b344b66e0a0d96c7afae1e92edf385fe",
-                "reference": "a4bee9f4b344b66e0a0d96c7afae1e92edf385fe",
+                "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/2ba9c8c862ecd5510ed16c6340aa9f6eadb4f31b",
+                "reference": "2ba9c8c862ecd5510ed16c6340aa9f6eadb4f31b",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.2"
+                "php": ">=5.3.3"
             },
             "require-dev": {
-                "json-schema/json-schema-test-suite": "1.1.0",
-                "phpdocumentor/phpdocumentor": "~2",
-                "phpunit/phpunit": "~3.7"
+                "friendsofphp/php-cs-fixer": "~2.2.20||~2.15.1",
+                "json-schema/json-schema-test-suite": "1.2.0",
+                "phpunit/phpunit": "^4.8.35"
             },
             "bin": [
                 "bin/validate-json"
@@ -286,7 +455,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.4.x-dev"
+                    "dev-master": "5.0.x-dev"
                 }
             },
             "autoload": {
@@ -296,7 +465,7 @@
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "BSD-3-Clause"
+                "MIT"
             ],
             "authors": [
                 {
@@ -322,7 +491,7 @@
                 "json",
                 "schema"
             ],
-            "time": "2015-09-08 22:28:04"
+            "time": "2020-05-27T16:41:55+00:00"
         },
         {
             "name": "phpdocumentor/reflection-docblock",
@@ -371,7 +540,7 @@
                     "email": "mike.vanriel@naenius.com"
                 }
             ],
-            "time": "2015-02-03 12:10:50"
+            "time": "2015-02-03T12:10:50+00:00"
         },
         {
             "name": "phpspec/prophecy",
@@ -383,7 +552,7 @@
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpspec/prophecy/zipball/b02221e42163be673f9b44a0bc92a8b4907a7c6d",
+                "url": "https://api.github.com/repos/phpspec/prophecy/zipball/4f9b1eaf0a7da77c362f8d91cbc68ab1f4718d62",
                 "reference": "4f9b1eaf0a7da77c362f8d91cbc68ab1f4718d62",
                 "shasum": ""
             },
@@ -431,7 +600,7 @@
                 "spy",
                 "stub"
             ],
-            "time": "2015-09-22 14:49:23"
+            "time": "2015-09-22T14:49:23+00:00"
         },
         {
             "name": "phpunit/php-code-coverage",
@@ -493,7 +662,7 @@
                 "testing",
                 "xunit"
             ],
-            "time": "2015-10-06 15:47:00"
+            "time": "2015-10-06T15:47:00+00:00"
         },
         {
             "name": "phpunit/php-file-iterator",
@@ -540,7 +709,7 @@
                 "filesystem",
                 "iterator"
             ],
-            "time": "2015-06-21 13:08:43"
+            "time": "2015-06-21T13:08:43+00:00"
         },
         {
             "name": "phpunit/php-text-template",
@@ -581,7 +750,7 @@
             "keywords": [
                 "template"
             ],
-            "time": "2015-06-21 13:50:34"
+            "time": "2015-06-21T13:50:34+00:00"
         },
         {
             "name": "phpunit/php-timer",
@@ -622,7 +791,7 @@
             "keywords": [
                 "timer"
             ],
-            "time": "2015-06-21 08:01:12"
+            "time": "2015-06-21T08:01:12+00:00"
         },
         {
             "name": "phpunit/php-token-stream",
@@ -671,7 +840,7 @@
             "keywords": [
                 "tokenizer"
             ],
-            "time": "2015-09-23 14:46:55"
+            "time": "2015-09-23T14:46:55+00:00"
         },
         {
             "name": "phpunit/phpunit",
@@ -743,7 +912,7 @@
                 "testing",
                 "xunit"
             ],
-            "time": "2015-10-14 13:49:40"
+            "time": "2015-10-14T13:49:40+00:00"
         },
         {
             "name": "phpunit/phpunit-mock-objects",
@@ -799,7 +968,150 @@
                 "mock",
                 "xunit"
             ],
-            "time": "2015-10-02 06:51:40"
+            "abandoned": true,
+            "time": "2015-10-02T06:51:40+00:00"
+        },
+        {
+            "name": "psr/container",
+            "version": "dev-master",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/php-fig/container.git",
+                "reference": "fc1bc363ecf887921e3897c7b1dad3587ae154eb"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/php-fig/container/zipball/fc1bc363ecf887921e3897c7b1dad3587ae154eb",
+                "reference": "fc1bc363ecf887921e3897c7b1dad3587ae154eb",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Psr\\Container\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "PHP-FIG",
+                    "homepage": "http://www.php-fig.org/"
+                }
+            ],
+            "description": "Common Container Interface (PHP FIG PSR-11)",
+            "homepage": "https://github.com/php-fig/container",
+            "keywords": [
+                "PSR-11",
+                "container",
+                "container-interface",
+                "container-interop",
+                "psr"
+            ],
+            "time": "2019-10-04T14:07:35+00:00"
+        },
+        {
+            "name": "psr/log",
+            "version": "dev-master",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/php-fig/log.git",
+                "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc",
+                "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.1.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Psr\\Log\\": "Psr/Log/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "PHP-FIG",
+                    "homepage": "http://www.php-fig.org/"
+                }
+            ],
+            "description": "Common interface for logging libraries",
+            "homepage": "https://github.com/php-fig/log",
+            "keywords": [
+                "log",
+                "psr",
+                "psr-3"
+            ],
+            "time": "2020-03-23T09:12:05+00:00"
+        },
+        {
+            "name": "react/promise",
+            "version": "2.x-dev",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/reactphp/promise.git",
+                "reference": "f3cff96a19736714524ca0dd1d4130de73dbbbc4"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/reactphp/promise/zipball/f3cff96a19736714524ca0dd1d4130de73dbbbc4",
+                "reference": "f3cff96a19736714524ca0dd1d4130de73dbbbc4",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.4.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^7.0 || ^6.5 || ^5.7 || ^4.8.36"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "React\\Promise\\": "src/"
+                },
+                "files": [
+                    "src/functions_include.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Jan Sorgalla",
+                    "email": "jsorgalla@gmail.com"
+                }
+            ],
+            "description": "A lightweight implementation of CommonJS Promises/A for PHP",
+            "keywords": [
+                "promise",
+                "promises"
+            ],
+            "time": "2020-05-12T15:16:56+00:00"
         },
         {
             "name": "sebastian/comparator",
@@ -863,7 +1175,7 @@
                 "compare",
                 "equality"
             ],
-            "time": "2015-07-26 15:48:44"
+            "time": "2015-07-26T15:48:44+00:00"
         },
         {
             "name": "sebastian/diff",
@@ -875,7 +1187,7 @@
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/13edfd8706462032c2f52b4b862974dd46b71c9e",
+                "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/6899b3e33bfbd386d88b5eea5f65f563e8793051",
                 "reference": "6899b3e33bfbd386d88b5eea5f65f563e8793051",
                 "shasum": ""
             },
@@ -915,7 +1227,7 @@
             "keywords": [
                 "diff"
             ],
-            "time": "2015-06-22 14:15:55"
+            "time": "2015-06-22T14:15:55+00:00"
         },
         {
             "name": "sebastian/environment",
@@ -965,7 +1277,7 @@
                 "environment",
                 "hhvm"
             ],
-            "time": "2015-08-03 06:14:51"
+            "time": "2015-08-03T06:14:51+00:00"
         },
         {
             "name": "sebastian/exporter",
@@ -1032,7 +1344,7 @@
                 "export",
                 "exporter"
             ],
-            "time": "2015-08-09 04:23:41"
+            "time": "2015-08-09T04:23:41+00:00"
         },
         {
             "name": "sebastian/global-state",
@@ -1083,7 +1395,7 @@
             "keywords": [
                 "global state"
             ],
-            "time": "2015-10-12 03:26:01"
+            "time": "2015-10-12T03:26:01+00:00"
         },
         {
             "name": "sebastian/recursion-context",
@@ -1095,7 +1407,7 @@
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/7ff5b1b3dcc55b8ab8ae61ef99d4730940856ee7",
+                "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/994d4a811bafe801fb06dccbee797863ba2792ba",
                 "reference": "994d4a811bafe801fb06dccbee797863ba2792ba",
                 "shasum": ""
             },
@@ -1136,7 +1448,7 @@
             ],
             "description": "Provides functionality to recursively process PHP variables",
             "homepage": "http://www.github.com/sebastianbergmann/recursion-context",
-            "time": "2015-06-21 08:04:50"
+            "time": "2015-06-21T08:04:50+00:00"
         },
         {
             "name": "sebastian/version",
@@ -1171,72 +1483,27 @@
             ],
             "description": "Library that helps with managing the version number of Git-hosted PHP projects",
             "homepage": "https://github.com/sebastianbergmann/version",
-            "time": "2015-06-21 13:59:46"
-        },
-        {
-            "name": "seld/cli-prompt",
-            "version": "dev-master",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/Seldaek/cli-prompt.git",
-                "reference": "fe114c7a6ac5cb0ce76932ae4017024d9842a49c"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/Seldaek/cli-prompt/zipball/b27db1514f7d7bb7a366ad95d4eb2b17140a0691",
-                "reference": "fe114c7a6ac5cb0ce76932ae4017024d9842a49c",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Seld\\CliPrompt\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Jordi Boggiano",
-                    "email": "j.boggiano@seld.be"
-                }
-            ],
-            "description": "Allows you to prompt for user input on the command line, and optionally hide the characters they type",
-            "keywords": [
-                "cli",
-                "console",
-                "hidden",
-                "input",
-                "prompt"
-            ],
-            "time": "2015-04-30 20:24:49"
+            "time": "2015-06-21T13:59:46+00:00"
         },
         {
             "name": "seld/jsonlint",
-            "version": "1.3.1",
+            "version": "1.8.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/Seldaek/jsonlint.git",
-                "reference": "863ae85c6d3ef60ca49cb12bd051c4a0648c40c4"
+                "reference": "ff2aa5420bfbc296cf6a0bc785fa5b35736de7c1"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/863ae85c6d3ef60ca49cb12bd051c4a0648c40c4",
-                "reference": "863ae85c6d3ef60ca49cb12bd051c4a0648c40c4",
+                "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/ff2aa5420bfbc296cf6a0bc785fa5b35736de7c1",
+                "reference": "ff2aa5420bfbc296cf6a0bc785fa5b35736de7c1",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.0"
+                "php": "^5.3 || ^7.0 || ^8.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0"
             },
             "bin": [
                 "bin/jsonlint"
@@ -1265,20 +1532,30 @@
                 "parser",
                 "validator"
             ],
-            "time": "2015-01-04 21:18:15"
-        },
-        {
-            "name": "seld/phar-utils",
-            "version": "dev-master",
+            "funding": [
+                {
+                    "url": "https://github.com/Seldaek",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/seld/jsonlint",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-04-30T19:05:18+00:00"
+        },
+        {
+            "name": "seld/phar-utils",
+            "version": "dev-master",
             "source": {
                 "type": "git",
                 "url": "https://github.com/Seldaek/phar-utils.git",
-                "reference": "7009b5139491975ef6486545a39f3e6dad5ac30a"
+                "reference": "8674b1d84ffb47cc59a101f5d5a3b61e87d23796"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/Seldaek/phar-utils/zipball/7009b5139491975ef6486545a39f3e6dad5ac30a",
-                "reference": "7009b5139491975ef6486545a39f3e6dad5ac30a",
+                "url": "https://api.github.com/repos/Seldaek/phar-utils/zipball/8674b1d84ffb47cc59a101f5d5a3b61e87d23796",
+                "reference": "8674b1d84ffb47cc59a101f5d5a3b61e87d23796",
                 "shasum": ""
             },
             "require": {
@@ -1307,47 +1584,70 @@
             ],
             "description": "PHAR file format utilities, for when PHP phars you up",
             "keywords": [
-                "phra"
+                "phar"
             ],
-            "time": "2015-10-13 18:44:15"
+            "time": "2020-07-07T18:42:57+00:00"
         },
         {
             "name": "symfony/console",
-            "version": "2.8.x-dev",
+            "version": "dev-master",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/console.git",
-                "reference": "89a795226477f66745e8ea10415e769304114920"
+                "reference": "e4a70bd8c5a4382630197b7b87910b3fc0e6b526"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/console/zipball/56cc5caf051189720b8de974e4746090aaa10d44",
-                "reference": "89a795226477f66745e8ea10415e769304114920",
+                "url": "https://api.github.com/repos/symfony/console/zipball/e4a70bd8c5a4382630197b7b87910b3fc0e6b526",
+                "reference": "e4a70bd8c5a4382630197b7b87910b3fc0e6b526",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.9"
+                "php": ">=7.2.5",
+                "symfony/polyfill-mbstring": "~1.0",
+                "symfony/polyfill-php73": "^1.8",
+                "symfony/polyfill-php80": "^1.15",
+                "symfony/service-contracts": "^1.1|^2",
+                "symfony/string": "^5.1"
+            },
+            "conflict": {
+                "symfony/dependency-injection": "<4.4",
+                "symfony/dotenv": "<5.1",
+                "symfony/event-dispatcher": "<4.4",
+                "symfony/lock": "<4.4",
+                "symfony/process": "<4.4"
+            },
+            "provide": {
+                "psr/log-implementation": "1.0"
             },
             "require-dev": {
                 "psr/log": "~1.0",
-                "symfony/event-dispatcher": "~2.1|~3.0.0",
-                "symfony/process": "~2.1|~3.0.0"
+                "symfony/config": "^4.4|^5.0",
+                "symfony/dependency-injection": "^4.4|^5.0",
+                "symfony/event-dispatcher": "^4.4|^5.0",
+                "symfony/lock": "^4.4|^5.0",
+                "symfony/process": "^4.4|^5.0",
+                "symfony/var-dumper": "^4.4|^5.0"
             },
             "suggest": {
                 "psr/log": "For using the console logger",
                 "symfony/event-dispatcher": "",
+                "symfony/lock": "",
                 "symfony/process": ""
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.8-dev"
+                    "dev-master": "5.2-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
                     "Symfony\\Component\\Console\\": ""
-                }
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
@@ -1365,35 +1665,59 @@
             ],
             "description": "Symfony Console Component",
             "homepage": "https://symfony.com",
-            "time": "2015-10-12 10:31:17"
+            "keywords": [
+                "cli",
+                "command line",
+                "console",
+                "terminal"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-06T13:25:45+00:00"
         },
         {
             "name": "symfony/filesystem",
-            "version": "2.8.x-dev",
+            "version": "dev-master",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/filesystem.git",
-                "reference": "fc3fe52fef85e1f3e7775ffad92539e16c20e0af"
+                "reference": "e7550993849f986f01a9161b302d4aed8d4aab0a"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/filesystem/zipball/65cb36b6539b1d446527d60457248f30d045464d",
-                "reference": "fc3fe52fef85e1f3e7775ffad92539e16c20e0af",
+                "url": "https://api.github.com/repos/symfony/filesystem/zipball/e7550993849f986f01a9161b302d4aed8d4aab0a",
+                "reference": "e7550993849f986f01a9161b302d4aed8d4aab0a",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.9"
+                "php": ">=7.2.5",
+                "symfony/polyfill-ctype": "~1.8"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.8-dev"
+                    "dev-master": "5.2-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
                     "Symfony\\Component\\Filesystem\\": ""
-                }
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
@@ -1411,35 +1735,52 @@
             ],
             "description": "Symfony Filesystem Component",
             "homepage": "https://symfony.com",
-            "time": "2015-10-11 08:29:26"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-05-30T20:38:10+00:00"
         },
         {
             "name": "symfony/finder",
-            "version": "2.8.x-dev",
+            "version": "dev-master",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/finder.git",
-                "reference": "dcd5aaba34ca332abb7f33ec554ebd4d829cb202"
+                "reference": "2a63a45741144325f84d28ea1e67bc1b669b1748"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/finder/zipball/877bb4b16ea573cc8c024e9590888fcf7eb7e0f7",
-                "reference": "dcd5aaba34ca332abb7f33ec554ebd4d829cb202",
+                "url": "https://api.github.com/repos/symfony/finder/zipball/2a63a45741144325f84d28ea1e67bc1b669b1748",
+                "reference": "2a63a45741144325f84d28ea1e67bc1b669b1748",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.9"
+                "php": ">=7.2.5"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.8-dev"
+                    "dev-master": "5.2-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
                     "Symfony\\Component\\Finder\\": ""
-                }
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
@@ -1457,35 +1798,521 @@
             ],
             "description": "Symfony Finder Component",
             "homepage": "https://symfony.com",
-            "time": "2015-10-11 08:29:26"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-05-20T17:44:07+00:00"
+        },
+        {
+            "name": "symfony/polyfill-ctype",
+            "version": "dev-master",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-ctype.git",
+                "reference": "1c302646f6efc070cd46856e600e5e0684d6b454"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/1c302646f6efc070cd46856e600e5e0684d6b454",
+                "reference": "1c302646f6efc070cd46856e600e5e0684d6b454",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "suggest": {
+                "ext-ctype": "For best performance"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Polyfill\\Ctype\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Gert de Pagter",
+                    "email": "BackEndTea@gmail.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill for ctype functions",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "ctype",
+                "polyfill",
+                "portable"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-14T12:35:20+00:00"
+        },
+        {
+            "name": "symfony/polyfill-intl-grapheme",
+            "version": "dev-master",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-intl-grapheme.git",
+                "reference": "b740103edbdcc39602239ee8860f0f45a8eb9aa5"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/b740103edbdcc39602239ee8860f0f45a8eb9aa5",
+                "reference": "b740103edbdcc39602239ee8860f0f45a8eb9aa5",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "suggest": {
+                "ext-intl": "For best performance"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Polyfill\\Intl\\Grapheme\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill for intl's grapheme_* functions",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "grapheme",
+                "intl",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-14T12:35:20+00:00"
+        },
+        {
+            "name": "symfony/polyfill-intl-normalizer",
+            "version": "dev-master",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-intl-normalizer.git",
+                "reference": "37078a8dd4a2a1e9ab0231af7c6cb671b2ed5a7e"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/37078a8dd4a2a1e9ab0231af7c6cb671b2ed5a7e",
+                "reference": "37078a8dd4a2a1e9ab0231af7c6cb671b2ed5a7e",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "suggest": {
+                "ext-intl": "For best performance"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Polyfill\\Intl\\Normalizer\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
+                ],
+                "classmap": [
+                    "Resources/stubs"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill for intl's Normalizer class and related functions",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "intl",
+                "normalizer",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-14T12:35:20+00:00"
+        },
+        {
+            "name": "symfony/polyfill-mbstring",
+            "version": "dev-master",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-mbstring.git",
+                "reference": "a6977d63bf9a0ad4c65cd352709e230876f9904a"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/a6977d63bf9a0ad4c65cd352709e230876f9904a",
+                "reference": "a6977d63bf9a0ad4c65cd352709e230876f9904a",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "suggest": {
+                "ext-mbstring": "For best performance"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Polyfill\\Mbstring\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill for the Mbstring extension",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "mbstring",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-14T12:35:20+00:00"
+        },
+        {
+            "name": "symfony/polyfill-php73",
+            "version": "dev-master",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-php73.git",
+                "reference": "fffa1a52a023e782cdcc221d781fe1ec8f87fcca"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fffa1a52a023e782cdcc221d781fe1ec8f87fcca",
+                "reference": "fffa1a52a023e782cdcc221d781fe1ec8f87fcca",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Polyfill\\Php73\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
+                ],
+                "classmap": [
+                    "Resources/stubs"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-14T12:35:20+00:00"
+        },
+        {
+            "name": "symfony/polyfill-php80",
+            "version": "dev-master",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-php80.git",
+                "reference": "d87d5766cbf48d72388a9f6b85f280c8ad51f981"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/d87d5766cbf48d72388a9f6b85f280c8ad51f981",
+                "reference": "d87d5766cbf48d72388a9f6b85f280c8ad51f981",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.0.8"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.18-dev"
+                },
+                "thanks": {
+                    "name": "symfony/polyfill",
+                    "url": "https://github.com/symfony/polyfill"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Polyfill\\Php80\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
+                ],
+                "classmap": [
+                    "Resources/stubs"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Ion Bazan",
+                    "email": "ion.bazan@gmail.com"
+                },
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-14T12:35:20+00:00"
         },
         {
             "name": "symfony/process",
-            "version": "2.8.x-dev",
+            "version": "dev-master",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/process.git",
-                "reference": "4e1daf58b375ea7c506d525dc7801df1c9a6ebbd"
+                "reference": "d158a452d952049e0e55b7cfe5f360c973edc57c"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/process/zipball/7dedd5b60550f33dca16dd7e94ef8aca8b67bbfe",
-                "reference": "4e1daf58b375ea7c506d525dc7801df1c9a6ebbd",
+                "url": "https://api.github.com/repos/symfony/process/zipball/d158a452d952049e0e55b7cfe5f360c973edc57c",
+                "reference": "d158a452d952049e0e55b7cfe5f360c973edc57c",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.9"
+                "php": ">=7.2.5",
+                "symfony/polyfill-php80": "^1.15"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.8-dev"
+                    "dev-master": "5.2-dev"
                 }
             },
             "autoload": {
                 "psr-4": {
                     "Symfony\\Component\\Process\\": ""
-                }
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
@@ -1503,7 +2330,182 @@
             ],
             "description": "Symfony Process Component",
             "homepage": "https://symfony.com",
-            "time": "2015-10-11 08:29:26"
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-06T13:25:45+00:00"
+        },
+        {
+            "name": "symfony/service-contracts",
+            "version": "dev-master",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/service-contracts.git",
+                "reference": "58c7475e5457c5492c26cc740cc0ad7464be9442"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/service-contracts/zipball/58c7475e5457c5492c26cc740cc0ad7464be9442",
+                "reference": "58c7475e5457c5492c26cc740cc0ad7464be9442",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.2.5",
+                "psr/container": "^1.0"
+            },
+            "suggest": {
+                "symfony/service-implementation": ""
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.1-dev"
+                },
+                "thanks": {
+                    "name": "symfony/contracts",
+                    "url": "https://github.com/symfony/contracts"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Contracts\\Service\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Generic abstractions related to writing services",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "abstractions",
+                "contracts",
+                "decoupling",
+                "interfaces",
+                "interoperability",
+                "standards"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-06T13:23:11+00:00"
+        },
+        {
+            "name": "symfony/string",
+            "version": "dev-master",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/string.git",
+                "reference": "b7914561c03f8d78f83eec3ec4502adbdc343c48"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/string/zipball/b7914561c03f8d78f83eec3ec4502adbdc343c48",
+                "reference": "b7914561c03f8d78f83eec3ec4502adbdc343c48",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.2.5",
+                "symfony/polyfill-ctype": "~1.8",
+                "symfony/polyfill-intl-grapheme": "~1.0",
+                "symfony/polyfill-intl-normalizer": "~1.0",
+                "symfony/polyfill-mbstring": "~1.0",
+                "symfony/polyfill-php80": "~1.15"
+            },
+            "require-dev": {
+                "symfony/error-handler": "^4.4|^5.0",
+                "symfony/http-client": "^4.4|^5.0",
+                "symfony/translation-contracts": "^1.1|^2",
+                "symfony/var-exporter": "^4.4|^5.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "5.2-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\String\\": ""
+                },
+                "files": [
+                    "Resources/functions.php"
+                ],
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony String component",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "grapheme",
+                "i18n",
+                "string",
+                "unicode",
+                "utf-8",
+                "utf8"
+            ],
+            "funding": [
+                {
+                    "url": "https://symfony.com/sponsor",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2020-07-08T08:28:10+00:00"
         },
         {
             "name": "symfony/yaml",
@@ -1549,7 +2551,7 @@
             ],
             "description": "Symfony Yaml Component",
             "homepage": "https://symfony.com",
-            "time": "2015-10-13 16:01:35"
+            "time": "2015-10-13T16:01:35+00:00"
         }
     ],
     "aliases": [],
@@ -1558,7 +2560,9 @@
     "prefer-stable": false,
     "prefer-lowest": false,
     "platform": {
-        "php": ">=5.3.0"
+        "php": ">=5.3.0",
+        "composer-plugin-api": "^1.0 || ^2.0"
     },
-    "platform-dev": []
+    "platform-dev": [],
+    "plugin-api-version": "1.1.0"
 }
diff --git a/vendor/cweagans/composer-patches/src/Patches.php b/vendor/cweagans/composer-patches/src/Patches.php
index 70c5b834213b66a49dc9e8909dd8a8a37af63a01..0e36c7ff356a43f8c1035c8a79b15f47aff3cbc0 100644
--- a/vendor/cweagans/composer-patches/src/Patches.php
+++ b/vendor/cweagans/composer-patches/src/Patches.php
@@ -115,7 +115,7 @@ public function checkPatches(Event $event) {
           $this->installedPatches[$package->getName()] = $extra['patches'];
         }
         $patches = isset($extra['patches']) ? $extra['patches'] : array();
-        $tmp_patches = array_merge_recursive($tmp_patches, $patches);
+        $tmp_patches = $this->arrayMergeRecursiveDistinct($tmp_patches, $patches);
       }
 
       if ($tmp_patches == FALSE) {
@@ -129,7 +129,7 @@ public function checkPatches(Event $event) {
           $package_name = $package->getName();
           $extra = $package->getExtra();
           $has_patches = isset($tmp_patches[$package_name]);
-          $has_applied_patches = isset($extra['patches_applied']);
+          $has_applied_patches = isset($extra['patches_applied']) && count($extra['patches_applied']) > 0;
           if (($has_patches && !$has_applied_patches)
             || (!$has_patches && $has_applied_patches)
             || ($has_patches && $has_applied_patches && $tmp_patches[$package_name] !== $extra['patches_applied'])) {
@@ -176,7 +176,7 @@ public function gatherPatches(PackageEvent $event) {
     $operations = $event->getOperations();
     $this->io->write('<info>Gathering patches for dependencies. This might take a minute.</info>');
     foreach ($operations as $operation) {
-      if ($operation->getJobType() == 'install' || $operation->getJobType() == 'update') {
+      if ($operation instanceof InstallOperation || $operation instanceof UpdateOperation) {
         $package = $this->getPackageFromOperation($operation);
         $extra = $package->getExtra();
         if (isset($extra['patches'])) {
@@ -198,7 +198,7 @@ public function gatherPatches(PackageEvent $event) {
 
     // Merge installed patches from dependencies that did not receive an update.
     foreach ($this->installedPatches as $patches) {
-      $this->patches = array_merge_recursive($this->patches, $patches);
+      $this->patches = $this->arrayMergeRecursiveDistinct($this->patches, $patches);
     }
 
     // If we're in verbose mode, list the projects we're going to patch.
@@ -369,7 +369,14 @@ protected function getAndApplyPatch(RemoteFilesystem $downloader, $install_path,
 
       // Download file from remote filesystem to this location.
       $hostname = parse_url($patch_url, PHP_URL_HOST);
-      $downloader->copy($hostname, $patch_url, $filename, FALSE);
+
+      try {
+        $downloader->copy($hostname, $patch_url, $filename, false);
+      } catch (\Exception $e) {
+        // In case of an exception, retry once as the download might
+        // have failed due to intermittent network issues.
+        $downloader->copy($hostname, $patch_url, $filename, false);
+      }
     }
 
     // The order here is intentional. p1 is most likely to apply with git apply.
@@ -378,8 +385,9 @@ protected function getAndApplyPatch(RemoteFilesystem $downloader, $install_path,
     $patch_levels = array('-p1', '-p0', '-p2', '-p4');
 
     // Check for specified patch level for this package.
-    if (!empty($this->composer->getPackage()->getExtra()['patchLevel'][$package->getName()])){
-      $patch_levels = array($this->composer->getPackage()->getExtra()['patchLevel'][$package->getName()]);
+    $extra = $this->composer->getPackage()->getExtra();
+    if (!empty($extra['patchLevel'][$package->getName()])){
+      $patch_levels = array($extra['patchLevel'][$package->getName()]);
     }
     // Attempt to apply with git apply.
     $patched = $this->applyPatchWithGit($install_path, $patch_levels, $filename);
@@ -547,4 +555,18 @@ protected function applyPatchWithGit($install_path, $patch_levels, $filename) {
     return $patched;
   }
 
+    /**
+     * {@inheritDoc}
+     */
+    public function deactivate(Composer $composer, IOInterface $io)
+    {
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public function uninstall(Composer $composer, IOInterface $io)
+    {
+    }
+
 }
diff --git a/vendor/dflydev/dot-access-configuration/README.md b/vendor/dflydev/dot-access-configuration/README.md
index b20c581a3fe087283213302f26fd043c3290b25e..bf387c68ffbd3e81a4969eb2e171b21dc90ceb7e 100644
--- a/vendor/dflydev/dot-access-configuration/README.md
+++ b/vendor/dflydev/dot-access-configuration/README.md
@@ -1,5 +1,4 @@
-Dot Access Configuration
-========================
+# Dot Access Configuration
 
 Given a deep data structure representing a configuration, access
 configuration by dot notation.
@@ -8,40 +7,37 @@ This library combines [dflydev/dot-access-data](https://github.com/dflydev/dflyd
 and [dflydev/placeholder-resolver](https://github.com/dflydev/dflydev-placeholder-resolver)
 to provide a complete configuration solution.
 
-
-Requirements
-------------
+## Requirements
 
  * PHP (5.3+)
  * [dflydev/dot-access-data](https://github.com/dflydev/dflydev-dot-access-data) (1.*)
  * [dflydev/placeholder-resolver](https://github.com/dflydev/dflydev-placeholder-resolver) (1.*)
  * [symfony/yaml](https://github.com/symfony/Yaml) (>2,<2.2) *(suggested)*
 
-
-Usage
------
+## Usage
 
 Generally one will use an implementation of `ConfigurationBuilderInterface`
 to build `ConfigurationInterface` instances. For example, to build a Configuration
 out of a YAML file, one would use the `YamlFileConfigurationBuilder`:
 
-    use Dflydev\DotAccessConfiguration\YamlFileConfigurationBuilder;
-    
-    $configurationBuilder = new YamlFileConfigurationBuilder('config/config.yml');
-    $configuration = $configurationBuilder->build();
+```php
+use Dflydev\DotAccessConfiguration\YamlFileConfigurationBuilder;
 
+$configurationBuilder = new YamlFileConfigurationBuilder('config/config.yml');
+$configuration = $configurationBuilder->build();
+```
 
 Once created, the Configuration instance behaves similarly to a Data
 instance from [dflydev/dot-access-data](https://github.com/dflydev/dflydev-dot-access-data).
 
-    $configuration->set('a.b.c', 'ABC');
-    $configuration->get('a.b.c');
-    $configuration->set('a.b.e', array('A', 'B', 'C'));
-    $configuration->append('a.b.e', 'D');
-
+```php
+$configuration->set('a.b.c', 'ABC');
+$configuration->get('a.b.c');
+$configuration->set('a.b.e', array('A', 'B', 'C'));
+$configuration->append('a.b.e', 'D');
+```
 
-Custom Configurations
----------------------
+## Custom Configurations
 
 Configuration Builders use Configuration Factories and Placeholder Resolver
 Factories behind the scenes in order to build a working configuration.
@@ -57,60 +53,59 @@ with the standard builders, one would need to implement
 `ConfigurationBuilderInterface`.
 
 If a Configuration is declared as follows:
+```php
+namespace MyProject;
 
-    namespace MyProject;
-    
-    use Dflydev\DotAccessConfiguration\Configuration;
-    
-    class MyConf extends Configuration
+use Dflydev\DotAccessConfiguration\Configuration;
+
+class MyConf extends Configuration
+{
+    public function someSpecialMethod()
     {
-        public function someSpecialMethod()
-        {
-            // Whatever you want here.
-        }
+        // Whatever you want here.
     }
+}
+```
 
 Create the following factory:
+```php
+namespace MyProject;
+
+use Dflydev\DotAccessConfiguration\ConfigurationFactoryInterface;
 
-    namespace MyProject;
-    
-    use Dflydev\DotAccessConfiguration\ConfigurationFactoryInterface;
-    
-    class MyConfFactory implements ConfigurationFactoryInterface
+class MyConfFactory implements ConfigurationFactoryInterface
+{
+    /**
+     * {@inheritdocs}
+     */
+    public function create()
     {
-        /**
-         * {@inheritdocs}
-         */
-        public function create()
-        {
-            return new MyConf;
-        }
+        return new MyConf;
     }
+}
+```
 
 To use the factory with any builder, inject it as follows:
+```php
+use Dflydev\DotAccessConfiguration\YamlFileConfigurationBuilder;
+use MyProject\MyConfFactory;
 
-    use Dflydev\DotAccessConfiguration\YamlFileConfigurationBuilder;
-    use MyProject\MyConfFactory;
-    
-    $configurationBuilder = new YamlFileConfigurationBuilder('config/config.yml');
-    
-    // Inject your custom Configuration Factory
-    $configurationBuilder->setConfigurationFactory(new MyConfFactory);
+$configurationBuilder = new YamlFileConfigurationBuilder('config/config.yml');
 
-    // Will now build instances of MyConfFactory instead of
-    // the standard Configuration implementation.
-    $configuration = $configurationBuilder->build();
+// Inject your custom Configuration Factory
+$configurationBuilder->setConfigurationFactory(new MyConfFactory);
 
+// Will now build instances of MyConfFactory instead of
+// the standard Configuration implementation.
+$configuration = $configurationBuilder->build();
+```
 
-License
--------
+## License
 
 This library is licensed under the New BSD License - see the LICENSE file
 for details.
 
-
-Community
----------
+## Community
 
 If you have questions or want to help out, join us in the
-[#dflydev](irc://irc.freenode.net/#dflydev) channel on irc.freenode.net.
\ No newline at end of file
+[#dflydev](irc://irc.freenode.net/#dflydev) channel on irc.freenode.net.
diff --git a/vendor/dflydev/dot-access-configuration/src/Dflydev/DotAccessConfiguration/YamlConfigurationBuilder.php b/vendor/dflydev/dot-access-configuration/src/Dflydev/DotAccessConfiguration/YamlConfigurationBuilder.php
index 06f2ded4a488a59df8f9f4b4ed839863e430ad1f..95c59d37624394338544b1735c398774d8907bc5 100644
--- a/vendor/dflydev/dot-access-configuration/src/Dflydev/DotAccessConfiguration/YamlConfigurationBuilder.php
+++ b/vendor/dflydev/dot-access-configuration/src/Dflydev/DotAccessConfiguration/YamlConfigurationBuilder.php
@@ -40,7 +40,7 @@ public function internalBuild(ConfigurationInterface $configuration)
     {
         if (null !== $this->input) {
             try{
-                $yml = Yaml::parse($this->input, true);
+                $yml = Yaml::parse($this->input, Yaml::PARSE_EXCEPTION_ON_INVALID_TYPE);
             } catch (\Exception $e) {
                 throw new InvalidArgumentException($e->getMessage(), 0, $e);
             }
diff --git a/vendor/dimsemenov/magnific-popup/.gitignore b/vendor/dimsemenov/magnific-popup/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..029644a21a805fb6960adf3401d08cfd11be7ba3
--- /dev/null
+++ b/vendor/dimsemenov/magnific-popup/.gitignore
@@ -0,0 +1,24 @@
+Gemfile.lock
+test/dest
+*.gem
+pkg/
+*.swp
+*~
+_site/
+.bundle/
+.DS_Store
+bbin/
+sftp-config*
+_site
+.htaccess
+private-*
+__article/
+node_modules
+_production
+all.min.css
+*.sublime-*
+website/dist/
+*.idea
+/.idea
+.node-version
+.sass-cache/
\ No newline at end of file
diff --git a/vendor/dimsemenov/magnific-popup/.jshintrc b/vendor/dimsemenov/magnific-popup/.jshintrc
new file mode 100644
index 0000000000000000000000000000000000000000..ba445972217f1d9ebe4f2d8dce996d624379a667
--- /dev/null
+++ b/vendor/dimsemenov/magnific-popup/.jshintrc
@@ -0,0 +1,21 @@
+{
+  "curly": false,
+  "eqeqeq": true,
+  "immed": true,
+  "latedef": true,
+  "newcap": true,
+  "noarg": true,
+  "sub": true,
+  "undef": false,
+  "unused": true,
+  "boss": true,
+  "eqnull": true,
+  "browser": true,
+
+  "predef": [
+    "define",
+    "module",
+    "mfp"
+  ],
+  "jquery": true
+}
\ No newline at end of file
diff --git a/vendor/dimsemenov/magnific-popup/.travis.yml b/vendor/dimsemenov/magnific-popup/.travis.yml
new file mode 100644
index 0000000000000000000000000000000000000000..70f317079005821e485e26568f0b09b44d51a275
--- /dev/null
+++ b/vendor/dimsemenov/magnific-popup/.travis.yml
@@ -0,0 +1,7 @@
+language: node_js
+
+node_js:
+  - "0.10"
+
+before_install:
+  - npm install grunt-cli -g
diff --git a/vendor/dimsemenov/magnific-popup/Gruntfile.js b/vendor/dimsemenov/magnific-popup/Gruntfile.js
new file mode 100644
index 0000000000000000000000000000000000000000..643ba4992c5e6140d7177831aac9968ee1769704
--- /dev/null
+++ b/vendor/dimsemenov/magnific-popup/Gruntfile.js
@@ -0,0 +1,213 @@
+/**
+ * 
+ * Run 'grunt' to generate JS and CSS in folder 'dist' and site in folder '_site'
+ * *
+ * Run 'grunt watch' to automatically regenerate '_site' when you change files in 'src' or in 'website'
+ * 
+ */
+
+module.exports = function(grunt) {
+
+  'use strict';
+
+  var jekyllConfig = "isLocal : false \r\n"+
+"permalink: /:title/ \r\n"+
+"exclude: ['.json', '.rvmrc', '.rbenv-version', 'README.md', 'Rakefile', 'changelog.md', 'compiler.jar', 'private', 'magnific-popup.sublime-project', 'magnific-popup.sublime-workspace', '.htaccess'] \r\n"+
+"auto: true \r\n"+
+"mfpversion: <%= pkg.version %> \r\n"+
+"pygments: true \r\n";
+
+  // Project configuration.
+  grunt.initConfig({
+    // Metadata.
+    pkg: grunt.file.readJSON('magnific-popup.jquery.json'),
+
+    banner: '/*! <%= pkg.title || pkg.name %> - v<%= pkg.version %> - ' +
+      '<%= grunt.template.today("yyyy-mm-dd") %>\n' +
+      '<%= pkg.homepage ? "* " + pkg.homepage + "\\n" : "" %>' +
+      '* Copyright (c) <%= grunt.template.today("yyyy") %> <%= pkg.author.name %>; */\n',
+
+    // Task configuration.
+    clean: {
+      files: ['dist']
+    },
+    
+    sass: {                            
+      dist: {                      
+        files: {      
+          'dist/magnific-popup.css': 'src/css/main.scss'
+        }
+      }
+    },
+
+    jshint: {
+      all: [
+        'Gruntfile.js',
+        'src/js/*.js'
+      ],
+      options: {
+        jshintrc: '.jshintrc'
+      }
+    },
+
+    mfpbuild: {
+      all: {
+        src: [
+          'inline',
+          'ajax',
+          'image',
+          'zoom',
+          'iframe',
+          'gallery',
+          'retina',
+        ],
+        basePath: 'src/js/',
+        dest: 'dist/jquery.magnific-popup.js',
+        banner: '<%= banner %>'
+      }
+    },
+    jekyll: {
+      dev: {
+        options: {
+          src: 'website',
+          dest: '_site',
+          url: 'local',
+          raw: jekyllConfig + "url: local"
+        }
+      },
+      production: {
+        options: {
+          src: 'website',
+          dest: '_production',
+          url: 'production',
+          raw: jekyllConfig + "url: production"
+        }
+        
+      }
+    },
+
+    copy: {
+      main: {
+        files: [
+          {expand:true, src: ['dist/**'], dest: 'website/'}
+        ]
+      },
+      dev: {
+        files: [
+          {expand:true, src: ['dist/**'], dest: '_site/'}
+        ]
+      }
+    },
+
+    uglify: {
+      my_target: {
+        files: {
+          'dist/jquery.magnific-popup.min.js': ['dist/jquery.magnific-popup.js']
+        },
+        preserveComments: 'some'
+      },
+      options: {
+        preserveComments: 'some'
+      }
+    },
+
+    watch: { // for development run 'grunt watch'
+      jekyll: {
+        files: ['website/**'],
+        tasks: ['jekyll:dev', 'copy:dev']
+      },
+      files: ['src/**'],
+      tasks: [ 'sass', 'mfpbuild', 'copy:dev', 'uglify']
+    },
+
+    cssmin: {
+      compress: {
+        files: {
+          "website/site-assets/all.min.css": ["website/site-assets/site.css", "website/dist/magnific-popup.css"]
+        }
+      }
+    }
+
+  });
+
+
+  // Makes Magnific Popup JS file.
+  // grunt mfpbuild --mfp-exclude=ajax,image
+  grunt.task.registerMultiTask('mfpbuild', 'Makes Magnific Popup JS file.', function() {
+
+    var files = this.data.src,
+        includes = grunt.option('mfp-exclude'),
+        basePath = this.data.basePath,
+        newContents = this.data.banner + ";(function (factory) { \n" +
+            "if (typeof define === 'function' && define.amd) { \n" +
+            " // AMD. Register as an anonymous module. \n" + 
+            " define(['jquery'], factory); \n" + 
+            " } else if (typeof exports === 'object') { \n" +
+            " // Node/CommonJS \n" +
+            " factory(require('jquery')); \n" +
+            " } else { \n" +
+            " // Browser globals \n" +
+            " factory(window.jQuery || window.Zepto); \n" +
+            " } \n" +
+            " }(function($) { \n";
+
+    if(includes) {
+      includes = includes.split(/[\s,]+/); // 'a,b,c' => ['a','b','c']
+      var removeA = function (arr) {
+          var what, a = arguments, L = a.length, ax;
+          while (L > 1 && arr.length) {
+              what = a[--L];
+              while ((ax= arr.indexOf(what)) !== -1) {
+                  arr.splice(ax, 1);
+              }
+          }
+          return arr;
+      };
+
+      includes.forEach(function( name ) {
+        if(name) {
+           
+           grunt.log.writeln( 'removed "'+name +'"' );
+           files = removeA(files, name);
+         }
+      });
+    }
+    
+    files.unshift('core');
+
+    grunt.log.writeln( 'Your build is made of:'+files );
+
+    files.forEach(function( name ) {
+      // Wrap each module with a pience of code to be able to exlude it, stolen for modernizr.com
+      newContents += "\n/*>>"+name+"*/\n"; 
+      newContents += grunt.file.read( basePath + name + '.js' ) + '\n';
+      newContents += "\n/*>>"+name+"*/\n"; 
+    });
+    newContents+= " _checkInstance(); }));";
+
+    grunt.file.write( this.data.dest, newContents );
+  });
+
+
+
+
+
+  // These plugins provide necessary tasks.
+  grunt.loadNpmTasks('grunt-contrib-clean');
+  grunt.loadNpmTasks('grunt-contrib-concat');
+  grunt.loadNpmTasks('grunt-contrib-uglify');
+  grunt.loadNpmTasks('grunt-contrib-jshint');
+  grunt.loadNpmTasks('grunt-contrib-watch');
+  grunt.loadNpmTasks('grunt-sass');
+  grunt.loadNpmTasks('grunt-contrib-copy');
+  grunt.loadNpmTasks('grunt-jekyll');
+  grunt.loadNpmTasks('grunt-contrib-cssmin');
+
+  // Default task.
+  grunt.registerTask('default', ['sass', 'mfpbuild', 'uglify', 'copy', 'jekyll:dev']);
+
+  grunt.registerTask('production', ['sass', 'mfpbuild', 'uglify', 'copy', 'cssmin', 'jekyll:production']);
+  grunt.registerTask('nosite', ['sass', 'mfpbuild', 'uglify']);
+  grunt.registerTask('hint', ['jshint']);
+
+};
diff --git a/vendor/dimsemenov/magnific-popup/LICENSE b/vendor/dimsemenov/magnific-popup/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..da7ee0c3f2df48d37041acfcf71cdc335cdc8a47
--- /dev/null
+++ b/vendor/dimsemenov/magnific-popup/LICENSE
@@ -0,0 +1,20 @@
+The MIT License (MIT)
+
+Copyright (c) 2014-2016 Dmitry Semenov, http://dimsemenov.com
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/vendor/dimsemenov/magnific-popup/README.md b/vendor/dimsemenov/magnific-popup/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..2c0314964f034dc9c602982d1c7c11166f4ec58f
--- /dev/null
+++ b/vendor/dimsemenov/magnific-popup/README.md
@@ -0,0 +1,76 @@
+# Magnific Popup Repository
+
+[![Build Status](https://travis-ci.org/dimsemenov/Magnific-Popup.png)](https://travis-ci.org/dimsemenov/Magnific-Popup) 
+[![Flattr](http://api.flattr.com/button/flattr-badge-large.png)](https://flattr.com/thing/1310305/Magnific-Popup-by-dimsemenov)
+
+Fast, light and responsive lightbox plugin, for jQuery and Zepto.js.
+
+- [Documentation and getting started guide](http://dimsemenov.com/plugins/magnific-popup/documentation.html).
+- [Examples and plugin home page](http://dimsemenov.com/plugins/magnific-popup/).
+- More examples in [CodePen collection](http://codepen.io/collection/nLcqo).
+
+Optionally, install via Bower `bower install magnific-popup` or npm: `npm install magnific-popup`.
+[Ruby gem](https://rubygems.org/gems/magnific-popup-rails): `gem install magnific-popup-rails`.
+
+## Extensions
+
+- WordPress plugin - [under development](http://dimsemenov.com/plugins/magnific-popup/wordpress.html).
+- [Drupal module](https://drupal.org/project/magnific_popup).
+- [Concrete5 add-on](https://github.com/cdowdy/concrete5-Magnific-Popup).
+- [Redaxo add-on](http://www.redaxo.org/de/download/addons/?addon_id=1131).
+- [Contao extension](https://github.com/fritzmg/contao-magnific-popup).
+
+If you created an extension for some CMS, email me and I'll add it to this list.
+
+## Location of stuff
+
+- Generated popup JS and CSS files are in folder [dist/](https://github.com/dimsemenov/Magnific-Popup/tree/master/dist). (Online build tool is on [documentation page](http://dimsemenov.com/plugins/magnific-popup/documentation.html)).
+- Source files are in folder [src/](https://github.com/dimsemenov/Magnific-Popup/tree/master/src). They include [Sass CSS file](https://github.com/dimsemenov/Magnific-Popup/blob/master/src/css/main.scss) and js parts (edit them if you wish to submit commit). 
+- Website (examples & documentation) is in folder [website/](https://github.com/dimsemenov/Magnific-Popup/tree/master/website).
+- Documentation page itself is in [website/documentation.md](https://github.com/dimsemenov/Magnific-Popup/blob/master/website/documentation.md) (contributions to it are very welcome).
+
+
+
+## Using Magnific Popup?
+
+If you used Magnific Popup in some interesting way, or on site of popular brand, I'd be very grateful if you <a href="mailto:diiiimaaaa@gmail.com?subject="Site that uses Magnific Popup"">shoot me</a> a link to it.
+
+
+## Build 
+
+To compile Magnific Popup by yourself, first of make sure that you have [Node.js](http://nodejs.org/), [Grunt.js](https://github.com/cowboy/grunt), [Ruby](http://www.ruby-lang.org/) and [Jekyll](https://github.com/mojombo/jekyll/) installed, then:
+
+1) Copy repository
+
+	git clone https://github.com/dimsemenov/Magnific-Popup.git
+
+2) Go inside Magnific Popup folder that you fetched and install Node dependencies
+
+	cd Magnific-Popup && npm install
+
+3) Now simply run `grunt` to generate JS and CSS in folder `dist` and site in folder `_site/`.
+
+	grunt
+
+Optionally:
+
+- Run `grunt watch` to automatically rebuild script when you change files in `src/` or in `website/`.
+- If you don't have and don't want to install Jekyll, run `grunt nosite` to just build JS and CSS files related to popup in `dist/`.
+
+
+
+## [Changelog](https://github.com/dimsemenov/Magnific-Popup/releases)
+
+## License
+
+Script is MIT licensed and free and will always be kept this way. But has a small restriction from me - please do not create public WordPress plugin based on it(or at least contact me before creating it), because I will make it and it'll be open source too ([want to get notified?](http://dimsemenov.com/subscribe.html)).
+
+Created by [@dimsemenov](http://twitter.com/dimsemenov) & [contributors](https://github.com/dimsemenov/Magnific-Popup/contributors).
+
+[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/dimsemenov/magnific-popup/trend.png)](https://bitdeli.com/free "Bitdeli Badge")
+
+## Bugs & contributing
+
+Please report bugs via GitHub and ask general questions through [StackOverflow](http://stackoverflow.com/questions/tagged/magnific-popup). Feel free to submit commit [pull-request](https://github.com/dimsemenov/Magnific-Popup/pulls), even the tiniest contributions to the script or to the documentation are very welcome.
+
+
diff --git a/vendor/dimsemenov/magnific-popup/bower.json b/vendor/dimsemenov/magnific-popup/bower.json
new file mode 100644
index 0000000000000000000000000000000000000000..58d3b63951c343fe167301b366b27fa9ec3279da
--- /dev/null
+++ b/vendor/dimsemenov/magnific-popup/bower.json
@@ -0,0 +1,16 @@
+{
+  "name": "magnific-popup",
+  "main": [
+    "dist/jquery.magnific-popup.js",
+    "dist/magnific-popup.css"
+  ],
+  "dependencies": {
+    "jquery": ">=1.8.0"
+  },
+  "ignore": [
+    "node_modules/",
+    "components/",
+    "website/",
+    "libs/"
+  ]
+}
diff --git a/vendor/dimsemenov/magnific-popup/composer.json b/vendor/dimsemenov/magnific-popup/composer.json
new file mode 100644
index 0000000000000000000000000000000000000000..6c237234195d3f315ec12db07b86de488e702e99
--- /dev/null
+++ b/vendor/dimsemenov/magnific-popup/composer.json
@@ -0,0 +1,5 @@
+{
+    "name": "dimsemenov/magnific-popup",
+    "description": "Light and responsive lightbox script with focus on performance.",
+    "homepage": "http://dimsemenov.com/plugins/magnific-popup/"
+}
diff --git a/vendor/dimsemenov/magnific-popup/dist/jquery.magnific-popup.js b/vendor/dimsemenov/magnific-popup/dist/jquery.magnific-popup.js
new file mode 100644
index 0000000000000000000000000000000000000000..927b3c1f8065e5bf49cc61598323fd0bc983ab1d
--- /dev/null
+++ b/vendor/dimsemenov/magnific-popup/dist/jquery.magnific-popup.js
@@ -0,0 +1,1860 @@
+/*! Magnific Popup - v1.1.0 - 2016-02-20
+* http://dimsemenov.com/plugins/magnific-popup/
+* Copyright (c) 2016 Dmitry Semenov; */
+;(function (factory) { 
+if (typeof define === 'function' && define.amd) { 
+ // AMD. Register as an anonymous module. 
+ define(['jquery'], factory); 
+ } else if (typeof exports === 'object') { 
+ // Node/CommonJS 
+ factory(require('jquery')); 
+ } else { 
+ // Browser globals 
+ factory(window.jQuery || window.Zepto); 
+ } 
+ }(function($) { 
+
+/*>>core*/
+/**
+ * 
+ * Magnific Popup Core JS file
+ * 
+ */
+
+
+/**
+ * Private static constants
+ */
+var CLOSE_EVENT = 'Close',
+	BEFORE_CLOSE_EVENT = 'BeforeClose',
+	AFTER_CLOSE_EVENT = 'AfterClose',
+	BEFORE_APPEND_EVENT = 'BeforeAppend',
+	MARKUP_PARSE_EVENT = 'MarkupParse',
+	OPEN_EVENT = 'Open',
+	CHANGE_EVENT = 'Change',
+	NS = 'mfp',
+	EVENT_NS = '.' + NS,
+	READY_CLASS = 'mfp-ready',
+	REMOVING_CLASS = 'mfp-removing',
+	PREVENT_CLOSE_CLASS = 'mfp-prevent-close';
+
+
+/**
+ * Private vars 
+ */
+/*jshint -W079 */
+var mfp, // As we have only one instance of MagnificPopup object, we define it locally to not to use 'this'
+	MagnificPopup = function(){},
+	_isJQ = !!(window.jQuery),
+	_prevStatus,
+	_window = $(window),
+	_document,
+	_prevContentType,
+	_wrapClasses,
+	_currPopupType;
+
+
+/**
+ * Private functions
+ */
+var _mfpOn = function(name, f) {
+		mfp.ev.on(NS + name + EVENT_NS, f);
+	},
+	_getEl = function(className, appendTo, html, raw) {
+		var el = document.createElement('div');
+		el.className = 'mfp-'+className;
+		if(html) {
+			el.innerHTML = html;
+		}
+		if(!raw) {
+			el = $(el);
+			if(appendTo) {
+				el.appendTo(appendTo);
+			}
+		} else if(appendTo) {
+			appendTo.appendChild(el);
+		}
+		return el;
+	},
+	_mfpTrigger = function(e, data) {
+		mfp.ev.triggerHandler(NS + e, data);
+
+		if(mfp.st.callbacks) {
+			// converts "mfpEventName" to "eventName" callback and triggers it if it's present
+			e = e.charAt(0).toLowerCase() + e.slice(1);
+			if(mfp.st.callbacks[e]) {
+				mfp.st.callbacks[e].apply(mfp, $.isArray(data) ? data : [data]);
+			}
+		}
+	},
+	_getCloseBtn = function(type) {
+		if(type !== _currPopupType || !mfp.currTemplate.closeBtn) {
+			mfp.currTemplate.closeBtn = $( mfp.st.closeMarkup.replace('%title%', mfp.st.tClose ) );
+			_currPopupType = type;
+		}
+		return mfp.currTemplate.closeBtn;
+	},
+	// Initialize Magnific Popup only when called at least once
+	_checkInstance = function() {
+		if(!$.magnificPopup.instance) {
+			/*jshint -W020 */
+			mfp = new MagnificPopup();
+			mfp.init();
+			$.magnificPopup.instance = mfp;
+		}
+	},
+	// CSS transition detection, http://stackoverflow.com/questions/7264899/detect-css-transitions-using-javascript-and-without-modernizr
+	supportsTransitions = function() {
+		var s = document.createElement('p').style, // 's' for style. better to create an element if body yet to exist
+			v = ['ms','O','Moz','Webkit']; // 'v' for vendor
+
+		if( s['transition'] !== undefined ) {
+			return true; 
+		}
+			
+		while( v.length ) {
+			if( v.pop() + 'Transition' in s ) {
+				return true;
+			}
+		}
+				
+		return false;
+	};
+
+
+
+/**
+ * Public functions
+ */
+MagnificPopup.prototype = {
+
+	constructor: MagnificPopup,
+
+	/**
+	 * Initializes Magnific Popup plugin. 
+	 * This function is triggered only once when $.fn.magnificPopup or $.magnificPopup is executed
+	 */
+	init: function() {
+		var appVersion = navigator.appVersion;
+		mfp.isLowIE = mfp.isIE8 = document.all && !document.addEventListener;
+		mfp.isAndroid = (/android/gi).test(appVersion);
+		mfp.isIOS = (/iphone|ipad|ipod/gi).test(appVersion);
+		mfp.supportsTransition = supportsTransitions();
+
+		// We disable fixed positioned lightbox on devices that don't handle it nicely.
+		// If you know a better way of detecting this - let me know.
+		mfp.probablyMobile = (mfp.isAndroid || mfp.isIOS || /(Opera Mini)|Kindle|webOS|BlackBerry|(Opera Mobi)|(Windows Phone)|IEMobile/i.test(navigator.userAgent) );
+		_document = $(document);
+
+		mfp.popupsCache = {};
+	},
+
+	/**
+	 * Opens popup
+	 * @param  data [description]
+	 */
+	open: function(data) {
+
+		var i;
+
+		if(data.isObj === false) { 
+			// convert jQuery collection to array to avoid conflicts later
+			mfp.items = data.items.toArray();
+
+			mfp.index = 0;
+			var items = data.items,
+				item;
+			for(i = 0; i < items.length; i++) {
+				item = items[i];
+				if(item.parsed) {
+					item = item.el[0];
+				}
+				if(item === data.el[0]) {
+					mfp.index = i;
+					break;
+				}
+			}
+		} else {
+			mfp.items = $.isArray(data.items) ? data.items : [data.items];
+			mfp.index = data.index || 0;
+		}
+
+		// if popup is already opened - we just update the content
+		if(mfp.isOpen) {
+			mfp.updateItemHTML();
+			return;
+		}
+		
+		mfp.types = []; 
+		_wrapClasses = '';
+		if(data.mainEl && data.mainEl.length) {
+			mfp.ev = data.mainEl.eq(0);
+		} else {
+			mfp.ev = _document;
+		}
+
+		if(data.key) {
+			if(!mfp.popupsCache[data.key]) {
+				mfp.popupsCache[data.key] = {};
+			}
+			mfp.currTemplate = mfp.popupsCache[data.key];
+		} else {
+			mfp.currTemplate = {};
+		}
+
+
+
+		mfp.st = $.extend(true, {}, $.magnificPopup.defaults, data ); 
+		mfp.fixedContentPos = mfp.st.fixedContentPos === 'auto' ? !mfp.probablyMobile : mfp.st.fixedContentPos;
+
+		if(mfp.st.modal) {
+			mfp.st.closeOnContentClick = false;
+			mfp.st.closeOnBgClick = false;
+			mfp.st.showCloseBtn = false;
+			mfp.st.enableEscapeKey = false;
+		}
+		
+
+		// Building markup
+		// main containers are created only once
+		if(!mfp.bgOverlay) {
+
+			// Dark overlay
+			mfp.bgOverlay = _getEl('bg').on('click'+EVENT_NS, function() {
+				mfp.close();
+			});
+
+			mfp.wrap = _getEl('wrap').attr('tabindex', -1).on('click'+EVENT_NS, function(e) {
+				if(mfp._checkIfClose(e.target)) {
+					mfp.close();
+				}
+			});
+
+			mfp.container = _getEl('container', mfp.wrap);
+		}
+
+		mfp.contentContainer = _getEl('content');
+		if(mfp.st.preloader) {
+			mfp.preloader = _getEl('preloader', mfp.container, mfp.st.tLoading);
+		}
+
+
+		// Initializing modules
+		var modules = $.magnificPopup.modules;
+		for(i = 0; i < modules.length; i++) {
+			var n = modules[i];
+			n = n.charAt(0).toUpperCase() + n.slice(1);
+			mfp['init'+n].call(mfp);
+		}
+		_mfpTrigger('BeforeOpen');
+
+
+		if(mfp.st.showCloseBtn) {
+			// Close button
+			if(!mfp.st.closeBtnInside) {
+				mfp.wrap.append( _getCloseBtn() );
+			} else {
+				_mfpOn(MARKUP_PARSE_EVENT, function(e, template, values, item) {
+					values.close_replaceWith = _getCloseBtn(item.type);
+				});
+				_wrapClasses += ' mfp-close-btn-in';
+			}
+		}
+
+		if(mfp.st.alignTop) {
+			_wrapClasses += ' mfp-align-top';
+		}
+
+	
+
+		if(mfp.fixedContentPos) {
+			mfp.wrap.css({
+				overflow: mfp.st.overflowY,
+				overflowX: 'hidden',
+				overflowY: mfp.st.overflowY
+			});
+		} else {
+			mfp.wrap.css({ 
+				top: _window.scrollTop(),
+				position: 'absolute'
+			});
+		}
+		if( mfp.st.fixedBgPos === false || (mfp.st.fixedBgPos === 'auto' && !mfp.fixedContentPos) ) {
+			mfp.bgOverlay.css({
+				height: _document.height(),
+				position: 'absolute'
+			});
+		}
+
+		
+
+		if(mfp.st.enableEscapeKey) {
+			// Close on ESC key
+			_document.on('keyup' + EVENT_NS, function(e) {
+				if(e.keyCode === 27) {
+					mfp.close();
+				}
+			});
+		}
+
+		_window.on('resize' + EVENT_NS, function() {
+			mfp.updateSize();
+		});
+
+
+		if(!mfp.st.closeOnContentClick) {
+			_wrapClasses += ' mfp-auto-cursor';
+		}
+		
+		if(_wrapClasses)
+			mfp.wrap.addClass(_wrapClasses);
+
+
+		// this triggers recalculation of layout, so we get it once to not to trigger twice
+		var windowHeight = mfp.wH = _window.height();
+
+		
+		var windowStyles = {};
+
+		if( mfp.fixedContentPos ) {
+            if(mfp._hasScrollBar(windowHeight)){
+                var s = mfp._getScrollbarSize();
+                if(s) {
+                    windowStyles.marginRight = s;
+                }
+            }
+        }
+
+		if(mfp.fixedContentPos) {
+			if(!mfp.isIE7) {
+				windowStyles.overflow = 'hidden';
+			} else {
+				// ie7 double-scroll bug
+				$('body, html').css('overflow', 'hidden');
+			}
+		}
+
+		
+		
+		var classesToadd = mfp.st.mainClass;
+		if(mfp.isIE7) {
+			classesToadd += ' mfp-ie7';
+		}
+		if(classesToadd) {
+			mfp._addClassToMFP( classesToadd );
+		}
+
+		// add content
+		mfp.updateItemHTML();
+
+		_mfpTrigger('BuildControls');
+
+		// remove scrollbar, add margin e.t.c
+		$('html').css(windowStyles);
+		
+		// add everything to DOM
+		mfp.bgOverlay.add(mfp.wrap).prependTo( mfp.st.prependTo || $(document.body) );
+
+		// Save last focused element
+		mfp._lastFocusedEl = document.activeElement;
+		
+		// Wait for next cycle to allow CSS transition
+		setTimeout(function() {
+			
+			if(mfp.content) {
+				mfp._addClassToMFP(READY_CLASS);
+				mfp._setFocus();
+			} else {
+				// if content is not defined (not loaded e.t.c) we add class only for BG
+				mfp.bgOverlay.addClass(READY_CLASS);
+			}
+			
+			// Trap the focus in popup
+			_document.on('focusin' + EVENT_NS, mfp._onFocusIn);
+
+		}, 16);
+
+		mfp.isOpen = true;
+		mfp.updateSize(windowHeight);
+		_mfpTrigger(OPEN_EVENT);
+
+		return data;
+	},
+
+	/**
+	 * Closes the popup
+	 */
+	close: function() {
+		if(!mfp.isOpen) return;
+		_mfpTrigger(BEFORE_CLOSE_EVENT);
+
+		mfp.isOpen = false;
+		// for CSS3 animation
+		if(mfp.st.removalDelay && !mfp.isLowIE && mfp.supportsTransition )  {
+			mfp._addClassToMFP(REMOVING_CLASS);
+			setTimeout(function() {
+				mfp._close();
+			}, mfp.st.removalDelay);
+		} else {
+			mfp._close();
+		}
+	},
+
+	/**
+	 * Helper for close() function
+	 */
+	_close: function() {
+		_mfpTrigger(CLOSE_EVENT);
+
+		var classesToRemove = REMOVING_CLASS + ' ' + READY_CLASS + ' ';
+
+		mfp.bgOverlay.detach();
+		mfp.wrap.detach();
+		mfp.container.empty();
+
+		if(mfp.st.mainClass) {
+			classesToRemove += mfp.st.mainClass + ' ';
+		}
+
+		mfp._removeClassFromMFP(classesToRemove);
+
+		if(mfp.fixedContentPos) {
+			var windowStyles = {marginRight: ''};
+			if(mfp.isIE7) {
+				$('body, html').css('overflow', '');
+			} else {
+				windowStyles.overflow = '';
+			}
+			$('html').css(windowStyles);
+		}
+		
+		_document.off('keyup' + EVENT_NS + ' focusin' + EVENT_NS);
+		mfp.ev.off(EVENT_NS);
+
+		// clean up DOM elements that aren't removed
+		mfp.wrap.attr('class', 'mfp-wrap').removeAttr('style');
+		mfp.bgOverlay.attr('class', 'mfp-bg');
+		mfp.container.attr('class', 'mfp-container');
+
+		// remove close button from target element
+		if(mfp.st.showCloseBtn &&
+		(!mfp.st.closeBtnInside || mfp.currTemplate[mfp.currItem.type] === true)) {
+			if(mfp.currTemplate.closeBtn)
+				mfp.currTemplate.closeBtn.detach();
+		}
+
+
+		if(mfp.st.autoFocusLast && mfp._lastFocusedEl) {
+			$(mfp._lastFocusedEl).focus(); // put tab focus back
+		}
+		mfp.currItem = null;	
+		mfp.content = null;
+		mfp.currTemplate = null;
+		mfp.prevHeight = 0;
+
+		_mfpTrigger(AFTER_CLOSE_EVENT);
+	},
+	
+	updateSize: function(winHeight) {
+
+		if(mfp.isIOS) {
+			// fixes iOS nav bars https://github.com/dimsemenov/Magnific-Popup/issues/2
+			var zoomLevel = document.documentElement.clientWidth / window.innerWidth;
+			var height = window.innerHeight * zoomLevel;
+			mfp.wrap.css('height', height);
+			mfp.wH = height;
+		} else {
+			mfp.wH = winHeight || _window.height();
+		}
+		// Fixes #84: popup incorrectly positioned with position:relative on body
+		if(!mfp.fixedContentPos) {
+			mfp.wrap.css('height', mfp.wH);
+		}
+
+		_mfpTrigger('Resize');
+
+	},
+
+	/**
+	 * Set content of popup based on current index
+	 */
+	updateItemHTML: function() {
+		var item = mfp.items[mfp.index];
+
+		// Detach and perform modifications
+		mfp.contentContainer.detach();
+
+		if(mfp.content)
+			mfp.content.detach();
+
+		if(!item.parsed) {
+			item = mfp.parseEl( mfp.index );
+		}
+
+		var type = item.type;
+
+		_mfpTrigger('BeforeChange', [mfp.currItem ? mfp.currItem.type : '', type]);
+		// BeforeChange event works like so:
+		// _mfpOn('BeforeChange', function(e, prevType, newType) { });
+
+		mfp.currItem = item;
+
+		if(!mfp.currTemplate[type]) {
+			var markup = mfp.st[type] ? mfp.st[type].markup : false;
+
+			// allows to modify markup
+			_mfpTrigger('FirstMarkupParse', markup);
+
+			if(markup) {
+				mfp.currTemplate[type] = $(markup);
+			} else {
+				// if there is no markup found we just define that template is parsed
+				mfp.currTemplate[type] = true;
+			}
+		}
+
+		if(_prevContentType && _prevContentType !== item.type) {
+			mfp.container.removeClass('mfp-'+_prevContentType+'-holder');
+		}
+
+		var newContent = mfp['get' + type.charAt(0).toUpperCase() + type.slice(1)](item, mfp.currTemplate[type]);
+		mfp.appendContent(newContent, type);
+
+		item.preloaded = true;
+
+		_mfpTrigger(CHANGE_EVENT, item);
+		_prevContentType = item.type;
+
+		// Append container back after its content changed
+		mfp.container.prepend(mfp.contentContainer);
+
+		_mfpTrigger('AfterChange');
+	},
+
+
+	/**
+	 * Set HTML content of popup
+	 */
+	appendContent: function(newContent, type) {
+		mfp.content = newContent;
+
+		if(newContent) {
+			if(mfp.st.showCloseBtn && mfp.st.closeBtnInside &&
+				mfp.currTemplate[type] === true) {
+				// if there is no markup, we just append close button element inside
+				if(!mfp.content.find('.mfp-close').length) {
+					mfp.content.append(_getCloseBtn());
+				}
+			} else {
+				mfp.content = newContent;
+			}
+		} else {
+			mfp.content = '';
+		}
+
+		_mfpTrigger(BEFORE_APPEND_EVENT);
+		mfp.container.addClass('mfp-'+type+'-holder');
+
+		mfp.contentContainer.append(mfp.content);
+	},
+
+
+	/**
+	 * Creates Magnific Popup data object based on given data
+	 * @param  {int} index Index of item to parse
+	 */
+	parseEl: function(index) {
+		var item = mfp.items[index],
+			type;
+
+		if(item.tagName) {
+			item = { el: $(item) };
+		} else {
+			type = item.type;
+			item = { data: item, src: item.src };
+		}
+
+		if(item.el) {
+			var types = mfp.types;
+
+			// check for 'mfp-TYPE' class
+			for(var i = 0; i < types.length; i++) {
+				if( item.el.hasClass('mfp-'+types[i]) ) {
+					type = types[i];
+					break;
+				}
+			}
+
+			item.src = item.el.attr('data-mfp-src');
+			if(!item.src) {
+				item.src = item.el.attr('href');
+			}
+		}
+
+		item.type = type || mfp.st.type || 'inline';
+		item.index = index;
+		item.parsed = true;
+		mfp.items[index] = item;
+		_mfpTrigger('ElementParse', item);
+
+		return mfp.items[index];
+	},
+
+
+	/**
+	 * Initializes single popup or a group of popups
+	 */
+	addGroup: function(el, options) {
+		var eHandler = function(e) {
+			e.mfpEl = this;
+			mfp._openClick(e, el, options);
+		};
+
+		if(!options) {
+			options = {};
+		}
+
+		var eName = 'click.magnificPopup';
+		options.mainEl = el;
+
+		if(options.items) {
+			options.isObj = true;
+			el.off(eName).on(eName, eHandler);
+		} else {
+			options.isObj = false;
+			if(options.delegate) {
+				el.off(eName).on(eName, options.delegate , eHandler);
+			} else {
+				options.items = el;
+				el.off(eName).on(eName, eHandler);
+			}
+		}
+	},
+	_openClick: function(e, el, options) {
+		var midClick = options.midClick !== undefined ? options.midClick : $.magnificPopup.defaults.midClick;
+
+
+		if(!midClick && ( e.which === 2 || e.ctrlKey || e.metaKey || e.altKey || e.shiftKey ) ) {
+			return;
+		}
+
+		var disableOn = options.disableOn !== undefined ? options.disableOn : $.magnificPopup.defaults.disableOn;
+
+		if(disableOn) {
+			if($.isFunction(disableOn)) {
+				if( !disableOn.call(mfp) ) {
+					return true;
+				}
+			} else { // else it's number
+				if( _window.width() < disableOn ) {
+					return true;
+				}
+			}
+		}
+
+		if(e.type) {
+			e.preventDefault();
+
+			// This will prevent popup from closing if element is inside and popup is already opened
+			if(mfp.isOpen) {
+				e.stopPropagation();
+			}
+		}
+
+		options.el = $(e.mfpEl);
+		if(options.delegate) {
+			options.items = el.find(options.delegate);
+		}
+		mfp.open(options);
+	},
+
+
+	/**
+	 * Updates text on preloader
+	 */
+	updateStatus: function(status, text) {
+
+		if(mfp.preloader) {
+			if(_prevStatus !== status) {
+				mfp.container.removeClass('mfp-s-'+_prevStatus);
+			}
+
+			if(!text && status === 'loading') {
+				text = mfp.st.tLoading;
+			}
+
+			var data = {
+				status: status,
+				text: text
+			};
+			// allows to modify status
+			_mfpTrigger('UpdateStatus', data);
+
+			status = data.status;
+			text = data.text;
+
+			mfp.preloader.html(text);
+
+			mfp.preloader.find('a').on('click', function(e) {
+				e.stopImmediatePropagation();
+			});
+
+			mfp.container.addClass('mfp-s-'+status);
+			_prevStatus = status;
+		}
+	},
+
+
+	/*
+		"Private" helpers that aren't private at all
+	 */
+	// Check to close popup or not
+	// "target" is an element that was clicked
+	_checkIfClose: function(target) {
+
+		if($(target).hasClass(PREVENT_CLOSE_CLASS)) {
+			return;
+		}
+
+		var closeOnContent = mfp.st.closeOnContentClick;
+		var closeOnBg = mfp.st.closeOnBgClick;
+
+		if(closeOnContent && closeOnBg) {
+			return true;
+		} else {
+
+			// We close the popup if click is on close button or on preloader. Or if there is no content.
+			if(!mfp.content || $(target).hasClass('mfp-close') || (mfp.preloader && target === mfp.preloader[0]) ) {
+				return true;
+			}
+
+			// if click is outside the content
+			if(  (target !== mfp.content[0] && !$.contains(mfp.content[0], target))  ) {
+				if(closeOnBg) {
+					// last check, if the clicked element is in DOM, (in case it's removed onclick)
+					if( $.contains(document, target) ) {
+						return true;
+					}
+				}
+			} else if(closeOnContent) {
+				return true;
+			}
+
+		}
+		return false;
+	},
+	_addClassToMFP: function(cName) {
+		mfp.bgOverlay.addClass(cName);
+		mfp.wrap.addClass(cName);
+	},
+	_removeClassFromMFP: function(cName) {
+		this.bgOverlay.removeClass(cName);
+		mfp.wrap.removeClass(cName);
+	},
+	_hasScrollBar: function(winHeight) {
+		return (  (mfp.isIE7 ? _document.height() : document.body.scrollHeight) > (winHeight || _window.height()) );
+	},
+	_setFocus: function() {
+		(mfp.st.focus ? mfp.content.find(mfp.st.focus).eq(0) : mfp.wrap).focus();
+	},
+	_onFocusIn: function(e) {
+		if( e.target !== mfp.wrap[0] && !$.contains(mfp.wrap[0], e.target) ) {
+			mfp._setFocus();
+			return false;
+		}
+	},
+	_parseMarkup: function(template, values, item) {
+		var arr;
+		if(item.data) {
+			values = $.extend(item.data, values);
+		}
+		_mfpTrigger(MARKUP_PARSE_EVENT, [template, values, item] );
+
+		$.each(values, function(key, value) {
+			if(value === undefined || value === false) {
+				return true;
+			}
+			arr = key.split('_');
+			if(arr.length > 1) {
+				var el = template.find(EVENT_NS + '-'+arr[0]);
+
+				if(el.length > 0) {
+					var attr = arr[1];
+					if(attr === 'replaceWith') {
+						if(el[0] !== value[0]) {
+							el.replaceWith(value);
+						}
+					} else if(attr === 'img') {
+						if(el.is('img')) {
+							el.attr('src', value);
+						} else {
+							el.replaceWith( $('<img>').attr('src', value).attr('class', el.attr('class')) );
+						}
+					} else {
+						el.attr(arr[1], value);
+					}
+				}
+
+			} else {
+				template.find(EVENT_NS + '-'+key).html(value);
+			}
+		});
+	},
+
+	_getScrollbarSize: function() {
+		// thx David
+		if(mfp.scrollbarSize === undefined) {
+			var scrollDiv = document.createElement("div");
+			scrollDiv.style.cssText = 'width: 99px; height: 99px; overflow: scroll; position: absolute; top: -9999px;';
+			document.body.appendChild(scrollDiv);
+			mfp.scrollbarSize = scrollDiv.offsetWidth - scrollDiv.clientWidth;
+			document.body.removeChild(scrollDiv);
+		}
+		return mfp.scrollbarSize;
+	}
+
+}; /* MagnificPopup core prototype end */
+
+
+
+
+/**
+ * Public static functions
+ */
+$.magnificPopup = {
+	instance: null,
+	proto: MagnificPopup.prototype,
+	modules: [],
+
+	open: function(options, index) {
+		_checkInstance();
+
+		if(!options) {
+			options = {};
+		} else {
+			options = $.extend(true, {}, options);
+		}
+
+		options.isObj = true;
+		options.index = index || 0;
+		return this.instance.open(options);
+	},
+
+	close: function() {
+		return $.magnificPopup.instance && $.magnificPopup.instance.close();
+	},
+
+	registerModule: function(name, module) {
+		if(module.options) {
+			$.magnificPopup.defaults[name] = module.options;
+		}
+		$.extend(this.proto, module.proto);
+		this.modules.push(name);
+	},
+
+	defaults: {
+
+		// Info about options is in docs:
+		// http://dimsemenov.com/plugins/magnific-popup/documentation.html#options
+
+		disableOn: 0,
+
+		key: null,
+
+		midClick: false,
+
+		mainClass: '',
+
+		preloader: true,
+
+		focus: '', // CSS selector of input to focus after popup is opened
+
+		closeOnContentClick: false,
+
+		closeOnBgClick: true,
+
+		closeBtnInside: true,
+
+		showCloseBtn: true,
+
+		enableEscapeKey: true,
+
+		modal: false,
+
+		alignTop: false,
+
+		removalDelay: 0,
+
+		prependTo: null,
+
+		fixedContentPos: 'auto',
+
+		fixedBgPos: 'auto',
+
+		overflowY: 'auto',
+
+		closeMarkup: '<button title="%title%" type="button" class="mfp-close">&#215;</button>',
+
+		tClose: 'Close (Esc)',
+
+		tLoading: 'Loading...',
+
+		autoFocusLast: true
+
+	}
+};
+
+
+
+$.fn.magnificPopup = function(options) {
+	_checkInstance();
+
+	var jqEl = $(this);
+
+	// We call some API method of first param is a string
+	if (typeof options === "string" ) {
+
+		if(options === 'open') {
+			var items,
+				itemOpts = _isJQ ? jqEl.data('magnificPopup') : jqEl[0].magnificPopup,
+				index = parseInt(arguments[1], 10) || 0;
+
+			if(itemOpts.items) {
+				items = itemOpts.items[index];
+			} else {
+				items = jqEl;
+				if(itemOpts.delegate) {
+					items = items.find(itemOpts.delegate);
+				}
+				items = items.eq( index );
+			}
+			mfp._openClick({mfpEl:items}, jqEl, itemOpts);
+		} else {
+			if(mfp.isOpen)
+				mfp[options].apply(mfp, Array.prototype.slice.call(arguments, 1));
+		}
+
+	} else {
+		// clone options obj
+		options = $.extend(true, {}, options);
+
+		/*
+		 * As Zepto doesn't support .data() method for objects
+		 * and it works only in normal browsers
+		 * we assign "options" object directly to the DOM element. FTW!
+		 */
+		if(_isJQ) {
+			jqEl.data('magnificPopup', options);
+		} else {
+			jqEl[0].magnificPopup = options;
+		}
+
+		mfp.addGroup(jqEl, options);
+
+	}
+	return jqEl;
+};
+
+/*>>core*/
+
+/*>>inline*/
+
+var INLINE_NS = 'inline',
+	_hiddenClass,
+	_inlinePlaceholder,
+	_lastInlineElement,
+	_putInlineElementsBack = function() {
+		if(_lastInlineElement) {
+			_inlinePlaceholder.after( _lastInlineElement.addClass(_hiddenClass) ).detach();
+			_lastInlineElement = null;
+		}
+	};
+
+$.magnificPopup.registerModule(INLINE_NS, {
+	options: {
+		hiddenClass: 'hide', // will be appended with `mfp-` prefix
+		markup: '',
+		tNotFound: 'Content not found'
+	},
+	proto: {
+
+		initInline: function() {
+			mfp.types.push(INLINE_NS);
+
+			_mfpOn(CLOSE_EVENT+'.'+INLINE_NS, function() {
+				_putInlineElementsBack();
+			});
+		},
+
+		getInline: function(item, template) {
+
+			_putInlineElementsBack();
+
+			if(item.src) {
+				var inlineSt = mfp.st.inline,
+					el = $(item.src);
+
+				if(el.length) {
+
+					// If target element has parent - we replace it with placeholder and put it back after popup is closed
+					var parent = el[0].parentNode;
+					if(parent && parent.tagName) {
+						if(!_inlinePlaceholder) {
+							_hiddenClass = inlineSt.hiddenClass;
+							_inlinePlaceholder = _getEl(_hiddenClass);
+							_hiddenClass = 'mfp-'+_hiddenClass;
+						}
+						// replace target inline element with placeholder
+						_lastInlineElement = el.after(_inlinePlaceholder).detach().removeClass(_hiddenClass);
+					}
+
+					mfp.updateStatus('ready');
+				} else {
+					mfp.updateStatus('error', inlineSt.tNotFound);
+					el = $('<div>');
+				}
+
+				item.inlineElement = el;
+				return el;
+			}
+
+			mfp.updateStatus('ready');
+			mfp._parseMarkup(template, {}, item);
+			return template;
+		}
+	}
+});
+
+/*>>inline*/
+
+/*>>ajax*/
+var AJAX_NS = 'ajax',
+	_ajaxCur,
+	_removeAjaxCursor = function() {
+		if(_ajaxCur) {
+			$(document.body).removeClass(_ajaxCur);
+		}
+	},
+	_destroyAjaxRequest = function() {
+		_removeAjaxCursor();
+		if(mfp.req) {
+			mfp.req.abort();
+		}
+	};
+
+$.magnificPopup.registerModule(AJAX_NS, {
+
+	options: {
+		settings: null,
+		cursor: 'mfp-ajax-cur',
+		tError: '<a href="%url%">The content</a> could not be loaded.'
+	},
+
+	proto: {
+		initAjax: function() {
+			mfp.types.push(AJAX_NS);
+			_ajaxCur = mfp.st.ajax.cursor;
+
+			_mfpOn(CLOSE_EVENT+'.'+AJAX_NS, _destroyAjaxRequest);
+			_mfpOn('BeforeChange.' + AJAX_NS, _destroyAjaxRequest);
+		},
+		getAjax: function(item) {
+
+			if(_ajaxCur) {
+				$(document.body).addClass(_ajaxCur);
+			}
+
+			mfp.updateStatus('loading');
+
+			var opts = $.extend({
+				url: item.src,
+				success: function(data, textStatus, jqXHR) {
+					var temp = {
+						data:data,
+						xhr:jqXHR
+					};
+
+					_mfpTrigger('ParseAjax', temp);
+
+					mfp.appendContent( $(temp.data), AJAX_NS );
+
+					item.finished = true;
+
+					_removeAjaxCursor();
+
+					mfp._setFocus();
+
+					setTimeout(function() {
+						mfp.wrap.addClass(READY_CLASS);
+					}, 16);
+
+					mfp.updateStatus('ready');
+
+					_mfpTrigger('AjaxContentAdded');
+				},
+				error: function() {
+					_removeAjaxCursor();
+					item.finished = item.loadError = true;
+					mfp.updateStatus('error', mfp.st.ajax.tError.replace('%url%', item.src));
+				}
+			}, mfp.st.ajax.settings);
+
+			mfp.req = $.ajax(opts);
+
+			return '';
+		}
+	}
+});
+
+/*>>ajax*/
+
+/*>>image*/
+var _imgInterval,
+	_getTitle = function(item) {
+		if(item.data && item.data.title !== undefined)
+			return item.data.title;
+
+		var src = mfp.st.image.titleSrc;
+
+		if(src) {
+			if($.isFunction(src)) {
+				return src.call(mfp, item);
+			} else if(item.el) {
+				return item.el.attr(src) || '';
+			}
+		}
+		return '';
+	};
+
+$.magnificPopup.registerModule('image', {
+
+	options: {
+		markup: '<div class="mfp-figure">'+
+					'<div class="mfp-close"></div>'+
+					'<figure>'+
+						'<div class="mfp-img"></div>'+
+						'<figcaption>'+
+							'<div class="mfp-bottom-bar">'+
+								'<div class="mfp-title"></div>'+
+								'<div class="mfp-counter"></div>'+
+							'</div>'+
+						'</figcaption>'+
+					'</figure>'+
+				'</div>',
+		cursor: 'mfp-zoom-out-cur',
+		titleSrc: 'title',
+		verticalFit: true,
+		tError: '<a href="%url%">The image</a> could not be loaded.'
+	},
+
+	proto: {
+		initImage: function() {
+			var imgSt = mfp.st.image,
+				ns = '.image';
+
+			mfp.types.push('image');
+
+			_mfpOn(OPEN_EVENT+ns, function() {
+				if(mfp.currItem.type === 'image' && imgSt.cursor) {
+					$(document.body).addClass(imgSt.cursor);
+				}
+			});
+
+			_mfpOn(CLOSE_EVENT+ns, function() {
+				if(imgSt.cursor) {
+					$(document.body).removeClass(imgSt.cursor);
+				}
+				_window.off('resize' + EVENT_NS);
+			});
+
+			_mfpOn('Resize'+ns, mfp.resizeImage);
+			if(mfp.isLowIE) {
+				_mfpOn('AfterChange', mfp.resizeImage);
+			}
+		},
+		resizeImage: function() {
+			var item = mfp.currItem;
+			if(!item || !item.img) return;
+
+			if(mfp.st.image.verticalFit) {
+				var decr = 0;
+				// fix box-sizing in ie7/8
+				if(mfp.isLowIE) {
+					decr = parseInt(item.img.css('padding-top'), 10) + parseInt(item.img.css('padding-bottom'),10);
+				}
+				item.img.css('max-height', mfp.wH-decr);
+			}
+		},
+		_onImageHasSize: function(item) {
+			if(item.img) {
+
+				item.hasSize = true;
+
+				if(_imgInterval) {
+					clearInterval(_imgInterval);
+				}
+
+				item.isCheckingImgSize = false;
+
+				_mfpTrigger('ImageHasSize', item);
+
+				if(item.imgHidden) {
+					if(mfp.content)
+						mfp.content.removeClass('mfp-loading');
+
+					item.imgHidden = false;
+				}
+
+			}
+		},
+
+		/**
+		 * Function that loops until the image has size to display elements that rely on it asap
+		 */
+		findImageSize: function(item) {
+
+			var counter = 0,
+				img = item.img[0],
+				mfpSetInterval = function(delay) {
+
+					if(_imgInterval) {
+						clearInterval(_imgInterval);
+					}
+					// decelerating interval that checks for size of an image
+					_imgInterval = setInterval(function() {
+						if(img.naturalWidth > 0) {
+							mfp._onImageHasSize(item);
+							return;
+						}
+
+						if(counter > 200) {
+							clearInterval(_imgInterval);
+						}
+
+						counter++;
+						if(counter === 3) {
+							mfpSetInterval(10);
+						} else if(counter === 40) {
+							mfpSetInterval(50);
+						} else if(counter === 100) {
+							mfpSetInterval(500);
+						}
+					}, delay);
+				};
+
+			mfpSetInterval(1);
+		},
+
+		getImage: function(item, template) {
+
+			var guard = 0,
+
+				// image load complete handler
+				onLoadComplete = function() {
+					if(item) {
+						if (item.img[0].complete) {
+							item.img.off('.mfploader');
+
+							if(item === mfp.currItem){
+								mfp._onImageHasSize(item);
+
+								mfp.updateStatus('ready');
+							}
+
+							item.hasSize = true;
+							item.loaded = true;
+
+							_mfpTrigger('ImageLoadComplete');
+
+						}
+						else {
+							// if image complete check fails 200 times (20 sec), we assume that there was an error.
+							guard++;
+							if(guard < 200) {
+								setTimeout(onLoadComplete,100);
+							} else {
+								onLoadError();
+							}
+						}
+					}
+				},
+
+				// image error handler
+				onLoadError = function() {
+					if(item) {
+						item.img.off('.mfploader');
+						if(item === mfp.currItem){
+							mfp._onImageHasSize(item);
+							mfp.updateStatus('error', imgSt.tError.replace('%url%', item.src) );
+						}
+
+						item.hasSize = true;
+						item.loaded = true;
+						item.loadError = true;
+					}
+				},
+				imgSt = mfp.st.image;
+
+
+			var el = template.find('.mfp-img');
+			if(el.length) {
+				var img = document.createElement('img');
+				img.className = 'mfp-img';
+				if(item.el && item.el.find('img').length) {
+					img.alt = item.el.find('img').attr('alt');
+				}
+				item.img = $(img).on('load.mfploader', onLoadComplete).on('error.mfploader', onLoadError);
+				img.src = item.src;
+
+				// without clone() "error" event is not firing when IMG is replaced by new IMG
+				// TODO: find a way to avoid such cloning
+				if(el.is('img')) {
+					item.img = item.img.clone();
+				}
+
+				img = item.img[0];
+				if(img.naturalWidth > 0) {
+					item.hasSize = true;
+				} else if(!img.width) {
+					item.hasSize = false;
+				}
+			}
+
+			mfp._parseMarkup(template, {
+				title: _getTitle(item),
+				img_replaceWith: item.img
+			}, item);
+
+			mfp.resizeImage();
+
+			if(item.hasSize) {
+				if(_imgInterval) clearInterval(_imgInterval);
+
+				if(item.loadError) {
+					template.addClass('mfp-loading');
+					mfp.updateStatus('error', imgSt.tError.replace('%url%', item.src) );
+				} else {
+					template.removeClass('mfp-loading');
+					mfp.updateStatus('ready');
+				}
+				return template;
+			}
+
+			mfp.updateStatus('loading');
+			item.loading = true;
+
+			if(!item.hasSize) {
+				item.imgHidden = true;
+				template.addClass('mfp-loading');
+				mfp.findImageSize(item);
+			}
+
+			return template;
+		}
+	}
+});
+
+/*>>image*/
+
+/*>>zoom*/
+var hasMozTransform,
+	getHasMozTransform = function() {
+		if(hasMozTransform === undefined) {
+			hasMozTransform = document.createElement('p').style.MozTransform !== undefined;
+		}
+		return hasMozTransform;
+	};
+
+$.magnificPopup.registerModule('zoom', {
+
+	options: {
+		enabled: false,
+		easing: 'ease-in-out',
+		duration: 300,
+		opener: function(element) {
+			return element.is('img') ? element : element.find('img');
+		}
+	},
+
+	proto: {
+
+		initZoom: function() {
+			var zoomSt = mfp.st.zoom,
+				ns = '.zoom',
+				image;
+
+			if(!zoomSt.enabled || !mfp.supportsTransition) {
+				return;
+			}
+
+			var duration = zoomSt.duration,
+				getElToAnimate = function(image) {
+					var newImg = image.clone().removeAttr('style').removeAttr('class').addClass('mfp-animated-image'),
+						transition = 'all '+(zoomSt.duration/1000)+'s ' + zoomSt.easing,
+						cssObj = {
+							position: 'fixed',
+							zIndex: 9999,
+							left: 0,
+							top: 0,
+							'-webkit-backface-visibility': 'hidden'
+						},
+						t = 'transition';
+
+					cssObj['-webkit-'+t] = cssObj['-moz-'+t] = cssObj['-o-'+t] = cssObj[t] = transition;
+
+					newImg.css(cssObj);
+					return newImg;
+				},
+				showMainContent = function() {
+					mfp.content.css('visibility', 'visible');
+				},
+				openTimeout,
+				animatedImg;
+
+			_mfpOn('BuildControls'+ns, function() {
+				if(mfp._allowZoom()) {
+
+					clearTimeout(openTimeout);
+					mfp.content.css('visibility', 'hidden');
+
+					// Basically, all code below does is clones existing image, puts in on top of the current one and animated it
+
+					image = mfp._getItemToZoom();
+
+					if(!image) {
+						showMainContent();
+						return;
+					}
+
+					animatedImg = getElToAnimate(image);
+
+					animatedImg.css( mfp._getOffset() );
+
+					mfp.wrap.append(animatedImg);
+
+					openTimeout = setTimeout(function() {
+						animatedImg.css( mfp._getOffset( true ) );
+						openTimeout = setTimeout(function() {
+
+							showMainContent();
+
+							setTimeout(function() {
+								animatedImg.remove();
+								image = animatedImg = null;
+								_mfpTrigger('ZoomAnimationEnded');
+							}, 16); // avoid blink when switching images
+
+						}, duration); // this timeout equals animation duration
+
+					}, 16); // by adding this timeout we avoid short glitch at the beginning of animation
+
+
+					// Lots of timeouts...
+				}
+			});
+			_mfpOn(BEFORE_CLOSE_EVENT+ns, function() {
+				if(mfp._allowZoom()) {
+
+					clearTimeout(openTimeout);
+
+					mfp.st.removalDelay = duration;
+
+					if(!image) {
+						image = mfp._getItemToZoom();
+						if(!image) {
+							return;
+						}
+						animatedImg = getElToAnimate(image);
+					}
+
+					animatedImg.css( mfp._getOffset(true) );
+					mfp.wrap.append(animatedImg);
+					mfp.content.css('visibility', 'hidden');
+
+					setTimeout(function() {
+						animatedImg.css( mfp._getOffset() );
+					}, 16);
+				}
+
+			});
+
+			_mfpOn(CLOSE_EVENT+ns, function() {
+				if(mfp._allowZoom()) {
+					showMainContent();
+					if(animatedImg) {
+						animatedImg.remove();
+					}
+					image = null;
+				}
+			});
+		},
+
+		_allowZoom: function() {
+			return mfp.currItem.type === 'image';
+		},
+
+		_getItemToZoom: function() {
+			if(mfp.currItem.hasSize) {
+				return mfp.currItem.img;
+			} else {
+				return false;
+			}
+		},
+
+		// Get element postion relative to viewport
+		_getOffset: function(isLarge) {
+			var el;
+			if(isLarge) {
+				el = mfp.currItem.img;
+			} else {
+				el = mfp.st.zoom.opener(mfp.currItem.el || mfp.currItem);
+			}
+
+			var offset = el.offset();
+			var paddingTop = parseInt(el.css('padding-top'),10);
+			var paddingBottom = parseInt(el.css('padding-bottom'),10);
+			offset.top -= ( $(window).scrollTop() - paddingTop );
+
+
+			/*
+
+			Animating left + top + width/height looks glitchy in Firefox, but perfect in Chrome. And vice-versa.
+
+			 */
+			var obj = {
+				width: el.width(),
+				// fix Zepto height+padding issue
+				height: (_isJQ ? el.innerHeight() : el[0].offsetHeight) - paddingBottom - paddingTop
+			};
+
+			// I hate to do this, but there is no another option
+			if( getHasMozTransform() ) {
+				obj['-moz-transform'] = obj['transform'] = 'translate(' + offset.left + 'px,' + offset.top + 'px)';
+			} else {
+				obj.left = offset.left;
+				obj.top = offset.top;
+			}
+			return obj;
+		}
+
+	}
+});
+
+
+
+/*>>zoom*/
+
+/*>>iframe*/
+
+var IFRAME_NS = 'iframe',
+	_emptyPage = '//about:blank',
+
+	_fixIframeBugs = function(isShowing) {
+		if(mfp.currTemplate[IFRAME_NS]) {
+			var el = mfp.currTemplate[IFRAME_NS].find('iframe');
+			if(el.length) {
+				// reset src after the popup is closed to avoid "video keeps playing after popup is closed" bug
+				if(!isShowing) {
+					el[0].src = _emptyPage;
+				}
+
+				// IE8 black screen bug fix
+				if(mfp.isIE8) {
+					el.css('display', isShowing ? 'block' : 'none');
+				}
+			}
+		}
+	};
+
+$.magnificPopup.registerModule(IFRAME_NS, {
+
+	options: {
+		markup: '<div class="mfp-iframe-scaler">'+
+					'<div class="mfp-close"></div>'+
+					'<iframe class="mfp-iframe" src="//about:blank" frameborder="0" allowfullscreen></iframe>'+
+				'</div>',
+
+		srcAction: 'iframe_src',
+
+		// we don't care and support only one default type of URL by default
+		patterns: {
+			youtube: {
+				index: 'youtube.com',
+				id: 'v=',
+				src: '//www.youtube.com/embed/%id%?autoplay=1'
+			},
+			vimeo: {
+				index: 'vimeo.com/',
+				id: '/',
+				src: '//player.vimeo.com/video/%id%?autoplay=1'
+			},
+			gmaps: {
+				index: '//maps.google.',
+				src: '%id%&output=embed'
+			}
+		}
+	},
+
+	proto: {
+		initIframe: function() {
+			mfp.types.push(IFRAME_NS);
+
+			_mfpOn('BeforeChange', function(e, prevType, newType) {
+				if(prevType !== newType) {
+					if(prevType === IFRAME_NS) {
+						_fixIframeBugs(); // iframe if removed
+					} else if(newType === IFRAME_NS) {
+						_fixIframeBugs(true); // iframe is showing
+					}
+				}// else {
+					// iframe source is switched, don't do anything
+				//}
+			});
+
+			_mfpOn(CLOSE_EVENT + '.' + IFRAME_NS, function() {
+				_fixIframeBugs();
+			});
+		},
+
+		getIframe: function(item, template) {
+			var embedSrc = item.src;
+			var iframeSt = mfp.st.iframe;
+
+			$.each(iframeSt.patterns, function() {
+				if(embedSrc.indexOf( this.index ) > -1) {
+					if(this.id) {
+						if(typeof this.id === 'string') {
+							embedSrc = embedSrc.substr(embedSrc.lastIndexOf(this.id)+this.id.length, embedSrc.length);
+						} else {
+							embedSrc = this.id.call( this, embedSrc );
+						}
+					}
+					embedSrc = this.src.replace('%id%', embedSrc );
+					return false; // break;
+				}
+			});
+
+			var dataObj = {};
+			if(iframeSt.srcAction) {
+				dataObj[iframeSt.srcAction] = embedSrc;
+			}
+			mfp._parseMarkup(template, dataObj, item);
+
+			mfp.updateStatus('ready');
+
+			return template;
+		}
+	}
+});
+
+
+
+/*>>iframe*/
+
+/*>>gallery*/
+/**
+ * Get looped index depending on number of slides
+ */
+var _getLoopedId = function(index) {
+		var numSlides = mfp.items.length;
+		if(index > numSlides - 1) {
+			return index - numSlides;
+		} else  if(index < 0) {
+			return numSlides + index;
+		}
+		return index;
+	},
+	_replaceCurrTotal = function(text, curr, total) {
+		return text.replace(/%curr%/gi, curr + 1).replace(/%total%/gi, total);
+	};
+
+$.magnificPopup.registerModule('gallery', {
+
+	options: {
+		enabled: false,
+		arrowMarkup: '<button title="%title%" type="button" class="mfp-arrow mfp-arrow-%dir%"></button>',
+		preload: [0,2],
+		navigateByImgClick: true,
+		arrows: true,
+
+		tPrev: 'Previous (Left arrow key)',
+		tNext: 'Next (Right arrow key)',
+		tCounter: '%curr% of %total%'
+	},
+
+	proto: {
+		initGallery: function() {
+
+			var gSt = mfp.st.gallery,
+				ns = '.mfp-gallery';
+
+			mfp.direction = true; // true - next, false - prev
+
+			if(!gSt || !gSt.enabled ) return false;
+
+			_wrapClasses += ' mfp-gallery';
+
+			_mfpOn(OPEN_EVENT+ns, function() {
+
+				if(gSt.navigateByImgClick) {
+					mfp.wrap.on('click'+ns, '.mfp-img', function() {
+						if(mfp.items.length > 1) {
+							mfp.next();
+							return false;
+						}
+					});
+				}
+
+				_document.on('keydown'+ns, function(e) {
+					if (e.keyCode === 37) {
+						mfp.prev();
+					} else if (e.keyCode === 39) {
+						mfp.next();
+					}
+				});
+			});
+
+			_mfpOn('UpdateStatus'+ns, function(e, data) {
+				if(data.text) {
+					data.text = _replaceCurrTotal(data.text, mfp.currItem.index, mfp.items.length);
+				}
+			});
+
+			_mfpOn(MARKUP_PARSE_EVENT+ns, function(e, element, values, item) {
+				var l = mfp.items.length;
+				values.counter = l > 1 ? _replaceCurrTotal(gSt.tCounter, item.index, l) : '';
+			});
+
+			_mfpOn('BuildControls' + ns, function() {
+				if(mfp.items.length > 1 && gSt.arrows && !mfp.arrowLeft) {
+					var markup = gSt.arrowMarkup,
+						arrowLeft = mfp.arrowLeft = $( markup.replace(/%title%/gi, gSt.tPrev).replace(/%dir%/gi, 'left') ).addClass(PREVENT_CLOSE_CLASS),
+						arrowRight = mfp.arrowRight = $( markup.replace(/%title%/gi, gSt.tNext).replace(/%dir%/gi, 'right') ).addClass(PREVENT_CLOSE_CLASS);
+
+					arrowLeft.click(function() {
+						mfp.prev();
+					});
+					arrowRight.click(function() {
+						mfp.next();
+					});
+
+					mfp.container.append(arrowLeft.add(arrowRight));
+				}
+			});
+
+			_mfpOn(CHANGE_EVENT+ns, function() {
+				if(mfp._preloadTimeout) clearTimeout(mfp._preloadTimeout);
+
+				mfp._preloadTimeout = setTimeout(function() {
+					mfp.preloadNearbyImages();
+					mfp._preloadTimeout = null;
+				}, 16);
+			});
+
+
+			_mfpOn(CLOSE_EVENT+ns, function() {
+				_document.off(ns);
+				mfp.wrap.off('click'+ns);
+				mfp.arrowRight = mfp.arrowLeft = null;
+			});
+
+		},
+		next: function() {
+			mfp.direction = true;
+			mfp.index = _getLoopedId(mfp.index + 1);
+			mfp.updateItemHTML();
+		},
+		prev: function() {
+			mfp.direction = false;
+			mfp.index = _getLoopedId(mfp.index - 1);
+			mfp.updateItemHTML();
+		},
+		goTo: function(newIndex) {
+			mfp.direction = (newIndex >= mfp.index);
+			mfp.index = newIndex;
+			mfp.updateItemHTML();
+		},
+		preloadNearbyImages: function() {
+			var p = mfp.st.gallery.preload,
+				preloadBefore = Math.min(p[0], mfp.items.length),
+				preloadAfter = Math.min(p[1], mfp.items.length),
+				i;
+
+			for(i = 1; i <= (mfp.direction ? preloadAfter : preloadBefore); i++) {
+				mfp._preloadItem(mfp.index+i);
+			}
+			for(i = 1; i <= (mfp.direction ? preloadBefore : preloadAfter); i++) {
+				mfp._preloadItem(mfp.index-i);
+			}
+		},
+		_preloadItem: function(index) {
+			index = _getLoopedId(index);
+
+			if(mfp.items[index].preloaded) {
+				return;
+			}
+
+			var item = mfp.items[index];
+			if(!item.parsed) {
+				item = mfp.parseEl( index );
+			}
+
+			_mfpTrigger('LazyLoad', item);
+
+			if(item.type === 'image') {
+				item.img = $('<img class="mfp-img" />').on('load.mfploader', function() {
+					item.hasSize = true;
+				}).on('error.mfploader', function() {
+					item.hasSize = true;
+					item.loadError = true;
+					_mfpTrigger('LazyLoadError', item);
+				}).attr('src', item.src);
+			}
+
+
+			item.preloaded = true;
+		}
+	}
+});
+
+/*>>gallery*/
+
+/*>>retina*/
+
+var RETINA_NS = 'retina';
+
+$.magnificPopup.registerModule(RETINA_NS, {
+	options: {
+		replaceSrc: function(item) {
+			return item.src.replace(/\.\w+$/, function(m) { return '@2x' + m; });
+		},
+		ratio: 1 // Function or number.  Set to 1 to disable.
+	},
+	proto: {
+		initRetina: function() {
+			if(window.devicePixelRatio > 1) {
+
+				var st = mfp.st.retina,
+					ratio = st.ratio;
+
+				ratio = !isNaN(ratio) ? ratio : ratio();
+
+				if(ratio > 1) {
+					_mfpOn('ImageHasSize' + '.' + RETINA_NS, function(e, item) {
+						item.img.css({
+							'max-width': item.img[0].naturalWidth / ratio,
+							'width': '100%'
+						});
+					});
+					_mfpOn('ElementParse' + '.' + RETINA_NS, function(e, item) {
+						item.src = st.replaceSrc(item, ratio);
+					});
+				}
+			}
+
+		}
+	}
+});
+
+/*>>retina*/
+ _checkInstance(); }));
\ No newline at end of file
diff --git a/vendor/dimsemenov/magnific-popup/dist/jquery.magnific-popup.min.js b/vendor/dimsemenov/magnific-popup/dist/jquery.magnific-popup.min.js
new file mode 100644
index 0000000000000000000000000000000000000000..6ee3a3bd5b52860ea3e99fdf8633ad683943245e
--- /dev/null
+++ b/vendor/dimsemenov/magnific-popup/dist/jquery.magnific-popup.min.js
@@ -0,0 +1,4 @@
+/*! Magnific Popup - v1.1.0 - 2016-02-20
+* http://dimsemenov.com/plugins/magnific-popup/
+* Copyright (c) 2016 Dmitry Semenov; */
+!function(a){"function"==typeof define&&define.amd?define(["jquery"],a):a("object"==typeof exports?require("jquery"):window.jQuery||window.Zepto)}(function(a){var b,c,d,e,f,g,h="Close",i="BeforeClose",j="AfterClose",k="BeforeAppend",l="MarkupParse",m="Open",n="Change",o="mfp",p="."+o,q="mfp-ready",r="mfp-removing",s="mfp-prevent-close",t=function(){},u=!!window.jQuery,v=a(window),w=function(a,c){b.ev.on(o+a+p,c)},x=function(b,c,d,e){var f=document.createElement("div");return f.className="mfp-"+b,d&&(f.innerHTML=d),e?c&&c.appendChild(f):(f=a(f),c&&f.appendTo(c)),f},y=function(c,d){b.ev.triggerHandler(o+c,d),b.st.callbacks&&(c=c.charAt(0).toLowerCase()+c.slice(1),b.st.callbacks[c]&&b.st.callbacks[c].apply(b,a.isArray(d)?d:[d]))},z=function(c){return c===g&&b.currTemplate.closeBtn||(b.currTemplate.closeBtn=a(b.st.closeMarkup.replace("%title%",b.st.tClose)),g=c),b.currTemplate.closeBtn},A=function(){a.magnificPopup.instance||(b=new t,b.init(),a.magnificPopup.instance=b)},B=function(){var a=document.createElement("p").style,b=["ms","O","Moz","Webkit"];if(void 0!==a.transition)return!0;for(;b.length;)if(b.pop()+"Transition"in a)return!0;return!1};t.prototype={constructor:t,init:function(){var c=navigator.appVersion;b.isLowIE=b.isIE8=document.all&&!document.addEventListener,b.isAndroid=/android/gi.test(c),b.isIOS=/iphone|ipad|ipod/gi.test(c),b.supportsTransition=B(),b.probablyMobile=b.isAndroid||b.isIOS||/(Opera Mini)|Kindle|webOS|BlackBerry|(Opera Mobi)|(Windows Phone)|IEMobile/i.test(navigator.userAgent),d=a(document),b.popupsCache={}},open:function(c){var e;if(c.isObj===!1){b.items=c.items.toArray(),b.index=0;var g,h=c.items;for(e=0;e<h.length;e++)if(g=h[e],g.parsed&&(g=g.el[0]),g===c.el[0]){b.index=e;break}}else b.items=a.isArray(c.items)?c.items:[c.items],b.index=c.index||0;if(b.isOpen)return void b.updateItemHTML();b.types=[],f="",c.mainEl&&c.mainEl.length?b.ev=c.mainEl.eq(0):b.ev=d,c.key?(b.popupsCache[c.key]||(b.popupsCache[c.key]={}),b.currTemplate=b.popupsCache[c.key]):b.currTemplate={},b.st=a.extend(!0,{},a.magnificPopup.defaults,c),b.fixedContentPos="auto"===b.st.fixedContentPos?!b.probablyMobile:b.st.fixedContentPos,b.st.modal&&(b.st.closeOnContentClick=!1,b.st.closeOnBgClick=!1,b.st.showCloseBtn=!1,b.st.enableEscapeKey=!1),b.bgOverlay||(b.bgOverlay=x("bg").on("click"+p,function(){b.close()}),b.wrap=x("wrap").attr("tabindex",-1).on("click"+p,function(a){b._checkIfClose(a.target)&&b.close()}),b.container=x("container",b.wrap)),b.contentContainer=x("content"),b.st.preloader&&(b.preloader=x("preloader",b.container,b.st.tLoading));var i=a.magnificPopup.modules;for(e=0;e<i.length;e++){var j=i[e];j=j.charAt(0).toUpperCase()+j.slice(1),b["init"+j].call(b)}y("BeforeOpen"),b.st.showCloseBtn&&(b.st.closeBtnInside?(w(l,function(a,b,c,d){c.close_replaceWith=z(d.type)}),f+=" mfp-close-btn-in"):b.wrap.append(z())),b.st.alignTop&&(f+=" mfp-align-top"),b.fixedContentPos?b.wrap.css({overflow:b.st.overflowY,overflowX:"hidden",overflowY:b.st.overflowY}):b.wrap.css({top:v.scrollTop(),position:"absolute"}),(b.st.fixedBgPos===!1||"auto"===b.st.fixedBgPos&&!b.fixedContentPos)&&b.bgOverlay.css({height:d.height(),position:"absolute"}),b.st.enableEscapeKey&&d.on("keyup"+p,function(a){27===a.keyCode&&b.close()}),v.on("resize"+p,function(){b.updateSize()}),b.st.closeOnContentClick||(f+=" mfp-auto-cursor"),f&&b.wrap.addClass(f);var k=b.wH=v.height(),n={};if(b.fixedContentPos&&b._hasScrollBar(k)){var o=b._getScrollbarSize();o&&(n.marginRight=o)}b.fixedContentPos&&(b.isIE7?a("body, html").css("overflow","hidden"):n.overflow="hidden");var r=b.st.mainClass;return b.isIE7&&(r+=" mfp-ie7"),r&&b._addClassToMFP(r),b.updateItemHTML(),y("BuildControls"),a("html").css(n),b.bgOverlay.add(b.wrap).prependTo(b.st.prependTo||a(document.body)),b._lastFocusedEl=document.activeElement,setTimeout(function(){b.content?(b._addClassToMFP(q),b._setFocus()):b.bgOverlay.addClass(q),d.on("focusin"+p,b._onFocusIn)},16),b.isOpen=!0,b.updateSize(k),y(m),c},close:function(){b.isOpen&&(y(i),b.isOpen=!1,b.st.removalDelay&&!b.isLowIE&&b.supportsTransition?(b._addClassToMFP(r),setTimeout(function(){b._close()},b.st.removalDelay)):b._close())},_close:function(){y(h);var c=r+" "+q+" ";if(b.bgOverlay.detach(),b.wrap.detach(),b.container.empty(),b.st.mainClass&&(c+=b.st.mainClass+" "),b._removeClassFromMFP(c),b.fixedContentPos){var e={marginRight:""};b.isIE7?a("body, html").css("overflow",""):e.overflow="",a("html").css(e)}d.off("keyup"+p+" focusin"+p),b.ev.off(p),b.wrap.attr("class","mfp-wrap").removeAttr("style"),b.bgOverlay.attr("class","mfp-bg"),b.container.attr("class","mfp-container"),!b.st.showCloseBtn||b.st.closeBtnInside&&b.currTemplate[b.currItem.type]!==!0||b.currTemplate.closeBtn&&b.currTemplate.closeBtn.detach(),b.st.autoFocusLast&&b._lastFocusedEl&&a(b._lastFocusedEl).focus(),b.currItem=null,b.content=null,b.currTemplate=null,b.prevHeight=0,y(j)},updateSize:function(a){if(b.isIOS){var c=document.documentElement.clientWidth/window.innerWidth,d=window.innerHeight*c;b.wrap.css("height",d),b.wH=d}else b.wH=a||v.height();b.fixedContentPos||b.wrap.css("height",b.wH),y("Resize")},updateItemHTML:function(){var c=b.items[b.index];b.contentContainer.detach(),b.content&&b.content.detach(),c.parsed||(c=b.parseEl(b.index));var d=c.type;if(y("BeforeChange",[b.currItem?b.currItem.type:"",d]),b.currItem=c,!b.currTemplate[d]){var f=b.st[d]?b.st[d].markup:!1;y("FirstMarkupParse",f),f?b.currTemplate[d]=a(f):b.currTemplate[d]=!0}e&&e!==c.type&&b.container.removeClass("mfp-"+e+"-holder");var g=b["get"+d.charAt(0).toUpperCase()+d.slice(1)](c,b.currTemplate[d]);b.appendContent(g,d),c.preloaded=!0,y(n,c),e=c.type,b.container.prepend(b.contentContainer),y("AfterChange")},appendContent:function(a,c){b.content=a,a?b.st.showCloseBtn&&b.st.closeBtnInside&&b.currTemplate[c]===!0?b.content.find(".mfp-close").length||b.content.append(z()):b.content=a:b.content="",y(k),b.container.addClass("mfp-"+c+"-holder"),b.contentContainer.append(b.content)},parseEl:function(c){var d,e=b.items[c];if(e.tagName?e={el:a(e)}:(d=e.type,e={data:e,src:e.src}),e.el){for(var f=b.types,g=0;g<f.length;g++)if(e.el.hasClass("mfp-"+f[g])){d=f[g];break}e.src=e.el.attr("data-mfp-src"),e.src||(e.src=e.el.attr("href"))}return e.type=d||b.st.type||"inline",e.index=c,e.parsed=!0,b.items[c]=e,y("ElementParse",e),b.items[c]},addGroup:function(a,c){var d=function(d){d.mfpEl=this,b._openClick(d,a,c)};c||(c={});var e="click.magnificPopup";c.mainEl=a,c.items?(c.isObj=!0,a.off(e).on(e,d)):(c.isObj=!1,c.delegate?a.off(e).on(e,c.delegate,d):(c.items=a,a.off(e).on(e,d)))},_openClick:function(c,d,e){var f=void 0!==e.midClick?e.midClick:a.magnificPopup.defaults.midClick;if(f||!(2===c.which||c.ctrlKey||c.metaKey||c.altKey||c.shiftKey)){var g=void 0!==e.disableOn?e.disableOn:a.magnificPopup.defaults.disableOn;if(g)if(a.isFunction(g)){if(!g.call(b))return!0}else if(v.width()<g)return!0;c.type&&(c.preventDefault(),b.isOpen&&c.stopPropagation()),e.el=a(c.mfpEl),e.delegate&&(e.items=d.find(e.delegate)),b.open(e)}},updateStatus:function(a,d){if(b.preloader){c!==a&&b.container.removeClass("mfp-s-"+c),d||"loading"!==a||(d=b.st.tLoading);var e={status:a,text:d};y("UpdateStatus",e),a=e.status,d=e.text,b.preloader.html(d),b.preloader.find("a").on("click",function(a){a.stopImmediatePropagation()}),b.container.addClass("mfp-s-"+a),c=a}},_checkIfClose:function(c){if(!a(c).hasClass(s)){var d=b.st.closeOnContentClick,e=b.st.closeOnBgClick;if(d&&e)return!0;if(!b.content||a(c).hasClass("mfp-close")||b.preloader&&c===b.preloader[0])return!0;if(c===b.content[0]||a.contains(b.content[0],c)){if(d)return!0}else if(e&&a.contains(document,c))return!0;return!1}},_addClassToMFP:function(a){b.bgOverlay.addClass(a),b.wrap.addClass(a)},_removeClassFromMFP:function(a){this.bgOverlay.removeClass(a),b.wrap.removeClass(a)},_hasScrollBar:function(a){return(b.isIE7?d.height():document.body.scrollHeight)>(a||v.height())},_setFocus:function(){(b.st.focus?b.content.find(b.st.focus).eq(0):b.wrap).focus()},_onFocusIn:function(c){return c.target===b.wrap[0]||a.contains(b.wrap[0],c.target)?void 0:(b._setFocus(),!1)},_parseMarkup:function(b,c,d){var e;d.data&&(c=a.extend(d.data,c)),y(l,[b,c,d]),a.each(c,function(c,d){if(void 0===d||d===!1)return!0;if(e=c.split("_"),e.length>1){var f=b.find(p+"-"+e[0]);if(f.length>0){var g=e[1];"replaceWith"===g?f[0]!==d[0]&&f.replaceWith(d):"img"===g?f.is("img")?f.attr("src",d):f.replaceWith(a("<img>").attr("src",d).attr("class",f.attr("class"))):f.attr(e[1],d)}}else b.find(p+"-"+c).html(d)})},_getScrollbarSize:function(){if(void 0===b.scrollbarSize){var a=document.createElement("div");a.style.cssText="width: 99px; height: 99px; overflow: scroll; position: absolute; top: -9999px;",document.body.appendChild(a),b.scrollbarSize=a.offsetWidth-a.clientWidth,document.body.removeChild(a)}return b.scrollbarSize}},a.magnificPopup={instance:null,proto:t.prototype,modules:[],open:function(b,c){return A(),b=b?a.extend(!0,{},b):{},b.isObj=!0,b.index=c||0,this.instance.open(b)},close:function(){return a.magnificPopup.instance&&a.magnificPopup.instance.close()},registerModule:function(b,c){c.options&&(a.magnificPopup.defaults[b]=c.options),a.extend(this.proto,c.proto),this.modules.push(b)},defaults:{disableOn:0,key:null,midClick:!1,mainClass:"",preloader:!0,focus:"",closeOnContentClick:!1,closeOnBgClick:!0,closeBtnInside:!0,showCloseBtn:!0,enableEscapeKey:!0,modal:!1,alignTop:!1,removalDelay:0,prependTo:null,fixedContentPos:"auto",fixedBgPos:"auto",overflowY:"auto",closeMarkup:'<button title="%title%" type="button" class="mfp-close">&#215;</button>',tClose:"Close (Esc)",tLoading:"Loading...",autoFocusLast:!0}},a.fn.magnificPopup=function(c){A();var d=a(this);if("string"==typeof c)if("open"===c){var e,f=u?d.data("magnificPopup"):d[0].magnificPopup,g=parseInt(arguments[1],10)||0;f.items?e=f.items[g]:(e=d,f.delegate&&(e=e.find(f.delegate)),e=e.eq(g)),b._openClick({mfpEl:e},d,f)}else b.isOpen&&b[c].apply(b,Array.prototype.slice.call(arguments,1));else c=a.extend(!0,{},c),u?d.data("magnificPopup",c):d[0].magnificPopup=c,b.addGroup(d,c);return d};var C,D,E,F="inline",G=function(){E&&(D.after(E.addClass(C)).detach(),E=null)};a.magnificPopup.registerModule(F,{options:{hiddenClass:"hide",markup:"",tNotFound:"Content not found"},proto:{initInline:function(){b.types.push(F),w(h+"."+F,function(){G()})},getInline:function(c,d){if(G(),c.src){var e=b.st.inline,f=a(c.src);if(f.length){var g=f[0].parentNode;g&&g.tagName&&(D||(C=e.hiddenClass,D=x(C),C="mfp-"+C),E=f.after(D).detach().removeClass(C)),b.updateStatus("ready")}else b.updateStatus("error",e.tNotFound),f=a("<div>");return c.inlineElement=f,f}return b.updateStatus("ready"),b._parseMarkup(d,{},c),d}}});var H,I="ajax",J=function(){H&&a(document.body).removeClass(H)},K=function(){J(),b.req&&b.req.abort()};a.magnificPopup.registerModule(I,{options:{settings:null,cursor:"mfp-ajax-cur",tError:'<a href="%url%">The content</a> could not be loaded.'},proto:{initAjax:function(){b.types.push(I),H=b.st.ajax.cursor,w(h+"."+I,K),w("BeforeChange."+I,K)},getAjax:function(c){H&&a(document.body).addClass(H),b.updateStatus("loading");var d=a.extend({url:c.src,success:function(d,e,f){var g={data:d,xhr:f};y("ParseAjax",g),b.appendContent(a(g.data),I),c.finished=!0,J(),b._setFocus(),setTimeout(function(){b.wrap.addClass(q)},16),b.updateStatus("ready"),y("AjaxContentAdded")},error:function(){J(),c.finished=c.loadError=!0,b.updateStatus("error",b.st.ajax.tError.replace("%url%",c.src))}},b.st.ajax.settings);return b.req=a.ajax(d),""}}});var L,M=function(c){if(c.data&&void 0!==c.data.title)return c.data.title;var d=b.st.image.titleSrc;if(d){if(a.isFunction(d))return d.call(b,c);if(c.el)return c.el.attr(d)||""}return""};a.magnificPopup.registerModule("image",{options:{markup:'<div class="mfp-figure"><div class="mfp-close"></div><figure><div class="mfp-img"></div><figcaption><div class="mfp-bottom-bar"><div class="mfp-title"></div><div class="mfp-counter"></div></div></figcaption></figure></div>',cursor:"mfp-zoom-out-cur",titleSrc:"title",verticalFit:!0,tError:'<a href="%url%">The image</a> could not be loaded.'},proto:{initImage:function(){var c=b.st.image,d=".image";b.types.push("image"),w(m+d,function(){"image"===b.currItem.type&&c.cursor&&a(document.body).addClass(c.cursor)}),w(h+d,function(){c.cursor&&a(document.body).removeClass(c.cursor),v.off("resize"+p)}),w("Resize"+d,b.resizeImage),b.isLowIE&&w("AfterChange",b.resizeImage)},resizeImage:function(){var a=b.currItem;if(a&&a.img&&b.st.image.verticalFit){var c=0;b.isLowIE&&(c=parseInt(a.img.css("padding-top"),10)+parseInt(a.img.css("padding-bottom"),10)),a.img.css("max-height",b.wH-c)}},_onImageHasSize:function(a){a.img&&(a.hasSize=!0,L&&clearInterval(L),a.isCheckingImgSize=!1,y("ImageHasSize",a),a.imgHidden&&(b.content&&b.content.removeClass("mfp-loading"),a.imgHidden=!1))},findImageSize:function(a){var c=0,d=a.img[0],e=function(f){L&&clearInterval(L),L=setInterval(function(){return d.naturalWidth>0?void b._onImageHasSize(a):(c>200&&clearInterval(L),c++,void(3===c?e(10):40===c?e(50):100===c&&e(500)))},f)};e(1)},getImage:function(c,d){var e=0,f=function(){c&&(c.img[0].complete?(c.img.off(".mfploader"),c===b.currItem&&(b._onImageHasSize(c),b.updateStatus("ready")),c.hasSize=!0,c.loaded=!0,y("ImageLoadComplete")):(e++,200>e?setTimeout(f,100):g()))},g=function(){c&&(c.img.off(".mfploader"),c===b.currItem&&(b._onImageHasSize(c),b.updateStatus("error",h.tError.replace("%url%",c.src))),c.hasSize=!0,c.loaded=!0,c.loadError=!0)},h=b.st.image,i=d.find(".mfp-img");if(i.length){var j=document.createElement("img");j.className="mfp-img",c.el&&c.el.find("img").length&&(j.alt=c.el.find("img").attr("alt")),c.img=a(j).on("load.mfploader",f).on("error.mfploader",g),j.src=c.src,i.is("img")&&(c.img=c.img.clone()),j=c.img[0],j.naturalWidth>0?c.hasSize=!0:j.width||(c.hasSize=!1)}return b._parseMarkup(d,{title:M(c),img_replaceWith:c.img},c),b.resizeImage(),c.hasSize?(L&&clearInterval(L),c.loadError?(d.addClass("mfp-loading"),b.updateStatus("error",h.tError.replace("%url%",c.src))):(d.removeClass("mfp-loading"),b.updateStatus("ready")),d):(b.updateStatus("loading"),c.loading=!0,c.hasSize||(c.imgHidden=!0,d.addClass("mfp-loading"),b.findImageSize(c)),d)}}});var N,O=function(){return void 0===N&&(N=void 0!==document.createElement("p").style.MozTransform),N};a.magnificPopup.registerModule("zoom",{options:{enabled:!1,easing:"ease-in-out",duration:300,opener:function(a){return a.is("img")?a:a.find("img")}},proto:{initZoom:function(){var a,c=b.st.zoom,d=".zoom";if(c.enabled&&b.supportsTransition){var e,f,g=c.duration,j=function(a){var b=a.clone().removeAttr("style").removeAttr("class").addClass("mfp-animated-image"),d="all "+c.duration/1e3+"s "+c.easing,e={position:"fixed",zIndex:9999,left:0,top:0,"-webkit-backface-visibility":"hidden"},f="transition";return e["-webkit-"+f]=e["-moz-"+f]=e["-o-"+f]=e[f]=d,b.css(e),b},k=function(){b.content.css("visibility","visible")};w("BuildControls"+d,function(){if(b._allowZoom()){if(clearTimeout(e),b.content.css("visibility","hidden"),a=b._getItemToZoom(),!a)return void k();f=j(a),f.css(b._getOffset()),b.wrap.append(f),e=setTimeout(function(){f.css(b._getOffset(!0)),e=setTimeout(function(){k(),setTimeout(function(){f.remove(),a=f=null,y("ZoomAnimationEnded")},16)},g)},16)}}),w(i+d,function(){if(b._allowZoom()){if(clearTimeout(e),b.st.removalDelay=g,!a){if(a=b._getItemToZoom(),!a)return;f=j(a)}f.css(b._getOffset(!0)),b.wrap.append(f),b.content.css("visibility","hidden"),setTimeout(function(){f.css(b._getOffset())},16)}}),w(h+d,function(){b._allowZoom()&&(k(),f&&f.remove(),a=null)})}},_allowZoom:function(){return"image"===b.currItem.type},_getItemToZoom:function(){return b.currItem.hasSize?b.currItem.img:!1},_getOffset:function(c){var d;d=c?b.currItem.img:b.st.zoom.opener(b.currItem.el||b.currItem);var e=d.offset(),f=parseInt(d.css("padding-top"),10),g=parseInt(d.css("padding-bottom"),10);e.top-=a(window).scrollTop()-f;var h={width:d.width(),height:(u?d.innerHeight():d[0].offsetHeight)-g-f};return O()?h["-moz-transform"]=h.transform="translate("+e.left+"px,"+e.top+"px)":(h.left=e.left,h.top=e.top),h}}});var P="iframe",Q="//about:blank",R=function(a){if(b.currTemplate[P]){var c=b.currTemplate[P].find("iframe");c.length&&(a||(c[0].src=Q),b.isIE8&&c.css("display",a?"block":"none"))}};a.magnificPopup.registerModule(P,{options:{markup:'<div class="mfp-iframe-scaler"><div class="mfp-close"></div><iframe class="mfp-iframe" src="//about:blank" frameborder="0" allowfullscreen></iframe></div>',srcAction:"iframe_src",patterns:{youtube:{index:"youtube.com",id:"v=",src:"//www.youtube.com/embed/%id%?autoplay=1"},vimeo:{index:"vimeo.com/",id:"/",src:"//player.vimeo.com/video/%id%?autoplay=1"},gmaps:{index:"//maps.google.",src:"%id%&output=embed"}}},proto:{initIframe:function(){b.types.push(P),w("BeforeChange",function(a,b,c){b!==c&&(b===P?R():c===P&&R(!0))}),w(h+"."+P,function(){R()})},getIframe:function(c,d){var e=c.src,f=b.st.iframe;a.each(f.patterns,function(){return e.indexOf(this.index)>-1?(this.id&&(e="string"==typeof this.id?e.substr(e.lastIndexOf(this.id)+this.id.length,e.length):this.id.call(this,e)),e=this.src.replace("%id%",e),!1):void 0});var g={};return f.srcAction&&(g[f.srcAction]=e),b._parseMarkup(d,g,c),b.updateStatus("ready"),d}}});var S=function(a){var c=b.items.length;return a>c-1?a-c:0>a?c+a:a},T=function(a,b,c){return a.replace(/%curr%/gi,b+1).replace(/%total%/gi,c)};a.magnificPopup.registerModule("gallery",{options:{enabled:!1,arrowMarkup:'<button title="%title%" type="button" class="mfp-arrow mfp-arrow-%dir%"></button>',preload:[0,2],navigateByImgClick:!0,arrows:!0,tPrev:"Previous (Left arrow key)",tNext:"Next (Right arrow key)",tCounter:"%curr% of %total%"},proto:{initGallery:function(){var c=b.st.gallery,e=".mfp-gallery";return b.direction=!0,c&&c.enabled?(f+=" mfp-gallery",w(m+e,function(){c.navigateByImgClick&&b.wrap.on("click"+e,".mfp-img",function(){return b.items.length>1?(b.next(),!1):void 0}),d.on("keydown"+e,function(a){37===a.keyCode?b.prev():39===a.keyCode&&b.next()})}),w("UpdateStatus"+e,function(a,c){c.text&&(c.text=T(c.text,b.currItem.index,b.items.length))}),w(l+e,function(a,d,e,f){var g=b.items.length;e.counter=g>1?T(c.tCounter,f.index,g):""}),w("BuildControls"+e,function(){if(b.items.length>1&&c.arrows&&!b.arrowLeft){var d=c.arrowMarkup,e=b.arrowLeft=a(d.replace(/%title%/gi,c.tPrev).replace(/%dir%/gi,"left")).addClass(s),f=b.arrowRight=a(d.replace(/%title%/gi,c.tNext).replace(/%dir%/gi,"right")).addClass(s);e.click(function(){b.prev()}),f.click(function(){b.next()}),b.container.append(e.add(f))}}),w(n+e,function(){b._preloadTimeout&&clearTimeout(b._preloadTimeout),b._preloadTimeout=setTimeout(function(){b.preloadNearbyImages(),b._preloadTimeout=null},16)}),void w(h+e,function(){d.off(e),b.wrap.off("click"+e),b.arrowRight=b.arrowLeft=null})):!1},next:function(){b.direction=!0,b.index=S(b.index+1),b.updateItemHTML()},prev:function(){b.direction=!1,b.index=S(b.index-1),b.updateItemHTML()},goTo:function(a){b.direction=a>=b.index,b.index=a,b.updateItemHTML()},preloadNearbyImages:function(){var a,c=b.st.gallery.preload,d=Math.min(c[0],b.items.length),e=Math.min(c[1],b.items.length);for(a=1;a<=(b.direction?e:d);a++)b._preloadItem(b.index+a);for(a=1;a<=(b.direction?d:e);a++)b._preloadItem(b.index-a)},_preloadItem:function(c){if(c=S(c),!b.items[c].preloaded){var d=b.items[c];d.parsed||(d=b.parseEl(c)),y("LazyLoad",d),"image"===d.type&&(d.img=a('<img class="mfp-img" />').on("load.mfploader",function(){d.hasSize=!0}).on("error.mfploader",function(){d.hasSize=!0,d.loadError=!0,y("LazyLoadError",d)}).attr("src",d.src)),d.preloaded=!0}}}});var U="retina";a.magnificPopup.registerModule(U,{options:{replaceSrc:function(a){return a.src.replace(/\.\w+$/,function(a){return"@2x"+a})},ratio:1},proto:{initRetina:function(){if(window.devicePixelRatio>1){var a=b.st.retina,c=a.ratio;c=isNaN(c)?c():c,c>1&&(w("ImageHasSize."+U,function(a,b){b.img.css({"max-width":b.img[0].naturalWidth/c,width:"100%"})}),w("ElementParse."+U,function(b,d){d.src=a.replaceSrc(d,c)}))}}}}),A()});
\ No newline at end of file
diff --git a/vendor/dimsemenov/magnific-popup/dist/magnific-popup.css b/vendor/dimsemenov/magnific-popup/dist/magnific-popup.css
new file mode 100644
index 0000000000000000000000000000000000000000..8561e181adf05fbc285c993cb4664872cd11453f
--- /dev/null
+++ b/vendor/dimsemenov/magnific-popup/dist/magnific-popup.css
@@ -0,0 +1,351 @@
+/* Magnific Popup CSS */
+.mfp-bg {
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100%;
+  z-index: 1042;
+  overflow: hidden;
+  position: fixed;
+  background: #0b0b0b;
+  opacity: 0.8; }
+
+.mfp-wrap {
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100%;
+  z-index: 1043;
+  position: fixed;
+  outline: none !important;
+  -webkit-backface-visibility: hidden; }
+
+.mfp-container {
+  text-align: center;
+  position: absolute;
+  width: 100%;
+  height: 100%;
+  left: 0;
+  top: 0;
+  padding: 0 8px;
+  box-sizing: border-box; }
+
+.mfp-container:before {
+  content: '';
+  display: inline-block;
+  height: 100%;
+  vertical-align: middle; }
+
+.mfp-align-top .mfp-container:before {
+  display: none; }
+
+.mfp-content {
+  position: relative;
+  display: inline-block;
+  vertical-align: middle;
+  margin: 0 auto;
+  text-align: left;
+  z-index: 1045; }
+
+.mfp-inline-holder .mfp-content,
+.mfp-ajax-holder .mfp-content {
+  width: 100%;
+  cursor: auto; }
+
+.mfp-ajax-cur {
+  cursor: progress; }
+
+.mfp-zoom-out-cur, .mfp-zoom-out-cur .mfp-image-holder .mfp-close {
+  cursor: -moz-zoom-out;
+  cursor: -webkit-zoom-out;
+  cursor: zoom-out; }
+
+.mfp-zoom {
+  cursor: pointer;
+  cursor: -webkit-zoom-in;
+  cursor: -moz-zoom-in;
+  cursor: zoom-in; }
+
+.mfp-auto-cursor .mfp-content {
+  cursor: auto; }
+
+.mfp-close,
+.mfp-arrow,
+.mfp-preloader,
+.mfp-counter {
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  user-select: none; }
+
+.mfp-loading.mfp-figure {
+  display: none; }
+
+.mfp-hide {
+  display: none !important; }
+
+.mfp-preloader {
+  color: #CCC;
+  position: absolute;
+  top: 50%;
+  width: auto;
+  text-align: center;
+  margin-top: -0.8em;
+  left: 8px;
+  right: 8px;
+  z-index: 1044; }
+  .mfp-preloader a {
+    color: #CCC; }
+    .mfp-preloader a:hover {
+      color: #FFF; }
+
+.mfp-s-ready .mfp-preloader {
+  display: none; }
+
+.mfp-s-error .mfp-content {
+  display: none; }
+
+button.mfp-close,
+button.mfp-arrow {
+  overflow: visible;
+  cursor: pointer;
+  background: transparent;
+  border: 0;
+  -webkit-appearance: none;
+  display: block;
+  outline: none;
+  padding: 0;
+  z-index: 1046;
+  box-shadow: none;
+  touch-action: manipulation; }
+
+button::-moz-focus-inner {
+  padding: 0;
+  border: 0; }
+
+.mfp-close {
+  width: 44px;
+  height: 44px;
+  line-height: 44px;
+  position: absolute;
+  right: 0;
+  top: 0;
+  text-decoration: none;
+  text-align: center;
+  opacity: 0.65;
+  padding: 0 0 18px 10px;
+  color: #FFF;
+  font-style: normal;
+  font-size: 28px;
+  font-family: Arial, Baskerville, monospace; }
+  .mfp-close:hover,
+  .mfp-close:focus {
+    opacity: 1; }
+  .mfp-close:active {
+    top: 1px; }
+
+.mfp-close-btn-in .mfp-close {
+  color: #333; }
+
+.mfp-image-holder .mfp-close,
+.mfp-iframe-holder .mfp-close {
+  color: #FFF;
+  right: -6px;
+  text-align: right;
+  padding-right: 6px;
+  width: 100%; }
+
+.mfp-counter {
+  position: absolute;
+  top: 0;
+  right: 0;
+  color: #CCC;
+  font-size: 12px;
+  line-height: 18px;
+  white-space: nowrap; }
+
+.mfp-arrow {
+  position: absolute;
+  opacity: 0.65;
+  margin: 0;
+  top: 50%;
+  margin-top: -55px;
+  padding: 0;
+  width: 90px;
+  height: 110px;
+  -webkit-tap-highlight-color: transparent; }
+  .mfp-arrow:active {
+    margin-top: -54px; }
+  .mfp-arrow:hover,
+  .mfp-arrow:focus {
+    opacity: 1; }
+  .mfp-arrow:before,
+  .mfp-arrow:after {
+    content: '';
+    display: block;
+    width: 0;
+    height: 0;
+    position: absolute;
+    left: 0;
+    top: 0;
+    margin-top: 35px;
+    margin-left: 35px;
+    border: medium inset transparent; }
+  .mfp-arrow:after {
+    border-top-width: 13px;
+    border-bottom-width: 13px;
+    top: 8px; }
+  .mfp-arrow:before {
+    border-top-width: 21px;
+    border-bottom-width: 21px;
+    opacity: 0.7; }
+
+.mfp-arrow-left {
+  left: 0; }
+  .mfp-arrow-left:after {
+    border-right: 17px solid #FFF;
+    margin-left: 31px; }
+  .mfp-arrow-left:before {
+    margin-left: 25px;
+    border-right: 27px solid #3F3F3F; }
+
+.mfp-arrow-right {
+  right: 0; }
+  .mfp-arrow-right:after {
+    border-left: 17px solid #FFF;
+    margin-left: 39px; }
+  .mfp-arrow-right:before {
+    border-left: 27px solid #3F3F3F; }
+
+.mfp-iframe-holder {
+  padding-top: 40px;
+  padding-bottom: 40px; }
+  .mfp-iframe-holder .mfp-content {
+    line-height: 0;
+    width: 100%;
+    max-width: 900px; }
+  .mfp-iframe-holder .mfp-close {
+    top: -40px; }
+
+.mfp-iframe-scaler {
+  width: 100%;
+  height: 0;
+  overflow: hidden;
+  padding-top: 56.25%; }
+  .mfp-iframe-scaler iframe {
+    position: absolute;
+    display: block;
+    top: 0;
+    left: 0;
+    width: 100%;
+    height: 100%;
+    box-shadow: 0 0 8px rgba(0, 0, 0, 0.6);
+    background: #000; }
+
+/* Main image in popup */
+img.mfp-img {
+  width: auto;
+  max-width: 100%;
+  height: auto;
+  display: block;
+  line-height: 0;
+  box-sizing: border-box;
+  padding: 40px 0 40px;
+  margin: 0 auto; }
+
+/* The shadow behind the image */
+.mfp-figure {
+  line-height: 0; }
+  .mfp-figure:after {
+    content: '';
+    position: absolute;
+    left: 0;
+    top: 40px;
+    bottom: 40px;
+    display: block;
+    right: 0;
+    width: auto;
+    height: auto;
+    z-index: -1;
+    box-shadow: 0 0 8px rgba(0, 0, 0, 0.6);
+    background: #444; }
+  .mfp-figure small {
+    color: #BDBDBD;
+    display: block;
+    font-size: 12px;
+    line-height: 14px; }
+  .mfp-figure figure {
+    margin: 0; }
+
+.mfp-bottom-bar {
+  margin-top: -36px;
+  position: absolute;
+  top: 100%;
+  left: 0;
+  width: 100%;
+  cursor: auto; }
+
+.mfp-title {
+  text-align: left;
+  line-height: 18px;
+  color: #F3F3F3;
+  word-wrap: break-word;
+  padding-right: 36px; }
+
+.mfp-image-holder .mfp-content {
+  max-width: 100%; }
+
+.mfp-gallery .mfp-image-holder .mfp-figure {
+  cursor: pointer; }
+
+@media screen and (max-width: 800px) and (orientation: landscape), screen and (max-height: 300px) {
+  /**
+       * Remove all paddings around the image on small screen
+       */
+  .mfp-img-mobile .mfp-image-holder {
+    padding-left: 0;
+    padding-right: 0; }
+  .mfp-img-mobile img.mfp-img {
+    padding: 0; }
+  .mfp-img-mobile .mfp-figure:after {
+    top: 0;
+    bottom: 0; }
+  .mfp-img-mobile .mfp-figure small {
+    display: inline;
+    margin-left: 5px; }
+  .mfp-img-mobile .mfp-bottom-bar {
+    background: rgba(0, 0, 0, 0.6);
+    bottom: 0;
+    margin: 0;
+    top: auto;
+    padding: 3px 5px;
+    position: fixed;
+    box-sizing: border-box; }
+    .mfp-img-mobile .mfp-bottom-bar:empty {
+      padding: 0; }
+  .mfp-img-mobile .mfp-counter {
+    right: 5px;
+    top: 3px; }
+  .mfp-img-mobile .mfp-close {
+    top: 0;
+    right: 0;
+    width: 35px;
+    height: 35px;
+    line-height: 35px;
+    background: rgba(0, 0, 0, 0.6);
+    position: fixed;
+    text-align: center;
+    padding: 0; } }
+
+@media all and (max-width: 900px) {
+  .mfp-arrow {
+    -webkit-transform: scale(0.75);
+    transform: scale(0.75); }
+  .mfp-arrow-left {
+    -webkit-transform-origin: 0;
+    transform-origin: 0; }
+  .mfp-arrow-right {
+    -webkit-transform-origin: 100%;
+    transform-origin: 100%; }
+  .mfp-container {
+    padding-left: 6px;
+    padding-right: 6px; } }
diff --git a/vendor/dimsemenov/magnific-popup/libs/jquery-loader.js b/vendor/dimsemenov/magnific-popup/libs/jquery-loader.js
new file mode 100644
index 0000000000000000000000000000000000000000..84a060160498f64e8fbac38aecf45706f8539b6d
--- /dev/null
+++ b/vendor/dimsemenov/magnific-popup/libs/jquery-loader.js
@@ -0,0 +1,12 @@
+(function() {
+  // Default to the local version.
+  var path = '../libs/jquery/jquery.js';
+  // Get any jquery=___ param from the query string.
+  var jqversion = location.search.match(/[?&]jquery=(.*?)(?=&|$)/);
+  // If a version was specified, use that version from code.jquery.com.
+  if (jqversion) {
+    path = 'http://code.jquery.com/jquery-' + jqversion[1] + '.js';
+  }
+  // This is the only time I'll ever use document.write, I promise!
+  document.write('<script src="' + path + '"></script>');
+}());
diff --git a/vendor/dimsemenov/magnific-popup/libs/jquery/jquery.js b/vendor/dimsemenov/magnific-popup/libs/jquery/jquery.js
new file mode 100644
index 0000000000000000000000000000000000000000..299d3e365a990481a2bf981e50e2dcbfd3b94843
--- /dev/null
+++ b/vendor/dimsemenov/magnific-popup/libs/jquery/jquery.js
@@ -0,0 +1,9555 @@
+/*!
+ * jQuery JavaScript Library v1.9.0
+ * http://jquery.com/
+ *
+ * Includes Sizzle.js
+ * http://sizzlejs.com/
+ *
+ * Copyright 2005, 2012 jQuery Foundation, Inc. and other contributors
+ * Released under the MIT license
+ * http://jquery.org/license
+ *
+ * Date: 2013-1-14
+ */
+(function( window, undefined ) {
+"use strict";
+var
+	// A central reference to the root jQuery(document)
+	rootjQuery,
+
+	// The deferred used on DOM ready
+	readyList,
+
+	// Use the correct document accordingly with window argument (sandbox)
+	document = window.document,
+	location = window.location,
+
+	// Map over jQuery in case of overwrite
+	_jQuery = window.jQuery,
+
+	// Map over the $ in case of overwrite
+	_$ = window.$,
+
+	// [[Class]] -> type pairs
+	class2type = {},
+
+	// List of deleted data cache ids, so we can reuse them
+	core_deletedIds = [],
+
+	core_version = "1.9.0",
+
+	// Save a reference to some core methods
+	core_concat = core_deletedIds.concat,
+	core_push = core_deletedIds.push,
+	core_slice = core_deletedIds.slice,
+	core_indexOf = core_deletedIds.indexOf,
+	core_toString = class2type.toString,
+	core_hasOwn = class2type.hasOwnProperty,
+	core_trim = core_version.trim,
+
+	// Define a local copy of jQuery
+	jQuery = function( selector, context ) {
+		// The jQuery object is actually just the init constructor 'enhanced'
+		return new jQuery.fn.init( selector, context, rootjQuery );
+	},
+
+	// Used for matching numbers
+	core_pnum = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,
+
+	// Used for splitting on whitespace
+	core_rnotwhite = /\S+/g,
+
+	// Make sure we trim BOM and NBSP (here's looking at you, Safari 5.0 and IE)
+	rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
+
+	// A simple way to check for HTML strings
+	// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
+	// Strict HTML recognition (#11290: must start with <)
+	rquickExpr = /^(?:(<[\w\W]+>)[^>]*|#([\w-]*))$/,
+
+	// Match a standalone tag
+	rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>|)$/,
+
+	// JSON RegExp
+	rvalidchars = /^[\],:{}\s]*$/,
+	rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g,
+	rvalidescape = /\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,
+	rvalidtokens = /"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,
+
+	// Matches dashed string for camelizing
+	rmsPrefix = /^-ms-/,
+	rdashAlpha = /-([\da-z])/gi,
+
+	// Used by jQuery.camelCase as callback to replace()
+	fcamelCase = function( all, letter ) {
+		return letter.toUpperCase();
+	},
+
+	// The ready event handler and self cleanup method
+	DOMContentLoaded = function() {
+		if ( document.addEventListener ) {
+			document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false );
+			jQuery.ready();
+		} else if ( document.readyState === "complete" ) {
+			// we're here because readyState === "complete" in oldIE
+			// which is good enough for us to call the dom ready!
+			document.detachEvent( "onreadystatechange", DOMContentLoaded );
+			jQuery.ready();
+		}
+	};
+
+jQuery.fn = jQuery.prototype = {
+	// The current version of jQuery being used
+	jquery: core_version,
+
+	constructor: jQuery,
+	init: function( selector, context, rootjQuery ) {
+		var match, elem;
+
+		// HANDLE: $(""), $(null), $(undefined), $(false)
+		if ( !selector ) {
+			return this;
+		}
+
+		// Handle HTML strings
+		if ( typeof selector === "string" ) {
+			if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) {
+				// Assume that strings that start and end with <> are HTML and skip the regex check
+				match = [ null, selector, null ];
+
+			} else {
+				match = rquickExpr.exec( selector );
+			}
+
+			// Match html or make sure no context is specified for #id
+			if ( match && (match[1] || !context) ) {
+
+				// HANDLE: $(html) -> $(array)
+				if ( match[1] ) {
+					context = context instanceof jQuery ? context[0] : context;
+
+					// scripts is true for back-compat
+					jQuery.merge( this, jQuery.parseHTML(
+						match[1],
+						context && context.nodeType ? context.ownerDocument || context : document,
+						true
+					) );
+
+					// HANDLE: $(html, props)
+					if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) {
+						for ( match in context ) {
+							// Properties of context are called as methods if possible
+							if ( jQuery.isFunction( this[ match ] ) ) {
+								this[ match ]( context[ match ] );
+
+							// ...and otherwise set as attributes
+							} else {
+								this.attr( match, context[ match ] );
+							}
+						}
+					}
+
+					return this;
+
+				// HANDLE: $(#id)
+				} else {
+					elem = document.getElementById( match[2] );
+
+					// Check parentNode to catch when Blackberry 4.6 returns
+					// nodes that are no longer in the document #6963
+					if ( elem && elem.parentNode ) {
+						// Handle the case where IE and Opera return items
+						// by name instead of ID
+						if ( elem.id !== match[2] ) {
+							return rootjQuery.find( selector );
+						}
+
+						// Otherwise, we inject the element directly into the jQuery object
+						this.length = 1;
+						this[0] = elem;
+					}
+
+					this.context = document;
+					this.selector = selector;
+					return this;
+				}
+
+			// HANDLE: $(expr, $(...))
+			} else if ( !context || context.jquery ) {
+				return ( context || rootjQuery ).find( selector );
+
+			// HANDLE: $(expr, context)
+			// (which is just equivalent to: $(context).find(expr)
+			} else {
+				return this.constructor( context ).find( selector );
+			}
+
+		// HANDLE: $(DOMElement)
+		} else if ( selector.nodeType ) {
+			this.context = this[0] = selector;
+			this.length = 1;
+			return this;
+
+		// HANDLE: $(function)
+		// Shortcut for document ready
+		} else if ( jQuery.isFunction( selector ) ) {
+			return rootjQuery.ready( selector );
+		}
+
+		if ( selector.selector !== undefined ) {
+			this.selector = selector.selector;
+			this.context = selector.context;
+		}
+
+		return jQuery.makeArray( selector, this );
+	},
+
+	// Start with an empty selector
+	selector: "",
+
+	// The default length of a jQuery object is 0
+	length: 0,
+
+	// The number of elements contained in the matched element set
+	size: function() {
+		return this.length;
+	},
+
+	toArray: function() {
+		return core_slice.call( this );
+	},
+
+	// Get the Nth element in the matched element set OR
+	// Get the whole matched element set as a clean array
+	get: function( num ) {
+		return num == null ?
+
+			// Return a 'clean' array
+			this.toArray() :
+
+			// Return just the object
+			( num < 0 ? this[ this.length + num ] : this[ num ] );
+	},
+
+	// Take an array of elements and push it onto the stack
+	// (returning the new matched element set)
+	pushStack: function( elems ) {
+
+		// Build a new jQuery matched element set
+		var ret = jQuery.merge( this.constructor(), elems );
+
+		// Add the old object onto the stack (as a reference)
+		ret.prevObject = this;
+		ret.context = this.context;
+
+		// Return the newly-formed element set
+		return ret;
+	},
+
+	// Execute a callback for every element in the matched set.
+	// (You can seed the arguments with an array of args, but this is
+	// only used internally.)
+	each: function( callback, args ) {
+		return jQuery.each( this, callback, args );
+	},
+
+	ready: function( fn ) {
+		// Add the callback
+		jQuery.ready.promise().done( fn );
+
+		return this;
+	},
+
+	slice: function() {
+		return this.pushStack( core_slice.apply( this, arguments ) );
+	},
+
+	first: function() {
+		return this.eq( 0 );
+	},
+
+	last: function() {
+		return this.eq( -1 );
+	},
+
+	eq: function( i ) {
+		var len = this.length,
+			j = +i + ( i < 0 ? len : 0 );
+		return this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] );
+	},
+
+	map: function( callback ) {
+		return this.pushStack( jQuery.map(this, function( elem, i ) {
+			return callback.call( elem, i, elem );
+		}));
+	},
+
+	end: function() {
+		return this.prevObject || this.constructor(null);
+	},
+
+	// For internal use only.
+	// Behaves like an Array's method, not like a jQuery method.
+	push: core_push,
+	sort: [].sort,
+	splice: [].splice
+};
+
+// Give the init function the jQuery prototype for later instantiation
+jQuery.fn.init.prototype = jQuery.fn;
+
+jQuery.extend = jQuery.fn.extend = function() {
+	var options, name, src, copy, copyIsArray, clone,
+		target = arguments[0] || {},
+		i = 1,
+		length = arguments.length,
+		deep = false;
+
+	// Handle a deep copy situation
+	if ( typeof target === "boolean" ) {
+		deep = target;
+		target = arguments[1] || {};
+		// skip the boolean and the target
+		i = 2;
+	}
+
+	// Handle case when target is a string or something (possible in deep copy)
+	if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
+		target = {};
+	}
+
+	// extend jQuery itself if only one argument is passed
+	if ( length === i ) {
+		target = this;
+		--i;
+	}
+
+	for ( ; i < length; i++ ) {
+		// Only deal with non-null/undefined values
+		if ( (options = arguments[ i ]) != null ) {
+			// Extend the base object
+			for ( name in options ) {
+				src = target[ name ];
+				copy = options[ name ];
+
+				// Prevent never-ending loop
+				if ( target === copy ) {
+					continue;
+				}
+
+				// Recurse if we're merging plain objects or arrays
+				if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
+					if ( copyIsArray ) {
+						copyIsArray = false;
+						clone = src && jQuery.isArray(src) ? src : [];
+
+					} else {
+						clone = src && jQuery.isPlainObject(src) ? src : {};
+					}
+
+					// Never move original objects, clone them
+					target[ name ] = jQuery.extend( deep, clone, copy );
+
+				// Don't bring in undefined values
+				} else if ( copy !== undefined ) {
+					target[ name ] = copy;
+				}
+			}
+		}
+	}
+
+	// Return the modified object
+	return target;
+};
+
+jQuery.extend({
+	noConflict: function( deep ) {
+		if ( window.$ === jQuery ) {
+			window.$ = _$;
+		}
+
+		if ( deep && window.jQuery === jQuery ) {
+			window.jQuery = _jQuery;
+		}
+
+		return jQuery;
+	},
+
+	// Is the DOM ready to be used? Set to true once it occurs.
+	isReady: false,
+
+	// A counter to track how many items to wait for before
+	// the ready event fires. See #6781
+	readyWait: 1,
+
+	// Hold (or release) the ready event
+	holdReady: function( hold ) {
+		if ( hold ) {
+			jQuery.readyWait++;
+		} else {
+			jQuery.ready( true );
+		}
+	},
+
+	// Handle when the DOM is ready
+	ready: function( wait ) {
+
+		// Abort if there are pending holds or we're already ready
+		if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
+			return;
+		}
+
+		// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
+		if ( !document.body ) {
+			return setTimeout( jQuery.ready );
+		}
+
+		// Remember that the DOM is ready
+		jQuery.isReady = true;
+
+		// If a normal DOM Ready event fired, decrement, and wait if need be
+		if ( wait !== true && --jQuery.readyWait > 0 ) {
+			return;
+		}
+
+		// If there are functions bound, to execute
+		readyList.resolveWith( document, [ jQuery ] );
+
+		// Trigger any bound ready events
+		if ( jQuery.fn.trigger ) {
+			jQuery( document ).trigger("ready").off("ready");
+		}
+	},
+
+	// See test/unit/core.js for details concerning isFunction.
+	// Since version 1.3, DOM methods and functions like alert
+	// aren't supported. They return false on IE (#2968).
+	isFunction: function( obj ) {
+		return jQuery.type(obj) === "function";
+	},
+
+	isArray: Array.isArray || function( obj ) {
+		return jQuery.type(obj) === "array";
+	},
+
+	isWindow: function( obj ) {
+		return obj != null && obj == obj.window;
+	},
+
+	isNumeric: function( obj ) {
+		return !isNaN( parseFloat(obj) ) && isFinite( obj );
+	},
+
+	type: function( obj ) {
+		if ( obj == null ) {
+			return String( obj );
+		}
+		return typeof obj === "object" || typeof obj === "function" ?
+			class2type[ core_toString.call(obj) ] || "object" :
+			typeof obj;
+	},
+
+	isPlainObject: function( obj ) {
+		// Must be an Object.
+		// Because of IE, we also have to check the presence of the constructor property.
+		// Make sure that DOM nodes and window objects don't pass through, as well
+		if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
+			return false;
+		}
+
+		try {
+			// Not own constructor property must be Object
+			if ( obj.constructor &&
+				!core_hasOwn.call(obj, "constructor") &&
+				!core_hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
+				return false;
+			}
+		} catch ( e ) {
+			// IE8,9 Will throw exceptions on certain host objects #9897
+			return false;
+		}
+
+		// Own properties are enumerated firstly, so to speed up,
+		// if last one is own, then all properties are own.
+
+		var key;
+		for ( key in obj ) {}
+
+		return key === undefined || core_hasOwn.call( obj, key );
+	},
+
+	isEmptyObject: function( obj ) {
+		var name;
+		for ( name in obj ) {
+			return false;
+		}
+		return true;
+	},
+
+	error: function( msg ) {
+		throw new Error( msg );
+	},
+
+	// data: string of html
+	// context (optional): If specified, the fragment will be created in this context, defaults to document
+	// keepScripts (optional): If true, will include scripts passed in the html string
+	parseHTML: function( data, context, keepScripts ) {
+		if ( !data || typeof data !== "string" ) {
+			return null;
+		}
+		if ( typeof context === "boolean" ) {
+			keepScripts = context;
+			context = false;
+		}
+		context = context || document;
+
+		var parsed = rsingleTag.exec( data ),
+			scripts = !keepScripts && [];
+
+		// Single tag
+		if ( parsed ) {
+			return [ context.createElement( parsed[1] ) ];
+		}
+
+		parsed = jQuery.buildFragment( [ data ], context, scripts );
+		if ( scripts ) {
+			jQuery( scripts ).remove();
+		}
+		return jQuery.merge( [], parsed.childNodes );
+	},
+
+	parseJSON: function( data ) {
+		// Attempt to parse using the native JSON parser first
+		if ( window.JSON && window.JSON.parse ) {
+			return window.JSON.parse( data );
+		}
+
+		if ( data === null ) {
+			return data;
+		}
+
+		if ( typeof data === "string" ) {
+
+			// Make sure leading/trailing whitespace is removed (IE can't handle it)
+			data = jQuery.trim( data );
+
+			if ( data ) {
+				// Make sure the incoming data is actual JSON
+				// Logic borrowed from http://json.org/json2.js
+				if ( rvalidchars.test( data.replace( rvalidescape, "@" )
+					.replace( rvalidtokens, "]" )
+					.replace( rvalidbraces, "")) ) {
+
+					return ( new Function( "return " + data ) )();
+				}
+			}
+		}
+
+		jQuery.error( "Invalid JSON: " + data );
+	},
+
+	// Cross-browser xml parsing
+	parseXML: function( data ) {
+		var xml, tmp;
+		if ( !data || typeof data !== "string" ) {
+			return null;
+		}
+		try {
+			if ( window.DOMParser ) { // Standard
+				tmp = new DOMParser();
+				xml = tmp.parseFromString( data , "text/xml" );
+			} else { // IE
+				xml = new ActiveXObject( "Microsoft.XMLDOM" );
+				xml.async = "false";
+				xml.loadXML( data );
+			}
+		} catch( e ) {
+			xml = undefined;
+		}
+		if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) {
+			jQuery.error( "Invalid XML: " + data );
+		}
+		return xml;
+	},
+
+	noop: function() {},
+
+	// Evaluates a script in a global context
+	// Workarounds based on findings by Jim Driscoll
+	// http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context
+	globalEval: function( data ) {
+		if ( data && jQuery.trim( data ) ) {
+			// We use execScript on Internet Explorer
+			// We use an anonymous function so that context is window
+			// rather than jQuery in Firefox
+			( window.execScript || function( data ) {
+				window[ "eval" ].call( window, data );
+			} )( data );
+		}
+	},
+
+	// Convert dashed to camelCase; used by the css and data modules
+	// Microsoft forgot to hump their vendor prefix (#9572)
+	camelCase: function( string ) {
+		return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
+	},
+
+	nodeName: function( elem, name ) {
+		return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
+	},
+
+	// args is for internal usage only
+	each: function( obj, callback, args ) {
+		var value,
+			i = 0,
+			length = obj.length,
+			isArray = isArraylike( obj );
+
+		if ( args ) {
+			if ( isArray ) {
+				for ( ; i < length; i++ ) {
+					value = callback.apply( obj[ i ], args );
+
+					if ( value === false ) {
+						break;
+					}
+				}
+			} else {
+				for ( i in obj ) {
+					value = callback.apply( obj[ i ], args );
+
+					if ( value === false ) {
+						break;
+					}
+				}
+			}
+
+		// A special, fast, case for the most common use of each
+		} else {
+			if ( isArray ) {
+				for ( ; i < length; i++ ) {
+					value = callback.call( obj[ i ], i, obj[ i ] );
+
+					if ( value === false ) {
+						break;
+					}
+				}
+			} else {
+				for ( i in obj ) {
+					value = callback.call( obj[ i ], i, obj[ i ] );
+
+					if ( value === false ) {
+						break;
+					}
+				}
+			}
+		}
+
+		return obj;
+	},
+
+	// Use native String.trim function wherever possible
+	trim: core_trim && !core_trim.call("\uFEFF\xA0") ?
+		function( text ) {
+			return text == null ?
+				"" :
+				core_trim.call( text );
+		} :
+
+		// Otherwise use our own trimming functionality
+		function( text ) {
+			return text == null ?
+				"" :
+				( text + "" ).replace( rtrim, "" );
+		},
+
+	// results is for internal usage only
+	makeArray: function( arr, results ) {
+		var ret = results || [];
+
+		if ( arr != null ) {
+			if ( isArraylike( Object(arr) ) ) {
+				jQuery.merge( ret,
+					typeof arr === "string" ?
+					[ arr ] : arr
+				);
+			} else {
+				core_push.call( ret, arr );
+			}
+		}
+
+		return ret;
+	},
+
+	inArray: function( elem, arr, i ) {
+		var len;
+
+		if ( arr ) {
+			if ( core_indexOf ) {
+				return core_indexOf.call( arr, elem, i );
+			}
+
+			len = arr.length;
+			i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;
+
+			for ( ; i < len; i++ ) {
+				// Skip accessing in sparse arrays
+				if ( i in arr && arr[ i ] === elem ) {
+					return i;
+				}
+			}
+		}
+
+		return -1;
+	},
+
+	merge: function( first, second ) {
+		var l = second.length,
+			i = first.length,
+			j = 0;
+
+		if ( typeof l === "number" ) {
+			for ( ; j < l; j++ ) {
+				first[ i++ ] = second[ j ];
+			}
+		} else {
+			while ( second[j] !== undefined ) {
+				first[ i++ ] = second[ j++ ];
+			}
+		}
+
+		first.length = i;
+
+		return first;
+	},
+
+	grep: function( elems, callback, inv ) {
+		var retVal,
+			ret = [],
+			i = 0,
+			length = elems.length;
+		inv = !!inv;
+
+		// Go through the array, only saving the items
+		// that pass the validator function
+		for ( ; i < length; i++ ) {
+			retVal = !!callback( elems[ i ], i );
+			if ( inv !== retVal ) {
+				ret.push( elems[ i ] );
+			}
+		}
+
+		return ret;
+	},
+
+	// arg is for internal usage only
+	map: function( elems, callback, arg ) {
+		var value,
+			i = 0,
+			length = elems.length,
+			isArray = isArraylike( elems ),
+			ret = [];
+
+		// Go through the array, translating each of the items to their
+		if ( isArray ) {
+			for ( ; i < length; i++ ) {
+				value = callback( elems[ i ], i, arg );
+
+				if ( value != null ) {
+					ret[ ret.length ] = value;
+				}
+			}
+
+		// Go through every key on the object,
+		} else {
+			for ( i in elems ) {
+				value = callback( elems[ i ], i, arg );
+
+				if ( value != null ) {
+					ret[ ret.length ] = value;
+				}
+			}
+		}
+
+		// Flatten any nested arrays
+		return core_concat.apply( [], ret );
+	},
+
+	// A global GUID counter for objects
+	guid: 1,
+
+	// Bind a function to a context, optionally partially applying any
+	// arguments.
+	proxy: function( fn, context ) {
+		var tmp, args, proxy;
+
+		if ( typeof context === "string" ) {
+			tmp = fn[ context ];
+			context = fn;
+			fn = tmp;
+		}
+
+		// Quick check to determine if target is callable, in the spec
+		// this throws a TypeError, but we will just return undefined.
+		if ( !jQuery.isFunction( fn ) ) {
+			return undefined;
+		}
+
+		// Simulated bind
+		args = core_slice.call( arguments, 2 );
+		proxy = function() {
+			return fn.apply( context || this, args.concat( core_slice.call( arguments ) ) );
+		};
+
+		// Set the guid of unique handler to the same of original handler, so it can be removed
+		proxy.guid = fn.guid = fn.guid || jQuery.guid++;
+
+		return proxy;
+	},
+
+	// Multifunctional method to get and set values of a collection
+	// The value/s can optionally be executed if it's a function
+	access: function( elems, fn, key, value, chainable, emptyGet, raw ) {
+		var i = 0,
+			length = elems.length,
+			bulk = key == null;
+
+		// Sets many values
+		if ( jQuery.type( key ) === "object" ) {
+			chainable = true;
+			for ( i in key ) {
+				jQuery.access( elems, fn, i, key[i], true, emptyGet, raw );
+			}
+
+		// Sets one value
+		} else if ( value !== undefined ) {
+			chainable = true;
+
+			if ( !jQuery.isFunction( value ) ) {
+				raw = true;
+			}
+
+			if ( bulk ) {
+				// Bulk operations run against the entire set
+				if ( raw ) {
+					fn.call( elems, value );
+					fn = null;
+
+				// ...except when executing function values
+				} else {
+					bulk = fn;
+					fn = function( elem, key, value ) {
+						return bulk.call( jQuery( elem ), value );
+					};
+				}
+			}
+
+			if ( fn ) {
+				for ( ; i < length; i++ ) {
+					fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) );
+				}
+			}
+		}
+
+		return chainable ?
+			elems :
+
+			// Gets
+			bulk ?
+				fn.call( elems ) :
+				length ? fn( elems[0], key ) : emptyGet;
+	},
+
+	now: function() {
+		return ( new Date() ).getTime();
+	}
+});
+
+jQuery.ready.promise = function( obj ) {
+	if ( !readyList ) {
+
+		readyList = jQuery.Deferred();
+
+		// Catch cases where $(document).ready() is called after the browser event has already occurred.
+		// we once tried to use readyState "interactive" here, but it caused issues like the one
+		// discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15
+		if ( document.readyState === "complete" ) {
+			// Handle it asynchronously to allow scripts the opportunity to delay ready
+			setTimeout( jQuery.ready );
+
+		// Standards-based browsers support DOMContentLoaded
+		} else if ( document.addEventListener ) {
+			// Use the handy event callback
+			document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false );
+
+			// A fallback to window.onload, that will always work
+			window.addEventListener( "load", jQuery.ready, false );
+
+		// If IE event model is used
+		} else {
+			// Ensure firing before onload, maybe late but safe also for iframes
+			document.attachEvent( "onreadystatechange", DOMContentLoaded );
+
+			// A fallback to window.onload, that will always work
+			window.attachEvent( "onload", jQuery.ready );
+
+			// If IE and not a frame
+			// continually check to see if the document is ready
+			var top = false;
+
+			try {
+				top = window.frameElement == null && document.documentElement;
+			} catch(e) {}
+
+			if ( top && top.doScroll ) {
+				(function doScrollCheck() {
+					if ( !jQuery.isReady ) {
+
+						try {
+							// Use the trick by Diego Perini
+							// http://javascript.nwbox.com/IEContentLoaded/
+							top.doScroll("left");
+						} catch(e) {
+							return setTimeout( doScrollCheck, 50 );
+						}
+
+						// and execute any waiting functions
+						jQuery.ready();
+					}
+				})();
+			}
+		}
+	}
+	return readyList.promise( obj );
+};
+
+// Populate the class2type map
+jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) {
+	class2type[ "[object " + name + "]" ] = name.toLowerCase();
+});
+
+function isArraylike( obj ) {
+	var length = obj.length,
+		type = jQuery.type( obj );
+
+	if ( jQuery.isWindow( obj ) ) {
+		return false;
+	}
+
+	if ( obj.nodeType === 1 && length ) {
+		return true;
+	}
+
+	return type === "array" || type !== "function" &&
+		( length === 0 ||
+		typeof length === "number" && length > 0 && ( length - 1 ) in obj );
+}
+
+// All jQuery objects should point back to these
+rootjQuery = jQuery(document);
+// String to Object options format cache
+var optionsCache = {};
+
+// Convert String-formatted options into Object-formatted ones and store in cache
+function createOptions( options ) {
+	var object = optionsCache[ options ] = {};
+	jQuery.each( options.match( core_rnotwhite ) || [], function( _, flag ) {
+		object[ flag ] = true;
+	});
+	return object;
+}
+
+/*
+ * Create a callback list using the following parameters:
+ *
+ *	options: an optional list of space-separated options that will change how
+ *			the callback list behaves or a more traditional option object
+ *
+ * By default a callback list will act like an event callback list and can be
+ * "fired" multiple times.
+ *
+ * Possible options:
+ *
+ *	once:			will ensure the callback list can only be fired once (like a Deferred)
+ *
+ *	memory:			will keep track of previous values and will call any callback added
+ *					after the list has been fired right away with the latest "memorized"
+ *					values (like a Deferred)
+ *
+ *	unique:			will ensure a callback can only be added once (no duplicate in the list)
+ *
+ *	stopOnFalse:	interrupt callings when a callback returns false
+ *
+ */
+jQuery.Callbacks = function( options ) {
+
+	// Convert options from String-formatted to Object-formatted if needed
+	// (we check in cache first)
+	options = typeof options === "string" ?
+		( optionsCache[ options ] || createOptions( options ) ) :
+		jQuery.extend( {}, options );
+
+	var // Last fire value (for non-forgettable lists)
+		memory,
+		// Flag to know if list was already fired
+		fired,
+		// Flag to know if list is currently firing
+		firing,
+		// First callback to fire (used internally by add and fireWith)
+		firingStart,
+		// End of the loop when firing
+		firingLength,
+		// Index of currently firing callback (modified by remove if needed)
+		firingIndex,
+		// Actual callback list
+		list = [],
+		// Stack of fire calls for repeatable lists
+		stack = !options.once && [],
+		// Fire callbacks
+		fire = function( data ) {
+			memory = options.memory && data;
+			fired = true;
+			firingIndex = firingStart || 0;
+			firingStart = 0;
+			firingLength = list.length;
+			firing = true;
+			for ( ; list && firingIndex < firingLength; firingIndex++ ) {
+				if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) {
+					memory = false; // To prevent further calls using add
+					break;
+				}
+			}
+			firing = false;
+			if ( list ) {
+				if ( stack ) {
+					if ( stack.length ) {
+						fire( stack.shift() );
+					}
+				} else if ( memory ) {
+					list = [];
+				} else {
+					self.disable();
+				}
+			}
+		},
+		// Actual Callbacks object
+		self = {
+			// Add a callback or a collection of callbacks to the list
+			add: function() {
+				if ( list ) {
+					// First, we save the current length
+					var start = list.length;
+					(function add( args ) {
+						jQuery.each( args, function( _, arg ) {
+							var type = jQuery.type( arg );
+							if ( type === "function" ) {
+								if ( !options.unique || !self.has( arg ) ) {
+									list.push( arg );
+								}
+							} else if ( arg && arg.length && type !== "string" ) {
+								// Inspect recursively
+								add( arg );
+							}
+						});
+					})( arguments );
+					// Do we need to add the callbacks to the
+					// current firing batch?
+					if ( firing ) {
+						firingLength = list.length;
+					// With memory, if we're not firing then
+					// we should call right away
+					} else if ( memory ) {
+						firingStart = start;
+						fire( memory );
+					}
+				}
+				return this;
+			},
+			// Remove a callback from the list
+			remove: function() {
+				if ( list ) {
+					jQuery.each( arguments, function( _, arg ) {
+						var index;
+						while( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
+							list.splice( index, 1 );
+							// Handle firing indexes
+							if ( firing ) {
+								if ( index <= firingLength ) {
+									firingLength--;
+								}
+								if ( index <= firingIndex ) {
+									firingIndex--;
+								}
+							}
+						}
+					});
+				}
+				return this;
+			},
+			// Control if a given callback is in the list
+			has: function( fn ) {
+				return jQuery.inArray( fn, list ) > -1;
+			},
+			// Remove all callbacks from the list
+			empty: function() {
+				list = [];
+				return this;
+			},
+			// Have the list do nothing anymore
+			disable: function() {
+				list = stack = memory = undefined;
+				return this;
+			},
+			// Is it disabled?
+			disabled: function() {
+				return !list;
+			},
+			// Lock the list in its current state
+			lock: function() {
+				stack = undefined;
+				if ( !memory ) {
+					self.disable();
+				}
+				return this;
+			},
+			// Is it locked?
+			locked: function() {
+				return !stack;
+			},
+			// Call all callbacks with the given context and arguments
+			fireWith: function( context, args ) {
+				args = args || [];
+				args = [ context, args.slice ? args.slice() : args ];
+				if ( list && ( !fired || stack ) ) {
+					if ( firing ) {
+						stack.push( args );
+					} else {
+						fire( args );
+					}
+				}
+				return this;
+			},
+			// Call all the callbacks with the given arguments
+			fire: function() {
+				self.fireWith( this, arguments );
+				return this;
+			},
+			// To know if the callbacks have already been called at least once
+			fired: function() {
+				return !!fired;
+			}
+		};
+
+	return self;
+};
+jQuery.extend({
+
+	Deferred: function( func ) {
+		var tuples = [
+				// action, add listener, listener list, final state
+				[ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ],
+				[ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ],
+				[ "notify", "progress", jQuery.Callbacks("memory") ]
+			],
+			state = "pending",
+			promise = {
+				state: function() {
+					return state;
+				},
+				always: function() {
+					deferred.done( arguments ).fail( arguments );
+					return this;
+				},
+				then: function( /* fnDone, fnFail, fnProgress */ ) {
+					var fns = arguments;
+					return jQuery.Deferred(function( newDefer ) {
+						jQuery.each( tuples, function( i, tuple ) {
+							var action = tuple[ 0 ],
+								fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];
+							// deferred[ done | fail | progress ] for forwarding actions to newDefer
+							deferred[ tuple[1] ](function() {
+								var returned = fn && fn.apply( this, arguments );
+								if ( returned && jQuery.isFunction( returned.promise ) ) {
+									returned.promise()
+										.done( newDefer.resolve )
+										.fail( newDefer.reject )
+										.progress( newDefer.notify );
+								} else {
+									newDefer[ action + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments );
+								}
+							});
+						});
+						fns = null;
+					}).promise();
+				},
+				// Get a promise for this deferred
+				// If obj is provided, the promise aspect is added to the object
+				promise: function( obj ) {
+					return obj != null ? jQuery.extend( obj, promise ) : promise;
+				}
+			},
+			deferred = {};
+
+		// Keep pipe for back-compat
+		promise.pipe = promise.then;
+
+		// Add list-specific methods
+		jQuery.each( tuples, function( i, tuple ) {
+			var list = tuple[ 2 ],
+				stateString = tuple[ 3 ];
+
+			// promise[ done | fail | progress ] = list.add
+			promise[ tuple[1] ] = list.add;
+
+			// Handle state
+			if ( stateString ) {
+				list.add(function() {
+					// state = [ resolved | rejected ]
+					state = stateString;
+
+				// [ reject_list | resolve_list ].disable; progress_list.lock
+				}, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );
+			}
+
+			// deferred[ resolve | reject | notify ]
+			deferred[ tuple[0] ] = function() {
+				deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments );
+				return this;
+			};
+			deferred[ tuple[0] + "With" ] = list.fireWith;
+		});
+
+		// Make the deferred a promise
+		promise.promise( deferred );
+
+		// Call given func if any
+		if ( func ) {
+			func.call( deferred, deferred );
+		}
+
+		// All done!
+		return deferred;
+	},
+
+	// Deferred helper
+	when: function( subordinate /* , ..., subordinateN */ ) {
+		var i = 0,
+			resolveValues = core_slice.call( arguments ),
+			length = resolveValues.length,
+
+			// the count of uncompleted subordinates
+			remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,
+
+			// the master Deferred. If resolveValues consist of only a single Deferred, just use that.
+			deferred = remaining === 1 ? subordinate : jQuery.Deferred(),
+
+			// Update function for both resolve and progress values
+			updateFunc = function( i, contexts, values ) {
+				return function( value ) {
+					contexts[ i ] = this;
+					values[ i ] = arguments.length > 1 ? core_slice.call( arguments ) : value;
+					if( values === progressValues ) {
+						deferred.notifyWith( contexts, values );
+					} else if ( !( --remaining ) ) {
+						deferred.resolveWith( contexts, values );
+					}
+				};
+			},
+
+			progressValues, progressContexts, resolveContexts;
+
+		// add listeners to Deferred subordinates; treat others as resolved
+		if ( length > 1 ) {
+			progressValues = new Array( length );
+			progressContexts = new Array( length );
+			resolveContexts = new Array( length );
+			for ( ; i < length; i++ ) {
+				if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {
+					resolveValues[ i ].promise()
+						.done( updateFunc( i, resolveContexts, resolveValues ) )
+						.fail( deferred.reject )
+						.progress( updateFunc( i, progressContexts, progressValues ) );
+				} else {
+					--remaining;
+				}
+			}
+		}
+
+		// if we're not waiting on anything, resolve the master
+		if ( !remaining ) {
+			deferred.resolveWith( resolveContexts, resolveValues );
+		}
+
+		return deferred.promise();
+	}
+});
+jQuery.support = (function() {
+
+	var support, all, a, select, opt, input, fragment, eventName, isSupported, i,
+		div = document.createElement("div");
+
+	// Setup
+	div.setAttribute( "className", "t" );
+	div.innerHTML = "  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";
+
+	// Support tests won't run in some limited or non-browser environments
+	all = div.getElementsByTagName("*");
+	a = div.getElementsByTagName("a")[ 0 ];
+	if ( !all || !a || !all.length ) {
+		return {};
+	}
+
+	// First batch of tests
+	select = document.createElement("select");
+	opt = select.appendChild( document.createElement("option") );
+	input = div.getElementsByTagName("input")[ 0 ];
+
+	a.style.cssText = "top:1px;float:left;opacity:.5";
+	support = {
+		// Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)
+		getSetAttribute: div.className !== "t",
+
+		// IE strips leading whitespace when .innerHTML is used
+		leadingWhitespace: div.firstChild.nodeType === 3,
+
+		// Make sure that tbody elements aren't automatically inserted
+		// IE will insert them into empty tables
+		tbody: !div.getElementsByTagName("tbody").length,
+
+		// Make sure that link elements get serialized correctly by innerHTML
+		// This requires a wrapper element in IE
+		htmlSerialize: !!div.getElementsByTagName("link").length,
+
+		// Get the style information from getAttribute
+		// (IE uses .cssText instead)
+		style: /top/.test( a.getAttribute("style") ),
+
+		// Make sure that URLs aren't manipulated
+		// (IE normalizes it by default)
+		hrefNormalized: a.getAttribute("href") === "/a",
+
+		// Make sure that element opacity exists
+		// (IE uses filter instead)
+		// Use a regex to work around a WebKit issue. See #5145
+		opacity: /^0.5/.test( a.style.opacity ),
+
+		// Verify style float existence
+		// (IE uses styleFloat instead of cssFloat)
+		cssFloat: !!a.style.cssFloat,
+
+		// Check the default checkbox/radio value ("" on WebKit; "on" elsewhere)
+		checkOn: !!input.value,
+
+		// Make sure that a selected-by-default option has a working selected property.
+		// (WebKit defaults to false instead of true, IE too, if it's in an optgroup)
+		optSelected: opt.selected,
+
+		// Tests for enctype support on a form (#6743)
+		enctype: !!document.createElement("form").enctype,
+
+		// Makes sure cloning an html5 element does not cause problems
+		// Where outerHTML is undefined, this still works
+		html5Clone: document.createElement("nav").cloneNode( true ).outerHTML !== "<:nav></:nav>",
+
+		// jQuery.support.boxModel DEPRECATED in 1.8 since we don't support Quirks Mode
+		boxModel: document.compatMode === "CSS1Compat",
+
+		// Will be defined later
+		deleteExpando: true,
+		noCloneEvent: true,
+		inlineBlockNeedsLayout: false,
+		shrinkWrapBlocks: false,
+		reliableMarginRight: true,
+		boxSizingReliable: true,
+		pixelPosition: false
+	};
+
+	// Make sure checked status is properly cloned
+	input.checked = true;
+	support.noCloneChecked = input.cloneNode( true ).checked;
+
+	// Make sure that the options inside disabled selects aren't marked as disabled
+	// (WebKit marks them as disabled)
+	select.disabled = true;
+	support.optDisabled = !opt.disabled;
+
+	// Support: IE<9
+	try {
+		delete div.test;
+	} catch( e ) {
+		support.deleteExpando = false;
+	}
+
+	// Check if we can trust getAttribute("value")
+	input = document.createElement("input");
+	input.setAttribute( "value", "" );
+	support.input = input.getAttribute( "value" ) === "";
+
+	// Check if an input maintains its value after becoming a radio
+	input.value = "t";
+	input.setAttribute( "type", "radio" );
+	support.radioValue = input.value === "t";
+
+	// #11217 - WebKit loses check when the name is after the checked attribute
+	input.setAttribute( "checked", "t" );
+	input.setAttribute( "name", "t" );
+
+	fragment = document.createDocumentFragment();
+	fragment.appendChild( input );
+
+	// Check if a disconnected checkbox will retain its checked
+	// value of true after appended to the DOM (IE6/7)
+	support.appendChecked = input.checked;
+
+	// WebKit doesn't clone checked state correctly in fragments
+	support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked;
+
+	// Support: IE<9
+	// Opera does not clone events (and typeof div.attachEvent === undefined).
+	// IE9-10 clones events bound via attachEvent, but they don't trigger with .click()
+	if ( div.attachEvent ) {
+		div.attachEvent( "onclick", function() {
+			support.noCloneEvent = false;
+		});
+
+		div.cloneNode( true ).click();
+	}
+
+	// Support: IE<9 (lack submit/change bubble), Firefox 17+ (lack focusin event)
+	// Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP), test/csp.php
+	for ( i in { submit: true, change: true, focusin: true }) {
+		div.setAttribute( eventName = "on" + i, "t" );
+
+		support[ i + "Bubbles" ] = eventName in window || div.attributes[ eventName ].expando === false;
+	}
+
+	div.style.backgroundClip = "content-box";
+	div.cloneNode( true ).style.backgroundClip = "";
+	support.clearCloneStyle = div.style.backgroundClip === "content-box";
+
+	// Run tests that need a body at doc ready
+	jQuery(function() {
+		var container, marginDiv, tds,
+			divReset = "padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",
+			body = document.getElementsByTagName("body")[0];
+
+		if ( !body ) {
+			// Return for frameset docs that don't have a body
+			return;
+		}
+
+		container = document.createElement("div");
+		container.style.cssText = "border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px";
+
+		body.appendChild( container ).appendChild( div );
+
+		// Support: IE8
+		// Check if table cells still have offsetWidth/Height when they are set
+		// to display:none and there are still other visible table cells in a
+		// table row; if so, offsetWidth/Height are not reliable for use when
+		// determining if an element has been hidden directly using
+		// display:none (it is still safe to use offsets if a parent element is
+		// hidden; don safety goggles and see bug #4512 for more information).
+		div.innerHTML = "<table><tr><td></td><td>t</td></tr></table>";
+		tds = div.getElementsByTagName("td");
+		tds[ 0 ].style.cssText = "padding:0;margin:0;border:0;display:none";
+		isSupported = ( tds[ 0 ].offsetHeight === 0 );
+
+		tds[ 0 ].style.display = "";
+		tds[ 1 ].style.display = "none";
+
+		// Support: IE8
+		// Check if empty table cells still have offsetWidth/Height
+		support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 );
+
+		// Check box-sizing and margin behavior
+		div.innerHTML = "";
+		div.style.cssText = "box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;";
+		support.boxSizing = ( div.offsetWidth === 4 );
+		support.doesNotIncludeMarginInBodyOffset = ( body.offsetTop !== 1 );
+
+		// Use window.getComputedStyle because jsdom on node.js will break without it.
+		if ( window.getComputedStyle ) {
+			support.pixelPosition = ( window.getComputedStyle( div, null ) || {} ).top !== "1%";
+			support.boxSizingReliable = ( window.getComputedStyle( div, null ) || { width: "4px" } ).width === "4px";
+
+			// Check if div with explicit width and no margin-right incorrectly
+			// gets computed margin-right based on width of container. (#3333)
+			// Fails in WebKit before Feb 2011 nightlies
+			// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
+			marginDiv = div.appendChild( document.createElement("div") );
+			marginDiv.style.cssText = div.style.cssText = divReset;
+			marginDiv.style.marginRight = marginDiv.style.width = "0";
+			div.style.width = "1px";
+
+			support.reliableMarginRight =
+				!parseFloat( ( window.getComputedStyle( marginDiv, null ) || {} ).marginRight );
+		}
+
+		if ( typeof div.style.zoom !== "undefined" ) {
+			// Support: IE<8
+			// Check if natively block-level elements act like inline-block
+			// elements when setting their display to 'inline' and giving
+			// them layout
+			div.innerHTML = "";
+			div.style.cssText = divReset + "width:1px;padding:1px;display:inline;zoom:1";
+			support.inlineBlockNeedsLayout = ( div.offsetWidth === 3 );
+
+			// Support: IE6
+			// Check if elements with layout shrink-wrap their children
+			div.style.display = "block";
+			div.innerHTML = "<div></div>";
+			div.firstChild.style.width = "5px";
+			support.shrinkWrapBlocks = ( div.offsetWidth !== 3 );
+
+			// Prevent IE 6 from affecting layout for positioned elements #11048
+			// Prevent IE from shrinking the body in IE 7 mode #12869
+			body.style.zoom = 1;
+		}
+
+		body.removeChild( container );
+
+		// Null elements to avoid leaks in IE
+		container = div = tds = marginDiv = null;
+	});
+
+	// Null elements to avoid leaks in IE
+	all = select = fragment = opt = a = input = null;
+
+	return support;
+})();
+
+var rbrace = /(?:\{[\s\S]*\}|\[[\s\S]*\])$/,
+	rmultiDash = /([A-Z])/g;
+
+function internalData( elem, name, data, pvt /* Internal Use Only */ ){
+	if ( !jQuery.acceptData( elem ) ) {
+		return;
+	}
+
+	var thisCache, ret,
+		internalKey = jQuery.expando,
+		getByName = typeof name === "string",
+
+		// We have to handle DOM nodes and JS objects differently because IE6-7
+		// can't GC object references properly across the DOM-JS boundary
+		isNode = elem.nodeType,
+
+		// Only DOM nodes need the global jQuery cache; JS object data is
+		// attached directly to the object so GC can occur automatically
+		cache = isNode ? jQuery.cache : elem,
+
+		// Only defining an ID for JS objects if its cache already exists allows
+		// the code to shortcut on the same path as a DOM node with no cache
+		id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey;
+
+	// Avoid doing any more work than we need to when trying to get data on an
+	// object that has no data at all
+	if ( (!id || !cache[id] || (!pvt && !cache[id].data)) && getByName && data === undefined ) {
+		return;
+	}
+
+	if ( !id ) {
+		// Only DOM nodes need a new unique ID for each element since their data
+		// ends up in the global cache
+		if ( isNode ) {
+			elem[ internalKey ] = id = core_deletedIds.pop() || jQuery.guid++;
+		} else {
+			id = internalKey;
+		}
+	}
+
+	if ( !cache[ id ] ) {
+		cache[ id ] = {};
+
+		// Avoids exposing jQuery metadata on plain JS objects when the object
+		// is serialized using JSON.stringify
+		if ( !isNode ) {
+			cache[ id ].toJSON = jQuery.noop;
+		}
+	}
+
+	// An object can be passed to jQuery.data instead of a key/value pair; this gets
+	// shallow copied over onto the existing cache
+	if ( typeof name === "object" || typeof name === "function" ) {
+		if ( pvt ) {
+			cache[ id ] = jQuery.extend( cache[ id ], name );
+		} else {
+			cache[ id ].data = jQuery.extend( cache[ id ].data, name );
+		}
+	}
+
+	thisCache = cache[ id ];
+
+	// jQuery data() is stored in a separate object inside the object's internal data
+	// cache in order to avoid key collisions between internal data and user-defined
+	// data.
+	if ( !pvt ) {
+		if ( !thisCache.data ) {
+			thisCache.data = {};
+		}
+
+		thisCache = thisCache.data;
+	}
+
+	if ( data !== undefined ) {
+		thisCache[ jQuery.camelCase( name ) ] = data;
+	}
+
+	// Check for both converted-to-camel and non-converted data property names
+	// If a data property was specified
+	if ( getByName ) {
+
+		// First Try to find as-is property data
+		ret = thisCache[ name ];
+
+		// Test for null|undefined property data
+		if ( ret == null ) {
+
+			// Try to find the camelCased property
+			ret = thisCache[ jQuery.camelCase( name ) ];
+		}
+	} else {
+		ret = thisCache;
+	}
+
+	return ret;
+}
+
+function internalRemoveData( elem, name, pvt /* For internal use only */ ){
+	if ( !jQuery.acceptData( elem ) ) {
+		return;
+	}
+
+	var thisCache, i, l,
+
+		isNode = elem.nodeType,
+
+		// See jQuery.data for more information
+		cache = isNode ? jQuery.cache : elem,
+		id = isNode ? elem[ jQuery.expando ] : jQuery.expando;
+
+	// If there is already no cache entry for this object, there is no
+	// purpose in continuing
+	if ( !cache[ id ] ) {
+		return;
+	}
+
+	if ( name ) {
+
+		thisCache = pvt ? cache[ id ] : cache[ id ].data;
+
+		if ( thisCache ) {
+
+			// Support array or space separated string names for data keys
+			if ( !jQuery.isArray( name ) ) {
+
+				// try the string as a key before any manipulation
+				if ( name in thisCache ) {
+					name = [ name ];
+				} else {
+
+					// split the camel cased version by spaces unless a key with the spaces exists
+					name = jQuery.camelCase( name );
+					if ( name in thisCache ) {
+						name = [ name ];
+					} else {
+						name = name.split(" ");
+					}
+				}
+			} else {
+				// If "name" is an array of keys...
+				// When data is initially created, via ("key", "val") signature,
+				// keys will be converted to camelCase.
+				// Since there is no way to tell _how_ a key was added, remove
+				// both plain key and camelCase key. #12786
+				// This will only penalize the array argument path.
+				name = name.concat( jQuery.map( name, jQuery.camelCase ) );
+			}
+
+			for ( i = 0, l = name.length; i < l; i++ ) {
+				delete thisCache[ name[i] ];
+			}
+
+			// If there is no data left in the cache, we want to continue
+			// and let the cache object itself get destroyed
+			if ( !( pvt ? isEmptyDataObject : jQuery.isEmptyObject )( thisCache ) ) {
+				return;
+			}
+		}
+	}
+
+	// See jQuery.data for more information
+	if ( !pvt ) {
+		delete cache[ id ].data;
+
+		// Don't destroy the parent cache unless the internal data object
+		// had been the only thing left in it
+		if ( !isEmptyDataObject( cache[ id ] ) ) {
+			return;
+		}
+	}
+
+	// Destroy the cache
+	if ( isNode ) {
+		jQuery.cleanData( [ elem ], true );
+
+	// Use delete when supported for expandos or `cache` is not a window per isWindow (#10080)
+	} else if ( jQuery.support.deleteExpando || cache != cache.window ) {
+		delete cache[ id ];
+
+	// When all else fails, null
+	} else {
+		cache[ id ] = null;
+	}
+}
+
+jQuery.extend({
+	cache: {},
+
+	// Unique for each copy of jQuery on the page
+	// Non-digits removed to match rinlinejQuery
+	expando: "jQuery" + ( core_version + Math.random() ).replace( /\D/g, "" ),
+
+	// The following elements throw uncatchable exceptions if you
+	// attempt to add expando properties to them.
+	noData: {
+		"embed": true,
+		// Ban all objects except for Flash (which handle expandos)
+		"object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",
+		"applet": true
+	},
+
+	hasData: function( elem ) {
+		elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];
+		return !!elem && !isEmptyDataObject( elem );
+	},
+
+	data: function( elem, name, data ) {
+		return internalData( elem, name, data, false );
+	},
+
+	removeData: function( elem, name ) {
+		return internalRemoveData( elem, name, false );
+	},
+
+	// For internal use only.
+	_data: function( elem, name, data ) {
+		return internalData( elem, name, data, true );
+	},
+
+	_removeData: function( elem, name ) {
+		return internalRemoveData( elem, name, true );
+	},
+
+	// A method for determining if a DOM node can handle the data expando
+	acceptData: function( elem ) {
+		var noData = elem.nodeName && jQuery.noData[ elem.nodeName.toLowerCase() ];
+
+		// nodes accept data unless otherwise specified; rejection can be conditional
+		return !noData || noData !== true && elem.getAttribute("classid") === noData;
+	}
+});
+
+jQuery.fn.extend({
+	data: function( key, value ) {
+		var attrs, name,
+			elem = this[0],
+			i = 0,
+			data = null;
+
+		// Gets all values
+		if ( key === undefined ) {
+			if ( this.length ) {
+				data = jQuery.data( elem );
+
+				if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) {
+					attrs = elem.attributes;
+					for ( ; i < attrs.length; i++ ) {
+						name = attrs[i].name;
+
+						if ( !name.indexOf( "data-" ) ) {
+							name = jQuery.camelCase( name.substring(5) );
+
+							dataAttr( elem, name, data[ name ] );
+						}
+					}
+					jQuery._data( elem, "parsedAttrs", true );
+				}
+			}
+
+			return data;
+		}
+
+		// Sets multiple values
+		if ( typeof key === "object" ) {
+			return this.each(function() {
+				jQuery.data( this, key );
+			});
+		}
+
+		return jQuery.access( this, function( value ) {
+
+			if ( value === undefined ) {
+				// Try to fetch any internally stored data first
+				return elem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : null;
+			}
+
+			this.each(function() {
+				jQuery.data( this, key, value );
+			});
+		}, null, value, arguments.length > 1, null, true );
+	},
+
+	removeData: function( key ) {
+		return this.each(function() {
+			jQuery.removeData( this, key );
+		});
+	}
+});
+
+function dataAttr( elem, key, data ) {
+	// If nothing was found internally, try to fetch any
+	// data from the HTML5 data-* attribute
+	if ( data === undefined && elem.nodeType === 1 ) {
+
+		var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase();
+
+		data = elem.getAttribute( name );
+
+		if ( typeof data === "string" ) {
+			try {
+				data = data === "true" ? true :
+				data === "false" ? false :
+				data === "null" ? null :
+				// Only convert to a number if it doesn't change the string
+				+data + "" === data ? +data :
+				rbrace.test( data ) ? jQuery.parseJSON( data ) :
+					data;
+			} catch( e ) {}
+
+			// Make sure we set the data so it isn't changed later
+			jQuery.data( elem, key, data );
+
+		} else {
+			data = undefined;
+		}
+	}
+
+	return data;
+}
+
+// checks a cache object for emptiness
+function isEmptyDataObject( obj ) {
+	var name;
+	for ( name in obj ) {
+
+		// if the public data object is empty, the private is still empty
+		if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) {
+			continue;
+		}
+		if ( name !== "toJSON" ) {
+			return false;
+		}
+	}
+
+	return true;
+}
+jQuery.extend({
+	queue: function( elem, type, data ) {
+		var queue;
+
+		if ( elem ) {
+			type = ( type || "fx" ) + "queue";
+			queue = jQuery._data( elem, type );
+
+			// Speed up dequeue by getting out quickly if this is just a lookup
+			if ( data ) {
+				if ( !queue || jQuery.isArray(data) ) {
+					queue = jQuery._data( elem, type, jQuery.makeArray(data) );
+				} else {
+					queue.push( data );
+				}
+			}
+			return queue || [];
+		}
+	},
+
+	dequeue: function( elem, type ) {
+		type = type || "fx";
+
+		var queue = jQuery.queue( elem, type ),
+			startLength = queue.length,
+			fn = queue.shift(),
+			hooks = jQuery._queueHooks( elem, type ),
+			next = function() {
+				jQuery.dequeue( elem, type );
+			};
+
+		// If the fx queue is dequeued, always remove the progress sentinel
+		if ( fn === "inprogress" ) {
+			fn = queue.shift();
+			startLength--;
+		}
+
+		hooks.cur = fn;
+		if ( fn ) {
+
+			// Add a progress sentinel to prevent the fx queue from being
+			// automatically dequeued
+			if ( type === "fx" ) {
+				queue.unshift( "inprogress" );
+			}
+
+			// clear up the last queue stop function
+			delete hooks.stop;
+			fn.call( elem, next, hooks );
+		}
+
+		if ( !startLength && hooks ) {
+			hooks.empty.fire();
+		}
+	},
+
+	// not intended for public consumption - generates a queueHooks object, or returns the current one
+	_queueHooks: function( elem, type ) {
+		var key = type + "queueHooks";
+		return jQuery._data( elem, key ) || jQuery._data( elem, key, {
+			empty: jQuery.Callbacks("once memory").add(function() {
+				jQuery._removeData( elem, type + "queue" );
+				jQuery._removeData( elem, key );
+			})
+		});
+	}
+});
+
+jQuery.fn.extend({
+	queue: function( type, data ) {
+		var setter = 2;
+
+		if ( typeof type !== "string" ) {
+			data = type;
+			type = "fx";
+			setter--;
+		}
+
+		if ( arguments.length < setter ) {
+			return jQuery.queue( this[0], type );
+		}
+
+		return data === undefined ?
+			this :
+			this.each(function() {
+				var queue = jQuery.queue( this, type, data );
+
+				// ensure a hooks for this queue
+				jQuery._queueHooks( this, type );
+
+				if ( type === "fx" && queue[0] !== "inprogress" ) {
+					jQuery.dequeue( this, type );
+				}
+			});
+	},
+	dequeue: function( type ) {
+		return this.each(function() {
+			jQuery.dequeue( this, type );
+		});
+	},
+	// Based off of the plugin by Clint Helfers, with permission.
+	// http://blindsignals.com/index.php/2009/07/jquery-delay/
+	delay: function( time, type ) {
+		time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
+		type = type || "fx";
+
+		return this.queue( type, function( next, hooks ) {
+			var timeout = setTimeout( next, time );
+			hooks.stop = function() {
+				clearTimeout( timeout );
+			};
+		});
+	},
+	clearQueue: function( type ) {
+		return this.queue( type || "fx", [] );
+	},
+	// Get a promise resolved when queues of a certain type
+	// are emptied (fx is the type by default)
+	promise: function( type, obj ) {
+		var tmp,
+			count = 1,
+			defer = jQuery.Deferred(),
+			elements = this,
+			i = this.length,
+			resolve = function() {
+				if ( !( --count ) ) {
+					defer.resolveWith( elements, [ elements ] );
+				}
+			};
+
+		if ( typeof type !== "string" ) {
+			obj = type;
+			type = undefined;
+		}
+		type = type || "fx";
+
+		while( i-- ) {
+			tmp = jQuery._data( elements[ i ], type + "queueHooks" );
+			if ( tmp && tmp.empty ) {
+				count++;
+				tmp.empty.add( resolve );
+			}
+		}
+		resolve();
+		return defer.promise( obj );
+	}
+});
+var nodeHook, boolHook,
+	rclass = /[\t\r\n]/g,
+	rreturn = /\r/g,
+	rfocusable = /^(?:input|select|textarea|button|object)$/i,
+	rclickable = /^(?:a|area)$/i,
+	rboolean = /^(?:checked|selected|autofocus|autoplay|async|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped)$/i,
+	ruseDefault = /^(?:checked|selected)$/i,
+	getSetAttribute = jQuery.support.getSetAttribute,
+	getSetInput = jQuery.support.input;
+
+jQuery.fn.extend({
+	attr: function( name, value ) {
+		return jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 );
+	},
+
+	removeAttr: function( name ) {
+		return this.each(function() {
+			jQuery.removeAttr( this, name );
+		});
+	},
+
+	prop: function( name, value ) {
+		return jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 );
+	},
+
+	removeProp: function( name ) {
+		name = jQuery.propFix[ name ] || name;
+		return this.each(function() {
+			// try/catch handles cases where IE balks (such as removing a property on window)
+			try {
+				this[ name ] = undefined;
+				delete this[ name ];
+			} catch( e ) {}
+		});
+	},
+
+	addClass: function( value ) {
+		var classes, elem, cur, clazz, j,
+			i = 0,
+			len = this.length,
+			proceed = typeof value === "string" && value;
+
+		if ( jQuery.isFunction( value ) ) {
+			return this.each(function( j ) {
+				jQuery( this ).addClass( value.call( this, j, this.className ) );
+			});
+		}
+
+		if ( proceed ) {
+			// The disjunction here is for better compressibility (see removeClass)
+			classes = ( value || "" ).match( core_rnotwhite ) || [];
+
+			for ( ; i < len; i++ ) {
+				elem = this[ i ];
+				cur = elem.nodeType === 1 && ( elem.className ?
+					( " " + elem.className + " " ).replace( rclass, " " ) :
+					" "
+				);
+
+				if ( cur ) {
+					j = 0;
+					while ( (clazz = classes[j++]) ) {
+						if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
+							cur += clazz + " ";
+						}
+					}
+					elem.className = jQuery.trim( cur );
+
+				}
+			}
+		}
+
+		return this;
+	},
+
+	removeClass: function( value ) {
+		var classes, elem, cur, clazz, j,
+			i = 0,
+			len = this.length,
+			proceed = arguments.length === 0 || typeof value === "string" && value;
+
+		if ( jQuery.isFunction( value ) ) {
+			return this.each(function( j ) {
+				jQuery( this ).removeClass( value.call( this, j, this.className ) );
+			});
+		}
+		if ( proceed ) {
+			classes = ( value || "" ).match( core_rnotwhite ) || [];
+
+			for ( ; i < len; i++ ) {
+				elem = this[ i ];
+				// This expression is here for better compressibility (see addClass)
+				cur = elem.nodeType === 1 && ( elem.className ?
+					( " " + elem.className + " " ).replace( rclass, " " ) :
+					""
+				);
+
+				if ( cur ) {
+					j = 0;
+					while ( (clazz = classes[j++]) ) {
+						// Remove *all* instances
+						while ( cur.indexOf( " " + clazz + " " ) >= 0 ) {
+							cur = cur.replace( " " + clazz + " ", " " );
+						}
+					}
+					elem.className = value ? jQuery.trim( cur ) : "";
+				}
+			}
+		}
+
+		return this;
+	},
+
+	toggleClass: function( value, stateVal ) {
+		var type = typeof value,
+			isBool = typeof stateVal === "boolean";
+
+		if ( jQuery.isFunction( value ) ) {
+			return this.each(function( i ) {
+				jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );
+			});
+		}
+
+		return this.each(function() {
+			if ( type === "string" ) {
+				// toggle individual class names
+				var className,
+					i = 0,
+					self = jQuery( this ),
+					state = stateVal,
+					classNames = value.match( core_rnotwhite ) || [];
+
+				while ( (className = classNames[ i++ ]) ) {
+					// check each className given, space separated list
+					state = isBool ? state : !self.hasClass( className );
+					self[ state ? "addClass" : "removeClass" ]( className );
+				}
+
+			// Toggle whole class name
+			} else if ( type === "undefined" || type === "boolean" ) {
+				if ( this.className ) {
+					// store className if set
+					jQuery._data( this, "__className__", this.className );
+				}
+
+				// If the element has a class name or if we're passed "false",
+				// then remove the whole classname (if there was one, the above saved it).
+				// Otherwise bring back whatever was previously saved (if anything),
+				// falling back to the empty string if nothing was stored.
+				this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || "";
+			}
+		});
+	},
+
+	hasClass: function( selector ) {
+		var className = " " + selector + " ",
+			i = 0,
+			l = this.length;
+		for ( ; i < l; i++ ) {
+			if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) >= 0 ) {
+				return true;
+			}
+		}
+
+		return false;
+	},
+
+	val: function( value ) {
+		var hooks, ret, isFunction,
+			elem = this[0];
+
+		if ( !arguments.length ) {
+			if ( elem ) {
+				hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];
+
+				if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
+					return ret;
+				}
+
+				ret = elem.value;
+
+				return typeof ret === "string" ?
+					// handle most common string cases
+					ret.replace(rreturn, "") :
+					// handle cases where value is null/undef or number
+					ret == null ? "" : ret;
+			}
+
+			return;
+		}
+
+		isFunction = jQuery.isFunction( value );
+
+		return this.each(function( i ) {
+			var val,
+				self = jQuery(this);
+
+			if ( this.nodeType !== 1 ) {
+				return;
+			}
+
+			if ( isFunction ) {
+				val = value.call( this, i, self.val() );
+			} else {
+				val = value;
+			}
+
+			// Treat null/undefined as ""; convert numbers to string
+			if ( val == null ) {
+				val = "";
+			} else if ( typeof val === "number" ) {
+				val += "";
+			} else if ( jQuery.isArray( val ) ) {
+				val = jQuery.map(val, function ( value ) {
+					return value == null ? "" : value + "";
+				});
+			}
+
+			hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
+
+			// If set returns undefined, fall back to normal setting
+			if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {
+				this.value = val;
+			}
+		});
+	}
+});
+
+jQuery.extend({
+	valHooks: {
+		option: {
+			get: function( elem ) {
+				// attributes.value is undefined in Blackberry 4.7 but
+				// uses .value. See #6932
+				var val = elem.attributes.value;
+				return !val || val.specified ? elem.value : elem.text;
+			}
+		},
+		select: {
+			get: function( elem ) {
+				var value, option,
+					options = elem.options,
+					index = elem.selectedIndex,
+					one = elem.type === "select-one" || index < 0,
+					values = one ? null : [],
+					max = one ? index + 1 : options.length,
+					i = index < 0 ?
+						max :
+						one ? index : 0;
+
+				// Loop through all the selected options
+				for ( ; i < max; i++ ) {
+					option = options[ i ];
+
+					// oldIE doesn't update selected after form reset (#2551)
+					if ( ( option.selected || i === index ) &&
+							// Don't return options that are disabled or in a disabled optgroup
+							( jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null ) &&
+							( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) {
+
+						// Get the specific value for the option
+						value = jQuery( option ).val();
+
+						// We don't need an array for one selects
+						if ( one ) {
+							return value;
+						}
+
+						// Multi-Selects return an array
+						values.push( value );
+					}
+				}
+
+				return values;
+			},
+
+			set: function( elem, value ) {
+				var values = jQuery.makeArray( value );
+
+				jQuery(elem).find("option").each(function() {
+					this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0;
+				});
+
+				if ( !values.length ) {
+					elem.selectedIndex = -1;
+				}
+				return values;
+			}
+		}
+	},
+
+	attr: function( elem, name, value ) {
+		var ret, hooks, notxml,
+			nType = elem.nodeType;
+
+		// don't get/set attributes on text, comment and attribute nodes
+		if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
+			return;
+		}
+
+		// Fallback to prop when attributes are not supported
+		if ( typeof elem.getAttribute === "undefined" ) {
+			return jQuery.prop( elem, name, value );
+		}
+
+		notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
+
+		// All attributes are lowercase
+		// Grab necessary hook if one is defined
+		if ( notxml ) {
+			name = name.toLowerCase();
+			hooks = jQuery.attrHooks[ name ] || ( rboolean.test( name ) ? boolHook : nodeHook );
+		}
+
+		if ( value !== undefined ) {
+
+			if ( value === null ) {
+				jQuery.removeAttr( elem, name );
+
+			} else if ( hooks && notxml && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
+				return ret;
+
+			} else {
+				elem.setAttribute( name, value + "" );
+				return value;
+			}
+
+		} else if ( hooks && notxml && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {
+			return ret;
+
+		} else {
+
+			// In IE9+, Flash objects don't have .getAttribute (#12945)
+			// Support: IE9+
+			if ( typeof elem.getAttribute !== "undefined" ) {
+				ret =  elem.getAttribute( name );
+			}
+
+			// Non-existent attributes return null, we normalize to undefined
+			return ret == null ?
+				undefined :
+				ret;
+		}
+	},
+
+	removeAttr: function( elem, value ) {
+		var name, propName,
+			i = 0,
+			attrNames = value && value.match( core_rnotwhite );
+
+		if ( attrNames && elem.nodeType === 1 ) {
+			while ( (name = attrNames[i++]) ) {
+				propName = jQuery.propFix[ name ] || name;
+
+				// Boolean attributes get special treatment (#10870)
+				if ( rboolean.test( name ) ) {
+					// Set corresponding property to false for boolean attributes
+					// Also clear defaultChecked/defaultSelected (if appropriate) for IE<8
+					if ( !getSetAttribute && ruseDefault.test( name ) ) {
+						elem[ jQuery.camelCase( "default-" + name ) ] =
+							elem[ propName ] = false;
+					} else {
+						elem[ propName ] = false;
+					}
+
+				// See #9699 for explanation of this approach (setting first, then removal)
+				} else {
+					jQuery.attr( elem, name, "" );
+				}
+
+				elem.removeAttribute( getSetAttribute ? name : propName );
+			}
+		}
+	},
+
+	attrHooks: {
+		type: {
+			set: function( elem, value ) {
+				if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) {
+					// Setting the type on a radio button after the value resets the value in IE6-9
+					// Reset value to default in case type is set after value during creation
+					var val = elem.value;
+					elem.setAttribute( "type", value );
+					if ( val ) {
+						elem.value = val;
+					}
+					return value;
+				}
+			}
+		}
+	},
+
+	propFix: {
+		tabindex: "tabIndex",
+		readonly: "readOnly",
+		"for": "htmlFor",
+		"class": "className",
+		maxlength: "maxLength",
+		cellspacing: "cellSpacing",
+		cellpadding: "cellPadding",
+		rowspan: "rowSpan",
+		colspan: "colSpan",
+		usemap: "useMap",
+		frameborder: "frameBorder",
+		contenteditable: "contentEditable"
+	},
+
+	prop: function( elem, name, value ) {
+		var ret, hooks, notxml,
+			nType = elem.nodeType;
+
+		// don't get/set properties on text, comment and attribute nodes
+		if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
+			return;
+		}
+
+		notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
+
+		if ( notxml ) {
+			// Fix name and attach hooks
+			name = jQuery.propFix[ name ] || name;
+			hooks = jQuery.propHooks[ name ];
+		}
+
+		if ( value !== undefined ) {
+			if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
+				return ret;
+
+			} else {
+				return ( elem[ name ] = value );
+			}
+
+		} else {
+			if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {
+				return ret;
+
+			} else {
+				return elem[ name ];
+			}
+		}
+	},
+
+	propHooks: {
+		tabIndex: {
+			get: function( elem ) {
+				// elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
+				// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
+				var attributeNode = elem.getAttributeNode("tabindex");
+
+				return attributeNode && attributeNode.specified ?
+					parseInt( attributeNode.value, 10 ) :
+					rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
+						0 :
+						undefined;
+			}
+		}
+	}
+});
+
+// Hook for boolean attributes
+boolHook = {
+	get: function( elem, name ) {
+		var
+			// Use .prop to determine if this attribute is understood as boolean
+			prop = jQuery.prop( elem, name ),
+
+			// Fetch it accordingly
+			attr = typeof prop === "boolean" && elem.getAttribute( name ),
+			detail = typeof prop === "boolean" ?
+
+				getSetInput && getSetAttribute ?
+					attr != null :
+					// oldIE fabricates an empty string for missing boolean attributes
+					// and conflates checked/selected into attroperties
+					ruseDefault.test( name ) ?
+						elem[ jQuery.camelCase( "default-" + name ) ] :
+						!!attr :
+
+				// fetch an attribute node for properties not recognized as boolean
+				elem.getAttributeNode( name );
+
+		return detail && detail.value !== false ?
+			name.toLowerCase() :
+			undefined;
+	},
+	set: function( elem, value, name ) {
+		if ( value === false ) {
+			// Remove boolean attributes when set to false
+			jQuery.removeAttr( elem, name );
+		} else if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {
+			// IE<8 needs the *property* name
+			elem.setAttribute( !getSetAttribute && jQuery.propFix[ name ] || name, name );
+
+		// Use defaultChecked and defaultSelected for oldIE
+		} else {
+			elem[ jQuery.camelCase( "default-" + name ) ] = elem[ name ] = true;
+		}
+
+		return name;
+	}
+};
+
+// fix oldIE value attroperty
+if ( !getSetInput || !getSetAttribute ) {
+	jQuery.attrHooks.value = {
+		get: function( elem, name ) {
+			var ret = elem.getAttributeNode( name );
+			return jQuery.nodeName( elem, "input" ) ?
+
+				// Ignore the value *property* by using defaultValue
+				elem.defaultValue :
+
+				ret && ret.specified ? ret.value : undefined;
+		},
+		set: function( elem, value, name ) {
+			if ( jQuery.nodeName( elem, "input" ) ) {
+				// Does not return so that setAttribute is also used
+				elem.defaultValue = value;
+			} else {
+				// Use nodeHook if defined (#1954); otherwise setAttribute is fine
+				return nodeHook && nodeHook.set( elem, value, name );
+			}
+		}
+	};
+}
+
+// IE6/7 do not support getting/setting some attributes with get/setAttribute
+if ( !getSetAttribute ) {
+
+	// Use this for any attribute in IE6/7
+	// This fixes almost every IE6/7 issue
+	nodeHook = jQuery.valHooks.button = {
+		get: function( elem, name ) {
+			var ret = elem.getAttributeNode( name );
+			return ret && ( name === "id" || name === "name" || name === "coords" ? ret.value !== "" : ret.specified ) ?
+				ret.value :
+				undefined;
+		},
+		set: function( elem, value, name ) {
+			// Set the existing or create a new attribute node
+			var ret = elem.getAttributeNode( name );
+			if ( !ret ) {
+				elem.setAttributeNode(
+					(ret = elem.ownerDocument.createAttribute( name ))
+				);
+			}
+
+			ret.value = value += "";
+
+			// Break association with cloned elements by also using setAttribute (#9646)
+			return name === "value" || value === elem.getAttribute( name ) ?
+				value :
+				undefined;
+		}
+	};
+
+	// Set contenteditable to false on removals(#10429)
+	// Setting to empty string throws an error as an invalid value
+	jQuery.attrHooks.contenteditable = {
+		get: nodeHook.get,
+		set: function( elem, value, name ) {
+			nodeHook.set( elem, value === "" ? false : value, name );
+		}
+	};
+
+	// Set width and height to auto instead of 0 on empty string( Bug #8150 )
+	// This is for removals
+	jQuery.each([ "width", "height" ], function( i, name ) {
+		jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
+			set: function( elem, value ) {
+				if ( value === "" ) {
+					elem.setAttribute( name, "auto" );
+					return value;
+				}
+			}
+		});
+	});
+}
+
+
+// Some attributes require a special call on IE
+// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
+if ( !jQuery.support.hrefNormalized ) {
+	jQuery.each([ "href", "src", "width", "height" ], function( i, name ) {
+		jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
+			get: function( elem ) {
+				var ret = elem.getAttribute( name, 2 );
+				return ret == null ? undefined : ret;
+			}
+		});
+	});
+
+	// href/src property should get the full normalized URL (#10299/#12915)
+	jQuery.each([ "href", "src" ], function( i, name ) {
+		jQuery.propHooks[ name ] = {
+			get: function( elem ) {
+				return elem.getAttribute( name, 4 );
+			}
+		};
+	});
+}
+
+if ( !jQuery.support.style ) {
+	jQuery.attrHooks.style = {
+		get: function( elem ) {
+			// Return undefined in the case of empty string
+			// Note: IE uppercases css property names, but if we were to .toLowerCase()
+			// .cssText, that would destroy case senstitivity in URL's, like in "background"
+			return elem.style.cssText || undefined;
+		},
+		set: function( elem, value ) {
+			return ( elem.style.cssText = value + "" );
+		}
+	};
+}
+
+// Safari mis-reports the default selected property of an option
+// Accessing the parent's selectedIndex property fixes it
+if ( !jQuery.support.optSelected ) {
+	jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, {
+		get: function( elem ) {
+			var parent = elem.parentNode;
+
+			if ( parent ) {
+				parent.selectedIndex;
+
+				// Make sure that it also works with optgroups, see #5701
+				if ( parent.parentNode ) {
+					parent.parentNode.selectedIndex;
+				}
+			}
+			return null;
+		}
+	});
+}
+
+// IE6/7 call enctype encoding
+if ( !jQuery.support.enctype ) {
+	jQuery.propFix.enctype = "encoding";
+}
+
+// Radios and checkboxes getter/setter
+if ( !jQuery.support.checkOn ) {
+	jQuery.each([ "radio", "checkbox" ], function() {
+		jQuery.valHooks[ this ] = {
+			get: function( elem ) {
+				// Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified
+				return elem.getAttribute("value") === null ? "on" : elem.value;
+			}
+		};
+	});
+}
+jQuery.each([ "radio", "checkbox" ], function() {
+	jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], {
+		set: function( elem, value ) {
+			if ( jQuery.isArray( value ) ) {
+				return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );
+			}
+		}
+	});
+});
+var rformElems = /^(?:input|select|textarea)$/i,
+	rkeyEvent = /^key/,
+	rmouseEvent = /^(?:mouse|contextmenu)|click/,
+	rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
+	rtypenamespace = /^([^.]*)(?:\.(.+)|)$/;
+
+function returnTrue() {
+	return true;
+}
+
+function returnFalse() {
+	return false;
+}
+
+/*
+ * Helper functions for managing events -- not part of the public interface.
+ * Props to Dean Edwards' addEvent library for many of the ideas.
+ */
+jQuery.event = {
+
+	global: {},
+
+	add: function( elem, types, handler, data, selector ) {
+
+		var handleObjIn, eventHandle, tmp,
+			events, t, handleObj,
+			special, handlers, type, namespaces, origType,
+			// Don't attach events to noData or text/comment nodes (but allow plain objects)
+			elemData = elem.nodeType !== 3 && elem.nodeType !== 8 && jQuery._data( elem );
+
+		if ( !elemData ) {
+			return;
+		}
+
+		// Caller can pass in an object of custom data in lieu of the handler
+		if ( handler.handler ) {
+			handleObjIn = handler;
+			handler = handleObjIn.handler;
+			selector = handleObjIn.selector;
+		}
+
+		// Make sure that the handler has a unique ID, used to find/remove it later
+		if ( !handler.guid ) {
+			handler.guid = jQuery.guid++;
+		}
+
+		// Init the element's event structure and main handler, if this is the first
+		if ( !(events = elemData.events) ) {
+			events = elemData.events = {};
+		}
+		if ( !(eventHandle = elemData.handle) ) {
+			eventHandle = elemData.handle = function( e ) {
+				// Discard the second event of a jQuery.event.trigger() and
+				// when an event is called after a page has unloaded
+				return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ?
+					jQuery.event.dispatch.apply( eventHandle.elem, arguments ) :
+					undefined;
+			};
+			// Add elem as a property of the handle fn to prevent a memory leak with IE non-native events
+			eventHandle.elem = elem;
+		}
+
+		// Handle multiple events separated by a space
+		// jQuery(...).bind("mouseover mouseout", fn);
+		types = ( types || "" ).match( core_rnotwhite ) || [""];
+		t = types.length;
+		while ( t-- ) {
+			tmp = rtypenamespace.exec( types[t] ) || [];
+			type = origType = tmp[1];
+			namespaces = ( tmp[2] || "" ).split( "." ).sort();
+
+			// If event changes its type, use the special event handlers for the changed type
+			special = jQuery.event.special[ type ] || {};
+
+			// If selector defined, determine special event api type, otherwise given type
+			type = ( selector ? special.delegateType : special.bindType ) || type;
+
+			// Update special based on newly reset type
+			special = jQuery.event.special[ type ] || {};
+
+			// handleObj is passed to all event handlers
+			handleObj = jQuery.extend({
+				type: type,
+				origType: origType,
+				data: data,
+				handler: handler,
+				guid: handler.guid,
+				selector: selector,
+				needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
+				namespace: namespaces.join(".")
+			}, handleObjIn );
+
+			// Init the event handler queue if we're the first
+			if ( !(handlers = events[ type ]) ) {
+				handlers = events[ type ] = [];
+				handlers.delegateCount = 0;
+
+				// Only use addEventListener/attachEvent if the special events handler returns false
+				if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
+					// Bind the global event handler to the element
+					if ( elem.addEventListener ) {
+						elem.addEventListener( type, eventHandle, false );
+
+					} else if ( elem.attachEvent ) {
+						elem.attachEvent( "on" + type, eventHandle );
+					}
+				}
+			}
+
+			if ( special.add ) {
+				special.add.call( elem, handleObj );
+
+				if ( !handleObj.handler.guid ) {
+					handleObj.handler.guid = handler.guid;
+				}
+			}
+
+			// Add to the element's handler list, delegates in front
+			if ( selector ) {
+				handlers.splice( handlers.delegateCount++, 0, handleObj );
+			} else {
+				handlers.push( handleObj );
+			}
+
+			// Keep track of which events have ever been used, for event optimization
+			jQuery.event.global[ type ] = true;
+		}
+
+		// Nullify elem to prevent memory leaks in IE
+		elem = null;
+	},
+
+	// Detach an event or set of events from an element
+	remove: function( elem, types, handler, selector, mappedTypes ) {
+
+		var j, origCount, tmp,
+			events, t, handleObj,
+			special, handlers, type, namespaces, origType,
+			elemData = jQuery.hasData( elem ) && jQuery._data( elem );
+
+		if ( !elemData || !(events = elemData.events) ) {
+			return;
+		}
+
+		// Once for each type.namespace in types; type may be omitted
+		types = ( types || "" ).match( core_rnotwhite ) || [""];
+		t = types.length;
+		while ( t-- ) {
+			tmp = rtypenamespace.exec( types[t] ) || [];
+			type = origType = tmp[1];
+			namespaces = ( tmp[2] || "" ).split( "." ).sort();
+
+			// Unbind all events (on this namespace, if provided) for the element
+			if ( !type ) {
+				for ( type in events ) {
+					jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
+				}
+				continue;
+			}
+
+			special = jQuery.event.special[ type ] || {};
+			type = ( selector ? special.delegateType : special.bindType ) || type;
+			handlers = events[ type ] || [];
+			tmp = tmp[2] && new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" );
+
+			// Remove matching events
+			origCount = j = handlers.length;
+			while ( j-- ) {
+				handleObj = handlers[ j ];
+
+				if ( ( mappedTypes || origType === handleObj.origType ) &&
+					( !handler || handler.guid === handleObj.guid ) &&
+					( !tmp || tmp.test( handleObj.namespace ) ) &&
+					( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) {
+					handlers.splice( j, 1 );
+
+					if ( handleObj.selector ) {
+						handlers.delegateCount--;
+					}
+					if ( special.remove ) {
+						special.remove.call( elem, handleObj );
+					}
+				}
+			}
+
+			// Remove generic event handler if we removed something and no more handlers exist
+			// (avoids potential for endless recursion during removal of special event handlers)
+			if ( origCount && !handlers.length ) {
+				if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
+					jQuery.removeEvent( elem, type, elemData.handle );
+				}
+
+				delete events[ type ];
+			}
+		}
+
+		// Remove the expando if it's no longer used
+		if ( jQuery.isEmptyObject( events ) ) {
+			delete elemData.handle;
+
+			// removeData also checks for emptiness and clears the expando if empty
+			// so use it instead of delete
+			jQuery._removeData( elem, "events" );
+		}
+	},
+
+	trigger: function( event, data, elem, onlyHandlers ) {
+
+		var i, cur, tmp, bubbleType, ontype, handle, special,
+			eventPath = [ elem || document ],
+			type = event.type || event,
+			namespaces = event.namespace ? event.namespace.split(".") : [];
+
+		cur = tmp = elem = elem || document;
+
+		// Don't do events on text and comment nodes
+		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
+			return;
+		}
+
+		// focus/blur morphs to focusin/out; ensure we're not firing them right now
+		if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
+			return;
+		}
+
+		if ( type.indexOf(".") >= 0 ) {
+			// Namespaced trigger; create a regexp to match event type in handle()
+			namespaces = type.split(".");
+			type = namespaces.shift();
+			namespaces.sort();
+		}
+		ontype = type.indexOf(":") < 0 && "on" + type;
+
+		// Caller can pass in a jQuery.Event object, Object, or just an event type string
+		event = event[ jQuery.expando ] ?
+			event :
+			new jQuery.Event( type, typeof event === "object" && event );
+
+		event.isTrigger = true;
+		event.namespace = namespaces.join(".");
+		event.namespace_re = event.namespace ?
+			new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) :
+			null;
+
+		// Clean up the event in case it is being reused
+		event.result = undefined;
+		if ( !event.target ) {
+			event.target = elem;
+		}
+
+		// Clone any incoming data and prepend the event, creating the handler arg list
+		data = data == null ?
+			[ event ] :
+			jQuery.makeArray( data, [ event ] );
+
+		// Allow special events to draw outside the lines
+		special = jQuery.event.special[ type ] || {};
+		if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
+			return;
+		}
+
+		// Determine event propagation path in advance, per W3C events spec (#9951)
+		// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
+		if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
+
+			bubbleType = special.delegateType || type;
+			if ( !rfocusMorph.test( bubbleType + type ) ) {
+				cur = cur.parentNode;
+			}
+			for ( ; cur; cur = cur.parentNode ) {
+				eventPath.push( cur );
+				tmp = cur;
+			}
+
+			// Only add window if we got to document (e.g., not plain obj or detached DOM)
+			if ( tmp === (elem.ownerDocument || document) ) {
+				eventPath.push( tmp.defaultView || tmp.parentWindow || window );
+			}
+		}
+
+		// Fire handlers on the event path
+		i = 0;
+		while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) {
+
+			event.type = i > 1 ?
+				bubbleType :
+				special.bindType || type;
+
+			// jQuery handler
+			handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" );
+			if ( handle ) {
+				handle.apply( cur, data );
+			}
+
+			// Native handler
+			handle = ontype && cur[ ontype ];
+			if ( handle && jQuery.acceptData( cur ) && handle.apply && handle.apply( cur, data ) === false ) {
+				event.preventDefault();
+			}
+		}
+		event.type = type;
+
+		// If nobody prevented the default action, do it now
+		if ( !onlyHandlers && !event.isDefaultPrevented() ) {
+
+			if ( (!special._default || special._default.apply( elem.ownerDocument, data ) === false) &&
+				!(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) {
+
+				// Call a native DOM method on the target with the same name name as the event.
+				// Can't use an .isFunction() check here because IE6/7 fails that test.
+				// Don't do default actions on window, that's where global variables be (#6170)
+				if ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) {
+
+					// Don't re-trigger an onFOO event when we call its FOO() method
+					tmp = elem[ ontype ];
+
+					if ( tmp ) {
+						elem[ ontype ] = null;
+					}
+
+					// Prevent re-triggering of the same event, since we already bubbled it above
+					jQuery.event.triggered = type;
+					try {
+						elem[ type ]();
+					} catch ( e ) {
+						// IE<9 dies on focus/blur to hidden element (#1486,#12518)
+						// only reproducible on winXP IE8 native, not IE9 in IE8 mode
+					}
+					jQuery.event.triggered = undefined;
+
+					if ( tmp ) {
+						elem[ ontype ] = tmp;
+					}
+				}
+			}
+		}
+
+		return event.result;
+	},
+
+	dispatch: function( event ) {
+
+		// Make a writable jQuery.Event from the native event object
+		event = jQuery.event.fix( event );
+
+		var i, j, ret, matched, handleObj,
+			handlerQueue = [],
+			args = core_slice.call( arguments ),
+			handlers = ( jQuery._data( this, "events" ) || {} )[ event.type ] || [],
+			special = jQuery.event.special[ event.type ] || {};
+
+		// Use the fix-ed jQuery.Event rather than the (read-only) native event
+		args[0] = event;
+		event.delegateTarget = this;
+
+		// Call the preDispatch hook for the mapped type, and let it bail if desired
+		if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
+			return;
+		}
+
+		// Determine handlers
+		handlerQueue = jQuery.event.handlers.call( this, event, handlers );
+
+		// Run delegates first; they may want to stop propagation beneath us
+		i = 0;
+		while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) {
+			event.currentTarget = matched.elem;
+
+			j = 0;
+			while ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) {
+
+				// Triggered event must either 1) have no namespace, or
+				// 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).
+				if ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) {
+
+					event.handleObj = handleObj;
+					event.data = handleObj.data;
+
+					ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )
+							.apply( matched.elem, args );
+
+					if ( ret !== undefined ) {
+						if ( (event.result = ret) === false ) {
+							event.preventDefault();
+							event.stopPropagation();
+						}
+					}
+				}
+			}
+		}
+
+		// Call the postDispatch hook for the mapped type
+		if ( special.postDispatch ) {
+			special.postDispatch.call( this, event );
+		}
+
+		return event.result;
+	},
+
+	handlers: function( event, handlers ) {
+		var i, matches, sel, handleObj,
+			handlerQueue = [],
+			delegateCount = handlers.delegateCount,
+			cur = event.target;
+
+		// Find delegate handlers
+		// Black-hole SVG <use> instance trees (#13180)
+		// Avoid non-left-click bubbling in Firefox (#3861)
+		if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) {
+
+			for ( ; cur != this; cur = cur.parentNode || this ) {
+
+				// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
+				if ( cur.disabled !== true || event.type !== "click" ) {
+					matches = [];
+					for ( i = 0; i < delegateCount; i++ ) {
+						handleObj = handlers[ i ];
+
+						// Don't conflict with Object.prototype properties (#13203)
+						sel = handleObj.selector + " ";
+
+						if ( matches[ sel ] === undefined ) {
+							matches[ sel ] = handleObj.needsContext ?
+								jQuery( sel, this ).index( cur ) >= 0 :
+								jQuery.find( sel, this, null, [ cur ] ).length;
+						}
+						if ( matches[ sel ] ) {
+							matches.push( handleObj );
+						}
+					}
+					if ( matches.length ) {
+						handlerQueue.push({ elem: cur, handlers: matches });
+					}
+				}
+			}
+		}
+
+		// Add the remaining (directly-bound) handlers
+		if ( delegateCount < handlers.length ) {
+			handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) });
+		}
+
+		return handlerQueue;
+	},
+
+	fix: function( event ) {
+		if ( event[ jQuery.expando ] ) {
+			return event;
+		}
+
+		// Create a writable copy of the event object and normalize some properties
+		var i, prop,
+			originalEvent = event,
+			fixHook = jQuery.event.fixHooks[ event.type ] || {},
+			copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;
+
+		event = new jQuery.Event( originalEvent );
+
+		i = copy.length;
+		while ( i-- ) {
+			prop = copy[ i ];
+			event[ prop ] = originalEvent[ prop ];
+		}
+
+		// Support: IE<9
+		// Fix target property (#1925)
+		if ( !event.target ) {
+			event.target = originalEvent.srcElement || document;
+		}
+
+		// Support: Chrome 23+, Safari?
+		// Target should not be a text node (#504, #13143)
+		if ( event.target.nodeType === 3 ) {
+			event.target = event.target.parentNode;
+		}
+
+		// Support: IE<9
+		// For mouse/key events, metaKey==false if it's undefined (#3368, #11328)
+		event.metaKey = !!event.metaKey;
+
+		return fixHook.filter ? fixHook.filter( event, originalEvent ) : event;
+	},
+
+	// Includes some event props shared by KeyEvent and MouseEvent
+	props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
+
+	fixHooks: {},
+
+	keyHooks: {
+		props: "char charCode key keyCode".split(" "),
+		filter: function( event, original ) {
+
+			// Add which for key events
+			if ( event.which == null ) {
+				event.which = original.charCode != null ? original.charCode : original.keyCode;
+			}
+
+			return event;
+		}
+	},
+
+	mouseHooks: {
+		props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
+		filter: function( event, original ) {
+			var eventDoc, doc, body,
+				button = original.button,
+				fromElement = original.fromElement;
+
+			// Calculate pageX/Y if missing and clientX/Y available
+			if ( event.pageX == null && original.clientX != null ) {
+				eventDoc = event.target.ownerDocument || document;
+				doc = eventDoc.documentElement;
+				body = eventDoc.body;
+
+				event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );
+				event.pageY = original.clientY + ( doc && doc.scrollTop  || body && body.scrollTop  || 0 ) - ( doc && doc.clientTop  || body && body.clientTop  || 0 );
+			}
+
+			// Add relatedTarget, if necessary
+			if ( !event.relatedTarget && fromElement ) {
+				event.relatedTarget = fromElement === event.target ? original.toElement : fromElement;
+			}
+
+			// Add which for click: 1 === left; 2 === middle; 3 === right
+			// Note: button is not normalized, so don't use it
+			if ( !event.which && button !== undefined ) {
+				event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );
+			}
+
+			return event;
+		}
+	},
+
+	special: {
+		load: {
+			// Prevent triggered image.load events from bubbling to window.load
+			noBubble: true
+		},
+		click: {
+			// For checkbox, fire native event so checked state will be right
+			trigger: function() {
+				if ( jQuery.nodeName( this, "input" ) && this.type === "checkbox" && this.click ) {
+					this.click();
+					return false;
+				}
+			}
+		},
+		focus: {
+			// Fire native event if possible so blur/focus sequence is correct
+			trigger: function() {
+				if ( this !== document.activeElement && this.focus ) {
+					try {
+						this.focus();
+						return false;
+					} catch ( e ) {
+						// Support: IE<9
+						// If we error on focus to hidden element (#1486, #12518),
+						// let .trigger() run the handlers
+					}
+				}
+			},
+			delegateType: "focusin"
+		},
+		blur: {
+			trigger: function() {
+				if ( this === document.activeElement && this.blur ) {
+					this.blur();
+					return false;
+				}
+			},
+			delegateType: "focusout"
+		},
+
+		beforeunload: {
+			postDispatch: function( event ) {
+
+				// Even when returnValue equals to undefined Firefox will still show alert
+				if ( event.result !== undefined ) {
+					event.originalEvent.returnValue = event.result;
+				}
+			}
+		}
+	},
+
+	simulate: function( type, elem, event, bubble ) {
+		// Piggyback on a donor event to simulate a different one.
+		// Fake originalEvent to avoid donor's stopPropagation, but if the
+		// simulated event prevents default then we do the same on the donor.
+		var e = jQuery.extend(
+			new jQuery.Event(),
+			event,
+			{ type: type,
+				isSimulated: true,
+				originalEvent: {}
+			}
+		);
+		if ( bubble ) {
+			jQuery.event.trigger( e, null, elem );
+		} else {
+			jQuery.event.dispatch.call( elem, e );
+		}
+		if ( e.isDefaultPrevented() ) {
+			event.preventDefault();
+		}
+	}
+};
+
+jQuery.removeEvent = document.removeEventListener ?
+	function( elem, type, handle ) {
+		if ( elem.removeEventListener ) {
+			elem.removeEventListener( type, handle, false );
+		}
+	} :
+	function( elem, type, handle ) {
+		var name = "on" + type;
+
+		if ( elem.detachEvent ) {
+
+			// #8545, #7054, preventing memory leaks for custom events in IE6-8
+			// detachEvent needed property on element, by name of that event, to properly expose it to GC
+			if ( typeof elem[ name ] === "undefined" ) {
+				elem[ name ] = null;
+			}
+
+			elem.detachEvent( name, handle );
+		}
+	};
+
+jQuery.Event = function( src, props ) {
+	// Allow instantiation without the 'new' keyword
+	if ( !(this instanceof jQuery.Event) ) {
+		return new jQuery.Event( src, props );
+	}
+
+	// Event object
+	if ( src && src.type ) {
+		this.originalEvent = src;
+		this.type = src.type;
+
+		// Events bubbling up the document may have been marked as prevented
+		// by a handler lower down the tree; reflect the correct value.
+		this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false ||
+			src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse;
+
+	// Event type
+	} else {
+		this.type = src;
+	}
+
+	// Put explicitly provided properties onto the event object
+	if ( props ) {
+		jQuery.extend( this, props );
+	}
+
+	// Create a timestamp if incoming event doesn't have one
+	this.timeStamp = src && src.timeStamp || jQuery.now();
+
+	// Mark it as fixed
+	this[ jQuery.expando ] = true;
+};
+
+// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
+// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
+jQuery.Event.prototype = {
+	isDefaultPrevented: returnFalse,
+	isPropagationStopped: returnFalse,
+	isImmediatePropagationStopped: returnFalse,
+
+	preventDefault: function() {
+		var e = this.originalEvent;
+
+		this.isDefaultPrevented = returnTrue;
+		if ( !e ) {
+			return;
+		}
+
+		// If preventDefault exists, run it on the original event
+		if ( e.preventDefault ) {
+			e.preventDefault();
+
+		// Support: IE
+		// Otherwise set the returnValue property of the original event to false
+		} else {
+			e.returnValue = false;
+		}
+	},
+	stopPropagation: function() {
+		var e = this.originalEvent;
+
+		this.isPropagationStopped = returnTrue;
+		if ( !e ) {
+			return;
+		}
+		// If stopPropagation exists, run it on the original event
+		if ( e.stopPropagation ) {
+			e.stopPropagation();
+		}
+
+		// Support: IE
+		// Set the cancelBubble property of the original event to true
+		e.cancelBubble = true;
+	},
+	stopImmediatePropagation: function() {
+		this.isImmediatePropagationStopped = returnTrue;
+		this.stopPropagation();
+	}
+};
+
+// Create mouseenter/leave events using mouseover/out and event-time checks
+jQuery.each({
+	mouseenter: "mouseover",
+	mouseleave: "mouseout"
+}, function( orig, fix ) {
+	jQuery.event.special[ orig ] = {
+		delegateType: fix,
+		bindType: fix,
+
+		handle: function( event ) {
+			var ret,
+				target = this,
+				related = event.relatedTarget,
+				handleObj = event.handleObj;
+
+			// For mousenter/leave call the handler if related is outside the target.
+			// NB: No relatedTarget if the mouse left/entered the browser window
+			if ( !related || (related !== target && !jQuery.contains( target, related )) ) {
+				event.type = handleObj.origType;
+				ret = handleObj.handler.apply( this, arguments );
+				event.type = fix;
+			}
+			return ret;
+		}
+	};
+});
+
+// IE submit delegation
+if ( !jQuery.support.submitBubbles ) {
+
+	jQuery.event.special.submit = {
+		setup: function() {
+			// Only need this for delegated form submit events
+			if ( jQuery.nodeName( this, "form" ) ) {
+				return false;
+			}
+
+			// Lazy-add a submit handler when a descendant form may potentially be submitted
+			jQuery.event.add( this, "click._submit keypress._submit", function( e ) {
+				// Node name check avoids a VML-related crash in IE (#9807)
+				var elem = e.target,
+					form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined;
+				if ( form && !jQuery._data( form, "submitBubbles" ) ) {
+					jQuery.event.add( form, "submit._submit", function( event ) {
+						event._submit_bubble = true;
+					});
+					jQuery._data( form, "submitBubbles", true );
+				}
+			});
+			// return undefined since we don't need an event listener
+		},
+
+		postDispatch: function( event ) {
+			// If form was submitted by the user, bubble the event up the tree
+			if ( event._submit_bubble ) {
+				delete event._submit_bubble;
+				if ( this.parentNode && !event.isTrigger ) {
+					jQuery.event.simulate( "submit", this.parentNode, event, true );
+				}
+			}
+		},
+
+		teardown: function() {
+			// Only need this for delegated form submit events
+			if ( jQuery.nodeName( this, "form" ) ) {
+				return false;
+			}
+
+			// Remove delegated handlers; cleanData eventually reaps submit handlers attached above
+			jQuery.event.remove( this, "._submit" );
+		}
+	};
+}
+
+// IE change delegation and checkbox/radio fix
+if ( !jQuery.support.changeBubbles ) {
+
+	jQuery.event.special.change = {
+
+		setup: function() {
+
+			if ( rformElems.test( this.nodeName ) ) {
+				// IE doesn't fire change on a check/radio until blur; trigger it on click
+				// after a propertychange. Eat the blur-change in special.change.handle.
+				// This still fires onchange a second time for check/radio after blur.
+				if ( this.type === "checkbox" || this.type === "radio" ) {
+					jQuery.event.add( this, "propertychange._change", function( event ) {
+						if ( event.originalEvent.propertyName === "checked" ) {
+							this._just_changed = true;
+						}
+					});
+					jQuery.event.add( this, "click._change", function( event ) {
+						if ( this._just_changed && !event.isTrigger ) {
+							this._just_changed = false;
+						}
+						// Allow triggered, simulated change events (#11500)
+						jQuery.event.simulate( "change", this, event, true );
+					});
+				}
+				return false;
+			}
+			// Delegated event; lazy-add a change handler on descendant inputs
+			jQuery.event.add( this, "beforeactivate._change", function( e ) {
+				var elem = e.target;
+
+				if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "changeBubbles" ) ) {
+					jQuery.event.add( elem, "change._change", function( event ) {
+						if ( this.parentNode && !event.isSimulated && !event.isTrigger ) {
+							jQuery.event.simulate( "change", this.parentNode, event, true );
+						}
+					});
+					jQuery._data( elem, "changeBubbles", true );
+				}
+			});
+		},
+
+		handle: function( event ) {
+			var elem = event.target;
+
+			// Swallow native change events from checkbox/radio, we already triggered them above
+			if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) {
+				return event.handleObj.handler.apply( this, arguments );
+			}
+		},
+
+		teardown: function() {
+			jQuery.event.remove( this, "._change" );
+
+			return !rformElems.test( this.nodeName );
+		}
+	};
+}
+
+// Create "bubbling" focus and blur events
+if ( !jQuery.support.focusinBubbles ) {
+	jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
+
+		// Attach a single capturing handler while someone wants focusin/focusout
+		var attaches = 0,
+			handler = function( event ) {
+				jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );
+			};
+
+		jQuery.event.special[ fix ] = {
+			setup: function() {
+				if ( attaches++ === 0 ) {
+					document.addEventListener( orig, handler, true );
+				}
+			},
+			teardown: function() {
+				if ( --attaches === 0 ) {
+					document.removeEventListener( orig, handler, true );
+				}
+			}
+		};
+	});
+}
+
+jQuery.fn.extend({
+
+	on: function( types, selector, data, fn, /*INTERNAL*/ one ) {
+		var origFn, type;
+
+		// Types can be a map of types/handlers
+		if ( typeof types === "object" ) {
+			// ( types-Object, selector, data )
+			if ( typeof selector !== "string" ) {
+				// ( types-Object, data )
+				data = data || selector;
+				selector = undefined;
+			}
+			for ( type in types ) {
+				this.on( type, selector, data, types[ type ], one );
+			}
+			return this;
+		}
+
+		if ( data == null && fn == null ) {
+			// ( types, fn )
+			fn = selector;
+			data = selector = undefined;
+		} else if ( fn == null ) {
+			if ( typeof selector === "string" ) {
+				// ( types, selector, fn )
+				fn = data;
+				data = undefined;
+			} else {
+				// ( types, data, fn )
+				fn = data;
+				data = selector;
+				selector = undefined;
+			}
+		}
+		if ( fn === false ) {
+			fn = returnFalse;
+		} else if ( !fn ) {
+			return this;
+		}
+
+		if ( one === 1 ) {
+			origFn = fn;
+			fn = function( event ) {
+				// Can use an empty set, since event contains the info
+				jQuery().off( event );
+				return origFn.apply( this, arguments );
+			};
+			// Use same guid so caller can remove using origFn
+			fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
+		}
+		return this.each( function() {
+			jQuery.event.add( this, types, fn, data, selector );
+		});
+	},
+	one: function( types, selector, data, fn ) {
+		return this.on( types, selector, data, fn, 1 );
+	},
+	off: function( types, selector, fn ) {
+		var handleObj, type;
+		if ( types && types.preventDefault && types.handleObj ) {
+			// ( event )  dispatched jQuery.Event
+			handleObj = types.handleObj;
+			jQuery( types.delegateTarget ).off(
+				handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType,
+				handleObj.selector,
+				handleObj.handler
+			);
+			return this;
+		}
+		if ( typeof types === "object" ) {
+			// ( types-object [, selector] )
+			for ( type in types ) {
+				this.off( type, selector, types[ type ] );
+			}
+			return this;
+		}
+		if ( selector === false || typeof selector === "function" ) {
+			// ( types [, fn] )
+			fn = selector;
+			selector = undefined;
+		}
+		if ( fn === false ) {
+			fn = returnFalse;
+		}
+		return this.each(function() {
+			jQuery.event.remove( this, types, fn, selector );
+		});
+	},
+
+	bind: function( types, data, fn ) {
+		return this.on( types, null, data, fn );
+	},
+	unbind: function( types, fn ) {
+		return this.off( types, null, fn );
+	},
+
+	delegate: function( selector, types, data, fn ) {
+		return this.on( types, selector, data, fn );
+	},
+	undelegate: function( selector, types, fn ) {
+		// ( namespace ) or ( selector, types [, fn] )
+		return arguments.length === 1 ? this.off( selector, "**" ) : this.off( types, selector || "**", fn );
+	},
+
+	trigger: function( type, data ) {
+		return this.each(function() {
+			jQuery.event.trigger( type, data, this );
+		});
+	},
+	triggerHandler: function( type, data ) {
+		var elem = this[0];
+		if ( elem ) {
+			return jQuery.event.trigger( type, data, elem, true );
+		}
+	},
+
+	hover: function( fnOver, fnOut ) {
+		return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
+	}
+});
+
+jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
+	"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
+	"change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) {
+
+	// Handle event binding
+	jQuery.fn[ name ] = function( data, fn ) {
+		return arguments.length > 0 ?
+			this.on( name, null, data, fn ) :
+			this.trigger( name );
+	};
+
+	if ( rkeyEvent.test( name ) ) {
+		jQuery.event.fixHooks[ name ] = jQuery.event.keyHooks;
+	}
+
+	if ( rmouseEvent.test( name ) ) {
+		jQuery.event.fixHooks[ name ] = jQuery.event.mouseHooks;
+	}
+});
+/*!
+ * Sizzle CSS Selector Engine
+ * Copyright 2012 jQuery Foundation and other contributors
+ * Released under the MIT license
+ * http://sizzlejs.com/
+ */
+(function( window, undefined ) {
+
+var i,
+	cachedruns,
+	Expr,
+	getText,
+	isXML,
+	compile,
+	hasDuplicate,
+	outermostContext,
+
+	// Local document vars
+	setDocument,
+	document,
+	docElem,
+	documentIsXML,
+	rbuggyQSA,
+	rbuggyMatches,
+	matches,
+	contains,
+	sortOrder,
+
+	// Instance-specific data
+	expando = "sizzle" + -(new Date()),
+	preferredDoc = window.document,
+	support = {},
+	dirruns = 0,
+	done = 0,
+	classCache = createCache(),
+	tokenCache = createCache(),
+	compilerCache = createCache(),
+
+	// General-purpose constants
+	strundefined = typeof undefined,
+	MAX_NEGATIVE = 1 << 31,
+
+	// Array methods
+	arr = [],
+	pop = arr.pop,
+	push = arr.push,
+	slice = arr.slice,
+	// Use a stripped-down indexOf if we can't use a native one
+	indexOf = arr.indexOf || function( elem ) {
+		var i = 0,
+			len = this.length;
+		for ( ; i < len; i++ ) {
+			if ( this[i] === elem ) {
+				return i;
+			}
+		}
+		return -1;
+	},
+
+
+	// Regular expressions
+
+	// Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace
+	whitespace = "[\\x20\\t\\r\\n\\f]",
+	// http://www.w3.org/TR/css3-syntax/#characters
+	characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",
+
+	// Loosely modeled on CSS identifier characters
+	// An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors
+	// Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
+	identifier = characterEncoding.replace( "w", "w#" ),
+
+	// Acceptable operators http://www.w3.org/TR/selectors/#attribute-selectors
+	operators = "([*^$|!~]?=)",
+	attributes = "\\[" + whitespace + "*(" + characterEncoding + ")" + whitespace +
+		"*(?:" + operators + whitespace + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + identifier + ")|)|)" + whitespace + "*\\]",
+
+	// Prefer arguments quoted,
+	//   then not containing pseudos/brackets,
+	//   then attribute selectors/non-parenthetical expressions,
+	//   then anything else
+	// These preferences are here to reduce the number of selectors
+	//   needing tokenize in the PSEUDO preFilter
+	pseudos = ":(" + characterEncoding + ")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|" + attributes.replace( 3, 8 ) + ")*)|.*)\\)|)",
+
+	// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
+	rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
+
+	rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
+	rcombinators = new RegExp( "^" + whitespace + "*([\\x20\\t\\r\\n\\f>+~])" + whitespace + "*" ),
+	rpseudo = new RegExp( pseudos ),
+	ridentifier = new RegExp( "^" + identifier + "$" ),
+
+	matchExpr = {
+		"ID": new RegExp( "^#(" + characterEncoding + ")" ),
+		"CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ),
+		"NAME": new RegExp( "^\\[name=['\"]?(" + characterEncoding + ")['\"]?\\]" ),
+		"TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ),
+		"ATTR": new RegExp( "^" + attributes ),
+		"PSEUDO": new RegExp( "^" + pseudos ),
+		"CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
+			"*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
+			"*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
+		// For use in libraries implementing .is()
+		// We use this for POS matching in `select`
+		"needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
+			whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
+	},
+
+	rsibling = /[\x20\t\r\n\f]*[+~]/,
+
+	rnative = /\{\s*\[native code\]\s*\}/,
+
+	// Easily-parseable/retrievable ID or TAG or CLASS selectors
+	rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
+
+	rinputs = /^(?:input|select|textarea|button)$/i,
+	rheader = /^h\d$/i,
+
+	rescape = /'|\\/g,
+	rattributeQuotes = /\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,
+
+	// CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
+	runescape = /\\([\da-fA-F]{1,6}[\x20\t\r\n\f]?|.)/g,
+	funescape = function( _, escaped ) {
+		var high = "0x" + escaped - 0x10000;
+		// NaN means non-codepoint
+		return high !== high ?
+			escaped :
+			// BMP codepoint
+			high < 0 ?
+				String.fromCharCode( high + 0x10000 ) :
+				// Supplemental Plane codepoint (surrogate pair)
+				String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
+	};
+
+// Use a stripped-down slice if we can't use a native one
+try {
+	slice.call( docElem.childNodes, 0 )[0].nodeType;
+} catch ( e ) {
+	slice = function( i ) {
+		var elem,
+			results = [];
+		for ( ; (elem = this[i]); i++ ) {
+			results.push( elem );
+		}
+		return results;
+	};
+}
+
+/**
+ * For feature detection
+ * @param {Function} fn The function to test for native support
+ */
+function isNative( fn ) {
+	return rnative.test( fn + "" );
+}
+
+/**
+ * Create key-value caches of limited size
+ * @returns {Function(string, Object)} Returns the Object data after storing it on itself with
+ *	property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
+ *	deleting the oldest entry
+ */
+function createCache() {
+	var cache,
+		keys = [];
+
+	return (cache = function( key, value ) {
+		// Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
+		if ( keys.push( key += " " ) > Expr.cacheLength ) {
+			// Only keep the most recent entries
+			delete cache[ keys.shift() ];
+		}
+		return (cache[ key ] = value);
+	});
+}
+
+/**
+ * Mark a function for special use by Sizzle
+ * @param {Function} fn The function to mark
+ */
+function markFunction( fn ) {
+	fn[ expando ] = true;
+	return fn;
+}
+
+/**
+ * Support testing using an element
+ * @param {Function} fn Passed the created div and expects a boolean result
+ */
+function assert( fn ) {
+	var div = document.createElement("div");
+
+	try {
+		return fn( div );
+	} catch (e) {
+		return false;
+	} finally {
+		// release memory in IE
+		div = null;
+	}
+}
+
+function Sizzle( selector, context, results, seed ) {
+	var match, elem, m, nodeType,
+		// QSA vars
+		i, groups, old, nid, newContext, newSelector;
+
+	if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
+		setDocument( context );
+	}
+
+	context = context || document;
+	results = results || [];
+
+	if ( !selector || typeof selector !== "string" ) {
+		return results;
+	}
+
+	if ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) {
+		return [];
+	}
+
+	if ( !documentIsXML && !seed ) {
+
+		// Shortcuts
+		if ( (match = rquickExpr.exec( selector )) ) {
+			// Speed-up: Sizzle("#ID")
+			if ( (m = match[1]) ) {
+				if ( nodeType === 9 ) {
+					elem = context.getElementById( m );
+					// Check parentNode to catch when Blackberry 4.6 returns
+					// nodes that are no longer in the document #6963
+					if ( elem && elem.parentNode ) {
+						// Handle the case where IE, Opera, and Webkit return items
+						// by name instead of ID
+						if ( elem.id === m ) {
+							results.push( elem );
+							return results;
+						}
+					} else {
+						return results;
+					}
+				} else {
+					// Context is not a document
+					if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) &&
+						contains( context, elem ) && elem.id === m ) {
+						results.push( elem );
+						return results;
+					}
+				}
+
+			// Speed-up: Sizzle("TAG")
+			} else if ( match[2] ) {
+				push.apply( results, slice.call(context.getElementsByTagName( selector ), 0) );
+				return results;
+
+			// Speed-up: Sizzle(".CLASS")
+			} else if ( (m = match[3]) && support.getByClassName && context.getElementsByClassName ) {
+				push.apply( results, slice.call(context.getElementsByClassName( m ), 0) );
+				return results;
+			}
+		}
+
+		// QSA path
+		if ( support.qsa && !rbuggyQSA.test(selector) ) {
+			old = true;
+			nid = expando;
+			newContext = context;
+			newSelector = nodeType === 9 && selector;
+
+			// qSA works strangely on Element-rooted queries
+			// We can work around this by specifying an extra ID on the root
+			// and working up from there (Thanks to Andrew Dupont for the technique)
+			// IE 8 doesn't work on object elements
+			if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
+				groups = tokenize( selector );
+
+				if ( (old = context.getAttribute("id")) ) {
+					nid = old.replace( rescape, "\\$&" );
+				} else {
+					context.setAttribute( "id", nid );
+				}
+				nid = "[id='" + nid + "'] ";
+
+				i = groups.length;
+				while ( i-- ) {
+					groups[i] = nid + toSelector( groups[i] );
+				}
+				newContext = rsibling.test( selector ) && context.parentNode || context;
+				newSelector = groups.join(",");
+			}
+
+			if ( newSelector ) {
+				try {
+					push.apply( results, slice.call( newContext.querySelectorAll(
+						newSelector
+					), 0 ) );
+					return results;
+				} catch(qsaError) {
+				} finally {
+					if ( !old ) {
+						context.removeAttribute("id");
+					}
+				}
+			}
+		}
+	}
+
+	// All others
+	return select( selector.replace( rtrim, "$1" ), context, results, seed );
+}
+
+/**
+ * Detect xml
+ * @param {Element|Object} elem An element or a document
+ */
+isXML = Sizzle.isXML = function( elem ) {
+	// documentElement is verified for cases where it doesn't yet exist
+	// (such as loading iframes in IE - #4833)
+	var documentElement = elem && (elem.ownerDocument || elem).documentElement;
+	return documentElement ? documentElement.nodeName !== "HTML" : false;
+};
+
+/**
+ * Sets document-related variables once based on the current document
+ * @param {Element|Object} [doc] An element or document object to use to set the document
+ * @returns {Object} Returns the current document
+ */
+setDocument = Sizzle.setDocument = function( node ) {
+	var doc = node ? node.ownerDocument || node : preferredDoc;
+
+	// If no document and documentElement is available, return
+	if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
+		return document;
+	}
+
+	// Set our document
+	document = doc;
+	docElem = doc.documentElement;
+
+	// Support tests
+	documentIsXML = isXML( doc );
+
+	// Check if getElementsByTagName("*") returns only elements
+	support.tagNameNoComments = assert(function( div ) {
+		div.appendChild( doc.createComment("") );
+		return !div.getElementsByTagName("*").length;
+	});
+
+	// Check if attributes should be retrieved by attribute nodes
+	support.attributes = assert(function( div ) {
+		div.innerHTML = "<select></select>";
+		var type = typeof div.lastChild.getAttribute("multiple");
+		// IE8 returns a string for some attributes even when not present
+		return type !== "boolean" && type !== "string";
+	});
+
+	// Check if getElementsByClassName can be trusted
+	support.getByClassName = assert(function( div ) {
+		// Opera can't find a second classname (in 9.6)
+		div.innerHTML = "<div class='hidden e'></div><div class='hidden'></div>";
+		if ( !div.getElementsByClassName || !div.getElementsByClassName("e").length ) {
+			return false;
+		}
+
+		// Safari 3.2 caches class attributes and doesn't catch changes
+		div.lastChild.className = "e";
+		return div.getElementsByClassName("e").length === 2;
+	});
+
+	// Check if getElementById returns elements by name
+	// Check if getElementsByName privileges form controls or returns elements by ID
+	support.getByName = assert(function( div ) {
+		// Inject content
+		div.id = expando + 0;
+		div.innerHTML = "<a name='" + expando + "'></a><div name='" + expando + "'></div>";
+		docElem.insertBefore( div, docElem.firstChild );
+
+		// Test
+		var pass = doc.getElementsByName &&
+			// buggy browsers will return fewer than the correct 2
+			doc.getElementsByName( expando ).length === 2 +
+			// buggy browsers will return more than the correct 0
+			doc.getElementsByName( expando + 0 ).length;
+		support.getIdNotName = !doc.getElementById( expando );
+
+		// Cleanup
+		docElem.removeChild( div );
+
+		return pass;
+	});
+
+	// IE6/7 return modified attributes
+	Expr.attrHandle = assert(function( div ) {
+		div.innerHTML = "<a href='#'></a>";
+		return div.firstChild && typeof div.firstChild.getAttribute !== strundefined &&
+			div.firstChild.getAttribute("href") === "#";
+	}) ?
+		{} :
+		{
+			"href": function( elem ) {
+				return elem.getAttribute( "href", 2 );
+			},
+			"type": function( elem ) {
+				return elem.getAttribute("type");
+			}
+		};
+
+	// ID find and filter
+	if ( support.getIdNotName ) {
+		Expr.find["ID"] = function( id, context ) {
+			if ( typeof context.getElementById !== strundefined && !documentIsXML ) {
+				var m = context.getElementById( id );
+				// Check parentNode to catch when Blackberry 4.6 returns
+				// nodes that are no longer in the document #6963
+				return m && m.parentNode ? [m] : [];
+			}
+		};
+		Expr.filter["ID"] = function( id ) {
+			var attrId = id.replace( runescape, funescape );
+			return function( elem ) {
+				return elem.getAttribute("id") === attrId;
+			};
+		};
+	} else {
+		Expr.find["ID"] = function( id, context ) {
+			if ( typeof context.getElementById !== strundefined && !documentIsXML ) {
+				var m = context.getElementById( id );
+
+				return m ?
+					m.id === id || typeof m.getAttributeNode !== strundefined && m.getAttributeNode("id").value === id ?
+						[m] :
+						undefined :
+					[];
+			}
+		};
+		Expr.filter["ID"] =  function( id ) {
+			var attrId = id.replace( runescape, funescape );
+			return function( elem ) {
+				var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id");
+				return node && node.value === attrId;
+			};
+		};
+	}
+
+	// Tag
+	Expr.find["TAG"] = support.tagNameNoComments ?
+		function( tag, context ) {
+			if ( typeof context.getElementsByTagName !== strundefined ) {
+				return context.getElementsByTagName( tag );
+			}
+		} :
+		function( tag, context ) {
+			var elem,
+				tmp = [],
+				i = 0,
+				results = context.getElementsByTagName( tag );
+
+			// Filter out possible comments
+			if ( tag === "*" ) {
+				for ( ; (elem = results[i]); i++ ) {
+					if ( elem.nodeType === 1 ) {
+						tmp.push( elem );
+					}
+				}
+
+				return tmp;
+			}
+			return results;
+		};
+
+	// Name
+	Expr.find["NAME"] = support.getByName && function( tag, context ) {
+		if ( typeof context.getElementsByName !== strundefined ) {
+			return context.getElementsByName( name );
+		}
+	};
+
+	// Class
+	Expr.find["CLASS"] = support.getByClassName && function( className, context ) {
+		if ( typeof context.getElementsByClassName !== strundefined && !documentIsXML ) {
+			return context.getElementsByClassName( className );
+		}
+	};
+
+	// QSA and matchesSelector support
+
+	// matchesSelector(:active) reports false when true (IE9/Opera 11.5)
+	rbuggyMatches = [];
+
+	// qSa(:focus) reports false when true (Chrome 21),
+	// no need to also add to buggyMatches since matches checks buggyQSA
+	// A support test would require too much code (would include document ready)
+	rbuggyQSA = [ ":focus" ];
+
+	if ( (support.qsa = isNative(doc.querySelectorAll)) ) {
+		// Build QSA regex
+		// Regex strategy adopted from Diego Perini
+		assert(function( div ) {
+			// Select is set to empty string on purpose
+			// This is to test IE's treatment of not explictly
+			// setting a boolean content attribute,
+			// since its presence should be enough
+			// http://bugs.jquery.com/ticket/12359
+			div.innerHTML = "<select><option selected=''></option></select>";
+
+			// IE8 - Some boolean attributes are not treated correctly
+			if ( !div.querySelectorAll("[selected]").length ) {
+				rbuggyQSA.push( "\\[" + whitespace + "*(?:checked|disabled|ismap|multiple|readonly|selected|value)" );
+			}
+
+			// Webkit/Opera - :checked should return selected option elements
+			// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
+			// IE8 throws error here and will not see later tests
+			if ( !div.querySelectorAll(":checked").length ) {
+				rbuggyQSA.push(":checked");
+			}
+		});
+
+		assert(function( div ) {
+
+			// Opera 10-12/IE8 - ^= $= *= and empty values
+			// Should not select anything
+			div.innerHTML = "<input type='hidden' i=''/>";
+			if ( div.querySelectorAll("[i^='']").length ) {
+				rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:\"\"|'')" );
+			}
+
+			// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
+			// IE8 throws error here and will not see later tests
+			if ( !div.querySelectorAll(":enabled").length ) {
+				rbuggyQSA.push( ":enabled", ":disabled" );
+			}
+
+			// Opera 10-11 does not throw on post-comma invalid pseudos
+			div.querySelectorAll("*,:x");
+			rbuggyQSA.push(",.*:");
+		});
+	}
+
+	if ( (support.matchesSelector = isNative( (matches = docElem.matchesSelector ||
+		docElem.mozMatchesSelector ||
+		docElem.webkitMatchesSelector ||
+		docElem.oMatchesSelector ||
+		docElem.msMatchesSelector) )) ) {
+
+		assert(function( div ) {
+			// Check to see if it's possible to do matchesSelector
+			// on a disconnected node (IE 9)
+			support.disconnectedMatch = matches.call( div, "div" );
+
+			// This should fail with an exception
+			// Gecko does not error, returns false instead
+			matches.call( div, "[s!='']:x" );
+			rbuggyMatches.push( "!=", pseudos );
+		});
+	}
+
+	rbuggyQSA = new RegExp( rbuggyQSA.join("|") );
+	rbuggyMatches = new RegExp( rbuggyMatches.join("|") );
+
+	// Element contains another
+	// Purposefully does not implement inclusive descendent
+	// As in, an element does not contain itself
+	contains = isNative(docElem.contains) || docElem.compareDocumentPosition ?
+		function( a, b ) {
+			var adown = a.nodeType === 9 ? a.documentElement : a,
+				bup = b && b.parentNode;
+			return a === bup || !!( bup && bup.nodeType === 1 && (
+				adown.contains ?
+					adown.contains( bup ) :
+					a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
+			));
+		} :
+		function( a, b ) {
+			if ( b ) {
+				while ( (b = b.parentNode) ) {
+					if ( b === a ) {
+						return true;
+					}
+				}
+			}
+			return false;
+		};
+
+	// Document order sorting
+	sortOrder = docElem.compareDocumentPosition ?
+	function( a, b ) {
+		var compare;
+
+		if ( a === b ) {
+			hasDuplicate = true;
+			return 0;
+		}
+
+		if ( (compare = b.compareDocumentPosition && a.compareDocumentPosition && a.compareDocumentPosition( b )) ) {
+			if ( compare & 1 || a.parentNode && a.parentNode.nodeType === 11 ) {
+				if ( a === doc || contains( preferredDoc, a ) ) {
+					return -1;
+				}
+				if ( b === doc || contains( preferredDoc, b ) ) {
+					return 1;
+				}
+				return 0;
+			}
+			return compare & 4 ? -1 : 1;
+		}
+
+		return a.compareDocumentPosition ? -1 : 1;
+	} :
+	function( a, b ) {
+		var cur,
+			i = 0,
+			aup = a.parentNode,
+			bup = b.parentNode,
+			ap = [ a ],
+			bp = [ b ];
+
+		// The nodes are identical, we can exit early
+		if ( a === b ) {
+			hasDuplicate = true;
+			return 0;
+
+		// Fallback to using sourceIndex (in IE) if it's available on both nodes
+		} else if ( a.sourceIndex && b.sourceIndex ) {
+			return ( ~b.sourceIndex || MAX_NEGATIVE ) - ( contains( preferredDoc, a ) && ~a.sourceIndex || MAX_NEGATIVE );
+
+		// Parentless nodes are either documents or disconnected
+		} else if ( !aup || !bup ) {
+			return a === doc ? -1 :
+				b === doc ? 1 :
+				aup ? -1 :
+				bup ? 1 :
+				0;
+
+		// If the nodes are siblings, we can do a quick check
+		} else if ( aup === bup ) {
+			return siblingCheck( a, b );
+		}
+
+		// Otherwise we need full lists of their ancestors for comparison
+		cur = a;
+		while ( (cur = cur.parentNode) ) {
+			ap.unshift( cur );
+		}
+		cur = b;
+		while ( (cur = cur.parentNode) ) {
+			bp.unshift( cur );
+		}
+
+		// Walk down the tree looking for a discrepancy
+		while ( ap[i] === bp[i] ) {
+			i++;
+		}
+
+		return i ?
+			// Do a sibling check if the nodes have a common ancestor
+			siblingCheck( ap[i], bp[i] ) :
+
+			// Otherwise nodes in our document sort first
+			ap[i] === preferredDoc ? -1 :
+			bp[i] === preferredDoc ? 1 :
+			0;
+	};
+
+	// Always assume the presence of duplicates if sort doesn't
+	// pass them to our comparison function (as in Google Chrome).
+	hasDuplicate = false;
+	[0, 0].sort( sortOrder );
+	support.detectDuplicates = hasDuplicate;
+
+	return document;
+};
+
+Sizzle.matches = function( expr, elements ) {
+	return Sizzle( expr, null, null, elements );
+};
+
+Sizzle.matchesSelector = function( elem, expr ) {
+	// Set document vars if needed
+	if ( ( elem.ownerDocument || elem ) !== document ) {
+		setDocument( elem );
+	}
+
+	// Make sure that attribute selectors are quoted
+	expr = expr.replace( rattributeQuotes, "='$1']" );
+
+	// rbuggyQSA always contains :focus, so no need for an existence check
+	if ( support.matchesSelector && !documentIsXML && (!rbuggyMatches || !rbuggyMatches.test(expr)) && !rbuggyQSA.test(expr) ) {
+		try {
+			var ret = matches.call( elem, expr );
+
+			// IE 9's matchesSelector returns false on disconnected nodes
+			if ( ret || support.disconnectedMatch ||
+					// As well, disconnected nodes are said to be in a document
+					// fragment in IE 9
+					elem.document && elem.document.nodeType !== 11 ) {
+				return ret;
+			}
+		} catch(e) {}
+	}
+
+	return Sizzle( expr, document, null, [elem] ).length > 0;
+};
+
+Sizzle.contains = function( context, elem ) {
+	// Set document vars if needed
+	if ( ( context.ownerDocument || context ) !== document ) {
+		setDocument( context );
+	}
+	return contains( context, elem );
+};
+
+Sizzle.attr = function( elem, name ) {
+	var val;
+
+	// Set document vars if needed
+	if ( ( elem.ownerDocument || elem ) !== document ) {
+		setDocument( elem );
+	}
+
+	if ( !documentIsXML ) {
+		name = name.toLowerCase();
+	}
+	if ( (val = Expr.attrHandle[ name ]) ) {
+		return val( elem );
+	}
+	if ( documentIsXML || support.attributes ) {
+		return elem.getAttribute( name );
+	}
+	return ( (val = elem.getAttributeNode( name )) || elem.getAttribute( name ) ) && elem[ name ] === true ?
+		name :
+		val && val.specified ? val.value : null;
+};
+
+Sizzle.error = function( msg ) {
+	throw new Error( "Syntax error, unrecognized expression: " + msg );
+};
+
+// Document sorting and removing duplicates
+Sizzle.uniqueSort = function( results ) {
+	var elem,
+		duplicates = [],
+		i = 1,
+		j = 0;
+
+	// Unless we *know* we can detect duplicates, assume their presence
+	hasDuplicate = !support.detectDuplicates;
+	results.sort( sortOrder );
+
+	if ( hasDuplicate ) {
+		for ( ; (elem = results[i]); i++ ) {
+			if ( elem === results[ i - 1 ] ) {
+				j = duplicates.push( i );
+			}
+		}
+		while ( j-- ) {
+			results.splice( duplicates[ j ], 1 );
+		}
+	}
+
+	return results;
+};
+
+function siblingCheck( a, b ) {
+	var cur = a && b && a.nextSibling;
+
+	for ( ; cur; cur = cur.nextSibling ) {
+		if ( cur === b ) {
+			return -1;
+		}
+	}
+
+	return a ? 1 : -1;
+}
+
+// Returns a function to use in pseudos for input types
+function createInputPseudo( type ) {
+	return function( elem ) {
+		var name = elem.nodeName.toLowerCase();
+		return name === "input" && elem.type === type;
+	};
+}
+
+// Returns a function to use in pseudos for buttons
+function createButtonPseudo( type ) {
+	return function( elem ) {
+		var name = elem.nodeName.toLowerCase();
+		return (name === "input" || name === "button") && elem.type === type;
+	};
+}
+
+// Returns a function to use in pseudos for positionals
+function createPositionalPseudo( fn ) {
+	return markFunction(function( argument ) {
+		argument = +argument;
+		return markFunction(function( seed, matches ) {
+			var j,
+				matchIndexes = fn( [], seed.length, argument ),
+				i = matchIndexes.length;
+
+			// Match elements found at the specified indexes
+			while ( i-- ) {
+				if ( seed[ (j = matchIndexes[i]) ] ) {
+					seed[j] = !(matches[j] = seed[j]);
+				}
+			}
+		});
+	});
+}
+
+/**
+ * Utility function for retrieving the text value of an array of DOM nodes
+ * @param {Array|Element} elem
+ */
+getText = Sizzle.getText = function( elem ) {
+	var node,
+		ret = "",
+		i = 0,
+		nodeType = elem.nodeType;
+
+	if ( !nodeType ) {
+		// If no nodeType, this is expected to be an array
+		for ( ; (node = elem[i]); i++ ) {
+			// Do not traverse comment nodes
+			ret += getText( node );
+		}
+	} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
+		// Use textContent for elements
+		// innerText usage removed for consistency of new lines (see #11153)
+		if ( typeof elem.textContent === "string" ) {
+			return elem.textContent;
+		} else {
+			// Traverse its children
+			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
+				ret += getText( elem );
+			}
+		}
+	} else if ( nodeType === 3 || nodeType === 4 ) {
+		return elem.nodeValue;
+	}
+	// Do not include comment or processing instruction nodes
+
+	return ret;
+};
+
+Expr = Sizzle.selectors = {
+
+	// Can be adjusted by the user
+	cacheLength: 50,
+
+	createPseudo: markFunction,
+
+	match: matchExpr,
+
+	find: {},
+
+	relative: {
+		">": { dir: "parentNode", first: true },
+		" ": { dir: "parentNode" },
+		"+": { dir: "previousSibling", first: true },
+		"~": { dir: "previousSibling" }
+	},
+
+	preFilter: {
+		"ATTR": function( match ) {
+			match[1] = match[1].replace( runescape, funescape );
+
+			// Move the given value to match[3] whether quoted or unquoted
+			match[3] = ( match[4] || match[5] || "" ).replace( runescape, funescape );
+
+			if ( match[2] === "~=" ) {
+				match[3] = " " + match[3] + " ";
+			}
+
+			return match.slice( 0, 4 );
+		},
+
+		"CHILD": function( match ) {
+			/* matches from matchExpr["CHILD"]
+				1 type (only|nth|...)
+				2 what (child|of-type)
+				3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
+				4 xn-component of xn+y argument ([+-]?\d*n|)
+				5 sign of xn-component
+				6 x of xn-component
+				7 sign of y-component
+				8 y of y-component
+			*/
+			match[1] = match[1].toLowerCase();
+
+			if ( match[1].slice( 0, 3 ) === "nth" ) {
+				// nth-* requires argument
+				if ( !match[3] ) {
+					Sizzle.error( match[0] );
+				}
+
+				// numeric x and y parameters for Expr.filter.CHILD
+				// remember that false/true cast respectively to 0/1
+				match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );
+				match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );
+
+			// other types prohibit arguments
+			} else if ( match[3] ) {
+				Sizzle.error( match[0] );
+			}
+
+			return match;
+		},
+
+		"PSEUDO": function( match ) {
+			var excess,
+				unquoted = !match[5] && match[2];
+
+			if ( matchExpr["CHILD"].test( match[0] ) ) {
+				return null;
+			}
+
+			// Accept quoted arguments as-is
+			if ( match[4] ) {
+				match[2] = match[4];
+
+			// Strip excess characters from unquoted arguments
+			} else if ( unquoted && rpseudo.test( unquoted ) &&
+				// Get excess from tokenize (recursively)
+				(excess = tokenize( unquoted, true )) &&
+				// advance to the next closing parenthesis
+				(excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {
+
+				// excess is a negative index
+				match[0] = match[0].slice( 0, excess );
+				match[2] = unquoted.slice( 0, excess );
+			}
+
+			// Return only captures needed by the pseudo filter method (type and argument)
+			return match.slice( 0, 3 );
+		}
+	},
+
+	filter: {
+
+		"TAG": function( nodeName ) {
+			if ( nodeName === "*" ) {
+				return function() { return true; };
+			}
+
+			nodeName = nodeName.replace( runescape, funescape ).toLowerCase();
+			return function( elem ) {
+				return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
+			};
+		},
+
+		"CLASS": function( className ) {
+			var pattern = classCache[ className + " " ];
+
+			return pattern ||
+				(pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
+				classCache( className, function( elem ) {
+					return pattern.test( elem.className || (typeof elem.getAttribute !== strundefined && elem.getAttribute("class")) || "" );
+				});
+		},
+
+		"ATTR": function( name, operator, check ) {
+			return function( elem ) {
+				var result = Sizzle.attr( elem, name );
+
+				if ( result == null ) {
+					return operator === "!=";
+				}
+				if ( !operator ) {
+					return true;
+				}
+
+				result += "";
+
+				return operator === "=" ? result === check :
+					operator === "!=" ? result !== check :
+					operator === "^=" ? check && result.indexOf( check ) === 0 :
+					operator === "*=" ? check && result.indexOf( check ) > -1 :
+					operator === "$=" ? check && result.substr( result.length - check.length ) === check :
+					operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 :
+					operator === "|=" ? result === check || result.substr( 0, check.length + 1 ) === check + "-" :
+					false;
+			};
+		},
+
+		"CHILD": function( type, what, argument, first, last ) {
+			var simple = type.slice( 0, 3 ) !== "nth",
+				forward = type.slice( -4 ) !== "last",
+				ofType = what === "of-type";
+
+			return first === 1 && last === 0 ?
+
+				// Shortcut for :nth-*(n)
+				function( elem ) {
+					return !!elem.parentNode;
+				} :
+
+				function( elem, context, xml ) {
+					var cache, outerCache, node, diff, nodeIndex, start,
+						dir = simple !== forward ? "nextSibling" : "previousSibling",
+						parent = elem.parentNode,
+						name = ofType && elem.nodeName.toLowerCase(),
+						useCache = !xml && !ofType;
+
+					if ( parent ) {
+
+						// :(first|last|only)-(child|of-type)
+						if ( simple ) {
+							while ( dir ) {
+								node = elem;
+								while ( (node = node[ dir ]) ) {
+									if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) {
+										return false;
+									}
+								}
+								// Reverse direction for :only-* (if we haven't yet done so)
+								start = dir = type === "only" && !start && "nextSibling";
+							}
+							return true;
+						}
+
+						start = [ forward ? parent.firstChild : parent.lastChild ];
+
+						// non-xml :nth-child(...) stores cache data on `parent`
+						if ( forward && useCache ) {
+							// Seek `elem` from a previously-cached index
+							outerCache = parent[ expando ] || (parent[ expando ] = {});
+							cache = outerCache[ type ] || [];
+							nodeIndex = cache[0] === dirruns && cache[1];
+							diff = cache[0] === dirruns && cache[2];
+							node = nodeIndex && parent.childNodes[ nodeIndex ];
+
+							while ( (node = ++nodeIndex && node && node[ dir ] ||
+
+								// Fallback to seeking `elem` from the start
+								(diff = nodeIndex = 0) || start.pop()) ) {
+
+								// When found, cache indexes on `parent` and break
+								if ( node.nodeType === 1 && ++diff && node === elem ) {
+									outerCache[ type ] = [ dirruns, nodeIndex, diff ];
+									break;
+								}
+							}
+
+						// Use previously-cached element index if available
+						} else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) {
+							diff = cache[1];
+
+						// xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...)
+						} else {
+							// Use the same loop as above to seek `elem` from the start
+							while ( (node = ++nodeIndex && node && node[ dir ] ||
+								(diff = nodeIndex = 0) || start.pop()) ) {
+
+								if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) {
+									// Cache the index of each encountered element
+									if ( useCache ) {
+										(node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ];
+									}
+
+									if ( node === elem ) {
+										break;
+									}
+								}
+							}
+						}
+
+						// Incorporate the offset, then check against cycle size
+						diff -= last;
+						return diff === first || ( diff % first === 0 && diff / first >= 0 );
+					}
+				};
+		},
+
+		"PSEUDO": function( pseudo, argument ) {
+			// pseudo-class names are case-insensitive
+			// http://www.w3.org/TR/selectors/#pseudo-classes
+			// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
+			// Remember that setFilters inherits from pseudos
+			var args,
+				fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
+					Sizzle.error( "unsupported pseudo: " + pseudo );
+
+			// The user may use createPseudo to indicate that
+			// arguments are needed to create the filter function
+			// just as Sizzle does
+			if ( fn[ expando ] ) {
+				return fn( argument );
+			}
+
+			// But maintain support for old signatures
+			if ( fn.length > 1 ) {
+				args = [ pseudo, pseudo, "", argument ];
+				return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
+					markFunction(function( seed, matches ) {
+						var idx,
+							matched = fn( seed, argument ),
+							i = matched.length;
+						while ( i-- ) {
+							idx = indexOf.call( seed, matched[i] );
+							seed[ idx ] = !( matches[ idx ] = matched[i] );
+						}
+					}) :
+					function( elem ) {
+						return fn( elem, 0, args );
+					};
+			}
+
+			return fn;
+		}
+	},
+
+	pseudos: {
+		// Potentially complex pseudos
+		"not": markFunction(function( selector ) {
+			// Trim the selector passed to compile
+			// to avoid treating leading and trailing
+			// spaces as combinators
+			var input = [],
+				results = [],
+				matcher = compile( selector.replace( rtrim, "$1" ) );
+
+			return matcher[ expando ] ?
+				markFunction(function( seed, matches, context, xml ) {
+					var elem,
+						unmatched = matcher( seed, null, xml, [] ),
+						i = seed.length;
+
+					// Match elements unmatched by `matcher`
+					while ( i-- ) {
+						if ( (elem = unmatched[i]) ) {
+							seed[i] = !(matches[i] = elem);
+						}
+					}
+				}) :
+				function( elem, context, xml ) {
+					input[0] = elem;
+					matcher( input, null, xml, results );
+					return !results.pop();
+				};
+		}),
+
+		"has": markFunction(function( selector ) {
+			return function( elem ) {
+				return Sizzle( selector, elem ).length > 0;
+			};
+		}),
+
+		"contains": markFunction(function( text ) {
+			return function( elem ) {
+				return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;
+			};
+		}),
+
+		// "Whether an element is represented by a :lang() selector
+		// is based solely on the element's language value
+		// being equal to the identifier C,
+		// or beginning with the identifier C immediately followed by "-".
+		// The matching of C against the element's language value is performed case-insensitively.
+		// The identifier C does not have to be a valid language name."
+		// http://www.w3.org/TR/selectors/#lang-pseudo
+		"lang": markFunction( function( lang ) {
+			// lang value must be a valid identifider
+			if ( !ridentifier.test(lang || "") ) {
+				Sizzle.error( "unsupported lang: " + lang );
+			}
+			lang = lang.replace( runescape, funescape ).toLowerCase();
+			return function( elem ) {
+				var elemLang;
+				do {
+					if ( (elemLang = documentIsXML ?
+						elem.getAttribute("xml:lang") || elem.getAttribute("lang") :
+						elem.lang) ) {
+
+						elemLang = elemLang.toLowerCase();
+						return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
+					}
+				} while ( (elem = elem.parentNode) && elem.nodeType === 1 );
+				return false;
+			};
+		}),
+
+		// Miscellaneous
+		"target": function( elem ) {
+			var hash = window.location && window.location.hash;
+			return hash && hash.slice( 1 ) === elem.id;
+		},
+
+		"root": function( elem ) {
+			return elem === docElem;
+		},
+
+		"focus": function( elem ) {
+			return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
+		},
+
+		// Boolean properties
+		"enabled": function( elem ) {
+			return elem.disabled === false;
+		},
+
+		"disabled": function( elem ) {
+			return elem.disabled === true;
+		},
+
+		"checked": function( elem ) {
+			// In CSS3, :checked should return both checked and selected elements
+			// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
+			var nodeName = elem.nodeName.toLowerCase();
+			return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
+		},
+
+		"selected": function( elem ) {
+			// Accessing this property makes selected-by-default
+			// options in Safari work properly
+			if ( elem.parentNode ) {
+				elem.parentNode.selectedIndex;
+			}
+
+			return elem.selected === true;
+		},
+
+		// Contents
+		"empty": function( elem ) {
+			// http://www.w3.org/TR/selectors/#empty-pseudo
+			// :empty is only affected by element nodes and content nodes(including text(3), cdata(4)),
+			//   not comment, processing instructions, or others
+			// Thanks to Diego Perini for the nodeName shortcut
+			//   Greater than "@" means alpha characters (specifically not starting with "#" or "?")
+			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
+				if ( elem.nodeName > "@" || elem.nodeType === 3 || elem.nodeType === 4 ) {
+					return false;
+				}
+			}
+			return true;
+		},
+
+		"parent": function( elem ) {
+			return !Expr.pseudos["empty"]( elem );
+		},
+
+		// Element/input types
+		"header": function( elem ) {
+			return rheader.test( elem.nodeName );
+		},
+
+		"input": function( elem ) {
+			return rinputs.test( elem.nodeName );
+		},
+
+		"button": function( elem ) {
+			var name = elem.nodeName.toLowerCase();
+			return name === "input" && elem.type === "button" || name === "button";
+		},
+
+		"text": function( elem ) {
+			var attr;
+			// IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc)
+			// use getAttribute instead to test this case
+			return elem.nodeName.toLowerCase() === "input" &&
+				elem.type === "text" &&
+				( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === elem.type );
+		},
+
+		// Position-in-collection
+		"first": createPositionalPseudo(function() {
+			return [ 0 ];
+		}),
+
+		"last": createPositionalPseudo(function( matchIndexes, length ) {
+			return [ length - 1 ];
+		}),
+
+		"eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
+			return [ argument < 0 ? argument + length : argument ];
+		}),
+
+		"even": createPositionalPseudo(function( matchIndexes, length ) {
+			var i = 0;
+			for ( ; i < length; i += 2 ) {
+				matchIndexes.push( i );
+			}
+			return matchIndexes;
+		}),
+
+		"odd": createPositionalPseudo(function( matchIndexes, length ) {
+			var i = 1;
+			for ( ; i < length; i += 2 ) {
+				matchIndexes.push( i );
+			}
+			return matchIndexes;
+		}),
+
+		"lt": createPositionalPseudo(function( matchIndexes, length, argument ) {
+			var i = argument < 0 ? argument + length : argument;
+			for ( ; --i >= 0; ) {
+				matchIndexes.push( i );
+			}
+			return matchIndexes;
+		}),
+
+		"gt": createPositionalPseudo(function( matchIndexes, length, argument ) {
+			var i = argument < 0 ? argument + length : argument;
+			for ( ; ++i < length; ) {
+				matchIndexes.push( i );
+			}
+			return matchIndexes;
+		})
+	}
+};
+
+// Add button/input type pseudos
+for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
+	Expr.pseudos[ i ] = createInputPseudo( i );
+}
+for ( i in { submit: true, reset: true } ) {
+	Expr.pseudos[ i ] = createButtonPseudo( i );
+}
+
+function tokenize( selector, parseOnly ) {
+	var matched, match, tokens, type,
+		soFar, groups, preFilters,
+		cached = tokenCache[ selector + " " ];
+
+	if ( cached ) {
+		return parseOnly ? 0 : cached.slice( 0 );
+	}
+
+	soFar = selector;
+	groups = [];
+	preFilters = Expr.preFilter;
+
+	while ( soFar ) {
+
+		// Comma and first run
+		if ( !matched || (match = rcomma.exec( soFar )) ) {
+			if ( match ) {
+				// Don't consume trailing commas as valid
+				soFar = soFar.slice( match[0].length ) || soFar;
+			}
+			groups.push( tokens = [] );
+		}
+
+		matched = false;
+
+		// Combinators
+		if ( (match = rcombinators.exec( soFar )) ) {
+			matched = match.shift();
+			tokens.push( {
+				value: matched,
+				// Cast descendant combinators to space
+				type: match[0].replace( rtrim, " " )
+			} );
+			soFar = soFar.slice( matched.length );
+		}
+
+		// Filters
+		for ( type in Expr.filter ) {
+			if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
+				(match = preFilters[ type ]( match ))) ) {
+				matched = match.shift();
+				tokens.push( {
+					value: matched,
+					type: type,
+					matches: match
+				} );
+				soFar = soFar.slice( matched.length );
+			}
+		}
+
+		if ( !matched ) {
+			break;
+		}
+	}
+
+	// Return the length of the invalid excess
+	// if we're just parsing
+	// Otherwise, throw an error or return tokens
+	return parseOnly ?
+		soFar.length :
+		soFar ?
+			Sizzle.error( selector ) :
+			// Cache the tokens
+			tokenCache( selector, groups ).slice( 0 );
+}
+
+function toSelector( tokens ) {
+	var i = 0,
+		len = tokens.length,
+		selector = "";
+	for ( ; i < len; i++ ) {
+		selector += tokens[i].value;
+	}
+	return selector;
+}
+
+function addCombinator( matcher, combinator, base ) {
+	var dir = combinator.dir,
+		checkNonElements = base && combinator.dir === "parentNode",
+		doneName = done++;
+
+	return combinator.first ?
+		// Check against closest ancestor/preceding element
+		function( elem, context, xml ) {
+			while ( (elem = elem[ dir ]) ) {
+				if ( elem.nodeType === 1 || checkNonElements ) {
+					return matcher( elem, context, xml );
+				}
+			}
+		} :
+
+		// Check against all ancestor/preceding elements
+		function( elem, context, xml ) {
+			var data, cache, outerCache,
+				dirkey = dirruns + " " + doneName;
+
+			// We can't set arbitrary data on XML nodes, so they don't benefit from dir caching
+			if ( xml ) {
+				while ( (elem = elem[ dir ]) ) {
+					if ( elem.nodeType === 1 || checkNonElements ) {
+						if ( matcher( elem, context, xml ) ) {
+							return true;
+						}
+					}
+				}
+			} else {
+				while ( (elem = elem[ dir ]) ) {
+					if ( elem.nodeType === 1 || checkNonElements ) {
+						outerCache = elem[ expando ] || (elem[ expando ] = {});
+						if ( (cache = outerCache[ dir ]) && cache[0] === dirkey ) {
+							if ( (data = cache[1]) === true || data === cachedruns ) {
+								return data === true;
+							}
+						} else {
+							cache = outerCache[ dir ] = [ dirkey ];
+							cache[1] = matcher( elem, context, xml ) || cachedruns;
+							if ( cache[1] === true ) {
+								return true;
+							}
+						}
+					}
+				}
+			}
+		};
+}
+
+function elementMatcher( matchers ) {
+	return matchers.length > 1 ?
+		function( elem, context, xml ) {
+			var i = matchers.length;
+			while ( i-- ) {
+				if ( !matchers[i]( elem, context, xml ) ) {
+					return false;
+				}
+			}
+			return true;
+		} :
+		matchers[0];
+}
+
+function condense( unmatched, map, filter, context, xml ) {
+	var elem,
+		newUnmatched = [],
+		i = 0,
+		len = unmatched.length,
+		mapped = map != null;
+
+	for ( ; i < len; i++ ) {
+		if ( (elem = unmatched[i]) ) {
+			if ( !filter || filter( elem, context, xml ) ) {
+				newUnmatched.push( elem );
+				if ( mapped ) {
+					map.push( i );
+				}
+			}
+		}
+	}
+
+	return newUnmatched;
+}
+
+function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
+	if ( postFilter && !postFilter[ expando ] ) {
+		postFilter = setMatcher( postFilter );
+	}
+	if ( postFinder && !postFinder[ expando ] ) {
+		postFinder = setMatcher( postFinder, postSelector );
+	}
+	return markFunction(function( seed, results, context, xml ) {
+		var temp, i, elem,
+			preMap = [],
+			postMap = [],
+			preexisting = results.length,
+
+			// Get initial elements from seed or context
+			elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),
+
+			// Prefilter to get matcher input, preserving a map for seed-results synchronization
+			matcherIn = preFilter && ( seed || !selector ) ?
+				condense( elems, preMap, preFilter, context, xml ) :
+				elems,
+
+			matcherOut = matcher ?
+				// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
+				postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
+
+					// ...intermediate processing is necessary
+					[] :
+
+					// ...otherwise use results directly
+					results :
+				matcherIn;
+
+		// Find primary matches
+		if ( matcher ) {
+			matcher( matcherIn, matcherOut, context, xml );
+		}
+
+		// Apply postFilter
+		if ( postFilter ) {
+			temp = condense( matcherOut, postMap );
+			postFilter( temp, [], context, xml );
+
+			// Un-match failing elements by moving them back to matcherIn
+			i = temp.length;
+			while ( i-- ) {
+				if ( (elem = temp[i]) ) {
+					matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);
+				}
+			}
+		}
+
+		if ( seed ) {
+			if ( postFinder || preFilter ) {
+				if ( postFinder ) {
+					// Get the final matcherOut by condensing this intermediate into postFinder contexts
+					temp = [];
+					i = matcherOut.length;
+					while ( i-- ) {
+						if ( (elem = matcherOut[i]) ) {
+							// Restore matcherIn since elem is not yet a final match
+							temp.push( (matcherIn[i] = elem) );
+						}
+					}
+					postFinder( null, (matcherOut = []), temp, xml );
+				}
+
+				// Move matched elements from seed to results to keep them synchronized
+				i = matcherOut.length;
+				while ( i-- ) {
+					if ( (elem = matcherOut[i]) &&
+						(temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) {
+
+						seed[temp] = !(results[temp] = elem);
+					}
+				}
+			}
+
+		// Add elements to results, through postFinder if defined
+		} else {
+			matcherOut = condense(
+				matcherOut === results ?
+					matcherOut.splice( preexisting, matcherOut.length ) :
+					matcherOut
+			);
+			if ( postFinder ) {
+				postFinder( null, results, matcherOut, xml );
+			} else {
+				push.apply( results, matcherOut );
+			}
+		}
+	});
+}
+
+function matcherFromTokens( tokens ) {
+	var checkContext, matcher, j,
+		len = tokens.length,
+		leadingRelative = Expr.relative[ tokens[0].type ],
+		implicitRelative = leadingRelative || Expr.relative[" "],
+		i = leadingRelative ? 1 : 0,
+
+		// The foundational matcher ensures that elements are reachable from top-level context(s)
+		matchContext = addCombinator( function( elem ) {
+			return elem === checkContext;
+		}, implicitRelative, true ),
+		matchAnyContext = addCombinator( function( elem ) {
+			return indexOf.call( checkContext, elem ) > -1;
+		}, implicitRelative, true ),
+		matchers = [ function( elem, context, xml ) {
+			return ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
+				(checkContext = context).nodeType ?
+					matchContext( elem, context, xml ) :
+					matchAnyContext( elem, context, xml ) );
+		} ];
+
+	for ( ; i < len; i++ ) {
+		if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
+			matchers = [ addCombinator(elementMatcher( matchers ), matcher) ];
+		} else {
+			matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );
+
+			// Return special upon seeing a positional matcher
+			if ( matcher[ expando ] ) {
+				// Find the next relative operator (if any) for proper handling
+				j = ++i;
+				for ( ; j < len; j++ ) {
+					if ( Expr.relative[ tokens[j].type ] ) {
+						break;
+					}
+				}
+				return setMatcher(
+					i > 1 && elementMatcher( matchers ),
+					i > 1 && toSelector( tokens.slice( 0, i - 1 ) ).replace( rtrim, "$1" ),
+					matcher,
+					i < j && matcherFromTokens( tokens.slice( i, j ) ),
+					j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
+					j < len && toSelector( tokens )
+				);
+			}
+			matchers.push( matcher );
+		}
+	}
+
+	return elementMatcher( matchers );
+}
+
+function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
+	// A counter to specify which element is currently being matched
+	var matcherCachedRuns = 0,
+		bySet = setMatchers.length > 0,
+		byElement = elementMatchers.length > 0,
+		superMatcher = function( seed, context, xml, results, expandContext ) {
+			var elem, j, matcher,
+				setMatched = [],
+				matchedCount = 0,
+				i = "0",
+				unmatched = seed && [],
+				outermost = expandContext != null,
+				contextBackup = outermostContext,
+				// We must always have either seed elements or context
+				elems = seed || byElement && Expr.find["TAG"]( "*", expandContext && context.parentNode || context ),
+				// Nested matchers should use non-integer dirruns
+				dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.E);
+
+			if ( outermost ) {
+				outermostContext = context !== document && context;
+				cachedruns = matcherCachedRuns;
+			}
+
+			// Add elements passing elementMatchers directly to results
+			for ( ; (elem = elems[i]) != null; i++ ) {
+				if ( byElement && elem ) {
+					for ( j = 0; (matcher = elementMatchers[j]); j++ ) {
+						if ( matcher( elem, context, xml ) ) {
+							results.push( elem );
+							break;
+						}
+					}
+					if ( outermost ) {
+						dirruns = dirrunsUnique;
+						cachedruns = ++matcherCachedRuns;
+					}
+				}
+
+				// Track unmatched elements for set filters
+				if ( bySet ) {
+					// They will have gone through all possible matchers
+					if ( (elem = !matcher && elem) ) {
+						matchedCount--;
+					}
+
+					// Lengthen the array for every element, matched or not
+					if ( seed ) {
+						unmatched.push( elem );
+					}
+				}
+			}
+
+			// Apply set filters to unmatched elements
+			// `i` starts as a string, so matchedCount would equal "00" if there are no elements
+			matchedCount += i;
+			if ( bySet && i !== matchedCount ) {
+				for ( j = 0; (matcher = setMatchers[j]); j++ ) {
+					matcher( unmatched, setMatched, context, xml );
+				}
+
+				if ( seed ) {
+					// Reintegrate element matches to eliminate the need for sorting
+					if ( matchedCount > 0 ) {
+						while ( i-- ) {
+							if ( !(unmatched[i] || setMatched[i]) ) {
+								setMatched[i] = pop.call( results );
+							}
+						}
+					}
+
+					// Discard index placeholder values to get only actual matches
+					setMatched = condense( setMatched );
+				}
+
+				// Add matches to results
+				push.apply( results, setMatched );
+
+				// Seedless set matches succeeding multiple successful matchers stipulate sorting
+				if ( outermost && !seed && setMatched.length > 0 &&
+					( matchedCount + setMatchers.length ) > 1 ) {
+
+					Sizzle.uniqueSort( results );
+				}
+			}
+
+			// Override manipulation of globals by nested matchers
+			if ( outermost ) {
+				dirruns = dirrunsUnique;
+				outermostContext = contextBackup;
+			}
+
+			return unmatched;
+		};
+
+	return bySet ?
+		markFunction( superMatcher ) :
+		superMatcher;
+}
+
+compile = Sizzle.compile = function( selector, group /* Internal Use Only */ ) {
+	var i,
+		setMatchers = [],
+		elementMatchers = [],
+		cached = compilerCache[ selector + " " ];
+
+	if ( !cached ) {
+		// Generate a function of recursive functions that can be used to check each element
+		if ( !group ) {
+			group = tokenize( selector );
+		}
+		i = group.length;
+		while ( i-- ) {
+			cached = matcherFromTokens( group[i] );
+			if ( cached[ expando ] ) {
+				setMatchers.push( cached );
+			} else {
+				elementMatchers.push( cached );
+			}
+		}
+
+		// Cache the compiled function
+		cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
+	}
+	return cached;
+};
+
+function multipleContexts( selector, contexts, results ) {
+	var i = 0,
+		len = contexts.length;
+	for ( ; i < len; i++ ) {
+		Sizzle( selector, contexts[i], results );
+	}
+	return results;
+}
+
+function select( selector, context, results, seed ) {
+	var i, tokens, token, type, find,
+		match = tokenize( selector );
+
+	if ( !seed ) {
+		// Try to minimize operations if there is only one group
+		if ( match.length === 1 ) {
+
+			// Take a shortcut and set the context if the root selector is an ID
+			tokens = match[0] = match[0].slice( 0 );
+			if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
+					context.nodeType === 9 && !documentIsXML &&
+					Expr.relative[ tokens[1].type ] ) {
+
+				context = Expr.find["ID"]( token.matches[0].replace( runescape, funescape ), context )[0];
+				if ( !context ) {
+					return results;
+				}
+
+				selector = selector.slice( tokens.shift().value.length );
+			}
+
+			// Fetch a seed set for right-to-left matching
+			for ( i = matchExpr["needsContext"].test( selector ) ? -1 : tokens.length - 1; i >= 0; i-- ) {
+				token = tokens[i];
+
+				// Abort if we hit a combinator
+				if ( Expr.relative[ (type = token.type) ] ) {
+					break;
+				}
+				if ( (find = Expr.find[ type ]) ) {
+					// Search, expanding context for leading sibling combinators
+					if ( (seed = find(
+						token.matches[0].replace( runescape, funescape ),
+						rsibling.test( tokens[0].type ) && context.parentNode || context
+					)) ) {
+
+						// If seed is empty or no tokens remain, we can return early
+						tokens.splice( i, 1 );
+						selector = seed.length && toSelector( tokens );
+						if ( !selector ) {
+							push.apply( results, slice.call( seed, 0 ) );
+							return results;
+						}
+
+						break;
+					}
+				}
+			}
+		}
+	}
+
+	// Compile and execute a filtering function
+	// Provide `match` to avoid retokenization if we modified the selector above
+	compile( selector, match )(
+		seed,
+		context,
+		documentIsXML,
+		results,
+		rsibling.test( selector )
+	);
+	return results;
+}
+
+// Deprecated
+Expr.pseudos["nth"] = Expr.pseudos["eq"];
+
+// Easy API for creating new setFilters
+function setFilters() {}
+Expr.filters = setFilters.prototype = Expr.pseudos;
+Expr.setFilters = new setFilters();
+
+// Initialize with the default document
+setDocument();
+
+// Override sizzle attribute retrieval
+Sizzle.attr = jQuery.attr;
+jQuery.find = Sizzle;
+jQuery.expr = Sizzle.selectors;
+jQuery.expr[":"] = jQuery.expr.pseudos;
+jQuery.unique = Sizzle.uniqueSort;
+jQuery.text = Sizzle.getText;
+jQuery.isXMLDoc = Sizzle.isXML;
+jQuery.contains = Sizzle.contains;
+
+
+})( window );
+var runtil = /Until$/,
+	rparentsprev = /^(?:parents|prev(?:Until|All))/,
+	isSimple = /^.[^:#\[\.,]*$/,
+	rneedsContext = jQuery.expr.match.needsContext,
+	// methods guaranteed to produce a unique set when starting from a unique set
+	guaranteedUnique = {
+		children: true,
+		contents: true,
+		next: true,
+		prev: true
+	};
+
+jQuery.fn.extend({
+	find: function( selector ) {
+		var i, ret, self;
+
+		if ( typeof selector !== "string" ) {
+			self = this;
+			return this.pushStack( jQuery( selector ).filter(function() {
+				for ( i = 0; i < self.length; i++ ) {
+					if ( jQuery.contains( self[ i ], this ) ) {
+						return true;
+					}
+				}
+			}) );
+		}
+
+		ret = [];
+		for ( i = 0; i < this.length; i++ ) {
+			jQuery.find( selector, this[ i ], ret );
+		}
+
+		// Needed because $( selector, context ) becomes $( context ).find( selector )
+		ret = this.pushStack( jQuery.unique( ret ) );
+		ret.selector = ( this.selector ? this.selector + " " : "" ) + selector;
+		return ret;
+	},
+
+	has: function( target ) {
+		var i,
+			targets = jQuery( target, this ),
+			len = targets.length;
+
+		return this.filter(function() {
+			for ( i = 0; i < len; i++ ) {
+				if ( jQuery.contains( this, targets[i] ) ) {
+					return true;
+				}
+			}
+		});
+	},
+
+	not: function( selector ) {
+		return this.pushStack( winnow(this, selector, false) );
+	},
+
+	filter: function( selector ) {
+		return this.pushStack( winnow(this, selector, true) );
+	},
+
+	is: function( selector ) {
+		return !!selector && (
+			typeof selector === "string" ?
+				// If this is a positional/relative selector, check membership in the returned set
+				// so $("p:first").is("p:last") won't return true for a doc with two "p".
+				rneedsContext.test( selector ) ?
+					jQuery( selector, this.context ).index( this[0] ) >= 0 :
+					jQuery.filter( selector, this ).length > 0 :
+				this.filter( selector ).length > 0 );
+	},
+
+	closest: function( selectors, context ) {
+		var cur,
+			i = 0,
+			l = this.length,
+			ret = [],
+			pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ?
+				jQuery( selectors, context || this.context ) :
+				0;
+
+		for ( ; i < l; i++ ) {
+			cur = this[i];
+
+			while ( cur && cur.ownerDocument && cur !== context && cur.nodeType !== 11 ) {
+				if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) {
+					ret.push( cur );
+					break;
+				}
+				cur = cur.parentNode;
+			}
+		}
+
+		return this.pushStack( ret.length > 1 ? jQuery.unique( ret ) : ret );
+	},
+
+	// Determine the position of an element within
+	// the matched set of elements
+	index: function( elem ) {
+
+		// No argument, return index in parent
+		if ( !elem ) {
+			return ( this[0] && this[0].parentNode ) ? this.first().prevAll().length : -1;
+		}
+
+		// index in selector
+		if ( typeof elem === "string" ) {
+			return jQuery.inArray( this[0], jQuery( elem ) );
+		}
+
+		// Locate the position of the desired element
+		return jQuery.inArray(
+			// If it receives a jQuery object, the first element is used
+			elem.jquery ? elem[0] : elem, this );
+	},
+
+	add: function( selector, context ) {
+		var set = typeof selector === "string" ?
+				jQuery( selector, context ) :
+				jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ),
+			all = jQuery.merge( this.get(), set );
+
+		return this.pushStack( jQuery.unique(all) );
+	},
+
+	addBack: function( selector ) {
+		return this.add( selector == null ?
+			this.prevObject : this.prevObject.filter(selector)
+		);
+	}
+});
+
+jQuery.fn.andSelf = jQuery.fn.addBack;
+
+function sibling( cur, dir ) {
+	do {
+		cur = cur[ dir ];
+	} while ( cur && cur.nodeType !== 1 );
+
+	return cur;
+}
+
+jQuery.each({
+	parent: function( elem ) {
+		var parent = elem.parentNode;
+		return parent && parent.nodeType !== 11 ? parent : null;
+	},
+	parents: function( elem ) {
+		return jQuery.dir( elem, "parentNode" );
+	},
+	parentsUntil: function( elem, i, until ) {
+		return jQuery.dir( elem, "parentNode", until );
+	},
+	next: function( elem ) {
+		return sibling( elem, "nextSibling" );
+	},
+	prev: function( elem ) {
+		return sibling( elem, "previousSibling" );
+	},
+	nextAll: function( elem ) {
+		return jQuery.dir( elem, "nextSibling" );
+	},
+	prevAll: function( elem ) {
+		return jQuery.dir( elem, "previousSibling" );
+	},
+	nextUntil: function( elem, i, until ) {
+		return jQuery.dir( elem, "nextSibling", until );
+	},
+	prevUntil: function( elem, i, until ) {
+		return jQuery.dir( elem, "previousSibling", until );
+	},
+	siblings: function( elem ) {
+		return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem );
+	},
+	children: function( elem ) {
+		return jQuery.sibling( elem.firstChild );
+	},
+	contents: function( elem ) {
+		return jQuery.nodeName( elem, "iframe" ) ?
+			elem.contentDocument || elem.contentWindow.document :
+			jQuery.merge( [], elem.childNodes );
+	}
+}, function( name, fn ) {
+	jQuery.fn[ name ] = function( until, selector ) {
+		var ret = jQuery.map( this, fn, until );
+
+		if ( !runtil.test( name ) ) {
+			selector = until;
+		}
+
+		if ( selector && typeof selector === "string" ) {
+			ret = jQuery.filter( selector, ret );
+		}
+
+		ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret;
+
+		if ( this.length > 1 && rparentsprev.test( name ) ) {
+			ret = ret.reverse();
+		}
+
+		return this.pushStack( ret );
+	};
+});
+
+jQuery.extend({
+	filter: function( expr, elems, not ) {
+		if ( not ) {
+			expr = ":not(" + expr + ")";
+		}
+
+		return elems.length === 1 ?
+			jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] :
+			jQuery.find.matches(expr, elems);
+	},
+
+	dir: function( elem, dir, until ) {
+		var matched = [],
+			cur = elem[ dir ];
+
+		while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {
+			if ( cur.nodeType === 1 ) {
+				matched.push( cur );
+			}
+			cur = cur[dir];
+		}
+		return matched;
+	},
+
+	sibling: function( n, elem ) {
+		var r = [];
+
+		for ( ; n; n = n.nextSibling ) {
+			if ( n.nodeType === 1 && n !== elem ) {
+				r.push( n );
+			}
+		}
+
+		return r;
+	}
+});
+
+// Implement the identical functionality for filter and not
+function winnow( elements, qualifier, keep ) {
+
+	// Can't pass null or undefined to indexOf in Firefox 4
+	// Set to 0 to skip string check
+	qualifier = qualifier || 0;
+
+	if ( jQuery.isFunction( qualifier ) ) {
+		return jQuery.grep(elements, function( elem, i ) {
+			var retVal = !!qualifier.call( elem, i, elem );
+			return retVal === keep;
+		});
+
+	} else if ( qualifier.nodeType ) {
+		return jQuery.grep(elements, function( elem ) {
+			return ( elem === qualifier ) === keep;
+		});
+
+	} else if ( typeof qualifier === "string" ) {
+		var filtered = jQuery.grep(elements, function( elem ) {
+			return elem.nodeType === 1;
+		});
+
+		if ( isSimple.test( qualifier ) ) {
+			return jQuery.filter(qualifier, filtered, !keep);
+		} else {
+			qualifier = jQuery.filter( qualifier, filtered );
+		}
+	}
+
+	return jQuery.grep(elements, function( elem ) {
+		return ( jQuery.inArray( elem, qualifier ) >= 0 ) === keep;
+	});
+}
+function createSafeFragment( document ) {
+	var list = nodeNames.split( "|" ),
+		safeFrag = document.createDocumentFragment();
+
+	if ( safeFrag.createElement ) {
+		while ( list.length ) {
+			safeFrag.createElement(
+				list.pop()
+			);
+		}
+	}
+	return safeFrag;
+}
+
+var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" +
+		"header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",
+	rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g,
+	rnoshimcache = new RegExp("<(?:" + nodeNames + ")[\\s/>]", "i"),
+	rleadingWhitespace = /^\s+/,
+	rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,
+	rtagName = /<([\w:]+)/,
+	rtbody = /<tbody/i,
+	rhtml = /<|&#?\w+;/,
+	rnoInnerhtml = /<(?:script|style|link)/i,
+	manipulation_rcheckableType = /^(?:checkbox|radio)$/i,
+	// checked="checked" or checked
+	rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
+	rscriptType = /^$|\/(?:java|ecma)script/i,
+	rscriptTypeMasked = /^true\/(.*)/,
+	rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,
+
+	// We have to close these tags to support XHTML (#13200)
+	wrapMap = {
+		option: [ 1, "<select multiple='multiple'>", "</select>" ],
+		legend: [ 1, "<fieldset>", "</fieldset>" ],
+		area: [ 1, "<map>", "</map>" ],
+		param: [ 1, "<object>", "</object>" ],
+		thead: [ 1, "<table>", "</table>" ],
+		tr: [ 2, "<table><tbody>", "</tbody></table>" ],
+		col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ],
+		td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
+
+		// IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags,
+		// unless wrapped in a div with non-breaking characters in front of it.
+		_default: jQuery.support.htmlSerialize ? [ 0, "", "" ] : [ 1, "X<div>", "</div>"  ]
+	},
+	safeFragment = createSafeFragment( document ),
+	fragmentDiv = safeFragment.appendChild( document.createElement("div") );
+
+wrapMap.optgroup = wrapMap.option;
+wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
+wrapMap.th = wrapMap.td;
+
+jQuery.fn.extend({
+	text: function( value ) {
+		return jQuery.access( this, function( value ) {
+			return value === undefined ?
+				jQuery.text( this ) :
+				this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) );
+		}, null, value, arguments.length );
+	},
+
+	wrapAll: function( html ) {
+		if ( jQuery.isFunction( html ) ) {
+			return this.each(function(i) {
+				jQuery(this).wrapAll( html.call(this, i) );
+			});
+		}
+
+		if ( this[0] ) {
+			// The elements to wrap the target around
+			var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);
+
+			if ( this[0].parentNode ) {
+				wrap.insertBefore( this[0] );
+			}
+
+			wrap.map(function() {
+				var elem = this;
+
+				while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {
+					elem = elem.firstChild;
+				}
+
+				return elem;
+			}).append( this );
+		}
+
+		return this;
+	},
+
+	wrapInner: function( html ) {
+		if ( jQuery.isFunction( html ) ) {
+			return this.each(function(i) {
+				jQuery(this).wrapInner( html.call(this, i) );
+			});
+		}
+
+		return this.each(function() {
+			var self = jQuery( this ),
+				contents = self.contents();
+
+			if ( contents.length ) {
+				contents.wrapAll( html );
+
+			} else {
+				self.append( html );
+			}
+		});
+	},
+
+	wrap: function( html ) {
+		var isFunction = jQuery.isFunction( html );
+
+		return this.each(function(i) {
+			jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );
+		});
+	},
+
+	unwrap: function() {
+		return this.parent().each(function() {
+			if ( !jQuery.nodeName( this, "body" ) ) {
+				jQuery( this ).replaceWith( this.childNodes );
+			}
+		}).end();
+	},
+
+	append: function() {
+		return this.domManip(arguments, true, function( elem ) {
+			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+				this.appendChild( elem );
+			}
+		});
+	},
+
+	prepend: function() {
+		return this.domManip(arguments, true, function( elem ) {
+			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+				this.insertBefore( elem, this.firstChild );
+			}
+		});
+	},
+
+	before: function() {
+		return this.domManip( arguments, false, function( elem ) {
+			if ( this.parentNode ) {
+				this.parentNode.insertBefore( elem, this );
+			}
+		});
+	},
+
+	after: function() {
+		return this.domManip( arguments, false, function( elem ) {
+			if ( this.parentNode ) {
+				this.parentNode.insertBefore( elem, this.nextSibling );
+			}
+		});
+	},
+
+	// keepData is for internal use only--do not document
+	remove: function( selector, keepData ) {
+		var elem,
+			i = 0;
+
+		for ( ; (elem = this[i]) != null; i++ ) {
+			if ( !selector || jQuery.filter( selector, [ elem ] ).length > 0 ) {
+				if ( !keepData && elem.nodeType === 1 ) {
+					jQuery.cleanData( getAll( elem ) );
+				}
+
+				if ( elem.parentNode ) {
+					if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) {
+						setGlobalEval( getAll( elem, "script" ) );
+					}
+					elem.parentNode.removeChild( elem );
+				}
+			}
+		}
+
+		return this;
+	},
+
+	empty: function() {
+		var elem,
+			i = 0;
+
+		for ( ; (elem = this[i]) != null; i++ ) {
+			// Remove element nodes and prevent memory leaks
+			if ( elem.nodeType === 1 ) {
+				jQuery.cleanData( getAll( elem, false ) );
+			}
+
+			// Remove any remaining nodes
+			while ( elem.firstChild ) {
+				elem.removeChild( elem.firstChild );
+			}
+
+			// If this is a select, ensure that it displays empty (#12336)
+			// Support: IE<9
+			if ( elem.options && jQuery.nodeName( elem, "select" ) ) {
+				elem.options.length = 0;
+			}
+		}
+
+		return this;
+	},
+
+	clone: function( dataAndEvents, deepDataAndEvents ) {
+		dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
+		deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
+
+		return this.map( function () {
+			return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
+		});
+	},
+
+	html: function( value ) {
+		return jQuery.access( this, function( value ) {
+			var elem = this[0] || {},
+				i = 0,
+				l = this.length;
+
+			if ( value === undefined ) {
+				return elem.nodeType === 1 ?
+					elem.innerHTML.replace( rinlinejQuery, "" ) :
+					undefined;
+			}
+
+			// See if we can take a shortcut and just use innerHTML
+			if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
+				( jQuery.support.htmlSerialize || !rnoshimcache.test( value )  ) &&
+				( jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value ) ) &&
+				!wrapMap[ ( rtagName.exec( value ) || ["", ""] )[1].toLowerCase() ] ) {
+
+				value = value.replace( rxhtmlTag, "<$1></$2>" );
+
+				try {
+					for (; i < l; i++ ) {
+						// Remove element nodes and prevent memory leaks
+						elem = this[i] || {};
+						if ( elem.nodeType === 1 ) {
+							jQuery.cleanData( getAll( elem, false ) );
+							elem.innerHTML = value;
+						}
+					}
+
+					elem = 0;
+
+				// If using innerHTML throws an exception, use the fallback method
+				} catch(e) {}
+			}
+
+			if ( elem ) {
+				this.empty().append( value );
+			}
+		}, null, value, arguments.length );
+	},
+
+	replaceWith: function( value ) {
+		var isFunc = jQuery.isFunction( value );
+
+		// Make sure that the elements are removed from the DOM before they are inserted
+		// this can help fix replacing a parent with child elements
+		if ( !isFunc && typeof value !== "string" ) {
+			value = jQuery( value ).not( this ).detach();
+		}
+
+		return this.domManip( [ value ], true, function( elem ) {
+			var next = this.nextSibling,
+				parent = this.parentNode;
+
+			if ( parent && this.nodeType === 1 || this.nodeType === 11 ) {
+
+				jQuery( this ).remove();
+
+				if ( next ) {
+					next.parentNode.insertBefore( elem, next );
+				} else {
+					parent.appendChild( elem );
+				}
+			}
+		});
+	},
+
+	detach: function( selector ) {
+		return this.remove( selector, true );
+	},
+
+	domManip: function( args, table, callback ) {
+
+		// Flatten any nested arrays
+		args = core_concat.apply( [], args );
+
+		var fragment, first, scripts, hasScripts, node, doc,
+			i = 0,
+			l = this.length,
+			set = this,
+			iNoClone = l - 1,
+			value = args[0],
+			isFunction = jQuery.isFunction( value );
+
+		// We can't cloneNode fragments that contain checked, in WebKit
+		if ( isFunction || !( l <= 1 || typeof value !== "string" || jQuery.support.checkClone || !rchecked.test( value ) ) ) {
+			return this.each(function( index ) {
+				var self = set.eq( index );
+				if ( isFunction ) {
+					args[0] = value.call( this, index, table ? self.html() : undefined );
+				}
+				self.domManip( args, table, callback );
+			});
+		}
+
+		if ( l ) {
+			fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, this );
+			first = fragment.firstChild;
+
+			if ( fragment.childNodes.length === 1 ) {
+				fragment = first;
+			}
+
+			if ( first ) {
+				table = table && jQuery.nodeName( first, "tr" );
+				scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
+				hasScripts = scripts.length;
+
+				// Use the original fragment for the last item instead of the first because it can end up
+				// being emptied incorrectly in certain situations (#8070).
+				for ( ; i < l; i++ ) {
+					node = fragment;
+
+					if ( i !== iNoClone ) {
+						node = jQuery.clone( node, true, true );
+
+						// Keep references to cloned scripts for later restoration
+						if ( hasScripts ) {
+							jQuery.merge( scripts, getAll( node, "script" ) );
+						}
+					}
+
+					callback.call(
+						table && jQuery.nodeName( this[i], "table" ) ?
+							findOrAppend( this[i], "tbody" ) :
+							this[i],
+						node,
+						i
+					);
+				}
+
+				if ( hasScripts ) {
+					doc = scripts[ scripts.length - 1 ].ownerDocument;
+
+					// Reenable scripts
+					jQuery.map( scripts, restoreScript );
+
+					// Evaluate executable scripts on first document insertion
+					for ( i = 0; i < hasScripts; i++ ) {
+						node = scripts[ i ];
+						if ( rscriptType.test( node.type || "" ) &&
+							!jQuery._data( node, "globalEval" ) && jQuery.contains( doc, node ) ) {
+
+							if ( node.src ) {
+								// Hope ajax is available...
+								jQuery.ajax({
+									url: node.src,
+									type: "GET",
+									dataType: "script",
+									async: false,
+									global: false,
+									"throws": true
+								});
+							} else {
+								jQuery.globalEval( ( node.text || node.textContent || node.innerHTML || "" ).replace( rcleanScript, "" ) );
+							}
+						}
+					}
+				}
+
+				// Fix #11809: Avoid leaking memory
+				fragment = first = null;
+			}
+		}
+
+		return this;
+	}
+});
+
+function findOrAppend( elem, tag ) {
+	return elem.getElementsByTagName( tag )[0] || elem.appendChild( elem.ownerDocument.createElement( tag ) );
+}
+
+// Replace/restore the type attribute of script elements for safe DOM manipulation
+function disableScript( elem ) {
+	var attr = elem.getAttributeNode("type");
+	elem.type = ( attr && attr.specified ) + "/" + elem.type;
+	return elem;
+}
+function restoreScript( elem ) {
+	var match = rscriptTypeMasked.exec( elem.type );
+	if ( match ) {
+		elem.type = match[1];
+	} else {
+		elem.removeAttribute("type");
+	}
+	return elem;
+}
+
+// Mark scripts as having already been evaluated
+function setGlobalEval( elems, refElements ) {
+	var elem,
+		i = 0;
+	for ( ; (elem = elems[i]) != null; i++ ) {
+		jQuery._data( elem, "globalEval", !refElements || jQuery._data( refElements[i], "globalEval" ) );
+	}
+}
+
+function cloneCopyEvent( src, dest ) {
+
+	if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {
+		return;
+	}
+
+	var type, i, l,
+		oldData = jQuery._data( src ),
+		curData = jQuery._data( dest, oldData ),
+		events = oldData.events;
+
+	if ( events ) {
+		delete curData.handle;
+		curData.events = {};
+
+		for ( type in events ) {
+			for ( i = 0, l = events[ type ].length; i < l; i++ ) {
+				jQuery.event.add( dest, type, events[ type ][ i ] );
+			}
+		}
+	}
+
+	// make the cloned public data object a copy from the original
+	if ( curData.data ) {
+		curData.data = jQuery.extend( {}, curData.data );
+	}
+}
+
+function fixCloneNodeIssues( src, dest ) {
+	var nodeName, data, e;
+
+	// We do not need to do anything for non-Elements
+	if ( dest.nodeType !== 1 ) {
+		return;
+	}
+
+	nodeName = dest.nodeName.toLowerCase();
+
+	// IE6-8 copies events bound via attachEvent when using cloneNode.
+	if ( !jQuery.support.noCloneEvent && dest[ jQuery.expando ] ) {
+		data = jQuery._data( dest );
+
+		for ( e in data.events ) {
+			jQuery.removeEvent( dest, e, data.handle );
+		}
+
+		// Event data gets referenced instead of copied if the expando gets copied too
+		dest.removeAttribute( jQuery.expando );
+	}
+
+	// IE blanks contents when cloning scripts, and tries to evaluate newly-set text
+	if ( nodeName === "script" && dest.text !== src.text ) {
+		disableScript( dest ).text = src.text;
+		restoreScript( dest );
+
+	// IE6-10 improperly clones children of object elements using classid.
+	// IE10 throws NoModificationAllowedError if parent is null, #12132.
+	} else if ( nodeName === "object" ) {
+		if ( dest.parentNode ) {
+			dest.outerHTML = src.outerHTML;
+		}
+
+		// This path appears unavoidable for IE9. When cloning an object
+		// element in IE9, the outerHTML strategy above is not sufficient.
+		// If the src has innerHTML and the destination does not,
+		// copy the src.innerHTML into the dest.innerHTML. #10324
+		if ( jQuery.support.html5Clone && ( src.innerHTML && !jQuery.trim(dest.innerHTML) ) ) {
+			dest.innerHTML = src.innerHTML;
+		}
+
+	} else if ( nodeName === "input" && manipulation_rcheckableType.test( src.type ) ) {
+		// IE6-8 fails to persist the checked state of a cloned checkbox
+		// or radio button. Worse, IE6-7 fail to give the cloned element
+		// a checked appearance if the defaultChecked value isn't also set
+
+		dest.defaultChecked = dest.checked = src.checked;
+
+		// IE6-7 get confused and end up setting the value of a cloned
+		// checkbox/radio button to an empty string instead of "on"
+		if ( dest.value !== src.value ) {
+			dest.value = src.value;
+		}
+
+	// IE6-8 fails to return the selected option to the default selected
+	// state when cloning options
+	} else if ( nodeName === "option" ) {
+		dest.defaultSelected = dest.selected = src.defaultSelected;
+
+	// IE6-8 fails to set the defaultValue to the correct value when
+	// cloning other types of input fields
+	} else if ( nodeName === "input" || nodeName === "textarea" ) {
+		dest.defaultValue = src.defaultValue;
+	}
+}
+
+jQuery.each({
+	appendTo: "append",
+	prependTo: "prepend",
+	insertBefore: "before",
+	insertAfter: "after",
+	replaceAll: "replaceWith"
+}, function( name, original ) {
+	jQuery.fn[ name ] = function( selector ) {
+		var elems,
+			i = 0,
+			ret = [],
+			insert = jQuery( selector ),
+			last = insert.length - 1;
+
+		for ( ; i <= last; i++ ) {
+			elems = i === last ? this : this.clone(true);
+			jQuery( insert[i] )[ original ]( elems );
+
+			// Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get()
+			core_push.apply( ret, elems.get() );
+		}
+
+		return this.pushStack( ret );
+	};
+});
+
+function getAll( context, tag ) {
+	var elems, elem,
+		i = 0,
+		found = typeof context.getElementsByTagName !== "undefined" ? context.getElementsByTagName( tag || "*" ) :
+			typeof context.querySelectorAll !== "undefined" ? context.querySelectorAll( tag || "*" ) :
+			undefined;
+
+	if ( !found ) {
+		for ( found = [], elems = context.childNodes || context; (elem = elems[i]) != null; i++ ) {
+			if ( !tag || jQuery.nodeName( elem, tag ) ) {
+				found.push( elem );
+			} else {
+				jQuery.merge( found, getAll( elem, tag ) );
+			}
+		}
+	}
+
+	return tag === undefined || tag && jQuery.nodeName( context, tag ) ?
+		jQuery.merge( [ context ], found ) :
+		found;
+}
+
+// Used in buildFragment, fixes the defaultChecked property
+function fixDefaultChecked( elem ) {
+	if ( manipulation_rcheckableType.test( elem.type ) ) {
+		elem.defaultChecked = elem.checked;
+	}
+}
+
+jQuery.extend({
+	clone: function( elem, dataAndEvents, deepDataAndEvents ) {
+		var destElements, srcElements, node, i, clone,
+			inPage = jQuery.contains( elem.ownerDocument, elem );
+
+		if ( jQuery.support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) {
+			clone = elem.cloneNode( true );
+
+		// IE<=8 does not properly clone detached, unknown element nodes
+		} else {
+			fragmentDiv.innerHTML = elem.outerHTML;
+			fragmentDiv.removeChild( clone = fragmentDiv.firstChild );
+		}
+
+		if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) &&
+				(elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {
+
+			// We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2
+			destElements = getAll( clone );
+			srcElements = getAll( elem );
+
+			// Fix all IE cloning issues
+			for ( i = 0; (node = srcElements[i]) != null; ++i ) {
+				// Ensure that the destination node is not null; Fixes #9587
+				if ( destElements[i] ) {
+					fixCloneNodeIssues( node, destElements[i] );
+				}
+			}
+		}
+
+		// Copy the events from the original to the clone
+		if ( dataAndEvents ) {
+			if ( deepDataAndEvents ) {
+				srcElements = srcElements || getAll( elem );
+				destElements = destElements || getAll( clone );
+
+				for ( i = 0; (node = srcElements[i]) != null; i++ ) {
+					cloneCopyEvent( node, destElements[i] );
+				}
+			} else {
+				cloneCopyEvent( elem, clone );
+			}
+		}
+
+		// Preserve script evaluation history
+		destElements = getAll( clone, "script" );
+		if ( destElements.length > 0 ) {
+			setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
+		}
+
+		destElements = srcElements = node = null;
+
+		// Return the cloned set
+		return clone;
+	},
+
+	buildFragment: function( elems, context, scripts, selection ) {
+		var contains, elem, tag, tmp, wrap, tbody, j,
+			l = elems.length,
+
+			// Ensure a safe fragment
+			safe = createSafeFragment( context ),
+
+			nodes = [],
+			i = 0;
+
+		for ( ; i < l; i++ ) {
+			elem = elems[ i ];
+
+			if ( elem || elem === 0 ) {
+
+				// Add nodes directly
+				if ( jQuery.type( elem ) === "object" ) {
+					jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
+
+				// Convert non-html into a text node
+				} else if ( !rhtml.test( elem ) ) {
+					nodes.push( context.createTextNode( elem ) );
+
+				// Convert html into DOM nodes
+				} else {
+					tmp = tmp || safe.appendChild( context.createElement("div") );
+
+					// Deserialize a standard representation
+					tag = ( rtagName.exec( elem ) || ["", ""] )[1].toLowerCase();
+					wrap = wrapMap[ tag ] || wrapMap._default;
+
+					tmp.innerHTML = wrap[1] + elem.replace( rxhtmlTag, "<$1></$2>" ) + wrap[2];
+
+					// Descend through wrappers to the right content
+					j = wrap[0];
+					while ( j-- ) {
+						tmp = tmp.lastChild;
+					}
+
+					// Manually add leading whitespace removed by IE
+					if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {
+						nodes.push( context.createTextNode( rleadingWhitespace.exec( elem )[0] ) );
+					}
+
+					// Remove IE's autoinserted <tbody> from table fragments
+					if ( !jQuery.support.tbody ) {
+
+						// String was a <table>, *may* have spurious <tbody>
+						elem = tag === "table" && !rtbody.test( elem ) ?
+							tmp.firstChild :
+
+							// String was a bare <thead> or <tfoot>
+							wrap[1] === "<table>" && !rtbody.test( elem ) ?
+								tmp :
+								0;
+
+						j = elem && elem.childNodes.length;
+						while ( j-- ) {
+							if ( jQuery.nodeName( (tbody = elem.childNodes[j]), "tbody" ) && !tbody.childNodes.length ) {
+								elem.removeChild( tbody );
+							}
+						}
+					}
+
+					jQuery.merge( nodes, tmp.childNodes );
+
+					// Fix #12392 for WebKit and IE > 9
+					tmp.textContent = "";
+
+					// Fix #12392 for oldIE
+					while ( tmp.firstChild ) {
+						tmp.removeChild( tmp.firstChild );
+					}
+
+					// Remember the top-level container for proper cleanup
+					tmp = safe.lastChild;
+				}
+			}
+		}
+
+		// Fix #11356: Clear elements from fragment
+		if ( tmp ) {
+			safe.removeChild( tmp );
+		}
+
+		// Reset defaultChecked for any radios and checkboxes
+		// about to be appended to the DOM in IE 6/7 (#8060)
+		if ( !jQuery.support.appendChecked ) {
+			jQuery.grep( getAll( nodes, "input" ), fixDefaultChecked );
+		}
+
+		i = 0;
+		while ( (elem = nodes[ i++ ]) ) {
+
+			// #4087 - If origin and destination elements are the same, and this is
+			// that element, do not do anything
+			if ( selection && jQuery.inArray( elem, selection ) !== -1 ) {
+				continue;
+			}
+
+			contains = jQuery.contains( elem.ownerDocument, elem );
+
+			// Append to fragment
+			tmp = getAll( safe.appendChild( elem ), "script" );
+
+			// Preserve script evaluation history
+			if ( contains ) {
+				setGlobalEval( tmp );
+			}
+
+			// Capture executables
+			if ( scripts ) {
+				j = 0;
+				while ( (elem = tmp[ j++ ]) ) {
+					if ( rscriptType.test( elem.type || "" ) ) {
+						scripts.push( elem );
+					}
+				}
+			}
+		}
+
+		tmp = null;
+
+		return safe;
+	},
+
+	cleanData: function( elems, /* internal */ acceptData ) {
+		var data, id, elem, type,
+			i = 0,
+			internalKey = jQuery.expando,
+			cache = jQuery.cache,
+			deleteExpando = jQuery.support.deleteExpando,
+			special = jQuery.event.special;
+
+		for ( ; (elem = elems[i]) != null; i++ ) {
+
+			if ( acceptData || jQuery.acceptData( elem ) ) {
+
+				id = elem[ internalKey ];
+				data = id && cache[ id ];
+
+				if ( data ) {
+					if ( data.events ) {
+						for ( type in data.events ) {
+							if ( special[ type ] ) {
+								jQuery.event.remove( elem, type );
+
+							// This is a shortcut to avoid jQuery.event.remove's overhead
+							} else {
+								jQuery.removeEvent( elem, type, data.handle );
+							}
+						}
+					}
+
+					// Remove cache only if it was not already removed by jQuery.event.remove
+					if ( cache[ id ] ) {
+
+						delete cache[ id ];
+
+						// IE does not allow us to delete expando properties from nodes,
+						// nor does it have a removeAttribute function on Document nodes;
+						// we must handle all of these cases
+						if ( deleteExpando ) {
+							delete elem[ internalKey ];
+
+						} else if ( typeof elem.removeAttribute !== "undefined" ) {
+							elem.removeAttribute( internalKey );
+
+						} else {
+							elem[ internalKey ] = null;
+						}
+
+						core_deletedIds.push( id );
+					}
+				}
+			}
+		}
+	}
+});
+var curCSS, getStyles, iframe,
+	ralpha = /alpha\([^)]*\)/i,
+	ropacity = /opacity\s*=\s*([^)]*)/,
+	rposition = /^(top|right|bottom|left)$/,
+	// swappable if display is none or starts with table except "table", "table-cell", or "table-caption"
+	// see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
+	rdisplayswap = /^(none|table(?!-c[ea]).+)/,
+	rmargin = /^margin/,
+	rnumsplit = new RegExp( "^(" + core_pnum + ")(.*)$", "i" ),
+	rnumnonpx = new RegExp( "^(" + core_pnum + ")(?!px)[a-z%]+$", "i" ),
+	rrelNum = new RegExp( "^([+-])=(" + core_pnum + ")", "i" ),
+	elemdisplay = { BODY: "block" },
+
+	cssShow = { position: "absolute", visibility: "hidden", display: "block" },
+	cssNormalTransform = {
+		letterSpacing: 0,
+		fontWeight: 400
+	},
+
+	cssExpand = [ "Top", "Right", "Bottom", "Left" ],
+	cssPrefixes = [ "Webkit", "O", "Moz", "ms" ];
+
+// return a css property mapped to a potentially vendor prefixed property
+function vendorPropName( style, name ) {
+
+	// shortcut for names that are not vendor prefixed
+	if ( name in style ) {
+		return name;
+	}
+
+	// check for vendor prefixed names
+	var capName = name.charAt(0).toUpperCase() + name.slice(1),
+		origName = name,
+		i = cssPrefixes.length;
+
+	while ( i-- ) {
+		name = cssPrefixes[ i ] + capName;
+		if ( name in style ) {
+			return name;
+		}
+	}
+
+	return origName;
+}
+
+function isHidden( elem, el ) {
+	// isHidden might be called from jQuery#filter function;
+	// in that case, element will be second argument
+	elem = el || elem;
+	return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem );
+}
+
+function showHide( elements, show ) {
+	var elem,
+		values = [],
+		index = 0,
+		length = elements.length;
+
+	for ( ; index < length; index++ ) {
+		elem = elements[ index ];
+		if ( !elem.style ) {
+			continue;
+		}
+		values[ index ] = jQuery._data( elem, "olddisplay" );
+		if ( show ) {
+			// Reset the inline display of this element to learn if it is
+			// being hidden by cascaded rules or not
+			if ( !values[ index ] && elem.style.display === "none" ) {
+				elem.style.display = "";
+			}
+
+			// Set elements which have been overridden with display: none
+			// in a stylesheet to whatever the default browser style is
+			// for such an element
+			if ( elem.style.display === "" && isHidden( elem ) ) {
+				values[ index ] = jQuery._data( elem, "olddisplay", css_defaultDisplay(elem.nodeName) );
+			}
+		} else if ( !values[ index ] && !isHidden( elem ) ) {
+			jQuery._data( elem, "olddisplay", jQuery.css( elem, "display" ) );
+		}
+	}
+
+	// Set the display of most of the elements in a second loop
+	// to avoid the constant reflow
+	for ( index = 0; index < length; index++ ) {
+		elem = elements[ index ];
+		if ( !elem.style ) {
+			continue;
+		}
+		if ( !show || elem.style.display === "none" || elem.style.display === "" ) {
+			elem.style.display = show ? values[ index ] || "" : "none";
+		}
+	}
+
+	return elements;
+}
+
+jQuery.fn.extend({
+	css: function( name, value ) {
+		return jQuery.access( this, function( elem, name, value ) {
+			var styles, len,
+				map = {},
+				i = 0;
+
+			if ( jQuery.isArray( name ) ) {
+				styles = getStyles( elem );
+				len = name.length;
+
+				for ( ; i < len; i++ ) {
+					map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
+				}
+
+				return map;
+			}
+
+			return value !== undefined ?
+				jQuery.style( elem, name, value ) :
+				jQuery.css( elem, name );
+		}, name, value, arguments.length > 1 );
+	},
+	show: function() {
+		return showHide( this, true );
+	},
+	hide: function() {
+		return showHide( this );
+	},
+	toggle: function( state ) {
+		var bool = typeof state === "boolean";
+
+		return this.each(function() {
+			if ( bool ? state : isHidden( this ) ) {
+				jQuery( this ).show();
+			} else {
+				jQuery( this ).hide();
+			}
+		});
+	}
+});
+
+jQuery.extend({
+	// Add in style property hooks for overriding the default
+	// behavior of getting and setting a style property
+	cssHooks: {
+		opacity: {
+			get: function( elem, computed ) {
+				if ( computed ) {
+					// We should always get a number back from opacity
+					var ret = curCSS( elem, "opacity" );
+					return ret === "" ? "1" : ret;
+				}
+			}
+		}
+	},
+
+	// Exclude the following css properties to add px
+	cssNumber: {
+		"columnCount": true,
+		"fillOpacity": true,
+		"fontWeight": true,
+		"lineHeight": true,
+		"opacity": true,
+		"orphans": true,
+		"widows": true,
+		"zIndex": true,
+		"zoom": true
+	},
+
+	// Add in properties whose names you wish to fix before
+	// setting or getting the value
+	cssProps: {
+		// normalize float css property
+		"float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat"
+	},
+
+	// Get and set the style property on a DOM Node
+	style: function( elem, name, value, extra ) {
+		// Don't set styles on text and comment nodes
+		if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
+			return;
+		}
+
+		// Make sure that we're working with the right name
+		var ret, type, hooks,
+			origName = jQuery.camelCase( name ),
+			style = elem.style;
+
+		name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) );
+
+		// gets hook for the prefixed version
+		// followed by the unprefixed version
+		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
+
+		// Check if we're setting a value
+		if ( value !== undefined ) {
+			type = typeof value;
+
+			// convert relative number strings (+= or -=) to relative numbers. #7345
+			if ( type === "string" && (ret = rrelNum.exec( value )) ) {
+				value = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) );
+				// Fixes bug #9237
+				type = "number";
+			}
+
+			// Make sure that NaN and null values aren't set. See: #7116
+			if ( value == null || type === "number" && isNaN( value ) ) {
+				return;
+			}
+
+			// If a number was passed in, add 'px' to the (except for certain CSS properties)
+			if ( type === "number" && !jQuery.cssNumber[ origName ] ) {
+				value += "px";
+			}
+
+			// Fixes #8908, it can be done more correctly by specifing setters in cssHooks,
+			// but it would mean to define eight (for every problematic property) identical functions
+			if ( !jQuery.support.clearCloneStyle && value === "" && name.indexOf("background") === 0 ) {
+				style[ name ] = "inherit";
+			}
+
+			// If a hook was provided, use that value, otherwise just set the specified value
+			if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) {
+
+				// Wrapped to prevent IE from throwing errors when 'invalid' values are provided
+				// Fixes bug #5509
+				try {
+					style[ name ] = value;
+				} catch(e) {}
+			}
+
+		} else {
+			// If a hook was provided get the non-computed value from there
+			if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {
+				return ret;
+			}
+
+			// Otherwise just get the value from the style object
+			return style[ name ];
+		}
+	},
+
+	css: function( elem, name, extra, styles ) {
+		var val, num, hooks,
+			origName = jQuery.camelCase( name );
+
+		// Make sure that we're working with the right name
+		name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) );
+
+		// gets hook for the prefixed version
+		// followed by the unprefixed version
+		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
+
+		// If a hook was provided get the computed value from there
+		if ( hooks && "get" in hooks ) {
+			val = hooks.get( elem, true, extra );
+		}
+
+		// Otherwise, if a way to get the computed value exists, use that
+		if ( val === undefined ) {
+			val = curCSS( elem, name, styles );
+		}
+
+		//convert "normal" to computed value
+		if ( val === "normal" && name in cssNormalTransform ) {
+			val = cssNormalTransform[ name ];
+		}
+
+		// Return, converting to number if forced or a qualifier was provided and val looks numeric
+		if ( extra ) {
+			num = parseFloat( val );
+			return extra === true || jQuery.isNumeric( num ) ? num || 0 : val;
+		}
+		return val;
+	},
+
+	// A method for quickly swapping in/out CSS properties to get correct calculations
+	swap: function( elem, options, callback, args ) {
+		var ret, name,
+			old = {};
+
+		// Remember the old values, and insert the new ones
+		for ( name in options ) {
+			old[ name ] = elem.style[ name ];
+			elem.style[ name ] = options[ name ];
+		}
+
+		ret = callback.apply( elem, args || [] );
+
+		// Revert the old values
+		for ( name in options ) {
+			elem.style[ name ] = old[ name ];
+		}
+
+		return ret;
+	}
+});
+
+// NOTE: we've included the "window" in window.getComputedStyle
+// because jsdom on node.js will break without it.
+if ( window.getComputedStyle ) {
+	getStyles = function( elem ) {
+		return window.getComputedStyle( elem, null );
+	};
+
+	curCSS = function( elem, name, _computed ) {
+		var width, minWidth, maxWidth,
+			computed = _computed || getStyles( elem ),
+
+			// getPropertyValue is only needed for .css('filter') in IE9, see #12537
+			ret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined,
+			style = elem.style;
+
+		if ( computed ) {
+
+			if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {
+				ret = jQuery.style( elem, name );
+			}
+
+			// A tribute to the "awesome hack by Dean Edwards"
+			// Chrome < 17 and Safari 5.0 uses "computed value" instead of "used value" for margin-right
+			// Safari 5.1.7 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels
+			// this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values
+			if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) {
+
+				// Remember the original values
+				width = style.width;
+				minWidth = style.minWidth;
+				maxWidth = style.maxWidth;
+
+				// Put in the new values to get a computed value out
+				style.minWidth = style.maxWidth = style.width = ret;
+				ret = computed.width;
+
+				// Revert the changed values
+				style.width = width;
+				style.minWidth = minWidth;
+				style.maxWidth = maxWidth;
+			}
+		}
+
+		return ret;
+	};
+} else if ( document.documentElement.currentStyle ) {
+	getStyles = function( elem ) {
+		return elem.currentStyle;
+	};
+
+	curCSS = function( elem, name, _computed ) {
+		var left, rs, rsLeft,
+			computed = _computed || getStyles( elem ),
+			ret = computed ? computed[ name ] : undefined,
+			style = elem.style;
+
+		// Avoid setting ret to empty string here
+		// so we don't default to auto
+		if ( ret == null && style && style[ name ] ) {
+			ret = style[ name ];
+		}
+
+		// From the awesome hack by Dean Edwards
+		// http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
+
+		// If we're not dealing with a regular pixel number
+		// but a number that has a weird ending, we need to convert it to pixels
+		// but not position css attributes, as those are proportional to the parent element instead
+		// and we can't measure the parent instead because it might trigger a "stacking dolls" problem
+		if ( rnumnonpx.test( ret ) && !rposition.test( name ) ) {
+
+			// Remember the original values
+			left = style.left;
+			rs = elem.runtimeStyle;
+			rsLeft = rs && rs.left;
+
+			// Put in the new values to get a computed value out
+			if ( rsLeft ) {
+				rs.left = elem.currentStyle.left;
+			}
+			style.left = name === "fontSize" ? "1em" : ret;
+			ret = style.pixelLeft + "px";
+
+			// Revert the changed values
+			style.left = left;
+			if ( rsLeft ) {
+				rs.left = rsLeft;
+			}
+		}
+
+		return ret === "" ? "auto" : ret;
+	};
+}
+
+function setPositiveNumber( elem, value, subtract ) {
+	var matches = rnumsplit.exec( value );
+	return matches ?
+		// Guard against undefined "subtract", e.g., when used as in cssHooks
+		Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) :
+		value;
+}
+
+function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
+	var i = extra === ( isBorderBox ? "border" : "content" ) ?
+		// If we already have the right measurement, avoid augmentation
+		4 :
+		// Otherwise initialize for horizontal or vertical properties
+		name === "width" ? 1 : 0,
+
+		val = 0;
+
+	for ( ; i < 4; i += 2 ) {
+		// both box models exclude margin, so add it if we want it
+		if ( extra === "margin" ) {
+			val += jQuery.css( elem, extra + cssExpand[ i ], true, styles );
+		}
+
+		if ( isBorderBox ) {
+			// border-box includes padding, so remove it if we want content
+			if ( extra === "content" ) {
+				val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
+			}
+
+			// at this point, extra isn't border nor margin, so remove border
+			if ( extra !== "margin" ) {
+				val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
+			}
+		} else {
+			// at this point, extra isn't content, so add padding
+			val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
+
+			// at this point, extra isn't content nor padding, so add border
+			if ( extra !== "padding" ) {
+				val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
+			}
+		}
+	}
+
+	return val;
+}
+
+function getWidthOrHeight( elem, name, extra ) {
+
+	// Start with offset property, which is equivalent to the border-box value
+	var valueIsBorderBox = true,
+		val = name === "width" ? elem.offsetWidth : elem.offsetHeight,
+		styles = getStyles( elem ),
+		isBorderBox = jQuery.support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
+
+	// some non-html elements return undefined for offsetWidth, so check for null/undefined
+	// svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285
+	// MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668
+	if ( val <= 0 || val == null ) {
+		// Fall back to computed then uncomputed css if necessary
+		val = curCSS( elem, name, styles );
+		if ( val < 0 || val == null ) {
+			val = elem.style[ name ];
+		}
+
+		// Computed unit is not pixels. Stop here and return.
+		if ( rnumnonpx.test(val) ) {
+			return val;
+		}
+
+		// we need the check for style in case a browser which returns unreliable values
+		// for getComputedStyle silently falls back to the reliable elem.style
+		valueIsBorderBox = isBorderBox && ( jQuery.support.boxSizingReliable || val === elem.style[ name ] );
+
+		// Normalize "", auto, and prepare for extra
+		val = parseFloat( val ) || 0;
+	}
+
+	// use the active box-sizing model to add/subtract irrelevant styles
+	return ( val +
+		augmentWidthOrHeight(
+			elem,
+			name,
+			extra || ( isBorderBox ? "border" : "content" ),
+			valueIsBorderBox,
+			styles
+		)
+	) + "px";
+}
+
+// Try to determine the default display value of an element
+function css_defaultDisplay( nodeName ) {
+	var doc = document,
+		display = elemdisplay[ nodeName ];
+
+	if ( !display ) {
+		display = actualDisplay( nodeName, doc );
+
+		// If the simple way fails, read from inside an iframe
+		if ( display === "none" || !display ) {
+			// Use the already-created iframe if possible
+			iframe = ( iframe ||
+				jQuery("<iframe frameborder='0' width='0' height='0'/>")
+				.css( "cssText", "display:block !important" )
+			).appendTo( doc.documentElement );
+
+			// Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse
+			doc = ( iframe[0].contentWindow || iframe[0].contentDocument ).document;
+			doc.write("<!doctype html><html><body>");
+			doc.close();
+
+			display = actualDisplay( nodeName, doc );
+			iframe.detach();
+		}
+
+		// Store the correct default display
+		elemdisplay[ nodeName ] = display;
+	}
+
+	return display;
+}
+
+// Called ONLY from within css_defaultDisplay
+function actualDisplay( name, doc ) {
+	var elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),
+		display = jQuery.css( elem[0], "display" );
+	elem.remove();
+	return display;
+}
+
+jQuery.each([ "height", "width" ], function( i, name ) {
+	jQuery.cssHooks[ name ] = {
+		get: function( elem, computed, extra ) {
+			if ( computed ) {
+				// certain elements can have dimension info if we invisibly show them
+				// however, it must have a current display style that would benefit from this
+				return elem.offsetWidth === 0 && rdisplayswap.test( jQuery.css( elem, "display" ) ) ?
+					jQuery.swap( elem, cssShow, function() {
+						return getWidthOrHeight( elem, name, extra );
+					}) :
+					getWidthOrHeight( elem, name, extra );
+			}
+		},
+
+		set: function( elem, value, extra ) {
+			var styles = extra && getStyles( elem );
+			return setPositiveNumber( elem, value, extra ?
+				augmentWidthOrHeight(
+					elem,
+					name,
+					extra,
+					jQuery.support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
+					styles
+				) : 0
+			);
+		}
+	};
+});
+
+if ( !jQuery.support.opacity ) {
+	jQuery.cssHooks.opacity = {
+		get: function( elem, computed ) {
+			// IE uses filters for opacity
+			return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ?
+				( 0.01 * parseFloat( RegExp.$1 ) ) + "" :
+				computed ? "1" : "";
+		},
+
+		set: function( elem, value ) {
+			var style = elem.style,
+				currentStyle = elem.currentStyle,
+				opacity = jQuery.isNumeric( value ) ? "alpha(opacity=" + value * 100 + ")" : "",
+				filter = currentStyle && currentStyle.filter || style.filter || "";
+
+			// IE has trouble with opacity if it does not have layout
+			// Force it by setting the zoom level
+			style.zoom = 1;
+
+			// if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652
+			// if value === "", then remove inline opacity #12685
+			if ( ( value >= 1 || value === "" ) &&
+					jQuery.trim( filter.replace( ralpha, "" ) ) === "" &&
+					style.removeAttribute ) {
+
+				// Setting style.filter to null, "" & " " still leave "filter:" in the cssText
+				// if "filter:" is present at all, clearType is disabled, we want to avoid this
+				// style.removeAttribute is IE Only, but so apparently is this code path...
+				style.removeAttribute( "filter" );
+
+				// if there is no filter style applied in a css rule or unset inline opacity, we are done
+				if ( value === "" || currentStyle && !currentStyle.filter ) {
+					return;
+				}
+			}
+
+			// otherwise, set new filter values
+			style.filter = ralpha.test( filter ) ?
+				filter.replace( ralpha, opacity ) :
+				filter + " " + opacity;
+		}
+	};
+}
+
+// These hooks cannot be added until DOM ready because the support test
+// for it is not run until after DOM ready
+jQuery(function() {
+	if ( !jQuery.support.reliableMarginRight ) {
+		jQuery.cssHooks.marginRight = {
+			get: function( elem, computed ) {
+				if ( computed ) {
+					// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
+					// Work around by temporarily setting element display to inline-block
+					return jQuery.swap( elem, { "display": "inline-block" },
+						curCSS, [ elem, "marginRight" ] );
+				}
+			}
+		};
+	}
+
+	// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
+	// getComputedStyle returns percent when specified for top/left/bottom/right
+	// rather than make the css module depend on the offset module, we just check for it here
+	if ( !jQuery.support.pixelPosition && jQuery.fn.position ) {
+		jQuery.each( [ "top", "left" ], function( i, prop ) {
+			jQuery.cssHooks[ prop ] = {
+				get: function( elem, computed ) {
+					if ( computed ) {
+						computed = curCSS( elem, prop );
+						// if curCSS returns percentage, fallback to offset
+						return rnumnonpx.test( computed ) ?
+							jQuery( elem ).position()[ prop ] + "px" :
+							computed;
+					}
+				}
+			};
+		});
+	}
+
+});
+
+if ( jQuery.expr && jQuery.expr.filters ) {
+	jQuery.expr.filters.hidden = function( elem ) {
+		return ( elem.offsetWidth === 0 && elem.offsetHeight === 0 ) || (!jQuery.support.reliableHiddenOffsets && ((elem.style && elem.style.display) || jQuery.css( elem, "display" )) === "none");
+	};
+
+	jQuery.expr.filters.visible = function( elem ) {
+		return !jQuery.expr.filters.hidden( elem );
+	};
+}
+
+// These hooks are used by animate to expand properties
+jQuery.each({
+	margin: "",
+	padding: "",
+	border: "Width"
+}, function( prefix, suffix ) {
+	jQuery.cssHooks[ prefix + suffix ] = {
+		expand: function( value ) {
+			var i = 0,
+				expanded = {},
+
+				// assumes a single number if not a string
+				parts = typeof value === "string" ? value.split(" ") : [ value ];
+
+			for ( ; i < 4; i++ ) {
+				expanded[ prefix + cssExpand[ i ] + suffix ] =
+					parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
+			}
+
+			return expanded;
+		}
+	};
+
+	if ( !rmargin.test( prefix ) ) {
+		jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
+	}
+});
+var r20 = /%20/g,
+	rbracket = /\[\]$/,
+	rCRLF = /\r?\n/g,
+	rsubmitterTypes = /^(?:submit|button|image|reset)$/i,
+	rsubmittable = /^(?:input|select|textarea|keygen)/i;
+
+jQuery.fn.extend({
+	serialize: function() {
+		return jQuery.param( this.serializeArray() );
+	},
+	serializeArray: function() {
+		return this.map(function(){
+			// Can add propHook for "elements" to filter or add form elements
+			var elements = jQuery.prop( this, "elements" );
+			return elements ? jQuery.makeArray( elements ) : this;
+		})
+		.filter(function(){
+			var type = this.type;
+			// Use .is(":disabled") so that fieldset[disabled] works
+			return this.name && !jQuery( this ).is( ":disabled" ) &&
+				rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
+				( this.checked || !manipulation_rcheckableType.test( type ) );
+		})
+		.map(function( i, elem ){
+			var val = jQuery( this ).val();
+
+			return val == null ?
+				null :
+				jQuery.isArray( val ) ?
+					jQuery.map( val, function( val ){
+						return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+					}) :
+					{ name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+		}).get();
+	}
+});
+
+//Serialize an array of form elements or a set of
+//key/values into a query string
+jQuery.param = function( a, traditional ) {
+	var prefix,
+		s = [],
+		add = function( key, value ) {
+			// If value is a function, invoke it and return its value
+			value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value );
+			s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
+		};
+
+	// Set traditional to true for jQuery <= 1.3.2 behavior.
+	if ( traditional === undefined ) {
+		traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;
+	}
+
+	// If an array was passed in, assume that it is an array of form elements.
+	if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
+		// Serialize the form elements
+		jQuery.each( a, function() {
+			add( this.name, this.value );
+		});
+
+	} else {
+		// If traditional, encode the "old" way (the way 1.3.2 or older
+		// did it), otherwise encode params recursively.
+		for ( prefix in a ) {
+			buildParams( prefix, a[ prefix ], traditional, add );
+		}
+	}
+
+	// Return the resulting serialization
+	return s.join( "&" ).replace( r20, "+" );
+};
+
+function buildParams( prefix, obj, traditional, add ) {
+	var name;
+
+	if ( jQuery.isArray( obj ) ) {
+		// Serialize array item.
+		jQuery.each( obj, function( i, v ) {
+			if ( traditional || rbracket.test( prefix ) ) {
+				// Treat each array item as a scalar.
+				add( prefix, v );
+
+			} else {
+				// Item is non-scalar (array or object), encode its numeric index.
+				buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add );
+			}
+		});
+
+	} else if ( !traditional && jQuery.type( obj ) === "object" ) {
+		// Serialize object item.
+		for ( name in obj ) {
+			buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
+		}
+
+	} else {
+		// Serialize scalar item.
+		add( prefix, obj );
+	}
+}
+var
+	// Document location
+	ajaxLocParts,
+	ajaxLocation,
+
+	ajax_nonce = jQuery.now(),
+
+	ajax_rquery = /\?/,
+	rhash = /#.*$/,
+	rts = /([?&])_=[^&]*/,
+	rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL
+	// #7653, #8125, #8152: local protocol detection
+	rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
+	rnoContent = /^(?:GET|HEAD)$/,
+	rprotocol = /^\/\//,
+	rurl = /^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,
+
+	// Keep a copy of the old load method
+	_load = jQuery.fn.load,
+
+	/* Prefilters
+	 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
+	 * 2) These are called:
+	 *    - BEFORE asking for a transport
+	 *    - AFTER param serialization (s.data is a string if s.processData is true)
+	 * 3) key is the dataType
+	 * 4) the catchall symbol "*" can be used
+	 * 5) execution will start with transport dataType and THEN continue down to "*" if needed
+	 */
+	prefilters = {},
+
+	/* Transports bindings
+	 * 1) key is the dataType
+	 * 2) the catchall symbol "*" can be used
+	 * 3) selection will start with transport dataType and THEN go to "*" if needed
+	 */
+	transports = {},
+
+	// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
+	allTypes = "*/".concat("*");
+
+// #8138, IE may throw an exception when accessing
+// a field from window.location if document.domain has been set
+try {
+	ajaxLocation = location.href;
+} catch( e ) {
+	// Use the href attribute of an A element
+	// since IE will modify it given document.location
+	ajaxLocation = document.createElement( "a" );
+	ajaxLocation.href = "";
+	ajaxLocation = ajaxLocation.href;
+}
+
+// Segment location into parts
+ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];
+
+// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
+function addToPrefiltersOrTransports( structure ) {
+
+	// dataTypeExpression is optional and defaults to "*"
+	return function( dataTypeExpression, func ) {
+
+		if ( typeof dataTypeExpression !== "string" ) {
+			func = dataTypeExpression;
+			dataTypeExpression = "*";
+		}
+
+		var dataType,
+			i = 0,
+			dataTypes = dataTypeExpression.toLowerCase().match( core_rnotwhite ) || [];
+
+		if ( jQuery.isFunction( func ) ) {
+			// For each dataType in the dataTypeExpression
+			while ( (dataType = dataTypes[i++]) ) {
+				// Prepend if requested
+				if ( dataType[0] === "+" ) {
+					dataType = dataType.slice( 1 ) || "*";
+					(structure[ dataType ] = structure[ dataType ] || []).unshift( func );
+
+				// Otherwise append
+				} else {
+					(structure[ dataType ] = structure[ dataType ] || []).push( func );
+				}
+			}
+		}
+	};
+}
+
+// Base inspection function for prefilters and transports
+function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
+
+	var inspected = {},
+		seekingTransport = ( structure === transports );
+
+	function inspect( dataType ) {
+		var selected;
+		inspected[ dataType ] = true;
+		jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
+			var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
+			if( typeof dataTypeOrTransport === "string" && !seekingTransport && !inspected[ dataTypeOrTransport ] ) {
+				options.dataTypes.unshift( dataTypeOrTransport );
+				inspect( dataTypeOrTransport );
+				return false;
+			} else if ( seekingTransport ) {
+				return !( selected = dataTypeOrTransport );
+			}
+		});
+		return selected;
+	}
+
+	return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
+}
+
+// A special extend for ajax options
+// that takes "flat" options (not to be deep extended)
+// Fixes #9887
+function ajaxExtend( target, src ) {
+	var key, deep,
+		flatOptions = jQuery.ajaxSettings.flatOptions || {};
+
+	for ( key in src ) {
+		if ( src[ key ] !== undefined ) {
+			( flatOptions[ key ] ? target : ( deep || (deep = {}) ) )[ key ] = src[ key ];
+		}
+	}
+	if ( deep ) {
+		jQuery.extend( true, target, deep );
+	}
+
+	return target;
+}
+
+jQuery.fn.load = function( url, params, callback ) {
+	if ( typeof url !== "string" && _load ) {
+		return _load.apply( this, arguments );
+	}
+
+	var selector, type, response,
+		self = this,
+		off = url.indexOf(" ");
+
+	if ( off >= 0 ) {
+		selector = url.slice( off, url.length );
+		url = url.slice( 0, off );
+	}
+
+	// If it's a function
+	if ( jQuery.isFunction( params ) ) {
+
+		// We assume that it's the callback
+		callback = params;
+		params = undefined;
+
+	// Otherwise, build a param string
+	} else if ( params && typeof params === "object" ) {
+		type = "POST";
+	}
+
+	// If we have elements to modify, make the request
+	if ( self.length > 0 ) {
+		jQuery.ajax({
+			url: url,
+
+			// if "type" variable is undefined, then "GET" method will be used
+			type: type,
+			dataType: "html",
+			data: params
+		}).done(function( responseText ) {
+
+			// Save response for use in complete callback
+			response = arguments;
+
+			self.html( selector ?
+
+				// If a selector was specified, locate the right elements in a dummy div
+				// Exclude scripts to avoid IE 'Permission Denied' errors
+				jQuery("<div>").append( jQuery.parseHTML( responseText ) ).find( selector ) :
+
+				// Otherwise use the full result
+				responseText );
+
+		}).complete( callback && function( jqXHR, status ) {
+			self.each( callback, response || [ jqXHR.responseText, status, jqXHR ] );
+		});
+	}
+
+	return this;
+};
+
+// Attach a bunch of functions for handling common AJAX events
+jQuery.each( [ "ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend" ], function( i, type ){
+	jQuery.fn[ type ] = function( fn ){
+		return this.on( type, fn );
+	};
+});
+
+jQuery.each( [ "get", "post" ], function( i, method ) {
+	jQuery[ method ] = function( url, data, callback, type ) {
+		// shift arguments if data argument was omitted
+		if ( jQuery.isFunction( data ) ) {
+			type = type || callback;
+			callback = data;
+			data = undefined;
+		}
+
+		return jQuery.ajax({
+			url: url,
+			type: method,
+			dataType: type,
+			data: data,
+			success: callback
+		});
+	};
+});
+
+jQuery.extend({
+
+	// Counter for holding the number of active queries
+	active: 0,
+
+	// Last-Modified header cache for next request
+	lastModified: {},
+	etag: {},
+
+	ajaxSettings: {
+		url: ajaxLocation,
+		type: "GET",
+		isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),
+		global: true,
+		processData: true,
+		async: true,
+		contentType: "application/x-www-form-urlencoded; charset=UTF-8",
+		/*
+		timeout: 0,
+		data: null,
+		dataType: null,
+		username: null,
+		password: null,
+		cache: null,
+		throws: false,
+		traditional: false,
+		headers: {},
+		*/
+
+		accepts: {
+			"*": allTypes,
+			text: "text/plain",
+			html: "text/html",
+			xml: "application/xml, text/xml",
+			json: "application/json, text/javascript"
+		},
+
+		contents: {
+			xml: /xml/,
+			html: /html/,
+			json: /json/
+		},
+
+		responseFields: {
+			xml: "responseXML",
+			text: "responseText"
+		},
+
+		// Data converters
+		// Keys separate source (or catchall "*") and destination types with a single space
+		converters: {
+
+			// Convert anything to text
+			"* text": window.String,
+
+			// Text to html (true = no transformation)
+			"text html": true,
+
+			// Evaluate text as a json expression
+			"text json": jQuery.parseJSON,
+
+			// Parse text as xml
+			"text xml": jQuery.parseXML
+		},
+
+		// For options that shouldn't be deep extended:
+		// you can add your own custom options here if
+		// and when you create one that shouldn't be
+		// deep extended (see ajaxExtend)
+		flatOptions: {
+			url: true,
+			context: true
+		}
+	},
+
+	// Creates a full fledged settings object into target
+	// with both ajaxSettings and settings fields.
+	// If target is omitted, writes into ajaxSettings.
+	ajaxSetup: function( target, settings ) {
+		return settings ?
+
+			// Building a settings object
+			ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
+
+			// Extending ajaxSettings
+			ajaxExtend( jQuery.ajaxSettings, target );
+	},
+
+	ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
+	ajaxTransport: addToPrefiltersOrTransports( transports ),
+
+	// Main method
+	ajax: function( url, options ) {
+
+		// If url is an object, simulate pre-1.5 signature
+		if ( typeof url === "object" ) {
+			options = url;
+			url = undefined;
+		}
+
+		// Force options to be an object
+		options = options || {};
+
+		var transport,
+			// URL without anti-cache param
+			cacheURL,
+			// Response headers
+			responseHeadersString,
+			responseHeaders,
+			// timeout handle
+			timeoutTimer,
+			// Cross-domain detection vars
+			parts,
+			// To know if global events are to be dispatched
+			fireGlobals,
+			// Loop variable
+			i,
+			// Create the final options object
+			s = jQuery.ajaxSetup( {}, options ),
+			// Callbacks context
+			callbackContext = s.context || s,
+			// Context for global events is callbackContext if it is a DOM node or jQuery collection
+			globalEventContext = s.context && ( callbackContext.nodeType || callbackContext.jquery ) ?
+				jQuery( callbackContext ) :
+				jQuery.event,
+			// Deferreds
+			deferred = jQuery.Deferred(),
+			completeDeferred = jQuery.Callbacks("once memory"),
+			// Status-dependent callbacks
+			statusCode = s.statusCode || {},
+			// Headers (they are sent all at once)
+			requestHeaders = {},
+			requestHeadersNames = {},
+			// The jqXHR state
+			state = 0,
+			// Default abort message
+			strAbort = "canceled",
+			// Fake xhr
+			jqXHR = {
+				readyState: 0,
+
+				// Builds headers hashtable if needed
+				getResponseHeader: function( key ) {
+					var match;
+					if ( state === 2 ) {
+						if ( !responseHeaders ) {
+							responseHeaders = {};
+							while ( (match = rheaders.exec( responseHeadersString )) ) {
+								responseHeaders[ match[1].toLowerCase() ] = match[ 2 ];
+							}
+						}
+						match = responseHeaders[ key.toLowerCase() ];
+					}
+					return match == null ? null : match;
+				},
+
+				// Raw string
+				getAllResponseHeaders: function() {
+					return state === 2 ? responseHeadersString : null;
+				},
+
+				// Caches the header
+				setRequestHeader: function( name, value ) {
+					var lname = name.toLowerCase();
+					if ( !state ) {
+						name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
+						requestHeaders[ name ] = value;
+					}
+					return this;
+				},
+
+				// Overrides response content-type header
+				overrideMimeType: function( type ) {
+					if ( !state ) {
+						s.mimeType = type;
+					}
+					return this;
+				},
+
+				// Status-dependent callbacks
+				statusCode: function( map ) {
+					var code;
+					if ( map ) {
+						if ( state < 2 ) {
+							for ( code in map ) {
+								// Lazy-add the new callback in a way that preserves old ones
+								statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
+							}
+						} else {
+							// Execute the appropriate callbacks
+							jqXHR.always( map[ jqXHR.status ] );
+						}
+					}
+					return this;
+				},
+
+				// Cancel the request
+				abort: function( statusText ) {
+					var finalText = statusText || strAbort;
+					if ( transport ) {
+						transport.abort( finalText );
+					}
+					done( 0, finalText );
+					return this;
+				}
+			};
+
+		// Attach deferreds
+		deferred.promise( jqXHR ).complete = completeDeferred.add;
+		jqXHR.success = jqXHR.done;
+		jqXHR.error = jqXHR.fail;
+
+		// Remove hash character (#7531: and string promotion)
+		// Add protocol if not provided (#5866: IE7 issue with protocol-less urls)
+		// Handle falsy url in the settings object (#10093: consistency with old signature)
+		// We also use the url parameter if available
+		s.url = ( ( url || s.url || ajaxLocation ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" );
+
+		// Alias method option to type as per ticket #12004
+		s.type = options.method || options.type || s.method || s.type;
+
+		// Extract dataTypes list
+		s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().match( core_rnotwhite ) || [""];
+
+		// A cross-domain request is in order when we have a protocol:host:port mismatch
+		if ( s.crossDomain == null ) {
+			parts = rurl.exec( s.url.toLowerCase() );
+			s.crossDomain = !!( parts &&
+				( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] ||
+					( parts[ 3 ] || ( parts[ 1 ] === "http:" ? 80 : 443 ) ) !=
+						( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? 80 : 443 ) ) )
+			);
+		}
+
+		// Convert data if not already a string
+		if ( s.data && s.processData && typeof s.data !== "string" ) {
+			s.data = jQuery.param( s.data, s.traditional );
+		}
+
+		// Apply prefilters
+		inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
+
+		// If request was aborted inside a prefilter, stop there
+		if ( state === 2 ) {
+			return jqXHR;
+		}
+
+		// We can fire global events as of now if asked to
+		fireGlobals = s.global;
+
+		// Watch for a new set of requests
+		if ( fireGlobals && jQuery.active++ === 0 ) {
+			jQuery.event.trigger("ajaxStart");
+		}
+
+		// Uppercase the type
+		s.type = s.type.toUpperCase();
+
+		// Determine if request has content
+		s.hasContent = !rnoContent.test( s.type );
+
+		// Save the URL in case we're toying with the If-Modified-Since
+		// and/or If-None-Match header later on
+		cacheURL = s.url;
+
+		// More options handling for requests with no content
+		if ( !s.hasContent ) {
+
+			// If data is available, append data to url
+			if ( s.data ) {
+				cacheURL = ( s.url += ( ajax_rquery.test( cacheURL ) ? "&" : "?" ) + s.data );
+				// #9682: remove data so that it's not used in an eventual retry
+				delete s.data;
+			}
+
+			// Add anti-cache in url if needed
+			if ( s.cache === false ) {
+				s.url = rts.test( cacheURL ) ?
+
+					// If there is already a '_' parameter, set its value
+					cacheURL.replace( rts, "$1_=" + ajax_nonce++ ) :
+
+					// Otherwise add one to the end
+					cacheURL + ( ajax_rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ajax_nonce++;
+			}
+		}
+
+		// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+		if ( s.ifModified ) {
+			if ( jQuery.lastModified[ cacheURL ] ) {
+				jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
+			}
+			if ( jQuery.etag[ cacheURL ] ) {
+				jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
+			}
+		}
+
+		// Set the correct header, if data is being sent
+		if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
+			jqXHR.setRequestHeader( "Content-Type", s.contentType );
+		}
+
+		// Set the Accepts header for the server, depending on the dataType
+		jqXHR.setRequestHeader(
+			"Accept",
+			s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?
+				s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
+				s.accepts[ "*" ]
+		);
+
+		// Check for headers option
+		for ( i in s.headers ) {
+			jqXHR.setRequestHeader( i, s.headers[ i ] );
+		}
+
+		// Allow custom headers/mimetypes and early abort
+		if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
+			// Abort if not done already and return
+			return jqXHR.abort();
+		}
+
+		// aborting is no longer a cancellation
+		strAbort = "abort";
+
+		// Install callbacks on deferreds
+		for ( i in { success: 1, error: 1, complete: 1 } ) {
+			jqXHR[ i ]( s[ i ] );
+		}
+
+		// Get transport
+		transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
+
+		// If no transport, we auto-abort
+		if ( !transport ) {
+			done( -1, "No Transport" );
+		} else {
+			jqXHR.readyState = 1;
+
+			// Send global event
+			if ( fireGlobals ) {
+				globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
+			}
+			// Timeout
+			if ( s.async && s.timeout > 0 ) {
+				timeoutTimer = setTimeout(function() {
+					jqXHR.abort("timeout");
+				}, s.timeout );
+			}
+
+			try {
+				state = 1;
+				transport.send( requestHeaders, done );
+			} catch ( e ) {
+				// Propagate exception as error if not done
+				if ( state < 2 ) {
+					done( -1, e );
+				// Simply rethrow otherwise
+				} else {
+					throw e;
+				}
+			}
+		}
+
+		// Callback for when everything is done
+		function done( status, nativeStatusText, responses, headers ) {
+			var isSuccess, success, error, response, modified,
+				statusText = nativeStatusText;
+
+			// Called once
+			if ( state === 2 ) {
+				return;
+			}
+
+			// State is "done" now
+			state = 2;
+
+			// Clear timeout if it exists
+			if ( timeoutTimer ) {
+				clearTimeout( timeoutTimer );
+			}
+
+			// Dereference transport for early garbage collection
+			// (no matter how long the jqXHR object will be used)
+			transport = undefined;
+
+			// Cache response headers
+			responseHeadersString = headers || "";
+
+			// Set readyState
+			jqXHR.readyState = status > 0 ? 4 : 0;
+
+			// Get response data
+			if ( responses ) {
+				response = ajaxHandleResponses( s, jqXHR, responses );
+			}
+
+			// If successful, handle type chaining
+			if ( status >= 200 && status < 300 || status === 304 ) {
+
+				// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+				if ( s.ifModified ) {
+					modified = jqXHR.getResponseHeader("Last-Modified");
+					if ( modified ) {
+						jQuery.lastModified[ cacheURL ] = modified;
+					}
+					modified = jqXHR.getResponseHeader("etag");
+					if ( modified ) {
+						jQuery.etag[ cacheURL ] = modified;
+					}
+				}
+
+				// If not modified
+				if ( status === 304 ) {
+					isSuccess = true;
+					statusText = "notmodified";
+
+				// If we have data
+				} else {
+					isSuccess = ajaxConvert( s, response );
+					statusText = isSuccess.state;
+					success = isSuccess.data;
+					error = isSuccess.error;
+					isSuccess = !error;
+				}
+			} else {
+				// We extract error from statusText
+				// then normalize statusText and status for non-aborts
+				error = statusText;
+				if ( status || !statusText ) {
+					statusText = "error";
+					if ( status < 0 ) {
+						status = 0;
+					}
+				}
+			}
+
+			// Set data for the fake xhr object
+			jqXHR.status = status;
+			jqXHR.statusText = ( nativeStatusText || statusText ) + "";
+
+			// Success/Error
+			if ( isSuccess ) {
+				deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
+			} else {
+				deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
+			}
+
+			// Status-dependent callbacks
+			jqXHR.statusCode( statusCode );
+			statusCode = undefined;
+
+			if ( fireGlobals ) {
+				globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
+					[ jqXHR, s, isSuccess ? success : error ] );
+			}
+
+			// Complete
+			completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
+
+			if ( fireGlobals ) {
+				globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
+				// Handle the global AJAX counter
+				if ( !( --jQuery.active ) ) {
+					jQuery.event.trigger("ajaxStop");
+				}
+			}
+		}
+
+		return jqXHR;
+	},
+
+	getScript: function( url, callback ) {
+		return jQuery.get( url, undefined, callback, "script" );
+	},
+
+	getJSON: function( url, data, callback ) {
+		return jQuery.get( url, data, callback, "json" );
+	}
+});
+
+/* Handles responses to an ajax request:
+ * - sets all responseXXX fields accordingly
+ * - finds the right dataType (mediates between content-type and expected dataType)
+ * - returns the corresponding response
+ */
+function ajaxHandleResponses( s, jqXHR, responses ) {
+
+	var ct, type, finalDataType, firstDataType,
+		contents = s.contents,
+		dataTypes = s.dataTypes,
+		responseFields = s.responseFields;
+
+	// Fill responseXXX fields
+	for ( type in responseFields ) {
+		if ( type in responses ) {
+			jqXHR[ responseFields[type] ] = responses[ type ];
+		}
+	}
+
+	// Remove auto dataType and get content-type in the process
+	while( dataTypes[ 0 ] === "*" ) {
+		dataTypes.shift();
+		if ( ct === undefined ) {
+			ct = s.mimeType || jqXHR.getResponseHeader("Content-Type");
+		}
+	}
+
+	// Check if we're dealing with a known content-type
+	if ( ct ) {
+		for ( type in contents ) {
+			if ( contents[ type ] && contents[ type ].test( ct ) ) {
+				dataTypes.unshift( type );
+				break;
+			}
+		}
+	}
+
+	// Check to see if we have a response for the expected dataType
+	if ( dataTypes[ 0 ] in responses ) {
+		finalDataType = dataTypes[ 0 ];
+	} else {
+		// Try convertible dataTypes
+		for ( type in responses ) {
+			if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) {
+				finalDataType = type;
+				break;
+			}
+			if ( !firstDataType ) {
+				firstDataType = type;
+			}
+		}
+		// Or just use first one
+		finalDataType = finalDataType || firstDataType;
+	}
+
+	// If we found a dataType
+	// We add the dataType to the list if needed
+	// and return the corresponding response
+	if ( finalDataType ) {
+		if ( finalDataType !== dataTypes[ 0 ] ) {
+			dataTypes.unshift( finalDataType );
+		}
+		return responses[ finalDataType ];
+	}
+}
+
+// Chain conversions given the request and the original response
+function ajaxConvert( s, response ) {
+
+	var conv, conv2, current, tmp,
+		converters = {},
+		i = 0,
+		// Work with a copy of dataTypes in case we need to modify it for conversion
+		dataTypes = s.dataTypes.slice(),
+		prev = dataTypes[ 0 ];
+
+	// Apply the dataFilter if provided
+	if ( s.dataFilter ) {
+		response = s.dataFilter( response, s.dataType );
+	}
+
+	// Create converters map with lowercased keys
+	if ( dataTypes[ 1 ] ) {
+		for ( conv in s.converters ) {
+			converters[ conv.toLowerCase() ] = s.converters[ conv ];
+		}
+	}
+
+	// Convert to each sequential dataType, tolerating list modification
+	for ( ; (current = dataTypes[++i]); ) {
+
+		// There's only work to do if current dataType is non-auto
+		if ( current !== "*" ) {
+
+			// Convert response if prev dataType is non-auto and differs from current
+			if ( prev !== "*" && prev !== current ) {
+
+				// Seek a direct converter
+				conv = converters[ prev + " " + current ] || converters[ "* " + current ];
+
+				// If none found, seek a pair
+				if ( !conv ) {
+					for ( conv2 in converters ) {
+
+						// If conv2 outputs current
+						tmp = conv2.split(" ");
+						if ( tmp[ 1 ] === current ) {
+
+							// If prev can be converted to accepted input
+							conv = converters[ prev + " " + tmp[ 0 ] ] ||
+								converters[ "* " + tmp[ 0 ] ];
+							if ( conv ) {
+								// Condense equivalence converters
+								if ( conv === true ) {
+									conv = converters[ conv2 ];
+
+								// Otherwise, insert the intermediate dataType
+								} else if ( converters[ conv2 ] !== true ) {
+									current = tmp[ 0 ];
+									dataTypes.splice( i--, 0, current );
+								}
+
+								break;
+							}
+						}
+					}
+				}
+
+				// Apply converter (if not an equivalence)
+				if ( conv !== true ) {
+
+					// Unless errors are allowed to bubble, catch and return them
+					if ( conv && s["throws"] ) {
+						response = conv( response );
+					} else {
+						try {
+							response = conv( response );
+						} catch ( e ) {
+							return { state: "parsererror", error: conv ? e : "No conversion from " + prev + " to " + current };
+						}
+					}
+				}
+			}
+
+			// Update prev for next iteration
+			prev = current;
+		}
+	}
+
+	return { state: "success", data: response };
+}
+// Install script dataType
+jQuery.ajaxSetup({
+	accepts: {
+		script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
+	},
+	contents: {
+		script: /(?:java|ecma)script/
+	},
+	converters: {
+		"text script": function( text ) {
+			jQuery.globalEval( text );
+			return text;
+		}
+	}
+});
+
+// Handle cache's special case and global
+jQuery.ajaxPrefilter( "script", function( s ) {
+	if ( s.cache === undefined ) {
+		s.cache = false;
+	}
+	if ( s.crossDomain ) {
+		s.type = "GET";
+		s.global = false;
+	}
+});
+
+// Bind script tag hack transport
+jQuery.ajaxTransport( "script", function(s) {
+
+	// This transport only deals with cross domain requests
+	if ( s.crossDomain ) {
+
+		var script,
+			head = document.head || jQuery("head")[0] || document.documentElement;
+
+		return {
+
+			send: function( _, callback ) {
+
+				script = document.createElement("script");
+
+				script.async = true;
+
+				if ( s.scriptCharset ) {
+					script.charset = s.scriptCharset;
+				}
+
+				script.src = s.url;
+
+				// Attach handlers for all browsers
+				script.onload = script.onreadystatechange = function( _, isAbort ) {
+
+					if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {
+
+						// Handle memory leak in IE
+						script.onload = script.onreadystatechange = null;
+
+						// Remove the script
+						if ( script.parentNode ) {
+							script.parentNode.removeChild( script );
+						}
+
+						// Dereference the script
+						script = null;
+
+						// Callback if not abort
+						if ( !isAbort ) {
+							callback( 200, "success" );
+						}
+					}
+				};
+
+				// Circumvent IE6 bugs with base elements (#2709 and #4378) by prepending
+				// Use native DOM manipulation to avoid our domManip AJAX trickery
+				head.insertBefore( script, head.firstChild );
+			},
+
+			abort: function() {
+				if ( script ) {
+					script.onload( undefined, true );
+				}
+			}
+		};
+	}
+});
+var oldCallbacks = [],
+	rjsonp = /(=)\?(?=&|$)|\?\?/;
+
+// Default jsonp settings
+jQuery.ajaxSetup({
+	jsonp: "callback",
+	jsonpCallback: function() {
+		var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( ajax_nonce++ ) );
+		this[ callback ] = true;
+		return callback;
+	}
+});
+
+// Detect, normalize options and install callbacks for jsonp requests
+jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
+
+	var callbackName, overwritten, responseContainer,
+		jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
+			"url" :
+			typeof s.data === "string" && !( s.contentType || "" ).indexOf("application/x-www-form-urlencoded") && rjsonp.test( s.data ) && "data"
+		);
+
+	// Handle iff the expected data type is "jsonp" or we have a parameter to set
+	if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
+
+		// Get callback name, remembering preexisting value associated with it
+		callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?
+			s.jsonpCallback() :
+			s.jsonpCallback;
+
+		// Insert callback into url or form data
+		if ( jsonProp ) {
+			s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
+		} else if ( s.jsonp !== false ) {
+			s.url += ( ajax_rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
+		}
+
+		// Use data converter to retrieve json after script execution
+		s.converters["script json"] = function() {
+			if ( !responseContainer ) {
+				jQuery.error( callbackName + " was not called" );
+			}
+			return responseContainer[ 0 ];
+		};
+
+		// force json dataType
+		s.dataTypes[ 0 ] = "json";
+
+		// Install callback
+		overwritten = window[ callbackName ];
+		window[ callbackName ] = function() {
+			responseContainer = arguments;
+		};
+
+		// Clean-up function (fires after converters)
+		jqXHR.always(function() {
+			// Restore preexisting value
+			window[ callbackName ] = overwritten;
+
+			// Save back as free
+			if ( s[ callbackName ] ) {
+				// make sure that re-using the options doesn't screw things around
+				s.jsonpCallback = originalSettings.jsonpCallback;
+
+				// save the callback name for future use
+				oldCallbacks.push( callbackName );
+			}
+
+			// Call if it was a function and we have a response
+			if ( responseContainer && jQuery.isFunction( overwritten ) ) {
+				overwritten( responseContainer[ 0 ] );
+			}
+
+			responseContainer = overwritten = undefined;
+		});
+
+		// Delegate to script
+		return "script";
+	}
+});
+var xhrCallbacks, xhrSupported,
+	xhrId = 0,
+	// #5280: Internet Explorer will keep connections alive if we don't abort on unload
+	xhrOnUnloadAbort = window.ActiveXObject && function() {
+		// Abort all pending requests
+		var key;
+		for ( key in xhrCallbacks ) {
+			xhrCallbacks[ key ]( undefined, true );
+		}
+	};
+
+// Functions to create xhrs
+function createStandardXHR() {
+	try {
+		return new window.XMLHttpRequest();
+	} catch( e ) {}
+}
+
+function createActiveXHR() {
+	try {
+		return new window.ActiveXObject("Microsoft.XMLHTTP");
+	} catch( e ) {}
+}
+
+// Create the request object
+// (This is still attached to ajaxSettings for backward compatibility)
+jQuery.ajaxSettings.xhr = window.ActiveXObject ?
+	/* Microsoft failed to properly
+	 * implement the XMLHttpRequest in IE7 (can't request local files),
+	 * so we use the ActiveXObject when it is available
+	 * Additionally XMLHttpRequest can be disabled in IE7/IE8 so
+	 * we need a fallback.
+	 */
+	function() {
+		return !this.isLocal && createStandardXHR() || createActiveXHR();
+	} :
+	// For all other browsers, use the standard XMLHttpRequest object
+	createStandardXHR;
+
+// Determine support properties
+xhrSupported = jQuery.ajaxSettings.xhr();
+jQuery.support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
+xhrSupported = jQuery.support.ajax = !!xhrSupported;
+
+// Create transport if the browser can provide an xhr
+if ( xhrSupported ) {
+
+	jQuery.ajaxTransport(function( s ) {
+		// Cross domain only allowed if supported through XMLHttpRequest
+		if ( !s.crossDomain || jQuery.support.cors ) {
+
+			var callback;
+
+			return {
+				send: function( headers, complete ) {
+
+					// Get a new xhr
+					var handle, i,
+						xhr = s.xhr();
+
+					// Open the socket
+					// Passing null username, generates a login popup on Opera (#2865)
+					if ( s.username ) {
+						xhr.open( s.type, s.url, s.async, s.username, s.password );
+					} else {
+						xhr.open( s.type, s.url, s.async );
+					}
+
+					// Apply custom fields if provided
+					if ( s.xhrFields ) {
+						for ( i in s.xhrFields ) {
+							xhr[ i ] = s.xhrFields[ i ];
+						}
+					}
+
+					// Override mime type if needed
+					if ( s.mimeType && xhr.overrideMimeType ) {
+						xhr.overrideMimeType( s.mimeType );
+					}
+
+					// X-Requested-With header
+					// For cross-domain requests, seeing as conditions for a preflight are
+					// akin to a jigsaw puzzle, we simply never set it to be sure.
+					// (it can always be set on a per-request basis or even using ajaxSetup)
+					// For same-domain requests, won't change header if already provided.
+					if ( !s.crossDomain && !headers["X-Requested-With"] ) {
+						headers["X-Requested-With"] = "XMLHttpRequest";
+					}
+
+					// Need an extra try/catch for cross domain requests in Firefox 3
+					try {
+						for ( i in headers ) {
+							xhr.setRequestHeader( i, headers[ i ] );
+						}
+					} catch( err ) {}
+
+					// Do send the request
+					// This may raise an exception which is actually
+					// handled in jQuery.ajax (so no try/catch here)
+					xhr.send( ( s.hasContent && s.data ) || null );
+
+					// Listener
+					callback = function( _, isAbort ) {
+
+						var status,
+							statusText,
+							responseHeaders,
+							responses,
+							xml;
+
+						// Firefox throws exceptions when accessing properties
+						// of an xhr when a network error occurred
+						// http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE)
+						try {
+
+							// Was never called and is aborted or complete
+							if ( callback && ( isAbort || xhr.readyState === 4 ) ) {
+
+								// Only called once
+								callback = undefined;
+
+								// Do not keep as active anymore
+								if ( handle ) {
+									xhr.onreadystatechange = jQuery.noop;
+									if ( xhrOnUnloadAbort ) {
+										delete xhrCallbacks[ handle ];
+									}
+								}
+
+								// If it's an abort
+								if ( isAbort ) {
+									// Abort it manually if needed
+									if ( xhr.readyState !== 4 ) {
+										xhr.abort();
+									}
+								} else {
+									responses = {};
+									status = xhr.status;
+									xml = xhr.responseXML;
+									responseHeaders = xhr.getAllResponseHeaders();
+
+									// Construct response list
+									if ( xml && xml.documentElement /* #4958 */ ) {
+										responses.xml = xml;
+									}
+
+									// When requesting binary data, IE6-9 will throw an exception
+									// on any attempt to access responseText (#11426)
+									if ( typeof xhr.responseText === "string" ) {
+										responses.text = xhr.responseText;
+									}
+
+									// Firefox throws an exception when accessing
+									// statusText for faulty cross-domain requests
+									try {
+										statusText = xhr.statusText;
+									} catch( e ) {
+										// We normalize with Webkit giving an empty statusText
+										statusText = "";
+									}
+
+									// Filter status for non standard behaviors
+
+									// If the request is local and we have data: assume a success
+									// (success with no data won't get notified, that's the best we
+									// can do given current implementations)
+									if ( !status && s.isLocal && !s.crossDomain ) {
+										status = responses.text ? 200 : 404;
+									// IE - #1450: sometimes returns 1223 when it should be 204
+									} else if ( status === 1223 ) {
+										status = 204;
+									}
+								}
+							}
+						} catch( firefoxAccessException ) {
+							if ( !isAbort ) {
+								complete( -1, firefoxAccessException );
+							}
+						}
+
+						// Call complete if needed
+						if ( responses ) {
+							complete( status, statusText, responses, responseHeaders );
+						}
+					};
+
+					if ( !s.async ) {
+						// if we're in sync mode we fire the callback
+						callback();
+					} else if ( xhr.readyState === 4 ) {
+						// (IE6 & IE7) if it's in cache and has been
+						// retrieved directly we need to fire the callback
+						setTimeout( callback );
+					} else {
+						handle = ++xhrId;
+						if ( xhrOnUnloadAbort ) {
+							// Create the active xhrs callbacks list if needed
+							// and attach the unload handler
+							if ( !xhrCallbacks ) {
+								xhrCallbacks = {};
+								jQuery( window ).unload( xhrOnUnloadAbort );
+							}
+							// Add to list of active xhrs callbacks
+							xhrCallbacks[ handle ] = callback;
+						}
+						xhr.onreadystatechange = callback;
+					}
+				},
+
+				abort: function() {
+					if ( callback ) {
+						callback( undefined, true );
+					}
+				}
+			};
+		}
+	});
+}
+var fxNow, timerId,
+	rfxtypes = /^(?:toggle|show|hide)$/,
+	rfxnum = new RegExp( "^(?:([+-])=|)(" + core_pnum + ")([a-z%]*)$", "i" ),
+	rrun = /queueHooks$/,
+	animationPrefilters = [ defaultPrefilter ],
+	tweeners = {
+		"*": [function( prop, value ) {
+			var end, unit,
+				tween = this.createTween( prop, value ),
+				parts = rfxnum.exec( value ),
+				target = tween.cur(),
+				start = +target || 0,
+				scale = 1,
+				maxIterations = 20;
+
+			if ( parts ) {
+				end = +parts[2];
+				unit = parts[3] || ( jQuery.cssNumber[ prop ] ? "" : "px" );
+
+				// We need to compute starting value
+				if ( unit !== "px" && start ) {
+					// Iteratively approximate from a nonzero starting point
+					// Prefer the current property, because this process will be trivial if it uses the same units
+					// Fallback to end or a simple constant
+					start = jQuery.css( tween.elem, prop, true ) || end || 1;
+
+					do {
+						// If previous iteration zeroed out, double until we get *something*
+						// Use a string for doubling factor so we don't accidentally see scale as unchanged below
+						scale = scale || ".5";
+
+						// Adjust and apply
+						start = start / scale;
+						jQuery.style( tween.elem, prop, start + unit );
+
+					// Update scale, tolerating zero or NaN from tween.cur()
+					// And breaking the loop if scale is unchanged or perfect, or if we've just had enough
+					} while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations );
+				}
+
+				tween.unit = unit;
+				tween.start = start;
+				// If a +=/-= token was provided, we're doing a relative animation
+				tween.end = parts[1] ? start + ( parts[1] + 1 ) * end : end;
+			}
+			return tween;
+		}]
+	};
+
+// Animations created synchronously will run synchronously
+function createFxNow() {
+	setTimeout(function() {
+		fxNow = undefined;
+	});
+	return ( fxNow = jQuery.now() );
+}
+
+function createTweens( animation, props ) {
+	jQuery.each( props, function( prop, value ) {
+		var collection = ( tweeners[ prop ] || [] ).concat( tweeners[ "*" ] ),
+			index = 0,
+			length = collection.length;
+		for ( ; index < length; index++ ) {
+			if ( collection[ index ].call( animation, prop, value ) ) {
+
+				// we're done with this property
+				return;
+			}
+		}
+	});
+}
+
+function Animation( elem, properties, options ) {
+	var result,
+		stopped,
+		index = 0,
+		length = animationPrefilters.length,
+		deferred = jQuery.Deferred().always( function() {
+			// don't match elem in the :animated selector
+			delete tick.elem;
+		}),
+		tick = function() {
+			if ( stopped ) {
+				return false;
+			}
+			var currentTime = fxNow || createFxNow(),
+				remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
+				// archaic crash bug won't allow us to use 1 - ( 0.5 || 0 ) (#12497)
+				temp = remaining / animation.duration || 0,
+				percent = 1 - temp,
+				index = 0,
+				length = animation.tweens.length;
+
+			for ( ; index < length ; index++ ) {
+				animation.tweens[ index ].run( percent );
+			}
+
+			deferred.notifyWith( elem, [ animation, percent, remaining ]);
+
+			if ( percent < 1 && length ) {
+				return remaining;
+			} else {
+				deferred.resolveWith( elem, [ animation ] );
+				return false;
+			}
+		},
+		animation = deferred.promise({
+			elem: elem,
+			props: jQuery.extend( {}, properties ),
+			opts: jQuery.extend( true, { specialEasing: {} }, options ),
+			originalProperties: properties,
+			originalOptions: options,
+			startTime: fxNow || createFxNow(),
+			duration: options.duration,
+			tweens: [],
+			createTween: function( prop, end ) {
+				var tween = jQuery.Tween( elem, animation.opts, prop, end,
+						animation.opts.specialEasing[ prop ] || animation.opts.easing );
+				animation.tweens.push( tween );
+				return tween;
+			},
+			stop: function( gotoEnd ) {
+				var index = 0,
+					// if we are going to the end, we want to run all the tweens
+					// otherwise we skip this part
+					length = gotoEnd ? animation.tweens.length : 0;
+				if ( stopped ) {
+					return this;
+				}
+				stopped = true;
+				for ( ; index < length ; index++ ) {
+					animation.tweens[ index ].run( 1 );
+				}
+
+				// resolve when we played the last frame
+				// otherwise, reject
+				if ( gotoEnd ) {
+					deferred.resolveWith( elem, [ animation, gotoEnd ] );
+				} else {
+					deferred.rejectWith( elem, [ animation, gotoEnd ] );
+				}
+				return this;
+			}
+		}),
+		props = animation.props;
+
+	propFilter( props, animation.opts.specialEasing );
+
+	for ( ; index < length ; index++ ) {
+		result = animationPrefilters[ index ].call( animation, elem, props, animation.opts );
+		if ( result ) {
+			return result;
+		}
+	}
+
+	createTweens( animation, props );
+
+	if ( jQuery.isFunction( animation.opts.start ) ) {
+		animation.opts.start.call( elem, animation );
+	}
+
+	jQuery.fx.timer(
+		jQuery.extend( tick, {
+			elem: elem,
+			anim: animation,
+			queue: animation.opts.queue
+		})
+	);
+
+	// attach callbacks from options
+	return animation.progress( animation.opts.progress )
+		.done( animation.opts.done, animation.opts.complete )
+		.fail( animation.opts.fail )
+		.always( animation.opts.always );
+}
+
+function propFilter( props, specialEasing ) {
+	var index, name, easing, value, hooks;
+
+	// camelCase, specialEasing and expand cssHook pass
+	for ( index in props ) {
+		name = jQuery.camelCase( index );
+		easing = specialEasing[ name ];
+		value = props[ index ];
+		if ( jQuery.isArray( value ) ) {
+			easing = value[ 1 ];
+			value = props[ index ] = value[ 0 ];
+		}
+
+		if ( index !== name ) {
+			props[ name ] = value;
+			delete props[ index ];
+		}
+
+		hooks = jQuery.cssHooks[ name ];
+		if ( hooks && "expand" in hooks ) {
+			value = hooks.expand( value );
+			delete props[ name ];
+
+			// not quite $.extend, this wont overwrite keys already present.
+			// also - reusing 'index' from above because we have the correct "name"
+			for ( index in value ) {
+				if ( !( index in props ) ) {
+					props[ index ] = value[ index ];
+					specialEasing[ index ] = easing;
+				}
+			}
+		} else {
+			specialEasing[ name ] = easing;
+		}
+	}
+}
+
+jQuery.Animation = jQuery.extend( Animation, {
+
+	tweener: function( props, callback ) {
+		if ( jQuery.isFunction( props ) ) {
+			callback = props;
+			props = [ "*" ];
+		} else {
+			props = props.split(" ");
+		}
+
+		var prop,
+			index = 0,
+			length = props.length;
+
+		for ( ; index < length ; index++ ) {
+			prop = props[ index ];
+			tweeners[ prop ] = tweeners[ prop ] || [];
+			tweeners[ prop ].unshift( callback );
+		}
+	},
+
+	prefilter: function( callback, prepend ) {
+		if ( prepend ) {
+			animationPrefilters.unshift( callback );
+		} else {
+			animationPrefilters.push( callback );
+		}
+	}
+});
+
+function defaultPrefilter( elem, props, opts ) {
+	/*jshint validthis:true */
+	var index, prop, value, length, dataShow, toggle, tween, hooks, oldfire,
+		anim = this,
+		style = elem.style,
+		orig = {},
+		handled = [],
+		hidden = elem.nodeType && isHidden( elem );
+
+	// handle queue: false promises
+	if ( !opts.queue ) {
+		hooks = jQuery._queueHooks( elem, "fx" );
+		if ( hooks.unqueued == null ) {
+			hooks.unqueued = 0;
+			oldfire = hooks.empty.fire;
+			hooks.empty.fire = function() {
+				if ( !hooks.unqueued ) {
+					oldfire();
+				}
+			};
+		}
+		hooks.unqueued++;
+
+		anim.always(function() {
+			// doing this makes sure that the complete handler will be called
+			// before this completes
+			anim.always(function() {
+				hooks.unqueued--;
+				if ( !jQuery.queue( elem, "fx" ).length ) {
+					hooks.empty.fire();
+				}
+			});
+		});
+	}
+
+	// height/width overflow pass
+	if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) {
+		// Make sure that nothing sneaks out
+		// Record all 3 overflow attributes because IE does not
+		// change the overflow attribute when overflowX and
+		// overflowY are set to the same value
+		opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
+
+		// Set display property to inline-block for height/width
+		// animations on inline elements that are having width/height animated
+		if ( jQuery.css( elem, "display" ) === "inline" &&
+				jQuery.css( elem, "float" ) === "none" ) {
+
+			// inline-level elements accept inline-block;
+			// block-level elements need to be inline with layout
+			if ( !jQuery.support.inlineBlockNeedsLayout || css_defaultDisplay( elem.nodeName ) === "inline" ) {
+				style.display = "inline-block";
+
+			} else {
+				style.zoom = 1;
+			}
+		}
+	}
+
+	if ( opts.overflow ) {
+		style.overflow = "hidden";
+		if ( !jQuery.support.shrinkWrapBlocks ) {
+			anim.done(function() {
+				style.overflow = opts.overflow[ 0 ];
+				style.overflowX = opts.overflow[ 1 ];
+				style.overflowY = opts.overflow[ 2 ];
+			});
+		}
+	}
+
+
+	// show/hide pass
+	for ( index in props ) {
+		value = props[ index ];
+		if ( rfxtypes.exec( value ) ) {
+			delete props[ index ];
+			toggle = toggle || value === "toggle";
+			if ( value === ( hidden ? "hide" : "show" ) ) {
+				continue;
+			}
+			handled.push( index );
+		}
+	}
+
+	length = handled.length;
+	if ( length ) {
+		dataShow = jQuery._data( elem, "fxshow" ) || jQuery._data( elem, "fxshow", {} );
+		if ( "hidden" in dataShow ) {
+			hidden = dataShow.hidden;
+		}
+
+		// store state if its toggle - enables .stop().toggle() to "reverse"
+		if ( toggle ) {
+			dataShow.hidden = !hidden;
+		}
+		if ( hidden ) {
+			jQuery( elem ).show();
+		} else {
+			anim.done(function() {
+				jQuery( elem ).hide();
+			});
+		}
+		anim.done(function() {
+			var prop;
+			jQuery._removeData( elem, "fxshow" );
+			for ( prop in orig ) {
+				jQuery.style( elem, prop, orig[ prop ] );
+			}
+		});
+		for ( index = 0 ; index < length ; index++ ) {
+			prop = handled[ index ];
+			tween = anim.createTween( prop, hidden ? dataShow[ prop ] : 0 );
+			orig[ prop ] = dataShow[ prop ] || jQuery.style( elem, prop );
+
+			if ( !( prop in dataShow ) ) {
+				dataShow[ prop ] = tween.start;
+				if ( hidden ) {
+					tween.end = tween.start;
+					tween.start = prop === "width" || prop === "height" ? 1 : 0;
+				}
+			}
+		}
+	}
+}
+
+function Tween( elem, options, prop, end, easing ) {
+	return new Tween.prototype.init( elem, options, prop, end, easing );
+}
+jQuery.Tween = Tween;
+
+Tween.prototype = {
+	constructor: Tween,
+	init: function( elem, options, prop, end, easing, unit ) {
+		this.elem = elem;
+		this.prop = prop;
+		this.easing = easing || "swing";
+		this.options = options;
+		this.start = this.now = this.cur();
+		this.end = end;
+		this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
+	},
+	cur: function() {
+		var hooks = Tween.propHooks[ this.prop ];
+
+		return hooks && hooks.get ?
+			hooks.get( this ) :
+			Tween.propHooks._default.get( this );
+	},
+	run: function( percent ) {
+		var eased,
+			hooks = Tween.propHooks[ this.prop ];
+
+		if ( this.options.duration ) {
+			this.pos = eased = jQuery.easing[ this.easing ](
+				percent, this.options.duration * percent, 0, 1, this.options.duration
+			);
+		} else {
+			this.pos = eased = percent;
+		}
+		this.now = ( this.end - this.start ) * eased + this.start;
+
+		if ( this.options.step ) {
+			this.options.step.call( this.elem, this.now, this );
+		}
+
+		if ( hooks && hooks.set ) {
+			hooks.set( this );
+		} else {
+			Tween.propHooks._default.set( this );
+		}
+		return this;
+	}
+};
+
+Tween.prototype.init.prototype = Tween.prototype;
+
+Tween.propHooks = {
+	_default: {
+		get: function( tween ) {
+			var result;
+
+			if ( tween.elem[ tween.prop ] != null &&
+				(!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) {
+				return tween.elem[ tween.prop ];
+			}
+
+			// passing a non empty string as a 3rd parameter to .css will automatically
+			// attempt a parseFloat and fallback to a string if the parse fails
+			// so, simple values such as "10px" are parsed to Float.
+			// complex values such as "rotate(1rad)" are returned as is.
+			result = jQuery.css( tween.elem, tween.prop, "auto" );
+			// Empty strings, null, undefined and "auto" are converted to 0.
+			return !result || result === "auto" ? 0 : result;
+		},
+		set: function( tween ) {
+			// use step hook for back compat - use cssHook if its there - use .style if its
+			// available and use plain properties where available
+			if ( jQuery.fx.step[ tween.prop ] ) {
+				jQuery.fx.step[ tween.prop ]( tween );
+			} else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) {
+				jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
+			} else {
+				tween.elem[ tween.prop ] = tween.now;
+			}
+		}
+	}
+};
+
+// Remove in 2.0 - this supports IE8's panic based approach
+// to setting things on disconnected nodes
+
+Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
+	set: function( tween ) {
+		if ( tween.elem.nodeType && tween.elem.parentNode ) {
+			tween.elem[ tween.prop ] = tween.now;
+		}
+	}
+};
+
+jQuery.each([ "toggle", "show", "hide" ], function( i, name ) {
+	var cssFn = jQuery.fn[ name ];
+	jQuery.fn[ name ] = function( speed, easing, callback ) {
+		return speed == null || typeof speed === "boolean" ?
+			cssFn.apply( this, arguments ) :
+			this.animate( genFx( name, true ), speed, easing, callback );
+	};
+});
+
+jQuery.fn.extend({
+	fadeTo: function( speed, to, easing, callback ) {
+
+		// show any hidden elements after setting opacity to 0
+		return this.filter( isHidden ).css( "opacity", 0 ).show()
+
+			// animate to the value specified
+			.end().animate({ opacity: to }, speed, easing, callback );
+	},
+	animate: function( prop, speed, easing, callback ) {
+		var empty = jQuery.isEmptyObject( prop ),
+			optall = jQuery.speed( speed, easing, callback ),
+			doAnimation = function() {
+				// Operate on a copy of prop so per-property easing won't be lost
+				var anim = Animation( this, jQuery.extend( {}, prop ), optall );
+				doAnimation.finish = function() {
+					anim.stop( true );
+				};
+				// Empty animations, or finishing resolves immediately
+				if ( empty || jQuery._data( this, "finish" ) ) {
+					anim.stop( true );
+				}
+			};
+			doAnimation.finish = doAnimation;
+
+		return empty || optall.queue === false ?
+			this.each( doAnimation ) :
+			this.queue( optall.queue, doAnimation );
+	},
+	stop: function( type, clearQueue, gotoEnd ) {
+		var stopQueue = function( hooks ) {
+			var stop = hooks.stop;
+			delete hooks.stop;
+			stop( gotoEnd );
+		};
+
+		if ( typeof type !== "string" ) {
+			gotoEnd = clearQueue;
+			clearQueue = type;
+			type = undefined;
+		}
+		if ( clearQueue && type !== false ) {
+			this.queue( type || "fx", [] );
+		}
+
+		return this.each(function() {
+			var dequeue = true,
+				index = type != null && type + "queueHooks",
+				timers = jQuery.timers,
+				data = jQuery._data( this );
+
+			if ( index ) {
+				if ( data[ index ] && data[ index ].stop ) {
+					stopQueue( data[ index ] );
+				}
+			} else {
+				for ( index in data ) {
+					if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
+						stopQueue( data[ index ] );
+					}
+				}
+			}
+
+			for ( index = timers.length; index--; ) {
+				if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {
+					timers[ index ].anim.stop( gotoEnd );
+					dequeue = false;
+					timers.splice( index, 1 );
+				}
+			}
+
+			// start the next in the queue if the last step wasn't forced
+			// timers currently will call their complete callbacks, which will dequeue
+			// but only if they were gotoEnd
+			if ( dequeue || !gotoEnd ) {
+				jQuery.dequeue( this, type );
+			}
+		});
+	},
+	finish: function( type ) {
+		if ( type !== false ) {
+			type = type || "fx";
+		}
+		return this.each(function() {
+			var index,
+				data = jQuery._data( this ),
+				queue = data[ type + "queue" ],
+				hooks = data[ type + "queueHooks" ],
+				timers = jQuery.timers,
+				length = queue ? queue.length : 0;
+
+			// enable finishing flag on private data
+			data.finish = true;
+
+			// empty the queue first
+			jQuery.queue( this, type, [] );
+
+			if ( hooks && hooks.cur && hooks.cur.finish ) {
+				hooks.cur.finish.call( this );
+			}
+
+			// look for any active animations, and finish them
+			for ( index = timers.length; index--; ) {
+				if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
+					timers[ index ].anim.stop( true );
+					timers.splice( index, 1 );
+				}
+			}
+
+			// look for any animations in the old queue and finish them
+			for ( index = 0; index < length; index++ ) {
+				if ( queue[ index ] && queue[ index ].finish ) {
+					queue[ index ].finish.call( this );
+				}
+			}
+
+			// turn off finishing flag
+			delete data.finish;
+		});
+	}
+});
+
+// Generate parameters to create a standard animation
+function genFx( type, includeWidth ) {
+	var which,
+		attrs = { height: type },
+		i = 0;
+
+	// if we include width, step value is 1 to do all cssExpand values,
+	// if we don't include width, step value is 2 to skip over Left and Right
+	includeWidth = includeWidth? 1 : 0;
+	for( ; i < 4 ; i += 2 - includeWidth ) {
+		which = cssExpand[ i ];
+		attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
+	}
+
+	if ( includeWidth ) {
+		attrs.opacity = attrs.width = type;
+	}
+
+	return attrs;
+}
+
+// Generate shortcuts for custom animations
+jQuery.each({
+	slideDown: genFx("show"),
+	slideUp: genFx("hide"),
+	slideToggle: genFx("toggle"),
+	fadeIn: { opacity: "show" },
+	fadeOut: { opacity: "hide" },
+	fadeToggle: { opacity: "toggle" }
+}, function( name, props ) {
+	jQuery.fn[ name ] = function( speed, easing, callback ) {
+		return this.animate( props, speed, easing, callback );
+	};
+});
+
+jQuery.speed = function( speed, easing, fn ) {
+	var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
+		complete: fn || !fn && easing ||
+			jQuery.isFunction( speed ) && speed,
+		duration: speed,
+		easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
+	};
+
+	opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
+		opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;
+
+	// normalize opt.queue - true/undefined/null -> "fx"
+	if ( opt.queue == null || opt.queue === true ) {
+		opt.queue = "fx";
+	}
+
+	// Queueing
+	opt.old = opt.complete;
+
+	opt.complete = function() {
+		if ( jQuery.isFunction( opt.old ) ) {
+			opt.old.call( this );
+		}
+
+		if ( opt.queue ) {
+			jQuery.dequeue( this, opt.queue );
+		}
+	};
+
+	return opt;
+};
+
+jQuery.easing = {
+	linear: function( p ) {
+		return p;
+	},
+	swing: function( p ) {
+		return 0.5 - Math.cos( p*Math.PI ) / 2;
+	}
+};
+
+jQuery.timers = [];
+jQuery.fx = Tween.prototype.init;
+jQuery.fx.tick = function() {
+	var timer,
+		timers = jQuery.timers,
+		i = 0;
+
+	fxNow = jQuery.now();
+
+	for ( ; i < timers.length; i++ ) {
+		timer = timers[ i ];
+		// Checks the timer has not already been removed
+		if ( !timer() && timers[ i ] === timer ) {
+			timers.splice( i--, 1 );
+		}
+	}
+
+	if ( !timers.length ) {
+		jQuery.fx.stop();
+	}
+	fxNow = undefined;
+};
+
+jQuery.fx.timer = function( timer ) {
+	if ( timer() && jQuery.timers.push( timer ) ) {
+		jQuery.fx.start();
+	}
+};
+
+jQuery.fx.interval = 13;
+
+jQuery.fx.start = function() {
+	if ( !timerId ) {
+		timerId = setInterval( jQuery.fx.tick, jQuery.fx.interval );
+	}
+};
+
+jQuery.fx.stop = function() {
+	clearInterval( timerId );
+	timerId = null;
+};
+
+jQuery.fx.speeds = {
+	slow: 600,
+	fast: 200,
+	// Default speed
+	_default: 400
+};
+
+// Back Compat <1.8 extension point
+jQuery.fx.step = {};
+
+if ( jQuery.expr && jQuery.expr.filters ) {
+	jQuery.expr.filters.animated = function( elem ) {
+		return jQuery.grep(jQuery.timers, function( fn ) {
+			return elem === fn.elem;
+		}).length;
+	};
+}
+jQuery.fn.offset = function( options ) {
+	if ( arguments.length ) {
+		return options === undefined ?
+			this :
+			this.each(function( i ) {
+				jQuery.offset.setOffset( this, options, i );
+			});
+	}
+
+	var docElem, win,
+		box = { top: 0, left: 0 },
+		elem = this[ 0 ],
+		doc = elem && elem.ownerDocument;
+
+	if ( !doc ) {
+		return;
+	}
+
+	docElem = doc.documentElement;
+
+	// Make sure it's not a disconnected DOM node
+	if ( !jQuery.contains( docElem, elem ) ) {
+		return box;
+	}
+
+	// If we don't have gBCR, just use 0,0 rather than error
+	// BlackBerry 5, iOS 3 (original iPhone)
+	if ( typeof elem.getBoundingClientRect !== "undefined" ) {
+		box = elem.getBoundingClientRect();
+	}
+	win = getWindow( doc );
+	return {
+		top: box.top  + ( win.pageYOffset || docElem.scrollTop )  - ( docElem.clientTop  || 0 ),
+		left: box.left + ( win.pageXOffset || docElem.scrollLeft ) - ( docElem.clientLeft || 0 )
+	};
+};
+
+jQuery.offset = {
+
+	setOffset: function( elem, options, i ) {
+		var position = jQuery.css( elem, "position" );
+
+		// set position first, in-case top/left are set even on static elem
+		if ( position === "static" ) {
+			elem.style.position = "relative";
+		}
+
+		var curElem = jQuery( elem ),
+			curOffset = curElem.offset(),
+			curCSSTop = jQuery.css( elem, "top" ),
+			curCSSLeft = jQuery.css( elem, "left" ),
+			calculatePosition = ( position === "absolute" || position === "fixed" ) && jQuery.inArray("auto", [curCSSTop, curCSSLeft]) > -1,
+			props = {}, curPosition = {}, curTop, curLeft;
+
+		// need to be able to calculate position if either top or left is auto and position is either absolute or fixed
+		if ( calculatePosition ) {
+			curPosition = curElem.position();
+			curTop = curPosition.top;
+			curLeft = curPosition.left;
+		} else {
+			curTop = parseFloat( curCSSTop ) || 0;
+			curLeft = parseFloat( curCSSLeft ) || 0;
+		}
+
+		if ( jQuery.isFunction( options ) ) {
+			options = options.call( elem, i, curOffset );
+		}
+
+		if ( options.top != null ) {
+			props.top = ( options.top - curOffset.top ) + curTop;
+		}
+		if ( options.left != null ) {
+			props.left = ( options.left - curOffset.left ) + curLeft;
+		}
+
+		if ( "using" in options ) {
+			options.using.call( elem, props );
+		} else {
+			curElem.css( props );
+		}
+	}
+};
+
+
+jQuery.fn.extend({
+
+	position: function() {
+		if ( !this[ 0 ] ) {
+			return;
+		}
+
+		var offsetParent, offset,
+			parentOffset = { top: 0, left: 0 },
+			elem = this[ 0 ];
+
+		// fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is it's only offset parent
+		if ( jQuery.css( elem, "position" ) === "fixed" ) {
+			// we assume that getBoundingClientRect is available when computed position is fixed
+			offset = elem.getBoundingClientRect();
+		} else {
+			// Get *real* offsetParent
+			offsetParent = this.offsetParent();
+
+			// Get correct offsets
+			offset = this.offset();
+			if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) {
+				parentOffset = offsetParent.offset();
+			}
+
+			// Add offsetParent borders
+			parentOffset.top  += jQuery.css( offsetParent[ 0 ], "borderTopWidth", true );
+			parentOffset.left += jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true );
+		}
+
+		// Subtract parent offsets and element margins
+		// note: when an element has margin: auto the offsetLeft and marginLeft
+		// are the same in Safari causing offset.left to incorrectly be 0
+		return {
+			top:  offset.top  - parentOffset.top - jQuery.css( elem, "marginTop", true ),
+			left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true)
+		};
+	},
+
+	offsetParent: function() {
+		return this.map(function() {
+			var offsetParent = this.offsetParent || document.documentElement;
+			while ( offsetParent && ( !jQuery.nodeName( offsetParent, "html" ) && jQuery.css( offsetParent, "position") === "static" ) ) {
+				offsetParent = offsetParent.offsetParent;
+			}
+			return offsetParent || document.documentElement;
+		});
+	}
+});
+
+
+// Create scrollLeft and scrollTop methods
+jQuery.each( {scrollLeft: "pageXOffset", scrollTop: "pageYOffset"}, function( method, prop ) {
+	var top = /Y/.test( prop );
+
+	jQuery.fn[ method ] = function( val ) {
+		return jQuery.access( this, function( elem, method, val ) {
+			var win = getWindow( elem );
+
+			if ( val === undefined ) {
+				return win ? (prop in win) ? win[ prop ] :
+					win.document.documentElement[ method ] :
+					elem[ method ];
+			}
+
+			if ( win ) {
+				win.scrollTo(
+					!top ? val : jQuery( win ).scrollLeft(),
+					top ? val : jQuery( win ).scrollTop()
+				);
+
+			} else {
+				elem[ method ] = val;
+			}
+		}, method, val, arguments.length, null );
+	};
+});
+
+function getWindow( elem ) {
+	return jQuery.isWindow( elem ) ?
+		elem :
+		elem.nodeType === 9 ?
+			elem.defaultView || elem.parentWindow :
+			false;
+}
+// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
+jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
+	jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, function( defaultExtra, funcName ) {
+		// margin is only for outerHeight, outerWidth
+		jQuery.fn[ funcName ] = function( margin, value ) {
+			var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
+				extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
+
+			return jQuery.access( this, function( elem, type, value ) {
+				var doc;
+
+				if ( jQuery.isWindow( elem ) ) {
+					// As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there
+					// isn't a whole lot we can do. See pull request at this URL for discussion:
+					// https://github.com/jquery/jquery/pull/764
+					return elem.document.documentElement[ "client" + name ];
+				}
+
+				// Get document width or height
+				if ( elem.nodeType === 9 ) {
+					doc = elem.documentElement;
+
+					// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], whichever is greatest
+					// unfortunately, this causes bug #3838 in IE6/8 only, but there is currently no good, small way to fix it.
+					return Math.max(
+						elem.body[ "scroll" + name ], doc[ "scroll" + name ],
+						elem.body[ "offset" + name ], doc[ "offset" + name ],
+						doc[ "client" + name ]
+					);
+				}
+
+				return value === undefined ?
+					// Get width or height on the element, requesting but not forcing parseFloat
+					jQuery.css( elem, type, extra ) :
+
+					// Set width or height on the element
+					jQuery.style( elem, type, value, extra );
+			}, type, chainable ? margin : undefined, chainable, null );
+		};
+	});
+});
+// Limit scope pollution from any deprecated API
+// (function() {
+
+// })();
+// Expose jQuery to the global object
+window.jQuery = window.$ = jQuery;
+
+// Expose jQuery as an AMD module, but only for AMD loaders that
+// understand the issues with loading multiple versions of jQuery
+// in a page that all might call define(). The loader will indicate
+// they have special allowances for multiple jQuery versions by
+// specifying define.amd.jQuery = true. Register as a named module,
+// since jQuery can be concatenated with other files that may use define,
+// but not use a proper concatenation script that understands anonymous
+// AMD modules. A named AMD is safest and most robust way to register.
+// Lowercase jquery is used because AMD module names are derived from
+// file names, and jQuery is normally delivered in a lowercase file name.
+// Do this after creating the global so that if an AMD module wants to call
+// noConflict to hide this version of jQuery, it will work.
+if ( typeof define === "function" && define.amd && define.amd.jQuery ) {
+	define( "jquery", [], function () { return jQuery; } );
+}
+
+})( window );
\ No newline at end of file
diff --git a/vendor/dimsemenov/magnific-popup/libs/qunit/qunit.css b/vendor/dimsemenov/magnific-popup/libs/qunit/qunit.css
new file mode 100644
index 0000000000000000000000000000000000000000..d7fc0c8eccbfbf2a35d803948f853eb541cf47b2
--- /dev/null
+++ b/vendor/dimsemenov/magnific-popup/libs/qunit/qunit.css
@@ -0,0 +1,244 @@
+/**
+ * QUnit v1.11.0 - A JavaScript Unit Testing Framework
+ *
+ * http://qunitjs.com
+ *
+ * Copyright 2012 jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+/** Font Family and Sizes */
+
+#qunit-tests, #qunit-header, #qunit-banner, #qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult {
+	font-family: "Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial, sans-serif;
+}
+
+#qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult, #qunit-tests li { font-size: small; }
+#qunit-tests { font-size: smaller; }
+
+
+/** Resets */
+
+#qunit-tests, #qunit-header, #qunit-banner, #qunit-userAgent, #qunit-testresult, #qunit-modulefilter {
+	margin: 0;
+	padding: 0;
+}
+
+
+/** Header */
+
+#qunit-header {
+	padding: 0.5em 0 0.5em 1em;
+
+	color: #8699a4;
+	background-color: #0d3349;
+
+	font-size: 1.5em;
+	line-height: 1em;
+	font-weight: normal;
+
+	border-radius: 5px 5px 0 0;
+	-moz-border-radius: 5px 5px 0 0;
+	-webkit-border-top-right-radius: 5px;
+	-webkit-border-top-left-radius: 5px;
+}
+
+#qunit-header a {
+	text-decoration: none;
+	color: #c2ccd1;
+}
+
+#qunit-header a:hover,
+#qunit-header a:focus {
+	color: #fff;
+}
+
+#qunit-testrunner-toolbar label {
+	display: inline-block;
+	padding: 0 .5em 0 .1em;
+}
+
+#qunit-banner {
+	height: 5px;
+}
+
+#qunit-testrunner-toolbar {
+	padding: 0.5em 0 0.5em 2em;
+	color: #5E740B;
+	background-color: #eee;
+	overflow: hidden;
+}
+
+#qunit-userAgent {
+	padding: 0.5em 0 0.5em 2.5em;
+	background-color: #2b81af;
+	color: #fff;
+	text-shadow: rgba(0, 0, 0, 0.5) 2px 2px 1px;
+}
+
+#qunit-modulefilter-container {
+	float: right;
+}
+
+/** Tests: Pass/Fail */
+
+#qunit-tests {
+	list-style-position: inside;
+}
+
+#qunit-tests li {
+	padding: 0.4em 0.5em 0.4em 2.5em;
+	border-bottom: 1px solid #fff;
+	list-style-position: inside;
+}
+
+#qunit-tests.hidepass li.pass, #qunit-tests.hidepass li.running  {
+	display: none;
+}
+
+#qunit-tests li strong {
+	cursor: pointer;
+}
+
+#qunit-tests li a {
+	padding: 0.5em;
+	color: #c2ccd1;
+	text-decoration: none;
+}
+#qunit-tests li a:hover,
+#qunit-tests li a:focus {
+	color: #000;
+}
+
+#qunit-tests li .runtime {
+	float: right;
+	font-size: smaller;
+}
+
+.qunit-assert-list {
+	margin-top: 0.5em;
+	padding: 0.5em;
+
+	background-color: #fff;
+
+	border-radius: 5px;
+	-moz-border-radius: 5px;
+	-webkit-border-radius: 5px;
+}
+
+.qunit-collapsed {
+	display: none;
+}
+
+#qunit-tests table {
+	border-collapse: collapse;
+	margin-top: .2em;
+}
+
+#qunit-tests th {
+	text-align: right;
+	vertical-align: top;
+	padding: 0 .5em 0 0;
+}
+
+#qunit-tests td {
+	vertical-align: top;
+}
+
+#qunit-tests pre {
+	margin: 0;
+	white-space: pre-wrap;
+	word-wrap: break-word;
+}
+
+#qunit-tests del {
+	background-color: #e0f2be;
+	color: #374e0c;
+	text-decoration: none;
+}
+
+#qunit-tests ins {
+	background-color: #ffcaca;
+	color: #500;
+	text-decoration: none;
+}
+
+/*** Test Counts */
+
+#qunit-tests b.counts                       { color: black; }
+#qunit-tests b.passed                       { color: #5E740B; }
+#qunit-tests b.failed                       { color: #710909; }
+
+#qunit-tests li li {
+	padding: 5px;
+	background-color: #fff;
+	border-bottom: none;
+	list-style-position: inside;
+}
+
+/*** Passing Styles */
+
+#qunit-tests li li.pass {
+	color: #3c510c;
+	background-color: #fff;
+	border-left: 10px solid #C6E746;
+}
+
+#qunit-tests .pass                          { color: #528CE0; background-color: #D2E0E6; }
+#qunit-tests .pass .test-name               { color: #366097; }
+
+#qunit-tests .pass .test-actual,
+#qunit-tests .pass .test-expected           { color: #999999; }
+
+#qunit-banner.qunit-pass                    { background-color: #C6E746; }
+
+/*** Failing Styles */
+
+#qunit-tests li li.fail {
+	color: #710909;
+	background-color: #fff;
+	border-left: 10px solid #EE5757;
+	white-space: pre;
+}
+
+#qunit-tests > li:last-child {
+	border-radius: 0 0 5px 5px;
+	-moz-border-radius: 0 0 5px 5px;
+	-webkit-border-bottom-right-radius: 5px;
+	-webkit-border-bottom-left-radius: 5px;
+}
+
+#qunit-tests .fail                          { color: #000000; background-color: #EE5757; }
+#qunit-tests .fail .test-name,
+#qunit-tests .fail .module-name             { color: #000000; }
+
+#qunit-tests .fail .test-actual             { color: #EE5757; }
+#qunit-tests .fail .test-expected           { color: green;   }
+
+#qunit-banner.qunit-fail                    { background-color: #EE5757; }
+
+
+/** Result */
+
+#qunit-testresult {
+	padding: 0.5em 0.5em 0.5em 2.5em;
+
+	color: #2b81af;
+	background-color: #D2E0E6;
+
+	border-bottom: 1px solid white;
+}
+#qunit-testresult .module-name {
+	font-weight: bold;
+}
+
+/** Fixture */
+
+#qunit-fixture {
+	position: absolute;
+	top: -10000px;
+	left: -10000px;
+	width: 1000px;
+	height: 1000px;
+}
diff --git a/vendor/dimsemenov/magnific-popup/libs/qunit/qunit.js b/vendor/dimsemenov/magnific-popup/libs/qunit/qunit.js
new file mode 100644
index 0000000000000000000000000000000000000000..302545f4038e59c89a3647d2d176f92f436953ec
--- /dev/null
+++ b/vendor/dimsemenov/magnific-popup/libs/qunit/qunit.js
@@ -0,0 +1,2152 @@
+/**
+ * QUnit v1.11.0 - A JavaScript Unit Testing Framework
+ *
+ * http://qunitjs.com
+ *
+ * Copyright 2012 jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+(function( window ) {
+
+var QUnit,
+	assert,
+	config,
+	onErrorFnPrev,
+	testId = 0,
+	fileName = (sourceFromStacktrace( 0 ) || "" ).replace(/(:\d+)+\)?/, "").replace(/.+\//, ""),
+	toString = Object.prototype.toString,
+	hasOwn = Object.prototype.hasOwnProperty,
+	// Keep a local reference to Date (GH-283)
+	Date = window.Date,
+	defined = {
+		setTimeout: typeof window.setTimeout !== "undefined",
+		sessionStorage: (function() {
+			var x = "qunit-test-string";
+			try {
+				sessionStorage.setItem( x, x );
+				sessionStorage.removeItem( x );
+				return true;
+			} catch( e ) {
+				return false;
+			}
+		}())
+	},
+	/**
+	 * Provides a normalized error string, correcting an issue
+	 * with IE 7 (and prior) where Error.prototype.toString is
+	 * not properly implemented
+	 *
+	 * Based on http://es5.github.com/#x15.11.4.4
+	 *
+	 * @param {String|Error} error
+	 * @return {String} error message
+	 */
+	errorString = function( error ) {
+		var name, message,
+			errorString = error.toString();
+		if ( errorString.substring( 0, 7 ) === "[object" ) {
+			name = error.name ? error.name.toString() : "Error";
+			message = error.message ? error.message.toString() : "";
+			if ( name && message ) {
+				return name + ": " + message;
+			} else if ( name ) {
+				return name;
+			} else if ( message ) {
+				return message;
+			} else {
+				return "Error";
+			}
+		} else {
+			return errorString;
+		}
+	},
+	/**
+	 * Makes a clone of an object using only Array or Object as base,
+	 * and copies over the own enumerable properties.
+	 *
+	 * @param {Object} obj
+	 * @return {Object} New object with only the own properties (recursively).
+	 */
+	objectValues = function( obj ) {
+		// Grunt 0.3.x uses an older version of jshint that still has jshint/jshint#392.
+		/*jshint newcap: false */
+		var key, val,
+			vals = QUnit.is( "array", obj ) ? [] : {};
+		for ( key in obj ) {
+			if ( hasOwn.call( obj, key ) ) {
+				val = obj[key];
+				vals[key] = val === Object(val) ? objectValues(val) : val;
+			}
+		}
+		return vals;
+	};
+
+function Test( settings ) {
+	extend( this, settings );
+	this.assertions = [];
+	this.testNumber = ++Test.count;
+}
+
+Test.count = 0;
+
+Test.prototype = {
+	init: function() {
+		var a, b, li,
+			tests = id( "qunit-tests" );
+
+		if ( tests ) {
+			b = document.createElement( "strong" );
+			b.innerHTML = this.nameHtml;
+
+			// `a` initialized at top of scope
+			a = document.createElement( "a" );
+			a.innerHTML = "Rerun";
+			a.href = QUnit.url({ testNumber: this.testNumber });
+
+			li = document.createElement( "li" );
+			li.appendChild( b );
+			li.appendChild( a );
+			li.className = "running";
+			li.id = this.id = "qunit-test-output" + testId++;
+
+			tests.appendChild( li );
+		}
+	},
+	setup: function() {
+		if ( this.module !== config.previousModule ) {
+			if ( config.previousModule ) {
+				runLoggingCallbacks( "moduleDone", QUnit, {
+					name: config.previousModule,
+					failed: config.moduleStats.bad,
+					passed: config.moduleStats.all - config.moduleStats.bad,
+					total: config.moduleStats.all
+				});
+			}
+			config.previousModule = this.module;
+			config.moduleStats = { all: 0, bad: 0 };
+			runLoggingCallbacks( "moduleStart", QUnit, {
+				name: this.module
+			});
+		} else if ( config.autorun ) {
+			runLoggingCallbacks( "moduleStart", QUnit, {
+				name: this.module
+			});
+		}
+
+		config.current = this;
+
+		this.testEnvironment = extend({
+			setup: function() {},
+			teardown: function() {}
+		}, this.moduleTestEnvironment );
+
+		this.started = +new Date();
+		runLoggingCallbacks( "testStart", QUnit, {
+			name: this.testName,
+			module: this.module
+		});
+
+		// allow utility functions to access the current test environment
+		// TODO why??
+		QUnit.current_testEnvironment = this.testEnvironment;
+
+		if ( !config.pollution ) {
+			saveGlobal();
+		}
+		if ( config.notrycatch ) {
+			this.testEnvironment.setup.call( this.testEnvironment );
+			return;
+		}
+		try {
+			this.testEnvironment.setup.call( this.testEnvironment );
+		} catch( e ) {
+			QUnit.pushFailure( "Setup failed on " + this.testName + ": " + ( e.message || e ), extractStacktrace( e, 1 ) );
+		}
+	},
+	run: function() {
+		config.current = this;
+
+		var running = id( "qunit-testresult" );
+
+		if ( running ) {
+			running.innerHTML = "Running: <br/>" + this.nameHtml;
+		}
+
+		if ( this.async ) {
+			QUnit.stop();
+		}
+
+		this.callbackStarted = +new Date();
+
+		if ( config.notrycatch ) {
+			this.callback.call( this.testEnvironment, QUnit.assert );
+			this.callbackRuntime = +new Date() - this.callbackStarted;
+			return;
+		}
+
+		try {
+			this.callback.call( this.testEnvironment, QUnit.assert );
+			this.callbackRuntime = +new Date() - this.callbackStarted;
+		} catch( e ) {
+			this.callbackRuntime = +new Date() - this.callbackStarted;
+
+			QUnit.pushFailure( "Died on test #" + (this.assertions.length + 1) + " " + this.stack + ": " + ( e.message || e ), extractStacktrace( e, 0 ) );
+			// else next test will carry the responsibility
+			saveGlobal();
+
+			// Restart the tests if they're blocking
+			if ( config.blocking ) {
+				QUnit.start();
+			}
+		}
+	},
+	teardown: function() {
+		config.current = this;
+		if ( config.notrycatch ) {
+			if ( typeof this.callbackRuntime === "undefined" ) {
+				this.callbackRuntime = +new Date() - this.callbackStarted;
+			}
+			this.testEnvironment.teardown.call( this.testEnvironment );
+			return;
+		} else {
+			try {
+				this.testEnvironment.teardown.call( this.testEnvironment );
+			} catch( e ) {
+				QUnit.pushFailure( "Teardown failed on " + this.testName + ": " + ( e.message || e ), extractStacktrace( e, 1 ) );
+			}
+		}
+		checkPollution();
+	},
+	finish: function() {
+		config.current = this;
+		if ( config.requireExpects && this.expected === null ) {
+			QUnit.pushFailure( "Expected number of assertions to be defined, but expect() was not called.", this.stack );
+		} else if ( this.expected !== null && this.expected !== this.assertions.length ) {
+			QUnit.pushFailure( "Expected " + this.expected + " assertions, but " + this.assertions.length + " were run", this.stack );
+		} else if ( this.expected === null && !this.assertions.length ) {
+			QUnit.pushFailure( "Expected at least one assertion, but none were run - call expect(0) to accept zero assertions.", this.stack );
+		}
+
+		var i, assertion, a, b, time, li, ol,
+			test = this,
+			good = 0,
+			bad = 0,
+			tests = id( "qunit-tests" );
+
+		this.runtime = +new Date() - this.started;
+		config.stats.all += this.assertions.length;
+		config.moduleStats.all += this.assertions.length;
+
+		if ( tests ) {
+			ol = document.createElement( "ol" );
+			ol.className = "qunit-assert-list";
+
+			for ( i = 0; i < this.assertions.length; i++ ) {
+				assertion = this.assertions[i];
+
+				li = document.createElement( "li" );
+				li.className = assertion.result ? "pass" : "fail";
+				li.innerHTML = assertion.message || ( assertion.result ? "okay" : "failed" );
+				ol.appendChild( li );
+
+				if ( assertion.result ) {
+					good++;
+				} else {
+					bad++;
+					config.stats.bad++;
+					config.moduleStats.bad++;
+				}
+			}
+
+			// store result when possible
+			if ( QUnit.config.reorder && defined.sessionStorage ) {
+				if ( bad ) {
+					sessionStorage.setItem( "qunit-test-" + this.module + "-" + this.testName, bad );
+				} else {
+					sessionStorage.removeItem( "qunit-test-" + this.module + "-" + this.testName );
+				}
+			}
+
+			if ( bad === 0 ) {
+				addClass( ol, "qunit-collapsed" );
+			}
+
+			// `b` initialized at top of scope
+			b = document.createElement( "strong" );
+			b.innerHTML = this.nameHtml + " <b class='counts'>(<b class='failed'>" + bad + "</b>, <b class='passed'>" + good + "</b>, " + this.assertions.length + ")</b>";
+
+			addEvent(b, "click", function() {
+				var next = b.parentNode.lastChild,
+					collapsed = hasClass( next, "qunit-collapsed" );
+				( collapsed ? removeClass : addClass )( next, "qunit-collapsed" );
+			});
+
+			addEvent(b, "dblclick", function( e ) {
+				var target = e && e.target ? e.target : window.event.srcElement;
+				if ( target.nodeName.toLowerCase() === "span" || target.nodeName.toLowerCase() === "b" ) {
+					target = target.parentNode;
+				}
+				if ( window.location && target.nodeName.toLowerCase() === "strong" ) {
+					window.location = QUnit.url({ testNumber: test.testNumber });
+				}
+			});
+
+			// `time` initialized at top of scope
+			time = document.createElement( "span" );
+			time.className = "runtime";
+			time.innerHTML = this.runtime + " ms";
+
+			// `li` initialized at top of scope
+			li = id( this.id );
+			li.className = bad ? "fail" : "pass";
+			li.removeChild( li.firstChild );
+			a = li.firstChild;
+			li.appendChild( b );
+			li.appendChild( a );
+			li.appendChild( time );
+			li.appendChild( ol );
+
+		} else {
+			for ( i = 0; i < this.assertions.length; i++ ) {
+				if ( !this.assertions[i].result ) {
+					bad++;
+					config.stats.bad++;
+					config.moduleStats.bad++;
+				}
+			}
+		}
+
+		runLoggingCallbacks( "testDone", QUnit, {
+			name: this.testName,
+			module: this.module,
+			failed: bad,
+			passed: this.assertions.length - bad,
+			total: this.assertions.length,
+			duration: this.runtime
+		});
+
+		QUnit.reset();
+
+		config.current = undefined;
+	},
+
+	queue: function() {
+		var bad,
+			test = this;
+
+		synchronize(function() {
+			test.init();
+		});
+		function run() {
+			// each of these can by async
+			synchronize(function() {
+				test.setup();
+			});
+			synchronize(function() {
+				test.run();
+			});
+			synchronize(function() {
+				test.teardown();
+			});
+			synchronize(function() {
+				test.finish();
+			});
+		}
+
+		// `bad` initialized at top of scope
+		// defer when previous test run passed, if storage is available
+		bad = QUnit.config.reorder && defined.sessionStorage &&
+						+sessionStorage.getItem( "qunit-test-" + this.module + "-" + this.testName );
+
+		if ( bad ) {
+			run();
+		} else {
+			synchronize( run, true );
+		}
+	}
+};
+
+// Root QUnit object.
+// `QUnit` initialized at top of scope
+QUnit = {
+
+	// call on start of module test to prepend name to all tests
+	module: function( name, testEnvironment ) {
+		config.currentModule = name;
+		config.currentModuleTestEnvironment = testEnvironment;
+		config.modules[name] = true;
+	},
+
+	asyncTest: function( testName, expected, callback ) {
+		if ( arguments.length === 2 ) {
+			callback = expected;
+			expected = null;
+		}
+
+		QUnit.test( testName, expected, callback, true );
+	},
+
+	test: function( testName, expected, callback, async ) {
+		var test,
+			nameHtml = "<span class='test-name'>" + escapeText( testName ) + "</span>";
+
+		if ( arguments.length === 2 ) {
+			callback = expected;
+			expected = null;
+		}
+
+		if ( config.currentModule ) {
+			nameHtml = "<span class='module-name'>" + escapeText( config.currentModule ) + "</span>: " + nameHtml;
+		}
+
+		test = new Test({
+			nameHtml: nameHtml,
+			testName: testName,
+			expected: expected,
+			async: async,
+			callback: callback,
+			module: config.currentModule,
+			moduleTestEnvironment: config.currentModuleTestEnvironment,
+			stack: sourceFromStacktrace( 2 )
+		});
+
+		if ( !validTest( test ) ) {
+			return;
+		}
+
+		test.queue();
+	},
+
+	// Specify the number of expected assertions to gurantee that failed test (no assertions are run at all) don't slip through.
+	expect: function( asserts ) {
+		if (arguments.length === 1) {
+			config.current.expected = asserts;
+		} else {
+			return config.current.expected;
+		}
+	},
+
+	start: function( count ) {
+		// QUnit hasn't been initialized yet.
+		// Note: RequireJS (et al) may delay onLoad
+		if ( config.semaphore === undefined ) {
+			QUnit.begin(function() {
+				// This is triggered at the top of QUnit.load, push start() to the event loop, to allow QUnit.load to finish first
+				setTimeout(function() {
+					QUnit.start( count );
+				});
+			});
+			return;
+		}
+
+		config.semaphore -= count || 1;
+		// don't start until equal number of stop-calls
+		if ( config.semaphore > 0 ) {
+			return;
+		}
+		// ignore if start is called more often then stop
+		if ( config.semaphore < 0 ) {
+			config.semaphore = 0;
+			QUnit.pushFailure( "Called start() while already started (QUnit.config.semaphore was 0 already)", null, sourceFromStacktrace(2) );
+			return;
+		}
+		// A slight delay, to avoid any current callbacks
+		if ( defined.setTimeout ) {
+			window.setTimeout(function() {
+				if ( config.semaphore > 0 ) {
+					return;
+				}
+				if ( config.timeout ) {
+					clearTimeout( config.timeout );
+				}
+
+				config.blocking = false;
+				process( true );
+			}, 13);
+		} else {
+			config.blocking = false;
+			process( true );
+		}
+	},
+
+	stop: function( count ) {
+		config.semaphore += count || 1;
+		config.blocking = true;
+
+		if ( config.testTimeout && defined.setTimeout ) {
+			clearTimeout( config.timeout );
+			config.timeout = window.setTimeout(function() {
+				QUnit.ok( false, "Test timed out" );
+				config.semaphore = 1;
+				QUnit.start();
+			}, config.testTimeout );
+		}
+	}
+};
+
+// `assert` initialized at top of scope
+// Asssert helpers
+// All of these must either call QUnit.push() or manually do:
+// - runLoggingCallbacks( "log", .. );
+// - config.current.assertions.push({ .. });
+// We attach it to the QUnit object *after* we expose the public API,
+// otherwise `assert` will become a global variable in browsers (#341).
+assert = {
+	/**
+	 * Asserts rough true-ish result.
+	 * @name ok
+	 * @function
+	 * @example ok( "asdfasdf".length > 5, "There must be at least 5 chars" );
+	 */
+	ok: function( result, msg ) {
+		if ( !config.current ) {
+			throw new Error( "ok() assertion outside test context, was " + sourceFromStacktrace(2) );
+		}
+		result = !!result;
+
+		var source,
+			details = {
+				module: config.current.module,
+				name: config.current.testName,
+				result: result,
+				message: msg
+			};
+
+		msg = escapeText( msg || (result ? "okay" : "failed" ) );
+		msg = "<span class='test-message'>" + msg + "</span>";
+
+		if ( !result ) {
+			source = sourceFromStacktrace( 2 );
+			if ( source ) {
+				details.source = source;
+				msg += "<table><tr class='test-source'><th>Source: </th><td><pre>" + escapeText( source ) + "</pre></td></tr></table>";
+			}
+		}
+		runLoggingCallbacks( "log", QUnit, details );
+		config.current.assertions.push({
+			result: result,
+			message: msg
+		});
+	},
+
+	/**
+	 * Assert that the first two arguments are equal, with an optional message.
+	 * Prints out both actual and expected values.
+	 * @name equal
+	 * @function
+	 * @example equal( format( "Received {0} bytes.", 2), "Received 2 bytes.", "format() replaces {0} with next argument" );
+	 */
+	equal: function( actual, expected, message ) {
+		/*jshint eqeqeq:false */
+		QUnit.push( expected == actual, actual, expected, message );
+	},
+
+	/**
+	 * @name notEqual
+	 * @function
+	 */
+	notEqual: function( actual, expected, message ) {
+		/*jshint eqeqeq:false */
+		QUnit.push( expected != actual, actual, expected, message );
+	},
+
+	/**
+	 * @name propEqual
+	 * @function
+	 */
+	propEqual: function( actual, expected, message ) {
+		actual = objectValues(actual);
+		expected = objectValues(expected);
+		QUnit.push( QUnit.equiv(actual, expected), actual, expected, message );
+	},
+
+	/**
+	 * @name notPropEqual
+	 * @function
+	 */
+	notPropEqual: function( actual, expected, message ) {
+		actual = objectValues(actual);
+		expected = objectValues(expected);
+		QUnit.push( !QUnit.equiv(actual, expected), actual, expected, message );
+	},
+
+	/**
+	 * @name deepEqual
+	 * @function
+	 */
+	deepEqual: function( actual, expected, message ) {
+		QUnit.push( QUnit.equiv(actual, expected), actual, expected, message );
+	},
+
+	/**
+	 * @name notDeepEqual
+	 * @function
+	 */
+	notDeepEqual: function( actual, expected, message ) {
+		QUnit.push( !QUnit.equiv(actual, expected), actual, expected, message );
+	},
+
+	/**
+	 * @name strictEqual
+	 * @function
+	 */
+	strictEqual: function( actual, expected, message ) {
+		QUnit.push( expected === actual, actual, expected, message );
+	},
+
+	/**
+	 * @name notStrictEqual
+	 * @function
+	 */
+	notStrictEqual: function( actual, expected, message ) {
+		QUnit.push( expected !== actual, actual, expected, message );
+	},
+
+	"throws": function( block, expected, message ) {
+		var actual,
+			expectedOutput = expected,
+			ok = false;
+
+		// 'expected' is optional
+		if ( typeof expected === "string" ) {
+			message = expected;
+			expected = null;
+		}
+
+		config.current.ignoreGlobalErrors = true;
+		try {
+			block.call( config.current.testEnvironment );
+		} catch (e) {
+			actual = e;
+		}
+		config.current.ignoreGlobalErrors = false;
+
+		if ( actual ) {
+			// we don't want to validate thrown error
+			if ( !expected ) {
+				ok = true;
+				expectedOutput = null;
+			// expected is a regexp
+			} else if ( QUnit.objectType( expected ) === "regexp" ) {
+				ok = expected.test( errorString( actual ) );
+			// expected is a constructor
+			} else if ( actual instanceof expected ) {
+				ok = true;
+			// expected is a validation function which returns true is validation passed
+			} else if ( expected.call( {}, actual ) === true ) {
+				expectedOutput = null;
+				ok = true;
+			}
+
+			QUnit.push( ok, actual, expectedOutput, message );
+		} else {
+			QUnit.pushFailure( message, null, 'No exception was thrown.' );
+		}
+	}
+};
+
+/**
+ * @deprecate since 1.8.0
+ * Kept assertion helpers in root for backwards compatibility.
+ */
+extend( QUnit, assert );
+
+/**
+ * @deprecated since 1.9.0
+ * Kept root "raises()" for backwards compatibility.
+ * (Note that we don't introduce assert.raises).
+ */
+QUnit.raises = assert[ "throws" ];
+
+/**
+ * @deprecated since 1.0.0, replaced with error pushes since 1.3.0
+ * Kept to avoid TypeErrors for undefined methods.
+ */
+QUnit.equals = function() {
+	QUnit.push( false, false, false, "QUnit.equals has been deprecated since 2009 (e88049a0), use QUnit.equal instead" );
+};
+QUnit.same = function() {
+	QUnit.push( false, false, false, "QUnit.same has been deprecated since 2009 (e88049a0), use QUnit.deepEqual instead" );
+};
+
+// We want access to the constructor's prototype
+(function() {
+	function F() {}
+	F.prototype = QUnit;
+	QUnit = new F();
+	// Make F QUnit's constructor so that we can add to the prototype later
+	QUnit.constructor = F;
+}());
+
+/**
+ * Config object: Maintain internal state
+ * Later exposed as QUnit.config
+ * `config` initialized at top of scope
+ */
+config = {
+	// The queue of tests to run
+	queue: [],
+
+	// block until document ready
+	blocking: true,
+
+	// when enabled, show only failing tests
+	// gets persisted through sessionStorage and can be changed in UI via checkbox
+	hidepassed: false,
+
+	// by default, run previously failed tests first
+	// very useful in combination with "Hide passed tests" checked
+	reorder: true,
+
+	// by default, modify document.title when suite is done
+	altertitle: true,
+
+	// when enabled, all tests must call expect()
+	requireExpects: false,
+
+	// add checkboxes that are persisted in the query-string
+	// when enabled, the id is set to `true` as a `QUnit.config` property
+	urlConfig: [
+		{
+			id: "noglobals",
+			label: "Check for Globals",
+			tooltip: "Enabling this will test if any test introduces new properties on the `window` object. Stored as query-strings."
+		},
+		{
+			id: "notrycatch",
+			label: "No try-catch",
+			tooltip: "Enabling this will run tests outside of a try-catch block. Makes debugging exceptions in IE reasonable. Stored as query-strings."
+		}
+	],
+
+	// Set of all modules.
+	modules: {},
+
+	// logging callback queues
+	begin: [],
+	done: [],
+	log: [],
+	testStart: [],
+	testDone: [],
+	moduleStart: [],
+	moduleDone: []
+};
+
+// Export global variables, unless an 'exports' object exists,
+// in that case we assume we're in CommonJS (dealt with on the bottom of the script)
+if ( typeof exports === "undefined" ) {
+	extend( window, QUnit );
+
+	// Expose QUnit object
+	window.QUnit = QUnit;
+}
+
+// Initialize more QUnit.config and QUnit.urlParams
+(function() {
+	var i,
+		location = window.location || { search: "", protocol: "file:" },
+		params = location.search.slice( 1 ).split( "&" ),
+		length = params.length,
+		urlParams = {},
+		current;
+
+	if ( params[ 0 ] ) {
+		for ( i = 0; i < length; i++ ) {
+			current = params[ i ].split( "=" );
+			current[ 0 ] = decodeURIComponent( current[ 0 ] );
+			// allow just a key to turn on a flag, e.g., test.html?noglobals
+			current[ 1 ] = current[ 1 ] ? decodeURIComponent( current[ 1 ] ) : true;
+			urlParams[ current[ 0 ] ] = current[ 1 ];
+		}
+	}
+
+	QUnit.urlParams = urlParams;
+
+	// String search anywhere in moduleName+testName
+	config.filter = urlParams.filter;
+
+	// Exact match of the module name
+	config.module = urlParams.module;
+
+	config.testNumber = parseInt( urlParams.testNumber, 10 ) || null;
+
+	// Figure out if we're running the tests from a server or not
+	QUnit.isLocal = location.protocol === "file:";
+}());
+
+// Extend QUnit object,
+// these after set here because they should not be exposed as global functions
+extend( QUnit, {
+	assert: assert,
+
+	config: config,
+
+	// Initialize the configuration options
+	init: function() {
+		extend( config, {
+			stats: { all: 0, bad: 0 },
+			moduleStats: { all: 0, bad: 0 },
+			started: +new Date(),
+			updateRate: 1000,
+			blocking: false,
+			autostart: true,
+			autorun: false,
+			filter: "",
+			queue: [],
+			semaphore: 1
+		});
+
+		var tests, banner, result,
+			qunit = id( "qunit" );
+
+		if ( qunit ) {
+			qunit.innerHTML =
+				"<h1 id='qunit-header'>" + escapeText( document.title ) + "</h1>" +
+				"<h2 id='qunit-banner'></h2>" +
+				"<div id='qunit-testrunner-toolbar'></div>" +
+				"<h2 id='qunit-userAgent'></h2>" +
+				"<ol id='qunit-tests'></ol>";
+		}
+
+		tests = id( "qunit-tests" );
+		banner = id( "qunit-banner" );
+		result = id( "qunit-testresult" );
+
+		if ( tests ) {
+			tests.innerHTML = "";
+		}
+
+		if ( banner ) {
+			banner.className = "";
+		}
+
+		if ( result ) {
+			result.parentNode.removeChild( result );
+		}
+
+		if ( tests ) {
+			result = document.createElement( "p" );
+			result.id = "qunit-testresult";
+			result.className = "result";
+			tests.parentNode.insertBefore( result, tests );
+			result.innerHTML = "Running...<br/>&nbsp;";
+		}
+	},
+
+	// Resets the test setup. Useful for tests that modify the DOM.
+	reset: function() {
+		var fixture = id( "qunit-fixture" );
+		if ( fixture ) {
+			fixture.innerHTML = config.fixture;
+		}
+	},
+
+	// Trigger an event on an element.
+	// @example triggerEvent( document.body, "click" );
+	triggerEvent: function( elem, type, event ) {
+		if ( document.createEvent ) {
+			event = document.createEvent( "MouseEvents" );
+			event.initMouseEvent(type, true, true, elem.ownerDocument.defaultView,
+				0, 0, 0, 0, 0, false, false, false, false, 0, null);
+
+			elem.dispatchEvent( event );
+		} else if ( elem.fireEvent ) {
+			elem.fireEvent( "on" + type );
+		}
+	},
+
+	// Safe object type checking
+	is: function( type, obj ) {
+		return QUnit.objectType( obj ) === type;
+	},
+
+	objectType: function( obj ) {
+		if ( typeof obj === "undefined" ) {
+				return "undefined";
+		// consider: typeof null === object
+		}
+		if ( obj === null ) {
+				return "null";
+		}
+
+		var match = toString.call( obj ).match(/^\[object\s(.*)\]$/),
+			type = match && match[1] || "";
+
+		switch ( type ) {
+			case "Number":
+				if ( isNaN(obj) ) {
+					return "nan";
+				}
+				return "number";
+			case "String":
+			case "Boolean":
+			case "Array":
+			case "Date":
+			case "RegExp":
+			case "Function":
+				return type.toLowerCase();
+		}
+		if ( typeof obj === "object" ) {
+			return "object";
+		}
+		return undefined;
+	},
+
+	push: function( result, actual, expected, message ) {
+		if ( !config.current ) {
+			throw new Error( "assertion outside test context, was " + sourceFromStacktrace() );
+		}
+
+		var output, source,
+			details = {
+				module: config.current.module,
+				name: config.current.testName,
+				result: result,
+				message: message,
+				actual: actual,
+				expected: expected
+			};
+
+		message = escapeText( message ) || ( result ? "okay" : "failed" );
+		message = "<span class='test-message'>" + message + "</span>";
+		output = message;
+
+		if ( !result ) {
+			expected = escapeText( QUnit.jsDump.parse(expected) );
+			actual = escapeText( QUnit.jsDump.parse(actual) );
+			output += "<table><tr class='test-expected'><th>Expected: </th><td><pre>" + expected + "</pre></td></tr>";
+
+			if ( actual !== expected ) {
+				output += "<tr class='test-actual'><th>Result: </th><td><pre>" + actual + "</pre></td></tr>";
+				output += "<tr class='test-diff'><th>Diff: </th><td><pre>" + QUnit.diff( expected, actual ) + "</pre></td></tr>";
+			}
+
+			source = sourceFromStacktrace();
+
+			if ( source ) {
+				details.source = source;
+				output += "<tr class='test-source'><th>Source: </th><td><pre>" + escapeText( source ) + "</pre></td></tr>";
+			}
+
+			output += "</table>";
+		}
+
+		runLoggingCallbacks( "log", QUnit, details );
+
+		config.current.assertions.push({
+			result: !!result,
+			message: output
+		});
+	},
+
+	pushFailure: function( message, source, actual ) {
+		if ( !config.current ) {
+			throw new Error( "pushFailure() assertion outside test context, was " + sourceFromStacktrace(2) );
+		}
+
+		var output,
+			details = {
+				module: config.current.module,
+				name: config.current.testName,
+				result: false,
+				message: message
+			};
+
+		message = escapeText( message ) || "error";
+		message = "<span class='test-message'>" + message + "</span>";
+		output = message;
+
+		output += "<table>";
+
+		if ( actual ) {
+			output += "<tr class='test-actual'><th>Result: </th><td><pre>" + escapeText( actual ) + "</pre></td></tr>";
+		}
+
+		if ( source ) {
+			details.source = source;
+			output += "<tr class='test-source'><th>Source: </th><td><pre>" + escapeText( source ) + "</pre></td></tr>";
+		}
+
+		output += "</table>";
+
+		runLoggingCallbacks( "log", QUnit, details );
+
+		config.current.assertions.push({
+			result: false,
+			message: output
+		});
+	},
+
+	url: function( params ) {
+		params = extend( extend( {}, QUnit.urlParams ), params );
+		var key,
+			querystring = "?";
+
+		for ( key in params ) {
+			if ( !hasOwn.call( params, key ) ) {
+				continue;
+			}
+			querystring += encodeURIComponent( key ) + "=" +
+				encodeURIComponent( params[ key ] ) + "&";
+		}
+		return window.location.protocol + "//" + window.location.host +
+			window.location.pathname + querystring.slice( 0, -1 );
+	},
+
+	extend: extend,
+	id: id,
+	addEvent: addEvent
+	// load, equiv, jsDump, diff: Attached later
+});
+
+/**
+ * @deprecated: Created for backwards compatibility with test runner that set the hook function
+ * into QUnit.{hook}, instead of invoking it and passing the hook function.
+ * QUnit.constructor is set to the empty F() above so that we can add to it's prototype here.
+ * Doing this allows us to tell if the following methods have been overwritten on the actual
+ * QUnit object.
+ */
+extend( QUnit.constructor.prototype, {
+
+	// Logging callbacks; all receive a single argument with the listed properties
+	// run test/logs.html for any related changes
+	begin: registerLoggingCallback( "begin" ),
+
+	// done: { failed, passed, total, runtime }
+	done: registerLoggingCallback( "done" ),
+
+	// log: { result, actual, expected, message }
+	log: registerLoggingCallback( "log" ),
+
+	// testStart: { name }
+	testStart: registerLoggingCallback( "testStart" ),
+
+	// testDone: { name, failed, passed, total, duration }
+	testDone: registerLoggingCallback( "testDone" ),
+
+	// moduleStart: { name }
+	moduleStart: registerLoggingCallback( "moduleStart" ),
+
+	// moduleDone: { name, failed, passed, total }
+	moduleDone: registerLoggingCallback( "moduleDone" )
+});
+
+if ( typeof document === "undefined" || document.readyState === "complete" ) {
+	config.autorun = true;
+}
+
+QUnit.load = function() {
+	runLoggingCallbacks( "begin", QUnit, {} );
+
+	// Initialize the config, saving the execution queue
+	var banner, filter, i, label, len, main, ol, toolbar, userAgent, val,
+		urlConfigCheckboxesContainer, urlConfigCheckboxes, moduleFilter,
+		numModules = 0,
+		moduleFilterHtml = "",
+		urlConfigHtml = "",
+		oldconfig = extend( {}, config );
+
+	QUnit.init();
+	extend(config, oldconfig);
+
+	config.blocking = false;
+
+	len = config.urlConfig.length;
+
+	for ( i = 0; i < len; i++ ) {
+		val = config.urlConfig[i];
+		if ( typeof val === "string" ) {
+			val = {
+				id: val,
+				label: val,
+				tooltip: "[no tooltip available]"
+			};
+		}
+		config[ val.id ] = QUnit.urlParams[ val.id ];
+		urlConfigHtml += "<input id='qunit-urlconfig-" + escapeText( val.id ) +
+			"' name='" + escapeText( val.id ) +
+			"' type='checkbox'" + ( config[ val.id ] ? " checked='checked'" : "" ) +
+			" title='" + escapeText( val.tooltip ) +
+			"'><label for='qunit-urlconfig-" + escapeText( val.id ) +
+			"' title='" + escapeText( val.tooltip ) + "'>" + val.label + "</label>";
+	}
+
+	moduleFilterHtml += "<label for='qunit-modulefilter'>Module: </label><select id='qunit-modulefilter' name='modulefilter'><option value='' " +
+		( config.module === undefined  ? "selected='selected'" : "" ) +
+		">< All Modules ></option>";
+
+	for ( i in config.modules ) {
+		if ( config.modules.hasOwnProperty( i ) ) {
+			numModules += 1;
+			moduleFilterHtml += "<option value='" + escapeText( encodeURIComponent(i) ) + "' " +
+				( config.module === i ? "selected='selected'" : "" ) +
+				">" + escapeText(i) + "</option>";
+		}
+	}
+	moduleFilterHtml += "</select>";
+
+	// `userAgent` initialized at top of scope
+	userAgent = id( "qunit-userAgent" );
+	if ( userAgent ) {
+		userAgent.innerHTML = navigator.userAgent;
+	}
+
+	// `banner` initialized at top of scope
+	banner = id( "qunit-header" );
+	if ( banner ) {
+		banner.innerHTML = "<a href='" + QUnit.url({ filter: undefined, module: undefined, testNumber: undefined }) + "'>" + banner.innerHTML + "</a> ";
+	}
+
+	// `toolbar` initialized at top of scope
+	toolbar = id( "qunit-testrunner-toolbar" );
+	if ( toolbar ) {
+		// `filter` initialized at top of scope
+		filter = document.createElement( "input" );
+		filter.type = "checkbox";
+		filter.id = "qunit-filter-pass";
+
+		addEvent( filter, "click", function() {
+			var tmp,
+				ol = document.getElementById( "qunit-tests" );
+
+			if ( filter.checked ) {
+				ol.className = ol.className + " hidepass";
+			} else {
+				tmp = " " + ol.className.replace( /[\n\t\r]/g, " " ) + " ";
+				ol.className = tmp.replace( / hidepass /, " " );
+			}
+			if ( defined.sessionStorage ) {
+				if (filter.checked) {
+					sessionStorage.setItem( "qunit-filter-passed-tests", "true" );
+				} else {
+					sessionStorage.removeItem( "qunit-filter-passed-tests" );
+				}
+			}
+		});
+
+		if ( config.hidepassed || defined.sessionStorage && sessionStorage.getItem( "qunit-filter-passed-tests" ) ) {
+			filter.checked = true;
+			// `ol` initialized at top of scope
+			ol = document.getElementById( "qunit-tests" );
+			ol.className = ol.className + " hidepass";
+		}
+		toolbar.appendChild( filter );
+
+		// `label` initialized at top of scope
+		label = document.createElement( "label" );
+		label.setAttribute( "for", "qunit-filter-pass" );
+		label.setAttribute( "title", "Only show tests and assertons that fail. Stored in sessionStorage." );
+		label.innerHTML = "Hide passed tests";
+		toolbar.appendChild( label );
+
+		urlConfigCheckboxesContainer = document.createElement("span");
+		urlConfigCheckboxesContainer.innerHTML = urlConfigHtml;
+		urlConfigCheckboxes = urlConfigCheckboxesContainer.getElementsByTagName("input");
+		// For oldIE support:
+		// * Add handlers to the individual elements instead of the container
+		// * Use "click" instead of "change"
+		// * Fallback from event.target to event.srcElement
+		addEvents( urlConfigCheckboxes, "click", function( event ) {
+			var params = {},
+				target = event.target || event.srcElement;
+			params[ target.name ] = target.checked ? true : undefined;
+			window.location = QUnit.url( params );
+		});
+		toolbar.appendChild( urlConfigCheckboxesContainer );
+
+		if (numModules > 1) {
+			moduleFilter = document.createElement( 'span' );
+			moduleFilter.setAttribute( 'id', 'qunit-modulefilter-container' );
+			moduleFilter.innerHTML = moduleFilterHtml;
+			addEvent( moduleFilter.lastChild, "change", function() {
+				var selectBox = moduleFilter.getElementsByTagName("select")[0],
+					selectedModule = decodeURIComponent(selectBox.options[selectBox.selectedIndex].value);
+
+				window.location = QUnit.url( { module: ( selectedModule === "" ) ? undefined : selectedModule } );
+			});
+			toolbar.appendChild(moduleFilter);
+		}
+	}
+
+	// `main` initialized at top of scope
+	main = id( "qunit-fixture" );
+	if ( main ) {
+		config.fixture = main.innerHTML;
+	}
+
+	if ( config.autostart ) {
+		QUnit.start();
+	}
+};
+
+addEvent( window, "load", QUnit.load );
+
+// `onErrorFnPrev` initialized at top of scope
+// Preserve other handlers
+onErrorFnPrev = window.onerror;
+
+// Cover uncaught exceptions
+// Returning true will surpress the default browser handler,
+// returning false will let it run.
+window.onerror = function ( error, filePath, linerNr ) {
+	var ret = false;
+	if ( onErrorFnPrev ) {
+		ret = onErrorFnPrev( error, filePath, linerNr );
+	}
+
+	// Treat return value as window.onerror itself does,
+	// Only do our handling if not surpressed.
+	if ( ret !== true ) {
+		if ( QUnit.config.current ) {
+			if ( QUnit.config.current.ignoreGlobalErrors ) {
+				return true;
+			}
+			QUnit.pushFailure( error, filePath + ":" + linerNr );
+		} else {
+			QUnit.test( "global failure", extend( function() {
+				QUnit.pushFailure( error, filePath + ":" + linerNr );
+			}, { validTest: validTest } ) );
+		}
+		return false;
+	}
+
+	return ret;
+};
+
+function done() {
+	config.autorun = true;
+
+	// Log the last module results
+	if ( config.currentModule ) {
+		runLoggingCallbacks( "moduleDone", QUnit, {
+			name: config.currentModule,
+			failed: config.moduleStats.bad,
+			passed: config.moduleStats.all - config.moduleStats.bad,
+			total: config.moduleStats.all
+		});
+	}
+
+	var i, key,
+		banner = id( "qunit-banner" ),
+		tests = id( "qunit-tests" ),
+		runtime = +new Date() - config.started,
+		passed = config.stats.all - config.stats.bad,
+		html = [
+			"Tests completed in ",
+			runtime,
+			" milliseconds.<br/>",
+			"<span class='passed'>",
+			passed,
+			"</span> assertions of <span class='total'>",
+			config.stats.all,
+			"</span> passed, <span class='failed'>",
+			config.stats.bad,
+			"</span> failed."
+		].join( "" );
+
+	if ( banner ) {
+		banner.className = ( config.stats.bad ? "qunit-fail" : "qunit-pass" );
+	}
+
+	if ( tests ) {
+		id( "qunit-testresult" ).innerHTML = html;
+	}
+
+	if ( config.altertitle && typeof document !== "undefined" && document.title ) {
+		// show ✖ for good, ✔ for bad suite result in title
+		// use escape sequences in case file gets loaded with non-utf-8-charset
+		document.title = [
+			( config.stats.bad ? "\u2716" : "\u2714" ),
+			document.title.replace( /^[\u2714\u2716] /i, "" )
+		].join( " " );
+	}
+
+	// clear own sessionStorage items if all tests passed
+	if ( config.reorder && defined.sessionStorage && config.stats.bad === 0 ) {
+		// `key` & `i` initialized at top of scope
+		for ( i = 0; i < sessionStorage.length; i++ ) {
+			key = sessionStorage.key( i++ );
+			if ( key.indexOf( "qunit-test-" ) === 0 ) {
+				sessionStorage.removeItem( key );
+			}
+		}
+	}
+
+	// scroll back to top to show results
+	if ( window.scrollTo ) {
+		window.scrollTo(0, 0);
+	}
+
+	runLoggingCallbacks( "done", QUnit, {
+		failed: config.stats.bad,
+		passed: passed,
+		total: config.stats.all,
+		runtime: runtime
+	});
+}
+
+/** @return Boolean: true if this test should be ran */
+function validTest( test ) {
+	var include,
+		filter = config.filter && config.filter.toLowerCase(),
+		module = config.module && config.module.toLowerCase(),
+		fullName = (test.module + ": " + test.testName).toLowerCase();
+
+	// Internally-generated tests are always valid
+	if ( test.callback && test.callback.validTest === validTest ) {
+		delete test.callback.validTest;
+		return true;
+	}
+
+	if ( config.testNumber ) {
+		return test.testNumber === config.testNumber;
+	}
+
+	if ( module && ( !test.module || test.module.toLowerCase() !== module ) ) {
+		return false;
+	}
+
+	if ( !filter ) {
+		return true;
+	}
+
+	include = filter.charAt( 0 ) !== "!";
+	if ( !include ) {
+		filter = filter.slice( 1 );
+	}
+
+	// If the filter matches, we need to honour include
+	if ( fullName.indexOf( filter ) !== -1 ) {
+		return include;
+	}
+
+	// Otherwise, do the opposite
+	return !include;
+}
+
+// so far supports only Firefox, Chrome and Opera (buggy), Safari (for real exceptions)
+// Later Safari and IE10 are supposed to support error.stack as well
+// See also https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error/Stack
+function extractStacktrace( e, offset ) {
+	offset = offset === undefined ? 3 : offset;
+
+	var stack, include, i;
+
+	if ( e.stacktrace ) {
+		// Opera
+		return e.stacktrace.split( "\n" )[ offset + 3 ];
+	} else if ( e.stack ) {
+		// Firefox, Chrome
+		stack = e.stack.split( "\n" );
+		if (/^error$/i.test( stack[0] ) ) {
+			stack.shift();
+		}
+		if ( fileName ) {
+			include = [];
+			for ( i = offset; i < stack.length; i++ ) {
+				if ( stack[ i ].indexOf( fileName ) !== -1 ) {
+					break;
+				}
+				include.push( stack[ i ] );
+			}
+			if ( include.length ) {
+				return include.join( "\n" );
+			}
+		}
+		return stack[ offset ];
+	} else if ( e.sourceURL ) {
+		// Safari, PhantomJS
+		// hopefully one day Safari provides actual stacktraces
+		// exclude useless self-reference for generated Error objects
+		if ( /qunit.js$/.test( e.sourceURL ) ) {
+			return;
+		}
+		// for actual exceptions, this is useful
+		return e.sourceURL + ":" + e.line;
+	}
+}
+function sourceFromStacktrace( offset ) {
+	try {
+		throw new Error();
+	} catch ( e ) {
+		return extractStacktrace( e, offset );
+	}
+}
+
+/**
+ * Escape text for attribute or text content.
+ */
+function escapeText( s ) {
+	if ( !s ) {
+		return "";
+	}
+	s = s + "";
+	// Both single quotes and double quotes (for attributes)
+	return s.replace( /['"<>&]/g, function( s ) {
+		switch( s ) {
+			case '\'':
+				return '&#039;';
+			case '"':
+				return '&quot;';
+			case '<':
+				return '&lt;';
+			case '>':
+				return '&gt;';
+			case '&':
+				return '&amp;';
+		}
+	});
+}
+
+function synchronize( callback, last ) {
+	config.queue.push( callback );
+
+	if ( config.autorun && !config.blocking ) {
+		process( last );
+	}
+}
+
+function process( last ) {
+	function next() {
+		process( last );
+	}
+	var start = new Date().getTime();
+	config.depth = config.depth ? config.depth + 1 : 1;
+
+	while ( config.queue.length && !config.blocking ) {
+		if ( !defined.setTimeout || config.updateRate <= 0 || ( ( new Date().getTime() - start ) < config.updateRate ) ) {
+			config.queue.shift()();
+		} else {
+			window.setTimeout( next, 13 );
+			break;
+		}
+	}
+	config.depth--;
+	if ( last && !config.blocking && !config.queue.length && config.depth === 0 ) {
+		done();
+	}
+}
+
+function saveGlobal() {
+	config.pollution = [];
+
+	if ( config.noglobals ) {
+		for ( var key in window ) {
+			// in Opera sometimes DOM element ids show up here, ignore them
+			if ( !hasOwn.call( window, key ) || /^qunit-test-output/.test( key ) ) {
+				continue;
+			}
+			config.pollution.push( key );
+		}
+	}
+}
+
+function checkPollution() {
+	var newGlobals,
+		deletedGlobals,
+		old = config.pollution;
+
+	saveGlobal();
+
+	newGlobals = diff( config.pollution, old );
+	if ( newGlobals.length > 0 ) {
+		QUnit.pushFailure( "Introduced global variable(s): " + newGlobals.join(", ") );
+	}
+
+	deletedGlobals = diff( old, config.pollution );
+	if ( deletedGlobals.length > 0 ) {
+		QUnit.pushFailure( "Deleted global variable(s): " + deletedGlobals.join(", ") );
+	}
+}
+
+// returns a new Array with the elements that are in a but not in b
+function diff( a, b ) {
+	var i, j,
+		result = a.slice();
+
+	for ( i = 0; i < result.length; i++ ) {
+		for ( j = 0; j < b.length; j++ ) {
+			if ( result[i] === b[j] ) {
+				result.splice( i, 1 );
+				i--;
+				break;
+			}
+		}
+	}
+	return result;
+}
+
+function extend( a, b ) {
+	for ( var prop in b ) {
+		if ( b[ prop ] === undefined ) {
+			delete a[ prop ];
+
+		// Avoid "Member not found" error in IE8 caused by setting window.constructor
+		} else if ( prop !== "constructor" || a !== window ) {
+			a[ prop ] = b[ prop ];
+		}
+	}
+
+	return a;
+}
+
+/**
+ * @param {HTMLElement} elem
+ * @param {string} type
+ * @param {Function} fn
+ */
+function addEvent( elem, type, fn ) {
+	// Standards-based browsers
+	if ( elem.addEventListener ) {
+		elem.addEventListener( type, fn, false );
+	// IE
+	} else {
+		elem.attachEvent( "on" + type, fn );
+	}
+}
+
+/**
+ * @param {Array|NodeList} elems
+ * @param {string} type
+ * @param {Function} fn
+ */
+function addEvents( elems, type, fn ) {
+	var i = elems.length;
+	while ( i-- ) {
+		addEvent( elems[i], type, fn );
+	}
+}
+
+function hasClass( elem, name ) {
+	return (" " + elem.className + " ").indexOf(" " + name + " ") > -1;
+}
+
+function addClass( elem, name ) {
+	if ( !hasClass( elem, name ) ) {
+		elem.className += (elem.className ? " " : "") + name;
+	}
+}
+
+function removeClass( elem, name ) {
+	var set = " " + elem.className + " ";
+	// Class name may appear multiple times
+	while ( set.indexOf(" " + name + " ") > -1 ) {
+		set = set.replace(" " + name + " " , " ");
+	}
+	// If possible, trim it for prettiness, but not neccecarily
+	elem.className = window.jQuery ? jQuery.trim( set ) : ( set.trim ? set.trim() : set );
+}
+
+function id( name ) {
+	return !!( typeof document !== "undefined" && document && document.getElementById ) &&
+		document.getElementById( name );
+}
+
+function registerLoggingCallback( key ) {
+	return function( callback ) {
+		config[key].push( callback );
+	};
+}
+
+// Supports deprecated method of completely overwriting logging callbacks
+function runLoggingCallbacks( key, scope, args ) {
+	var i, callbacks;
+	if ( QUnit.hasOwnProperty( key ) ) {
+		QUnit[ key ].call(scope, args );
+	} else {
+		callbacks = config[ key ];
+		for ( i = 0; i < callbacks.length; i++ ) {
+			callbacks[ i ].call( scope, args );
+		}
+	}
+}
+
+// Test for equality any JavaScript type.
+// Author: Philippe Rathé <prathe@gmail.com>
+QUnit.equiv = (function() {
+
+	// Call the o related callback with the given arguments.
+	function bindCallbacks( o, callbacks, args ) {
+		var prop = QUnit.objectType( o );
+		if ( prop ) {
+			if ( QUnit.objectType( callbacks[ prop ] ) === "function" ) {
+				return callbacks[ prop ].apply( callbacks, args );
+			} else {
+				return callbacks[ prop ]; // or undefined
+			}
+		}
+	}
+
+	// the real equiv function
+	var innerEquiv,
+		// stack to decide between skip/abort functions
+		callers = [],
+		// stack to avoiding loops from circular referencing
+		parents = [],
+
+		getProto = Object.getPrototypeOf || function ( obj ) {
+			return obj.__proto__;
+		},
+		callbacks = (function () {
+
+			// for string, boolean, number and null
+			function useStrictEquality( b, a ) {
+				/*jshint eqeqeq:false */
+				if ( b instanceof a.constructor || a instanceof b.constructor ) {
+					// to catch short annotaion VS 'new' annotation of a
+					// declaration
+					// e.g. var i = 1;
+					// var j = new Number(1);
+					return a == b;
+				} else {
+					return a === b;
+				}
+			}
+
+			return {
+				"string": useStrictEquality,
+				"boolean": useStrictEquality,
+				"number": useStrictEquality,
+				"null": useStrictEquality,
+				"undefined": useStrictEquality,
+
+				"nan": function( b ) {
+					return isNaN( b );
+				},
+
+				"date": function( b, a ) {
+					return QUnit.objectType( b ) === "date" && a.valueOf() === b.valueOf();
+				},
+
+				"regexp": function( b, a ) {
+					return QUnit.objectType( b ) === "regexp" &&
+						// the regex itself
+						a.source === b.source &&
+						// and its modifers
+						a.global === b.global &&
+						// (gmi) ...
+						a.ignoreCase === b.ignoreCase &&
+						a.multiline === b.multiline &&
+						a.sticky === b.sticky;
+				},
+
+				// - skip when the property is a method of an instance (OOP)
+				// - abort otherwise,
+				// initial === would have catch identical references anyway
+				"function": function() {
+					var caller = callers[callers.length - 1];
+					return caller !== Object && typeof caller !== "undefined";
+				},
+
+				"array": function( b, a ) {
+					var i, j, len, loop;
+
+					// b could be an object literal here
+					if ( QUnit.objectType( b ) !== "array" ) {
+						return false;
+					}
+
+					len = a.length;
+					if ( len !== b.length ) {
+						// safe and faster
+						return false;
+					}
+
+					// track reference to avoid circular references
+					parents.push( a );
+					for ( i = 0; i < len; i++ ) {
+						loop = false;
+						for ( j = 0; j < parents.length; j++ ) {
+							if ( parents[j] === a[i] ) {
+								loop = true;// dont rewalk array
+							}
+						}
+						if ( !loop && !innerEquiv(a[i], b[i]) ) {
+							parents.pop();
+							return false;
+						}
+					}
+					parents.pop();
+					return true;
+				},
+
+				"object": function( b, a ) {
+					var i, j, loop,
+						// Default to true
+						eq = true,
+						aProperties = [],
+						bProperties = [];
+
+					// comparing constructors is more strict than using
+					// instanceof
+					if ( a.constructor !== b.constructor ) {
+						// Allow objects with no prototype to be equivalent to
+						// objects with Object as their constructor.
+						if ( !(( getProto(a) === null && getProto(b) === Object.prototype ) ||
+							( getProto(b) === null && getProto(a) === Object.prototype ) ) ) {
+								return false;
+						}
+					}
+
+					// stack constructor before traversing properties
+					callers.push( a.constructor );
+					// track reference to avoid circular references
+					parents.push( a );
+
+					for ( i in a ) { // be strict: don't ensures hasOwnProperty
+									// and go deep
+						loop = false;
+						for ( j = 0; j < parents.length; j++ ) {
+							if ( parents[j] === a[i] ) {
+								// don't go down the same path twice
+								loop = true;
+							}
+						}
+						aProperties.push(i); // collect a's properties
+
+						if (!loop && !innerEquiv( a[i], b[i] ) ) {
+							eq = false;
+							break;
+						}
+					}
+
+					callers.pop(); // unstack, we are done
+					parents.pop();
+
+					for ( i in b ) {
+						bProperties.push( i ); // collect b's properties
+					}
+
+					// Ensures identical properties name
+					return eq && innerEquiv( aProperties.sort(), bProperties.sort() );
+				}
+			};
+		}());
+
+	innerEquiv = function() { // can take multiple arguments
+		var args = [].slice.apply( arguments );
+		if ( args.length < 2 ) {
+			return true; // end transition
+		}
+
+		return (function( a, b ) {
+			if ( a === b ) {
+				return true; // catch the most you can
+			} else if ( a === null || b === null || typeof a === "undefined" ||
+					typeof b === "undefined" ||
+					QUnit.objectType(a) !== QUnit.objectType(b) ) {
+				return false; // don't lose time with error prone cases
+			} else {
+				return bindCallbacks(a, callbacks, [ b, a ]);
+			}
+
+			// apply transition with (1..n) arguments
+		}( args[0], args[1] ) && arguments.callee.apply( this, args.splice(1, args.length - 1 )) );
+	};
+
+	return innerEquiv;
+}());
+
+/**
+ * jsDump Copyright (c) 2008 Ariel Flesler - aflesler(at)gmail(dot)com |
+ * http://flesler.blogspot.com Licensed under BSD
+ * (http://www.opensource.org/licenses/bsd-license.php) Date: 5/15/2008
+ *
+ * @projectDescription Advanced and extensible data dumping for Javascript.
+ * @version 1.0.0
+ * @author Ariel Flesler
+ * @link {http://flesler.blogspot.com/2008/05/jsdump-pretty-dump-of-any-javascript.html}
+ */
+QUnit.jsDump = (function() {
+	function quote( str ) {
+		return '"' + str.toString().replace( /"/g, '\\"' ) + '"';
+	}
+	function literal( o ) {
+		return o + "";
+	}
+	function join( pre, arr, post ) {
+		var s = jsDump.separator(),
+			base = jsDump.indent(),
+			inner = jsDump.indent(1);
+		if ( arr.join ) {
+			arr = arr.join( "," + s + inner );
+		}
+		if ( !arr ) {
+			return pre + post;
+		}
+		return [ pre, inner + arr, base + post ].join(s);
+	}
+	function array( arr, stack ) {
+		var i = arr.length, ret = new Array(i);
+		this.up();
+		while ( i-- ) {
+			ret[i] = this.parse( arr[i] , undefined , stack);
+		}
+		this.down();
+		return join( "[", ret, "]" );
+	}
+
+	var reName = /^function (\w+)/,
+		jsDump = {
+			// type is used mostly internally, you can fix a (custom)type in advance
+			parse: function( obj, type, stack ) {
+				stack = stack || [ ];
+				var inStack, res,
+					parser = this.parsers[ type || this.typeOf(obj) ];
+
+				type = typeof parser;
+				inStack = inArray( obj, stack );
+
+				if ( inStack !== -1 ) {
+					return "recursion(" + (inStack - stack.length) + ")";
+				}
+				if ( type === "function" )  {
+					stack.push( obj );
+					res = parser.call( this, obj, stack );
+					stack.pop();
+					return res;
+				}
+				return ( type === "string" ) ? parser : this.parsers.error;
+			},
+			typeOf: function( obj ) {
+				var type;
+				if ( obj === null ) {
+					type = "null";
+				} else if ( typeof obj === "undefined" ) {
+					type = "undefined";
+				} else if ( QUnit.is( "regexp", obj) ) {
+					type = "regexp";
+				} else if ( QUnit.is( "date", obj) ) {
+					type = "date";
+				} else if ( QUnit.is( "function", obj) ) {
+					type = "function";
+				} else if ( typeof obj.setInterval !== undefined && typeof obj.document !== "undefined" && typeof obj.nodeType === "undefined" ) {
+					type = "window";
+				} else if ( obj.nodeType === 9 ) {
+					type = "document";
+				} else if ( obj.nodeType ) {
+					type = "node";
+				} else if (
+					// native arrays
+					toString.call( obj ) === "[object Array]" ||
+					// NodeList objects
+					( typeof obj.length === "number" && typeof obj.item !== "undefined" && ( obj.length ? obj.item(0) === obj[0] : ( obj.item( 0 ) === null && typeof obj[0] === "undefined" ) ) )
+				) {
+					type = "array";
+				} else if ( obj.constructor === Error.prototype.constructor ) {
+					type = "error";
+				} else {
+					type = typeof obj;
+				}
+				return type;
+			},
+			separator: function() {
+				return this.multiline ?	this.HTML ? "<br />" : "\n" : this.HTML ? "&nbsp;" : " ";
+			},
+			// extra can be a number, shortcut for increasing-calling-decreasing
+			indent: function( extra ) {
+				if ( !this.multiline ) {
+					return "";
+				}
+				var chr = this.indentChar;
+				if ( this.HTML ) {
+					chr = chr.replace( /\t/g, "   " ).replace( / /g, "&nbsp;" );
+				}
+				return new Array( this._depth_ + (extra||0) ).join(chr);
+			},
+			up: function( a ) {
+				this._depth_ += a || 1;
+			},
+			down: function( a ) {
+				this._depth_ -= a || 1;
+			},
+			setParser: function( name, parser ) {
+				this.parsers[name] = parser;
+			},
+			// The next 3 are exposed so you can use them
+			quote: quote,
+			literal: literal,
+			join: join,
+			//
+			_depth_: 1,
+			// This is the list of parsers, to modify them, use jsDump.setParser
+			parsers: {
+				window: "[Window]",
+				document: "[Document]",
+				error: function(error) {
+					return "Error(\"" + error.message + "\")";
+				},
+				unknown: "[Unknown]",
+				"null": "null",
+				"undefined": "undefined",
+				"function": function( fn ) {
+					var ret = "function",
+						// functions never have name in IE
+						name = "name" in fn ? fn.name : (reName.exec(fn) || [])[1];
+
+					if ( name ) {
+						ret += " " + name;
+					}
+					ret += "( ";
+
+					ret = [ ret, QUnit.jsDump.parse( fn, "functionArgs" ), "){" ].join( "" );
+					return join( ret, QUnit.jsDump.parse(fn,"functionCode" ), "}" );
+				},
+				array: array,
+				nodelist: array,
+				"arguments": array,
+				object: function( map, stack ) {
+					var ret = [ ], keys, key, val, i;
+					QUnit.jsDump.up();
+					keys = [];
+					for ( key in map ) {
+						keys.push( key );
+					}
+					keys.sort();
+					for ( i = 0; i < keys.length; i++ ) {
+						key = keys[ i ];
+						val = map[ key ];
+						ret.push( QUnit.jsDump.parse( key, "key" ) + ": " + QUnit.jsDump.parse( val, undefined, stack ) );
+					}
+					QUnit.jsDump.down();
+					return join( "{", ret, "}" );
+				},
+				node: function( node ) {
+					var len, i, val,
+						open = QUnit.jsDump.HTML ? "&lt;" : "<",
+						close = QUnit.jsDump.HTML ? "&gt;" : ">",
+						tag = node.nodeName.toLowerCase(),
+						ret = open + tag,
+						attrs = node.attributes;
+
+					if ( attrs ) {
+						for ( i = 0, len = attrs.length; i < len; i++ ) {
+							val = attrs[i].nodeValue;
+							// IE6 includes all attributes in .attributes, even ones not explicitly set.
+							// Those have values like undefined, null, 0, false, "" or "inherit".
+							if ( val && val !== "inherit" ) {
+								ret += " " + attrs[i].nodeName + "=" + QUnit.jsDump.parse( val, "attribute" );
+							}
+						}
+					}
+					ret += close;
+
+					// Show content of TextNode or CDATASection
+					if ( node.nodeType === 3 || node.nodeType === 4 ) {
+						ret += node.nodeValue;
+					}
+
+					return ret + open + "/" + tag + close;
+				},
+				// function calls it internally, it's the arguments part of the function
+				functionArgs: function( fn ) {
+					var args,
+						l = fn.length;
+
+					if ( !l ) {
+						return "";
+					}
+
+					args = new Array(l);
+					while ( l-- ) {
+						// 97 is 'a'
+						args[l] = String.fromCharCode(97+l);
+					}
+					return " " + args.join( ", " ) + " ";
+				},
+				// object calls it internally, the key part of an item in a map
+				key: quote,
+				// function calls it internally, it's the content of the function
+				functionCode: "[code]",
+				// node calls it internally, it's an html attribute value
+				attribute: quote,
+				string: quote,
+				date: quote,
+				regexp: literal,
+				number: literal,
+				"boolean": literal
+			},
+			// if true, entities are escaped ( <, >, \t, space and \n )
+			HTML: false,
+			// indentation unit
+			indentChar: "  ",
+			// if true, items in a collection, are separated by a \n, else just a space.
+			multiline: true
+		};
+
+	return jsDump;
+}());
+
+// from jquery.js
+function inArray( elem, array ) {
+	if ( array.indexOf ) {
+		return array.indexOf( elem );
+	}
+
+	for ( var i = 0, length = array.length; i < length; i++ ) {
+		if ( array[ i ] === elem ) {
+			return i;
+		}
+	}
+
+	return -1;
+}
+
+/*
+ * Javascript Diff Algorithm
+ *  By John Resig (http://ejohn.org/)
+ *  Modified by Chu Alan "sprite"
+ *
+ * Released under the MIT license.
+ *
+ * More Info:
+ *  http://ejohn.org/projects/javascript-diff-algorithm/
+ *
+ * Usage: QUnit.diff(expected, actual)
+ *
+ * QUnit.diff( "the quick brown fox jumped over", "the quick fox jumps over" ) == "the  quick <del>brown </del> fox <del>jumped </del><ins>jumps </ins> over"
+ */
+QUnit.diff = (function() {
+	/*jshint eqeqeq:false, eqnull:true */
+	function diff( o, n ) {
+		var i,
+			ns = {},
+			os = {};
+
+		for ( i = 0; i < n.length; i++ ) {
+			if ( !hasOwn.call( ns, n[i] ) ) {
+				ns[ n[i] ] = {
+					rows: [],
+					o: null
+				};
+			}
+			ns[ n[i] ].rows.push( i );
+		}
+
+		for ( i = 0; i < o.length; i++ ) {
+			if ( !hasOwn.call( os, o[i] ) ) {
+				os[ o[i] ] = {
+					rows: [],
+					n: null
+				};
+			}
+			os[ o[i] ].rows.push( i );
+		}
+
+		for ( i in ns ) {
+			if ( !hasOwn.call( ns, i ) ) {
+				continue;
+			}
+			if ( ns[i].rows.length === 1 && hasOwn.call( os, i ) && os[i].rows.length === 1 ) {
+				n[ ns[i].rows[0] ] = {
+					text: n[ ns[i].rows[0] ],
+					row: os[i].rows[0]
+				};
+				o[ os[i].rows[0] ] = {
+					text: o[ os[i].rows[0] ],
+					row: ns[i].rows[0]
+				};
+			}
+		}
+
+		for ( i = 0; i < n.length - 1; i++ ) {
+			if ( n[i].text != null && n[ i + 1 ].text == null && n[i].row + 1 < o.length && o[ n[i].row + 1 ].text == null &&
+						n[ i + 1 ] == o[ n[i].row + 1 ] ) {
+
+				n[ i + 1 ] = {
+					text: n[ i + 1 ],
+					row: n[i].row + 1
+				};
+				o[ n[i].row + 1 ] = {
+					text: o[ n[i].row + 1 ],
+					row: i + 1
+				};
+			}
+		}
+
+		for ( i = n.length - 1; i > 0; i-- ) {
+			if ( n[i].text != null && n[ i - 1 ].text == null && n[i].row > 0 && o[ n[i].row - 1 ].text == null &&
+						n[ i - 1 ] == o[ n[i].row - 1 ]) {
+
+				n[ i - 1 ] = {
+					text: n[ i - 1 ],
+					row: n[i].row - 1
+				};
+				o[ n[i].row - 1 ] = {
+					text: o[ n[i].row - 1 ],
+					row: i - 1
+				};
+			}
+		}
+
+		return {
+			o: o,
+			n: n
+		};
+	}
+
+	return function( o, n ) {
+		o = o.replace( /\s+$/, "" );
+		n = n.replace( /\s+$/, "" );
+
+		var i, pre,
+			str = "",
+			out = diff( o === "" ? [] : o.split(/\s+/), n === "" ? [] : n.split(/\s+/) ),
+			oSpace = o.match(/\s+/g),
+			nSpace = n.match(/\s+/g);
+
+		if ( oSpace == null ) {
+			oSpace = [ " " ];
+		}
+		else {
+			oSpace.push( " " );
+		}
+
+		if ( nSpace == null ) {
+			nSpace = [ " " ];
+		}
+		else {
+			nSpace.push( " " );
+		}
+
+		if ( out.n.length === 0 ) {
+			for ( i = 0; i < out.o.length; i++ ) {
+				str += "<del>" + out.o[i] + oSpace[i] + "</del>";
+			}
+		}
+		else {
+			if ( out.n[0].text == null ) {
+				for ( n = 0; n < out.o.length && out.o[n].text == null; n++ ) {
+					str += "<del>" + out.o[n] + oSpace[n] + "</del>";
+				}
+			}
+
+			for ( i = 0; i < out.n.length; i++ ) {
+				if (out.n[i].text == null) {
+					str += "<ins>" + out.n[i] + nSpace[i] + "</ins>";
+				}
+				else {
+					// `pre` initialized at top of scope
+					pre = "";
+
+					for ( n = out.n[i].row + 1; n < out.o.length && out.o[n].text == null; n++ ) {
+						pre += "<del>" + out.o[n] + oSpace[n] + "</del>";
+					}
+					str += " " + out.n[i].text + nSpace[i] + pre;
+				}
+			}
+		}
+
+		return str;
+	};
+}());
+
+// for CommonJS enviroments, export everything
+if ( typeof exports !== "undefined" ) {
+	extend( exports, QUnit );
+}
+
+// get at whatever the global object is, like window in browsers
+}( (function() {return this;}.call()) ));
diff --git a/vendor/dimsemenov/magnific-popup/magnific-popup.jquery.json b/vendor/dimsemenov/magnific-popup/magnific-popup.jquery.json
new file mode 100644
index 0000000000000000000000000000000000000000..a6cc092e9866454b3824dd7edf111725a507572b
--- /dev/null
+++ b/vendor/dimsemenov/magnific-popup/magnific-popup.jquery.json
@@ -0,0 +1,29 @@
+{
+  "name": "magnific-popup",
+  "title": "Magnific Popup",
+  "description": "Fast, light, mobile-friendly and responsive lightbox and modal dialog plugin. Open inline HTML, ajax loaded content, image, form, iframe (YouTube video, Vimeo, Google Maps), photo gallery. Animation effects added with CSS3 transitions. For jQuery or Zepto.",
+  "version": "1.1.0",
+  "homepage": "http://dimsemenov.com/plugins/magnific-popup/",
+  "demo": "http://dimsemenov.com/plugins/magnific-popup/",
+  "docs": "http://dimsemenov.com/plugins/magnific-popup/documentation.html",
+  "author": {
+    "name": "Dmitry Semenov",
+    "email": "diiiimaaaa@gmail.com",
+    "url": "http://dimsemenov.com"
+  },
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/dimsemenov/Magnific-Popup.git"
+  },
+  "bugs": "https://github.com/dimsemenov/Magnific-Popup/issues",
+  "dependencies": {
+    "jquery": ">=1.8.0"
+  },
+  "keywords": ["lightbox","popup","modal","window","dialog","ui","gallery","slideshow","video","image","ajax","html5","animation","jquery","photo","responsive","mobile"],
+  "licenses": [
+    {
+      "type": "MIT",
+      "url": "http://www.opensource.org/licenses/mit-license.php"
+    }
+  ]
+}
\ No newline at end of file
diff --git a/vendor/dimsemenov/magnific-popup/package.json b/vendor/dimsemenov/magnific-popup/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..52cffd0394a1396d3832a8e4a69650971db6bea6
--- /dev/null
+++ b/vendor/dimsemenov/magnific-popup/package.json
@@ -0,0 +1,55 @@
+{
+  "name": "magnific-popup",
+  "version": "1.1.0",
+  "title": "Magnific Popup",
+  "description": "Lightbox and modal dialog plugin. Can display inline HTML, iframes (YouTube video, Vimeo, Google Maps), or an image gallery. Animation effects are added with CSS3 transitions. For jQuery or Zepto.",
+  "keywords": [
+    "ecosystem:jquery",
+    "jquery-plugin",
+    "zepto",
+    "lightbox",
+    "popup",
+    "modal",
+    "window",
+    "dialog",
+    "gallery",
+    "jquery",
+    "photo",
+    "responsive",
+    "mobile"
+  ],
+  "author": {
+    "name": "Dmitry Semenov",
+    "email": "diiiimaaaa@gmail.com",
+    "web": "http://dimsemenov.com"
+  },
+  "license": "MIT",
+  "bugs": {
+    "url": "https://github.com/dimsemenov/Magnific-Popup/issues"
+  },
+  "main": "dist/jquery.magnific-popup.js",
+  "style": "dist/magnific-popup.css",
+  "homepage": "http://dimsemenov.com/plugins/magnific-popup/",
+  "engines": {
+    "node": ">= 0.8.0"
+  },
+  "scripts": {
+    "test": "grunt jshint"
+  },
+  "devDependencies": {
+    "grunt": "~0.4.5",
+    "grunt-contrib-clean": "~0.6.0",
+    "grunt-contrib-concat": "^0.5.1",
+    "grunt-contrib-copy": "~0.8.1",
+    "grunt-contrib-cssmin": "^0.14.0",
+    "grunt-contrib-jshint": "~0.11.3",
+    "grunt-contrib-uglify": "~0.9.2",
+    "grunt-contrib-watch": "~0.6.1",
+    "grunt-jekyll": "~0.4.2",
+    "grunt-sass": "~1.0.0"
+  },
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/dimsemenov/Magnific-Popup.git"
+  }
+}
diff --git a/vendor/dimsemenov/magnific-popup/src/css/_settings.scss b/vendor/dimsemenov/magnific-popup/src/css/_settings.scss
new file mode 100644
index 0000000000000000000000000000000000000000..75eadbc77e0d97cc5803237227ee8ccc508fc724
--- /dev/null
+++ b/vendor/dimsemenov/magnific-popup/src/css/_settings.scss
@@ -0,0 +1,44 @@
+////////////////////////
+//      Settings      //
+////////////////////////
+
+// overlay
+$mfp-overlay-color:                   #0b0b0b !default;                    // Color of overlay screen
+$mfp-overlay-opacity:                 0.8 !default;                        // Opacity of overlay screen
+$mfp-shadow:                          0 0 8px rgba(0, 0, 0, 0.6) !default; // Shadow on image or iframe
+
+// spacing
+$mfp-popup-padding-left:              8px !default;                        // Padding from left and from right side
+$mfp-popup-padding-left-mobile:       6px !default;                        // Same as above, but is applied when width of window is less than 800px
+
+$mfp-z-index-base:                    1040 !default;                       // Base z-index of popup
+
+// controls
+$mfp-include-arrows:                  true !default;                       // Include styles for nav arrows
+$mfp-controls-opacity:                0.65 !default;                       // Opacity of controls
+$mfp-controls-color:                  #FFF !default;                       // Color of controls
+$mfp-controls-border-color:           #3F3F3F !default; 	                 // Border color of controls
+$mfp-inner-close-icon-color:          #333 !default;                       // Color of close button when inside
+$mfp-controls-text-color:             #CCC !default;                       // Color of preloader and "1 of X" indicator
+$mfp-controls-text-color-hover:       #FFF !default;                       // Hover color of preloader and "1 of X" indicator
+
+// Iframe-type options
+$mfp-include-iframe-type:             true !default;                       // Enable Iframe-type popups
+$mfp-iframe-padding-top:              40px !default;                       // Iframe padding top
+$mfp-iframe-background:               #000 !default;                       // Background color of iframes
+$mfp-iframe-max-width:                900px !default;                      // Maximum width of iframes
+$mfp-iframe-ratio:                    9/16 !default;                       // Ratio of iframe (9/16 = widescreen, 3/4 = standard, etc.)
+
+// Image-type options
+$mfp-include-image-type:              true !default;                       // Enable Image-type popups
+$mfp-image-background:                #444 !default;
+$mfp-image-padding-top:               40px !default;                       // Image padding top
+$mfp-image-padding-bottom:            40px !default;                       // Image padding bottom
+$mfp-include-mobile-layout-for-image: true !default;                       // Removes paddings from top and bottom
+
+// Image caption options
+$mfp-caption-title-color:             #F3F3F3 !default;                    // Caption title color
+$mfp-caption-subtitle-color:          #BDBDBD !default;                    // Caption subtitle color
+
+// A11y
+$mfp-use-visuallyhidden:              false !default;                      // Hide content from browsers, but make it available for screen readers
diff --git a/vendor/dimsemenov/magnific-popup/src/css/main.scss b/vendor/dimsemenov/magnific-popup/src/css/main.scss
new file mode 100644
index 0000000000000000000000000000000000000000..54964dfba40a98da911de3141438a72afd9453cf
--- /dev/null
+++ b/vendor/dimsemenov/magnific-popup/src/css/main.scss
@@ -0,0 +1,543 @@
+/* Magnific Popup CSS */
+
+@import "settings";
+
+////////////////////////
+//
+// Contents:
+//
+// 1. General styles
+//    - Transluscent overlay
+//    - Containers, wrappers
+//    - Cursors
+//    - Helper classes
+// 2. Appearance
+//    - Preloader & text that displays error messages
+//    - CSS reset for buttons
+//    - Close icon
+//    - "1 of X" counter
+//    - Navigation (left/right) arrows
+//    - Iframe content type styles
+//    - Image content type styles
+//    - Media query where size of arrows is reduced
+//    - IE7 support
+//
+////////////////////////
+
+
+
+////////////////////////
+// 1. General styles
+////////////////////////
+
+// Transluscent overlay
+.mfp-bg {
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100%;
+  z-index: $mfp-z-index-base + 2;
+  overflow: hidden;
+  position: fixed;
+
+  background: $mfp-overlay-color;
+  opacity: $mfp-overlay-opacity;
+}
+
+// Wrapper for popup
+.mfp-wrap {
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100%;
+  z-index: $mfp-z-index-base + 3;
+  position: fixed;
+  outline: none !important;
+  -webkit-backface-visibility: hidden; // fixes webkit bug that can cause "false" scrollbar
+}
+
+// Root container
+.mfp-container {
+  text-align: center;
+  position: absolute;
+  width: 100%;
+  height: 100%;
+  left: 0;
+  top: 0;
+  padding: 0 $mfp-popup-padding-left;
+  box-sizing: border-box;
+}
+
+// Vertical centerer helper
+.mfp-container {
+  &:before {
+    content: '';
+    display: inline-block;
+    height: 100%;
+    vertical-align: middle;
+  }
+}
+
+// Remove vertical centering when popup has class `mfp-align-top`
+.mfp-align-top {
+  .mfp-container {
+    &:before {
+      display: none;
+    }
+  }
+}
+
+// Popup content holder
+.mfp-content {
+  position: relative;
+  display: inline-block;
+  vertical-align: middle;
+  margin: 0 auto;
+  text-align: left;
+  z-index: $mfp-z-index-base + 5;
+}
+.mfp-inline-holder,
+.mfp-ajax-holder {
+  .mfp-content {
+    width: 100%;
+    cursor: auto;
+  }
+}
+
+// Cursors
+.mfp-ajax-cur {
+  cursor: progress;
+}
+.mfp-zoom-out-cur {
+  &, .mfp-image-holder .mfp-close {
+    cursor: -moz-zoom-out;
+    cursor: -webkit-zoom-out;
+    cursor: zoom-out;
+  }
+}
+.mfp-zoom {
+  cursor: pointer;
+  cursor: -webkit-zoom-in;
+  cursor: -moz-zoom-in;
+  cursor: zoom-in;
+}
+.mfp-auto-cursor {
+  .mfp-content {
+    cursor: auto;
+  }
+}
+
+.mfp-close,
+.mfp-arrow,
+.mfp-preloader,
+.mfp-counter {
+  -webkit-user-select:none;
+  -moz-user-select: none;
+  user-select: none;
+}
+
+// Hide the image during the loading
+.mfp-loading {
+  &.mfp-figure {
+    display: none;
+  }
+}
+
+// Helper class that hides stuff
+@if $mfp-use-visuallyhidden {
+  // From HTML5 Boilerplate https://github.com/h5bp/html5-boilerplate/blob/v4.2.0/doc/css.md#visuallyhidden
+  .mfp-hide {
+    border: 0 !important;
+    clip: rect(0 0 0 0) !important;
+    height: 1px !important;
+    margin: -1px !important;
+    overflow: hidden !important;
+    padding: 0 !important;
+    position: absolute !important;
+    width: 1px !important;
+  }
+} @else {
+  .mfp-hide {
+    display: none !important;
+  }
+}
+
+
+////////////////////////
+// 2. Appearance
+////////////////////////
+
+// Preloader and text that displays error messages
+.mfp-preloader {
+  color: $mfp-controls-text-color;
+  position: absolute;
+  top: 50%;
+  width: auto;
+  text-align: center;
+  margin-top: -0.8em;
+  left: 8px;
+  right: 8px;
+  z-index: $mfp-z-index-base + 4;
+  a {
+    color: $mfp-controls-text-color;
+    &:hover {
+      color: $mfp-controls-text-color-hover;
+    }
+  }
+}
+
+// Hide preloader when content successfully loaded
+.mfp-s-ready {
+  .mfp-preloader {
+    display: none;
+  }
+}
+
+// Hide content when it was not loaded
+.mfp-s-error {
+  .mfp-content {
+    display: none;
+  }
+}
+
+// CSS-reset for buttons
+button {
+  &.mfp-close,
+  &.mfp-arrow {
+    overflow: visible;
+    cursor: pointer;
+    background: transparent;
+    border: 0;
+    -webkit-appearance: none;
+    display: block;
+    outline: none;
+    padding: 0;
+    z-index: $mfp-z-index-base + 6;
+    box-shadow: none;
+    touch-action: manipulation;
+  }
+  &::-moz-focus-inner {
+      padding: 0;
+      border: 0
+  }
+}
+
+
+// Close icon
+.mfp-close {
+  width: 44px;
+  height: 44px;
+  line-height: 44px;
+
+  position: absolute;
+  right: 0;
+  top: 0;
+  text-decoration: none;
+  text-align: center;
+  opacity: $mfp-controls-opacity;
+  padding: 0 0 18px 10px;
+  color: $mfp-controls-color;
+
+  font-style: normal;
+  font-size: 28px;
+  font-family: Arial, Baskerville, monospace;
+
+  &:hover,
+  &:focus {
+    opacity: 1;
+  }
+
+  &:active {
+    top: 1px;
+  }
+}
+.mfp-close-btn-in {
+  .mfp-close {
+    color: $mfp-inner-close-icon-color;
+  }
+}
+.mfp-image-holder,
+.mfp-iframe-holder {
+  .mfp-close {
+    color: $mfp-controls-color;
+    right: -6px;
+    text-align: right;
+    padding-right: 6px;
+    width: 100%;
+  }
+}
+
+// "1 of X" counter
+.mfp-counter {
+  position: absolute;
+  top: 0;
+  right: 0;
+  color: $mfp-controls-text-color;
+  font-size: 12px;
+  line-height: 18px;
+  white-space: nowrap;
+}
+
+// Navigation arrows
+@if $mfp-include-arrows {
+  .mfp-arrow {
+    position: absolute;
+    opacity: $mfp-controls-opacity;
+    margin: 0;
+    top: 50%;
+    margin-top: -55px;
+    padding: 0;
+    width: 90px;
+    height: 110px;
+    -webkit-tap-highlight-color: rgba(0,0,0,0);
+    &:active {
+      margin-top: -54px;
+    }
+    &:hover,
+    &:focus {
+      opacity: 1;
+    }
+    &:before,
+    &:after {
+      content: '';
+      display: block;
+      width: 0;
+      height: 0;
+      position: absolute;
+      left: 0;
+      top: 0;
+      margin-top: 35px;
+      margin-left: 35px;
+      border: medium inset transparent;
+    }
+
+    &:after {
+
+      border-top-width: 13px;
+      border-bottom-width: 13px;
+      top:8px;
+    }
+
+    &:before {
+      border-top-width: 21px;
+      border-bottom-width: 21px;
+      opacity: 0.7;
+    }
+
+  }
+
+  .mfp-arrow-left {
+    left: 0;
+    &:after {
+      border-right: 17px solid $mfp-controls-color;
+      margin-left: 31px;
+    }
+    &:before {
+      margin-left: 25px;
+      border-right: 27px solid $mfp-controls-border-color;
+    }
+  }
+
+  .mfp-arrow-right {
+    right: 0;
+    &:after {
+      border-left: 17px solid $mfp-controls-color;
+      margin-left: 39px
+    }
+    &:before {
+      border-left: 27px solid $mfp-controls-border-color;
+    }
+  }
+}
+
+
+
+// Iframe content type
+@if $mfp-include-iframe-type {
+  .mfp-iframe-holder {
+    padding-top: $mfp-iframe-padding-top;
+    padding-bottom: $mfp-iframe-padding-top;
+    .mfp-content {
+      line-height: 0;
+      width: 100%;
+      max-width: $mfp-iframe-max-width;
+    }
+    .mfp-close {
+      top: -40px;
+    }
+  }
+  .mfp-iframe-scaler {
+    width: 100%;
+    height: 0;
+    overflow: hidden;
+    padding-top: $mfp-iframe-ratio * 100%;
+    iframe {
+      position: absolute;
+      display: block;
+      top: 0;
+      left: 0;
+      width: 100%;
+      height: 100%;
+      box-shadow: $mfp-shadow;
+      background: $mfp-iframe-background;
+    }
+  }
+}
+
+
+
+// Image content type
+@if $mfp-include-image-type {
+
+  /* Main image in popup */
+  img {
+    &.mfp-img {
+      width: auto;
+      max-width: 100%;
+      height: auto;
+      display: block;
+      line-height: 0;
+      box-sizing: border-box;
+      padding: $mfp-image-padding-top 0 $mfp-image-padding-bottom;
+      margin: 0 auto;
+    }
+  }
+
+  /* The shadow behind the image */
+  .mfp-figure {
+    line-height: 0;
+    &:after {
+      content: '';
+      position: absolute;
+      left: 0;
+      top: $mfp-image-padding-top;
+      bottom: $mfp-image-padding-bottom;
+      display: block;
+      right: 0;
+      width: auto;
+      height: auto;
+      z-index: -1;
+      box-shadow: $mfp-shadow;
+      background: $mfp-image-background;
+    }
+    small {
+      color: $mfp-caption-subtitle-color;
+      display: block;
+      font-size: 12px;
+      line-height: 14px;
+    }
+    figure {
+      margin: 0;
+    }
+  }
+  .mfp-bottom-bar {
+    margin-top: -$mfp-image-padding-bottom + 4;
+    position: absolute;
+    top: 100%;
+    left: 0;
+    width: 100%;
+    cursor: auto;
+  }
+  .mfp-title {
+    text-align: left;
+    line-height: 18px;
+    color: $mfp-caption-title-color;
+    word-wrap: break-word;
+    padding-right: 36px; // leave some space for counter at right side
+  }
+
+  .mfp-image-holder {
+    .mfp-content {
+      max-width: 100%;
+    }
+  }
+
+  .mfp-gallery {
+    .mfp-image-holder {
+      .mfp-figure {
+        cursor: pointer;
+      }
+    }
+  }
+
+
+  @if $mfp-include-mobile-layout-for-image {
+    @media screen and (max-width: 800px) and (orientation:landscape), screen and (max-height: 300px) {
+      /**
+       * Remove all paddings around the image on small screen
+       */
+      .mfp-img-mobile {
+        .mfp-image-holder {
+          padding-left: 0;
+          padding-right: 0;
+        }
+        img {
+          &.mfp-img {
+            padding: 0;
+          }
+        }
+        .mfp-figure {
+          // The shadow behind the image
+          &:after {
+            top: 0;
+            bottom: 0;
+          }
+          small {
+            display: inline;
+            margin-left: 5px;
+          }
+        }
+        .mfp-bottom-bar {
+          background: rgba(0,0,0,0.6);
+          bottom: 0;
+          margin: 0;
+          top: auto;
+          padding: 3px 5px;
+          position: fixed;
+          box-sizing: border-box;
+          &:empty {
+            padding: 0;
+          }
+        }
+        .mfp-counter {
+          right: 5px;
+          top: 3px;
+        }
+        .mfp-close {
+          top: 0;
+          right: 0;
+          width: 35px;
+          height: 35px;
+          line-height: 35px;
+          background: rgba(0, 0, 0, 0.6);
+          position: fixed;
+          text-align: center;
+          padding: 0;
+        }
+      }
+    }
+  }
+}
+
+
+
+// Scale navigation arrows and reduce padding from sides
+@media all and (max-width: 900px) {
+  .mfp-arrow {
+    -webkit-transform: scale(0.75);
+    transform: scale(0.75);
+  }
+  .mfp-arrow-left {
+    -webkit-transform-origin: 0;
+    transform-origin: 0;
+  }
+  .mfp-arrow-right {
+    -webkit-transform-origin: 100%;
+    transform-origin: 100%;
+  }
+  .mfp-container {
+    padding-left: $mfp-popup-padding-left-mobile;
+    padding-right: $mfp-popup-padding-left-mobile;
+  }
+}
+
diff --git a/vendor/dimsemenov/magnific-popup/src/js/ajax.js b/vendor/dimsemenov/magnific-popup/src/js/ajax.js
new file mode 100644
index 0000000000000000000000000000000000000000..471d7a04465fc9d79b25925db0051b837972769a
--- /dev/null
+++ b/vendor/dimsemenov/magnific-popup/src/js/ajax.js
@@ -0,0 +1,77 @@
+var AJAX_NS = 'ajax',
+	_ajaxCur,
+	_removeAjaxCursor = function() {
+		if(_ajaxCur) {
+			$(document.body).removeClass(_ajaxCur);
+		}
+	},
+	_destroyAjaxRequest = function() {
+		_removeAjaxCursor();
+		if(mfp.req) {
+			mfp.req.abort();
+		}
+	};
+
+$.magnificPopup.registerModule(AJAX_NS, {
+
+	options: {
+		settings: null,
+		cursor: 'mfp-ajax-cur',
+		tError: '<a href="%url%">The content</a> could not be loaded.'
+	},
+
+	proto: {
+		initAjax: function() {
+			mfp.types.push(AJAX_NS);
+			_ajaxCur = mfp.st.ajax.cursor;
+
+			_mfpOn(CLOSE_EVENT+'.'+AJAX_NS, _destroyAjaxRequest);
+			_mfpOn('BeforeChange.' + AJAX_NS, _destroyAjaxRequest);
+		},
+		getAjax: function(item) {
+
+			if(_ajaxCur) {
+				$(document.body).addClass(_ajaxCur);
+			}
+
+			mfp.updateStatus('loading');
+
+			var opts = $.extend({
+				url: item.src,
+				success: function(data, textStatus, jqXHR) {
+					var temp = {
+						data:data,
+						xhr:jqXHR
+					};
+
+					_mfpTrigger('ParseAjax', temp);
+
+					mfp.appendContent( $(temp.data), AJAX_NS );
+
+					item.finished = true;
+
+					_removeAjaxCursor();
+
+					mfp._setFocus();
+
+					setTimeout(function() {
+						mfp.wrap.addClass(READY_CLASS);
+					}, 16);
+
+					mfp.updateStatus('ready');
+
+					_mfpTrigger('AjaxContentAdded');
+				},
+				error: function() {
+					_removeAjaxCursor();
+					item.finished = item.loadError = true;
+					mfp.updateStatus('error', mfp.st.ajax.tError.replace('%url%', item.src));
+				}
+			}, mfp.st.ajax.settings);
+
+			mfp.req = $.ajax(opts);
+
+			return '';
+		}
+	}
+});
\ No newline at end of file
diff --git a/vendor/dimsemenov/magnific-popup/src/js/core.js b/vendor/dimsemenov/magnific-popup/src/js/core.js
new file mode 100644
index 0000000000000000000000000000000000000000..7cdfd6f0bf2b86adda7124786ffd75b063f74e80
--- /dev/null
+++ b/vendor/dimsemenov/magnific-popup/src/js/core.js
@@ -0,0 +1,939 @@
+/**
+ * 
+ * Magnific Popup Core JS file
+ * 
+ */
+
+
+/**
+ * Private static constants
+ */
+var CLOSE_EVENT = 'Close',
+	BEFORE_CLOSE_EVENT = 'BeforeClose',
+	AFTER_CLOSE_EVENT = 'AfterClose',
+	BEFORE_APPEND_EVENT = 'BeforeAppend',
+	MARKUP_PARSE_EVENT = 'MarkupParse',
+	OPEN_EVENT = 'Open',
+	CHANGE_EVENT = 'Change',
+	NS = 'mfp',
+	EVENT_NS = '.' + NS,
+	READY_CLASS = 'mfp-ready',
+	REMOVING_CLASS = 'mfp-removing',
+	PREVENT_CLOSE_CLASS = 'mfp-prevent-close';
+
+
+/**
+ * Private vars 
+ */
+/*jshint -W079 */
+var mfp, // As we have only one instance of MagnificPopup object, we define it locally to not to use 'this'
+	MagnificPopup = function(){},
+	_isJQ = !!(window.jQuery),
+	_prevStatus,
+	_window = $(window),
+	_document,
+	_prevContentType,
+	_wrapClasses,
+	_currPopupType;
+
+
+/**
+ * Private functions
+ */
+var _mfpOn = function(name, f) {
+		mfp.ev.on(NS + name + EVENT_NS, f);
+	},
+	_getEl = function(className, appendTo, html, raw) {
+		var el = document.createElement('div');
+		el.className = 'mfp-'+className;
+		if(html) {
+			el.innerHTML = html;
+		}
+		if(!raw) {
+			el = $(el);
+			if(appendTo) {
+				el.appendTo(appendTo);
+			}
+		} else if(appendTo) {
+			appendTo.appendChild(el);
+		}
+		return el;
+	},
+	_mfpTrigger = function(e, data) {
+		mfp.ev.triggerHandler(NS + e, data);
+
+		if(mfp.st.callbacks) {
+			// converts "mfpEventName" to "eventName" callback and triggers it if it's present
+			e = e.charAt(0).toLowerCase() + e.slice(1);
+			if(mfp.st.callbacks[e]) {
+				mfp.st.callbacks[e].apply(mfp, $.isArray(data) ? data : [data]);
+			}
+		}
+	},
+	_getCloseBtn = function(type) {
+		if(type !== _currPopupType || !mfp.currTemplate.closeBtn) {
+			mfp.currTemplate.closeBtn = $( mfp.st.closeMarkup.replace('%title%', mfp.st.tClose ) );
+			_currPopupType = type;
+		}
+		return mfp.currTemplate.closeBtn;
+	},
+	// Initialize Magnific Popup only when called at least once
+	_checkInstance = function() {
+		if(!$.magnificPopup.instance) {
+			/*jshint -W020 */
+			mfp = new MagnificPopup();
+			mfp.init();
+			$.magnificPopup.instance = mfp;
+		}
+	},
+	// CSS transition detection, http://stackoverflow.com/questions/7264899/detect-css-transitions-using-javascript-and-without-modernizr
+	supportsTransitions = function() {
+		var s = document.createElement('p').style, // 's' for style. better to create an element if body yet to exist
+			v = ['ms','O','Moz','Webkit']; // 'v' for vendor
+
+		if( s['transition'] !== undefined ) {
+			return true; 
+		}
+			
+		while( v.length ) {
+			if( v.pop() + 'Transition' in s ) {
+				return true;
+			}
+		}
+				
+		return false;
+	};
+
+
+
+/**
+ * Public functions
+ */
+MagnificPopup.prototype = {
+
+	constructor: MagnificPopup,
+
+	/**
+	 * Initializes Magnific Popup plugin. 
+	 * This function is triggered only once when $.fn.magnificPopup or $.magnificPopup is executed
+	 */
+	init: function() {
+		var appVersion = navigator.appVersion;
+		mfp.isLowIE = mfp.isIE8 = document.all && !document.addEventListener;
+		mfp.isAndroid = (/android/gi).test(appVersion);
+		mfp.isIOS = (/iphone|ipad|ipod/gi).test(appVersion);
+		mfp.supportsTransition = supportsTransitions();
+
+		// We disable fixed positioned lightbox on devices that don't handle it nicely.
+		// If you know a better way of detecting this - let me know.
+		mfp.probablyMobile = (mfp.isAndroid || mfp.isIOS || /(Opera Mini)|Kindle|webOS|BlackBerry|(Opera Mobi)|(Windows Phone)|IEMobile/i.test(navigator.userAgent) );
+		_document = $(document);
+
+		mfp.popupsCache = {};
+	},
+
+	/**
+	 * Opens popup
+	 * @param  data [description]
+	 */
+	open: function(data) {
+
+		var i;
+
+		if(data.isObj === false) { 
+			// convert jQuery collection to array to avoid conflicts later
+			mfp.items = data.items.toArray();
+
+			mfp.index = 0;
+			var items = data.items,
+				item;
+			for(i = 0; i < items.length; i++) {
+				item = items[i];
+				if(item.parsed) {
+					item = item.el[0];
+				}
+				if(item === data.el[0]) {
+					mfp.index = i;
+					break;
+				}
+			}
+		} else {
+			mfp.items = $.isArray(data.items) ? data.items : [data.items];
+			mfp.index = data.index || 0;
+		}
+
+		// if popup is already opened - we just update the content
+		if(mfp.isOpen) {
+			mfp.updateItemHTML();
+			return;
+		}
+		
+		mfp.types = []; 
+		_wrapClasses = '';
+		if(data.mainEl && data.mainEl.length) {
+			mfp.ev = data.mainEl.eq(0);
+		} else {
+			mfp.ev = _document;
+		}
+
+		if(data.key) {
+			if(!mfp.popupsCache[data.key]) {
+				mfp.popupsCache[data.key] = {};
+			}
+			mfp.currTemplate = mfp.popupsCache[data.key];
+		} else {
+			mfp.currTemplate = {};
+		}
+
+
+
+		mfp.st = $.extend(true, {}, $.magnificPopup.defaults, data ); 
+		mfp.fixedContentPos = mfp.st.fixedContentPos === 'auto' ? !mfp.probablyMobile : mfp.st.fixedContentPos;
+
+		if(mfp.st.modal) {
+			mfp.st.closeOnContentClick = false;
+			mfp.st.closeOnBgClick = false;
+			mfp.st.showCloseBtn = false;
+			mfp.st.enableEscapeKey = false;
+		}
+		
+
+		// Building markup
+		// main containers are created only once
+		if(!mfp.bgOverlay) {
+
+			// Dark overlay
+			mfp.bgOverlay = _getEl('bg').on('click'+EVENT_NS, function() {
+				mfp.close();
+			});
+
+			mfp.wrap = _getEl('wrap').attr('tabindex', -1).on('click'+EVENT_NS, function(e) {
+				if(mfp._checkIfClose(e.target)) {
+					mfp.close();
+				}
+			});
+
+			mfp.container = _getEl('container', mfp.wrap);
+		}
+
+		mfp.contentContainer = _getEl('content');
+		if(mfp.st.preloader) {
+			mfp.preloader = _getEl('preloader', mfp.container, mfp.st.tLoading);
+		}
+
+
+		// Initializing modules
+		var modules = $.magnificPopup.modules;
+		for(i = 0; i < modules.length; i++) {
+			var n = modules[i];
+			n = n.charAt(0).toUpperCase() + n.slice(1);
+			mfp['init'+n].call(mfp);
+		}
+		_mfpTrigger('BeforeOpen');
+
+
+		if(mfp.st.showCloseBtn) {
+			// Close button
+			if(!mfp.st.closeBtnInside) {
+				mfp.wrap.append( _getCloseBtn() );
+			} else {
+				_mfpOn(MARKUP_PARSE_EVENT, function(e, template, values, item) {
+					values.close_replaceWith = _getCloseBtn(item.type);
+				});
+				_wrapClasses += ' mfp-close-btn-in';
+			}
+		}
+
+		if(mfp.st.alignTop) {
+			_wrapClasses += ' mfp-align-top';
+		}
+
+	
+
+		if(mfp.fixedContentPos) {
+			mfp.wrap.css({
+				overflow: mfp.st.overflowY,
+				overflowX: 'hidden',
+				overflowY: mfp.st.overflowY
+			});
+		} else {
+			mfp.wrap.css({ 
+				top: _window.scrollTop(),
+				position: 'absolute'
+			});
+		}
+		if( mfp.st.fixedBgPos === false || (mfp.st.fixedBgPos === 'auto' && !mfp.fixedContentPos) ) {
+			mfp.bgOverlay.css({
+				height: _document.height(),
+				position: 'absolute'
+			});
+		}
+
+		
+
+		if(mfp.st.enableEscapeKey) {
+			// Close on ESC key
+			_document.on('keyup' + EVENT_NS, function(e) {
+				if(e.keyCode === 27) {
+					mfp.close();
+				}
+			});
+		}
+
+		_window.on('resize' + EVENT_NS, function() {
+			mfp.updateSize();
+		});
+
+
+		if(!mfp.st.closeOnContentClick) {
+			_wrapClasses += ' mfp-auto-cursor';
+		}
+		
+		if(_wrapClasses)
+			mfp.wrap.addClass(_wrapClasses);
+
+
+		// this triggers recalculation of layout, so we get it once to not to trigger twice
+		var windowHeight = mfp.wH = _window.height();
+
+		
+		var windowStyles = {};
+
+		if( mfp.fixedContentPos ) {
+            if(mfp._hasScrollBar(windowHeight)){
+                var s = mfp._getScrollbarSize();
+                if(s) {
+                    windowStyles.marginRight = s;
+                }
+            }
+        }
+
+		if(mfp.fixedContentPos) {
+			if(!mfp.isIE7) {
+				windowStyles.overflow = 'hidden';
+			} else {
+				// ie7 double-scroll bug
+				$('body, html').css('overflow', 'hidden');
+			}
+		}
+
+		
+		
+		var classesToadd = mfp.st.mainClass;
+		if(mfp.isIE7) {
+			classesToadd += ' mfp-ie7';
+		}
+		if(classesToadd) {
+			mfp._addClassToMFP( classesToadd );
+		}
+
+		// add content
+		mfp.updateItemHTML();
+
+		_mfpTrigger('BuildControls');
+
+		// remove scrollbar, add margin e.t.c
+		$('html').css(windowStyles);
+		
+		// add everything to DOM
+		mfp.bgOverlay.add(mfp.wrap).prependTo( mfp.st.prependTo || $(document.body) );
+
+		// Save last focused element
+		mfp._lastFocusedEl = document.activeElement;
+		
+		// Wait for next cycle to allow CSS transition
+		setTimeout(function() {
+			
+			if(mfp.content) {
+				mfp._addClassToMFP(READY_CLASS);
+				mfp._setFocus();
+			} else {
+				// if content is not defined (not loaded e.t.c) we add class only for BG
+				mfp.bgOverlay.addClass(READY_CLASS);
+			}
+			
+			// Trap the focus in popup
+			_document.on('focusin' + EVENT_NS, mfp._onFocusIn);
+
+		}, 16);
+
+		mfp.isOpen = true;
+		mfp.updateSize(windowHeight);
+		_mfpTrigger(OPEN_EVENT);
+
+		return data;
+	},
+
+	/**
+	 * Closes the popup
+	 */
+	close: function() {
+		if(!mfp.isOpen) return;
+		_mfpTrigger(BEFORE_CLOSE_EVENT);
+
+		mfp.isOpen = false;
+		// for CSS3 animation
+		if(mfp.st.removalDelay && !mfp.isLowIE && mfp.supportsTransition )  {
+			mfp._addClassToMFP(REMOVING_CLASS);
+			setTimeout(function() {
+				mfp._close();
+			}, mfp.st.removalDelay);
+		} else {
+			mfp._close();
+		}
+	},
+
+	/**
+	 * Helper for close() function
+	 */
+	_close: function() {
+		_mfpTrigger(CLOSE_EVENT);
+
+		var classesToRemove = REMOVING_CLASS + ' ' + READY_CLASS + ' ';
+
+		mfp.bgOverlay.detach();
+		mfp.wrap.detach();
+		mfp.container.empty();
+
+		if(mfp.st.mainClass) {
+			classesToRemove += mfp.st.mainClass + ' ';
+		}
+
+		mfp._removeClassFromMFP(classesToRemove);
+
+		if(mfp.fixedContentPos) {
+			var windowStyles = {marginRight: ''};
+			if(mfp.isIE7) {
+				$('body, html').css('overflow', '');
+			} else {
+				windowStyles.overflow = '';
+			}
+			$('html').css(windowStyles);
+		}
+		
+		_document.off('keyup' + EVENT_NS + ' focusin' + EVENT_NS);
+		mfp.ev.off(EVENT_NS);
+
+		// clean up DOM elements that aren't removed
+		mfp.wrap.attr('class', 'mfp-wrap').removeAttr('style');
+		mfp.bgOverlay.attr('class', 'mfp-bg');
+		mfp.container.attr('class', 'mfp-container');
+
+		// remove close button from target element
+		if(mfp.st.showCloseBtn &&
+		(!mfp.st.closeBtnInside || mfp.currTemplate[mfp.currItem.type] === true)) {
+			if(mfp.currTemplate.closeBtn)
+				mfp.currTemplate.closeBtn.detach();
+		}
+
+
+		if(mfp.st.autoFocusLast && mfp._lastFocusedEl) {
+			$(mfp._lastFocusedEl).focus(); // put tab focus back
+		}
+		mfp.currItem = null;	
+		mfp.content = null;
+		mfp.currTemplate = null;
+		mfp.prevHeight = 0;
+
+		_mfpTrigger(AFTER_CLOSE_EVENT);
+	},
+	
+	updateSize: function(winHeight) {
+
+		if(mfp.isIOS) {
+			// fixes iOS nav bars https://github.com/dimsemenov/Magnific-Popup/issues/2
+			var zoomLevel = document.documentElement.clientWidth / window.innerWidth;
+			var height = window.innerHeight * zoomLevel;
+			mfp.wrap.css('height', height);
+			mfp.wH = height;
+		} else {
+			mfp.wH = winHeight || _window.height();
+		}
+		// Fixes #84: popup incorrectly positioned with position:relative on body
+		if(!mfp.fixedContentPos) {
+			mfp.wrap.css('height', mfp.wH);
+		}
+
+		_mfpTrigger('Resize');
+
+	},
+
+	/**
+	 * Set content of popup based on current index
+	 */
+	updateItemHTML: function() {
+		var item = mfp.items[mfp.index];
+
+		// Detach and perform modifications
+		mfp.contentContainer.detach();
+
+		if(mfp.content)
+			mfp.content.detach();
+
+		if(!item.parsed) {
+			item = mfp.parseEl( mfp.index );
+		}
+
+		var type = item.type;
+
+		_mfpTrigger('BeforeChange', [mfp.currItem ? mfp.currItem.type : '', type]);
+		// BeforeChange event works like so:
+		// _mfpOn('BeforeChange', function(e, prevType, newType) { });
+
+		mfp.currItem = item;
+
+		if(!mfp.currTemplate[type]) {
+			var markup = mfp.st[type] ? mfp.st[type].markup : false;
+
+			// allows to modify markup
+			_mfpTrigger('FirstMarkupParse', markup);
+
+			if(markup) {
+				mfp.currTemplate[type] = $(markup);
+			} else {
+				// if there is no markup found we just define that template is parsed
+				mfp.currTemplate[type] = true;
+			}
+		}
+
+		if(_prevContentType && _prevContentType !== item.type) {
+			mfp.container.removeClass('mfp-'+_prevContentType+'-holder');
+		}
+
+		var newContent = mfp['get' + type.charAt(0).toUpperCase() + type.slice(1)](item, mfp.currTemplate[type]);
+		mfp.appendContent(newContent, type);
+
+		item.preloaded = true;
+
+		_mfpTrigger(CHANGE_EVENT, item);
+		_prevContentType = item.type;
+
+		// Append container back after its content changed
+		mfp.container.prepend(mfp.contentContainer);
+
+		_mfpTrigger('AfterChange');
+	},
+
+
+	/**
+	 * Set HTML content of popup
+	 */
+	appendContent: function(newContent, type) {
+		mfp.content = newContent;
+
+		if(newContent) {
+			if(mfp.st.showCloseBtn && mfp.st.closeBtnInside &&
+				mfp.currTemplate[type] === true) {
+				// if there is no markup, we just append close button element inside
+				if(!mfp.content.find('.mfp-close').length) {
+					mfp.content.append(_getCloseBtn());
+				}
+			} else {
+				mfp.content = newContent;
+			}
+		} else {
+			mfp.content = '';
+		}
+
+		_mfpTrigger(BEFORE_APPEND_EVENT);
+		mfp.container.addClass('mfp-'+type+'-holder');
+
+		mfp.contentContainer.append(mfp.content);
+	},
+
+
+	/**
+	 * Creates Magnific Popup data object based on given data
+	 * @param  {int} index Index of item to parse
+	 */
+	parseEl: function(index) {
+		var item = mfp.items[index],
+			type;
+
+		if(item.tagName) {
+			item = { el: $(item) };
+		} else {
+			type = item.type;
+			item = { data: item, src: item.src };
+		}
+
+		if(item.el) {
+			var types = mfp.types;
+
+			// check for 'mfp-TYPE' class
+			for(var i = 0; i < types.length; i++) {
+				if( item.el.hasClass('mfp-'+types[i]) ) {
+					type = types[i];
+					break;
+				}
+			}
+
+			item.src = item.el.attr('data-mfp-src');
+			if(!item.src) {
+				item.src = item.el.attr('href');
+			}
+		}
+
+		item.type = type || mfp.st.type || 'inline';
+		item.index = index;
+		item.parsed = true;
+		mfp.items[index] = item;
+		_mfpTrigger('ElementParse', item);
+
+		return mfp.items[index];
+	},
+
+
+	/**
+	 * Initializes single popup or a group of popups
+	 */
+	addGroup: function(el, options) {
+		var eHandler = function(e) {
+			e.mfpEl = this;
+			mfp._openClick(e, el, options);
+		};
+
+		if(!options) {
+			options = {};
+		}
+
+		var eName = 'click.magnificPopup';
+		options.mainEl = el;
+
+		if(options.items) {
+			options.isObj = true;
+			el.off(eName).on(eName, eHandler);
+		} else {
+			options.isObj = false;
+			if(options.delegate) {
+				el.off(eName).on(eName, options.delegate , eHandler);
+			} else {
+				options.items = el;
+				el.off(eName).on(eName, eHandler);
+			}
+		}
+	},
+	_openClick: function(e, el, options) {
+		var midClick = options.midClick !== undefined ? options.midClick : $.magnificPopup.defaults.midClick;
+
+
+		if(!midClick && ( e.which === 2 || e.ctrlKey || e.metaKey || e.altKey || e.shiftKey ) ) {
+			return;
+		}
+
+		var disableOn = options.disableOn !== undefined ? options.disableOn : $.magnificPopup.defaults.disableOn;
+
+		if(disableOn) {
+			if($.isFunction(disableOn)) {
+				if( !disableOn.call(mfp) ) {
+					return true;
+				}
+			} else { // else it's number
+				if( _window.width() < disableOn ) {
+					return true;
+				}
+			}
+		}
+
+		if(e.type) {
+			e.preventDefault();
+
+			// This will prevent popup from closing if element is inside and popup is already opened
+			if(mfp.isOpen) {
+				e.stopPropagation();
+			}
+		}
+
+		options.el = $(e.mfpEl);
+		if(options.delegate) {
+			options.items = el.find(options.delegate);
+		}
+		mfp.open(options);
+	},
+
+
+	/**
+	 * Updates text on preloader
+	 */
+	updateStatus: function(status, text) {
+
+		if(mfp.preloader) {
+			if(_prevStatus !== status) {
+				mfp.container.removeClass('mfp-s-'+_prevStatus);
+			}
+
+			if(!text && status === 'loading') {
+				text = mfp.st.tLoading;
+			}
+
+			var data = {
+				status: status,
+				text: text
+			};
+			// allows to modify status
+			_mfpTrigger('UpdateStatus', data);
+
+			status = data.status;
+			text = data.text;
+
+			mfp.preloader.html(text);
+
+			mfp.preloader.find('a').on('click', function(e) {
+				e.stopImmediatePropagation();
+			});
+
+			mfp.container.addClass('mfp-s-'+status);
+			_prevStatus = status;
+		}
+	},
+
+
+	/*
+		"Private" helpers that aren't private at all
+	 */
+	// Check to close popup or not
+	// "target" is an element that was clicked
+	_checkIfClose: function(target) {
+
+		if($(target).hasClass(PREVENT_CLOSE_CLASS)) {
+			return;
+		}
+
+		var closeOnContent = mfp.st.closeOnContentClick;
+		var closeOnBg = mfp.st.closeOnBgClick;
+
+		if(closeOnContent && closeOnBg) {
+			return true;
+		} else {
+
+			// We close the popup if click is on close button or on preloader. Or if there is no content.
+			if(!mfp.content || $(target).hasClass('mfp-close') || (mfp.preloader && target === mfp.preloader[0]) ) {
+				return true;
+			}
+
+			// if click is outside the content
+			if(  (target !== mfp.content[0] && !$.contains(mfp.content[0], target))  ) {
+				if(closeOnBg) {
+					// last check, if the clicked element is in DOM, (in case it's removed onclick)
+					if( $.contains(document, target) ) {
+						return true;
+					}
+				}
+			} else if(closeOnContent) {
+				return true;
+			}
+
+		}
+		return false;
+	},
+	_addClassToMFP: function(cName) {
+		mfp.bgOverlay.addClass(cName);
+		mfp.wrap.addClass(cName);
+	},
+	_removeClassFromMFP: function(cName) {
+		this.bgOverlay.removeClass(cName);
+		mfp.wrap.removeClass(cName);
+	},
+	_hasScrollBar: function(winHeight) {
+		return (  (mfp.isIE7 ? _document.height() : document.body.scrollHeight) > (winHeight || _window.height()) );
+	},
+	_setFocus: function() {
+		(mfp.st.focus ? mfp.content.find(mfp.st.focus).eq(0) : mfp.wrap).focus();
+	},
+	_onFocusIn: function(e) {
+		if( e.target !== mfp.wrap[0] && !$.contains(mfp.wrap[0], e.target) ) {
+			mfp._setFocus();
+			return false;
+		}
+	},
+	_parseMarkup: function(template, values, item) {
+		var arr;
+		if(item.data) {
+			values = $.extend(item.data, values);
+		}
+		_mfpTrigger(MARKUP_PARSE_EVENT, [template, values, item] );
+
+		$.each(values, function(key, value) {
+			if(value === undefined || value === false) {
+				return true;
+			}
+			arr = key.split('_');
+			if(arr.length > 1) {
+				var el = template.find(EVENT_NS + '-'+arr[0]);
+
+				if(el.length > 0) {
+					var attr = arr[1];
+					if(attr === 'replaceWith') {
+						if(el[0] !== value[0]) {
+							el.replaceWith(value);
+						}
+					} else if(attr === 'img') {
+						if(el.is('img')) {
+							el.attr('src', value);
+						} else {
+							el.replaceWith( $('<img>').attr('src', value).attr('class', el.attr('class')) );
+						}
+					} else {
+						el.attr(arr[1], value);
+					}
+				}
+
+			} else {
+				template.find(EVENT_NS + '-'+key).html(value);
+			}
+		});
+	},
+
+	_getScrollbarSize: function() {
+		// thx David
+		if(mfp.scrollbarSize === undefined) {
+			var scrollDiv = document.createElement("div");
+			scrollDiv.style.cssText = 'width: 99px; height: 99px; overflow: scroll; position: absolute; top: -9999px;';
+			document.body.appendChild(scrollDiv);
+			mfp.scrollbarSize = scrollDiv.offsetWidth - scrollDiv.clientWidth;
+			document.body.removeChild(scrollDiv);
+		}
+		return mfp.scrollbarSize;
+	}
+
+}; /* MagnificPopup core prototype end */
+
+
+
+
+/**
+ * Public static functions
+ */
+$.magnificPopup = {
+	instance: null,
+	proto: MagnificPopup.prototype,
+	modules: [],
+
+	open: function(options, index) {
+		_checkInstance();
+
+		if(!options) {
+			options = {};
+		} else {
+			options = $.extend(true, {}, options);
+		}
+
+		options.isObj = true;
+		options.index = index || 0;
+		return this.instance.open(options);
+	},
+
+	close: function() {
+		return $.magnificPopup.instance && $.magnificPopup.instance.close();
+	},
+
+	registerModule: function(name, module) {
+		if(module.options) {
+			$.magnificPopup.defaults[name] = module.options;
+		}
+		$.extend(this.proto, module.proto);
+		this.modules.push(name);
+	},
+
+	defaults: {
+
+		// Info about options is in docs:
+		// http://dimsemenov.com/plugins/magnific-popup/documentation.html#options
+
+		disableOn: 0,
+
+		key: null,
+
+		midClick: false,
+
+		mainClass: '',
+
+		preloader: true,
+
+		focus: '', // CSS selector of input to focus after popup is opened
+
+		closeOnContentClick: false,
+
+		closeOnBgClick: true,
+
+		closeBtnInside: true,
+
+		showCloseBtn: true,
+
+		enableEscapeKey: true,
+
+		modal: false,
+
+		alignTop: false,
+
+		removalDelay: 0,
+
+		prependTo: null,
+
+		fixedContentPos: 'auto',
+
+		fixedBgPos: 'auto',
+
+		overflowY: 'auto',
+
+		closeMarkup: '<button title="%title%" type="button" class="mfp-close">&#215;</button>',
+
+		tClose: 'Close (Esc)',
+
+		tLoading: 'Loading...',
+
+		autoFocusLast: true
+
+	}
+};
+
+
+
+$.fn.magnificPopup = function(options) {
+	_checkInstance();
+
+	var jqEl = $(this);
+
+	// We call some API method of first param is a string
+	if (typeof options === "string" ) {
+
+		if(options === 'open') {
+			var items,
+				itemOpts = _isJQ ? jqEl.data('magnificPopup') : jqEl[0].magnificPopup,
+				index = parseInt(arguments[1], 10) || 0;
+
+			if(itemOpts.items) {
+				items = itemOpts.items[index];
+			} else {
+				items = jqEl;
+				if(itemOpts.delegate) {
+					items = items.find(itemOpts.delegate);
+				}
+				items = items.eq( index );
+			}
+			mfp._openClick({mfpEl:items}, jqEl, itemOpts);
+		} else {
+			if(mfp.isOpen)
+				mfp[options].apply(mfp, Array.prototype.slice.call(arguments, 1));
+		}
+
+	} else {
+		// clone options obj
+		options = $.extend(true, {}, options);
+
+		/*
+		 * As Zepto doesn't support .data() method for objects
+		 * and it works only in normal browsers
+		 * we assign "options" object directly to the DOM element. FTW!
+		 */
+		if(_isJQ) {
+			jqEl.data('magnificPopup', options);
+		} else {
+			jqEl[0].magnificPopup = options;
+		}
+
+		mfp.addGroup(jqEl, options);
+
+	}
+	return jqEl;
+};
\ No newline at end of file
diff --git a/vendor/dimsemenov/magnific-popup/src/js/gallery.js b/vendor/dimsemenov/magnific-popup/src/js/gallery.js
new file mode 100644
index 0000000000000000000000000000000000000000..f73d68c7725f4579f99d6cf953bf4e76fa88060d
--- /dev/null
+++ b/vendor/dimsemenov/magnific-popup/src/js/gallery.js
@@ -0,0 +1,164 @@
+/**
+ * Get looped index depending on number of slides
+ */
+var _getLoopedId = function(index) {
+		var numSlides = mfp.items.length;
+		if(index > numSlides - 1) {
+			return index - numSlides;
+		} else  if(index < 0) {
+			return numSlides + index;
+		}
+		return index;
+	},
+	_replaceCurrTotal = function(text, curr, total) {
+		return text.replace(/%curr%/gi, curr + 1).replace(/%total%/gi, total);
+	};
+
+$.magnificPopup.registerModule('gallery', {
+
+	options: {
+		enabled: false,
+		arrowMarkup: '<button title="%title%" type="button" class="mfp-arrow mfp-arrow-%dir%"></button>',
+		preload: [0,2],
+		navigateByImgClick: true,
+		arrows: true,
+
+		tPrev: 'Previous (Left arrow key)',
+		tNext: 'Next (Right arrow key)',
+		tCounter: '%curr% of %total%'
+	},
+
+	proto: {
+		initGallery: function() {
+
+			var gSt = mfp.st.gallery,
+				ns = '.mfp-gallery';
+
+			mfp.direction = true; // true - next, false - prev
+
+			if(!gSt || !gSt.enabled ) return false;
+
+			_wrapClasses += ' mfp-gallery';
+
+			_mfpOn(OPEN_EVENT+ns, function() {
+
+				if(gSt.navigateByImgClick) {
+					mfp.wrap.on('click'+ns, '.mfp-img', function() {
+						if(mfp.items.length > 1) {
+							mfp.next();
+							return false;
+						}
+					});
+				}
+
+				_document.on('keydown'+ns, function(e) {
+					if (e.keyCode === 37) {
+						mfp.prev();
+					} else if (e.keyCode === 39) {
+						mfp.next();
+					}
+				});
+			});
+
+			_mfpOn('UpdateStatus'+ns, function(e, data) {
+				if(data.text) {
+					data.text = _replaceCurrTotal(data.text, mfp.currItem.index, mfp.items.length);
+				}
+			});
+
+			_mfpOn(MARKUP_PARSE_EVENT+ns, function(e, element, values, item) {
+				var l = mfp.items.length;
+				values.counter = l > 1 ? _replaceCurrTotal(gSt.tCounter, item.index, l) : '';
+			});
+
+			_mfpOn('BuildControls' + ns, function() {
+				if(mfp.items.length > 1 && gSt.arrows && !mfp.arrowLeft) {
+					var markup = gSt.arrowMarkup,
+						arrowLeft = mfp.arrowLeft = $( markup.replace(/%title%/gi, gSt.tPrev).replace(/%dir%/gi, 'left') ).addClass(PREVENT_CLOSE_CLASS),
+						arrowRight = mfp.arrowRight = $( markup.replace(/%title%/gi, gSt.tNext).replace(/%dir%/gi, 'right') ).addClass(PREVENT_CLOSE_CLASS);
+
+					arrowLeft.click(function() {
+						mfp.prev();
+					});
+					arrowRight.click(function() {
+						mfp.next();
+					});
+
+					mfp.container.append(arrowLeft.add(arrowRight));
+				}
+			});
+
+			_mfpOn(CHANGE_EVENT+ns, function() {
+				if(mfp._preloadTimeout) clearTimeout(mfp._preloadTimeout);
+
+				mfp._preloadTimeout = setTimeout(function() {
+					mfp.preloadNearbyImages();
+					mfp._preloadTimeout = null;
+				}, 16);
+			});
+
+
+			_mfpOn(CLOSE_EVENT+ns, function() {
+				_document.off(ns);
+				mfp.wrap.off('click'+ns);
+				mfp.arrowRight = mfp.arrowLeft = null;
+			});
+
+		},
+		next: function() {
+			mfp.direction = true;
+			mfp.index = _getLoopedId(mfp.index + 1);
+			mfp.updateItemHTML();
+		},
+		prev: function() {
+			mfp.direction = false;
+			mfp.index = _getLoopedId(mfp.index - 1);
+			mfp.updateItemHTML();
+		},
+		goTo: function(newIndex) {
+			mfp.direction = (newIndex >= mfp.index);
+			mfp.index = newIndex;
+			mfp.updateItemHTML();
+		},
+		preloadNearbyImages: function() {
+			var p = mfp.st.gallery.preload,
+				preloadBefore = Math.min(p[0], mfp.items.length),
+				preloadAfter = Math.min(p[1], mfp.items.length),
+				i;
+
+			for(i = 1; i <= (mfp.direction ? preloadAfter : preloadBefore); i++) {
+				mfp._preloadItem(mfp.index+i);
+			}
+			for(i = 1; i <= (mfp.direction ? preloadBefore : preloadAfter); i++) {
+				mfp._preloadItem(mfp.index-i);
+			}
+		},
+		_preloadItem: function(index) {
+			index = _getLoopedId(index);
+
+			if(mfp.items[index].preloaded) {
+				return;
+			}
+
+			var item = mfp.items[index];
+			if(!item.parsed) {
+				item = mfp.parseEl( index );
+			}
+
+			_mfpTrigger('LazyLoad', item);
+
+			if(item.type === 'image') {
+				item.img = $('<img class="mfp-img" />').on('load.mfploader', function() {
+					item.hasSize = true;
+				}).on('error.mfploader', function() {
+					item.hasSize = true;
+					item.loadError = true;
+					_mfpTrigger('LazyLoadError', item);
+				}).attr('src', item.src);
+			}
+
+
+			item.preloaded = true;
+		}
+	}
+});
\ No newline at end of file
diff --git a/vendor/dimsemenov/magnific-popup/src/js/iframe.js b/vendor/dimsemenov/magnific-popup/src/js/iframe.js
new file mode 100644
index 0000000000000000000000000000000000000000..a339ca06e6ffac6b3d9696d264608b0b19600c1c
--- /dev/null
+++ b/vendor/dimsemenov/magnific-popup/src/js/iframe.js
@@ -0,0 +1,102 @@
+
+var IFRAME_NS = 'iframe',
+	_emptyPage = '//about:blank',
+
+	_fixIframeBugs = function(isShowing) {
+		if(mfp.currTemplate[IFRAME_NS]) {
+			var el = mfp.currTemplate[IFRAME_NS].find('iframe');
+			if(el.length) {
+				// reset src after the popup is closed to avoid "video keeps playing after popup is closed" bug
+				if(!isShowing) {
+					el[0].src = _emptyPage;
+				}
+
+				// IE8 black screen bug fix
+				if(mfp.isIE8) {
+					el.css('display', isShowing ? 'block' : 'none');
+				}
+			}
+		}
+	};
+
+$.magnificPopup.registerModule(IFRAME_NS, {
+
+	options: {
+		markup: '<div class="mfp-iframe-scaler">'+
+					'<div class="mfp-close"></div>'+
+					'<iframe class="mfp-iframe" src="//about:blank" frameborder="0" allowfullscreen></iframe>'+
+				'</div>',
+
+		srcAction: 'iframe_src',
+
+		// we don't care and support only one default type of URL by default
+		patterns: {
+			youtube: {
+				index: 'youtube.com',
+				id: 'v=',
+				src: '//www.youtube.com/embed/%id%?autoplay=1'
+			},
+			vimeo: {
+				index: 'vimeo.com/',
+				id: '/',
+				src: '//player.vimeo.com/video/%id%?autoplay=1'
+			},
+			gmaps: {
+				index: '//maps.google.',
+				src: '%id%&output=embed'
+			}
+		}
+	},
+
+	proto: {
+		initIframe: function() {
+			mfp.types.push(IFRAME_NS);
+
+			_mfpOn('BeforeChange', function(e, prevType, newType) {
+				if(prevType !== newType) {
+					if(prevType === IFRAME_NS) {
+						_fixIframeBugs(); // iframe if removed
+					} else if(newType === IFRAME_NS) {
+						_fixIframeBugs(true); // iframe is showing
+					}
+				}// else {
+					// iframe source is switched, don't do anything
+				//}
+			});
+
+			_mfpOn(CLOSE_EVENT + '.' + IFRAME_NS, function() {
+				_fixIframeBugs();
+			});
+		},
+
+		getIframe: function(item, template) {
+			var embedSrc = item.src;
+			var iframeSt = mfp.st.iframe;
+
+			$.each(iframeSt.patterns, function() {
+				if(embedSrc.indexOf( this.index ) > -1) {
+					if(this.id) {
+						if(typeof this.id === 'string') {
+							embedSrc = embedSrc.substr(embedSrc.lastIndexOf(this.id)+this.id.length, embedSrc.length);
+						} else {
+							embedSrc = this.id.call( this, embedSrc );
+						}
+					}
+					embedSrc = this.src.replace('%id%', embedSrc );
+					return false; // break;
+				}
+			});
+
+			var dataObj = {};
+			if(iframeSt.srcAction) {
+				dataObj[iframeSt.srcAction] = embedSrc;
+			}
+			mfp._parseMarkup(template, dataObj, item);
+
+			mfp.updateStatus('ready');
+
+			return template;
+		}
+	}
+});
+
diff --git a/vendor/dimsemenov/magnific-popup/src/js/image.js b/vendor/dimsemenov/magnific-popup/src/js/image.js
new file mode 100644
index 0000000000000000000000000000000000000000..f5687c85cc608631a444c287b0d74cd976a40a1d
--- /dev/null
+++ b/vendor/dimsemenov/magnific-popup/src/js/image.js
@@ -0,0 +1,244 @@
+var _imgInterval,
+	_getTitle = function(item) {
+		if(item.data && item.data.title !== undefined)
+			return item.data.title;
+
+		var src = mfp.st.image.titleSrc;
+
+		if(src) {
+			if($.isFunction(src)) {
+				return src.call(mfp, item);
+			} else if(item.el) {
+				return item.el.attr(src) || '';
+			}
+		}
+		return '';
+	};
+
+$.magnificPopup.registerModule('image', {
+
+	options: {
+		markup: '<div class="mfp-figure">'+
+					'<div class="mfp-close"></div>'+
+					'<figure>'+
+						'<div class="mfp-img"></div>'+
+						'<figcaption>'+
+							'<div class="mfp-bottom-bar">'+
+								'<div class="mfp-title"></div>'+
+								'<div class="mfp-counter"></div>'+
+							'</div>'+
+						'</figcaption>'+
+					'</figure>'+
+				'</div>',
+		cursor: 'mfp-zoom-out-cur',
+		titleSrc: 'title',
+		verticalFit: true,
+		tError: '<a href="%url%">The image</a> could not be loaded.'
+	},
+
+	proto: {
+		initImage: function() {
+			var imgSt = mfp.st.image,
+				ns = '.image';
+
+			mfp.types.push('image');
+
+			_mfpOn(OPEN_EVENT+ns, function() {
+				if(mfp.currItem.type === 'image' && imgSt.cursor) {
+					$(document.body).addClass(imgSt.cursor);
+				}
+			});
+
+			_mfpOn(CLOSE_EVENT+ns, function() {
+				if(imgSt.cursor) {
+					$(document.body).removeClass(imgSt.cursor);
+				}
+				_window.off('resize' + EVENT_NS);
+			});
+
+			_mfpOn('Resize'+ns, mfp.resizeImage);
+			if(mfp.isLowIE) {
+				_mfpOn('AfterChange', mfp.resizeImage);
+			}
+		},
+		resizeImage: function() {
+			var item = mfp.currItem;
+			if(!item || !item.img) return;
+
+			if(mfp.st.image.verticalFit) {
+				var decr = 0;
+				// fix box-sizing in ie7/8
+				if(mfp.isLowIE) {
+					decr = parseInt(item.img.css('padding-top'), 10) + parseInt(item.img.css('padding-bottom'),10);
+				}
+				item.img.css('max-height', mfp.wH-decr);
+			}
+		},
+		_onImageHasSize: function(item) {
+			if(item.img) {
+
+				item.hasSize = true;
+
+				if(_imgInterval) {
+					clearInterval(_imgInterval);
+				}
+
+				item.isCheckingImgSize = false;
+
+				_mfpTrigger('ImageHasSize', item);
+
+				if(item.imgHidden) {
+					if(mfp.content)
+						mfp.content.removeClass('mfp-loading');
+
+					item.imgHidden = false;
+				}
+
+			}
+		},
+
+		/**
+		 * Function that loops until the image has size to display elements that rely on it asap
+		 */
+		findImageSize: function(item) {
+
+			var counter = 0,
+				img = item.img[0],
+				mfpSetInterval = function(delay) {
+
+					if(_imgInterval) {
+						clearInterval(_imgInterval);
+					}
+					// decelerating interval that checks for size of an image
+					_imgInterval = setInterval(function() {
+						if(img.naturalWidth > 0) {
+							mfp._onImageHasSize(item);
+							return;
+						}
+
+						if(counter > 200) {
+							clearInterval(_imgInterval);
+						}
+
+						counter++;
+						if(counter === 3) {
+							mfpSetInterval(10);
+						} else if(counter === 40) {
+							mfpSetInterval(50);
+						} else if(counter === 100) {
+							mfpSetInterval(500);
+						}
+					}, delay);
+				};
+
+			mfpSetInterval(1);
+		},
+
+		getImage: function(item, template) {
+
+			var guard = 0,
+
+				// image load complete handler
+				onLoadComplete = function() {
+					if(item) {
+						if (item.img[0].complete) {
+							item.img.off('.mfploader');
+
+							if(item === mfp.currItem){
+								mfp._onImageHasSize(item);
+
+								mfp.updateStatus('ready');
+							}
+
+							item.hasSize = true;
+							item.loaded = true;
+
+							_mfpTrigger('ImageLoadComplete');
+
+						}
+						else {
+							// if image complete check fails 200 times (20 sec), we assume that there was an error.
+							guard++;
+							if(guard < 200) {
+								setTimeout(onLoadComplete,100);
+							} else {
+								onLoadError();
+							}
+						}
+					}
+				},
+
+				// image error handler
+				onLoadError = function() {
+					if(item) {
+						item.img.off('.mfploader');
+						if(item === mfp.currItem){
+							mfp._onImageHasSize(item);
+							mfp.updateStatus('error', imgSt.tError.replace('%url%', item.src) );
+						}
+
+						item.hasSize = true;
+						item.loaded = true;
+						item.loadError = true;
+					}
+				},
+				imgSt = mfp.st.image;
+
+
+			var el = template.find('.mfp-img');
+			if(el.length) {
+				var img = document.createElement('img');
+				img.className = 'mfp-img';
+				if(item.el && item.el.find('img').length) {
+					img.alt = item.el.find('img').attr('alt');
+				}
+				item.img = $(img).on('load.mfploader', onLoadComplete).on('error.mfploader', onLoadError);
+				img.src = item.src;
+
+				// without clone() "error" event is not firing when IMG is replaced by new IMG
+				// TODO: find a way to avoid such cloning
+				if(el.is('img')) {
+					item.img = item.img.clone();
+				}
+
+				img = item.img[0];
+				if(img.naturalWidth > 0) {
+					item.hasSize = true;
+				} else if(!img.width) {
+					item.hasSize = false;
+				}
+			}
+
+			mfp._parseMarkup(template, {
+				title: _getTitle(item),
+				img_replaceWith: item.img
+			}, item);
+
+			mfp.resizeImage();
+
+			if(item.hasSize) {
+				if(_imgInterval) clearInterval(_imgInterval);
+
+				if(item.loadError) {
+					template.addClass('mfp-loading');
+					mfp.updateStatus('error', imgSt.tError.replace('%url%', item.src) );
+				} else {
+					template.removeClass('mfp-loading');
+					mfp.updateStatus('ready');
+				}
+				return template;
+			}
+
+			mfp.updateStatus('loading');
+			item.loading = true;
+
+			if(!item.hasSize) {
+				item.imgHidden = true;
+				template.addClass('mfp-loading');
+				mfp.findImageSize(item);
+			}
+
+			return template;
+		}
+	}
+});
\ No newline at end of file
diff --git a/vendor/dimsemenov/magnific-popup/src/js/inline.js b/vendor/dimsemenov/magnific-popup/src/js/inline.js
new file mode 100644
index 0000000000000000000000000000000000000000..299e9a4ba2211e031d11ea91d2df93d7a2115c5d
--- /dev/null
+++ b/vendor/dimsemenov/magnific-popup/src/js/inline.js
@@ -0,0 +1,66 @@
+
+var INLINE_NS = 'inline',
+	_hiddenClass,
+	_inlinePlaceholder,
+	_lastInlineElement,
+	_putInlineElementsBack = function() {
+		if(_lastInlineElement) {
+			_inlinePlaceholder.after( _lastInlineElement.addClass(_hiddenClass) ).detach();
+			_lastInlineElement = null;
+		}
+	};
+
+$.magnificPopup.registerModule(INLINE_NS, {
+	options: {
+		hiddenClass: 'hide', // will be appended with `mfp-` prefix
+		markup: '',
+		tNotFound: 'Content not found'
+	},
+	proto: {
+
+		initInline: function() {
+			mfp.types.push(INLINE_NS);
+
+			_mfpOn(CLOSE_EVENT+'.'+INLINE_NS, function() {
+				_putInlineElementsBack();
+			});
+		},
+
+		getInline: function(item, template) {
+
+			_putInlineElementsBack();
+
+			if(item.src) {
+				var inlineSt = mfp.st.inline,
+					el = $(item.src);
+
+				if(el.length) {
+
+					// If target element has parent - we replace it with placeholder and put it back after popup is closed
+					var parent = el[0].parentNode;
+					if(parent && parent.tagName) {
+						if(!_inlinePlaceholder) {
+							_hiddenClass = inlineSt.hiddenClass;
+							_inlinePlaceholder = _getEl(_hiddenClass);
+							_hiddenClass = 'mfp-'+_hiddenClass;
+						}
+						// replace target inline element with placeholder
+						_lastInlineElement = el.after(_inlinePlaceholder).detach().removeClass(_hiddenClass);
+					}
+
+					mfp.updateStatus('ready');
+				} else {
+					mfp.updateStatus('error', inlineSt.tNotFound);
+					el = $('<div>');
+				}
+
+				item.inlineElement = el;
+				return el;
+			}
+
+			mfp.updateStatus('ready');
+			mfp._parseMarkup(template, {}, item);
+			return template;
+		}
+	}
+});
\ No newline at end of file
diff --git a/vendor/dimsemenov/magnific-popup/src/js/retina.js b/vendor/dimsemenov/magnific-popup/src/js/retina.js
new file mode 100644
index 0000000000000000000000000000000000000000..f18fc96462b483636e496ddfc7d67ef67b04bec1
--- /dev/null
+++ b/vendor/dimsemenov/magnific-popup/src/js/retina.js
@@ -0,0 +1,35 @@
+
+var RETINA_NS = 'retina';
+
+$.magnificPopup.registerModule(RETINA_NS, {
+	options: {
+		replaceSrc: function(item) {
+			return item.src.replace(/\.\w+$/, function(m) { return '@2x' + m; });
+		},
+		ratio: 1 // Function or number.  Set to 1 to disable.
+	},
+	proto: {
+		initRetina: function() {
+			if(window.devicePixelRatio > 1) {
+
+				var st = mfp.st.retina,
+					ratio = st.ratio;
+
+				ratio = !isNaN(ratio) ? ratio : ratio();
+
+				if(ratio > 1) {
+					_mfpOn('ImageHasSize' + '.' + RETINA_NS, function(e, item) {
+						item.img.css({
+							'max-width': item.img[0].naturalWidth / ratio,
+							'width': '100%'
+						});
+					});
+					_mfpOn('ElementParse' + '.' + RETINA_NS, function(e, item) {
+						item.src = st.replaceSrc(item, ratio);
+					});
+				}
+			}
+
+		}
+	}
+});
\ No newline at end of file
diff --git a/vendor/dimsemenov/magnific-popup/src/js/zoom.js b/vendor/dimsemenov/magnific-popup/src/js/zoom.js
new file mode 100644
index 0000000000000000000000000000000000000000..5894a66c751dd58bffb2dcd972972e89e295665a
--- /dev/null
+++ b/vendor/dimsemenov/magnific-popup/src/js/zoom.js
@@ -0,0 +1,183 @@
+var hasMozTransform,
+	getHasMozTransform = function() {
+		if(hasMozTransform === undefined) {
+			hasMozTransform = document.createElement('p').style.MozTransform !== undefined;
+		}
+		return hasMozTransform;
+	};
+
+$.magnificPopup.registerModule('zoom', {
+
+	options: {
+		enabled: false,
+		easing: 'ease-in-out',
+		duration: 300,
+		opener: function(element) {
+			return element.is('img') ? element : element.find('img');
+		}
+	},
+
+	proto: {
+
+		initZoom: function() {
+			var zoomSt = mfp.st.zoom,
+				ns = '.zoom',
+				image;
+
+			if(!zoomSt.enabled || !mfp.supportsTransition) {
+				return;
+			}
+
+			var duration = zoomSt.duration,
+				getElToAnimate = function(image) {
+					var newImg = image.clone().removeAttr('style').removeAttr('class').addClass('mfp-animated-image'),
+						transition = 'all '+(zoomSt.duration/1000)+'s ' + zoomSt.easing,
+						cssObj = {
+							position: 'fixed',
+							zIndex: 9999,
+							left: 0,
+							top: 0,
+							'-webkit-backface-visibility': 'hidden'
+						},
+						t = 'transition';
+
+					cssObj['-webkit-'+t] = cssObj['-moz-'+t] = cssObj['-o-'+t] = cssObj[t] = transition;
+
+					newImg.css(cssObj);
+					return newImg;
+				},
+				showMainContent = function() {
+					mfp.content.css('visibility', 'visible');
+				},
+				openTimeout,
+				animatedImg;
+
+			_mfpOn('BuildControls'+ns, function() {
+				if(mfp._allowZoom()) {
+
+					clearTimeout(openTimeout);
+					mfp.content.css('visibility', 'hidden');
+
+					// Basically, all code below does is clones existing image, puts in on top of the current one and animated it
+
+					image = mfp._getItemToZoom();
+
+					if(!image) {
+						showMainContent();
+						return;
+					}
+
+					animatedImg = getElToAnimate(image);
+
+					animatedImg.css( mfp._getOffset() );
+
+					mfp.wrap.append(animatedImg);
+
+					openTimeout = setTimeout(function() {
+						animatedImg.css( mfp._getOffset( true ) );
+						openTimeout = setTimeout(function() {
+
+							showMainContent();
+
+							setTimeout(function() {
+								animatedImg.remove();
+								image = animatedImg = null;
+								_mfpTrigger('ZoomAnimationEnded');
+							}, 16); // avoid blink when switching images
+
+						}, duration); // this timeout equals animation duration
+
+					}, 16); // by adding this timeout we avoid short glitch at the beginning of animation
+
+
+					// Lots of timeouts...
+				}
+			});
+			_mfpOn(BEFORE_CLOSE_EVENT+ns, function() {
+				if(mfp._allowZoom()) {
+
+					clearTimeout(openTimeout);
+
+					mfp.st.removalDelay = duration;
+
+					if(!image) {
+						image = mfp._getItemToZoom();
+						if(!image) {
+							return;
+						}
+						animatedImg = getElToAnimate(image);
+					}
+
+					animatedImg.css( mfp._getOffset(true) );
+					mfp.wrap.append(animatedImg);
+					mfp.content.css('visibility', 'hidden');
+
+					setTimeout(function() {
+						animatedImg.css( mfp._getOffset() );
+					}, 16);
+				}
+
+			});
+
+			_mfpOn(CLOSE_EVENT+ns, function() {
+				if(mfp._allowZoom()) {
+					showMainContent();
+					if(animatedImg) {
+						animatedImg.remove();
+					}
+					image = null;
+				}
+			});
+		},
+
+		_allowZoom: function() {
+			return mfp.currItem.type === 'image';
+		},
+
+		_getItemToZoom: function() {
+			if(mfp.currItem.hasSize) {
+				return mfp.currItem.img;
+			} else {
+				return false;
+			}
+		},
+
+		// Get element postion relative to viewport
+		_getOffset: function(isLarge) {
+			var el;
+			if(isLarge) {
+				el = mfp.currItem.img;
+			} else {
+				el = mfp.st.zoom.opener(mfp.currItem.el || mfp.currItem);
+			}
+
+			var offset = el.offset();
+			var paddingTop = parseInt(el.css('padding-top'),10);
+			var paddingBottom = parseInt(el.css('padding-bottom'),10);
+			offset.top -= ( $(window).scrollTop() - paddingTop );
+
+
+			/*
+
+			Animating left + top + width/height looks glitchy in Firefox, but perfect in Chrome. And vice-versa.
+
+			 */
+			var obj = {
+				width: el.width(),
+				// fix Zepto height+padding issue
+				height: (_isJQ ? el.innerHeight() : el[0].offsetHeight) - paddingBottom - paddingTop
+			};
+
+			// I hate to do this, but there is no another option
+			if( getHasMozTransform() ) {
+				obj['-moz-transform'] = obj['transform'] = 'translate(' + offset.left + 'px,' + offset.top + 'px)';
+			} else {
+				obj.left = offset.left;
+				obj.top = offset.top;
+			}
+			return obj;
+		}
+
+	}
+});
+
diff --git a/vendor/dimsemenov/magnific-popup/website/_includes/analytics.html b/vendor/dimsemenov/magnific-popup/website/_includes/analytics.html
new file mode 100644
index 0000000000000000000000000000000000000000..b36899f4d28be3bdcc2b1347598634a37a60707d
--- /dev/null
+++ b/vendor/dimsemenov/magnific-popup/website/_includes/analytics.html
@@ -0,0 +1,24 @@
+{% if site.url == 'local' %}
+  <!-- analytics removed -->
+{% else %}
+<!-- Analytics start -->
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+    _gaq.push(['_setAccount', 'UA-25969065-1']);
+    _gaq.push(['_trackPageview']);
+
+    (function() {
+      var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+      ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+      var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+    })();
+
+    function recordOutboundLink(link, category, action) {
+      _gat._getTrackerByName()._trackEvent(category, action);
+      setTimeout('document.location = "' + link.href + '"', 100);
+    }
+</script>
+
+<!-- ya metrika -->
+<script type="text/javascript">(function (d, w, c) { (w[c] = w[c] || []).push(function() { try { w.yaCounter11382601 = new Ya.Metrika({id:11382601, webvisor:true, clickmap:true, trackLinks:true, accurateTrackBounce:true}); } catch(e) { } }); var n = d.getElementsByTagName("script")[0], s = d.createElement("script"), f = function () { n.parentNode.insertBefore(s, n); }; s.type = "text/javascript"; s.async = true; s.src = (d.location.protocol == "https:" ? "https:" : "http:") + "//mc.yandex.ru/metrika/watch.js"; if (w.opera == "[object Opera]") { d.addEventListener("DOMContentLoaded", f, false); } else { f(); } })(document, window, "yandex_metrika_callbacks");</script><noscript><div><img src="//mc.yandex.ru/watch/11382601" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
+{% endif %}
\ No newline at end of file
diff --git a/vendor/dimsemenov/magnific-popup/website/_includes/build-tool.html b/vendor/dimsemenov/magnific-popup/website/_includes/build-tool.html
new file mode 100644
index 0000000000000000000000000000000000000000..386a745ba7ee0ddae835866545c31965e37d35db
--- /dev/null
+++ b/vendor/dimsemenov/magnific-popup/website/_includes/build-tool.html
@@ -0,0 +1,273 @@
+<!-- Basic idea of such build tool is stolen from modernizr.com -->
+<div id="mfp-build-tool" class="mfp-hide">
+  <h2>Magnific Popup v{{site.mfpversion}} Build Tool</h2>
+  <form id="mfp-build-form">
+    <p class="help-block">Here you can generate optimized version of main JS file. Please note that CSS you should download directly: <a target="_blank"  href="https://raw.github.com/dimsemenov/Magnific-Popup/master/src/css/main.scss">Sass version</a> or <a target="_blank" href="https://raw.github.com/dimsemenov/Magnific-Popup/master/dist/magnific-popup.css">CSS version</a>.</p>
+     <label class="checkbox">
+      <input type="checkbox" name="inline" checked> Inline
+    </label>
+    <label class="checkbox">
+      <input type="checkbox" name="image" checked> Image
+    </label>
+    <label class="checkbox">
+      <input type="checkbox" name="ajax" checked> Ajax
+    </label>
+    <label class="checkbox">
+      <input type="checkbox" name="iframe" checked> Iframe
+    </label>
+    <label class="checkbox">
+      <input type="checkbox" name="gallery" checked> Gallery
+    </label>
+    <label class="checkbox">
+      <input type="checkbox" name="retina" checked> High-DPI (retina) support for image type
+    </label>
+    <label class="checkbox">
+      <input type="checkbox" name="imagezoom" checked> Image zoom animation
+    </label>
+  </form> 
+     
+  <br/>
+  <div>
+    <button id="mfp-build-button">Generate build</button>  
+  	<label class="checkbox">
+      <input id="mfp-minify" type="checkbox" name="minify" checked="checked"> Minify code
+    </label> 
+  </div>
+  <br/>
+  <p id="mfp-build-status" style="display:none"></p>
+  <br/>
+  <textarea id="mfp-build-tool-out" style="width: 100%; height: 300px; display:none;"></textarea>
+</div>
+
+
+
+<script type="text/javascript">
+	$(document).ready(function($) {
+		
+		$('.mfp-build-tool-link').magnificPopup({closeBtnInside:true, type:'inline', midClick: true});
+
+		var h = window.location.hash;
+		if(h.indexOf('build=') > -1) {
+			var formInputs = $('#mfp-build-form input');
+			
+		    if(h.indexOf('&') > 0) {
+		       h = h.substr(0, h.indexOf('&'));
+		    }
+		    var items = h.substr(h.indexOf('build=') + 6, h.length).split('+');
+		    for(var i = 0; i < items.length; i++) {
+		      var name = items[i];
+		      if(name) {
+		        formInputs.filter('[name="' +name+ '"]').addClass('present');
+		      }
+		    }
+	    	formInputs.not('.present').prop('checked', false);
+    	}
+
+
+	    var button = $('#mfp-build-button').click(function(e) {
+	    	e.preventDefault();
+
+	    	button.attr('disabled', 'disabled');
+
+	    	var statusTimeout;
+	    	var setStatus = function(msg, type) {
+	    		clearTimeout(statusTimeout);
+	    		$('#mfp-build-status').html('<span class="'+type+'">'+msg+'</span>').show();
+	    	};
+	    	setStatus('Wait a moment please...', 'progress');
+	    	$('#mfp-build-tool-out').val( '' );
+
+	    	
+
+	    	var minify = $('#mfp-minify')[0].checked;
+	    	var removeModule = function(source, key) {
+			        source = source.replace(new RegExp("\\/\\*>>"+key+"\\*\\/[\\s|\\S]*?\\/\\*>>"+key+"\\*\\/", "ig"), "");
+			        return source;
+			    };
+
+
+
+
+
+			var onError = function() {
+				setStatus("Error: Build tool wasn't able to GET the js file. Please try again or make file by yourself using Grunt.", 'error');
+			};
+
+			var version = '{{site.mfpversion}}';
+			var loadedScripts = [];
+		    var onScriptsLoaded = function() {
+
+		    	
+			    var src = loadedScripts[0];
+
+			    var hash = '',
+		            name;
+
+		        $('#mfp-build-form input').each(function() {
+		          name = $(this).attr('name');
+
+		          if( this.checked ) {
+		            hash += name + '+';
+		          } else {
+		            src = removeModule(src, name);
+		          }
+
+		        });
+
+		        var output = '';
+
+		        if(hash) {
+		        	hash = hash.substr(0, hash.length-1);
+		        }
+		        
+		        if(minify) {
+					src = uglify(src, ["--extra","--unsafe"]);
+					output = '// Magnific Popup v'+version+' by Dmitry Semenov' + "\n";
+		        	output += '// http://bit.ly/magnific-popup' + (hash ? '#build=' + hash : '') + "\n" + src;
+		        } else {
+		        	output = src;
+		        }
+		        
+		        if(!hash) {
+		        	hash = 'core';
+		        } else {
+		       		hash = 'core+' + hash;
+		        }
+
+		        $('#mfp-build-tool-out').val( output ).show();
+
+		        button.removeAttr('disabled');
+
+		        setStatus('Magnific Popup main js file successfully generated! You can copy generated code from textarea below.' + (hash ? (' Your build includes: <strong>' + hash.split('+').join(', ')) + '</strong>. ' : ''), 'success');
+		    };
+
+
+		    $.ajax({
+			 	url:"dist/jquery.magnific-popup.js?v="+version, 
+			 	dataType: 'text',
+			 	success: function( data) {
+			 		loadedScripts[0] = data;
+			 		if(loadedScripts[1]) {
+			 			onScriptsLoaded();
+			 		}
+			 	},
+			 	error: onError
+			});
+
+			$.ajax({
+			 	url:"third-party-libs/uglify.js", 
+			 	dataType: 'script',
+			 	cache: true,
+			 	success: function(data) {
+			 		loadedScripts[1] = data;
+			 		if(loadedScripts[0]) {
+			 			onScriptsLoaded();
+			 		}
+			 	},
+			 	error: onError
+			});
+
+		});
+		/* build tool END */
+
+
+
+
+
+
+		/**
+		 * Popup with source code for each example
+		 */
+		var example,
+		      getCode,
+		      CSS,
+		      JS,
+		      HTML,
+		      highlighterLoaded;
+
+		  var formatCode = function (str) {
+		      if(str) {
+		        // replace special chars
+		        str = str.replace(/[&<>"']/g, function($0) {
+		            return "&" + {"&":"amp", "<":"lt", ">":"gt", '"':"quot", "'":"#39"}[$0] + ";";
+		        });
+		        
+		        // remove spaces from each line based on spaces on first line
+		        var firstLineLength = str.match(/^(\s*)/)[1].length;
+		        var regExp = new RegExp('^ {' + (firstLineLength-1) + '}', "gm");
+		        str = str.replace(regExp, '');
+
+		        // replace spaces with tabs
+		        str = str.replace(/  /g,'\t');
+
+		        str = $.trim(str);
+		      }
+		      return str;
+		    };
+
+		  var highlight = function() {
+		    hljs.highlightBlock(JS.find('code')[0]);
+
+		    if(CSS)
+		      hljs.highlightBlock(CSS.find('code')[0]);
+
+		    if(HTML)
+		      hljs.highlightBlock(HTML.find('code')[0]);
+		  };
+
+		$('.example').each(function() {
+		    $(this).find('h3').click(function() {
+				var example = $(this).parent('.example');
+				var getCodeWindow = $('<div class="get-code-window"><h1>'+example.find('h3').text()+'</h1></div>');
+				JS = $('<div class="highlight"><pre><code class="javascript">'+formatCode(example.find('script').eq(0).html())+'</code></pre></div>');
+
+				CSS = example.find('style');
+				if(CSS.length) {
+					CSS = $('<div class="highlight"><pre><code class="css">'+formatCode(CSS.html())+'</code></pre></div>');
+				} else {
+					CSS = '';
+				}
+
+				HTML = example.find('.html-code');
+				if(HTML.length) {
+					HTML = $('<div class="highlight"><pre><code class="xml html">'+formatCode(HTML.html())+'</code></pre></div>');
+				} else {
+					HTML = '';
+				}
+
+				if(!highlighterLoaded) {
+					highlighterLoaded = true;
+					var script = document.createElement("script"),
+						$script = $(script);
+						script.src = 'http://yandex.st/highlightjs/7.3/highlight.min.js';
+					if(window.jQuery) {
+						$.getScript(script.src , function() {
+							highlight();
+						});
+					} else {
+						$(script).appendTo("head").on("load", function() {
+							highlight();
+						});
+					}
+				} else {
+					highlight();
+				}
+
+				getCodeWindow.append(JS);
+				getCodeWindow.append(HTML);
+				getCodeWindow.append(CSS);
+
+				getCodeWindow.append('<p>Code above is dynamically generated directly from the source of this example.<br/>Please read <a href="documentation.html">the documentation</a> before using it.</p>');
+
+				$.magnificPopup.open({
+					items: {
+						src: getCodeWindow,
+						type: 'inline'
+					}
+				});
+
+		});
+
+	});
+});
+</script>
diff --git a/vendor/dimsemenov/magnific-popup/website/_includes/examples.html b/vendor/dimsemenov/magnific-popup/website/_includes/examples.html
new file mode 100644
index 0000000000000000000000000000000000000000..0d510032fa693026fe68b6ccd178fc32b18dfe37
--- /dev/null
+++ b/vendor/dimsemenov/magnific-popup/website/_includes/examples.html
@@ -0,0 +1,676 @@
+{% if site.url == 'local' %}
+   <!-- <script  src="third-party-libs/zepto.js"></script> -->
+   <script>
+    document.write('<script src=third-party-libs/' +
+    ('__proto__' in {} ? 'zepto' : 'jquery') +
+    '.min.js><\/script>')
+  </script>
+  <script src="dist/jquery.magnific-popup.js?v={{site.mfpversion}}"></script>
+  
+{% else %}
+  <script>
+    document.write('<script src=third-party-libs/' +
+    ('__proto__' in {} ? 'zepto' : 'jquery') +
+    '.min.js><\/script>')
+  </script>
+  <script src="dist/jquery.magnific-popup.min.js?v={{site.mfpversion}}"></script>
+{% endif %}
+
+<!--
+
+Each '.example' block contains JS, HTML and optionally CSS for popup. 
+
+-->
+<h2 id="examples">Examples</h2>
+
+<div class="grid-c">
+  <div class="example gc3">
+    <h3>Single image lightbox</h3> 
+    <p>Three simple popups with different scaling settings.<br/>
+      1 &mdash; fits horizontally and vertically,<br/>
+      2 &mdash; only horizontally,<br/>
+      3 &mdash; no gaps, zoom animation, close icon in top-right corner.<br/>
+    </p>
+    <div class="html-code grid-of-images">
+      <a class="image-popup-vertical-fit" href="http://farm9.staticflickr.com/8241/8589392310_7b6127e243_b.jpg" title="Caption. Can be aligned to any side and contain any HTML.">
+        <img src="http://farm9.staticflickr.com/8241/8589392310_7b6127e243_s.jpg" width="75" height="75" />
+      </a>
+      <a class="image-popup-fit-width" href="http://farm9.staticflickr.com/8379/8588290361_ecf8c27021_b.jpg" title="This image fits only horizontally.">
+        <img src="http://farm9.staticflickr.com/8379/8588290361_ecf8c27021_s.jpg" width="75" height="75" />
+      </a>
+      <a class="image-popup-no-margins" href="http://farm4.staticflickr.com/3721/9207329484_ba28755ec4_o.jpg">
+        <img src="http://farm4.staticflickr.com/3721/9207329484_ba28755ec4_o.jpg" width="107" height="75" />
+      </a>
+    </div>
+    <script type="text/javascript">
+      $(document).ready(function() {
+
+        $('.image-popup-vertical-fit').magnificPopup({
+          type: 'image',
+          closeOnContentClick: true,
+          mainClass: 'mfp-img-mobile',
+          image: {
+            verticalFit: true
+          }
+          
+        });
+
+        $('.image-popup-fit-width').magnificPopup({
+          type: 'image',
+          closeOnContentClick: true,
+          image: {
+            verticalFit: false
+          }
+        });
+
+        $('.image-popup-no-margins').magnificPopup({
+          type: 'image',
+          closeOnContentClick: true,
+          closeBtnInside: false,
+          fixedContentPos: true,
+          mainClass: 'mfp-no-margins mfp-with-zoom', // class to remove default margin from left and right side
+          image: {
+            verticalFit: true
+          },
+          zoom: {
+            enabled: true,
+            duration: 300 // don't foget to change the duration also in CSS
+          }
+        });
+
+      });
+    </script>
+    <style type="text/css">
+    /* padding-bottom and top for image */
+    .mfp-no-margins img.mfp-img {
+      padding: 0;
+    }
+    /* position of shadow behind the image */
+    .mfp-no-margins .mfp-figure:after {
+      top: 0;
+      bottom: 0;
+    }
+    /* padding for main container */
+    .mfp-no-margins .mfp-container {
+      padding: 0;
+    }
+
+
+    /* 
+
+    for zoom animation 
+    uncomment this part if you haven't added this code anywhere else
+
+    */
+    /*
+    
+    .mfp-with-zoom .mfp-container,
+    .mfp-with-zoom.mfp-bg {
+      opacity: 0;
+      -webkit-backface-visibility: hidden;
+      -webkit-transition: all 0.3s ease-out; 
+      -moz-transition: all 0.3s ease-out; 
+      -o-transition: all 0.3s ease-out; 
+      transition: all 0.3s ease-out;
+    }
+    
+    .mfp-with-zoom.mfp-ready .mfp-container {
+        opacity: 1;
+    }
+    .mfp-with-zoom.mfp-ready.mfp-bg {
+        opacity: 0.8;
+    }
+    
+    .mfp-with-zoom.mfp-removing .mfp-container, 
+    .mfp-with-zoom.mfp-removing.mfp-bg {
+      opacity: 0;
+    }
+    */
+    </style>
+  </div>
+
+
+
+
+
+  <div class="example gc3">
+    <h3>Lightbox gallery</h3>
+    <p>You may put any HTML content in each gallery item and <a href="http://codepen.io/dimsemenov/pen/vKrqs">mix content types</a>. In this example lazy-loading of images is enabled for the next image based on move direction. If you wish to add touch-swipe support, check <a href="http://coding.smashingmagazine.com/2013/05/02/truly-responsive-lightbox/">my article</a> on the Smashing Magazine, or <a href="http://photoswipe.com">new PhotoSwipe</a> script.</p>
+    <div class="html-code grid-of-images">
+      <div class="popup-gallery">
+        <a href="http://farm9.staticflickr.com/8242/8558295633_f34a55c1c6_b.jpg" title="The Cleaner"><img src="http://farm9.staticflickr.com/8242/8558295633_f34a55c1c6_s.jpg" width="75" height="75" /></a>
+        <a href="http://farm9.staticflickr.com/8382/8558295631_0f56c1284f_b.jpg" title="Winter Dance"><img src="http://farm9.staticflickr.com/8382/8558295631_0f56c1284f_s.jpg" width="75" height="75" /></a>
+        <a href="http://farm9.staticflickr.com/8225/8558295635_b1c5ce2794_b.jpg" title="The Uninvited Guest"><img src="http://farm9.staticflickr.com/8225/8558295635_b1c5ce2794_s.jpg" width="75" height="75" /></a>
+        <a href="http://farm9.staticflickr.com/8383/8563475581_df05e9906d_b.jpg" title="Oh no, not again!"><img src="http://farm9.staticflickr.com/8383/8563475581_df05e9906d_s.jpg" width="75" height="75" /></a>
+        <a href="http://farm9.staticflickr.com/8235/8559402846_8b7f82e05d_b.jpg" title="Swan Lake"><img src="http://farm9.staticflickr.com/8235/8559402846_8b7f82e05d_s.jpg" width="75" height="75" /></a>
+        <a href="http://farm9.staticflickr.com/8235/8558295467_e89e95e05a_b.jpg" title="The Shake"><img src="http://farm9.staticflickr.com/8235/8558295467_e89e95e05a_s.jpg" width="75" height="75" /></a>
+        <a href="http://farm9.staticflickr.com/8378/8559402848_9fcd90d20b_b.jpg" title="Who's that, mommy?"><img src="http://farm9.staticflickr.com/8378/8559402848_9fcd90d20b_s.jpg" width="75" height="75" /></a>
+      </div>
+    </div>
+    <script type="text/javascript">
+      $(document).ready(function() {
+        $('.popup-gallery').magnificPopup({
+          delegate: 'a',
+          type: 'image',
+          tLoading: 'Loading image #%curr%...',
+          mainClass: 'mfp-img-mobile',
+          gallery: {
+            enabled: true,
+            navigateByImgClick: true,
+            preload: [0,1] // Will preload 0 - before current, and 1 after the current image
+          },
+          image: {
+            tError: '<a href="%url%">The image #%curr%</a> could not be loaded.',
+            titleSrc: function(item) {
+              return item.el.attr('title') + '<small>by Marsel Van Oosten</small>';
+            }
+          }
+        });
+      });
+    </script>
+  </div>
+
+
+
+
+
+  <div class="example gc3">
+    <h3>Zoom-gallery</h3> 
+    <p>If you wish to open the popup only after image is fully loaded, you may preload image via JS. Or use scaled down image instead of thumbnail. Zoom effect works only with images, for now.</p>
+    <div class="html-code grid-of-images">
+      <div class="zoom-gallery">
+        <!--
+
+        Width/height ratio of thumbnail and the main image must match to avoid glitches.
+
+        If ratios are different, you may add CSS3 opacity transition to the main image to make the change less noticable.
+
+         -->
+        <a href="http://farm4.staticflickr.com/3763/9204547649_0472680945_o.jpg" data-source="http://500px.com/photo/32736307" title="Into The Blue" style="width:193px;height:125px;">
+          <img src="http://farm4.staticflickr.com/3763/9204547649_7de96ee188_t.jpg" width="193" height="125" />
+        </a>
+        <a href="http://farm3.staticflickr.com/2856/9207329420_7f2a668b06_o.jpg" data-source="http://500px.com/photo/32554131" title="Light Sabre" style="width:82px;height:125px;">
+          <img src="http://farm3.staticflickr.com/2856/9207329420_e485948b01_t.jpg" width="82px" height="125" />
+        </a>
+      </div>
+    </div>
+    <script type="text/javascript">
+      $(document).ready(function() {
+        $('.zoom-gallery').magnificPopup({
+          delegate: 'a',
+          type: 'image',
+          closeOnContentClick: false,
+          closeBtnInside: false,
+          mainClass: 'mfp-with-zoom mfp-img-mobile',
+          image: {
+            verticalFit: true,
+            titleSrc: function(item) {
+              return item.el.attr('title') + ' &middot; <a class="image-source-link" href="'+item.el.attr('data-source')+'" target="_blank">image source</a>';
+            }
+          },
+          gallery: {
+            enabled: true
+          },
+          zoom: {
+            enabled: true,
+            duration: 300, // don't foget to change the duration also in CSS
+            opener: function(element) {
+              return element.find('img');
+            }
+          }
+          
+        });
+      });
+    </script>
+    <style type="text/css">
+    .image-source-link {
+      color: #98C3D1;
+    }
+
+    .mfp-with-zoom .mfp-container,
+    .mfp-with-zoom.mfp-bg {
+      opacity: 0;
+      -webkit-backface-visibility: hidden;
+      /* ideally, transition speed should match zoom duration */
+      -webkit-transition: all 0.3s ease-out; 
+      -moz-transition: all 0.3s ease-out; 
+      -o-transition: all 0.3s ease-out; 
+      transition: all 0.3s ease-out;
+    }
+    
+    .mfp-with-zoom.mfp-ready .mfp-container {
+        opacity: 1;
+    }
+    .mfp-with-zoom.mfp-ready.mfp-bg {
+        opacity: 0.8;
+    }
+    
+    .mfp-with-zoom.mfp-removing .mfp-container, 
+    .mfp-with-zoom.mfp-removing.mfp-bg {
+      opacity: 0;
+    }
+
+
+    </style>
+  </div>
+
+
+
+
+
+  <div class="example gc3">
+    <h3>Popup with video or map</h3>
+    <p>In this example lightboxes are automatically disabled on small screen size and default behavior of link is triggered.</p>
+    <div class="html-code">
+      <a class="popup-youtube" href="http://www.youtube.com/watch?v=0O2aH4XLbto">Open YouTube video</a><br/>
+      <a class="popup-vimeo" href="https://vimeo.com/45830194" >Open Vimeo video</a><br/>
+      <a class="popup-gmaps" href="https://maps.google.com/maps?q=221B+Baker+Street,+London,+United+Kingdom&hl=en&t=v&hnear=221B+Baker+St,+London+NW1+6XE,+United+Kingdom">Open Google Map</a>
+    </div>
+    <style type="text/css">
+      /**
+       * Simple fade transition,
+       */
+      .mfp-fade.mfp-bg {
+        opacity: 0;
+        -webkit-transition: all 0.15s ease-out; 
+        -moz-transition: all 0.15s ease-out; 
+        transition: all 0.15s ease-out;
+      }
+      .mfp-fade.mfp-bg.mfp-ready {
+        opacity: 0.8;
+      }
+      .mfp-fade.mfp-bg.mfp-removing {
+        opacity: 0;
+      }
+
+      .mfp-fade.mfp-wrap .mfp-content {
+        opacity: 0;
+        -webkit-transition: all 0.15s ease-out; 
+        -moz-transition: all 0.15s ease-out; 
+        transition: all 0.15s ease-out;
+      }
+      .mfp-fade.mfp-wrap.mfp-ready .mfp-content {
+        opacity: 1;
+      }
+      .mfp-fade.mfp-wrap.mfp-removing .mfp-content {
+        opacity: 0;
+      }
+    </style>
+    <script type="text/javascript">
+      $(document).ready(function() {
+        $('.popup-youtube, .popup-vimeo, .popup-gmaps').magnificPopup({
+          disableOn: 700,
+          type: 'iframe',
+          mainClass: 'mfp-fade',
+          removalDelay: 160,
+          preloader: false,
+
+          fixedContentPos: false
+        });
+      });
+    </script>
+  </div>
+
+
+
+
+
+  <div class="example gc3">
+    <h3>Dialog with CSS animation</h3>
+    <p>Animations are added with simple CSS transitions, you can make them look however you wish.<br/>More <a href="http://codepen.io/dimsemenov/pen/GAIkt">animation effects on CodePen</a>.</p>
+    <div class="html-code">
+      <a class="popup-with-zoom-anim" href="#small-dialog" >Open with fade-zoom animation</a><br/>
+      <a class="popup-with-move-anim" href="#small-dialog" >Open with fade-slide animation</a>
+
+      <!-- dialog itself, mfp-hide class is required to make dialog hidden -->
+      <div id="small-dialog" class="zoom-anim-dialog mfp-hide">
+        <h1>Dialog example</h1>
+        <p>This is dummy copy. It is not meant to be read. It has been placed here solely to demonstrate the look and feel of finished, typeset text. Only for show. He who searches for meaning here will be sorely disappointed.</p>
+      </div>
+    </div>
+
+    <script type="text/javascript">
+      $(document).ready(function() {
+        $('.popup-with-zoom-anim').magnificPopup({
+          type: 'inline',
+
+          fixedContentPos: false,
+          fixedBgPos: true,
+
+          overflowY: 'auto',
+
+          closeBtnInside: true,
+          preloader: false,
+          
+          midClick: true,
+          removalDelay: 300,
+          mainClass: 'my-mfp-zoom-in'
+        });
+
+        $('.popup-with-move-anim').magnificPopup({
+          type: 'inline',
+
+          fixedContentPos: false,
+          fixedBgPos: true,
+
+          overflowY: 'auto',
+
+          closeBtnInside: true,
+          preloader: false,
+          
+          midClick: true,
+          removalDelay: 300,
+          mainClass: 'my-mfp-slide-bottom'
+        });
+      });
+    </script>
+
+    <style type="text/css">
+      /* Styles for dialog window */
+      #small-dialog {
+        background: white;
+        padding: 20px 30px;
+        text-align: left;
+        max-width: 400px;
+        margin: 40px auto;
+        position: relative;
+      }
+
+
+      /**
+       * Fade-zoom animation for first dialog
+       */
+      
+      /* start state */
+      .my-mfp-zoom-in .zoom-anim-dialog {
+        opacity: 0;
+
+        -webkit-transition: all 0.2s ease-in-out; 
+        -moz-transition: all 0.2s ease-in-out; 
+        -o-transition: all 0.2s ease-in-out; 
+        transition: all 0.2s ease-in-out; 
+
+
+
+        -webkit-transform: scale(0.8); 
+        -moz-transform: scale(0.8); 
+        -ms-transform: scale(0.8); 
+        -o-transform: scale(0.8); 
+        transform: scale(0.8); 
+      }
+
+      /* animate in */
+      .my-mfp-zoom-in.mfp-ready .zoom-anim-dialog {
+        opacity: 1;
+
+        -webkit-transform: scale(1); 
+        -moz-transform: scale(1); 
+        -ms-transform: scale(1); 
+        -o-transform: scale(1); 
+        transform: scale(1); 
+      }
+
+      /* animate out */
+      .my-mfp-zoom-in.mfp-removing .zoom-anim-dialog {
+        -webkit-transform: scale(0.8); 
+        -moz-transform: scale(0.8); 
+        -ms-transform: scale(0.8); 
+        -o-transform: scale(0.8); 
+        transform: scale(0.8); 
+
+        opacity: 0;
+      }
+
+      /* Dark overlay, start state */
+      .my-mfp-zoom-in.mfp-bg {
+        opacity: 0;
+        -webkit-transition: opacity 0.3s ease-out; 
+        -moz-transition: opacity 0.3s ease-out; 
+        -o-transition: opacity 0.3s ease-out; 
+        transition: opacity 0.3s ease-out;
+      }
+      /* animate in */
+      .my-mfp-zoom-in.mfp-ready.mfp-bg {
+        opacity: 0.8;
+      }
+      /* animate out */
+      .my-mfp-zoom-in.mfp-removing.mfp-bg {
+        opacity: 0;
+      }
+
+
+
+      /**
+       * Fade-move animation for second dialog
+       */
+      
+      /* at start */
+      .my-mfp-slide-bottom .zoom-anim-dialog {
+        opacity: 0;
+        -webkit-transition: all 0.2s ease-out;
+        -moz-transition: all 0.2s ease-out;
+        -o-transition: all 0.2s ease-out;
+        transition: all 0.2s ease-out;
+
+        -webkit-transform: translateY(-20px) perspective( 600px ) rotateX( 10deg );
+        -moz-transform: translateY(-20px) perspective( 600px ) rotateX( 10deg );
+        -ms-transform: translateY(-20px) perspective( 600px ) rotateX( 10deg );
+        -o-transform: translateY(-20px) perspective( 600px ) rotateX( 10deg );
+        transform: translateY(-20px) perspective( 600px ) rotateX( 10deg );
+
+      }
+      
+      /* animate in */
+      .my-mfp-slide-bottom.mfp-ready .zoom-anim-dialog {
+        opacity: 1;
+        -webkit-transform: translateY(0) perspective( 600px ) rotateX( 0 ); 
+        -moz-transform: translateY(0) perspective( 600px ) rotateX( 0 ); 
+        -ms-transform: translateY(0) perspective( 600px ) rotateX( 0 ); 
+        -o-transform: translateY(0) perspective( 600px ) rotateX( 0 ); 
+        transform: translateY(0) perspective( 600px ) rotateX( 0 ); 
+      }
+
+      /* animate out */
+      .my-mfp-slide-bottom.mfp-removing .zoom-anim-dialog {
+        opacity: 0;
+
+        -webkit-transform: translateY(-10px) perspective( 600px ) rotateX( 10deg ); 
+        -moz-transform: translateY(-10px) perspective( 600px ) rotateX( 10deg ); 
+        -ms-transform: translateY(-10px) perspective( 600px ) rotateX( 10deg ); 
+        -o-transform: translateY(-10px) perspective( 600px ) rotateX( 10deg ); 
+        transform: translateY(-10px) perspective( 600px ) rotateX( 10deg ); 
+      }
+
+      /* Dark overlay, start state */
+      .my-mfp-slide-bottom.mfp-bg {
+        opacity: 0;
+
+        -webkit-transition: opacity 0.3s ease-out; 
+        -moz-transition: opacity 0.3s ease-out; 
+        -o-transition: opacity 0.3s ease-out; 
+        transition: opacity 0.3s ease-out;
+      }
+      /* animate in */
+      .my-mfp-slide-bottom.mfp-ready.mfp-bg {
+        opacity: 0.8;
+      }
+      /* animate out */
+      .my-mfp-slide-bottom.mfp-removing.mfp-bg {
+        opacity: 0;
+      }
+    </style>
+  </div>
+
+
+
+
+
+  <div class="example gc3">
+    <h3>Popup with form</h3>
+    <p>Entered data is not lost if you open and close the popup or if you go to another page and then press back browser button.</p>
+    <div class="html-code">
+      <!-- link that opens popup -->
+      <a class="popup-with-form" href="#test-form">Open form</a>
+
+      <!-- form itself -->
+      <form id="test-form" class="mfp-hide white-popup-block">
+        <h1>Form</h1>
+        <fieldset style="border:0;">
+          <p>Lightbox has an option to automatically focus on the first input. It's strongly recommended to use <code>inline</code> popup type for lightboxes with form instead of <code>ajax</code> (to keep entered data if the user accidentally refreshed the page).</p>
+          <ol>
+            <li>
+              <label for="name">Name</label>
+              <input id="name" name="name" type="text" placeholder="Name" required>
+            </li>
+            <li>
+              <label for="email">Email</label>
+              <input id="email" name="email" type="email" placeholder="example@domain.com" required>
+            </li>
+            <li>
+              <label for="phone">Phone</label>
+              <input id="phone" name="phone" type="tel" placeholder="Eg. +447500000000" required>
+            </li>
+            <li>
+              <label for="textarea">Textarea</label><br/>
+              <textarea id="textarea">Try to resize me to see how popup CSS-based resizing works.</textarea>
+            </li>
+          </ol>
+        </fieldset>
+      </form>
+    </div>
+    <script type="text/javascript">
+      $(document).ready(function() {
+        $('.popup-with-form').magnificPopup({
+          type: 'inline',
+          preloader: false,
+          focus: '#name',
+
+          // When elemened is focused, some mobile browsers in some cases zoom in
+          // It looks not nice, so we disable it:
+          callbacks: {
+            beforeOpen: function() {
+              if($(window).width() < 700) {
+                this.st.focus = false;
+              } else {
+                this.st.focus = '#name';
+              }
+            }
+          }
+        });
+      });
+    </script>
+  </div>
+
+
+
+
+
+  <div class="example gc3">
+    <h3>Ajax popup</h3>
+    <p>You have full control of what is displayed in popup, align it to any side via CSS, enable or disable scroll on right side of window - whatever.</p>
+    <div class="html-code">
+      <a class="simple-ajax-popup-align-top" href="site-assets/ajax/test-ajax.html" >Load content via ajax</a><br/>
+      <a class="simple-ajax-popup" href="site-assets/ajax/test-ajax-2.html" >Load another content via ajax</a>
+    </div>
+    <script type="text/javascript">
+      $(document).ready(function() {
+
+        $('.simple-ajax-popup-align-top').magnificPopup({
+          type: 'ajax',
+          alignTop: true,
+          overflowY: 'scroll' // as we know that popup content is tall we set scroll overflow by default to avoid jump
+        });
+
+        $('.simple-ajax-popup').magnificPopup({
+          type: 'ajax'
+        });
+        
+      });
+    </script>
+  </div>
+
+
+
+
+
+  <div class="example gc3">
+    <h3>Modal popup</h3>
+    <p>A modal popup disables the usual ways to close popups.</p>
+    <div class="html-code">
+      <a class="popup-modal" href="#test-modal">Open modal</a>
+
+      <div id="test-modal" class="mfp-hide white-popup-block">
+        <h1>Modal dialog</h1>
+        <p>You won't be able to dismiss this by usual means (escape or
+          click button), but you can close it programatically based on
+          user choices or actions.</p>
+        <p><a class="popup-modal-dismiss" href="#">Dismiss</a></p>
+      </div>
+    </div>
+    <script type="text/javascript">
+      $(function () {
+        $('.popup-modal').magnificPopup({
+          type: 'inline',
+          preloader: false,
+          focus: '#username',
+          modal: true
+        });
+        $(document).on('click', '.popup-modal-dismiss', function (e) {
+          e.preventDefault();
+          $.magnificPopup.close();
+        });
+      });
+    </script>
+  </div>
+
+
+
+
+
+  <div class="example gc3">
+    <h3>Error handling</h3>
+    <p>This is just basic example of how error messages are displayed. Surely, you can change text or style them.</p>
+    <div class="html-code">
+      <!-- classes mfp-image and mfp-ajax define type of the popup -->
+      <a id="broken-image" class="mfp-image" href="http://upload.wikimedia.org/wikipedia/commons/thumb/f/f3/Blois_Loire_Panorama_-_July_2011.jpg/640px-Blois_Loire_Panorama_-_July_2011-fake.jpg" >Broken image</a><br/>
+      <a id="broken-ajax" class="mfp-ajax" href="http://example.com/fakeg" >Broken ajax request</a>
+    </div>
+    <script type="text/javascript">
+      $(document).ready(function() {
+        $('#broken-image, #broken-ajax').magnificPopup({});
+      });
+    </script>
+  </div>
+
+
+
+
+
+  <!-- <div class="example gc3">
+    <h3>Other variations</h3>
+    <div class="html-code">
+      <a id="inline-html-content" class="mfp-inline" data-mfp-src="#custom-content" href="#custom-content" >Open inline text block</a>
+    </div>
+    <script type="text/javascript">
+      $(document).ready(function() {
+        $('#inline-html-content').magnificPopup({
+          disableOn:0,
+          alignTop: true,
+          marTop: 0,
+          marBottom: 0,
+          closeBtnInside: true,
+          mainClass: 'mfp-dark-close-button mfp-with-40-margin',
+          preloader: false
+        });
+      });
+    </script>
+  </div> -->
+
+
+</div>
+
+<!--
+
+Examples end.
+
+-->
diff --git a/vendor/dimsemenov/magnific-popup/website/_includes/logo.html b/vendor/dimsemenov/magnific-popup/website/_includes/logo.html
new file mode 100644
index 0000000000000000000000000000000000000000..b994cca9c727bdfb53f57f370784e7f87351eaf1
--- /dev/null
+++ b/vendor/dimsemenov/magnific-popup/website/_includes/logo.html
@@ -0,0 +1,50 @@
+<script type="text/javascript">
+  (function() {
+
+    var isCanvasSupported = function () {
+      var elem = document.createElement('canvas');
+      return !!(elem.getContext && elem.getContext('2d'));
+    };
+
+    if( isCanvasSupported() ) {
+
+      var canvas = document.getElementById('broken-glass'),
+          context = canvas.getContext('2d'),
+          width = canvas.width = Math.min(800, window.innerWidth),
+          height = canvas.height,  
+          numTriangles = 100,
+          rand = function(min, max){
+            return Math.floor( (Math.random() * (max - min + 1) ) + min);
+          };
+          
+      window.drawTriangles = function(){
+        context.clearRect(0, 0, width, height);
+        var hue = rand(0,360);
+        var increment = 80 / numTriangles;
+        for(var i = 0; i < numTriangles; i++) { 
+            context.beginPath();      
+            context.moveTo(rand(0,width), rand(0,height) );  
+            context.lineTo(rand(0,width), rand(0,height) );
+            context.lineTo(rand(0,width), rand(0,height) );
+            context.globalAlpha = 0.5;
+            context.fillStyle = 'hsl('+Math.round(hue)+', '+rand(15,60)+'%, '+ rand(10, 60) +'%)';      
+            context.closePath();    
+            context.fill();
+
+            hue+=increment;
+            if(hue > 360) hue = 0;
+        }
+        canvas.style.cssText = '-webkit-filter: contrast(115%);';
+      };
+
+      document.getElementById('logo-title').style.color = 'rgba(250, 250, 250, 0.95)';
+      drawTriangles();
+
+      var el = document.getElementById('logo');
+      el.onclick = function() {
+        drawTriangles();
+      };
+    }
+
+  })();
+</script>
\ No newline at end of file
diff --git a/vendor/dimsemenov/magnific-popup/website/_includes/signup.html b/vendor/dimsemenov/magnific-popup/website/_includes/signup.html
new file mode 100644
index 0000000000000000000000000000000000000000..05ac4ea31dc2016b4b540f083d988b497e3b8f91
--- /dev/null
+++ b/vendor/dimsemenov/magnific-popup/website/_includes/signup.html
@@ -0,0 +1,99 @@
+<div id="mc_embed_signup" class="embed-form zoom-anim-dialog mfp-hide">
+	<style>
+	#mc_embed_signup h4 {
+		font-size: 30px;
+		line-height: 1.2;
+		margin-bottom: 12px;
+	}
+	#mc_embed_signup input[type="email"] {
+		border: 1px solid #CCC;
+		border-top: 1px solid #999;
+		padding: 5px;
+		font-size: 18px;
+		width: 200px;
+		margin-right: 10px;
+		height: 25px;
+		transition: all 0.3s ease;
+		-moz-transition: all 0.3s ease;
+		-webkit-transition: all 0.3s ease;
+		border-radius: 2px;
+		-moz-border-radius: 2px;
+		-webkit-border-radius: 2px;
+	}
+	#mc_embed_signup input[type="email"]:focus {
+		background-color: #FFF;
+		border: 1px solid #3169B3;
+		box-shadow: #3169B3 0px 0px 5px;
+		-moz-box-shadow: #3169B3 0px 0px 5px;
+		-webkit-box-shadow: #3169B3 0px 0px 5px;
+		outline: none;
+	}
+	#mc_embed_signup input[type="submit"] {
+		border: 1px solid #3169B3;
+		font-size: 13px;
+		font-weight: bold;
+		color: #FFF;
+		height: auto;
+		padding: 8px 13px;
+		cursor: pointer;
+		background-color: #3169B3;
+		display: inline-block;
+		width: auto;
+		-webkit-appearance: none;
+		border-radius: 2px;
+		-moz-border-radius: 2px;
+		-webkit-border-radius: 2px;
+		vertical-align: top;
+	}
+	.embed-form {
+		padding: 30px;
+		background: #FFF;
+		margin: 30px auto;
+		display: block;
+		width: auto;
+		max-width: 350px;
+		position: relative;
+	}
+	#mc_embed_signup .mc-field-group {
+		margin-top: 20px;
+	}
+	#mc_embed_signup p {
+		font-size: 15px;
+		color: #4F4F4F;
+	}
+	</style>
+	<script>
+	if(window.$) {
+		$(document).ready(function() {
+	        $('.wp-version-link').magnificPopup({
+	          type: 'inline',
+
+	          fixedContentPos: false,
+	          fixedBgPos: true,
+
+	          overflowY: 'auto',
+
+	          closeBtnInside: true,
+	          preloader: false,
+	          
+	          removalDelay: 300,
+	          mainClass: 'my-mfp-zoom-in'
+	        });
+	    });
+	}
+    </script>
+	<form action="http://dimsemenov.us1.list-manage.com/subscribe/post?u=ef6026d946a7b5d41d92c02e4&amp;id=54fae727da" method="post" id="mc-embedded-subscribe-form" name="mc-embedded-subscribe-form" class="validate" target="_blank" novalidate>
+		<h4>Magnific WordPress Plugin is under development!</h4>
+		<p>To get notified about the release, subscribe to my Mailchimp list that I send 3-4 times a year. Any feature requests are welcome.</p>
+		<div class="mc-field-group">
+			<input type="email" value="" name="EMAIL" placeholder="Your email" class="required email" id="mce-EMAIL">
+			<input type="hidden" id="group_2" name="group[2065][2]" value="true">
+			<input type="submit" value="Subscribe" name="subscribe" id="mc-embedded-subscribe" class="button">
+		</div>
+		
+		<div id="mce-responses" class="clear">
+			<div class="response" id="mce-error-response" style="display:none"></div>
+			<div class="response" id="mce-success-response" style="display:none"></div>
+		</div>	
+	</form>
+</div>
diff --git a/vendor/dimsemenov/magnific-popup/website/_layouts/default.html b/vendor/dimsemenov/magnific-popup/website/_layouts/default.html
new file mode 100644
index 0000000000000000000000000000000000000000..5917e6ec4ef6b04b86d5bceef4283299b957b4a2
--- /dev/null
+++ b/vendor/dimsemenov/magnific-popup/website/_layouts/default.html
@@ -0,0 +1,77 @@
+<!DOCTYPE html>
+<html lang="en" prefix="og: http://ogp.me/ns#">
+  <head>
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">    
+
+    <title>{{ page.title }}</title>
+    
+    <meta charset="utf-8"> 
+    <meta name="description" content="{{page.description}}"/>
+    <meta name="viewport" content="width = device-width, initial-scale = 1.0" />
+    <meta name="author" content="Dmitry Semenov">
+    <link rel="canonical" href="{{page.canonical_url}}" />
+
+    <meta property="og:url" content="{{page.canonical_url}}">
+    <meta property="og:title" content="{{page.title}}">
+    <meta property="og:description" content="{{page.description}}">
+    <meta property="og:image" content="http://dimsemenov.com/magnific-og-400x400.jpg">
+
+    <link href="https://plus.google.com/102586375605352607718" rel="publisher" />
+
+    {% if site.url == 'local' %}
+      <link href="site-assets/site.css?v={{site.mfpversion}}" rel="stylesheet" />
+      <link href="dist/magnific-popup.css?v={{site.mfpversion}}" rel="stylesheet" />
+    {% else %}
+      <link href="site-assets/all.min.css?v={{site.mfpversion}}" rel="stylesheet" />
+    {% endif %}
+
+
+    {% if page.title == 'Magnific Popup Documentation' %}
+    <style type="text/css"> #main-wrapper{background: #FFF;} </style>
+    {% endif %}
+
+  </head>
+
+  <body>
+    
+  <div id="main-wrapper">
+
+    {{ content | markdown }}
+
+    <div id="footer">
+      Created by <a href="http://dimsemenov.com" rel="author">Dmitry Semenov</a>.{% if page.include_credit %} Photography in demo by <a href="http://www.squiver.com">Marsel Van Oosten</a>{% endif %}
+    </div>
+
+  </div>
+  
+  {{page.footer}}
+
+  {% if page.addjs %}
+    {% if site.url == 'local' %}
+      <script>
+        document.write('<script src=third-party-libs/' +
+        ('__proto__' in {} ? 'zepto' : 'jquery') +
+        '.js><\/script>')
+      </script>
+      <script src="dist/jquery.magnific-popup.js?v={{site.mfpversion}}"></script>
+    {% else %}
+      <script>
+        document.write('<script src=third-party-libs/' +
+        ('__proto__' in {} ? 'zepto' : 'jquery') +
+        '.min.js><\/script>')
+      </script>
+      <script src="dist/jquery.magnific-popup.min.js?v={{site.mfpversion}}"></script>
+    {% endif %}
+  {% endif %}
+
+  {% include analytics.html %}
+
+  {% if page.buildtool %}
+    {% include build-tool.html %}
+  {% endif %}
+
+  {% if site.url == 'local' %}
+    <strong style="display:block; width:100%;text-align:center;">This page is just for tests and should not be used for production!</strong>
+  {% endif %}
+  </body>
+</html>
\ No newline at end of file
diff --git a/vendor/dimsemenov/magnific-popup/website/documentation.md b/vendor/dimsemenov/magnific-popup/website/documentation.md
new file mode 100644
index 0000000000000000000000000000000000000000..eecff3a2638c1546bad255befe9b1a9b06392b8d
--- /dev/null
+++ b/vendor/dimsemenov/magnific-popup/website/documentation.md
@@ -0,0 +1,1222 @@
+---
+
+layout: default
+
+title: Magnific Popup Documentation
+
+description: The complete guide on how to use Magnific Popup - the open source responsive lightbox plugin.
+
+addjs: true
+
+canonical_url: http://dimsemenov.com/plugins/magnific-popup/documentation.html
+
+buildtool: true
+
+---
+
+<div id="documentation-intro">
+  <h1><a href="http://dimsemenov.com/plugins/magnific-popup/">Magnific Popup</a> Documentation</h1>
+  <p><a href="https://github.com/dimsemenov/Magnific-Popup/">Project on GitHub</a> &middot; <a href="#mfp-build-tool" class="mfp-build-tool-link">Build tool</a> &middot; <a href="http://twitter.com/dimsemenov">Twitter of developer</a> &middot; <a href="http://dimsemenov.com/subscribe.html">Newsletter of developer</a></p>
+</div>
+
+
+<!-- DOCUMENTATION START -->
+
+
+Here you can find the guide on how to use Magnific Popup. Besides this docs page, you can <a href="http://codepen.io/collection/nLcqo">play with examples on CodePen</a>. If you've found any mistake in this site or you know how to improve some part of this documentation - please <a href="https://github.com/dimsemenov/Magnific-Popup/blob/master/website/documentation.md">commit on GitHub</a>.
+
+Please ask general questions through <a href="http://stackoverflow.com/questions/ask?tags=magnific-popup">Stack Overflow</a> tagged with `magnific-popup`.
+
+If you're looking for touch-friendly popup just for images, <a href="http://photoswipe.com">PhotoSwipe</a> might be a better choice.
+
+
+# magnific popup docs
+
+* This will become a table of contents (this text will be scraped).
+{:toc}
+
+## Including files
+
+You can get Magnific Popup JS and CSS file from the <a href="#mfp-build-tool" class="mfp-build-tool-link">build tool</a>, from the `dist/` folder in the <a href="https://github.com/dimsemenov/Magnific-Popup">GitHub repository</a>, or by compiling it yourself with Grunt.
+
+{% highlight html %}
+<!-- Magnific Popup core CSS file -->
+<link rel="stylesheet" href="magnific-popup/magnific-popup.css">
+
+<!-- jQuery 1.7.2+ or Zepto.js 1.0+ -->
+<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
+
+<!-- Magnific Popup core JS file -->
+<script src="magnific-popup/jquery.magnific-popup.js"></script>
+{% endhighlight %}
+
+It's not required, but we recommend placing CSS files in `<head>` and JavaScript files and initialization code in the footer of your site (before the closing `</body>` tag).<br/> If you already have `jquery.js` on your site, don't include it a second time, or use `jQuery.noConflict();` mode. Optionally, you can include [Zepto.js](http://zeptojs.com/) instead of [jQuery](http://jquery.com), or [choose which one to include](http://stackoverflow.com/questions/8725905/zepto-fallback-to-jquery) based on browser support.
+
+
+## Initializing popup
+
+Popup initialization code should be executed after document ready, for example:
+{% highlight javascript %}
+$(document).ready(function() {
+  $('.image-link').magnificPopup({type:'image'});
+});
+{% endhighlight %}
+
+There are three ways to initialize a popup:
+
+### 1. From an HTML element
+
+{% highlight html %}
+<a class="test-popup-link" href="path-to-image.jpg">Open popup</a>
+{% endhighlight %}
+
+{% highlight javascript %}
+$('.test-popup-link').magnificPopup({
+  type: 'image'
+  // other options
+});
+{% endhighlight %}
+
+
+
+### 2. From a group of elements with one parent
+Same as first one, but use this method if you are creating a popup from a list of elements in one container. Note that this method does not enable gallery mode, it just reduces the number of click event handlers; each item will be opened as a single popup. If you wish to enable gallery, add the `gallery:{enabled:true}` option.
+
+{% highlight html %}
+<div class="parent-container">
+  <a href="path-to-image-1.jpg">Open popup 1</a>
+  <a href="path-to-image-2.jpg">Open popup 2</a>
+  <a href="path-to-image-3.jpg">Open popup 3</a>
+</div>
+{% endhighlight %}
+
+{% highlight javascript %}
+$('.parent-container').magnificPopup({
+  delegate: 'a', // child items selector, by clicking on it popup will open
+  type: 'image'
+  // other options
+});
+{% endhighlight %}
+
+
+
+### 3. From the 'items' option
+The `items` option defines data for the popup item(s) and makes Magnific Popup ignore all attributes on the target DOM element. The value for `items` can be a single object or an array of objects.
+
+{% highlight javascript %}
+// Example with single object
+$('#some-button').magnificPopup({
+    items: {
+      src: 'path-to-image-1.jpg'
+    },
+    type: 'image' // this is default type
+});
+
+// Example with multiple objects
+$('#some-button').magnificPopup({
+    items: [
+      {
+        src: 'path-to-image-1.jpg'
+      },
+      {
+        src: 'http://vimeo.com/123123',
+        type: 'iframe' // this overrides default type
+      },
+      {
+        src: $('<div>Dynamically created element</div>'), // Dynamically created element
+        type: 'inline'
+      },
+      {
+        src: '<div>HTML string</div>',
+        type: 'inline'
+      },
+      {
+        src: '#my-popup', // CSS selector of an element on page that should be used as a popup
+        type: 'inline'
+      }
+    ],
+    gallery: {
+      enabled: true
+    },
+    type: 'image' // this is default type
+});
+{% endhighlight %}
+
+Play with [this example on CodePen](http://codepen.io/dimsemenov/pen/vKrqs).
+
+
+
+## Content Types
+
+By default, Magnific Popup has four types of content: `image`, `iframe`, `inline`, and `ajax`. There is no any "auto-detection" of type based on URL, so you should define it manually.
+
+The type of a popup can be defined in a two ways:
+
+1. Using the `type` option. E.g.: `$('.image-link').magnificPopup({type:'image'})`.
+
+2. Using the `mfp-TYPE` CSS class (where `TYPE` is the desired content type). For example: `<a class="mfp-image image-link">Open image</a>`, `$('.image-link').magnificPopup()`.
+
+The second option always overrides the first, so you may initialize popups with multiple content types from one call.
+
+`inline` is the default content type (from v0.8.4), so you may skip its definition.
+
+<br/>
+
+**The source of the the popup content** (for example, a path to an image, a path to an HTML file, a path to a video page) can be defined in a few ways:
+
+Method #1: From the `href` attribute:
+
+{% highlight html %}<a href="image-for-popup.jpg">Open image</a>{% endhighlight %}
+
+Method #2: From the `data-mfp-src` attribute (overrides the first method):
+
+{% highlight html %}<a href="some-image.jpg" data-mfp-src="image-for-popup.jpg">Open image</a>{% endhighlight %}
+
+Method #3: From the <code>items</code> option
+
+{% highlight javascript %}
+$.magnificPopup.open({
+  items: {
+    src: 'some-image.jpg'
+  },
+  type: 'image'
+});
+{% endhighlight %}
+
+
+If you want to modify how the source is parsed, you may hook into the `elementParse` callback. For example:
+
+{% highlight javascript %}
+$('.image-link').magnificPopup({
+  type:'image',
+  callbacks: {
+    elementParse: function(item) {
+      // Function will fire for each target element
+      // "item.el" is a target DOM element (if present)
+      // "item.src" is a source that you may modify
+
+      console.log(item); // Do whatever you want with "item" object
+    }
+  }
+});
+{% endhighlight %}
+
+## Image Type
+
+The path to the image must be set as the main source if you selected this type. If your popup doesn't have an image source and doesn't have an image that shouldn't be preloaded (and retina-ized, etc.), use the `inline` type.
+
+{% highlight javascript %}
+image: {
+  markup: '<div class="mfp-figure">'+
+            '<div class="mfp-close"></div>'+
+            '<div class="mfp-img"></div>'+
+            '<div class="mfp-bottom-bar">'+
+              '<div class="mfp-title"></div>'+
+              '<div class="mfp-counter"></div>'+
+            '</div>'+
+          '</div>', // Popup HTML markup. `.mfp-img` div will be replaced with img tag, `.mfp-close` by close button
+
+  cursor: 'mfp-zoom-out-cur', // Class that adds zoom cursor, will be added to body. Set to null to disable zoom out cursor.
+
+  titleSrc: 'title', // Attribute of the target element that contains caption for the slide.
+  // Or the function that should return the title. For example:
+  // titleSrc: function(item) {
+  //   return item.el.attr('title') + '<small>by Marsel Van Oosten</small>';
+  // }
+
+  verticalFit: true, // Fits image in area vertically
+
+  tError: '<a href="%url%">The image</a> could not be loaded.' // Error message
+}
+{% endhighlight %}
+
+Please note that Magnific Popup doesn't implement any JavaScript-based client-side caching for images. So make sure that your server [adds expires headers](https://developers.google.com/speed/docs/best-practices/caching#LeverageBrowserCaching) so the image won't be downloaded each time. 
+
+## Iframe Type
+
+By default Magnific Popup supports only one type of URL for each service:
+
+{% highlight javascript %}
+// YouTube
+"http://www.youtube.com/watch?v=7HKoqNJtMTQ"
+
+// Vimeo
+"http://vimeo.com/123123"
+
+// Google Maps
+"https://maps.google.com/maps?q=221B+Baker+Street,+London,+United+Kingdom&hl=en&t=v&hnear=221B+Baker+St,+London+NW1+6XE,+United+Kingdom"
+{% endhighlight %}
+
+But you can extend it and make it support absolutely any URL or any other service (view [example that adds Dailymotion support](http://codepen.io/dimsemenov/pen/jnohA)). Iframe options:
+
+{% highlight javascript %}
+iframe: {
+  markup: '<div class="mfp-iframe-scaler">'+
+            '<div class="mfp-close"></div>'+
+            '<iframe class="mfp-iframe" frameborder="0" allowfullscreen></iframe>'+
+          '</div>', // HTML markup of popup, `mfp-close` will be replaced by the close button
+
+  patterns: {
+    youtube: {
+      index: 'youtube.com/', // String that detects type of video (in this case YouTube). Simply via url.indexOf(index).
+
+      id: 'v=', // String that splits URL in a two parts, second part should be %id%
+      // Or null - full URL will be returned
+      // Or a function that should return %id%, for example:
+      // id: function(url) { return 'parsed id'; }
+
+      src: '//www.youtube.com/embed/%id%?autoplay=1' // URL that will be set as a source for iframe.
+    },
+    vimeo: {
+      index: 'vimeo.com/',
+      id: '/',
+      src: '//player.vimeo.com/video/%id%?autoplay=1'
+    },
+    gmaps: {
+      index: '//maps.google.',
+      src: '%id%&output=embed'
+    }
+
+    // you may add here more sources
+
+  },
+
+  srcAction: 'iframe_src', // Templating object key. First part defines CSS selector, second attribute. "iframe_src" means: find "iframe" and set attribute "src".
+}
+{% endhighlight %}
+
+
+
+## Inline Type
+
+To create popup from inline element you need to:
+
+1) Create a HTML element that you wish to display in popup and add it somewhere. Class `mfp-hide` is required to hide the popup from the page.
+
+{% highlight html %}
+<div id="test-popup" class="white-popup mfp-hide">
+  Popup content
+</div>
+{% endhighlight %}
+
+2) Style this element. Magnific Popup by default doesn't apply any styles to it, except vertical centering (if `alignTop:false`). Close button will be automatically appended inside (if `closeBtnInside:true`).
+
+{% highlight css %}
+.white-popup {
+  position: relative;
+  background: #FFF;
+  padding: 20px;
+  width: auto;
+  max-width: 500px;
+  margin: 20px auto;
+}
+{% endhighlight %}
+
+
+3) Add button that will open the popup (source must match CSS id of an element (`#test-popup` in our case).
+
+{% highlight html %}
+<!-- Like so: -->
+<a href="#test-popup" class="open-popup-link">Show inline popup</a>
+
+<!-- Or like so: -->
+<a href="mobile-friendly-page.html" data-mfp-src="#test-popup" class="open-popup-link">Show inline popup</a>
+{% endhighlight %}
+
+4) Initialize script.
+
+{% highlight javascript %}
+$('.open-popup-link').magnificPopup({
+  type:'inline',
+  midClick: true // Allow opening popup on middle mouse click. Always set it to true if you don't provide alternative source in href.
+});
+{% endhighlight %}
+
+Here are some other ways to initialize popup:
+
+{% highlight javascript %}
+// From HTML string
+$('button').magnificPopup({
+  items: {
+      src: '<div class="white-popup">Dynamically created popup</div>',
+      type: 'inline'
+  }
+});
+
+// From an element with ID #popup
+$('button').magnificPopup({
+  items: {
+      src: '#popup',
+      type: 'inline'
+  }
+});
+
+// From jQuery object
+$('button').magnificPopup({
+  items: {
+      src: $('<div class="white-popup">Dynamically created popup</div>'),
+      type: 'inline'
+  }
+});
+
+// Open directly via API
+$.magnificPopup.open({
+  items: {
+    src: '<div class="white-popup">Dynamically created popup</div>', // can be a HTML string, jQuery object, or CSS selector
+    type: 'inline'
+  }
+});
+{% endhighlight %}
+
+I have created two examples on CodePen that will help you better understand how it works:
+
+- [Simple inline popup](http://codepen.io/dimsemenov/pen/GEKgb)
+- [Advanced popup with markup and gallery mode](http://codepen.io/dimsemenov/pen/sHoxp)
+
+## Ajax Type
+
+To create such type of popup, first of define the path to the file that you wish to display and select `ajax` type of the popup. Popup itself should be styled in exactly the same way as an [inline popup type](#inline-type).
+
+**Important note!** The contents of the file that you load is already a popup itself, so there must be **only one root element**.
+
+{% highlight html %}
+<a href="path-to-file.html" class="ajax-popup-link">Show inline popup</a>
+{% endhighlight %}
+
+{% highlight javascript %}
+$('.ajax-popup-link').magnificPopup({
+  type: 'ajax'
+});
+{% endhighlight %}
+
+Note that path to the file that will be loaded should have the same origin (e.g. be on the same domain), [learn more](http://stackoverflow.com/questions/3076414/ways-to-circumvent-the-same-origin-policy).
+
+Ajax options:
+
+{% highlight javascript %}
+ajax: {
+  settings: null, // Ajax settings object that will extend default one - http://api.jquery.com/jQuery.ajax/#jQuery-ajax-settings
+  // For example:
+  // settings: {cache:false, async:false}
+
+  cursor: 'mfp-ajax-cur', // CSS class that will be added to body during the loading (adds "progress" cursor)
+  tError: '<a href="%url%">The content</a> could not be loaded.' //  Error message, can contain %curr% and %total% tags if gallery is enabled
+}
+{% endhighlight %}
+
+To modify content after it's loaded, or to select and show just specific element from loaded file, there is a `parseAjax` callback:
+
+{% highlight javascript %}
+callbacks: {
+  parseAjax: function(mfpResponse) {
+    // mfpResponse.data is a "data" object from ajax "success" callback
+    // for simple HTML file, it will be just String
+    // You may modify it to change contents of the popup
+    // For example, to show just #some-element:
+    // mfpResponse.data = $(mfpResponse.data).find('#some-element');
+
+    // mfpResponse.data must be a String or a DOM (jQuery) element
+
+    console.log('Ajax content loaded:', mfpResponse);
+  },
+  ajaxContentAdded: function() {
+    // Ajax content is loaded and appended to DOM
+    console.log(this.content);
+  }
+}
+{% endhighlight %}
+
+
+
+
+
+
+
+
+
+
+## Options
+
+Options should be passed to the initialization code and separated by comma, e.g.:
+
+{% highlight javascript %}
+$('.some-link').magnificPopup({
+  // main options
+  disableOn: 400,
+  key: 'some-key',
+
+  gallery: {
+    // options for gallery
+    enabled: true
+  },
+  image: {
+    // options for image content type
+    titleSrc: 'title'
+  }
+
+});
+{% endhighlight %}
+
+Options for specific modules are explained in their sections of documentation (e.g. related to text are in <a href="#translating">translating section</a>, related to gallery are in <a href="#gallery">gallery section</a>. Here you can find the list of general options:
+
+### disableOn
+
+<code class="def">null</code>
+
+If window width is less than the number in this option lightbox will not be opened and the default behavior of the element will be triggered. Set to `0` to disable behavior. Option works only when you initialize Magnific Popup from DOM element.
+
+Can also accept Function as a parameter, which should return `true` if lightbox can be opened and `false` otherwise. For example:
+
+{% highlight javascript %}
+disableOn: function() {
+  if( $(window).width() < 600 ) {
+    return false;
+  }
+  return true;
+}
+{% endhighlight %}
+
+
+
+### key
+
+<code class="def">null</code>
+
+"Key" option is a unique identifier of a single or a group of popups with the same structure. If you will not define it, DOM elements will be created and destroyed each time when you open and close popup.
+
+You may (and should) set an equal key to different popups if their markup matches. By markup I mean options that change HTML structure of the popup (e.g. close icon placement and HTML code of it).
+
+For example: you have many popups that show title, some text and button - you may use one key for all of them, so only one instance of this element is created. Same for popup that always contains image and caption.
+
+You can delete cached templates like so:
+
+    // delete template with key "your-key"
+    delete $.magnificPopup.instance.popupsCache['your-key'];
+
+    // delete all templates
+    $.magnificPopup.instance.popupsCache = {};
+
+
+
+
+
+### midClick
+
+<code class="def">false</code>
+
+If set to `true` lightbox is opened if the user clicked on the middle mouse button, or click with Command/Ctrl key. Option works only when you initialize Magnific Popup from DOM element.
+
+
+### mainClass
+
+<code class="def">empty string</code>
+
+String that contains classes that will be added to the root element of popup wrapper and to dark overlay. For example `"myClass"`, can also contain multiple classes - `'myClassOne myClassTwo'`.
+
+### preloader
+
+<code class="def">true</code>
+
+Preloader in Magnific Popup is used as an indicator of current status. If option enabled, it's always present in DOM only text inside of it changes. Below you can see explanation of CSS names that are applied to container that holds preloader and content area depending on the state of current item:
+
+{% highlight css %}
+
+/* Content loading is in progress */
+.mfp-s-loading { }
+
+/* Content successfully loaded */
+.mfp-s-ready { }
+
+/* Error during loading  */
+.mfp-s-error { }
+{% endhighlight %}
+
+For example, if you want your error message to be in red add such CSS:
+
+{% highlight css %}
+.mfp-s-error .mfp-preloader {
+  color: red;
+}
+{% endhighlight %}
+
+You can trigger change of status manually by calling `instance.updateStatus('error', 'error message')`.
+
+
+### focus
+
+<code class="def">empty string</code>
+
+String with CSS selector of an element inside popup that should be focused. Ideally it should be the first element of popup that can be focused. For example `'input'` or `'#login-input'`. Leave empty to focus the popup itself.
+
+### closeOnContentClick
+
+<code class="def">false</code>
+
+Close popup when user clicks on content of it. It's recommended to enable this option when you have only image in popup.
+
+
+### closeOnBgClick
+
+<code class="def">true</code>
+
+Close the popup when user clicks on the dark overlay.
+
+
+### closeBtnInside
+
+<code class="def">true</code>
+
+If enabled, Magnific Popup will put close button inside content of popup, and wrapper will get class `mfp-close-btn-in` (which in default CSS file makes color of it change). If markup of popup item is defined element with class `mfp-close` it will be replaced with this button, otherwise close button will be appended directly.
+
+
+### showCloseBtn
+
+<code class="def">true</code>
+
+Controls whether the close button will be displayed or not.
+
+
+### enableEscapeKey
+
+<code class="def">true</code>
+
+Controls whether pressing the escape key will dismiss the active popup or
+not.
+
+
+### modal
+
+<code class="def">false</code>
+
+When set to `true`, the popup will have a modal-like behavior: it won't be
+possible to dismiss it by usual means (close button, escape key, or
+clicking in the overlay).
+
+This is a shortcut to set ``closeOnContentClick``, ``closeOnBgClick``,
+``showCloseBtn``, and ``enableEscapeKey`` to ``false``.
+
+
+### alignTop
+
+<code class="def">false</code>
+
+If set to `true` popup is aligned to top instead of to center. (basically all this option does is adds `mfp-align-top` CSS class to popup which removes styles that align popup to center).
+
+### index
+
+<code class="def">null</code>
+
+Used for gallery. Defines starting index. If popup is initialised from DOM element, this option will be ignored.
+
+
+### fixedContentPos
+
+<code class="def">auto</code>
+
+Popup content position. Can be `"auto"`, `true` or `false`.  If set to `true` - fixed position will be used, to `false` - absolute position based on current scroll. If set to `"auto"` popup will automatically disable this option when browser doesn't support fixed position properly.
+
+### fixedBgPos
+
+<code class="def">auto</code>
+
+Same as an option above, but it defines position property of the dark transluscent overlay. If set to `false` - huge tall overlay will be generated that equals height of window to emulate fixed position. It's recommended to set this option to `true` if you animate this dark overlay and content is most likely will not be zoomed, as size of it will be much smaller.
+
+### overflowY
+
+<code class="def">auto</code>
+
+Defines scrollbar of the popup, works as overflow-y CSS property - any <a href="https://developer.mozilla.org/en-US/docs/CSS/overflow-y">CSS acceptable value</a> is allowed (e.g. `auto`, `scroll`, `hidden`). Option is applied only when fixed position is enabled.
+
+There is no option `overflowX`, but you may easily emulate it just via CSS.
+
+### removalDelay
+
+<code class="def">0</code>
+
+Delay before popup is removed from DOM. Used for the [animation](#animation).
+
+### closeMarkup
+
+<code class="def">&lt;button title=&quot;%title%&quot; type=&quot;button&quot; class=&quot;mfp-close&quot;&gt;&amp;#215;&lt;/button&gt;</code>
+
+Markup of close button. %title% will be replaced with option `tClose`.
+
+### prependTo
+
+<code class="def">document.body</code>
+
+The DOM element to which popup will be added. Useful when you're using ASP.NET where popup should be inside `form`. Option available since 2013/12/04.
+
+### autoFocusLast 
+
+<code class="def">true</code>
+
+If set to `true` last focused element before popup showup will be focused after popup close. Option available since 2015/12/16.
+
+
+## Gallery
+
+The gallery module allows you to switch the content of the popup and adds navigation arrows. It can switch and mix any types of content, not just images. Gallery options:
+
+{% highlight javascript %}
+gallery: {
+  enabled: false, // set to true to enable gallery
+
+  preload: [0,2], // read about this option in next Lazy-loading section
+
+  navigateByImgClick: true,
+
+  arrowMarkup: '<button title="%title%" type="button" class="mfp-arrow mfp-arrow-%dir%"></button>', // markup of an arrow button
+
+  tPrev: 'Previous (Left arrow key)', // title for left button
+  tNext: 'Next (Right arrow key)', // title for right button
+  tCounter: '<span class="mfp-counter">%curr% of %total%</span>' // markup of counter
+}
+{% endhighlight %}
+
+Example:
+
+{% highlight javascript %}
+// This will create a single gallery from all elements that have class "gallery-item"
+$('.gallery-item').magnificPopup({
+  type: 'image',
+  gallery:{
+    enabled:true
+  }
+});
+{% endhighlight %}
+
+### Multiple galleries
+
+To have multiple galleries on a page, you need to create a new instance of Magnific Popup for each separate gallery. For example
+
+{% highlight html %}
+<div class="gallery">
+    <a href="path-to-image.jpg">Open image 1 (gallery #1)</a>
+    <a href="path-to-image.jpg">Open image 2 (gallery #1)</a>
+</div>
+<div class="gallery">
+    <a href="path-to-image.jpg">Open image 1 (gallery #2)</a>
+    <a href="path-to-image.jpg">Open image 2 (gallery #2)</a>
+    <a href="http://vimeo.com/123123" class="mfp-iframe">Open video (gallery #2). Class mfp-iframe forces "iframe" content type on this item.</a>
+</div>
+{% endhighlight %}
+
+{% highlight javascript %}
+$('.gallery').each(function() { // the containers for all your galleries
+    $(this).magnificPopup({
+        delegate: 'a', // the selector for gallery item
+        type: 'image',
+        gallery: {
+          enabled:true
+        }
+    });
+});
+{% endhighlight %}
+
+You don't necessarily need to use `delegate` option, it can be just `$(this).find('a').magnificPopup( ...`.
+
+### Lazy-loading
+
+Lazy-loading option preloads nearby items. It accepts an array with two integers. The first is the number of items to preload before the current. The second is the number of images to preload after the current. For example, `preload: [1,3]` will load 3 next items and 1 that is before current. These values are automatically switched based on direction of movement. 
+
+By default all what it does is just searches for an image tag and preloads it with JavaScript. But you can extend it and do your custom preloading logic with help of `lazyLoad` event, like so:
+
+{% highlight javascript %}
+callbacks: {
+  lazyLoad: function(item) {
+    console.log(item); // Magnific Popup data object that should be loaded
+  }
+}
+{% endhighlight %}
+
+"Preload" option can be changed dynamically. To disable it set `preload:0`.
+
+
+## Animation
+
+Animation can be added to any example. For Ajax based popup content animation is fired only after content is loaded.
+
+After popup is opened popup wrapper and background overlay get class `mfp-ready`. Before popup is removed they get class `mfp-removing`.
+
+For example:
+
+{% highlight javascript %}
+// Initialize popup as usual
+$('.popup-link').magnificPopup({
+  // Delay in milliseconds before popup is removed
+  removalDelay: 300,
+
+  // Class that is added to popup wrapper and background
+  // make it unique to apply your CSS animations just to this exact popup
+  mainClass: 'mfp-fade'
+});
+{% endhighlight %}
+
+
+Then just play with CSS3 transitions:
+
+{% highlight css %}
+/* overlay at start */
+.mfp-fade.mfp-bg {
+  opacity: 0;
+
+  -webkit-transition: all 0.15s ease-out;
+  -moz-transition: all 0.15s ease-out;
+  transition: all 0.15s ease-out;
+}
+/* overlay animate in */
+.mfp-fade.mfp-bg.mfp-ready {
+  opacity: 0.8;
+}
+/* overlay animate out */
+.mfp-fade.mfp-bg.mfp-removing {
+  opacity: 0;
+}
+
+/* content at start */
+.mfp-fade.mfp-wrap .mfp-content {
+  opacity: 0;
+
+  -webkit-transition: all 0.15s ease-out;
+  -moz-transition: all 0.15s ease-out;
+  transition: all 0.15s ease-out;
+}
+/* content animate it */
+.mfp-fade.mfp-wrap.mfp-ready .mfp-content {
+  opacity: 1;
+}
+/* content animate out */
+.mfp-fade.mfp-wrap.mfp-removing .mfp-content {
+  opacity: 0;
+}
+{% endhighlight %}
+
+Please use animation wisely and when it's really required. Do not enable it when your popup may contain large image or a lot of HTML text.
+
+
+## Retina
+
+"Retina" module allows you to display high-resolution images on high-dpi screens with different `devicePixelRatio`. Module works only with "image" type and only when `window.devicePixelRatio > 1`.
+
+First of prepare two sets of images. Default supported syntax requires `@2x` at the end of the image file name, e.g.: `image.jpg` > `image@2x.jpg`. Then initialize popup as usual and add `ratio` in retina set of options.
+
+{% highlight html %}
+<a href="image.jpg" class="image-link">Open popup</a>
+{% endhighlight %}
+
+{% highlight javascript %}
+// Initialize popup as usual
+$('.image-link').magnificPopup({
+  type: 'image',
+
+  retina: {
+    ratio: 1, // Increase this number to enable retina image support.
+    // Image in popup will be scaled down by this number.
+    // Option can also be a function which should return a number (in case you support multiple ratios). For example:
+    // ratio: function() { return window.devicePixelRatio === 1.5 ? 1.5 : 2  }
+
+
+    replaceSrc: function(item, ratio) {
+      return item.src.replace(/\.\w+$/, function(m) { return '@2x' + m; });
+    } // function that changes image source
+  }
+
+});
+{% endhighlight %}
+
+View [example of retina popup on CodePen](http://codepen.io/dimsemenov/pen/Dohka).
+
+## Zoom effect
+
+Zooming only works for images, for now. To add zooming effect, first of make sure that you included "zoom" module to Magnific Popup build (since v0.9.1.). Then follow steps:
+
+1) Add the thumbnail with link that will open the popup, for example:
+
+{% highlight html %}
+<a href="image.jpg" class="image-link">
+   <img src="thumbnails.jpg" />
+</a>
+{% endhighlight %}
+
+You need to make sure that ratio of your thumbnail matches the ratio of the big image, to avoid "jumps" at the end of zoom-out animation.
+
+2) Initialize popup with `zoom` options:
+
+{% highlight javascript %}
+// Initialize popup as usual
+$('.image-link').magnificPopup({
+  type: 'image',
+  mainClass: 'mfp-with-zoom', // this class is for CSS animation below
+
+  zoom: {
+    enabled: true, // By default it's false, so don't forget to enable it
+
+    duration: 300, // duration of the effect, in milliseconds
+    easing: 'ease-in-out', // CSS transition easing function
+
+    // The "opener" function should return the element from which popup will be zoomed in
+    // and to which popup will be scaled down
+    // By defailt it looks for an image tag:
+    opener: function(openerElement) {
+      // openerElement is the element on which popup was initialized, in this case its <a> tag
+      // you don't need to add "opener" option if this code matches your needs, it's defailt one.
+      return openerElement.is('img') ? openerElement : openerElement.find('img');
+    }
+  }
+
+});
+{% endhighlight %}
+
+3) Optionally, add CSS fading animation to background overlay
+
+{% highlight css %}
+.mfp-with-zoom .mfp-container,
+.mfp-with-zoom.mfp-bg {
+  opacity: 0;
+  -webkit-backface-visibility: hidden;
+  /* ideally, transition speed should match zoom duration */
+  -webkit-transition: all 0.3s ease-out;
+  -moz-transition: all 0.3s ease-out;
+  -o-transition: all 0.3s ease-out;
+  transition: all 0.3s ease-out;
+}
+
+.mfp-with-zoom.mfp-ready .mfp-container {
+    opacity: 1;
+}
+.mfp-with-zoom.mfp-ready.mfp-bg {
+    opacity: 0.8;
+}
+
+.mfp-with-zoom.mfp-removing .mfp-container,
+.mfp-with-zoom.mfp-removing.mfp-bg {
+  opacity: 0;
+}
+{% endhighlight %}
+
+Zoom module adds `zoomAnimationEnded` callback, which fires when zoom-in animation is finished.
+
+
+
+
+## API
+
+There is a much bigger list of public events, methods and variables than provided here which is used for module development, look inside code or type in console `$.magnificPopup.instance.` to find them, if you think that something should be added to docs - please submit commit.
+
+### Events
+
+You can define callbacks in `callbacks` option. Besides that, all Magnific Popup events are also dispatched using `triggerHandler` on target element (or to document if the element doesn't exist).
+
+{% highlight javascript %}
+$('.image-link').magnificPopup({
+  // you may add other options here, e.g.:
+  preloader: true,
+
+  callbacks: {
+    open: function() {
+      // Will fire when this exact popup is opened
+      // this - is Magnific Popup object
+    },
+    close: function() {
+      // Will fire when popup is closed
+    }
+    // e.t.c.
+  }
+});
+
+// Alternative method: using events
+// Name of event should start from  `mfp` and the first letter should be uppercase.
+// e.g. 'open' becomes 'mfpOpen', 'beforeOpen' becomes 'mfpBeforeOpen'.
+$('.image-link').on('mfpOpen', function(e /*, params */) {
+  console.log('Popup opened',  $.magnificPopup.instance);
+});
+{% endhighlight %}
+
+List of callbacks. In each callback `this` is `$.magnificPopup.instance`, so you can execute methods (`this.close()`) or access public variables  (`this.currItem`).
+
+{% highlight javascript %}
+callbacks: {
+  beforeOpen: function() {
+    console.log('Start of popup initialization');
+  },
+  elementParse: function(item) {
+    // Function will fire for each target element
+    // "item.el" is a target DOM element (if present)
+    // "item.src" is a source that you may modify
+
+    console.log('Parsing content. Item object that is being parsed:', item);
+  },
+  change: function() {
+    console.log('Content changed');
+    console.log(this.content); // Direct reference to your popup element
+  },
+  resize: function() {
+    console.log('Popup resized');
+    // resize event triggers only when height is changed or layout forced
+  },
+  open: function() {
+    console.log('Popup is opened');
+  },
+
+  beforeClose: function() {
+    // Callback available since v0.9.0
+    console.log('Popup close has been initiated');
+  },
+  close: function() {
+    console.log('Popup removal initiated (after removalDelay timer finished)');
+  },
+  afterClose: function() {
+    console.log('Popup is completely closed');
+  },
+
+  markupParse: function(template, values, item) {
+    // Triggers each time when content of popup changes
+    // console.log('Parsing:', template, values, item);
+  },
+  updateStatus: function(data) {
+    console.log('Status changed', data);
+    // "data" is an object that has two properties:
+    // "data.status" - current status type, can be "loading", "error", "ready"
+    // "data.text" - text that will be displayed (e.g. "Loading...")
+    // you may modify this properties to change current status or its text dynamically
+  },
+  imageLoadComplete: function() {
+    // fires when image in current popup finished loading
+    // avaiable since v0.9.0
+    console.log('Image loaded');
+  },
+
+
+  // Only for ajax popup type
+  parseAjax: function(mfpResponse) {
+    // mfpResponse.data is a "data" object from ajax "success" callback
+    // for simple HTML file, it will be just String
+    // You may modify it to change contents of the popup
+    // For example, to show just #some-element:
+    // mfpResponse.data = $(mfpResponse.data).find('#some-element');
+
+    // mfpResponse.data must be a String or a DOM (jQuery) element
+
+    console.log('Ajax content loaded:', mfpResponse);
+  },
+  ajaxContentAdded: function() {
+    // Ajax content is loaded and appended to DOM
+    console.log(this.content);
+  }
+}
+{% endhighlight %}
+
+
+
+### Public methods
+
+{% highlight javascript %}
+// Open popup immediately. If popup is already opened - it'll just overwite the content (but old options will be kept).
+// - first parameter: options object
+// - second parameter (optional): index of item to open
+$.magnificPopup.open({
+  items: {
+    src: 'someimage.jpg'
+  },
+  type: 'image'
+
+  // You may add options here, they're exactly the same as for $.fn.magnificPopup call
+  // Note that some settings that rely on click event (like disableOn or midClick) will not work here
+}, 0);
+
+$.magnificPopup.close(); // Close popup that is currently opened (shorthand)
+
+
+
+/*
+  Methods below don't have shorthand like "open" and "close".
+  They should be called through "instance" object.
+  "instance" is available only when at least one popup was opened.
+  For example: $.magnificPopup.instance.doSomething();
+*/
+
+var magnificPopup = $.magnificPopup.instance; // save instance in magnificPopup variable
+
+
+magnificPopup.close(); // Close popup that is currently opened
+
+
+// Navigation when gallery is enabled
+magnificPopup.next(); // go to next item
+magnificPopup.prev(); // go to prev item
+magnificPopup.goTo(4); // go to item #4
+
+
+magnificPopup.updateItemHTML(); // updates the popup content. Useful after you change "items" array
+
+
+// Update status of popup
+// First param: status type, can be: 'loading', 'error' or 'ready'.
+// Second param: message that will be displayed.
+magnificPopup.updateStatus('loading', 'The loading text...');
+{% endhighlight %}
+
+You may also call ANY method via `$.fn.magnificPopup('methodName' /*, param1, param2 ... */)` after you initialized the popup, for example:
+
+{% highlight javascript %}
+// First of make sure that you initialized popup on element $('.element-with-popup')
+
+// Then
+$('.element-with-popup').magnificPopup('open'); // Will open the popup
+$('.element-with-popup').magnificPopup('open', 5); // Will open popup with 5th item
+$('.element-with-popup').magnificPopup('next');
+$('.element-with-popup').magnificPopup('goTo', 3);
+{% endhighlight %}
+
+You may also open the popup directly at initialization:
+
+{% highlight javascript %}
+$('.element-with-popup').magnificPopup({
+  items: {
+    src: 'path-to-image.jpg',
+    type: 'image'
+  }
+  // (optionally) other options
+}).magnificPopup('open');
+{% endhighlight %}
+
+
+### Public properties
+
+Most properties are available only after the popup is opened. Only most used are listed here.
+
+{% highlight javascript %}
+var magnificPopup = $.magnificPopup.instance;
+
+
+magnificPopup.items // array that holds data for popup items
+magnificPopup.currItem // data for current item
+magnificPopup.index // current item index (integer)
+
+magnificPopup.content // direct reference to jQuery DOM element that you open in popup
+magnificPopup.bgOverlay // transluscent overlay
+magnificPopup.wrap // container that holds all controls and contentContainer
+magnificPopup.contentContainer // container that holds popup content, child of wrap
+
+
+magnificPopup.st.el // Target clicked element that opened popup (works if popup is initialized from DOM element)
+magnificPopup.st.mainEl // Main element (or collection of elements) from which popup was initialized (--''--)
+
+
+
+magnificPopup.isIE7
+magnificPopup.isIOS
+
+{% endhighlight %}
+
+## Translating
+
+Internationalization of Magnific Popup is very simple, all you need is to extend default settings object with new values, or just pass options to your initialization code. If you're making some public plugin or theme, it's strongly recommended to use only second method to avoid conflicts.
+
+Some properties contain %keys% that should not be translated, but may be reordered or removed.
+
+{% highlight javascript %}
+// Add it after jquery.magnific-popup.js and before first initialization code
+$.extend(true, $.magnificPopup.defaults, {
+  tClose: 'Close (Esc)', // Alt text on close button
+  tLoading: 'Loading...', // Text that is displayed during loading. Can contain %curr% and %total% keys
+  gallery: {
+    tPrev: 'Previous (Left arrow key)', // Alt text on left arrow
+    tNext: 'Next (Right arrow key)', // Alt text on right arrow
+    tCounter: '%curr% of %total%' // Markup for "1 of 7" counter
+  },
+  image: {
+    tError: '<a href="%url%">The image</a> could not be loaded.' // Error message when image could not be loaded
+  },
+  ajax: {
+    tError: '<a href="%url%">The content</a> could not be loaded.' // Error message when ajax request failed
+  }
+});
+{% endhighlight %}
+
+Same thing, but applied only to specific slider:
+
+{% highlight javascript %}
+$('.some-button').magnificPopup({
+  tClose: 'Close (Esc)',
+  tLoading: 'Loading...',
+  gallery: {
+    tPrev: 'Previous (Left arrow key)',
+    tNext: 'Next (Right arrow key)',
+    tCounter: '%curr% of %total%'
+  },
+  image: {
+    tError: '<a href="%url%">The image</a> could not be loaded.'
+  },
+  ajax: {
+    tError: '<a href="%url%">The request</a> failed.'
+  }
+
+  // surely, you may add other options here
+
+});
+{% endhighlight %}
+
+## FAQ
+
+### How to place gallery navigation arrows "inside" the image?
+
+See [example on CodePen](http://codepen.io/dimsemenov/pen/JGjHK).
+
+### How to override some function without modifying the source files?
+
+Rewrite the function that you wish to modify by editing Magnific Popup object, you can access it like so `$.magnificPopup.instance`. For example to override function that goes to "next" item in gallery:
+
+{% highlight javascript %}
+// add this code after popup JS file is included
+$.magnificPopup.instance.next = function() {
+
+  // Do something
+
+  // You may call parent ("original") method like so:
+  $.magnificPopup.proto.next.call(this /*, optional arguments */);
+};
+{% endhighlight %}
+
+You may override any public function, just note that this change applies globally.
+
+### How to add spinner indicator instead of "Loading..." text?
+
+Just style element with class `.mfp-preloader`. [Example on CodePen](http://codepen.io/dimsemenov/pen/aKwxt). [Another example](http://codepen.io/dimsemenov/pen/HdjtL) (if you want to show image only after its fully loaded).
+
+
+## Known issues
+
+### When popup is opened scrollbar of window disappears and creates empty space or shifts some fixed-positioned menu (or whatever)
+
+Solution 1: add [overflowY:'scroll'](#overflowy) option to force the scrollbar. Solution 2: use open/close popup callbacks to apply custom styling to menu that behaves incorrectly.
+
+### Text input in [Select2](http://ivaynberg.github.io/select2/) plugin is inactive when added inside popup
+
+Refer to [this discussion on GitHub](https://github.com/dimsemenov/Magnific-Popup/issues/280).
+
+
+
+
+
+<h2 id="contribute">Make Magnific Popup better!</h2>
+
+Improve this documentation page (simply submit commit <a href="https://github.com/dimsemenov/Magnific-Popup/edit/master/website/documentation.md">via GitHub</a>). Any improvements, including your own CodePen examples are very welcome. And, lastly, don't forget to star the script on GitHub:
+
+<div>
+  <iframe src="http://ghbtns.com/github-btn.html?user=dimsemenov&amp;repo=magnific-popup&amp;type=watch&amp;count=true&amp;size=large" allowtransparency="true" frameborder="0" scrolling="0" width="170" height="30">&nbsp;</iframe>
+</div>
+
+<h2>Keep updated</h2>
+<div id="mc_embed_signup" class="embed-form">
+  <form action="http://dimsemenov.us1.list-manage.com/subscribe/post?u=ef6026d946a7b5d41d92c02e4&amp;id=54fae727da" method="post" id="mc-embedded-subscribe-form" name="mc-embedded-subscribe-form" class="validate" target="_blank" novalidate="">
+    <p>Get notified about important update or new release.</p>
+    <div class="mc-field-group">
+      <input type="email" value="" name="EMAIL" placeholder="Your email" class="required email" id="mce-EMAIL">
+      <input type="hidden" id="group_2" name="group[2065][2]" value="true">
+      <input type="submit" value="Subscribe" name="subscribe" id="mc-embedded-subscribe" class="button">
+    </div>
+    <p style="font-size: 12px; margin: 4px 0 0 0;">Newsletter is sent 3 times a year at max. Powered by Mailchimp.</p>
+  </form>
+ </div>
diff --git a/vendor/dimsemenov/magnific-popup/website/index.html b/vendor/dimsemenov/magnific-popup/website/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..b439bf7ab308f0d8bd41869af9051562fa95dc7f
--- /dev/null
+++ b/vendor/dimsemenov/magnific-popup/website/index.html
@@ -0,0 +1,101 @@
+---
+layout: default
+title: Magnific Popup&#58; Responsive jQuery Lightbox Plugin
+description: Light and open source responsive lightbox plugin with focus on performance, for jQuery and Zepto.js. High-DPI (retina) display support, fast tap for touch devices.
+canonical_url: http://dimsemenov.com/plugins/magnific-popup/
+include_credit: true
+buildtool: true
+---
+
+<div id="logo">
+  <canvas id="broken-glass"></canvas>
+  <h1 id="logo-title">Magnific Popup</h1>
+</div>
+{% include logo.html %}
+<div>
+  <h2 class="intro">Magnific Popup is a responsive lightbox &amp; dialog script with focus on performance and providing best experience for user with any device<br/>(for jQuery or Zepto.js).</h2>
+  <div id="header-links">
+    <a href="documentation.html">Documentation</a> &middot; <a href="https://github.com/dimsemenov/Magnific-Popup">GitHub</a> &middot; <a href="wordpress.html" class="wp-version-link" data-mfp-src="#mc_embed_signup">WordPress plugin</a> &middot; <a href="#mfp-build-tool" class="mfp-build-tool-link">Build tool</a> &middot; <a class="smashing-link" href="http://coding.smashingmagazine.com/2013/05/02/truly-responsive-lightbox/">How it was made</a>
+  </div>
+</div>
+
+{% include examples.html %}
+
+<p id="smashing">Don't forget to check out <a href="http://coding.smashingmagazine.com/2013/05/02/truly-responsive-lightbox/">my new article</a> about this plugin on the <a class="smashing-link" href="http://coding.smashingmagazine.com/2013/05/02/truly-responsive-lightbox/">Smashing Magazine</a>.</p>
+
+
+<h2>What makes this plugin different?</h2>
+<div class="features grid-c">
+
+  <div class="gc3">
+    <h3>Light and modular</h3>
+    <p>You can choose to include only the features that you need using the <a href="#mfp-build-tool" class="mfp-build-tool-link popup-link">online build tool</a> or by compiling it yourself with <a href="http://gruntjs.com">Grunt.js</a>. Size of core JS file is about <strong>3KB</strong> + each module weighs about 0.5KB (gzipped). Sass CSS preprocessor is used for easier skinning, but you're not obligated to use it.</p>
+  </div>
+  <div class="gc3">
+    <h3>Content is resized with CSS</h3>
+    <p>The majority of lightbox plugins require you to define size of it via JS option. Magnific Popup does not -  feel free to use relative units like EM's or resize lightbox with help of CSS media queries. Update content inside lightbox without worrying about how it'll resize and center.</p>
+  </div>
+  <div class="gc3">
+    <h3>Fast</h3>
+    <p>Magnific Popup displays images before they're completely loaded to take full advantage of progressive loading. For in and out transitions CSS3 is used instead of slow JavaScript animation.</p>
+  </div>
+  <div class="gc3">
+    <h3>High-DPI (Retina) display support</h3>
+    <p>Default controls are made with pure CSS, without external graphics. For the main image there is a built in way to provide appropriate source for different pixel density displays.</p>
+  </div>
+  <div class="gc3">
+    <h3>Conditional lightbox</h3>
+    <p>Plugin has an option to automatically switch to alternative mobile-friendly source on small screen size. Brad Frost has a <a href="http://bradfrostweb.com/blog/post/conditional-lightbox/">terrific article</a> about this technique.</p>
+  </div>
+  <div class="gc3">
+    <h3>Memory management</h3>
+    <p>Popup has an extendable micro templating engine that reuses existing DOM elements (<a href="http://codepen.io/dimsemenov/pen/sHoxp">example</a>), which is especially useful when your popups same pattern.</p>
+  </div>
+</div><br/>
+
+{% include signup.html %}
+
+
+<h2>Browser support</h2>
+<p>Tested on desktop: Chrome, Safari, FF, Opera, IE8+, partial support of IE7 (works, but some visual layout features, like vertical centering, are missing). Mobile: default browser in Android 2.3+, iOS5+, Blackberry
+10+, WP7+, mobile Opera and Chrome on Android. If you noticed any bug, please open an <a href="https://github.com/dimsemenov/Magnific-Popup/issues?state=open">issue on GitHub</a></p>
+
+<h2 id="license">License</h2>
+<p>Script is available under MIT license and will always be kept this way.<br/>But please do me a favor and do not create a public WordPress plugin based on it,  because I will make it soon and it will be open souce too. (<a href="http://dimsemenov.com/subscribe.html">Want to get notified?</a>).
+</p>
+
+<h2>Bugs & contributing</h2>
+<p>Please report bugs via <a href="https://github.com/dimsemenov/Magnific-Popup/issues">GitHub</a> and ask general questions through <a href="http://stackoverflow.com/questions/ask?tags=magnific-popup">StackOverflow</a>. Feel free to submit commit, even the tiniest contributions to the script or to the documentation are very welcome.</p>
+<p>Special thanks to:</p>
+<ul>
+  <li><a href="https://twitter.com/lokesh">Lokesh Dhakar</a> for original Lightbox script.</li>
+  <li><a href="https://twitter.com/chriscoyier">Chris Coyier</a> for awesome CSS techniques.</li>
+  <li><a href="https://twitter.com/brad_frost">Brad Frost</a> for conditional lightbox technique.</li>
+</uL>
+
+<h2>Updates</h2>
+<p>If you wish to get notified about important plugin updates, you may star and watch the repository on <a href="https://github.com/dimsemenov/Magnific-Popup">GitHub</a>, follow <a href="http://twitter.com/dimsemenov">me on Twitter</a>, or join my tiny Mailchimp <a href="http://dimsemenov.com/subscribe.html">email newsletter</a> that I send 3-4 times a year.</p>
+
+
+<div class="share-buttons">
+  <h2>Please spread the word if you find the plugin useful</h2>
+  <div id="buttons-row">
+    <a id="tweet" rel="nofollow" href="https://twitter.com/intent/tweet?text=Magnific%20Popup%20-%20responsive%20lightbox%20plugin&amp;url=http%3A%2F%2Fbit.ly%2Fmagnificpopup&amp;via=dimsemenov">Tweet!</a>
+    <a id="like" rel="nofollow" href="http://www.facebook.com/sharer.php?u=http%3A%2F%2Fdimsemenov.com%2Fplugins%2Fmagnific-popup%2F%3Futm_source%3Dfb%26utm_medium%3Dsocial%26utm_campaign%3Dmfp">Like!</a> 
+    <a id="gplus" rel="nofollow" href="https://plus.google.com/share?url=http%3A%2F%2Fdimsemenov.com%2Fplugins%2Fmagnific-popup%2F%3Futm_source%3Dgplus%26utm_medium%3Dsocial%26utm_campaign%3Dmfp">+1</a>
+    <iframe src="http://ghbtns.com/github-btn.html?user=dimsemenov&amp;repo=magnific-popup&amp;type=watch&amp;count=true&amp;size=large" allowtransparency="true" frameborder="0" scrolling="0" width="155" height="30" style="transform: translateY(8px);-moz-transform: translateY(8px);-webkit-transform: translateY(8px); margin-left: 9px;"></iframe>
+  </div>
+</div>
+<script>
+(function(){
+  var openWindowPopup = function(e) {
+    if(!e) return;
+    e.preventDefault();
+    window.open(e.target.href, "intent", "scrollbars=yes,resizable=yes,toolbar=no,location=yes,width=550,height=420,left=" + (window.screen ? Math.round(screen.width / 2 - 275) : 50) + ",top=" + 100);
+  };
+  var ids = ['tweet', 'like', 'gplus'];
+  for(var i = 0; i < ids.length; i++) {
+    document.getElementById(ids[i]).onclick = openWindowPopup;
+  }
+})();
+</script>
diff --git a/vendor/dimsemenov/magnific-popup/website/site-assets/ajax/test-ajax-2.html b/vendor/dimsemenov/magnific-popup/website/site-assets/ajax/test-ajax-2.html
new file mode 100644
index 0000000000000000000000000000000000000000..a2ae7a52be102126ff72b506f872935f7d6991e8
--- /dev/null
+++ b/vendor/dimsemenov/magnific-popup/website/site-assets/ajax/test-ajax-2.html
@@ -0,0 +1,29 @@
+<div class="ajax-text-and-image white-popup-block">
+	<style>
+	.ajax-text-and-image {
+		max-width:800px; margin: 20px auto; background: #FFF; padding: 0; line-height: 0;
+	}
+	.ajcol {
+		width: 50%; float:left;
+	}
+	.ajcol img {
+		width: 100%; height: auto;
+	}
+	@media all and (max-width:30em) {
+		.ajcol { 
+			width: 100%;
+			float:none;
+		}
+	}
+	</style>
+	<div class="ajcol">
+		<img src="http://upload.wikimedia.org/wikipedia/commons/thumb/e/e7/Marabou_stork%2C_Leptoptilos_crumeniferus_edit1.jpg/603px-Marabou_stork%2C_Leptoptilos_crumeniferus_edit1.jpg"/>
+	</div>
+	<div class="ajcol" style="line-height: 1.231;">
+		<div style="padding: 1em">
+			<h1>This is just block of HTML, loaded via ajax</h1>
+		    <p>You can put absolutely any HTML here and resize it dynamically just with help of CSS.</p>
+		</div>
+	</div>
+	<div style="clear:both; line-height: 0;"></div>
+</div>
\ No newline at end of file
diff --git a/vendor/dimsemenov/magnific-popup/website/site-assets/ajax/test-ajax.html b/vendor/dimsemenov/magnific-popup/website/site-assets/ajax/test-ajax.html
new file mode 100644
index 0000000000000000000000000000000000000000..8175e9146e1f37442e66af87480b47fe3c4755b3
--- /dev/null
+++ b/vendor/dimsemenov/magnific-popup/website/site-assets/ajax/test-ajax.html
@@ -0,0 +1,10 @@
+<div id="custom-content" class="white-popup-block" style="max-width:600px; margin: 20px auto;">
+    <h1>HTML content, loaded via ajax</h1>
+    <style>
+    #custom-content img {max-width: 100%;margin-bottom: 10px;}
+    </style>
+    <p>This is dummy copy. It is not meant to be read. It has been placed here solely to demonstrate the look and feel of finished, typeset text. Only for show. He who searches for meaning here will be sorely disappointed.  These words are here to provide the reader with a basic impression of how actual text will appear in its final presentation. </p>
+   	<p>This is dummy copy. It's Greek to you. Unless, of course, you're Greek, in which case, it really makes no sense. Why, you can't even read it!  It is strictly for mock-ups. You may mock it up as strictly as you wish.</p>
+	<img src="http://farm9.staticflickr.com/8242/8558295633_f34a55c1c6_b.jpg" />
+	<img src="http://farm9.staticflickr.com/8382/8558295631_0f56c1284f_b.jpg" />
+</div>
\ No newline at end of file
diff --git a/vendor/dimsemenov/magnific-popup/website/site-assets/site.css b/vendor/dimsemenov/magnific-popup/website/site-assets/site.css
new file mode 100644
index 0000000000000000000000000000000000000000..9a36429234c672007e17b512934099ae6f11008a
--- /dev/null
+++ b/vendor/dimsemenov/magnific-popup/website/site-assets/site.css
@@ -0,0 +1,861 @@
+/* Demo site CSS. Not mobile first, not semantic, not optimized, made for 20 minutes, mess */
+html, body, div, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, ol, ul, li, form, fieldset, legend, label, table, header, footer, nav, section, figure {
+  margin: 0;
+  padding: 0; 
+}
+html {
+  overflow-y: scroll;
+}
+body {
+  font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
+  font-size: 14px;
+  line-height: 1.6;
+  color: #5A6064;
+}
+pre,code{
+  tab-size: 4;
+}
+p {
+  margin: 0 0 11px;
+}
+ul {
+  list-style: disc;
+}
+ul, ol {
+  padding: 0;
+  margin: 0 0 11px 25px;
+}
+li {
+  line-height: 22px;
+  margin: 0 0 .5em 0;
+}
+h1, h2, h3, h4, h5, h6 {
+  margin: 0;
+  font-weight: normal;
+  text-rendering: optimizelegibility;
+
+  color: #282B30;
+  font-family:Calibri, "PT Sans", "Trebuchet MS", 'Helvetica Neue', Arial
+}
+.mfp-preloader {
+  font-size: 13px;
+}
+img {
+  border: 0;
+}
+h1 {
+  margin-bottom: 5px;
+}
+.get-code-window {
+  position: relative;
+  background: #FFF;
+  padding: 2em 3em;
+  width: auto;
+  margin: 20px auto;
+  max-width: 600px;
+}
+#magnific_popup_documentation {
+  font-size: 3em;
+  margin-bottom: 1em;
+  font-weight: bold;
+  text-align: center;
+}
+
+
+h2 {
+  font-weight: bold;
+margin-top: 2em;
+margin-bottom: .3em;
+border-bottom: 1px solid #DDD;
+padding-bottom: 0.2em;
+font-size: 1.8em;
+}
+h3 {
+  font-size: 22px;
+line-height: 24px;
+margin-bottom: 12px;
+  margin-top: 20px;
+}
+h4 {
+  margin-bottom: 5px;
+}
+a {
+  color: #3169B3;
+  text-decoration: underline;
+}
+a:hover {
+  color: #C00;
+  text-decoration: underline;
+}
+
+
+
+body {
+  background: #fafafa;
+}
+
+
+.grid-c h3 {
+  margin-top: 0;
+}
+.grid-c {
+  clear: both;
+}
+.grid-c p {
+  margin-bottom: .5em;
+}
+.grid-c {
+  overflow: hidden;
+  margin: 0 -1em;
+}
+.gc3 {
+  -moz-box-sizing: border-box;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  width: 50%;
+  float: left;
+  padding: 1em;
+  overflow: hidden;
+}
+.grid-c .gc3:nth-of-type(2n+1) {
+clear: left;
+}
+
+h1#magnific-popup-docs {
+  display: none;
+}
+
+#logo {
+  height: 150px;
+  text-align: center;
+  position: relative;
+  width: 100%;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  padding: 0 3em;
+  margin-left: -3em;
+  cursor: pointer;
+  margin-top: 50px;
+  margin-bottom: 50px;
+}
+#broken-glass {
+  height: 100%;
+  -webkit-tap-highlight-color: transparent;
+  position: absolute;
+  left: 0;
+  top: 0;
+  width: 100%;
+}
+#logo:active h1 {
+  top: 1px;
+}
+
+#logo h1 {
+  margin-top: 27px;
+font-size: 63px;
+line-height: 1.4;
+top: 0;
+}
+
+#logo h1 {
+  text-align: center;
+  font-weight: bold;
+  width: 100%;
+  color: #000;
+  position: absolute;
+  left: 0;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  cursor: pointer;
+}
+
+
+h2.intro {
+  font-size: 22px;
+  line-height: 1.2;
+  font-weight: normal;
+  border: 0;
+  margin-top: 0;
+}
+#header-links {
+  font-size: 16px;
+}
+/*#header-links a {
+  color: #A5CCFF;
+}
+#header-links a:hover {
+  opacity: 0.8;
+}*/
+
+
+#markdown-toc {
+  position: fixed;
+  left: 0;
+  top: 50px;
+  padding: 20px 20px;
+  background: rgba(255, 255, 255, 0.71);
+  -webkit-backface-visibility:hidden;
+  list-style: none;
+}
+#markdown-toc a[href="#magnific-popup-docs"] {
+  display: none;
+}
+#markdown-toc ul {
+  list-style: none;
+}
+#markdown-toc ul ul {
+  display: none;
+}
+#markdown-toc:before {
+  content: 'Table of contents';
+  font-weight: bold;
+  display: block;
+  margin-bottom: 10px;
+}
+@media all and (max-width: 75em) {
+  #markdown-toc {
+    position: static;
+    padding: 0;
+    background: none;
+  } 
+}
+#markdown-toc a {
+  text-decoration: none;
+  border-bottom: 1px dotted;
+}
+#markdown-toc ul {
+  margin: 0;
+  padding: 0;
+}
+#markdown-toc .active a{
+  text-decoration: none;
+  color: #666;
+}
+/*h2:target {
+  font-weight: bold;
+  margin-top: 0;
+  border-top: 1.8em solid transparent;
+  margin-bottom: .3em;
+  border-bottom: 0;
+
+  -webkit-background-clip: padding-box;
+  -moz-background-clip: padding;
+  background-clip: padding-box;
+  background-color: #FFF6BF;
+  padding-top: .2em;
+  padding-left: .5em;
+}*/
+code,pre {
+   font-family: Consolas, "Liberation Mono", Courier, monospace;
+}
+code {
+  background: #F8F8F8;
+  padding: .1em .4em;
+  color: #c82829;
+  font-size: 13px;
+}
+
+pre {
+  background: none;
+  line-height: 18px;
+  overflow: auto;
+  padding: 20px 25px;
+ 
+  border-radius: 2px;
+}
+pre code {
+  border: 0;
+  padding: 0;
+  background: none;
+  color: #000;
+  font-size: 13px;
+}
+.highlight {
+position: relative;
+margin-bottom: 0.5em;
+margin-left: -1.5em;
+width: 100%;
+padding: 0 1.5em;
+background-color: #F5FAFC;
+
+}
+pre code:before {
+display: block;
+position: absolute;
+right: 3px;
+top: 6px;
+padding: 3px 7px 0;
+color: #889499;
+font-size: 12px;
+line-height: 13px;
+}
+
+
+code.html:before {
+content: 'HTML';
+}
+code.javascript:before {
+content: 'JS';
+}
+code.css:before {
+content: 'CSS';
+}
+
+
+#mc_embed_signup {
+  max-width: 350px;
+  padding: 32px;
+  background: #EEE;
+}
+#mc_embed_signup input[type="email"] {
+  border: 1px solid #CCC;
+  border-top: 1px solid #999;
+  padding: 5px;
+  font-size: 18px;
+  width: 200px;
+  margin-right: 10px;
+  height: 25px;
+  transition: all 0.3s ease;
+  -moz-transition: all 0.3s ease;
+  -webkit-transition: all 0.3s ease;
+  border-radius: 2px;
+  -moz-border-radius: 2px;
+  -webkit-border-radius: 2px;
+}
+#mc_embed_signup input[type="email"]:focus {
+  background-color: #FFF;
+  border: 1px solid #3169B3;
+  box-shadow: #3169B3 0px 0px 5px;
+  -moz-box-shadow: #3169B3 0px 0px 5px;
+  -webkit-box-shadow: #3169B3 0px 0px 5px;
+  outline: none;
+}
+#mc_embed_signup input[type="submit"] {
+  border: 1px solid #3169B3;
+  font-size: 13px;
+  font-weight: bold;
+  color: #FFF;
+  height: auto;
+  padding: 8px 13px;
+  cursor: pointer;
+  background-color: #3169B3;
+  display: inline-block;
+  width: auto;
+  -webkit-appearance: none;
+  border-radius: 2px;
+  -moz-border-radius: 2px;
+  -webkit-border-radius: 2px;
+  vertical-align: top;
+}
+.embed-form {
+  position: relative;
+}
+#mc_embed_signup p {
+  font-size: 15px;
+  color: #4F4F4F;
+}
+
+
+
+#main-wrapper {
+ 
+  background: none;
+	max-width: 800px;
+	width: 100%;
+	margin: 2em auto 4em;
+  padding: 3em;
+   padding-top: 0;
+  -moz-box-sizing: border-box;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  position: relative;
+}
+
+
+.white-popup-block {
+  background: #FFF;
+  padding: 20px 30px;
+  text-align: left;
+  max-width: 650px;
+  margin: 40px auto;
+  position: relative;
+}
+
+#examples:after {
+  content: 'to view source click on the title of example';
+opacity: 0.4;
+font-weight: normal;
+font-size: 14px;
+margin-top: 13px;
+float: right;
+}
+.example {
+  margin-bottom: 20px;
+  position: relative;
+}
+.example h3 {
+  display: inline-block;
+  cursor: pointer;
+  border-bottom: 1px dotted #949494;
+}
+.example h3:hover {
+  color: #C00;
+}
+.example h3:hover:after {
+  content: 'view source';
+  padding-left: 8px;
+  color: #999;
+  position: absolute;
+  top: 16px;
+  font-family: Consolas, "Liberation Mono", Courier, monospace;
+  font-size: 12px;
+}
+
+/*button.get-code-btn {
+  cursor: pointer;
+  background: transparent;
+  border: 0;
+  -webkit-appearance: none;
+  display: block;
+  z-index: 1;
+  padding: 0;
+  outline: none;
+  background: red;
+  position: absolute;
+  right: 0;
+  top: 0;
+}*/
+
+.square-tmb {
+  margin: 0 10px 0 0;
+  cursor: pointer;
+}
+.zoom-cursor {
+  cursor: -webkit-zoom-in;
+  cursor: -moz-zoom-in;
+  cursor: zoom-in;
+}
+.example a,
+a.popup-link {
+  text-decoration: none;
+  border-bottom: 1px dotted;
+}
+.example a:hover,
+a.popup-link:hover {
+  text-decoration: none;
+}
+
+.example a {
+  line-height: 26px;
+}
+.example p a {
+  text-decoration: underline;
+  border: 0;
+  line-height: 1.6;
+}
+
+#image-gallery a,
+#single-image {
+  border-bottom: none;
+}
+.not-ready-yet-notice {
+  padding: 20px 20px;
+  background: #EEE;
+}
+
+#footer {
+  border-top: 1px solid #DDD;
+  padding-top: 3em;
+  margin: 5em 0 0;
+  width: 100%;
+  text-align: center;
+  opacity: 0.9;
+}
+
+#conditional-lightbox-notice {
+  display: none;
+}
+
+#logo-status {
+  opacity: 0;
+  -webkit-transition: opacity 0.5s;
+  -moz-transition: opacity 0.5s;
+  transition: opacity 0.5s;
+  width: 100%;
+  text-align: center;
+}
+#logo-status.down {
+    opacity: 1;
+}
+
+.grid-of-images a {
+  cursor: -webkit-zoom-in;
+  cursor: -moz-zoom-in;
+  cursor: zoom-in;
+  border-bottom: 0;
+  height: 75px;
+  display: block;
+  float: left;
+  margin: 0 5px 5px 0;
+  width: 75px;
+}
+.grid-of-images a:hover {
+  opacity: 0.9;
+}
+
+h3 em {
+  opacity: 0.3;
+}
+
+code.def {
+ padding: 0;
+background: #FFF;
+border: 0;
+display: block;
+margin-bottom: 8px;
+margin-top: -10px;
+color: #A3A3A3;
+}
+
+@media all and (max-width: 50em) {
+  #logo h1 {
+    font-size: 52px;
+    margin-top: 36px;
+  }
+}
+
+@media all and (max-width: 30em) {
+  #examples:after {
+    display: none;
+  }
+  .gc3 { 
+    width: 100%;
+  }
+  .grid-c .gc3:nth-of-type(2n+1) {
+  clear: none;
+  }
+  #main-wrapper { 
+    padding: 1em;
+    margin-top: 0;
+  }
+  .highlight {
+    padding: 0.2em 1em;
+    margin: 1em -1em;
+  }
+  #logo {
+    height: 95px;
+    width: 100%;
+    padding: 0;
+    margin: 0 auto;
+    margin-top: 0;
+    margin-bottom: 2em;
+  }
+  #logo h1 {
+    font-size: 32px;
+  margin-top: 23px;
+  }
+  h2.intro {
+    font-size: 20px;
+  }
+}
+
+@media all and (max-width: 700px) {
+  .zoom-cursor {
+    cursor: pointer;
+  }
+  #conditional-lightbox-notice {
+    display: block;
+    padding: 10px;
+    background: #FFEAEA;
+  }
+}
+
+
+
+#logo-overlay {
+  width: 100%;
+  height: 75px;
+  
+}
+#logo-overlay {
+  opacity: 1;
+  background: red;
+  position: absolute;
+  left: 0;
+  top: 0;
+  opacity: 0;
+}
+#mfp-build-tool {
+  background: #FFF;
+  padding: 30px 40px 40px 40px;
+  max-width: 500px;
+  text-align: left;
+  margin: 10px auto;
+  position: relative;
+}
+
+#mfp-build-tool h2 {
+  margin-top: 0;
+  margin-bottom: 0.7em;
+}
+#mfp-build-form label {
+  display: block;
+margin-bottom: 5px;
+min-height: 18px;
+padding-left: 18px;
+}
+#mfp-build-form input[type="checkbox"] {
+  margin: 3px 0;
+line-height: normal;
+cursor: pointer;
+width: auto;
+margin-right: 5px;
+float: left;
+margin-left: -18px;
+}
+#mfp-build-status {
+  min-height: 40px;
+}
+#mfp-build-status .error {
+  color: #830C0C;
+}
+#mfp-build-status .success {
+  color: #014B04;
+}
+#mfp-build-status .progress {
+  color: #000;
+}
+
+
+#smashing {
+  text-align: center;
+  font-weight: bold;
+}
+#smashing a {
+  color: #EF4A35;
+}
+#smashing a:hover {
+  color: #FF9369;
+}
+#smashing strong {
+  color: #EF4A35;
+}
+.smashing-link {
+  margin-left: 29px;
+  position: relative;
+}
+.smashing-link:before {
+  content: '';
+  display: inline-block;
+  width: 24px;
+  height: 24px;
+  background: url("http://dimsemenov.com/images/sm-logo-24x24.png");
+  position: absolute;
+  top: -4px;
+  left: -28px;
+}
+#hackernews {
+  margin-left: 24px;
+}
+#hackernews:before {
+  background: url("http://dimsemenov.com/images/hn-logo-18x18.gif");
+  width: 18px;
+  height: 18px;
+  top: -1px;
+  left: -22px;
+}
+
+
+.share-buttons {
+  text-align: center;
+}
+.share-buttons h2 {
+  text-align: center;
+  border: 0;
+  
+}
+.share-buttons {
+  position: relative;
+  margin: 70px 0;
+}
+.share-buttons a {
+  -moz-border-radius: 2px;
+  border-radius: 2px;
+  display: inline-block;
+  padding: 10px 20px;
+  margin: 10px;
+  color: #FFF;
+  text-decoration: none;
+  background: #5AAF63;
+  font-size: 16px;
+  line-height: 22px;
+  cursor: pointer;
+}
+.share-buttons a:hover {
+  opacity: 0.7;
+}
+#tweet {
+  background: #0096c4;
+}
+#like {
+  background: #3b5998;
+}
+#gplus {
+  background: #d34836;
+}
+#vkcom {
+  background: #6e8fb1;
+}
+
+
+
+pre .comment,
+pre .template_comment,
+pre .diff .header,
+pre .javadoc {
+  color: #998;
+  font-style: italic
+}
+
+pre .keyword,
+pre .css .rule .keyword,
+pre .winutils,
+pre .javascript .title,
+pre .nginx .title,
+pre .subst,
+pre .request,
+pre .status {
+  color: #333;
+  font-weight: bold
+}
+
+pre .number,
+pre .hexcolor,
+pre .ruby .constant {
+  color: #099;
+}
+
+pre .string,
+pre .tag .value,
+pre .phpdoc,
+pre .tex .formula {
+  color: #D01040;
+}
+
+pre .title,
+pre .id {
+  color: #900;
+  font-weight: bold
+}
+
+pre .javascript .title,
+pre .lisp .title,
+pre .clojure .title,
+pre .subst {
+  font-weight: normal
+}
+
+pre .class .title,
+pre .haskell .type,
+pre .vhdl .literal,
+pre .tex .command {
+  color: #458;
+  font-weight: bold
+}
+
+pre .tag,
+pre .tag .title,
+pre .rules .property,
+pre .django .tag .keyword {
+  color: #000080;
+  font-weight: normal
+}
+
+pre .attribute,
+pre .variable,
+pre .lisp .body {
+  color: teal;
+}
+
+pre .regexp {
+  color: #009926
+}
+
+pre .class {
+  color: #458;
+  font-weight: bold
+}
+
+pre .symbol,
+pre .ruby .symbol .string,
+pre .lisp .keyword,
+pre .tex .special,
+pre .prompt {
+ 
+
+}
+
+pre .built_in,
+pre .lisp .title,
+pre .clojure .built_in {
+  color: #0086b3
+}
+
+pre .preprocessor,
+pre .pi,
+pre .doctype,
+pre .shebang,
+pre .cdata {
+  color: #999;
+  font-weight: bold
+}
+
+pre .deletion {
+  background: #fdd
+}
+
+pre .addition {
+  background: #dfd
+}
+
+pre .diff .change {
+  background: #0086b3
+}
+
+pre .chunk {
+  color: #aaa
+}
+
+#documentation-intro {
+  background: #2b2b2b;
+  text-align: center;
+  padding: 3em;
+  width: 100%;
+  margin-left: -3em;
+  margin-bottom: 3em;
+}
+#documentation-intro h1 {
+  color: #FFF;
+  width: 100%;
+  text-align: center;
+  font-size: 44px;
+  line-height: 1.1em;
+}
+#id1 {
+  display: none;
+}
+#documentation-intro h1 a {
+  text-decoration: none;
+  color: #FFF;
+}
+#documentation-intro p a {
+  font-size: 15px;
+  color: #7CB5FF;
+}
+#documentation-intro a:hover {
+  opacity: 0.75;
+  text-decoration: underline;
+}
+
+/* Syntax highlighter */
+.hll{background-color:#ffc}.c{color:#998;font-style:italic}.err{color:#a61717;background-color:#e3d2d2}.k{color:#000;font-weight:bold}.o{color:#000;font-weight:bold}.cm{color:#998;font-style:italic}.cp{color:#999;font-weight:bold;font-style:italic}.c1{color:#998;font-style:italic}.cs{color:#999;font-weight:bold;font-style:italic}.gd{color:#000;background-color:#fdd}.ge{color:#000;font-style:italic}.gr{color:#a00}.gh{color:#999}.gi{color:#000;background-color:#dfd}.go{color:#888}.gp{color:#555}.gs{font-weight:bold}.gu{color:#aaa}.gt{color:#a00}.kc{color:#000;font-weight:bold}.kd{color:#000;font-weight:bold}.kn{color:#000;font-weight:bold}.kp{color:#000;font-weight:bold}.kr{color:#000;font-weight:bold}.kt{color:#458;font-weight:bold}.m{color:#099}.s{color:#d01040}.na{color:#008080}.nb{color:#0086b3}.nc{color:#458;font-weight:bold}.no{color:#008080}.nd{color:#3c5d5d;font-weight:bold}.ni{color:#800080}.ne{color:#900;font-weight:bold}.nf{color:#900;font-weight:bold}.nl{color:#900;font-weight:bold}.nn{color:#555}.nt{color:#000080}.nv{color:#008080}.ow{color:#000;font-weight:bold}.w{color:#bbb}.mf{color:#099}.mh{color:#099}.mi{color:#099}.mo{color:#099}.sb{color:#d01040}.sc{color:#d01040}.sd{color:#d01040}.s2{color:#d01040}.se{color:#d01040}.sh{color:#d01040}.si{color:#d01040}.sx{color:#d01040}.sr{color:#009926}.s1{color:#d01040}.ss{color:#990073}.bp{color:#999}.vc{color:#008080}.vg{color:#008080}.vi{color:#008080}.il{color:#099}
diff --git a/vendor/dimsemenov/magnific-popup/website/third-party-libs/jquery.js b/vendor/dimsemenov/magnific-popup/website/third-party-libs/jquery.js
new file mode 100644
index 0000000000000000000000000000000000000000..c695ad9940a9c9febeb3a0c1f8cb52e41f149a51
--- /dev/null
+++ b/vendor/dimsemenov/magnific-popup/website/third-party-libs/jquery.js
@@ -0,0 +1,9597 @@
+/*!
+ * jQuery JavaScript Library v1.9.1
+ * http://jquery.com/
+ *
+ * Includes Sizzle.js
+ * http://sizzlejs.com/
+ *
+ * Copyright 2005, 2012 jQuery Foundation, Inc. and other contributors
+ * Released under the MIT license
+ * http://jquery.org/license
+ *
+ * Date: 2013-2-4
+ */
+(function( window, undefined ) {
+
+// Can't do this because several apps including ASP.NET trace
+// the stack via arguments.caller.callee and Firefox dies if
+// you try to trace through "use strict" call chains. (#13335)
+// Support: Firefox 18+
+//"use strict";
+var
+	// The deferred used on DOM ready
+	readyList,
+
+	// A central reference to the root jQuery(document)
+	rootjQuery,
+
+	// Support: IE<9
+	// For `typeof node.method` instead of `node.method !== undefined`
+	core_strundefined = typeof undefined,
+
+	// Use the correct document accordingly with window argument (sandbox)
+	document = window.document,
+	location = window.location,
+
+	// Map over jQuery in case of overwrite
+	_jQuery = window.jQuery,
+
+	// Map over the $ in case of overwrite
+	_$ = window.$,
+
+	// [[Class]] -> type pairs
+	class2type = {},
+
+	// List of deleted data cache ids, so we can reuse them
+	core_deletedIds = [],
+
+	core_version = "1.9.1",
+
+	// Save a reference to some core methods
+	core_concat = core_deletedIds.concat,
+	core_push = core_deletedIds.push,
+	core_slice = core_deletedIds.slice,
+	core_indexOf = core_deletedIds.indexOf,
+	core_toString = class2type.toString,
+	core_hasOwn = class2type.hasOwnProperty,
+	core_trim = core_version.trim,
+
+	// Define a local copy of jQuery
+	jQuery = function( selector, context ) {
+		// The jQuery object is actually just the init constructor 'enhanced'
+		return new jQuery.fn.init( selector, context, rootjQuery );
+	},
+
+	// Used for matching numbers
+	core_pnum = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,
+
+	// Used for splitting on whitespace
+	core_rnotwhite = /\S+/g,
+
+	// Make sure we trim BOM and NBSP (here's looking at you, Safari 5.0 and IE)
+	rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
+
+	// A simple way to check for HTML strings
+	// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
+	// Strict HTML recognition (#11290: must start with <)
+	rquickExpr = /^(?:(<[\w\W]+>)[^>]*|#([\w-]*))$/,
+
+	// Match a standalone tag
+	rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>|)$/,
+
+	// JSON RegExp
+	rvalidchars = /^[\],:{}\s]*$/,
+	rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g,
+	rvalidescape = /\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,
+	rvalidtokens = /"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,
+
+	// Matches dashed string for camelizing
+	rmsPrefix = /^-ms-/,
+	rdashAlpha = /-([\da-z])/gi,
+
+	// Used by jQuery.camelCase as callback to replace()
+	fcamelCase = function( all, letter ) {
+		return letter.toUpperCase();
+	},
+
+	// The ready event handler
+	completed = function( event ) {
+
+		// readyState === "complete" is good enough for us to call the dom ready in oldIE
+		if ( document.addEventListener || event.type === "load" || document.readyState === "complete" ) {
+			detach();
+			jQuery.ready();
+		}
+	},
+	// Clean-up method for dom ready events
+	detach = function() {
+		if ( document.addEventListener ) {
+			document.removeEventListener( "DOMContentLoaded", completed, false );
+			window.removeEventListener( "load", completed, false );
+
+		} else {
+			document.detachEvent( "onreadystatechange", completed );
+			window.detachEvent( "onload", completed );
+		}
+	};
+
+jQuery.fn = jQuery.prototype = {
+	// The current version of jQuery being used
+	jquery: core_version,
+
+	constructor: jQuery,
+	init: function( selector, context, rootjQuery ) {
+		var match, elem;
+
+		// HANDLE: $(""), $(null), $(undefined), $(false)
+		if ( !selector ) {
+			return this;
+		}
+
+		// Handle HTML strings
+		if ( typeof selector === "string" ) {
+			if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) {
+				// Assume that strings that start and end with <> are HTML and skip the regex check
+				match = [ null, selector, null ];
+
+			} else {
+				match = rquickExpr.exec( selector );
+			}
+
+			// Match html or make sure no context is specified for #id
+			if ( match && (match[1] || !context) ) {
+
+				// HANDLE: $(html) -> $(array)
+				if ( match[1] ) {
+					context = context instanceof jQuery ? context[0] : context;
+
+					// scripts is true for back-compat
+					jQuery.merge( this, jQuery.parseHTML(
+						match[1],
+						context && context.nodeType ? context.ownerDocument || context : document,
+						true
+					) );
+
+					// HANDLE: $(html, props)
+					if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) {
+						for ( match in context ) {
+							// Properties of context are called as methods if possible
+							if ( jQuery.isFunction( this[ match ] ) ) {
+								this[ match ]( context[ match ] );
+
+							// ...and otherwise set as attributes
+							} else {
+								this.attr( match, context[ match ] );
+							}
+						}
+					}
+
+					return this;
+
+				// HANDLE: $(#id)
+				} else {
+					elem = document.getElementById( match[2] );
+
+					// Check parentNode to catch when Blackberry 4.6 returns
+					// nodes that are no longer in the document #6963
+					if ( elem && elem.parentNode ) {
+						// Handle the case where IE and Opera return items
+						// by name instead of ID
+						if ( elem.id !== match[2] ) {
+							return rootjQuery.find( selector );
+						}
+
+						// Otherwise, we inject the element directly into the jQuery object
+						this.length = 1;
+						this[0] = elem;
+					}
+
+					this.context = document;
+					this.selector = selector;
+					return this;
+				}
+
+			// HANDLE: $(expr, $(...))
+			} else if ( !context || context.jquery ) {
+				return ( context || rootjQuery ).find( selector );
+
+			// HANDLE: $(expr, context)
+			// (which is just equivalent to: $(context).find(expr)
+			} else {
+				return this.constructor( context ).find( selector );
+			}
+
+		// HANDLE: $(DOMElement)
+		} else if ( selector.nodeType ) {
+			this.context = this[0] = selector;
+			this.length = 1;
+			return this;
+
+		// HANDLE: $(function)
+		// Shortcut for document ready
+		} else if ( jQuery.isFunction( selector ) ) {
+			return rootjQuery.ready( selector );
+		}
+
+		if ( selector.selector !== undefined ) {
+			this.selector = selector.selector;
+			this.context = selector.context;
+		}
+
+		return jQuery.makeArray( selector, this );
+	},
+
+	// Start with an empty selector
+	selector: "",
+
+	// The default length of a jQuery object is 0
+	length: 0,
+
+	// The number of elements contained in the matched element set
+	size: function() {
+		return this.length;
+	},
+
+	toArray: function() {
+		return core_slice.call( this );
+	},
+
+	// Get the Nth element in the matched element set OR
+	// Get the whole matched element set as a clean array
+	get: function( num ) {
+		return num == null ?
+
+			// Return a 'clean' array
+			this.toArray() :
+
+			// Return just the object
+			( num < 0 ? this[ this.length + num ] : this[ num ] );
+	},
+
+	// Take an array of elements and push it onto the stack
+	// (returning the new matched element set)
+	pushStack: function( elems ) {
+
+		// Build a new jQuery matched element set
+		var ret = jQuery.merge( this.constructor(), elems );
+
+		// Add the old object onto the stack (as a reference)
+		ret.prevObject = this;
+		ret.context = this.context;
+
+		// Return the newly-formed element set
+		return ret;
+	},
+
+	// Execute a callback for every element in the matched set.
+	// (You can seed the arguments with an array of args, but this is
+	// only used internally.)
+	each: function( callback, args ) {
+		return jQuery.each( this, callback, args );
+	},
+
+	ready: function( fn ) {
+		// Add the callback
+		jQuery.ready.promise().done( fn );
+
+		return this;
+	},
+
+	slice: function() {
+		return this.pushStack( core_slice.apply( this, arguments ) );
+	},
+
+	first: function() {
+		return this.eq( 0 );
+	},
+
+	last: function() {
+		return this.eq( -1 );
+	},
+
+	eq: function( i ) {
+		var len = this.length,
+			j = +i + ( i < 0 ? len : 0 );
+		return this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] );
+	},
+
+	map: function( callback ) {
+		return this.pushStack( jQuery.map(this, function( elem, i ) {
+			return callback.call( elem, i, elem );
+		}));
+	},
+
+	end: function() {
+		return this.prevObject || this.constructor(null);
+	},
+
+	// For internal use only.
+	// Behaves like an Array's method, not like a jQuery method.
+	push: core_push,
+	sort: [].sort,
+	splice: [].splice
+};
+
+// Give the init function the jQuery prototype for later instantiation
+jQuery.fn.init.prototype = jQuery.fn;
+
+jQuery.extend = jQuery.fn.extend = function() {
+	var src, copyIsArray, copy, name, options, clone,
+		target = arguments[0] || {},
+		i = 1,
+		length = arguments.length,
+		deep = false;
+
+	// Handle a deep copy situation
+	if ( typeof target === "boolean" ) {
+		deep = target;
+		target = arguments[1] || {};
+		// skip the boolean and the target
+		i = 2;
+	}
+
+	// Handle case when target is a string or something (possible in deep copy)
+	if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
+		target = {};
+	}
+
+	// extend jQuery itself if only one argument is passed
+	if ( length === i ) {
+		target = this;
+		--i;
+	}
+
+	for ( ; i < length; i++ ) {
+		// Only deal with non-null/undefined values
+		if ( (options = arguments[ i ]) != null ) {
+			// Extend the base object
+			for ( name in options ) {
+				src = target[ name ];
+				copy = options[ name ];
+
+				// Prevent never-ending loop
+				if ( target === copy ) {
+					continue;
+				}
+
+				// Recurse if we're merging plain objects or arrays
+				if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
+					if ( copyIsArray ) {
+						copyIsArray = false;
+						clone = src && jQuery.isArray(src) ? src : [];
+
+					} else {
+						clone = src && jQuery.isPlainObject(src) ? src : {};
+					}
+
+					// Never move original objects, clone them
+					target[ name ] = jQuery.extend( deep, clone, copy );
+
+				// Don't bring in undefined values
+				} else if ( copy !== undefined ) {
+					target[ name ] = copy;
+				}
+			}
+		}
+	}
+
+	// Return the modified object
+	return target;
+};
+
+jQuery.extend({
+	noConflict: function( deep ) {
+		if ( window.$ === jQuery ) {
+			window.$ = _$;
+		}
+
+		if ( deep && window.jQuery === jQuery ) {
+			window.jQuery = _jQuery;
+		}
+
+		return jQuery;
+	},
+
+	// Is the DOM ready to be used? Set to true once it occurs.
+	isReady: false,
+
+	// A counter to track how many items to wait for before
+	// the ready event fires. See #6781
+	readyWait: 1,
+
+	// Hold (or release) the ready event
+	holdReady: function( hold ) {
+		if ( hold ) {
+			jQuery.readyWait++;
+		} else {
+			jQuery.ready( true );
+		}
+	},
+
+	// Handle when the DOM is ready
+	ready: function( wait ) {
+
+		// Abort if there are pending holds or we're already ready
+		if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
+			return;
+		}
+
+		// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
+		if ( !document.body ) {
+			return setTimeout( jQuery.ready );
+		}
+
+		// Remember that the DOM is ready
+		jQuery.isReady = true;
+
+		// If a normal DOM Ready event fired, decrement, and wait if need be
+		if ( wait !== true && --jQuery.readyWait > 0 ) {
+			return;
+		}
+
+		// If there are functions bound, to execute
+		readyList.resolveWith( document, [ jQuery ] );
+
+		// Trigger any bound ready events
+		if ( jQuery.fn.trigger ) {
+			jQuery( document ).trigger("ready").off("ready");
+		}
+	},
+
+	// See test/unit/core.js for details concerning isFunction.
+	// Since version 1.3, DOM methods and functions like alert
+	// aren't supported. They return false on IE (#2968).
+	isFunction: function( obj ) {
+		return jQuery.type(obj) === "function";
+	},
+
+	isArray: Array.isArray || function( obj ) {
+		return jQuery.type(obj) === "array";
+	},
+
+	isWindow: function( obj ) {
+		return obj != null && obj == obj.window;
+	},
+
+	isNumeric: function( obj ) {
+		return !isNaN( parseFloat(obj) ) && isFinite( obj );
+	},
+
+	type: function( obj ) {
+		if ( obj == null ) {
+			return String( obj );
+		}
+		return typeof obj === "object" || typeof obj === "function" ?
+			class2type[ core_toString.call(obj) ] || "object" :
+			typeof obj;
+	},
+
+	isPlainObject: function( obj ) {
+		// Must be an Object.
+		// Because of IE, we also have to check the presence of the constructor property.
+		// Make sure that DOM nodes and window objects don't pass through, as well
+		if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
+			return false;
+		}
+
+		try {
+			// Not own constructor property must be Object
+			if ( obj.constructor &&
+				!core_hasOwn.call(obj, "constructor") &&
+				!core_hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
+				return false;
+			}
+		} catch ( e ) {
+			// IE8,9 Will throw exceptions on certain host objects #9897
+			return false;
+		}
+
+		// Own properties are enumerated firstly, so to speed up,
+		// if last one is own, then all properties are own.
+
+		var key;
+		for ( key in obj ) {}
+
+		return key === undefined || core_hasOwn.call( obj, key );
+	},
+
+	isEmptyObject: function( obj ) {
+		var name;
+		for ( name in obj ) {
+			return false;
+		}
+		return true;
+	},
+
+	error: function( msg ) {
+		throw new Error( msg );
+	},
+
+	// data: string of html
+	// context (optional): If specified, the fragment will be created in this context, defaults to document
+	// keepScripts (optional): If true, will include scripts passed in the html string
+	parseHTML: function( data, context, keepScripts ) {
+		if ( !data || typeof data !== "string" ) {
+			return null;
+		}
+		if ( typeof context === "boolean" ) {
+			keepScripts = context;
+			context = false;
+		}
+		context = context || document;
+
+		var parsed = rsingleTag.exec( data ),
+			scripts = !keepScripts && [];
+
+		// Single tag
+		if ( parsed ) {
+			return [ context.createElement( parsed[1] ) ];
+		}
+
+		parsed = jQuery.buildFragment( [ data ], context, scripts );
+		if ( scripts ) {
+			jQuery( scripts ).remove();
+		}
+		return jQuery.merge( [], parsed.childNodes );
+	},
+
+	parseJSON: function( data ) {
+		// Attempt to parse using the native JSON parser first
+		if ( window.JSON && window.JSON.parse ) {
+			return window.JSON.parse( data );
+		}
+
+		if ( data === null ) {
+			return data;
+		}
+
+		if ( typeof data === "string" ) {
+
+			// Make sure leading/trailing whitespace is removed (IE can't handle it)
+			data = jQuery.trim( data );
+
+			if ( data ) {
+				// Make sure the incoming data is actual JSON
+				// Logic borrowed from http://json.org/json2.js
+				if ( rvalidchars.test( data.replace( rvalidescape, "@" )
+					.replace( rvalidtokens, "]" )
+					.replace( rvalidbraces, "")) ) {
+
+					return ( new Function( "return " + data ) )();
+				}
+			}
+		}
+
+		jQuery.error( "Invalid JSON: " + data );
+	},
+
+	// Cross-browser xml parsing
+	parseXML: function( data ) {
+		var xml, tmp;
+		if ( !data || typeof data !== "string" ) {
+			return null;
+		}
+		try {
+			if ( window.DOMParser ) { // Standard
+				tmp = new DOMParser();
+				xml = tmp.parseFromString( data , "text/xml" );
+			} else { // IE
+				xml = new ActiveXObject( "Microsoft.XMLDOM" );
+				xml.async = "false";
+				xml.loadXML( data );
+			}
+		} catch( e ) {
+			xml = undefined;
+		}
+		if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) {
+			jQuery.error( "Invalid XML: " + data );
+		}
+		return xml;
+	},
+
+	noop: function() {},
+
+	// Evaluates a script in a global context
+	// Workarounds based on findings by Jim Driscoll
+	// http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context
+	globalEval: function( data ) {
+		if ( data && jQuery.trim( data ) ) {
+			// We use execScript on Internet Explorer
+			// We use an anonymous function so that context is window
+			// rather than jQuery in Firefox
+			( window.execScript || function( data ) {
+				window[ "eval" ].call( window, data );
+			} )( data );
+		}
+	},
+
+	// Convert dashed to camelCase; used by the css and data modules
+	// Microsoft forgot to hump their vendor prefix (#9572)
+	camelCase: function( string ) {
+		return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
+	},
+
+	nodeName: function( elem, name ) {
+		return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
+	},
+
+	// args is for internal usage only
+	each: function( obj, callback, args ) {
+		var value,
+			i = 0,
+			length = obj.length,
+			isArray = isArraylike( obj );
+
+		if ( args ) {
+			if ( isArray ) {
+				for ( ; i < length; i++ ) {
+					value = callback.apply( obj[ i ], args );
+
+					if ( value === false ) {
+						break;
+					}
+				}
+			} else {
+				for ( i in obj ) {
+					value = callback.apply( obj[ i ], args );
+
+					if ( value === false ) {
+						break;
+					}
+				}
+			}
+
+		// A special, fast, case for the most common use of each
+		} else {
+			if ( isArray ) {
+				for ( ; i < length; i++ ) {
+					value = callback.call( obj[ i ], i, obj[ i ] );
+
+					if ( value === false ) {
+						break;
+					}
+				}
+			} else {
+				for ( i in obj ) {
+					value = callback.call( obj[ i ], i, obj[ i ] );
+
+					if ( value === false ) {
+						break;
+					}
+				}
+			}
+		}
+
+		return obj;
+	},
+
+	// Use native String.trim function wherever possible
+	trim: core_trim && !core_trim.call("\uFEFF\xA0") ?
+		function( text ) {
+			return text == null ?
+				"" :
+				core_trim.call( text );
+		} :
+
+		// Otherwise use our own trimming functionality
+		function( text ) {
+			return text == null ?
+				"" :
+				( text + "" ).replace( rtrim, "" );
+		},
+
+	// results is for internal usage only
+	makeArray: function( arr, results ) {
+		var ret = results || [];
+
+		if ( arr != null ) {
+			if ( isArraylike( Object(arr) ) ) {
+				jQuery.merge( ret,
+					typeof arr === "string" ?
+					[ arr ] : arr
+				);
+			} else {
+				core_push.call( ret, arr );
+			}
+		}
+
+		return ret;
+	},
+
+	inArray: function( elem, arr, i ) {
+		var len;
+
+		if ( arr ) {
+			if ( core_indexOf ) {
+				return core_indexOf.call( arr, elem, i );
+			}
+
+			len = arr.length;
+			i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;
+
+			for ( ; i < len; i++ ) {
+				// Skip accessing in sparse arrays
+				if ( i in arr && arr[ i ] === elem ) {
+					return i;
+				}
+			}
+		}
+
+		return -1;
+	},
+
+	merge: function( first, second ) {
+		var l = second.length,
+			i = first.length,
+			j = 0;
+
+		if ( typeof l === "number" ) {
+			for ( ; j < l; j++ ) {
+				first[ i++ ] = second[ j ];
+			}
+		} else {
+			while ( second[j] !== undefined ) {
+				first[ i++ ] = second[ j++ ];
+			}
+		}
+
+		first.length = i;
+
+		return first;
+	},
+
+	grep: function( elems, callback, inv ) {
+		var retVal,
+			ret = [],
+			i = 0,
+			length = elems.length;
+		inv = !!inv;
+
+		// Go through the array, only saving the items
+		// that pass the validator function
+		for ( ; i < length; i++ ) {
+			retVal = !!callback( elems[ i ], i );
+			if ( inv !== retVal ) {
+				ret.push( elems[ i ] );
+			}
+		}
+
+		return ret;
+	},
+
+	// arg is for internal usage only
+	map: function( elems, callback, arg ) {
+		var value,
+			i = 0,
+			length = elems.length,
+			isArray = isArraylike( elems ),
+			ret = [];
+
+		// Go through the array, translating each of the items to their
+		if ( isArray ) {
+			for ( ; i < length; i++ ) {
+				value = callback( elems[ i ], i, arg );
+
+				if ( value != null ) {
+					ret[ ret.length ] = value;
+				}
+			}
+
+		// Go through every key on the object,
+		} else {
+			for ( i in elems ) {
+				value = callback( elems[ i ], i, arg );
+
+				if ( value != null ) {
+					ret[ ret.length ] = value;
+				}
+			}
+		}
+
+		// Flatten any nested arrays
+		return core_concat.apply( [], ret );
+	},
+
+	// A global GUID counter for objects
+	guid: 1,
+
+	// Bind a function to a context, optionally partially applying any
+	// arguments.
+	proxy: function( fn, context ) {
+		var args, proxy, tmp;
+
+		if ( typeof context === "string" ) {
+			tmp = fn[ context ];
+			context = fn;
+			fn = tmp;
+		}
+
+		// Quick check to determine if target is callable, in the spec
+		// this throws a TypeError, but we will just return undefined.
+		if ( !jQuery.isFunction( fn ) ) {
+			return undefined;
+		}
+
+		// Simulated bind
+		args = core_slice.call( arguments, 2 );
+		proxy = function() {
+			return fn.apply( context || this, args.concat( core_slice.call( arguments ) ) );
+		};
+
+		// Set the guid of unique handler to the same of original handler, so it can be removed
+		proxy.guid = fn.guid = fn.guid || jQuery.guid++;
+
+		return proxy;
+	},
+
+	// Multifunctional method to get and set values of a collection
+	// The value/s can optionally be executed if it's a function
+	access: function( elems, fn, key, value, chainable, emptyGet, raw ) {
+		var i = 0,
+			length = elems.length,
+			bulk = key == null;
+
+		// Sets many values
+		if ( jQuery.type( key ) === "object" ) {
+			chainable = true;
+			for ( i in key ) {
+				jQuery.access( elems, fn, i, key[i], true, emptyGet, raw );
+			}
+
+		// Sets one value
+		} else if ( value !== undefined ) {
+			chainable = true;
+
+			if ( !jQuery.isFunction( value ) ) {
+				raw = true;
+			}
+
+			if ( bulk ) {
+				// Bulk operations run against the entire set
+				if ( raw ) {
+					fn.call( elems, value );
+					fn = null;
+
+				// ...except when executing function values
+				} else {
+					bulk = fn;
+					fn = function( elem, key, value ) {
+						return bulk.call( jQuery( elem ), value );
+					};
+				}
+			}
+
+			if ( fn ) {
+				for ( ; i < length; i++ ) {
+					fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) );
+				}
+			}
+		}
+
+		return chainable ?
+			elems :
+
+			// Gets
+			bulk ?
+				fn.call( elems ) :
+				length ? fn( elems[0], key ) : emptyGet;
+	},
+
+	now: function() {
+		return ( new Date() ).getTime();
+	}
+});
+
+jQuery.ready.promise = function( obj ) {
+	if ( !readyList ) {
+
+		readyList = jQuery.Deferred();
+
+		// Catch cases where $(document).ready() is called after the browser event has already occurred.
+		// we once tried to use readyState "interactive" here, but it caused issues like the one
+		// discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15
+		if ( document.readyState === "complete" ) {
+			// Handle it asynchronously to allow scripts the opportunity to delay ready
+			setTimeout( jQuery.ready );
+
+		// Standards-based browsers support DOMContentLoaded
+		} else if ( document.addEventListener ) {
+			// Use the handy event callback
+			document.addEventListener( "DOMContentLoaded", completed, false );
+
+			// A fallback to window.onload, that will always work
+			window.addEventListener( "load", completed, false );
+
+		// If IE event model is used
+		} else {
+			// Ensure firing before onload, maybe late but safe also for iframes
+			document.attachEvent( "onreadystatechange", completed );
+
+			// A fallback to window.onload, that will always work
+			window.attachEvent( "onload", completed );
+
+			// If IE and not a frame
+			// continually check to see if the document is ready
+			var top = false;
+
+			try {
+				top = window.frameElement == null && document.documentElement;
+			} catch(e) {}
+
+			if ( top && top.doScroll ) {
+				(function doScrollCheck() {
+					if ( !jQuery.isReady ) {
+
+						try {
+							// Use the trick by Diego Perini
+							// http://javascript.nwbox.com/IEContentLoaded/
+							top.doScroll("left");
+						} catch(e) {
+							return setTimeout( doScrollCheck, 50 );
+						}
+
+						// detach all dom ready events
+						detach();
+
+						// and execute any waiting functions
+						jQuery.ready();
+					}
+				})();
+			}
+		}
+	}
+	return readyList.promise( obj );
+};
+
+// Populate the class2type map
+jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) {
+	class2type[ "[object " + name + "]" ] = name.toLowerCase();
+});
+
+function isArraylike( obj ) {
+	var length = obj.length,
+		type = jQuery.type( obj );
+
+	if ( jQuery.isWindow( obj ) ) {
+		return false;
+	}
+
+	if ( obj.nodeType === 1 && length ) {
+		return true;
+	}
+
+	return type === "array" || type !== "function" &&
+		( length === 0 ||
+		typeof length === "number" && length > 0 && ( length - 1 ) in obj );
+}
+
+// All jQuery objects should point back to these
+rootjQuery = jQuery(document);
+// String to Object options format cache
+var optionsCache = {};
+
+// Convert String-formatted options into Object-formatted ones and store in cache
+function createOptions( options ) {
+	var object = optionsCache[ options ] = {};
+	jQuery.each( options.match( core_rnotwhite ) || [], function( _, flag ) {
+		object[ flag ] = true;
+	});
+	return object;
+}
+
+/*
+ * Create a callback list using the following parameters:
+ *
+ *	options: an optional list of space-separated options that will change how
+ *			the callback list behaves or a more traditional option object
+ *
+ * By default a callback list will act like an event callback list and can be
+ * "fired" multiple times.
+ *
+ * Possible options:
+ *
+ *	once:			will ensure the callback list can only be fired once (like a Deferred)
+ *
+ *	memory:			will keep track of previous values and will call any callback added
+ *					after the list has been fired right away with the latest "memorized"
+ *					values (like a Deferred)
+ *
+ *	unique:			will ensure a callback can only be added once (no duplicate in the list)
+ *
+ *	stopOnFalse:	interrupt callings when a callback returns false
+ *
+ */
+jQuery.Callbacks = function( options ) {
+
+	// Convert options from String-formatted to Object-formatted if needed
+	// (we check in cache first)
+	options = typeof options === "string" ?
+		( optionsCache[ options ] || createOptions( options ) ) :
+		jQuery.extend( {}, options );
+
+	var // Flag to know if list is currently firing
+		firing,
+		// Last fire value (for non-forgettable lists)
+		memory,
+		// Flag to know if list was already fired
+		fired,
+		// End of the loop when firing
+		firingLength,
+		// Index of currently firing callback (modified by remove if needed)
+		firingIndex,
+		// First callback to fire (used internally by add and fireWith)
+		firingStart,
+		// Actual callback list
+		list = [],
+		// Stack of fire calls for repeatable lists
+		stack = !options.once && [],
+		// Fire callbacks
+		fire = function( data ) {
+			memory = options.memory && data;
+			fired = true;
+			firingIndex = firingStart || 0;
+			firingStart = 0;
+			firingLength = list.length;
+			firing = true;
+			for ( ; list && firingIndex < firingLength; firingIndex++ ) {
+				if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) {
+					memory = false; // To prevent further calls using add
+					break;
+				}
+			}
+			firing = false;
+			if ( list ) {
+				if ( stack ) {
+					if ( stack.length ) {
+						fire( stack.shift() );
+					}
+				} else if ( memory ) {
+					list = [];
+				} else {
+					self.disable();
+				}
+			}
+		},
+		// Actual Callbacks object
+		self = {
+			// Add a callback or a collection of callbacks to the list
+			add: function() {
+				if ( list ) {
+					// First, we save the current length
+					var start = list.length;
+					(function add( args ) {
+						jQuery.each( args, function( _, arg ) {
+							var type = jQuery.type( arg );
+							if ( type === "function" ) {
+								if ( !options.unique || !self.has( arg ) ) {
+									list.push( arg );
+								}
+							} else if ( arg && arg.length && type !== "string" ) {
+								// Inspect recursively
+								add( arg );
+							}
+						});
+					})( arguments );
+					// Do we need to add the callbacks to the
+					// current firing batch?
+					if ( firing ) {
+						firingLength = list.length;
+					// With memory, if we're not firing then
+					// we should call right away
+					} else if ( memory ) {
+						firingStart = start;
+						fire( memory );
+					}
+				}
+				return this;
+			},
+			// Remove a callback from the list
+			remove: function() {
+				if ( list ) {
+					jQuery.each( arguments, function( _, arg ) {
+						var index;
+						while( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
+							list.splice( index, 1 );
+							// Handle firing indexes
+							if ( firing ) {
+								if ( index <= firingLength ) {
+									firingLength--;
+								}
+								if ( index <= firingIndex ) {
+									firingIndex--;
+								}
+							}
+						}
+					});
+				}
+				return this;
+			},
+			// Check if a given callback is in the list.
+			// If no argument is given, return whether or not list has callbacks attached.
+			has: function( fn ) {
+				return fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length );
+			},
+			// Remove all callbacks from the list
+			empty: function() {
+				list = [];
+				return this;
+			},
+			// Have the list do nothing anymore
+			disable: function() {
+				list = stack = memory = undefined;
+				return this;
+			},
+			// Is it disabled?
+			disabled: function() {
+				return !list;
+			},
+			// Lock the list in its current state
+			lock: function() {
+				stack = undefined;
+				if ( !memory ) {
+					self.disable();
+				}
+				return this;
+			},
+			// Is it locked?
+			locked: function() {
+				return !stack;
+			},
+			// Call all callbacks with the given context and arguments
+			fireWith: function( context, args ) {
+				args = args || [];
+				args = [ context, args.slice ? args.slice() : args ];
+				if ( list && ( !fired || stack ) ) {
+					if ( firing ) {
+						stack.push( args );
+					} else {
+						fire( args );
+					}
+				}
+				return this;
+			},
+			// Call all the callbacks with the given arguments
+			fire: function() {
+				self.fireWith( this, arguments );
+				return this;
+			},
+			// To know if the callbacks have already been called at least once
+			fired: function() {
+				return !!fired;
+			}
+		};
+
+	return self;
+};
+jQuery.extend({
+
+	Deferred: function( func ) {
+		var tuples = [
+				// action, add listener, listener list, final state
+				[ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ],
+				[ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ],
+				[ "notify", "progress", jQuery.Callbacks("memory") ]
+			],
+			state = "pending",
+			promise = {
+				state: function() {
+					return state;
+				},
+				always: function() {
+					deferred.done( arguments ).fail( arguments );
+					return this;
+				},
+				then: function( /* fnDone, fnFail, fnProgress */ ) {
+					var fns = arguments;
+					return jQuery.Deferred(function( newDefer ) {
+						jQuery.each( tuples, function( i, tuple ) {
+							var action = tuple[ 0 ],
+								fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];
+							// deferred[ done | fail | progress ] for forwarding actions to newDefer
+							deferred[ tuple[1] ](function() {
+								var returned = fn && fn.apply( this, arguments );
+								if ( returned && jQuery.isFunction( returned.promise ) ) {
+									returned.promise()
+										.done( newDefer.resolve )
+										.fail( newDefer.reject )
+										.progress( newDefer.notify );
+								} else {
+									newDefer[ action + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments );
+								}
+							});
+						});
+						fns = null;
+					}).promise();
+				},
+				// Get a promise for this deferred
+				// If obj is provided, the promise aspect is added to the object
+				promise: function( obj ) {
+					return obj != null ? jQuery.extend( obj, promise ) : promise;
+				}
+			},
+			deferred = {};
+
+		// Keep pipe for back-compat
+		promise.pipe = promise.then;
+
+		// Add list-specific methods
+		jQuery.each( tuples, function( i, tuple ) {
+			var list = tuple[ 2 ],
+				stateString = tuple[ 3 ];
+
+			// promise[ done | fail | progress ] = list.add
+			promise[ tuple[1] ] = list.add;
+
+			// Handle state
+			if ( stateString ) {
+				list.add(function() {
+					// state = [ resolved | rejected ]
+					state = stateString;
+
+				// [ reject_list | resolve_list ].disable; progress_list.lock
+				}, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );
+			}
+
+			// deferred[ resolve | reject | notify ]
+			deferred[ tuple[0] ] = function() {
+				deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments );
+				return this;
+			};
+			deferred[ tuple[0] + "With" ] = list.fireWith;
+		});
+
+		// Make the deferred a promise
+		promise.promise( deferred );
+
+		// Call given func if any
+		if ( func ) {
+			func.call( deferred, deferred );
+		}
+
+		// All done!
+		return deferred;
+	},
+
+	// Deferred helper
+	when: function( subordinate /* , ..., subordinateN */ ) {
+		var i = 0,
+			resolveValues = core_slice.call( arguments ),
+			length = resolveValues.length,
+
+			// the count of uncompleted subordinates
+			remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,
+
+			// the master Deferred. If resolveValues consist of only a single Deferred, just use that.
+			deferred = remaining === 1 ? subordinate : jQuery.Deferred(),
+
+			// Update function for both resolve and progress values
+			updateFunc = function( i, contexts, values ) {
+				return function( value ) {
+					contexts[ i ] = this;
+					values[ i ] = arguments.length > 1 ? core_slice.call( arguments ) : value;
+					if( values === progressValues ) {
+						deferred.notifyWith( contexts, values );
+					} else if ( !( --remaining ) ) {
+						deferred.resolveWith( contexts, values );
+					}
+				};
+			},
+
+			progressValues, progressContexts, resolveContexts;
+
+		// add listeners to Deferred subordinates; treat others as resolved
+		if ( length > 1 ) {
+			progressValues = new Array( length );
+			progressContexts = new Array( length );
+			resolveContexts = new Array( length );
+			for ( ; i < length; i++ ) {
+				if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {
+					resolveValues[ i ].promise()
+						.done( updateFunc( i, resolveContexts, resolveValues ) )
+						.fail( deferred.reject )
+						.progress( updateFunc( i, progressContexts, progressValues ) );
+				} else {
+					--remaining;
+				}
+			}
+		}
+
+		// if we're not waiting on anything, resolve the master
+		if ( !remaining ) {
+			deferred.resolveWith( resolveContexts, resolveValues );
+		}
+
+		return deferred.promise();
+	}
+});
+jQuery.support = (function() {
+
+	var support, all, a,
+		input, select, fragment,
+		opt, eventName, isSupported, i,
+		div = document.createElement("div");
+
+	// Setup
+	div.setAttribute( "className", "t" );
+	div.innerHTML = "  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";
+
+	// Support tests won't run in some limited or non-browser environments
+	all = div.getElementsByTagName("*");
+	a = div.getElementsByTagName("a")[ 0 ];
+	if ( !all || !a || !all.length ) {
+		return {};
+	}
+
+	// First batch of tests
+	select = document.createElement("select");
+	opt = select.appendChild( document.createElement("option") );
+	input = div.getElementsByTagName("input")[ 0 ];
+
+	a.style.cssText = "top:1px;float:left;opacity:.5";
+	support = {
+		// Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)
+		getSetAttribute: div.className !== "t",
+
+		// IE strips leading whitespace when .innerHTML is used
+		leadingWhitespace: div.firstChild.nodeType === 3,
+
+		// Make sure that tbody elements aren't automatically inserted
+		// IE will insert them into empty tables
+		tbody: !div.getElementsByTagName("tbody").length,
+
+		// Make sure that link elements get serialized correctly by innerHTML
+		// This requires a wrapper element in IE
+		htmlSerialize: !!div.getElementsByTagName("link").length,
+
+		// Get the style information from getAttribute
+		// (IE uses .cssText instead)
+		style: /top/.test( a.getAttribute("style") ),
+
+		// Make sure that URLs aren't manipulated
+		// (IE normalizes it by default)
+		hrefNormalized: a.getAttribute("href") === "/a",
+
+		// Make sure that element opacity exists
+		// (IE uses filter instead)
+		// Use a regex to work around a WebKit issue. See #5145
+		opacity: /^0.5/.test( a.style.opacity ),
+
+		// Verify style float existence
+		// (IE uses styleFloat instead of cssFloat)
+		cssFloat: !!a.style.cssFloat,
+
+		// Check the default checkbox/radio value ("" on WebKit; "on" elsewhere)
+		checkOn: !!input.value,
+
+		// Make sure that a selected-by-default option has a working selected property.
+		// (WebKit defaults to false instead of true, IE too, if it's in an optgroup)
+		optSelected: opt.selected,
+
+		// Tests for enctype support on a form (#6743)
+		enctype: !!document.createElement("form").enctype,
+
+		// Makes sure cloning an html5 element does not cause problems
+		// Where outerHTML is undefined, this still works
+		html5Clone: document.createElement("nav").cloneNode( true ).outerHTML !== "<:nav></:nav>",
+
+		// jQuery.support.boxModel DEPRECATED in 1.8 since we don't support Quirks Mode
+		boxModel: document.compatMode === "CSS1Compat",
+
+		// Will be defined later
+		deleteExpando: true,
+		noCloneEvent: true,
+		inlineBlockNeedsLayout: false,
+		shrinkWrapBlocks: false,
+		reliableMarginRight: true,
+		boxSizingReliable: true,
+		pixelPosition: false
+	};
+
+	// Make sure checked status is properly cloned
+	input.checked = true;
+	support.noCloneChecked = input.cloneNode( true ).checked;
+
+	// Make sure that the options inside disabled selects aren't marked as disabled
+	// (WebKit marks them as disabled)
+	select.disabled = true;
+	support.optDisabled = !opt.disabled;
+
+	// Support: IE<9
+	try {
+		delete div.test;
+	} catch( e ) {
+		support.deleteExpando = false;
+	}
+
+	// Check if we can trust getAttribute("value")
+	input = document.createElement("input");
+	input.setAttribute( "value", "" );
+	support.input = input.getAttribute( "value" ) === "";
+
+	// Check if an input maintains its value after becoming a radio
+	input.value = "t";
+	input.setAttribute( "type", "radio" );
+	support.radioValue = input.value === "t";
+
+	// #11217 - WebKit loses check when the name is after the checked attribute
+	input.setAttribute( "checked", "t" );
+	input.setAttribute( "name", "t" );
+
+	fragment = document.createDocumentFragment();
+	fragment.appendChild( input );
+
+	// Check if a disconnected checkbox will retain its checked
+	// value of true after appended to the DOM (IE6/7)
+	support.appendChecked = input.checked;
+
+	// WebKit doesn't clone checked state correctly in fragments
+	support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked;
+
+	// Support: IE<9
+	// Opera does not clone events (and typeof div.attachEvent === undefined).
+	// IE9-10 clones events bound via attachEvent, but they don't trigger with .click()
+	if ( div.attachEvent ) {
+		div.attachEvent( "onclick", function() {
+			support.noCloneEvent = false;
+		});
+
+		div.cloneNode( true ).click();
+	}
+
+	// Support: IE<9 (lack submit/change bubble), Firefox 17+ (lack focusin event)
+	// Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP), test/csp.php
+	for ( i in { submit: true, change: true, focusin: true }) {
+		div.setAttribute( eventName = "on" + i, "t" );
+
+		support[ i + "Bubbles" ] = eventName in window || div.attributes[ eventName ].expando === false;
+	}
+
+	div.style.backgroundClip = "content-box";
+	div.cloneNode( true ).style.backgroundClip = "";
+	support.clearCloneStyle = div.style.backgroundClip === "content-box";
+
+	// Run tests that need a body at doc ready
+	jQuery(function() {
+		var container, marginDiv, tds,
+			divReset = "padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",
+			body = document.getElementsByTagName("body")[0];
+
+		if ( !body ) {
+			// Return for frameset docs that don't have a body
+			return;
+		}
+
+		container = document.createElement("div");
+		container.style.cssText = "border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px";
+
+		body.appendChild( container ).appendChild( div );
+
+		// Support: IE8
+		// Check if table cells still have offsetWidth/Height when they are set
+		// to display:none and there are still other visible table cells in a
+		// table row; if so, offsetWidth/Height are not reliable for use when
+		// determining if an element has been hidden directly using
+		// display:none (it is still safe to use offsets if a parent element is
+		// hidden; don safety goggles and see bug #4512 for more information).
+		div.innerHTML = "<table><tr><td></td><td>t</td></tr></table>";
+		tds = div.getElementsByTagName("td");
+		tds[ 0 ].style.cssText = "padding:0;margin:0;border:0;display:none";
+		isSupported = ( tds[ 0 ].offsetHeight === 0 );
+
+		tds[ 0 ].style.display = "";
+		tds[ 1 ].style.display = "none";
+
+		// Support: IE8
+		// Check if empty table cells still have offsetWidth/Height
+		support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 );
+
+		// Check box-sizing and margin behavior
+		div.innerHTML = "";
+		div.style.cssText = "box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;";
+		support.boxSizing = ( div.offsetWidth === 4 );
+		support.doesNotIncludeMarginInBodyOffset = ( body.offsetTop !== 1 );
+
+		// Use window.getComputedStyle because jsdom on node.js will break without it.
+		if ( window.getComputedStyle ) {
+			support.pixelPosition = ( window.getComputedStyle( div, null ) || {} ).top !== "1%";
+			support.boxSizingReliable = ( window.getComputedStyle( div, null ) || { width: "4px" } ).width === "4px";
+
+			// Check if div with explicit width and no margin-right incorrectly
+			// gets computed margin-right based on width of container. (#3333)
+			// Fails in WebKit before Feb 2011 nightlies
+			// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
+			marginDiv = div.appendChild( document.createElement("div") );
+			marginDiv.style.cssText = div.style.cssText = divReset;
+			marginDiv.style.marginRight = marginDiv.style.width = "0";
+			div.style.width = "1px";
+
+			support.reliableMarginRight =
+				!parseFloat( ( window.getComputedStyle( marginDiv, null ) || {} ).marginRight );
+		}
+
+		if ( typeof div.style.zoom !== core_strundefined ) {
+			// Support: IE<8
+			// Check if natively block-level elements act like inline-block
+			// elements when setting their display to 'inline' and giving
+			// them layout
+			div.innerHTML = "";
+			div.style.cssText = divReset + "width:1px;padding:1px;display:inline;zoom:1";
+			support.inlineBlockNeedsLayout = ( div.offsetWidth === 3 );
+
+			// Support: IE6
+			// Check if elements with layout shrink-wrap their children
+			div.style.display = "block";
+			div.innerHTML = "<div></div>";
+			div.firstChild.style.width = "5px";
+			support.shrinkWrapBlocks = ( div.offsetWidth !== 3 );
+
+			if ( support.inlineBlockNeedsLayout ) {
+				// Prevent IE 6 from affecting layout for positioned elements #11048
+				// Prevent IE from shrinking the body in IE 7 mode #12869
+				// Support: IE<8
+				body.style.zoom = 1;
+			}
+		}
+
+		body.removeChild( container );
+
+		// Null elements to avoid leaks in IE
+		container = div = tds = marginDiv = null;
+	});
+
+	// Null elements to avoid leaks in IE
+	all = select = fragment = opt = a = input = null;
+
+	return support;
+})();
+
+var rbrace = /(?:\{[\s\S]*\}|\[[\s\S]*\])$/,
+	rmultiDash = /([A-Z])/g;
+
+function internalData( elem, name, data, pvt /* Internal Use Only */ ){
+	if ( !jQuery.acceptData( elem ) ) {
+		return;
+	}
+
+	var thisCache, ret,
+		internalKey = jQuery.expando,
+		getByName = typeof name === "string",
+
+		// We have to handle DOM nodes and JS objects differently because IE6-7
+		// can't GC object references properly across the DOM-JS boundary
+		isNode = elem.nodeType,
+
+		// Only DOM nodes need the global jQuery cache; JS object data is
+		// attached directly to the object so GC can occur automatically
+		cache = isNode ? jQuery.cache : elem,
+
+		// Only defining an ID for JS objects if its cache already exists allows
+		// the code to shortcut on the same path as a DOM node with no cache
+		id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey;
+
+	// Avoid doing any more work than we need to when trying to get data on an
+	// object that has no data at all
+	if ( (!id || !cache[id] || (!pvt && !cache[id].data)) && getByName && data === undefined ) {
+		return;
+	}
+
+	if ( !id ) {
+		// Only DOM nodes need a new unique ID for each element since their data
+		// ends up in the global cache
+		if ( isNode ) {
+			elem[ internalKey ] = id = core_deletedIds.pop() || jQuery.guid++;
+		} else {
+			id = internalKey;
+		}
+	}
+
+	if ( !cache[ id ] ) {
+		cache[ id ] = {};
+
+		// Avoids exposing jQuery metadata on plain JS objects when the object
+		// is serialized using JSON.stringify
+		if ( !isNode ) {
+			cache[ id ].toJSON = jQuery.noop;
+		}
+	}
+
+	// An object can be passed to jQuery.data instead of a key/value pair; this gets
+	// shallow copied over onto the existing cache
+	if ( typeof name === "object" || typeof name === "function" ) {
+		if ( pvt ) {
+			cache[ id ] = jQuery.extend( cache[ id ], name );
+		} else {
+			cache[ id ].data = jQuery.extend( cache[ id ].data, name );
+		}
+	}
+
+	thisCache = cache[ id ];
+
+	// jQuery data() is stored in a separate object inside the object's internal data
+	// cache in order to avoid key collisions between internal data and user-defined
+	// data.
+	if ( !pvt ) {
+		if ( !thisCache.data ) {
+			thisCache.data = {};
+		}
+
+		thisCache = thisCache.data;
+	}
+
+	if ( data !== undefined ) {
+		thisCache[ jQuery.camelCase( name ) ] = data;
+	}
+
+	// Check for both converted-to-camel and non-converted data property names
+	// If a data property was specified
+	if ( getByName ) {
+
+		// First Try to find as-is property data
+		ret = thisCache[ name ];
+
+		// Test for null|undefined property data
+		if ( ret == null ) {
+
+			// Try to find the camelCased property
+			ret = thisCache[ jQuery.camelCase( name ) ];
+		}
+	} else {
+		ret = thisCache;
+	}
+
+	return ret;
+}
+
+function internalRemoveData( elem, name, pvt ) {
+	if ( !jQuery.acceptData( elem ) ) {
+		return;
+	}
+
+	var i, l, thisCache,
+		isNode = elem.nodeType,
+
+		// See jQuery.data for more information
+		cache = isNode ? jQuery.cache : elem,
+		id = isNode ? elem[ jQuery.expando ] : jQuery.expando;
+
+	// If there is already no cache entry for this object, there is no
+	// purpose in continuing
+	if ( !cache[ id ] ) {
+		return;
+	}
+
+	if ( name ) {
+
+		thisCache = pvt ? cache[ id ] : cache[ id ].data;
+
+		if ( thisCache ) {
+
+			// Support array or space separated string names for data keys
+			if ( !jQuery.isArray( name ) ) {
+
+				// try the string as a key before any manipulation
+				if ( name in thisCache ) {
+					name = [ name ];
+				} else {
+
+					// split the camel cased version by spaces unless a key with the spaces exists
+					name = jQuery.camelCase( name );
+					if ( name in thisCache ) {
+						name = [ name ];
+					} else {
+						name = name.split(" ");
+					}
+				}
+			} else {
+				// If "name" is an array of keys...
+				// When data is initially created, via ("key", "val") signature,
+				// keys will be converted to camelCase.
+				// Since there is no way to tell _how_ a key was added, remove
+				// both plain key and camelCase key. #12786
+				// This will only penalize the array argument path.
+				name = name.concat( jQuery.map( name, jQuery.camelCase ) );
+			}
+
+			for ( i = 0, l = name.length; i < l; i++ ) {
+				delete thisCache[ name[i] ];
+			}
+
+			// If there is no data left in the cache, we want to continue
+			// and let the cache object itself get destroyed
+			if ( !( pvt ? isEmptyDataObject : jQuery.isEmptyObject )( thisCache ) ) {
+				return;
+			}
+		}
+	}
+
+	// See jQuery.data for more information
+	if ( !pvt ) {
+		delete cache[ id ].data;
+
+		// Don't destroy the parent cache unless the internal data object
+		// had been the only thing left in it
+		if ( !isEmptyDataObject( cache[ id ] ) ) {
+			return;
+		}
+	}
+
+	// Destroy the cache
+	if ( isNode ) {
+		jQuery.cleanData( [ elem ], true );
+
+	// Use delete when supported for expandos or `cache` is not a window per isWindow (#10080)
+	} else if ( jQuery.support.deleteExpando || cache != cache.window ) {
+		delete cache[ id ];
+
+	// When all else fails, null
+	} else {
+		cache[ id ] = null;
+	}
+}
+
+jQuery.extend({
+	cache: {},
+
+	// Unique for each copy of jQuery on the page
+	// Non-digits removed to match rinlinejQuery
+	expando: "jQuery" + ( core_version + Math.random() ).replace( /\D/g, "" ),
+
+	// The following elements throw uncatchable exceptions if you
+	// attempt to add expando properties to them.
+	noData: {
+		"embed": true,
+		// Ban all objects except for Flash (which handle expandos)
+		"object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",
+		"applet": true
+	},
+
+	hasData: function( elem ) {
+		elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];
+		return !!elem && !isEmptyDataObject( elem );
+	},
+
+	data: function( elem, name, data ) {
+		return internalData( elem, name, data );
+	},
+
+	removeData: function( elem, name ) {
+		return internalRemoveData( elem, name );
+	},
+
+	// For internal use only.
+	_data: function( elem, name, data ) {
+		return internalData( elem, name, data, true );
+	},
+
+	_removeData: function( elem, name ) {
+		return internalRemoveData( elem, name, true );
+	},
+
+	// A method for determining if a DOM node can handle the data expando
+	acceptData: function( elem ) {
+		// Do not set data on non-element because it will not be cleared (#8335).
+		if ( elem.nodeType && elem.nodeType !== 1 && elem.nodeType !== 9 ) {
+			return false;
+		}
+
+		var noData = elem.nodeName && jQuery.noData[ elem.nodeName.toLowerCase() ];
+
+		// nodes accept data unless otherwise specified; rejection can be conditional
+		return !noData || noData !== true && elem.getAttribute("classid") === noData;
+	}
+});
+
+jQuery.fn.extend({
+	data: function( key, value ) {
+		var attrs, name,
+			elem = this[0],
+			i = 0,
+			data = null;
+
+		// Gets all values
+		if ( key === undefined ) {
+			if ( this.length ) {
+				data = jQuery.data( elem );
+
+				if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) {
+					attrs = elem.attributes;
+					for ( ; i < attrs.length; i++ ) {
+						name = attrs[i].name;
+
+						if ( !name.indexOf( "data-" ) ) {
+							name = jQuery.camelCase( name.slice(5) );
+
+							dataAttr( elem, name, data[ name ] );
+						}
+					}
+					jQuery._data( elem, "parsedAttrs", true );
+				}
+			}
+
+			return data;
+		}
+
+		// Sets multiple values
+		if ( typeof key === "object" ) {
+			return this.each(function() {
+				jQuery.data( this, key );
+			});
+		}
+
+		return jQuery.access( this, function( value ) {
+
+			if ( value === undefined ) {
+				// Try to fetch any internally stored data first
+				return elem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : null;
+			}
+
+			this.each(function() {
+				jQuery.data( this, key, value );
+			});
+		}, null, value, arguments.length > 1, null, true );
+	},
+
+	removeData: function( key ) {
+		return this.each(function() {
+			jQuery.removeData( this, key );
+		});
+	}
+});
+
+function dataAttr( elem, key, data ) {
+	// If nothing was found internally, try to fetch any
+	// data from the HTML5 data-* attribute
+	if ( data === undefined && elem.nodeType === 1 ) {
+
+		var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase();
+
+		data = elem.getAttribute( name );
+
+		if ( typeof data === "string" ) {
+			try {
+				data = data === "true" ? true :
+					data === "false" ? false :
+					data === "null" ? null :
+					// Only convert to a number if it doesn't change the string
+					+data + "" === data ? +data :
+					rbrace.test( data ) ? jQuery.parseJSON( data ) :
+						data;
+			} catch( e ) {}
+
+			// Make sure we set the data so it isn't changed later
+			jQuery.data( elem, key, data );
+
+		} else {
+			data = undefined;
+		}
+	}
+
+	return data;
+}
+
+// checks a cache object for emptiness
+function isEmptyDataObject( obj ) {
+	var name;
+	for ( name in obj ) {
+
+		// if the public data object is empty, the private is still empty
+		if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) {
+			continue;
+		}
+		if ( name !== "toJSON" ) {
+			return false;
+		}
+	}
+
+	return true;
+}
+jQuery.extend({
+	queue: function( elem, type, data ) {
+		var queue;
+
+		if ( elem ) {
+			type = ( type || "fx" ) + "queue";
+			queue = jQuery._data( elem, type );
+
+			// Speed up dequeue by getting out quickly if this is just a lookup
+			if ( data ) {
+				if ( !queue || jQuery.isArray(data) ) {
+					queue = jQuery._data( elem, type, jQuery.makeArray(data) );
+				} else {
+					queue.push( data );
+				}
+			}
+			return queue || [];
+		}
+	},
+
+	dequeue: function( elem, type ) {
+		type = type || "fx";
+
+		var queue = jQuery.queue( elem, type ),
+			startLength = queue.length,
+			fn = queue.shift(),
+			hooks = jQuery._queueHooks( elem, type ),
+			next = function() {
+				jQuery.dequeue( elem, type );
+			};
+
+		// If the fx queue is dequeued, always remove the progress sentinel
+		if ( fn === "inprogress" ) {
+			fn = queue.shift();
+			startLength--;
+		}
+
+		hooks.cur = fn;
+		if ( fn ) {
+
+			// Add a progress sentinel to prevent the fx queue from being
+			// automatically dequeued
+			if ( type === "fx" ) {
+				queue.unshift( "inprogress" );
+			}
+
+			// clear up the last queue stop function
+			delete hooks.stop;
+			fn.call( elem, next, hooks );
+		}
+
+		if ( !startLength && hooks ) {
+			hooks.empty.fire();
+		}
+	},
+
+	// not intended for public consumption - generates a queueHooks object, or returns the current one
+	_queueHooks: function( elem, type ) {
+		var key = type + "queueHooks";
+		return jQuery._data( elem, key ) || jQuery._data( elem, key, {
+			empty: jQuery.Callbacks("once memory").add(function() {
+				jQuery._removeData( elem, type + "queue" );
+				jQuery._removeData( elem, key );
+			})
+		});
+	}
+});
+
+jQuery.fn.extend({
+	queue: function( type, data ) {
+		var setter = 2;
+
+		if ( typeof type !== "string" ) {
+			data = type;
+			type = "fx";
+			setter--;
+		}
+
+		if ( arguments.length < setter ) {
+			return jQuery.queue( this[0], type );
+		}
+
+		return data === undefined ?
+			this :
+			this.each(function() {
+				var queue = jQuery.queue( this, type, data );
+
+				// ensure a hooks for this queue
+				jQuery._queueHooks( this, type );
+
+				if ( type === "fx" && queue[0] !== "inprogress" ) {
+					jQuery.dequeue( this, type );
+				}
+			});
+	},
+	dequeue: function( type ) {
+		return this.each(function() {
+			jQuery.dequeue( this, type );
+		});
+	},
+	// Based off of the plugin by Clint Helfers, with permission.
+	// http://blindsignals.com/index.php/2009/07/jquery-delay/
+	delay: function( time, type ) {
+		time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
+		type = type || "fx";
+
+		return this.queue( type, function( next, hooks ) {
+			var timeout = setTimeout( next, time );
+			hooks.stop = function() {
+				clearTimeout( timeout );
+			};
+		});
+	},
+	clearQueue: function( type ) {
+		return this.queue( type || "fx", [] );
+	},
+	// Get a promise resolved when queues of a certain type
+	// are emptied (fx is the type by default)
+	promise: function( type, obj ) {
+		var tmp,
+			count = 1,
+			defer = jQuery.Deferred(),
+			elements = this,
+			i = this.length,
+			resolve = function() {
+				if ( !( --count ) ) {
+					defer.resolveWith( elements, [ elements ] );
+				}
+			};
+
+		if ( typeof type !== "string" ) {
+			obj = type;
+			type = undefined;
+		}
+		type = type || "fx";
+
+		while( i-- ) {
+			tmp = jQuery._data( elements[ i ], type + "queueHooks" );
+			if ( tmp && tmp.empty ) {
+				count++;
+				tmp.empty.add( resolve );
+			}
+		}
+		resolve();
+		return defer.promise( obj );
+	}
+});
+var nodeHook, boolHook,
+	rclass = /[\t\r\n]/g,
+	rreturn = /\r/g,
+	rfocusable = /^(?:input|select|textarea|button|object)$/i,
+	rclickable = /^(?:a|area)$/i,
+	rboolean = /^(?:checked|selected|autofocus|autoplay|async|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped)$/i,
+	ruseDefault = /^(?:checked|selected)$/i,
+	getSetAttribute = jQuery.support.getSetAttribute,
+	getSetInput = jQuery.support.input;
+
+jQuery.fn.extend({
+	attr: function( name, value ) {
+		return jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 );
+	},
+
+	removeAttr: function( name ) {
+		return this.each(function() {
+			jQuery.removeAttr( this, name );
+		});
+	},
+
+	prop: function( name, value ) {
+		return jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 );
+	},
+
+	removeProp: function( name ) {
+		name = jQuery.propFix[ name ] || name;
+		return this.each(function() {
+			// try/catch handles cases where IE balks (such as removing a property on window)
+			try {
+				this[ name ] = undefined;
+				delete this[ name ];
+			} catch( e ) {}
+		});
+	},
+
+	addClass: function( value ) {
+		var classes, elem, cur, clazz, j,
+			i = 0,
+			len = this.length,
+			proceed = typeof value === "string" && value;
+
+		if ( jQuery.isFunction( value ) ) {
+			return this.each(function( j ) {
+				jQuery( this ).addClass( value.call( this, j, this.className ) );
+			});
+		}
+
+		if ( proceed ) {
+			// The disjunction here is for better compressibility (see removeClass)
+			classes = ( value || "" ).match( core_rnotwhite ) || [];
+
+			for ( ; i < len; i++ ) {
+				elem = this[ i ];
+				cur = elem.nodeType === 1 && ( elem.className ?
+					( " " + elem.className + " " ).replace( rclass, " " ) :
+					" "
+				);
+
+				if ( cur ) {
+					j = 0;
+					while ( (clazz = classes[j++]) ) {
+						if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
+							cur += clazz + " ";
+						}
+					}
+					elem.className = jQuery.trim( cur );
+
+				}
+			}
+		}
+
+		return this;
+	},
+
+	removeClass: function( value ) {
+		var classes, elem, cur, clazz, j,
+			i = 0,
+			len = this.length,
+			proceed = arguments.length === 0 || typeof value === "string" && value;
+
+		if ( jQuery.isFunction( value ) ) {
+			return this.each(function( j ) {
+				jQuery( this ).removeClass( value.call( this, j, this.className ) );
+			});
+		}
+		if ( proceed ) {
+			classes = ( value || "" ).match( core_rnotwhite ) || [];
+
+			for ( ; i < len; i++ ) {
+				elem = this[ i ];
+				// This expression is here for better compressibility (see addClass)
+				cur = elem.nodeType === 1 && ( elem.className ?
+					( " " + elem.className + " " ).replace( rclass, " " ) :
+					""
+				);
+
+				if ( cur ) {
+					j = 0;
+					while ( (clazz = classes[j++]) ) {
+						// Remove *all* instances
+						while ( cur.indexOf( " " + clazz + " " ) >= 0 ) {
+							cur = cur.replace( " " + clazz + " ", " " );
+						}
+					}
+					elem.className = value ? jQuery.trim( cur ) : "";
+				}
+			}
+		}
+
+		return this;
+	},
+
+	toggleClass: function( value, stateVal ) {
+		var type = typeof value,
+			isBool = typeof stateVal === "boolean";
+
+		if ( jQuery.isFunction( value ) ) {
+			return this.each(function( i ) {
+				jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );
+			});
+		}
+
+		return this.each(function() {
+			if ( type === "string" ) {
+				// toggle individual class names
+				var className,
+					i = 0,
+					self = jQuery( this ),
+					state = stateVal,
+					classNames = value.match( core_rnotwhite ) || [];
+
+				while ( (className = classNames[ i++ ]) ) {
+					// check each className given, space separated list
+					state = isBool ? state : !self.hasClass( className );
+					self[ state ? "addClass" : "removeClass" ]( className );
+				}
+
+			// Toggle whole class name
+			} else if ( type === core_strundefined || type === "boolean" ) {
+				if ( this.className ) {
+					// store className if set
+					jQuery._data( this, "__className__", this.className );
+				}
+
+				// If the element has a class name or if we're passed "false",
+				// then remove the whole classname (if there was one, the above saved it).
+				// Otherwise bring back whatever was previously saved (if anything),
+				// falling back to the empty string if nothing was stored.
+				this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || "";
+			}
+		});
+	},
+
+	hasClass: function( selector ) {
+		var className = " " + selector + " ",
+			i = 0,
+			l = this.length;
+		for ( ; i < l; i++ ) {
+			if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) >= 0 ) {
+				return true;
+			}
+		}
+
+		return false;
+	},
+
+	val: function( value ) {
+		var ret, hooks, isFunction,
+			elem = this[0];
+
+		if ( !arguments.length ) {
+			if ( elem ) {
+				hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];
+
+				if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
+					return ret;
+				}
+
+				ret = elem.value;
+
+				return typeof ret === "string" ?
+					// handle most common string cases
+					ret.replace(rreturn, "") :
+					// handle cases where value is null/undef or number
+					ret == null ? "" : ret;
+			}
+
+			return;
+		}
+
+		isFunction = jQuery.isFunction( value );
+
+		return this.each(function( i ) {
+			var val,
+				self = jQuery(this);
+
+			if ( this.nodeType !== 1 ) {
+				return;
+			}
+
+			if ( isFunction ) {
+				val = value.call( this, i, self.val() );
+			} else {
+				val = value;
+			}
+
+			// Treat null/undefined as ""; convert numbers to string
+			if ( val == null ) {
+				val = "";
+			} else if ( typeof val === "number" ) {
+				val += "";
+			} else if ( jQuery.isArray( val ) ) {
+				val = jQuery.map(val, function ( value ) {
+					return value == null ? "" : value + "";
+				});
+			}
+
+			hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
+
+			// If set returns undefined, fall back to normal setting
+			if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {
+				this.value = val;
+			}
+		});
+	}
+});
+
+jQuery.extend({
+	valHooks: {
+		option: {
+			get: function( elem ) {
+				// attributes.value is undefined in Blackberry 4.7 but
+				// uses .value. See #6932
+				var val = elem.attributes.value;
+				return !val || val.specified ? elem.value : elem.text;
+			}
+		},
+		select: {
+			get: function( elem ) {
+				var value, option,
+					options = elem.options,
+					index = elem.selectedIndex,
+					one = elem.type === "select-one" || index < 0,
+					values = one ? null : [],
+					max = one ? index + 1 : options.length,
+					i = index < 0 ?
+						max :
+						one ? index : 0;
+
+				// Loop through all the selected options
+				for ( ; i < max; i++ ) {
+					option = options[ i ];
+
+					// oldIE doesn't update selected after form reset (#2551)
+					if ( ( option.selected || i === index ) &&
+							// Don't return options that are disabled or in a disabled optgroup
+							( jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null ) &&
+							( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) {
+
+						// Get the specific value for the option
+						value = jQuery( option ).val();
+
+						// We don't need an array for one selects
+						if ( one ) {
+							return value;
+						}
+
+						// Multi-Selects return an array
+						values.push( value );
+					}
+				}
+
+				return values;
+			},
+
+			set: function( elem, value ) {
+				var values = jQuery.makeArray( value );
+
+				jQuery(elem).find("option").each(function() {
+					this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0;
+				});
+
+				if ( !values.length ) {
+					elem.selectedIndex = -1;
+				}
+				return values;
+			}
+		}
+	},
+
+	attr: function( elem, name, value ) {
+		var hooks, notxml, ret,
+			nType = elem.nodeType;
+
+		// don't get/set attributes on text, comment and attribute nodes
+		if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
+			return;
+		}
+
+		// Fallback to prop when attributes are not supported
+		if ( typeof elem.getAttribute === core_strundefined ) {
+			return jQuery.prop( elem, name, value );
+		}
+
+		notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
+
+		// All attributes are lowercase
+		// Grab necessary hook if one is defined
+		if ( notxml ) {
+			name = name.toLowerCase();
+			hooks = jQuery.attrHooks[ name ] || ( rboolean.test( name ) ? boolHook : nodeHook );
+		}
+
+		if ( value !== undefined ) {
+
+			if ( value === null ) {
+				jQuery.removeAttr( elem, name );
+
+			} else if ( hooks && notxml && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
+				return ret;
+
+			} else {
+				elem.setAttribute( name, value + "" );
+				return value;
+			}
+
+		} else if ( hooks && notxml && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {
+			return ret;
+
+		} else {
+
+			// In IE9+, Flash objects don't have .getAttribute (#12945)
+			// Support: IE9+
+			if ( typeof elem.getAttribute !== core_strundefined ) {
+				ret =  elem.getAttribute( name );
+			}
+
+			// Non-existent attributes return null, we normalize to undefined
+			return ret == null ?
+				undefined :
+				ret;
+		}
+	},
+
+	removeAttr: function( elem, value ) {
+		var name, propName,
+			i = 0,
+			attrNames = value && value.match( core_rnotwhite );
+
+		if ( attrNames && elem.nodeType === 1 ) {
+			while ( (name = attrNames[i++]) ) {
+				propName = jQuery.propFix[ name ] || name;
+
+				// Boolean attributes get special treatment (#10870)
+				if ( rboolean.test( name ) ) {
+					// Set corresponding property to false for boolean attributes
+					// Also clear defaultChecked/defaultSelected (if appropriate) for IE<8
+					if ( !getSetAttribute && ruseDefault.test( name ) ) {
+						elem[ jQuery.camelCase( "default-" + name ) ] =
+							elem[ propName ] = false;
+					} else {
+						elem[ propName ] = false;
+					}
+
+				// See #9699 for explanation of this approach (setting first, then removal)
+				} else {
+					jQuery.attr( elem, name, "" );
+				}
+
+				elem.removeAttribute( getSetAttribute ? name : propName );
+			}
+		}
+	},
+
+	attrHooks: {
+		type: {
+			set: function( elem, value ) {
+				if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) {
+					// Setting the type on a radio button after the value resets the value in IE6-9
+					// Reset value to default in case type is set after value during creation
+					var val = elem.value;
+					elem.setAttribute( "type", value );
+					if ( val ) {
+						elem.value = val;
+					}
+					return value;
+				}
+			}
+		}
+	},
+
+	propFix: {
+		tabindex: "tabIndex",
+		readonly: "readOnly",
+		"for": "htmlFor",
+		"class": "className",
+		maxlength: "maxLength",
+		cellspacing: "cellSpacing",
+		cellpadding: "cellPadding",
+		rowspan: "rowSpan",
+		colspan: "colSpan",
+		usemap: "useMap",
+		frameborder: "frameBorder",
+		contenteditable: "contentEditable"
+	},
+
+	prop: function( elem, name, value ) {
+		var ret, hooks, notxml,
+			nType = elem.nodeType;
+
+		// don't get/set properties on text, comment and attribute nodes
+		if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
+			return;
+		}
+
+		notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
+
+		if ( notxml ) {
+			// Fix name and attach hooks
+			name = jQuery.propFix[ name ] || name;
+			hooks = jQuery.propHooks[ name ];
+		}
+
+		if ( value !== undefined ) {
+			if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
+				return ret;
+
+			} else {
+				return ( elem[ name ] = value );
+			}
+
+		} else {
+			if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {
+				return ret;
+
+			} else {
+				return elem[ name ];
+			}
+		}
+	},
+
+	propHooks: {
+		tabIndex: {
+			get: function( elem ) {
+				// elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
+				// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
+				var attributeNode = elem.getAttributeNode("tabindex");
+
+				return attributeNode && attributeNode.specified ?
+					parseInt( attributeNode.value, 10 ) :
+					rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
+						0 :
+						undefined;
+			}
+		}
+	}
+});
+
+// Hook for boolean attributes
+boolHook = {
+	get: function( elem, name ) {
+		var
+			// Use .prop to determine if this attribute is understood as boolean
+			prop = jQuery.prop( elem, name ),
+
+			// Fetch it accordingly
+			attr = typeof prop === "boolean" && elem.getAttribute( name ),
+			detail = typeof prop === "boolean" ?
+
+				getSetInput && getSetAttribute ?
+					attr != null :
+					// oldIE fabricates an empty string for missing boolean attributes
+					// and conflates checked/selected into attroperties
+					ruseDefault.test( name ) ?
+						elem[ jQuery.camelCase( "default-" + name ) ] :
+						!!attr :
+
+				// fetch an attribute node for properties not recognized as boolean
+				elem.getAttributeNode( name );
+
+		return detail && detail.value !== false ?
+			name.toLowerCase() :
+			undefined;
+	},
+	set: function( elem, value, name ) {
+		if ( value === false ) {
+			// Remove boolean attributes when set to false
+			jQuery.removeAttr( elem, name );
+		} else if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {
+			// IE<8 needs the *property* name
+			elem.setAttribute( !getSetAttribute && jQuery.propFix[ name ] || name, name );
+
+		// Use defaultChecked and defaultSelected for oldIE
+		} else {
+			elem[ jQuery.camelCase( "default-" + name ) ] = elem[ name ] = true;
+		}
+
+		return name;
+	}
+};
+
+// fix oldIE value attroperty
+if ( !getSetInput || !getSetAttribute ) {
+	jQuery.attrHooks.value = {
+		get: function( elem, name ) {
+			var ret = elem.getAttributeNode( name );
+			return jQuery.nodeName( elem, "input" ) ?
+
+				// Ignore the value *property* by using defaultValue
+				elem.defaultValue :
+
+				ret && ret.specified ? ret.value : undefined;
+		},
+		set: function( elem, value, name ) {
+			if ( jQuery.nodeName( elem, "input" ) ) {
+				// Does not return so that setAttribute is also used
+				elem.defaultValue = value;
+			} else {
+				// Use nodeHook if defined (#1954); otherwise setAttribute is fine
+				return nodeHook && nodeHook.set( elem, value, name );
+			}
+		}
+	};
+}
+
+// IE6/7 do not support getting/setting some attributes with get/setAttribute
+if ( !getSetAttribute ) {
+
+	// Use this for any attribute in IE6/7
+	// This fixes almost every IE6/7 issue
+	nodeHook = jQuery.valHooks.button = {
+		get: function( elem, name ) {
+			var ret = elem.getAttributeNode( name );
+			return ret && ( name === "id" || name === "name" || name === "coords" ? ret.value !== "" : ret.specified ) ?
+				ret.value :
+				undefined;
+		},
+		set: function( elem, value, name ) {
+			// Set the existing or create a new attribute node
+			var ret = elem.getAttributeNode( name );
+			if ( !ret ) {
+				elem.setAttributeNode(
+					(ret = elem.ownerDocument.createAttribute( name ))
+				);
+			}
+
+			ret.value = value += "";
+
+			// Break association with cloned elements by also using setAttribute (#9646)
+			return name === "value" || value === elem.getAttribute( name ) ?
+				value :
+				undefined;
+		}
+	};
+
+	// Set contenteditable to false on removals(#10429)
+	// Setting to empty string throws an error as an invalid value
+	jQuery.attrHooks.contenteditable = {
+		get: nodeHook.get,
+		set: function( elem, value, name ) {
+			nodeHook.set( elem, value === "" ? false : value, name );
+		}
+	};
+
+	// Set width and height to auto instead of 0 on empty string( Bug #8150 )
+	// This is for removals
+	jQuery.each([ "width", "height" ], function( i, name ) {
+		jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
+			set: function( elem, value ) {
+				if ( value === "" ) {
+					elem.setAttribute( name, "auto" );
+					return value;
+				}
+			}
+		});
+	});
+}
+
+
+// Some attributes require a special call on IE
+// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
+if ( !jQuery.support.hrefNormalized ) {
+	jQuery.each([ "href", "src", "width", "height" ], function( i, name ) {
+		jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
+			get: function( elem ) {
+				var ret = elem.getAttribute( name, 2 );
+				return ret == null ? undefined : ret;
+			}
+		});
+	});
+
+	// href/src property should get the full normalized URL (#10299/#12915)
+	jQuery.each([ "href", "src" ], function( i, name ) {
+		jQuery.propHooks[ name ] = {
+			get: function( elem ) {
+				return elem.getAttribute( name, 4 );
+			}
+		};
+	});
+}
+
+if ( !jQuery.support.style ) {
+	jQuery.attrHooks.style = {
+		get: function( elem ) {
+			// Return undefined in the case of empty string
+			// Note: IE uppercases css property names, but if we were to .toLowerCase()
+			// .cssText, that would destroy case senstitivity in URL's, like in "background"
+			return elem.style.cssText || undefined;
+		},
+		set: function( elem, value ) {
+			return ( elem.style.cssText = value + "" );
+		}
+	};
+}
+
+// Safari mis-reports the default selected property of an option
+// Accessing the parent's selectedIndex property fixes it
+if ( !jQuery.support.optSelected ) {
+	jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, {
+		get: function( elem ) {
+			var parent = elem.parentNode;
+
+			if ( parent ) {
+				parent.selectedIndex;
+
+				// Make sure that it also works with optgroups, see #5701
+				if ( parent.parentNode ) {
+					parent.parentNode.selectedIndex;
+				}
+			}
+			return null;
+		}
+	});
+}
+
+// IE6/7 call enctype encoding
+if ( !jQuery.support.enctype ) {
+	jQuery.propFix.enctype = "encoding";
+}
+
+// Radios and checkboxes getter/setter
+if ( !jQuery.support.checkOn ) {
+	jQuery.each([ "radio", "checkbox" ], function() {
+		jQuery.valHooks[ this ] = {
+			get: function( elem ) {
+				// Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified
+				return elem.getAttribute("value") === null ? "on" : elem.value;
+			}
+		};
+	});
+}
+jQuery.each([ "radio", "checkbox" ], function() {
+	jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], {
+		set: function( elem, value ) {
+			if ( jQuery.isArray( value ) ) {
+				return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );
+			}
+		}
+	});
+});
+var rformElems = /^(?:input|select|textarea)$/i,
+	rkeyEvent = /^key/,
+	rmouseEvent = /^(?:mouse|contextmenu)|click/,
+	rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
+	rtypenamespace = /^([^.]*)(?:\.(.+)|)$/;
+
+function returnTrue() {
+	return true;
+}
+
+function returnFalse() {
+	return false;
+}
+
+/*
+ * Helper functions for managing events -- not part of the public interface.
+ * Props to Dean Edwards' addEvent library for many of the ideas.
+ */
+jQuery.event = {
+
+	global: {},
+
+	add: function( elem, types, handler, data, selector ) {
+		var tmp, events, t, handleObjIn,
+			special, eventHandle, handleObj,
+			handlers, type, namespaces, origType,
+			elemData = jQuery._data( elem );
+
+		// Don't attach events to noData or text/comment nodes (but allow plain objects)
+		if ( !elemData ) {
+			return;
+		}
+
+		// Caller can pass in an object of custom data in lieu of the handler
+		if ( handler.handler ) {
+			handleObjIn = handler;
+			handler = handleObjIn.handler;
+			selector = handleObjIn.selector;
+		}
+
+		// Make sure that the handler has a unique ID, used to find/remove it later
+		if ( !handler.guid ) {
+			handler.guid = jQuery.guid++;
+		}
+
+		// Init the element's event structure and main handler, if this is the first
+		if ( !(events = elemData.events) ) {
+			events = elemData.events = {};
+		}
+		if ( !(eventHandle = elemData.handle) ) {
+			eventHandle = elemData.handle = function( e ) {
+				// Discard the second event of a jQuery.event.trigger() and
+				// when an event is called after a page has unloaded
+				return typeof jQuery !== core_strundefined && (!e || jQuery.event.triggered !== e.type) ?
+					jQuery.event.dispatch.apply( eventHandle.elem, arguments ) :
+					undefined;
+			};
+			// Add elem as a property of the handle fn to prevent a memory leak with IE non-native events
+			eventHandle.elem = elem;
+		}
+
+		// Handle multiple events separated by a space
+		// jQuery(...).bind("mouseover mouseout", fn);
+		types = ( types || "" ).match( core_rnotwhite ) || [""];
+		t = types.length;
+		while ( t-- ) {
+			tmp = rtypenamespace.exec( types[t] ) || [];
+			type = origType = tmp[1];
+			namespaces = ( tmp[2] || "" ).split( "." ).sort();
+
+			// If event changes its type, use the special event handlers for the changed type
+			special = jQuery.event.special[ type ] || {};
+
+			// If selector defined, determine special event api type, otherwise given type
+			type = ( selector ? special.delegateType : special.bindType ) || type;
+
+			// Update special based on newly reset type
+			special = jQuery.event.special[ type ] || {};
+
+			// handleObj is passed to all event handlers
+			handleObj = jQuery.extend({
+				type: type,
+				origType: origType,
+				data: data,
+				handler: handler,
+				guid: handler.guid,
+				selector: selector,
+				needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
+				namespace: namespaces.join(".")
+			}, handleObjIn );
+
+			// Init the event handler queue if we're the first
+			if ( !(handlers = events[ type ]) ) {
+				handlers = events[ type ] = [];
+				handlers.delegateCount = 0;
+
+				// Only use addEventListener/attachEvent if the special events handler returns false
+				if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
+					// Bind the global event handler to the element
+					if ( elem.addEventListener ) {
+						elem.addEventListener( type, eventHandle, false );
+
+					} else if ( elem.attachEvent ) {
+						elem.attachEvent( "on" + type, eventHandle );
+					}
+				}
+			}
+
+			if ( special.add ) {
+				special.add.call( elem, handleObj );
+
+				if ( !handleObj.handler.guid ) {
+					handleObj.handler.guid = handler.guid;
+				}
+			}
+
+			// Add to the element's handler list, delegates in front
+			if ( selector ) {
+				handlers.splice( handlers.delegateCount++, 0, handleObj );
+			} else {
+				handlers.push( handleObj );
+			}
+
+			// Keep track of which events have ever been used, for event optimization
+			jQuery.event.global[ type ] = true;
+		}
+
+		// Nullify elem to prevent memory leaks in IE
+		elem = null;
+	},
+
+	// Detach an event or set of events from an element
+	remove: function( elem, types, handler, selector, mappedTypes ) {
+		var j, handleObj, tmp,
+			origCount, t, events,
+			special, handlers, type,
+			namespaces, origType,
+			elemData = jQuery.hasData( elem ) && jQuery._data( elem );
+
+		if ( !elemData || !(events = elemData.events) ) {
+			return;
+		}
+
+		// Once for each type.namespace in types; type may be omitted
+		types = ( types || "" ).match( core_rnotwhite ) || [""];
+		t = types.length;
+		while ( t-- ) {
+			tmp = rtypenamespace.exec( types[t] ) || [];
+			type = origType = tmp[1];
+			namespaces = ( tmp[2] || "" ).split( "." ).sort();
+
+			// Unbind all events (on this namespace, if provided) for the element
+			if ( !type ) {
+				for ( type in events ) {
+					jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
+				}
+				continue;
+			}
+
+			special = jQuery.event.special[ type ] || {};
+			type = ( selector ? special.delegateType : special.bindType ) || type;
+			handlers = events[ type ] || [];
+			tmp = tmp[2] && new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" );
+
+			// Remove matching events
+			origCount = j = handlers.length;
+			while ( j-- ) {
+				handleObj = handlers[ j ];
+
+				if ( ( mappedTypes || origType === handleObj.origType ) &&
+					( !handler || handler.guid === handleObj.guid ) &&
+					( !tmp || tmp.test( handleObj.namespace ) ) &&
+					( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) {
+					handlers.splice( j, 1 );
+
+					if ( handleObj.selector ) {
+						handlers.delegateCount--;
+					}
+					if ( special.remove ) {
+						special.remove.call( elem, handleObj );
+					}
+				}
+			}
+
+			// Remove generic event handler if we removed something and no more handlers exist
+			// (avoids potential for endless recursion during removal of special event handlers)
+			if ( origCount && !handlers.length ) {
+				if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
+					jQuery.removeEvent( elem, type, elemData.handle );
+				}
+
+				delete events[ type ];
+			}
+		}
+
+		// Remove the expando if it's no longer used
+		if ( jQuery.isEmptyObject( events ) ) {
+			delete elemData.handle;
+
+			// removeData also checks for emptiness and clears the expando if empty
+			// so use it instead of delete
+			jQuery._removeData( elem, "events" );
+		}
+	},
+
+	trigger: function( event, data, elem, onlyHandlers ) {
+		var handle, ontype, cur,
+			bubbleType, special, tmp, i,
+			eventPath = [ elem || document ],
+			type = core_hasOwn.call( event, "type" ) ? event.type : event,
+			namespaces = core_hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : [];
+
+		cur = tmp = elem = elem || document;
+
+		// Don't do events on text and comment nodes
+		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
+			return;
+		}
+
+		// focus/blur morphs to focusin/out; ensure we're not firing them right now
+		if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
+			return;
+		}
+
+		if ( type.indexOf(".") >= 0 ) {
+			// Namespaced trigger; create a regexp to match event type in handle()
+			namespaces = type.split(".");
+			type = namespaces.shift();
+			namespaces.sort();
+		}
+		ontype = type.indexOf(":") < 0 && "on" + type;
+
+		// Caller can pass in a jQuery.Event object, Object, or just an event type string
+		event = event[ jQuery.expando ] ?
+			event :
+			new jQuery.Event( type, typeof event === "object" && event );
+
+		event.isTrigger = true;
+		event.namespace = namespaces.join(".");
+		event.namespace_re = event.namespace ?
+			new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) :
+			null;
+
+		// Clean up the event in case it is being reused
+		event.result = undefined;
+		if ( !event.target ) {
+			event.target = elem;
+		}
+
+		// Clone any incoming data and prepend the event, creating the handler arg list
+		data = data == null ?
+			[ event ] :
+			jQuery.makeArray( data, [ event ] );
+
+		// Allow special events to draw outside the lines
+		special = jQuery.event.special[ type ] || {};
+		if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
+			return;
+		}
+
+		// Determine event propagation path in advance, per W3C events spec (#9951)
+		// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
+		if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
+
+			bubbleType = special.delegateType || type;
+			if ( !rfocusMorph.test( bubbleType + type ) ) {
+				cur = cur.parentNode;
+			}
+			for ( ; cur; cur = cur.parentNode ) {
+				eventPath.push( cur );
+				tmp = cur;
+			}
+
+			// Only add window if we got to document (e.g., not plain obj or detached DOM)
+			if ( tmp === (elem.ownerDocument || document) ) {
+				eventPath.push( tmp.defaultView || tmp.parentWindow || window );
+			}
+		}
+
+		// Fire handlers on the event path
+		i = 0;
+		while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) {
+
+			event.type = i > 1 ?
+				bubbleType :
+				special.bindType || type;
+
+			// jQuery handler
+			handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" );
+			if ( handle ) {
+				handle.apply( cur, data );
+			}
+
+			// Native handler
+			handle = ontype && cur[ ontype ];
+			if ( handle && jQuery.acceptData( cur ) && handle.apply && handle.apply( cur, data ) === false ) {
+				event.preventDefault();
+			}
+		}
+		event.type = type;
+
+		// If nobody prevented the default action, do it now
+		if ( !onlyHandlers && !event.isDefaultPrevented() ) {
+
+			if ( (!special._default || special._default.apply( elem.ownerDocument, data ) === false) &&
+				!(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) {
+
+				// Call a native DOM method on the target with the same name name as the event.
+				// Can't use an .isFunction() check here because IE6/7 fails that test.
+				// Don't do default actions on window, that's where global variables be (#6170)
+				if ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) {
+
+					// Don't re-trigger an onFOO event when we call its FOO() method
+					tmp = elem[ ontype ];
+
+					if ( tmp ) {
+						elem[ ontype ] = null;
+					}
+
+					// Prevent re-triggering of the same event, since we already bubbled it above
+					jQuery.event.triggered = type;
+					try {
+						elem[ type ]();
+					} catch ( e ) {
+						// IE<9 dies on focus/blur to hidden element (#1486,#12518)
+						// only reproducible on winXP IE8 native, not IE9 in IE8 mode
+					}
+					jQuery.event.triggered = undefined;
+
+					if ( tmp ) {
+						elem[ ontype ] = tmp;
+					}
+				}
+			}
+		}
+
+		return event.result;
+	},
+
+	dispatch: function( event ) {
+
+		// Make a writable jQuery.Event from the native event object
+		event = jQuery.event.fix( event );
+
+		var i, ret, handleObj, matched, j,
+			handlerQueue = [],
+			args = core_slice.call( arguments ),
+			handlers = ( jQuery._data( this, "events" ) || {} )[ event.type ] || [],
+			special = jQuery.event.special[ event.type ] || {};
+
+		// Use the fix-ed jQuery.Event rather than the (read-only) native event
+		args[0] = event;
+		event.delegateTarget = this;
+
+		// Call the preDispatch hook for the mapped type, and let it bail if desired
+		if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
+			return;
+		}
+
+		// Determine handlers
+		handlerQueue = jQuery.event.handlers.call( this, event, handlers );
+
+		// Run delegates first; they may want to stop propagation beneath us
+		i = 0;
+		while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) {
+			event.currentTarget = matched.elem;
+
+			j = 0;
+			while ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) {
+
+				// Triggered event must either 1) have no namespace, or
+				// 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).
+				if ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) {
+
+					event.handleObj = handleObj;
+					event.data = handleObj.data;
+
+					ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )
+							.apply( matched.elem, args );
+
+					if ( ret !== undefined ) {
+						if ( (event.result = ret) === false ) {
+							event.preventDefault();
+							event.stopPropagation();
+						}
+					}
+				}
+			}
+		}
+
+		// Call the postDispatch hook for the mapped type
+		if ( special.postDispatch ) {
+			special.postDispatch.call( this, event );
+		}
+
+		return event.result;
+	},
+
+	handlers: function( event, handlers ) {
+		var sel, handleObj, matches, i,
+			handlerQueue = [],
+			delegateCount = handlers.delegateCount,
+			cur = event.target;
+
+		// Find delegate handlers
+		// Black-hole SVG <use> instance trees (#13180)
+		// Avoid non-left-click bubbling in Firefox (#3861)
+		if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) {
+
+			for ( ; cur != this; cur = cur.parentNode || this ) {
+
+				// Don't check non-elements (#13208)
+				// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
+				if ( cur.nodeType === 1 && (cur.disabled !== true || event.type !== "click") ) {
+					matches = [];
+					for ( i = 0; i < delegateCount; i++ ) {
+						handleObj = handlers[ i ];
+
+						// Don't conflict with Object.prototype properties (#13203)
+						sel = handleObj.selector + " ";
+
+						if ( matches[ sel ] === undefined ) {
+							matches[ sel ] = handleObj.needsContext ?
+								jQuery( sel, this ).index( cur ) >= 0 :
+								jQuery.find( sel, this, null, [ cur ] ).length;
+						}
+						if ( matches[ sel ] ) {
+							matches.push( handleObj );
+						}
+					}
+					if ( matches.length ) {
+						handlerQueue.push({ elem: cur, handlers: matches });
+					}
+				}
+			}
+		}
+
+		// Add the remaining (directly-bound) handlers
+		if ( delegateCount < handlers.length ) {
+			handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) });
+		}
+
+		return handlerQueue;
+	},
+
+	fix: function( event ) {
+		if ( event[ jQuery.expando ] ) {
+			return event;
+		}
+
+		// Create a writable copy of the event object and normalize some properties
+		var i, prop, copy,
+			type = event.type,
+			originalEvent = event,
+			fixHook = this.fixHooks[ type ];
+
+		if ( !fixHook ) {
+			this.fixHooks[ type ] = fixHook =
+				rmouseEvent.test( type ) ? this.mouseHooks :
+				rkeyEvent.test( type ) ? this.keyHooks :
+				{};
+		}
+		copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;
+
+		event = new jQuery.Event( originalEvent );
+
+		i = copy.length;
+		while ( i-- ) {
+			prop = copy[ i ];
+			event[ prop ] = originalEvent[ prop ];
+		}
+
+		// Support: IE<9
+		// Fix target property (#1925)
+		if ( !event.target ) {
+			event.target = originalEvent.srcElement || document;
+		}
+
+		// Support: Chrome 23+, Safari?
+		// Target should not be a text node (#504, #13143)
+		if ( event.target.nodeType === 3 ) {
+			event.target = event.target.parentNode;
+		}
+
+		// Support: IE<9
+		// For mouse/key events, metaKey==false if it's undefined (#3368, #11328)
+		event.metaKey = !!event.metaKey;
+
+		return fixHook.filter ? fixHook.filter( event, originalEvent ) : event;
+	},
+
+	// Includes some event props shared by KeyEvent and MouseEvent
+	props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
+
+	fixHooks: {},
+
+	keyHooks: {
+		props: "char charCode key keyCode".split(" "),
+		filter: function( event, original ) {
+
+			// Add which for key events
+			if ( event.which == null ) {
+				event.which = original.charCode != null ? original.charCode : original.keyCode;
+			}
+
+			return event;
+		}
+	},
+
+	mouseHooks: {
+		props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
+		filter: function( event, original ) {
+			var body, eventDoc, doc,
+				button = original.button,
+				fromElement = original.fromElement;
+
+			// Calculate pageX/Y if missing and clientX/Y available
+			if ( event.pageX == null && original.clientX != null ) {
+				eventDoc = event.target.ownerDocument || document;
+				doc = eventDoc.documentElement;
+				body = eventDoc.body;
+
+				event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );
+				event.pageY = original.clientY + ( doc && doc.scrollTop  || body && body.scrollTop  || 0 ) - ( doc && doc.clientTop  || body && body.clientTop  || 0 );
+			}
+
+			// Add relatedTarget, if necessary
+			if ( !event.relatedTarget && fromElement ) {
+				event.relatedTarget = fromElement === event.target ? original.toElement : fromElement;
+			}
+
+			// Add which for click: 1 === left; 2 === middle; 3 === right
+			// Note: button is not normalized, so don't use it
+			if ( !event.which && button !== undefined ) {
+				event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );
+			}
+
+			return event;
+		}
+	},
+
+	special: {
+		load: {
+			// Prevent triggered image.load events from bubbling to window.load
+			noBubble: true
+		},
+		click: {
+			// For checkbox, fire native event so checked state will be right
+			trigger: function() {
+				if ( jQuery.nodeName( this, "input" ) && this.type === "checkbox" && this.click ) {
+					this.click();
+					return false;
+				}
+			}
+		},
+		focus: {
+			// Fire native event if possible so blur/focus sequence is correct
+			trigger: function() {
+				if ( this !== document.activeElement && this.focus ) {
+					try {
+						this.focus();
+						return false;
+					} catch ( e ) {
+						// Support: IE<9
+						// If we error on focus to hidden element (#1486, #12518),
+						// let .trigger() run the handlers
+					}
+				}
+			},
+			delegateType: "focusin"
+		},
+		blur: {
+			trigger: function() {
+				if ( this === document.activeElement && this.blur ) {
+					this.blur();
+					return false;
+				}
+			},
+			delegateType: "focusout"
+		},
+
+		beforeunload: {
+			postDispatch: function( event ) {
+
+				// Even when returnValue equals to undefined Firefox will still show alert
+				if ( event.result !== undefined ) {
+					event.originalEvent.returnValue = event.result;
+				}
+			}
+		}
+	},
+
+	simulate: function( type, elem, event, bubble ) {
+		// Piggyback on a donor event to simulate a different one.
+		// Fake originalEvent to avoid donor's stopPropagation, but if the
+		// simulated event prevents default then we do the same on the donor.
+		var e = jQuery.extend(
+			new jQuery.Event(),
+			event,
+			{ type: type,
+				isSimulated: true,
+				originalEvent: {}
+			}
+		);
+		if ( bubble ) {
+			jQuery.event.trigger( e, null, elem );
+		} else {
+			jQuery.event.dispatch.call( elem, e );
+		}
+		if ( e.isDefaultPrevented() ) {
+			event.preventDefault();
+		}
+	}
+};
+
+jQuery.removeEvent = document.removeEventListener ?
+	function( elem, type, handle ) {
+		if ( elem.removeEventListener ) {
+			elem.removeEventListener( type, handle, false );
+		}
+	} :
+	function( elem, type, handle ) {
+		var name = "on" + type;
+
+		if ( elem.detachEvent ) {
+
+			// #8545, #7054, preventing memory leaks for custom events in IE6-8
+			// detachEvent needed property on element, by name of that event, to properly expose it to GC
+			if ( typeof elem[ name ] === core_strundefined ) {
+				elem[ name ] = null;
+			}
+
+			elem.detachEvent( name, handle );
+		}
+	};
+
+jQuery.Event = function( src, props ) {
+	// Allow instantiation without the 'new' keyword
+	if ( !(this instanceof jQuery.Event) ) {
+		return new jQuery.Event( src, props );
+	}
+
+	// Event object
+	if ( src && src.type ) {
+		this.originalEvent = src;
+		this.type = src.type;
+
+		// Events bubbling up the document may have been marked as prevented
+		// by a handler lower down the tree; reflect the correct value.
+		this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false ||
+			src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse;
+
+	// Event type
+	} else {
+		this.type = src;
+	}
+
+	// Put explicitly provided properties onto the event object
+	if ( props ) {
+		jQuery.extend( this, props );
+	}
+
+	// Create a timestamp if incoming event doesn't have one
+	this.timeStamp = src && src.timeStamp || jQuery.now();
+
+	// Mark it as fixed
+	this[ jQuery.expando ] = true;
+};
+
+// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
+// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
+jQuery.Event.prototype = {
+	isDefaultPrevented: returnFalse,
+	isPropagationStopped: returnFalse,
+	isImmediatePropagationStopped: returnFalse,
+
+	preventDefault: function() {
+		var e = this.originalEvent;
+
+		this.isDefaultPrevented = returnTrue;
+		if ( !e ) {
+			return;
+		}
+
+		// If preventDefault exists, run it on the original event
+		if ( e.preventDefault ) {
+			e.preventDefault();
+
+		// Support: IE
+		// Otherwise set the returnValue property of the original event to false
+		} else {
+			e.returnValue = false;
+		}
+	},
+	stopPropagation: function() {
+		var e = this.originalEvent;
+
+		this.isPropagationStopped = returnTrue;
+		if ( !e ) {
+			return;
+		}
+		// If stopPropagation exists, run it on the original event
+		if ( e.stopPropagation ) {
+			e.stopPropagation();
+		}
+
+		// Support: IE
+		// Set the cancelBubble property of the original event to true
+		e.cancelBubble = true;
+	},
+	stopImmediatePropagation: function() {
+		this.isImmediatePropagationStopped = returnTrue;
+		this.stopPropagation();
+	}
+};
+
+// Create mouseenter/leave events using mouseover/out and event-time checks
+jQuery.each({
+	mouseenter: "mouseover",
+	mouseleave: "mouseout"
+}, function( orig, fix ) {
+	jQuery.event.special[ orig ] = {
+		delegateType: fix,
+		bindType: fix,
+
+		handle: function( event ) {
+			var ret,
+				target = this,
+				related = event.relatedTarget,
+				handleObj = event.handleObj;
+
+			// For mousenter/leave call the handler if related is outside the target.
+			// NB: No relatedTarget if the mouse left/entered the browser window
+			if ( !related || (related !== target && !jQuery.contains( target, related )) ) {
+				event.type = handleObj.origType;
+				ret = handleObj.handler.apply( this, arguments );
+				event.type = fix;
+			}
+			return ret;
+		}
+	};
+});
+
+// IE submit delegation
+if ( !jQuery.support.submitBubbles ) {
+
+	jQuery.event.special.submit = {
+		setup: function() {
+			// Only need this for delegated form submit events
+			if ( jQuery.nodeName( this, "form" ) ) {
+				return false;
+			}
+
+			// Lazy-add a submit handler when a descendant form may potentially be submitted
+			jQuery.event.add( this, "click._submit keypress._submit", function( e ) {
+				// Node name check avoids a VML-related crash in IE (#9807)
+				var elem = e.target,
+					form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined;
+				if ( form && !jQuery._data( form, "submitBubbles" ) ) {
+					jQuery.event.add( form, "submit._submit", function( event ) {
+						event._submit_bubble = true;
+					});
+					jQuery._data( form, "submitBubbles", true );
+				}
+			});
+			// return undefined since we don't need an event listener
+		},
+
+		postDispatch: function( event ) {
+			// If form was submitted by the user, bubble the event up the tree
+			if ( event._submit_bubble ) {
+				delete event._submit_bubble;
+				if ( this.parentNode && !event.isTrigger ) {
+					jQuery.event.simulate( "submit", this.parentNode, event, true );
+				}
+			}
+		},
+
+		teardown: function() {
+			// Only need this for delegated form submit events
+			if ( jQuery.nodeName( this, "form" ) ) {
+				return false;
+			}
+
+			// Remove delegated handlers; cleanData eventually reaps submit handlers attached above
+			jQuery.event.remove( this, "._submit" );
+		}
+	};
+}
+
+// IE change delegation and checkbox/radio fix
+if ( !jQuery.support.changeBubbles ) {
+
+	jQuery.event.special.change = {
+
+		setup: function() {
+
+			if ( rformElems.test( this.nodeName ) ) {
+				// IE doesn't fire change on a check/radio until blur; trigger it on click
+				// after a propertychange. Eat the blur-change in special.change.handle.
+				// This still fires onchange a second time for check/radio after blur.
+				if ( this.type === "checkbox" || this.type === "radio" ) {
+					jQuery.event.add( this, "propertychange._change", function( event ) {
+						if ( event.originalEvent.propertyName === "checked" ) {
+							this._just_changed = true;
+						}
+					});
+					jQuery.event.add( this, "click._change", function( event ) {
+						if ( this._just_changed && !event.isTrigger ) {
+							this._just_changed = false;
+						}
+						// Allow triggered, simulated change events (#11500)
+						jQuery.event.simulate( "change", this, event, true );
+					});
+				}
+				return false;
+			}
+			// Delegated event; lazy-add a change handler on descendant inputs
+			jQuery.event.add( this, "beforeactivate._change", function( e ) {
+				var elem = e.target;
+
+				if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "changeBubbles" ) ) {
+					jQuery.event.add( elem, "change._change", function( event ) {
+						if ( this.parentNode && !event.isSimulated && !event.isTrigger ) {
+							jQuery.event.simulate( "change", this.parentNode, event, true );
+						}
+					});
+					jQuery._data( elem, "changeBubbles", true );
+				}
+			});
+		},
+
+		handle: function( event ) {
+			var elem = event.target;
+
+			// Swallow native change events from checkbox/radio, we already triggered them above
+			if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) {
+				return event.handleObj.handler.apply( this, arguments );
+			}
+		},
+
+		teardown: function() {
+			jQuery.event.remove( this, "._change" );
+
+			return !rformElems.test( this.nodeName );
+		}
+	};
+}
+
+// Create "bubbling" focus and blur events
+if ( !jQuery.support.focusinBubbles ) {
+	jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
+
+		// Attach a single capturing handler while someone wants focusin/focusout
+		var attaches = 0,
+			handler = function( event ) {
+				jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );
+			};
+
+		jQuery.event.special[ fix ] = {
+			setup: function() {
+				if ( attaches++ === 0 ) {
+					document.addEventListener( orig, handler, true );
+				}
+			},
+			teardown: function() {
+				if ( --attaches === 0 ) {
+					document.removeEventListener( orig, handler, true );
+				}
+			}
+		};
+	});
+}
+
+jQuery.fn.extend({
+
+	on: function( types, selector, data, fn, /*INTERNAL*/ one ) {
+		var type, origFn;
+
+		// Types can be a map of types/handlers
+		if ( typeof types === "object" ) {
+			// ( types-Object, selector, data )
+			if ( typeof selector !== "string" ) {
+				// ( types-Object, data )
+				data = data || selector;
+				selector = undefined;
+			}
+			for ( type in types ) {
+				this.on( type, selector, data, types[ type ], one );
+			}
+			return this;
+		}
+
+		if ( data == null && fn == null ) {
+			// ( types, fn )
+			fn = selector;
+			data = selector = undefined;
+		} else if ( fn == null ) {
+			if ( typeof selector === "string" ) {
+				// ( types, selector, fn )
+				fn = data;
+				data = undefined;
+			} else {
+				// ( types, data, fn )
+				fn = data;
+				data = selector;
+				selector = undefined;
+			}
+		}
+		if ( fn === false ) {
+			fn = returnFalse;
+		} else if ( !fn ) {
+			return this;
+		}
+
+		if ( one === 1 ) {
+			origFn = fn;
+			fn = function( event ) {
+				// Can use an empty set, since event contains the info
+				jQuery().off( event );
+				return origFn.apply( this, arguments );
+			};
+			// Use same guid so caller can remove using origFn
+			fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
+		}
+		return this.each( function() {
+			jQuery.event.add( this, types, fn, data, selector );
+		});
+	},
+	one: function( types, selector, data, fn ) {
+		return this.on( types, selector, data, fn, 1 );
+	},
+	off: function( types, selector, fn ) {
+		var handleObj, type;
+		if ( types && types.preventDefault && types.handleObj ) {
+			// ( event )  dispatched jQuery.Event
+			handleObj = types.handleObj;
+			jQuery( types.delegateTarget ).off(
+				handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType,
+				handleObj.selector,
+				handleObj.handler
+			);
+			return this;
+		}
+		if ( typeof types === "object" ) {
+			// ( types-object [, selector] )
+			for ( type in types ) {
+				this.off( type, selector, types[ type ] );
+			}
+			return this;
+		}
+		if ( selector === false || typeof selector === "function" ) {
+			// ( types [, fn] )
+			fn = selector;
+			selector = undefined;
+		}
+		if ( fn === false ) {
+			fn = returnFalse;
+		}
+		return this.each(function() {
+			jQuery.event.remove( this, types, fn, selector );
+		});
+	},
+
+	bind: function( types, data, fn ) {
+		return this.on( types, null, data, fn );
+	},
+	unbind: function( types, fn ) {
+		return this.off( types, null, fn );
+	},
+
+	delegate: function( selector, types, data, fn ) {
+		return this.on( types, selector, data, fn );
+	},
+	undelegate: function( selector, types, fn ) {
+		// ( namespace ) or ( selector, types [, fn] )
+		return arguments.length === 1 ? this.off( selector, "**" ) : this.off( types, selector || "**", fn );
+	},
+
+	trigger: function( type, data ) {
+		return this.each(function() {
+			jQuery.event.trigger( type, data, this );
+		});
+	},
+	triggerHandler: function( type, data ) {
+		var elem = this[0];
+		if ( elem ) {
+			return jQuery.event.trigger( type, data, elem, true );
+		}
+	}
+});
+/*!
+ * Sizzle CSS Selector Engine
+ * Copyright 2012 jQuery Foundation and other contributors
+ * Released under the MIT license
+ * http://sizzlejs.com/
+ */
+(function( window, undefined ) {
+
+var i,
+	cachedruns,
+	Expr,
+	getText,
+	isXML,
+	compile,
+	hasDuplicate,
+	outermostContext,
+
+	// Local document vars
+	setDocument,
+	document,
+	docElem,
+	documentIsXML,
+	rbuggyQSA,
+	rbuggyMatches,
+	matches,
+	contains,
+	sortOrder,
+
+	// Instance-specific data
+	expando = "sizzle" + -(new Date()),
+	preferredDoc = window.document,
+	support = {},
+	dirruns = 0,
+	done = 0,
+	classCache = createCache(),
+	tokenCache = createCache(),
+	compilerCache = createCache(),
+
+	// General-purpose constants
+	strundefined = typeof undefined,
+	MAX_NEGATIVE = 1 << 31,
+
+	// Array methods
+	arr = [],
+	pop = arr.pop,
+	push = arr.push,
+	slice = arr.slice,
+	// Use a stripped-down indexOf if we can't use a native one
+	indexOf = arr.indexOf || function( elem ) {
+		var i = 0,
+			len = this.length;
+		for ( ; i < len; i++ ) {
+			if ( this[i] === elem ) {
+				return i;
+			}
+		}
+		return -1;
+	},
+
+
+	// Regular expressions
+
+	// Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace
+	whitespace = "[\\x20\\t\\r\\n\\f]",
+	// http://www.w3.org/TR/css3-syntax/#characters
+	characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",
+
+	// Loosely modeled on CSS identifier characters
+	// An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors
+	// Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
+	identifier = characterEncoding.replace( "w", "w#" ),
+
+	// Acceptable operators http://www.w3.org/TR/selectors/#attribute-selectors
+	operators = "([*^$|!~]?=)",
+	attributes = "\\[" + whitespace + "*(" + characterEncoding + ")" + whitespace +
+		"*(?:" + operators + whitespace + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + identifier + ")|)|)" + whitespace + "*\\]",
+
+	// Prefer arguments quoted,
+	//   then not containing pseudos/brackets,
+	//   then attribute selectors/non-parenthetical expressions,
+	//   then anything else
+	// These preferences are here to reduce the number of selectors
+	//   needing tokenize in the PSEUDO preFilter
+	pseudos = ":(" + characterEncoding + ")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|" + attributes.replace( 3, 8 ) + ")*)|.*)\\)|)",
+
+	// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
+	rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
+
+	rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
+	rcombinators = new RegExp( "^" + whitespace + "*([\\x20\\t\\r\\n\\f>+~])" + whitespace + "*" ),
+	rpseudo = new RegExp( pseudos ),
+	ridentifier = new RegExp( "^" + identifier + "$" ),
+
+	matchExpr = {
+		"ID": new RegExp( "^#(" + characterEncoding + ")" ),
+		"CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ),
+		"NAME": new RegExp( "^\\[name=['\"]?(" + characterEncoding + ")['\"]?\\]" ),
+		"TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ),
+		"ATTR": new RegExp( "^" + attributes ),
+		"PSEUDO": new RegExp( "^" + pseudos ),
+		"CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
+			"*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
+			"*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
+		// For use in libraries implementing .is()
+		// We use this for POS matching in `select`
+		"needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
+			whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
+	},
+
+	rsibling = /[\x20\t\r\n\f]*[+~]/,
+
+	rnative = /^[^{]+\{\s*\[native code/,
+
+	// Easily-parseable/retrievable ID or TAG or CLASS selectors
+	rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
+
+	rinputs = /^(?:input|select|textarea|button)$/i,
+	rheader = /^h\d$/i,
+
+	rescape = /'|\\/g,
+	rattributeQuotes = /\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,
+
+	// CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
+	runescape = /\\([\da-fA-F]{1,6}[\x20\t\r\n\f]?|.)/g,
+	funescape = function( _, escaped ) {
+		var high = "0x" + escaped - 0x10000;
+		// NaN means non-codepoint
+		return high !== high ?
+			escaped :
+			// BMP codepoint
+			high < 0 ?
+				String.fromCharCode( high + 0x10000 ) :
+				// Supplemental Plane codepoint (surrogate pair)
+				String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
+	};
+
+// Use a stripped-down slice if we can't use a native one
+try {
+	slice.call( preferredDoc.documentElement.childNodes, 0 )[0].nodeType;
+} catch ( e ) {
+	slice = function( i ) {
+		var elem,
+			results = [];
+		while ( (elem = this[i++]) ) {
+			results.push( elem );
+		}
+		return results;
+	};
+}
+
+/**
+ * For feature detection
+ * @param {Function} fn The function to test for native support
+ */
+function isNative( fn ) {
+	return rnative.test( fn + "" );
+}
+
+/**
+ * Create key-value caches of limited size
+ * @returns {Function(string, Object)} Returns the Object data after storing it on itself with
+ *	property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
+ *	deleting the oldest entry
+ */
+function createCache() {
+	var cache,
+		keys = [];
+
+	return (cache = function( key, value ) {
+		// Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
+		if ( keys.push( key += " " ) > Expr.cacheLength ) {
+			// Only keep the most recent entries
+			delete cache[ keys.shift() ];
+		}
+		return (cache[ key ] = value);
+	});
+}
+
+/**
+ * Mark a function for special use by Sizzle
+ * @param {Function} fn The function to mark
+ */
+function markFunction( fn ) {
+	fn[ expando ] = true;
+	return fn;
+}
+
+/**
+ * Support testing using an element
+ * @param {Function} fn Passed the created div and expects a boolean result
+ */
+function assert( fn ) {
+	var div = document.createElement("div");
+
+	try {
+		return fn( div );
+	} catch (e) {
+		return false;
+	} finally {
+		// release memory in IE
+		div = null;
+	}
+}
+
+function Sizzle( selector, context, results, seed ) {
+	var match, elem, m, nodeType,
+		// QSA vars
+		i, groups, old, nid, newContext, newSelector;
+
+	if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
+		setDocument( context );
+	}
+
+	context = context || document;
+	results = results || [];
+
+	if ( !selector || typeof selector !== "string" ) {
+		return results;
+	}
+
+	if ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) {
+		return [];
+	}
+
+	if ( !documentIsXML && !seed ) {
+
+		// Shortcuts
+		if ( (match = rquickExpr.exec( selector )) ) {
+			// Speed-up: Sizzle("#ID")
+			if ( (m = match[1]) ) {
+				if ( nodeType === 9 ) {
+					elem = context.getElementById( m );
+					// Check parentNode to catch when Blackberry 4.6 returns
+					// nodes that are no longer in the document #6963
+					if ( elem && elem.parentNode ) {
+						// Handle the case where IE, Opera, and Webkit return items
+						// by name instead of ID
+						if ( elem.id === m ) {
+							results.push( elem );
+							return results;
+						}
+					} else {
+						return results;
+					}
+				} else {
+					// Context is not a document
+					if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) &&
+						contains( context, elem ) && elem.id === m ) {
+						results.push( elem );
+						return results;
+					}
+				}
+
+			// Speed-up: Sizzle("TAG")
+			} else if ( match[2] ) {
+				push.apply( results, slice.call(context.getElementsByTagName( selector ), 0) );
+				return results;
+
+			// Speed-up: Sizzle(".CLASS")
+			} else if ( (m = match[3]) && support.getByClassName && context.getElementsByClassName ) {
+				push.apply( results, slice.call(context.getElementsByClassName( m ), 0) );
+				return results;
+			}
+		}
+
+		// QSA path
+		if ( support.qsa && !rbuggyQSA.test(selector) ) {
+			old = true;
+			nid = expando;
+			newContext = context;
+			newSelector = nodeType === 9 && selector;
+
+			// qSA works strangely on Element-rooted queries
+			// We can work around this by specifying an extra ID on the root
+			// and working up from there (Thanks to Andrew Dupont for the technique)
+			// IE 8 doesn't work on object elements
+			if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
+				groups = tokenize( selector );
+
+				if ( (old = context.getAttribute("id")) ) {
+					nid = old.replace( rescape, "\\$&" );
+				} else {
+					context.setAttribute( "id", nid );
+				}
+				nid = "[id='" + nid + "'] ";
+
+				i = groups.length;
+				while ( i-- ) {
+					groups[i] = nid + toSelector( groups[i] );
+				}
+				newContext = rsibling.test( selector ) && context.parentNode || context;
+				newSelector = groups.join(",");
+			}
+
+			if ( newSelector ) {
+				try {
+					push.apply( results, slice.call( newContext.querySelectorAll(
+						newSelector
+					), 0 ) );
+					return results;
+				} catch(qsaError) {
+				} finally {
+					if ( !old ) {
+						context.removeAttribute("id");
+					}
+				}
+			}
+		}
+	}
+
+	// All others
+	return select( selector.replace( rtrim, "$1" ), context, results, seed );
+}
+
+/**
+ * Detect xml
+ * @param {Element|Object} elem An element or a document
+ */
+isXML = Sizzle.isXML = function( elem ) {
+	// documentElement is verified for cases where it doesn't yet exist
+	// (such as loading iframes in IE - #4833)
+	var documentElement = elem && (elem.ownerDocument || elem).documentElement;
+	return documentElement ? documentElement.nodeName !== "HTML" : false;
+};
+
+/**
+ * Sets document-related variables once based on the current document
+ * @param {Element|Object} [doc] An element or document object to use to set the document
+ * @returns {Object} Returns the current document
+ */
+setDocument = Sizzle.setDocument = function( node ) {
+	var doc = node ? node.ownerDocument || node : preferredDoc;
+
+	// If no document and documentElement is available, return
+	if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
+		return document;
+	}
+
+	// Set our document
+	document = doc;
+	docElem = doc.documentElement;
+
+	// Support tests
+	documentIsXML = isXML( doc );
+
+	// Check if getElementsByTagName("*") returns only elements
+	support.tagNameNoComments = assert(function( div ) {
+		div.appendChild( doc.createComment("") );
+		return !div.getElementsByTagName("*").length;
+	});
+
+	// Check if attributes should be retrieved by attribute nodes
+	support.attributes = assert(function( div ) {
+		div.innerHTML = "<select></select>";
+		var type = typeof div.lastChild.getAttribute("multiple");
+		// IE8 returns a string for some attributes even when not present
+		return type !== "boolean" && type !== "string";
+	});
+
+	// Check if getElementsByClassName can be trusted
+	support.getByClassName = assert(function( div ) {
+		// Opera can't find a second classname (in 9.6)
+		div.innerHTML = "<div class='hidden e'></div><div class='hidden'></div>";
+		if ( !div.getElementsByClassName || !div.getElementsByClassName("e").length ) {
+			return false;
+		}
+
+		// Safari 3.2 caches class attributes and doesn't catch changes
+		div.lastChild.className = "e";
+		return div.getElementsByClassName("e").length === 2;
+	});
+
+	// Check if getElementById returns elements by name
+	// Check if getElementsByName privileges form controls or returns elements by ID
+	support.getByName = assert(function( div ) {
+		// Inject content
+		div.id = expando + 0;
+		div.innerHTML = "<a name='" + expando + "'></a><div name='" + expando + "'></div>";
+		docElem.insertBefore( div, docElem.firstChild );
+
+		// Test
+		var pass = doc.getElementsByName &&
+			// buggy browsers will return fewer than the correct 2
+			doc.getElementsByName( expando ).length === 2 +
+			// buggy browsers will return more than the correct 0
+			doc.getElementsByName( expando + 0 ).length;
+		support.getIdNotName = !doc.getElementById( expando );
+
+		// Cleanup
+		docElem.removeChild( div );
+
+		return pass;
+	});
+
+	// IE6/7 return modified attributes
+	Expr.attrHandle = assert(function( div ) {
+		div.innerHTML = "<a href='#'></a>";
+		return div.firstChild && typeof div.firstChild.getAttribute !== strundefined &&
+			div.firstChild.getAttribute("href") === "#";
+	}) ?
+		{} :
+		{
+			"href": function( elem ) {
+				return elem.getAttribute( "href", 2 );
+			},
+			"type": function( elem ) {
+				return elem.getAttribute("type");
+			}
+		};
+
+	// ID find and filter
+	if ( support.getIdNotName ) {
+		Expr.find["ID"] = function( id, context ) {
+			if ( typeof context.getElementById !== strundefined && !documentIsXML ) {
+				var m = context.getElementById( id );
+				// Check parentNode to catch when Blackberry 4.6 returns
+				// nodes that are no longer in the document #6963
+				return m && m.parentNode ? [m] : [];
+			}
+		};
+		Expr.filter["ID"] = function( id ) {
+			var attrId = id.replace( runescape, funescape );
+			return function( elem ) {
+				return elem.getAttribute("id") === attrId;
+			};
+		};
+	} else {
+		Expr.find["ID"] = function( id, context ) {
+			if ( typeof context.getElementById !== strundefined && !documentIsXML ) {
+				var m = context.getElementById( id );
+
+				return m ?
+					m.id === id || typeof m.getAttributeNode !== strundefined && m.getAttributeNode("id").value === id ?
+						[m] :
+						undefined :
+					[];
+			}
+		};
+		Expr.filter["ID"] =  function( id ) {
+			var attrId = id.replace( runescape, funescape );
+			return function( elem ) {
+				var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id");
+				return node && node.value === attrId;
+			};
+		};
+	}
+
+	// Tag
+	Expr.find["TAG"] = support.tagNameNoComments ?
+		function( tag, context ) {
+			if ( typeof context.getElementsByTagName !== strundefined ) {
+				return context.getElementsByTagName( tag );
+			}
+		} :
+		function( tag, context ) {
+			var elem,
+				tmp = [],
+				i = 0,
+				results = context.getElementsByTagName( tag );
+
+			// Filter out possible comments
+			if ( tag === "*" ) {
+				while ( (elem = results[i++]) ) {
+					if ( elem.nodeType === 1 ) {
+						tmp.push( elem );
+					}
+				}
+
+				return tmp;
+			}
+			return results;
+		};
+
+	// Name
+	Expr.find["NAME"] = support.getByName && function( tag, context ) {
+		if ( typeof context.getElementsByName !== strundefined ) {
+			return context.getElementsByName( name );
+		}
+	};
+
+	// Class
+	Expr.find["CLASS"] = support.getByClassName && function( className, context ) {
+		if ( typeof context.getElementsByClassName !== strundefined && !documentIsXML ) {
+			return context.getElementsByClassName( className );
+		}
+	};
+
+	// QSA and matchesSelector support
+
+	// matchesSelector(:active) reports false when true (IE9/Opera 11.5)
+	rbuggyMatches = [];
+
+	// qSa(:focus) reports false when true (Chrome 21),
+	// no need to also add to buggyMatches since matches checks buggyQSA
+	// A support test would require too much code (would include document ready)
+	rbuggyQSA = [ ":focus" ];
+
+	if ( (support.qsa = isNative(doc.querySelectorAll)) ) {
+		// Build QSA regex
+		// Regex strategy adopted from Diego Perini
+		assert(function( div ) {
+			// Select is set to empty string on purpose
+			// This is to test IE's treatment of not explictly
+			// setting a boolean content attribute,
+			// since its presence should be enough
+			// http://bugs.jquery.com/ticket/12359
+			div.innerHTML = "<select><option selected=''></option></select>";
+
+			// IE8 - Some boolean attributes are not treated correctly
+			if ( !div.querySelectorAll("[selected]").length ) {
+				rbuggyQSA.push( "\\[" + whitespace + "*(?:checked|disabled|ismap|multiple|readonly|selected|value)" );
+			}
+
+			// Webkit/Opera - :checked should return selected option elements
+			// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
+			// IE8 throws error here and will not see later tests
+			if ( !div.querySelectorAll(":checked").length ) {
+				rbuggyQSA.push(":checked");
+			}
+		});
+
+		assert(function( div ) {
+
+			// Opera 10-12/IE8 - ^= $= *= and empty values
+			// Should not select anything
+			div.innerHTML = "<input type='hidden' i=''/>";
+			if ( div.querySelectorAll("[i^='']").length ) {
+				rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:\"\"|'')" );
+			}
+
+			// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
+			// IE8 throws error here and will not see later tests
+			if ( !div.querySelectorAll(":enabled").length ) {
+				rbuggyQSA.push( ":enabled", ":disabled" );
+			}
+
+			// Opera 10-11 does not throw on post-comma invalid pseudos
+			div.querySelectorAll("*,:x");
+			rbuggyQSA.push(",.*:");
+		});
+	}
+
+	if ( (support.matchesSelector = isNative( (matches = docElem.matchesSelector ||
+		docElem.mozMatchesSelector ||
+		docElem.webkitMatchesSelector ||
+		docElem.oMatchesSelector ||
+		docElem.msMatchesSelector) )) ) {
+
+		assert(function( div ) {
+			// Check to see if it's possible to do matchesSelector
+			// on a disconnected node (IE 9)
+			support.disconnectedMatch = matches.call( div, "div" );
+
+			// This should fail with an exception
+			// Gecko does not error, returns false instead
+			matches.call( div, "[s!='']:x" );
+			rbuggyMatches.push( "!=", pseudos );
+		});
+	}
+
+	rbuggyQSA = new RegExp( rbuggyQSA.join("|") );
+	rbuggyMatches = new RegExp( rbuggyMatches.join("|") );
+
+	// Element contains another
+	// Purposefully does not implement inclusive descendent
+	// As in, an element does not contain itself
+	contains = isNative(docElem.contains) || docElem.compareDocumentPosition ?
+		function( a, b ) {
+			var adown = a.nodeType === 9 ? a.documentElement : a,
+				bup = b && b.parentNode;
+			return a === bup || !!( bup && bup.nodeType === 1 && (
+				adown.contains ?
+					adown.contains( bup ) :
+					a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
+			));
+		} :
+		function( a, b ) {
+			if ( b ) {
+				while ( (b = b.parentNode) ) {
+					if ( b === a ) {
+						return true;
+					}
+				}
+			}
+			return false;
+		};
+
+	// Document order sorting
+	sortOrder = docElem.compareDocumentPosition ?
+	function( a, b ) {
+		var compare;
+
+		if ( a === b ) {
+			hasDuplicate = true;
+			return 0;
+		}
+
+		if ( (compare = b.compareDocumentPosition && a.compareDocumentPosition && a.compareDocumentPosition( b )) ) {
+			if ( compare & 1 || a.parentNode && a.parentNode.nodeType === 11 ) {
+				if ( a === doc || contains( preferredDoc, a ) ) {
+					return -1;
+				}
+				if ( b === doc || contains( preferredDoc, b ) ) {
+					return 1;
+				}
+				return 0;
+			}
+			return compare & 4 ? -1 : 1;
+		}
+
+		return a.compareDocumentPosition ? -1 : 1;
+	} :
+	function( a, b ) {
+		var cur,
+			i = 0,
+			aup = a.parentNode,
+			bup = b.parentNode,
+			ap = [ a ],
+			bp = [ b ];
+
+		// Exit early if the nodes are identical
+		if ( a === b ) {
+			hasDuplicate = true;
+			return 0;
+
+		// Parentless nodes are either documents or disconnected
+		} else if ( !aup || !bup ) {
+			return a === doc ? -1 :
+				b === doc ? 1 :
+				aup ? -1 :
+				bup ? 1 :
+				0;
+
+		// If the nodes are siblings, we can do a quick check
+		} else if ( aup === bup ) {
+			return siblingCheck( a, b );
+		}
+
+		// Otherwise we need full lists of their ancestors for comparison
+		cur = a;
+		while ( (cur = cur.parentNode) ) {
+			ap.unshift( cur );
+		}
+		cur = b;
+		while ( (cur = cur.parentNode) ) {
+			bp.unshift( cur );
+		}
+
+		// Walk down the tree looking for a discrepancy
+		while ( ap[i] === bp[i] ) {
+			i++;
+		}
+
+		return i ?
+			// Do a sibling check if the nodes have a common ancestor
+			siblingCheck( ap[i], bp[i] ) :
+
+			// Otherwise nodes in our document sort first
+			ap[i] === preferredDoc ? -1 :
+			bp[i] === preferredDoc ? 1 :
+			0;
+	};
+
+	// Always assume the presence of duplicates if sort doesn't
+	// pass them to our comparison function (as in Google Chrome).
+	hasDuplicate = false;
+	[0, 0].sort( sortOrder );
+	support.detectDuplicates = hasDuplicate;
+
+	return document;
+};
+
+Sizzle.matches = function( expr, elements ) {
+	return Sizzle( expr, null, null, elements );
+};
+
+Sizzle.matchesSelector = function( elem, expr ) {
+	// Set document vars if needed
+	if ( ( elem.ownerDocument || elem ) !== document ) {
+		setDocument( elem );
+	}
+
+	// Make sure that attribute selectors are quoted
+	expr = expr.replace( rattributeQuotes, "='$1']" );
+
+	// rbuggyQSA always contains :focus, so no need for an existence check
+	if ( support.matchesSelector && !documentIsXML && (!rbuggyMatches || !rbuggyMatches.test(expr)) && !rbuggyQSA.test(expr) ) {
+		try {
+			var ret = matches.call( elem, expr );
+
+			// IE 9's matchesSelector returns false on disconnected nodes
+			if ( ret || support.disconnectedMatch ||
+					// As well, disconnected nodes are said to be in a document
+					// fragment in IE 9
+					elem.document && elem.document.nodeType !== 11 ) {
+				return ret;
+			}
+		} catch(e) {}
+	}
+
+	return Sizzle( expr, document, null, [elem] ).length > 0;
+};
+
+Sizzle.contains = function( context, elem ) {
+	// Set document vars if needed
+	if ( ( context.ownerDocument || context ) !== document ) {
+		setDocument( context );
+	}
+	return contains( context, elem );
+};
+
+Sizzle.attr = function( elem, name ) {
+	var val;
+
+	// Set document vars if needed
+	if ( ( elem.ownerDocument || elem ) !== document ) {
+		setDocument( elem );
+	}
+
+	if ( !documentIsXML ) {
+		name = name.toLowerCase();
+	}
+	if ( (val = Expr.attrHandle[ name ]) ) {
+		return val( elem );
+	}
+	if ( documentIsXML || support.attributes ) {
+		return elem.getAttribute( name );
+	}
+	return ( (val = elem.getAttributeNode( name )) || elem.getAttribute( name ) ) && elem[ name ] === true ?
+		name :
+		val && val.specified ? val.value : null;
+};
+
+Sizzle.error = function( msg ) {
+	throw new Error( "Syntax error, unrecognized expression: " + msg );
+};
+
+// Document sorting and removing duplicates
+Sizzle.uniqueSort = function( results ) {
+	var elem,
+		duplicates = [],
+		i = 1,
+		j = 0;
+
+	// Unless we *know* we can detect duplicates, assume their presence
+	hasDuplicate = !support.detectDuplicates;
+	results.sort( sortOrder );
+
+	if ( hasDuplicate ) {
+		for ( ; (elem = results[i]); i++ ) {
+			if ( elem === results[ i - 1 ] ) {
+				j = duplicates.push( i );
+			}
+		}
+		while ( j-- ) {
+			results.splice( duplicates[ j ], 1 );
+		}
+	}
+
+	return results;
+};
+
+function siblingCheck( a, b ) {
+	var cur = b && a,
+		diff = cur && ( ~b.sourceIndex || MAX_NEGATIVE ) - ( ~a.sourceIndex || MAX_NEGATIVE );
+
+	// Use IE sourceIndex if available on both nodes
+	if ( diff ) {
+		return diff;
+	}
+
+	// Check if b follows a
+	if ( cur ) {
+		while ( (cur = cur.nextSibling) ) {
+			if ( cur === b ) {
+				return -1;
+			}
+		}
+	}
+
+	return a ? 1 : -1;
+}
+
+// Returns a function to use in pseudos for input types
+function createInputPseudo( type ) {
+	return function( elem ) {
+		var name = elem.nodeName.toLowerCase();
+		return name === "input" && elem.type === type;
+	};
+}
+
+// Returns a function to use in pseudos for buttons
+function createButtonPseudo( type ) {
+	return function( elem ) {
+		var name = elem.nodeName.toLowerCase();
+		return (name === "input" || name === "button") && elem.type === type;
+	};
+}
+
+// Returns a function to use in pseudos for positionals
+function createPositionalPseudo( fn ) {
+	return markFunction(function( argument ) {
+		argument = +argument;
+		return markFunction(function( seed, matches ) {
+			var j,
+				matchIndexes = fn( [], seed.length, argument ),
+				i = matchIndexes.length;
+
+			// Match elements found at the specified indexes
+			while ( i-- ) {
+				if ( seed[ (j = matchIndexes[i]) ] ) {
+					seed[j] = !(matches[j] = seed[j]);
+				}
+			}
+		});
+	});
+}
+
+/**
+ * Utility function for retrieving the text value of an array of DOM nodes
+ * @param {Array|Element} elem
+ */
+getText = Sizzle.getText = function( elem ) {
+	var node,
+		ret = "",
+		i = 0,
+		nodeType = elem.nodeType;
+
+	if ( !nodeType ) {
+		// If no nodeType, this is expected to be an array
+		for ( ; (node = elem[i]); i++ ) {
+			// Do not traverse comment nodes
+			ret += getText( node );
+		}
+	} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
+		// Use textContent for elements
+		// innerText usage removed for consistency of new lines (see #11153)
+		if ( typeof elem.textContent === "string" ) {
+			return elem.textContent;
+		} else {
+			// Traverse its children
+			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
+				ret += getText( elem );
+			}
+		}
+	} else if ( nodeType === 3 || nodeType === 4 ) {
+		return elem.nodeValue;
+	}
+	// Do not include comment or processing instruction nodes
+
+	return ret;
+};
+
+Expr = Sizzle.selectors = {
+
+	// Can be adjusted by the user
+	cacheLength: 50,
+
+	createPseudo: markFunction,
+
+	match: matchExpr,
+
+	find: {},
+
+	relative: {
+		">": { dir: "parentNode", first: true },
+		" ": { dir: "parentNode" },
+		"+": { dir: "previousSibling", first: true },
+		"~": { dir: "previousSibling" }
+	},
+
+	preFilter: {
+		"ATTR": function( match ) {
+			match[1] = match[1].replace( runescape, funescape );
+
+			// Move the given value to match[3] whether quoted or unquoted
+			match[3] = ( match[4] || match[5] || "" ).replace( runescape, funescape );
+
+			if ( match[2] === "~=" ) {
+				match[3] = " " + match[3] + " ";
+			}
+
+			return match.slice( 0, 4 );
+		},
+
+		"CHILD": function( match ) {
+			/* matches from matchExpr["CHILD"]
+				1 type (only|nth|...)
+				2 what (child|of-type)
+				3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
+				4 xn-component of xn+y argument ([+-]?\d*n|)
+				5 sign of xn-component
+				6 x of xn-component
+				7 sign of y-component
+				8 y of y-component
+			*/
+			match[1] = match[1].toLowerCase();
+
+			if ( match[1].slice( 0, 3 ) === "nth" ) {
+				// nth-* requires argument
+				if ( !match[3] ) {
+					Sizzle.error( match[0] );
+				}
+
+				// numeric x and y parameters for Expr.filter.CHILD
+				// remember that false/true cast respectively to 0/1
+				match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );
+				match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );
+
+			// other types prohibit arguments
+			} else if ( match[3] ) {
+				Sizzle.error( match[0] );
+			}
+
+			return match;
+		},
+
+		"PSEUDO": function( match ) {
+			var excess,
+				unquoted = !match[5] && match[2];
+
+			if ( matchExpr["CHILD"].test( match[0] ) ) {
+				return null;
+			}
+
+			// Accept quoted arguments as-is
+			if ( match[4] ) {
+				match[2] = match[4];
+
+			// Strip excess characters from unquoted arguments
+			} else if ( unquoted && rpseudo.test( unquoted ) &&
+				// Get excess from tokenize (recursively)
+				(excess = tokenize( unquoted, true )) &&
+				// advance to the next closing parenthesis
+				(excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {
+
+				// excess is a negative index
+				match[0] = match[0].slice( 0, excess );
+				match[2] = unquoted.slice( 0, excess );
+			}
+
+			// Return only captures needed by the pseudo filter method (type and argument)
+			return match.slice( 0, 3 );
+		}
+	},
+
+	filter: {
+
+		"TAG": function( nodeName ) {
+			if ( nodeName === "*" ) {
+				return function() { return true; };
+			}
+
+			nodeName = nodeName.replace( runescape, funescape ).toLowerCase();
+			return function( elem ) {
+				return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
+			};
+		},
+
+		"CLASS": function( className ) {
+			var pattern = classCache[ className + " " ];
+
+			return pattern ||
+				(pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
+				classCache( className, function( elem ) {
+					return pattern.test( elem.className || (typeof elem.getAttribute !== strundefined && elem.getAttribute("class")) || "" );
+				});
+		},
+
+		"ATTR": function( name, operator, check ) {
+			return function( elem ) {
+				var result = Sizzle.attr( elem, name );
+
+				if ( result == null ) {
+					return operator === "!=";
+				}
+				if ( !operator ) {
+					return true;
+				}
+
+				result += "";
+
+				return operator === "=" ? result === check :
+					operator === "!=" ? result !== check :
+					operator === "^=" ? check && result.indexOf( check ) === 0 :
+					operator === "*=" ? check && result.indexOf( check ) > -1 :
+					operator === "$=" ? check && result.slice( -check.length ) === check :
+					operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 :
+					operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
+					false;
+			};
+		},
+
+		"CHILD": function( type, what, argument, first, last ) {
+			var simple = type.slice( 0, 3 ) !== "nth",
+				forward = type.slice( -4 ) !== "last",
+				ofType = what === "of-type";
+
+			return first === 1 && last === 0 ?
+
+				// Shortcut for :nth-*(n)
+				function( elem ) {
+					return !!elem.parentNode;
+				} :
+
+				function( elem, context, xml ) {
+					var cache, outerCache, node, diff, nodeIndex, start,
+						dir = simple !== forward ? "nextSibling" : "previousSibling",
+						parent = elem.parentNode,
+						name = ofType && elem.nodeName.toLowerCase(),
+						useCache = !xml && !ofType;
+
+					if ( parent ) {
+
+						// :(first|last|only)-(child|of-type)
+						if ( simple ) {
+							while ( dir ) {
+								node = elem;
+								while ( (node = node[ dir ]) ) {
+									if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) {
+										return false;
+									}
+								}
+								// Reverse direction for :only-* (if we haven't yet done so)
+								start = dir = type === "only" && !start && "nextSibling";
+							}
+							return true;
+						}
+
+						start = [ forward ? parent.firstChild : parent.lastChild ];
+
+						// non-xml :nth-child(...) stores cache data on `parent`
+						if ( forward && useCache ) {
+							// Seek `elem` from a previously-cached index
+							outerCache = parent[ expando ] || (parent[ expando ] = {});
+							cache = outerCache[ type ] || [];
+							nodeIndex = cache[0] === dirruns && cache[1];
+							diff = cache[0] === dirruns && cache[2];
+							node = nodeIndex && parent.childNodes[ nodeIndex ];
+
+							while ( (node = ++nodeIndex && node && node[ dir ] ||
+
+								// Fallback to seeking `elem` from the start
+								(diff = nodeIndex = 0) || start.pop()) ) {
+
+								// When found, cache indexes on `parent` and break
+								if ( node.nodeType === 1 && ++diff && node === elem ) {
+									outerCache[ type ] = [ dirruns, nodeIndex, diff ];
+									break;
+								}
+							}
+
+						// Use previously-cached element index if available
+						} else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) {
+							diff = cache[1];
+
+						// xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...)
+						} else {
+							// Use the same loop as above to seek `elem` from the start
+							while ( (node = ++nodeIndex && node && node[ dir ] ||
+								(diff = nodeIndex = 0) || start.pop()) ) {
+
+								if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) {
+									// Cache the index of each encountered element
+									if ( useCache ) {
+										(node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ];
+									}
+
+									if ( node === elem ) {
+										break;
+									}
+								}
+							}
+						}
+
+						// Incorporate the offset, then check against cycle size
+						diff -= last;
+						return diff === first || ( diff % first === 0 && diff / first >= 0 );
+					}
+				};
+		},
+
+		"PSEUDO": function( pseudo, argument ) {
+			// pseudo-class names are case-insensitive
+			// http://www.w3.org/TR/selectors/#pseudo-classes
+			// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
+			// Remember that setFilters inherits from pseudos
+			var args,
+				fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
+					Sizzle.error( "unsupported pseudo: " + pseudo );
+
+			// The user may use createPseudo to indicate that
+			// arguments are needed to create the filter function
+			// just as Sizzle does
+			if ( fn[ expando ] ) {
+				return fn( argument );
+			}
+
+			// But maintain support for old signatures
+			if ( fn.length > 1 ) {
+				args = [ pseudo, pseudo, "", argument ];
+				return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
+					markFunction(function( seed, matches ) {
+						var idx,
+							matched = fn( seed, argument ),
+							i = matched.length;
+						while ( i-- ) {
+							idx = indexOf.call( seed, matched[i] );
+							seed[ idx ] = !( matches[ idx ] = matched[i] );
+						}
+					}) :
+					function( elem ) {
+						return fn( elem, 0, args );
+					};
+			}
+
+			return fn;
+		}
+	},
+
+	pseudos: {
+		// Potentially complex pseudos
+		"not": markFunction(function( selector ) {
+			// Trim the selector passed to compile
+			// to avoid treating leading and trailing
+			// spaces as combinators
+			var input = [],
+				results = [],
+				matcher = compile( selector.replace( rtrim, "$1" ) );
+
+			return matcher[ expando ] ?
+				markFunction(function( seed, matches, context, xml ) {
+					var elem,
+						unmatched = matcher( seed, null, xml, [] ),
+						i = seed.length;
+
+					// Match elements unmatched by `matcher`
+					while ( i-- ) {
+						if ( (elem = unmatched[i]) ) {
+							seed[i] = !(matches[i] = elem);
+						}
+					}
+				}) :
+				function( elem, context, xml ) {
+					input[0] = elem;
+					matcher( input, null, xml, results );
+					return !results.pop();
+				};
+		}),
+
+		"has": markFunction(function( selector ) {
+			return function( elem ) {
+				return Sizzle( selector, elem ).length > 0;
+			};
+		}),
+
+		"contains": markFunction(function( text ) {
+			return function( elem ) {
+				return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;
+			};
+		}),
+
+		// "Whether an element is represented by a :lang() selector
+		// is based solely on the element's language value
+		// being equal to the identifier C,
+		// or beginning with the identifier C immediately followed by "-".
+		// The matching of C against the element's language value is performed case-insensitively.
+		// The identifier C does not have to be a valid language name."
+		// http://www.w3.org/TR/selectors/#lang-pseudo
+		"lang": markFunction( function( lang ) {
+			// lang value must be a valid identifider
+			if ( !ridentifier.test(lang || "") ) {
+				Sizzle.error( "unsupported lang: " + lang );
+			}
+			lang = lang.replace( runescape, funescape ).toLowerCase();
+			return function( elem ) {
+				var elemLang;
+				do {
+					if ( (elemLang = documentIsXML ?
+						elem.getAttribute("xml:lang") || elem.getAttribute("lang") :
+						elem.lang) ) {
+
+						elemLang = elemLang.toLowerCase();
+						return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
+					}
+				} while ( (elem = elem.parentNode) && elem.nodeType === 1 );
+				return false;
+			};
+		}),
+
+		// Miscellaneous
+		"target": function( elem ) {
+			var hash = window.location && window.location.hash;
+			return hash && hash.slice( 1 ) === elem.id;
+		},
+
+		"root": function( elem ) {
+			return elem === docElem;
+		},
+
+		"focus": function( elem ) {
+			return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
+		},
+
+		// Boolean properties
+		"enabled": function( elem ) {
+			return elem.disabled === false;
+		},
+
+		"disabled": function( elem ) {
+			return elem.disabled === true;
+		},
+
+		"checked": function( elem ) {
+			// In CSS3, :checked should return both checked and selected elements
+			// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
+			var nodeName = elem.nodeName.toLowerCase();
+			return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
+		},
+
+		"selected": function( elem ) {
+			// Accessing this property makes selected-by-default
+			// options in Safari work properly
+			if ( elem.parentNode ) {
+				elem.parentNode.selectedIndex;
+			}
+
+			return elem.selected === true;
+		},
+
+		// Contents
+		"empty": function( elem ) {
+			// http://www.w3.org/TR/selectors/#empty-pseudo
+			// :empty is only affected by element nodes and content nodes(including text(3), cdata(4)),
+			//   not comment, processing instructions, or others
+			// Thanks to Diego Perini for the nodeName shortcut
+			//   Greater than "@" means alpha characters (specifically not starting with "#" or "?")
+			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
+				if ( elem.nodeName > "@" || elem.nodeType === 3 || elem.nodeType === 4 ) {
+					return false;
+				}
+			}
+			return true;
+		},
+
+		"parent": function( elem ) {
+			return !Expr.pseudos["empty"]( elem );
+		},
+
+		// Element/input types
+		"header": function( elem ) {
+			return rheader.test( elem.nodeName );
+		},
+
+		"input": function( elem ) {
+			return rinputs.test( elem.nodeName );
+		},
+
+		"button": function( elem ) {
+			var name = elem.nodeName.toLowerCase();
+			return name === "input" && elem.type === "button" || name === "button";
+		},
+
+		"text": function( elem ) {
+			var attr;
+			// IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc)
+			// use getAttribute instead to test this case
+			return elem.nodeName.toLowerCase() === "input" &&
+				elem.type === "text" &&
+				( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === elem.type );
+		},
+
+		// Position-in-collection
+		"first": createPositionalPseudo(function() {
+			return [ 0 ];
+		}),
+
+		"last": createPositionalPseudo(function( matchIndexes, length ) {
+			return [ length - 1 ];
+		}),
+
+		"eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
+			return [ argument < 0 ? argument + length : argument ];
+		}),
+
+		"even": createPositionalPseudo(function( matchIndexes, length ) {
+			var i = 0;
+			for ( ; i < length; i += 2 ) {
+				matchIndexes.push( i );
+			}
+			return matchIndexes;
+		}),
+
+		"odd": createPositionalPseudo(function( matchIndexes, length ) {
+			var i = 1;
+			for ( ; i < length; i += 2 ) {
+				matchIndexes.push( i );
+			}
+			return matchIndexes;
+		}),
+
+		"lt": createPositionalPseudo(function( matchIndexes, length, argument ) {
+			var i = argument < 0 ? argument + length : argument;
+			for ( ; --i >= 0; ) {
+				matchIndexes.push( i );
+			}
+			return matchIndexes;
+		}),
+
+		"gt": createPositionalPseudo(function( matchIndexes, length, argument ) {
+			var i = argument < 0 ? argument + length : argument;
+			for ( ; ++i < length; ) {
+				matchIndexes.push( i );
+			}
+			return matchIndexes;
+		})
+	}
+};
+
+// Add button/input type pseudos
+for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
+	Expr.pseudos[ i ] = createInputPseudo( i );
+}
+for ( i in { submit: true, reset: true } ) {
+	Expr.pseudos[ i ] = createButtonPseudo( i );
+}
+
+function tokenize( selector, parseOnly ) {
+	var matched, match, tokens, type,
+		soFar, groups, preFilters,
+		cached = tokenCache[ selector + " " ];
+
+	if ( cached ) {
+		return parseOnly ? 0 : cached.slice( 0 );
+	}
+
+	soFar = selector;
+	groups = [];
+	preFilters = Expr.preFilter;
+
+	while ( soFar ) {
+
+		// Comma and first run
+		if ( !matched || (match = rcomma.exec( soFar )) ) {
+			if ( match ) {
+				// Don't consume trailing commas as valid
+				soFar = soFar.slice( match[0].length ) || soFar;
+			}
+			groups.push( tokens = [] );
+		}
+
+		matched = false;
+
+		// Combinators
+		if ( (match = rcombinators.exec( soFar )) ) {
+			matched = match.shift();
+			tokens.push( {
+				value: matched,
+				// Cast descendant combinators to space
+				type: match[0].replace( rtrim, " " )
+			} );
+			soFar = soFar.slice( matched.length );
+		}
+
+		// Filters
+		for ( type in Expr.filter ) {
+			if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
+				(match = preFilters[ type ]( match ))) ) {
+				matched = match.shift();
+				tokens.push( {
+					value: matched,
+					type: type,
+					matches: match
+				} );
+				soFar = soFar.slice( matched.length );
+			}
+		}
+
+		if ( !matched ) {
+			break;
+		}
+	}
+
+	// Return the length of the invalid excess
+	// if we're just parsing
+	// Otherwise, throw an error or return tokens
+	return parseOnly ?
+		soFar.length :
+		soFar ?
+			Sizzle.error( selector ) :
+			// Cache the tokens
+			tokenCache( selector, groups ).slice( 0 );
+}
+
+function toSelector( tokens ) {
+	var i = 0,
+		len = tokens.length,
+		selector = "";
+	for ( ; i < len; i++ ) {
+		selector += tokens[i].value;
+	}
+	return selector;
+}
+
+function addCombinator( matcher, combinator, base ) {
+	var dir = combinator.dir,
+		checkNonElements = base && dir === "parentNode",
+		doneName = done++;
+
+	return combinator.first ?
+		// Check against closest ancestor/preceding element
+		function( elem, context, xml ) {
+			while ( (elem = elem[ dir ]) ) {
+				if ( elem.nodeType === 1 || checkNonElements ) {
+					return matcher( elem, context, xml );
+				}
+			}
+		} :
+
+		// Check against all ancestor/preceding elements
+		function( elem, context, xml ) {
+			var data, cache, outerCache,
+				dirkey = dirruns + " " + doneName;
+
+			// We can't set arbitrary data on XML nodes, so they don't benefit from dir caching
+			if ( xml ) {
+				while ( (elem = elem[ dir ]) ) {
+					if ( elem.nodeType === 1 || checkNonElements ) {
+						if ( matcher( elem, context, xml ) ) {
+							return true;
+						}
+					}
+				}
+			} else {
+				while ( (elem = elem[ dir ]) ) {
+					if ( elem.nodeType === 1 || checkNonElements ) {
+						outerCache = elem[ expando ] || (elem[ expando ] = {});
+						if ( (cache = outerCache[ dir ]) && cache[0] === dirkey ) {
+							if ( (data = cache[1]) === true || data === cachedruns ) {
+								return data === true;
+							}
+						} else {
+							cache = outerCache[ dir ] = [ dirkey ];
+							cache[1] = matcher( elem, context, xml ) || cachedruns;
+							if ( cache[1] === true ) {
+								return true;
+							}
+						}
+					}
+				}
+			}
+		};
+}
+
+function elementMatcher( matchers ) {
+	return matchers.length > 1 ?
+		function( elem, context, xml ) {
+			var i = matchers.length;
+			while ( i-- ) {
+				if ( !matchers[i]( elem, context, xml ) ) {
+					return false;
+				}
+			}
+			return true;
+		} :
+		matchers[0];
+}
+
+function condense( unmatched, map, filter, context, xml ) {
+	var elem,
+		newUnmatched = [],
+		i = 0,
+		len = unmatched.length,
+		mapped = map != null;
+
+	for ( ; i < len; i++ ) {
+		if ( (elem = unmatched[i]) ) {
+			if ( !filter || filter( elem, context, xml ) ) {
+				newUnmatched.push( elem );
+				if ( mapped ) {
+					map.push( i );
+				}
+			}
+		}
+	}
+
+	return newUnmatched;
+}
+
+function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
+	if ( postFilter && !postFilter[ expando ] ) {
+		postFilter = setMatcher( postFilter );
+	}
+	if ( postFinder && !postFinder[ expando ] ) {
+		postFinder = setMatcher( postFinder, postSelector );
+	}
+	return markFunction(function( seed, results, context, xml ) {
+		var temp, i, elem,
+			preMap = [],
+			postMap = [],
+			preexisting = results.length,
+
+			// Get initial elements from seed or context
+			elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),
+
+			// Prefilter to get matcher input, preserving a map for seed-results synchronization
+			matcherIn = preFilter && ( seed || !selector ) ?
+				condense( elems, preMap, preFilter, context, xml ) :
+				elems,
+
+			matcherOut = matcher ?
+				// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
+				postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
+
+					// ...intermediate processing is necessary
+					[] :
+
+					// ...otherwise use results directly
+					results :
+				matcherIn;
+
+		// Find primary matches
+		if ( matcher ) {
+			matcher( matcherIn, matcherOut, context, xml );
+		}
+
+		// Apply postFilter
+		if ( postFilter ) {
+			temp = condense( matcherOut, postMap );
+			postFilter( temp, [], context, xml );
+
+			// Un-match failing elements by moving them back to matcherIn
+			i = temp.length;
+			while ( i-- ) {
+				if ( (elem = temp[i]) ) {
+					matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);
+				}
+			}
+		}
+
+		if ( seed ) {
+			if ( postFinder || preFilter ) {
+				if ( postFinder ) {
+					// Get the final matcherOut by condensing this intermediate into postFinder contexts
+					temp = [];
+					i = matcherOut.length;
+					while ( i-- ) {
+						if ( (elem = matcherOut[i]) ) {
+							// Restore matcherIn since elem is not yet a final match
+							temp.push( (matcherIn[i] = elem) );
+						}
+					}
+					postFinder( null, (matcherOut = []), temp, xml );
+				}
+
+				// Move matched elements from seed to results to keep them synchronized
+				i = matcherOut.length;
+				while ( i-- ) {
+					if ( (elem = matcherOut[i]) &&
+						(temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) {
+
+						seed[temp] = !(results[temp] = elem);
+					}
+				}
+			}
+
+		// Add elements to results, through postFinder if defined
+		} else {
+			matcherOut = condense(
+				matcherOut === results ?
+					matcherOut.splice( preexisting, matcherOut.length ) :
+					matcherOut
+			);
+			if ( postFinder ) {
+				postFinder( null, results, matcherOut, xml );
+			} else {
+				push.apply( results, matcherOut );
+			}
+		}
+	});
+}
+
+function matcherFromTokens( tokens ) {
+	var checkContext, matcher, j,
+		len = tokens.length,
+		leadingRelative = Expr.relative[ tokens[0].type ],
+		implicitRelative = leadingRelative || Expr.relative[" "],
+		i = leadingRelative ? 1 : 0,
+
+		// The foundational matcher ensures that elements are reachable from top-level context(s)
+		matchContext = addCombinator( function( elem ) {
+			return elem === checkContext;
+		}, implicitRelative, true ),
+		matchAnyContext = addCombinator( function( elem ) {
+			return indexOf.call( checkContext, elem ) > -1;
+		}, implicitRelative, true ),
+		matchers = [ function( elem, context, xml ) {
+			return ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
+				(checkContext = context).nodeType ?
+					matchContext( elem, context, xml ) :
+					matchAnyContext( elem, context, xml ) );
+		} ];
+
+	for ( ; i < len; i++ ) {
+		if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
+			matchers = [ addCombinator(elementMatcher( matchers ), matcher) ];
+		} else {
+			matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );
+
+			// Return special upon seeing a positional matcher
+			if ( matcher[ expando ] ) {
+				// Find the next relative operator (if any) for proper handling
+				j = ++i;
+				for ( ; j < len; j++ ) {
+					if ( Expr.relative[ tokens[j].type ] ) {
+						break;
+					}
+				}
+				return setMatcher(
+					i > 1 && elementMatcher( matchers ),
+					i > 1 && toSelector( tokens.slice( 0, i - 1 ) ).replace( rtrim, "$1" ),
+					matcher,
+					i < j && matcherFromTokens( tokens.slice( i, j ) ),
+					j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
+					j < len && toSelector( tokens )
+				);
+			}
+			matchers.push( matcher );
+		}
+	}
+
+	return elementMatcher( matchers );
+}
+
+function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
+	// A counter to specify which element is currently being matched
+	var matcherCachedRuns = 0,
+		bySet = setMatchers.length > 0,
+		byElement = elementMatchers.length > 0,
+		superMatcher = function( seed, context, xml, results, expandContext ) {
+			var elem, j, matcher,
+				setMatched = [],
+				matchedCount = 0,
+				i = "0",
+				unmatched = seed && [],
+				outermost = expandContext != null,
+				contextBackup = outermostContext,
+				// We must always have either seed elements or context
+				elems = seed || byElement && Expr.find["TAG"]( "*", expandContext && context.parentNode || context ),
+				// Use integer dirruns iff this is the outermost matcher
+				dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1);
+
+			if ( outermost ) {
+				outermostContext = context !== document && context;
+				cachedruns = matcherCachedRuns;
+			}
+
+			// Add elements passing elementMatchers directly to results
+			// Keep `i` a string if there are no elements so `matchedCount` will be "00" below
+			for ( ; (elem = elems[i]) != null; i++ ) {
+				if ( byElement && elem ) {
+					j = 0;
+					while ( (matcher = elementMatchers[j++]) ) {
+						if ( matcher( elem, context, xml ) ) {
+							results.push( elem );
+							break;
+						}
+					}
+					if ( outermost ) {
+						dirruns = dirrunsUnique;
+						cachedruns = ++matcherCachedRuns;
+					}
+				}
+
+				// Track unmatched elements for set filters
+				if ( bySet ) {
+					// They will have gone through all possible matchers
+					if ( (elem = !matcher && elem) ) {
+						matchedCount--;
+					}
+
+					// Lengthen the array for every element, matched or not
+					if ( seed ) {
+						unmatched.push( elem );
+					}
+				}
+			}
+
+			// Apply set filters to unmatched elements
+			matchedCount += i;
+			if ( bySet && i !== matchedCount ) {
+				j = 0;
+				while ( (matcher = setMatchers[j++]) ) {
+					matcher( unmatched, setMatched, context, xml );
+				}
+
+				if ( seed ) {
+					// Reintegrate element matches to eliminate the need for sorting
+					if ( matchedCount > 0 ) {
+						while ( i-- ) {
+							if ( !(unmatched[i] || setMatched[i]) ) {
+								setMatched[i] = pop.call( results );
+							}
+						}
+					}
+
+					// Discard index placeholder values to get only actual matches
+					setMatched = condense( setMatched );
+				}
+
+				// Add matches to results
+				push.apply( results, setMatched );
+
+				// Seedless set matches succeeding multiple successful matchers stipulate sorting
+				if ( outermost && !seed && setMatched.length > 0 &&
+					( matchedCount + setMatchers.length ) > 1 ) {
+
+					Sizzle.uniqueSort( results );
+				}
+			}
+
+			// Override manipulation of globals by nested matchers
+			if ( outermost ) {
+				dirruns = dirrunsUnique;
+				outermostContext = contextBackup;
+			}
+
+			return unmatched;
+		};
+
+	return bySet ?
+		markFunction( superMatcher ) :
+		superMatcher;
+}
+
+compile = Sizzle.compile = function( selector, group /* Internal Use Only */ ) {
+	var i,
+		setMatchers = [],
+		elementMatchers = [],
+		cached = compilerCache[ selector + " " ];
+
+	if ( !cached ) {
+		// Generate a function of recursive functions that can be used to check each element
+		if ( !group ) {
+			group = tokenize( selector );
+		}
+		i = group.length;
+		while ( i-- ) {
+			cached = matcherFromTokens( group[i] );
+			if ( cached[ expando ] ) {
+				setMatchers.push( cached );
+			} else {
+				elementMatchers.push( cached );
+			}
+		}
+
+		// Cache the compiled function
+		cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
+	}
+	return cached;
+};
+
+function multipleContexts( selector, contexts, results ) {
+	var i = 0,
+		len = contexts.length;
+	for ( ; i < len; i++ ) {
+		Sizzle( selector, contexts[i], results );
+	}
+	return results;
+}
+
+function select( selector, context, results, seed ) {
+	var i, tokens, token, type, find,
+		match = tokenize( selector );
+
+	if ( !seed ) {
+		// Try to minimize operations if there is only one group
+		if ( match.length === 1 ) {
+
+			// Take a shortcut and set the context if the root selector is an ID
+			tokens = match[0] = match[0].slice( 0 );
+			if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
+					context.nodeType === 9 && !documentIsXML &&
+					Expr.relative[ tokens[1].type ] ) {
+
+				context = Expr.find["ID"]( token.matches[0].replace( runescape, funescape ), context )[0];
+				if ( !context ) {
+					return results;
+				}
+
+				selector = selector.slice( tokens.shift().value.length );
+			}
+
+			// Fetch a seed set for right-to-left matching
+			i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length;
+			while ( i-- ) {
+				token = tokens[i];
+
+				// Abort if we hit a combinator
+				if ( Expr.relative[ (type = token.type) ] ) {
+					break;
+				}
+				if ( (find = Expr.find[ type ]) ) {
+					// Search, expanding context for leading sibling combinators
+					if ( (seed = find(
+						token.matches[0].replace( runescape, funescape ),
+						rsibling.test( tokens[0].type ) && context.parentNode || context
+					)) ) {
+
+						// If seed is empty or no tokens remain, we can return early
+						tokens.splice( i, 1 );
+						selector = seed.length && toSelector( tokens );
+						if ( !selector ) {
+							push.apply( results, slice.call( seed, 0 ) );
+							return results;
+						}
+
+						break;
+					}
+				}
+			}
+		}
+	}
+
+	// Compile and execute a filtering function
+	// Provide `match` to avoid retokenization if we modified the selector above
+	compile( selector, match )(
+		seed,
+		context,
+		documentIsXML,
+		results,
+		rsibling.test( selector )
+	);
+	return results;
+}
+
+// Deprecated
+Expr.pseudos["nth"] = Expr.pseudos["eq"];
+
+// Easy API for creating new setFilters
+function setFilters() {}
+Expr.filters = setFilters.prototype = Expr.pseudos;
+Expr.setFilters = new setFilters();
+
+// Initialize with the default document
+setDocument();
+
+// Override sizzle attribute retrieval
+Sizzle.attr = jQuery.attr;
+jQuery.find = Sizzle;
+jQuery.expr = Sizzle.selectors;
+jQuery.expr[":"] = jQuery.expr.pseudos;
+jQuery.unique = Sizzle.uniqueSort;
+jQuery.text = Sizzle.getText;
+jQuery.isXMLDoc = Sizzle.isXML;
+jQuery.contains = Sizzle.contains;
+
+
+})( window );
+var runtil = /Until$/,
+	rparentsprev = /^(?:parents|prev(?:Until|All))/,
+	isSimple = /^.[^:#\[\.,]*$/,
+	rneedsContext = jQuery.expr.match.needsContext,
+	// methods guaranteed to produce a unique set when starting from a unique set
+	guaranteedUnique = {
+		children: true,
+		contents: true,
+		next: true,
+		prev: true
+	};
+
+jQuery.fn.extend({
+	find: function( selector ) {
+		var i, ret, self,
+			len = this.length;
+
+		if ( typeof selector !== "string" ) {
+			self = this;
+			return this.pushStack( jQuery( selector ).filter(function() {
+				for ( i = 0; i < len; i++ ) {
+					if ( jQuery.contains( self[ i ], this ) ) {
+						return true;
+					}
+				}
+			}) );
+		}
+
+		ret = [];
+		for ( i = 0; i < len; i++ ) {
+			jQuery.find( selector, this[ i ], ret );
+		}
+
+		// Needed because $( selector, context ) becomes $( context ).find( selector )
+		ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );
+		ret.selector = ( this.selector ? this.selector + " " : "" ) + selector;
+		return ret;
+	},
+
+	has: function( target ) {
+		var i,
+			targets = jQuery( target, this ),
+			len = targets.length;
+
+		return this.filter(function() {
+			for ( i = 0; i < len; i++ ) {
+				if ( jQuery.contains( this, targets[i] ) ) {
+					return true;
+				}
+			}
+		});
+	},
+
+	not: function( selector ) {
+		return this.pushStack( winnow(this, selector, false) );
+	},
+
+	filter: function( selector ) {
+		return this.pushStack( winnow(this, selector, true) );
+	},
+
+	is: function( selector ) {
+		return !!selector && (
+			typeof selector === "string" ?
+				// If this is a positional/relative selector, check membership in the returned set
+				// so $("p:first").is("p:last") won't return true for a doc with two "p".
+				rneedsContext.test( selector ) ?
+					jQuery( selector, this.context ).index( this[0] ) >= 0 :
+					jQuery.filter( selector, this ).length > 0 :
+				this.filter( selector ).length > 0 );
+	},
+
+	closest: function( selectors, context ) {
+		var cur,
+			i = 0,
+			l = this.length,
+			ret = [],
+			pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ?
+				jQuery( selectors, context || this.context ) :
+				0;
+
+		for ( ; i < l; i++ ) {
+			cur = this[i];
+
+			while ( cur && cur.ownerDocument && cur !== context && cur.nodeType !== 11 ) {
+				if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) {
+					ret.push( cur );
+					break;
+				}
+				cur = cur.parentNode;
+			}
+		}
+
+		return this.pushStack( ret.length > 1 ? jQuery.unique( ret ) : ret );
+	},
+
+	// Determine the position of an element within
+	// the matched set of elements
+	index: function( elem ) {
+
+		// No argument, return index in parent
+		if ( !elem ) {
+			return ( this[0] && this[0].parentNode ) ? this.first().prevAll().length : -1;
+		}
+
+		// index in selector
+		if ( typeof elem === "string" ) {
+			return jQuery.inArray( this[0], jQuery( elem ) );
+		}
+
+		// Locate the position of the desired element
+		return jQuery.inArray(
+			// If it receives a jQuery object, the first element is used
+			elem.jquery ? elem[0] : elem, this );
+	},
+
+	add: function( selector, context ) {
+		var set = typeof selector === "string" ?
+				jQuery( selector, context ) :
+				jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ),
+			all = jQuery.merge( this.get(), set );
+
+		return this.pushStack( jQuery.unique(all) );
+	},
+
+	addBack: function( selector ) {
+		return this.add( selector == null ?
+			this.prevObject : this.prevObject.filter(selector)
+		);
+	}
+});
+
+jQuery.fn.andSelf = jQuery.fn.addBack;
+
+function sibling( cur, dir ) {
+	do {
+		cur = cur[ dir ];
+	} while ( cur && cur.nodeType !== 1 );
+
+	return cur;
+}
+
+jQuery.each({
+	parent: function( elem ) {
+		var parent = elem.parentNode;
+		return parent && parent.nodeType !== 11 ? parent : null;
+	},
+	parents: function( elem ) {
+		return jQuery.dir( elem, "parentNode" );
+	},
+	parentsUntil: function( elem, i, until ) {
+		return jQuery.dir( elem, "parentNode", until );
+	},
+	next: function( elem ) {
+		return sibling( elem, "nextSibling" );
+	},
+	prev: function( elem ) {
+		return sibling( elem, "previousSibling" );
+	},
+	nextAll: function( elem ) {
+		return jQuery.dir( elem, "nextSibling" );
+	},
+	prevAll: function( elem ) {
+		return jQuery.dir( elem, "previousSibling" );
+	},
+	nextUntil: function( elem, i, until ) {
+		return jQuery.dir( elem, "nextSibling", until );
+	},
+	prevUntil: function( elem, i, until ) {
+		return jQuery.dir( elem, "previousSibling", until );
+	},
+	siblings: function( elem ) {
+		return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem );
+	},
+	children: function( elem ) {
+		return jQuery.sibling( elem.firstChild );
+	},
+	contents: function( elem ) {
+		return jQuery.nodeName( elem, "iframe" ) ?
+			elem.contentDocument || elem.contentWindow.document :
+			jQuery.merge( [], elem.childNodes );
+	}
+}, function( name, fn ) {
+	jQuery.fn[ name ] = function( until, selector ) {
+		var ret = jQuery.map( this, fn, until );
+
+		if ( !runtil.test( name ) ) {
+			selector = until;
+		}
+
+		if ( selector && typeof selector === "string" ) {
+			ret = jQuery.filter( selector, ret );
+		}
+
+		ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret;
+
+		if ( this.length > 1 && rparentsprev.test( name ) ) {
+			ret = ret.reverse();
+		}
+
+		return this.pushStack( ret );
+	};
+});
+
+jQuery.extend({
+	filter: function( expr, elems, not ) {
+		if ( not ) {
+			expr = ":not(" + expr + ")";
+		}
+
+		return elems.length === 1 ?
+			jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] :
+			jQuery.find.matches(expr, elems);
+	},
+
+	dir: function( elem, dir, until ) {
+		var matched = [],
+			cur = elem[ dir ];
+
+		while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {
+			if ( cur.nodeType === 1 ) {
+				matched.push( cur );
+			}
+			cur = cur[dir];
+		}
+		return matched;
+	},
+
+	sibling: function( n, elem ) {
+		var r = [];
+
+		for ( ; n; n = n.nextSibling ) {
+			if ( n.nodeType === 1 && n !== elem ) {
+				r.push( n );
+			}
+		}
+
+		return r;
+	}
+});
+
+// Implement the identical functionality for filter and not
+function winnow( elements, qualifier, keep ) {
+
+	// Can't pass null or undefined to indexOf in Firefox 4
+	// Set to 0 to skip string check
+	qualifier = qualifier || 0;
+
+	if ( jQuery.isFunction( qualifier ) ) {
+		return jQuery.grep(elements, function( elem, i ) {
+			var retVal = !!qualifier.call( elem, i, elem );
+			return retVal === keep;
+		});
+
+	} else if ( qualifier.nodeType ) {
+		return jQuery.grep(elements, function( elem ) {
+			return ( elem === qualifier ) === keep;
+		});
+
+	} else if ( typeof qualifier === "string" ) {
+		var filtered = jQuery.grep(elements, function( elem ) {
+			return elem.nodeType === 1;
+		});
+
+		if ( isSimple.test( qualifier ) ) {
+			return jQuery.filter(qualifier, filtered, !keep);
+		} else {
+			qualifier = jQuery.filter( qualifier, filtered );
+		}
+	}
+
+	return jQuery.grep(elements, function( elem ) {
+		return ( jQuery.inArray( elem, qualifier ) >= 0 ) === keep;
+	});
+}
+function createSafeFragment( document ) {
+	var list = nodeNames.split( "|" ),
+		safeFrag = document.createDocumentFragment();
+
+	if ( safeFrag.createElement ) {
+		while ( list.length ) {
+			safeFrag.createElement(
+				list.pop()
+			);
+		}
+	}
+	return safeFrag;
+}
+
+var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" +
+		"header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",
+	rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g,
+	rnoshimcache = new RegExp("<(?:" + nodeNames + ")[\\s/>]", "i"),
+	rleadingWhitespace = /^\s+/,
+	rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,
+	rtagName = /<([\w:]+)/,
+	rtbody = /<tbody/i,
+	rhtml = /<|&#?\w+;/,
+	rnoInnerhtml = /<(?:script|style|link)/i,
+	manipulation_rcheckableType = /^(?:checkbox|radio)$/i,
+	// checked="checked" or checked
+	rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
+	rscriptType = /^$|\/(?:java|ecma)script/i,
+	rscriptTypeMasked = /^true\/(.*)/,
+	rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,
+
+	// We have to close these tags to support XHTML (#13200)
+	wrapMap = {
+		option: [ 1, "<select multiple='multiple'>", "</select>" ],
+		legend: [ 1, "<fieldset>", "</fieldset>" ],
+		area: [ 1, "<map>", "</map>" ],
+		param: [ 1, "<object>", "</object>" ],
+		thead: [ 1, "<table>", "</table>" ],
+		tr: [ 2, "<table><tbody>", "</tbody></table>" ],
+		col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ],
+		td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
+
+		// IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags,
+		// unless wrapped in a div with non-breaking characters in front of it.
+		_default: jQuery.support.htmlSerialize ? [ 0, "", "" ] : [ 1, "X<div>", "</div>"  ]
+	},
+	safeFragment = createSafeFragment( document ),
+	fragmentDiv = safeFragment.appendChild( document.createElement("div") );
+
+wrapMap.optgroup = wrapMap.option;
+wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
+wrapMap.th = wrapMap.td;
+
+jQuery.fn.extend({
+	text: function( value ) {
+		return jQuery.access( this, function( value ) {
+			return value === undefined ?
+				jQuery.text( this ) :
+				this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) );
+		}, null, value, arguments.length );
+	},
+
+	wrapAll: function( html ) {
+		if ( jQuery.isFunction( html ) ) {
+			return this.each(function(i) {
+				jQuery(this).wrapAll( html.call(this, i) );
+			});
+		}
+
+		if ( this[0] ) {
+			// The elements to wrap the target around
+			var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);
+
+			if ( this[0].parentNode ) {
+				wrap.insertBefore( this[0] );
+			}
+
+			wrap.map(function() {
+				var elem = this;
+
+				while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {
+					elem = elem.firstChild;
+				}
+
+				return elem;
+			}).append( this );
+		}
+
+		return this;
+	},
+
+	wrapInner: function( html ) {
+		if ( jQuery.isFunction( html ) ) {
+			return this.each(function(i) {
+				jQuery(this).wrapInner( html.call(this, i) );
+			});
+		}
+
+		return this.each(function() {
+			var self = jQuery( this ),
+				contents = self.contents();
+
+			if ( contents.length ) {
+				contents.wrapAll( html );
+
+			} else {
+				self.append( html );
+			}
+		});
+	},
+
+	wrap: function( html ) {
+		var isFunction = jQuery.isFunction( html );
+
+		return this.each(function(i) {
+			jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );
+		});
+	},
+
+	unwrap: function() {
+		return this.parent().each(function() {
+			if ( !jQuery.nodeName( this, "body" ) ) {
+				jQuery( this ).replaceWith( this.childNodes );
+			}
+		}).end();
+	},
+
+	append: function() {
+		return this.domManip(arguments, true, function( elem ) {
+			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+				this.appendChild( elem );
+			}
+		});
+	},
+
+	prepend: function() {
+		return this.domManip(arguments, true, function( elem ) {
+			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+				this.insertBefore( elem, this.firstChild );
+			}
+		});
+	},
+
+	before: function() {
+		return this.domManip( arguments, false, function( elem ) {
+			if ( this.parentNode ) {
+				this.parentNode.insertBefore( elem, this );
+			}
+		});
+	},
+
+	after: function() {
+		return this.domManip( arguments, false, function( elem ) {
+			if ( this.parentNode ) {
+				this.parentNode.insertBefore( elem, this.nextSibling );
+			}
+		});
+	},
+
+	// keepData is for internal use only--do not document
+	remove: function( selector, keepData ) {
+		var elem,
+			i = 0;
+
+		for ( ; (elem = this[i]) != null; i++ ) {
+			if ( !selector || jQuery.filter( selector, [ elem ] ).length > 0 ) {
+				if ( !keepData && elem.nodeType === 1 ) {
+					jQuery.cleanData( getAll( elem ) );
+				}
+
+				if ( elem.parentNode ) {
+					if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) {
+						setGlobalEval( getAll( elem, "script" ) );
+					}
+					elem.parentNode.removeChild( elem );
+				}
+			}
+		}
+
+		return this;
+	},
+
+	empty: function() {
+		var elem,
+			i = 0;
+
+		for ( ; (elem = this[i]) != null; i++ ) {
+			// Remove element nodes and prevent memory leaks
+			if ( elem.nodeType === 1 ) {
+				jQuery.cleanData( getAll( elem, false ) );
+			}
+
+			// Remove any remaining nodes
+			while ( elem.firstChild ) {
+				elem.removeChild( elem.firstChild );
+			}
+
+			// If this is a select, ensure that it displays empty (#12336)
+			// Support: IE<9
+			if ( elem.options && jQuery.nodeName( elem, "select" ) ) {
+				elem.options.length = 0;
+			}
+		}
+
+		return this;
+	},
+
+	clone: function( dataAndEvents, deepDataAndEvents ) {
+		dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
+		deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
+
+		return this.map( function () {
+			return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
+		});
+	},
+
+	html: function( value ) {
+		return jQuery.access( this, function( value ) {
+			var elem = this[0] || {},
+				i = 0,
+				l = this.length;
+
+			if ( value === undefined ) {
+				return elem.nodeType === 1 ?
+					elem.innerHTML.replace( rinlinejQuery, "" ) :
+					undefined;
+			}
+
+			// See if we can take a shortcut and just use innerHTML
+			if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
+				( jQuery.support.htmlSerialize || !rnoshimcache.test( value )  ) &&
+				( jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value ) ) &&
+				!wrapMap[ ( rtagName.exec( value ) || ["", ""] )[1].toLowerCase() ] ) {
+
+				value = value.replace( rxhtmlTag, "<$1></$2>" );
+
+				try {
+					for (; i < l; i++ ) {
+						// Remove element nodes and prevent memory leaks
+						elem = this[i] || {};
+						if ( elem.nodeType === 1 ) {
+							jQuery.cleanData( getAll( elem, false ) );
+							elem.innerHTML = value;
+						}
+					}
+
+					elem = 0;
+
+				// If using innerHTML throws an exception, use the fallback method
+				} catch(e) {}
+			}
+
+			if ( elem ) {
+				this.empty().append( value );
+			}
+		}, null, value, arguments.length );
+	},
+
+	replaceWith: function( value ) {
+		var isFunc = jQuery.isFunction( value );
+
+		// Make sure that the elements are removed from the DOM before they are inserted
+		// this can help fix replacing a parent with child elements
+		if ( !isFunc && typeof value !== "string" ) {
+			value = jQuery( value ).not( this ).detach();
+		}
+
+		return this.domManip( [ value ], true, function( elem ) {
+			var next = this.nextSibling,
+				parent = this.parentNode;
+
+			if ( parent ) {
+				jQuery( this ).remove();
+				parent.insertBefore( elem, next );
+			}
+		});
+	},
+
+	detach: function( selector ) {
+		return this.remove( selector, true );
+	},
+
+	domManip: function( args, table, callback ) {
+
+		// Flatten any nested arrays
+		args = core_concat.apply( [], args );
+
+		var first, node, hasScripts,
+			scripts, doc, fragment,
+			i = 0,
+			l = this.length,
+			set = this,
+			iNoClone = l - 1,
+			value = args[0],
+			isFunction = jQuery.isFunction( value );
+
+		// We can't cloneNode fragments that contain checked, in WebKit
+		if ( isFunction || !( l <= 1 || typeof value !== "string" || jQuery.support.checkClone || !rchecked.test( value ) ) ) {
+			return this.each(function( index ) {
+				var self = set.eq( index );
+				if ( isFunction ) {
+					args[0] = value.call( this, index, table ? self.html() : undefined );
+				}
+				self.domManip( args, table, callback );
+			});
+		}
+
+		if ( l ) {
+			fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, this );
+			first = fragment.firstChild;
+
+			if ( fragment.childNodes.length === 1 ) {
+				fragment = first;
+			}
+
+			if ( first ) {
+				table = table && jQuery.nodeName( first, "tr" );
+				scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
+				hasScripts = scripts.length;
+
+				// Use the original fragment for the last item instead of the first because it can end up
+				// being emptied incorrectly in certain situations (#8070).
+				for ( ; i < l; i++ ) {
+					node = fragment;
+
+					if ( i !== iNoClone ) {
+						node = jQuery.clone( node, true, true );
+
+						// Keep references to cloned scripts for later restoration
+						if ( hasScripts ) {
+							jQuery.merge( scripts, getAll( node, "script" ) );
+						}
+					}
+
+					callback.call(
+						table && jQuery.nodeName( this[i], "table" ) ?
+							findOrAppend( this[i], "tbody" ) :
+							this[i],
+						node,
+						i
+					);
+				}
+
+				if ( hasScripts ) {
+					doc = scripts[ scripts.length - 1 ].ownerDocument;
+
+					// Reenable scripts
+					jQuery.map( scripts, restoreScript );
+
+					// Evaluate executable scripts on first document insertion
+					for ( i = 0; i < hasScripts; i++ ) {
+						node = scripts[ i ];
+						if ( rscriptType.test( node.type || "" ) &&
+							!jQuery._data( node, "globalEval" ) && jQuery.contains( doc, node ) ) {
+
+							if ( node.src ) {
+								// Hope ajax is available...
+								jQuery.ajax({
+									url: node.src,
+									type: "GET",
+									dataType: "script",
+									async: false,
+									global: false,
+									"throws": true
+								});
+							} else {
+								jQuery.globalEval( ( node.text || node.textContent || node.innerHTML || "" ).replace( rcleanScript, "" ) );
+							}
+						}
+					}
+				}
+
+				// Fix #11809: Avoid leaking memory
+				fragment = first = null;
+			}
+		}
+
+		return this;
+	}
+});
+
+function findOrAppend( elem, tag ) {
+	return elem.getElementsByTagName( tag )[0] || elem.appendChild( elem.ownerDocument.createElement( tag ) );
+}
+
+// Replace/restore the type attribute of script elements for safe DOM manipulation
+function disableScript( elem ) {
+	var attr = elem.getAttributeNode("type");
+	elem.type = ( attr && attr.specified ) + "/" + elem.type;
+	return elem;
+}
+function restoreScript( elem ) {
+	var match = rscriptTypeMasked.exec( elem.type );
+	if ( match ) {
+		elem.type = match[1];
+	} else {
+		elem.removeAttribute("type");
+	}
+	return elem;
+}
+
+// Mark scripts as having already been evaluated
+function setGlobalEval( elems, refElements ) {
+	var elem,
+		i = 0;
+	for ( ; (elem = elems[i]) != null; i++ ) {
+		jQuery._data( elem, "globalEval", !refElements || jQuery._data( refElements[i], "globalEval" ) );
+	}
+}
+
+function cloneCopyEvent( src, dest ) {
+
+	if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {
+		return;
+	}
+
+	var type, i, l,
+		oldData = jQuery._data( src ),
+		curData = jQuery._data( dest, oldData ),
+		events = oldData.events;
+
+	if ( events ) {
+		delete curData.handle;
+		curData.events = {};
+
+		for ( type in events ) {
+			for ( i = 0, l = events[ type ].length; i < l; i++ ) {
+				jQuery.event.add( dest, type, events[ type ][ i ] );
+			}
+		}
+	}
+
+	// make the cloned public data object a copy from the original
+	if ( curData.data ) {
+		curData.data = jQuery.extend( {}, curData.data );
+	}
+}
+
+function fixCloneNodeIssues( src, dest ) {
+	var nodeName, e, data;
+
+	// We do not need to do anything for non-Elements
+	if ( dest.nodeType !== 1 ) {
+		return;
+	}
+
+	nodeName = dest.nodeName.toLowerCase();
+
+	// IE6-8 copies events bound via attachEvent when using cloneNode.
+	if ( !jQuery.support.noCloneEvent && dest[ jQuery.expando ] ) {
+		data = jQuery._data( dest );
+
+		for ( e in data.events ) {
+			jQuery.removeEvent( dest, e, data.handle );
+		}
+
+		// Event data gets referenced instead of copied if the expando gets copied too
+		dest.removeAttribute( jQuery.expando );
+	}
+
+	// IE blanks contents when cloning scripts, and tries to evaluate newly-set text
+	if ( nodeName === "script" && dest.text !== src.text ) {
+		disableScript( dest ).text = src.text;
+		restoreScript( dest );
+
+	// IE6-10 improperly clones children of object elements using classid.
+	// IE10 throws NoModificationAllowedError if parent is null, #12132.
+	} else if ( nodeName === "object" ) {
+		if ( dest.parentNode ) {
+			dest.outerHTML = src.outerHTML;
+		}
+
+		// This path appears unavoidable for IE9. When cloning an object
+		// element in IE9, the outerHTML strategy above is not sufficient.
+		// If the src has innerHTML and the destination does not,
+		// copy the src.innerHTML into the dest.innerHTML. #10324
+		if ( jQuery.support.html5Clone && ( src.innerHTML && !jQuery.trim(dest.innerHTML) ) ) {
+			dest.innerHTML = src.innerHTML;
+		}
+
+	} else if ( nodeName === "input" && manipulation_rcheckableType.test( src.type ) ) {
+		// IE6-8 fails to persist the checked state of a cloned checkbox
+		// or radio button. Worse, IE6-7 fail to give the cloned element
+		// a checked appearance if the defaultChecked value isn't also set
+
+		dest.defaultChecked = dest.checked = src.checked;
+
+		// IE6-7 get confused and end up setting the value of a cloned
+		// checkbox/radio button to an empty string instead of "on"
+		if ( dest.value !== src.value ) {
+			dest.value = src.value;
+		}
+
+	// IE6-8 fails to return the selected option to the default selected
+	// state when cloning options
+	} else if ( nodeName === "option" ) {
+		dest.defaultSelected = dest.selected = src.defaultSelected;
+
+	// IE6-8 fails to set the defaultValue to the correct value when
+	// cloning other types of input fields
+	} else if ( nodeName === "input" || nodeName === "textarea" ) {
+		dest.defaultValue = src.defaultValue;
+	}
+}
+
+jQuery.each({
+	appendTo: "append",
+	prependTo: "prepend",
+	insertBefore: "before",
+	insertAfter: "after",
+	replaceAll: "replaceWith"
+}, function( name, original ) {
+	jQuery.fn[ name ] = function( selector ) {
+		var elems,
+			i = 0,
+			ret = [],
+			insert = jQuery( selector ),
+			last = insert.length - 1;
+
+		for ( ; i <= last; i++ ) {
+			elems = i === last ? this : this.clone(true);
+			jQuery( insert[i] )[ original ]( elems );
+
+			// Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get()
+			core_push.apply( ret, elems.get() );
+		}
+
+		return this.pushStack( ret );
+	};
+});
+
+function getAll( context, tag ) {
+	var elems, elem,
+		i = 0,
+		found = typeof context.getElementsByTagName !== core_strundefined ? context.getElementsByTagName( tag || "*" ) :
+			typeof context.querySelectorAll !== core_strundefined ? context.querySelectorAll( tag || "*" ) :
+			undefined;
+
+	if ( !found ) {
+		for ( found = [], elems = context.childNodes || context; (elem = elems[i]) != null; i++ ) {
+			if ( !tag || jQuery.nodeName( elem, tag ) ) {
+				found.push( elem );
+			} else {
+				jQuery.merge( found, getAll( elem, tag ) );
+			}
+		}
+	}
+
+	return tag === undefined || tag && jQuery.nodeName( context, tag ) ?
+		jQuery.merge( [ context ], found ) :
+		found;
+}
+
+// Used in buildFragment, fixes the defaultChecked property
+function fixDefaultChecked( elem ) {
+	if ( manipulation_rcheckableType.test( elem.type ) ) {
+		elem.defaultChecked = elem.checked;
+	}
+}
+
+jQuery.extend({
+	clone: function( elem, dataAndEvents, deepDataAndEvents ) {
+		var destElements, node, clone, i, srcElements,
+			inPage = jQuery.contains( elem.ownerDocument, elem );
+
+		if ( jQuery.support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) {
+			clone = elem.cloneNode( true );
+
+		// IE<=8 does not properly clone detached, unknown element nodes
+		} else {
+			fragmentDiv.innerHTML = elem.outerHTML;
+			fragmentDiv.removeChild( clone = fragmentDiv.firstChild );
+		}
+
+		if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) &&
+				(elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {
+
+			// We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2
+			destElements = getAll( clone );
+			srcElements = getAll( elem );
+
+			// Fix all IE cloning issues
+			for ( i = 0; (node = srcElements[i]) != null; ++i ) {
+				// Ensure that the destination node is not null; Fixes #9587
+				if ( destElements[i] ) {
+					fixCloneNodeIssues( node, destElements[i] );
+				}
+			}
+		}
+
+		// Copy the events from the original to the clone
+		if ( dataAndEvents ) {
+			if ( deepDataAndEvents ) {
+				srcElements = srcElements || getAll( elem );
+				destElements = destElements || getAll( clone );
+
+				for ( i = 0; (node = srcElements[i]) != null; i++ ) {
+					cloneCopyEvent( node, destElements[i] );
+				}
+			} else {
+				cloneCopyEvent( elem, clone );
+			}
+		}
+
+		// Preserve script evaluation history
+		destElements = getAll( clone, "script" );
+		if ( destElements.length > 0 ) {
+			setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
+		}
+
+		destElements = srcElements = node = null;
+
+		// Return the cloned set
+		return clone;
+	},
+
+	buildFragment: function( elems, context, scripts, selection ) {
+		var j, elem, contains,
+			tmp, tag, tbody, wrap,
+			l = elems.length,
+
+			// Ensure a safe fragment
+			safe = createSafeFragment( context ),
+
+			nodes = [],
+			i = 0;
+
+		for ( ; i < l; i++ ) {
+			elem = elems[ i ];
+
+			if ( elem || elem === 0 ) {
+
+				// Add nodes directly
+				if ( jQuery.type( elem ) === "object" ) {
+					jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
+
+				// Convert non-html into a text node
+				} else if ( !rhtml.test( elem ) ) {
+					nodes.push( context.createTextNode( elem ) );
+
+				// Convert html into DOM nodes
+				} else {
+					tmp = tmp || safe.appendChild( context.createElement("div") );
+
+					// Deserialize a standard representation
+					tag = ( rtagName.exec( elem ) || ["", ""] )[1].toLowerCase();
+					wrap = wrapMap[ tag ] || wrapMap._default;
+
+					tmp.innerHTML = wrap[1] + elem.replace( rxhtmlTag, "<$1></$2>" ) + wrap[2];
+
+					// Descend through wrappers to the right content
+					j = wrap[0];
+					while ( j-- ) {
+						tmp = tmp.lastChild;
+					}
+
+					// Manually add leading whitespace removed by IE
+					if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {
+						nodes.push( context.createTextNode( rleadingWhitespace.exec( elem )[0] ) );
+					}
+
+					// Remove IE's autoinserted <tbody> from table fragments
+					if ( !jQuery.support.tbody ) {
+
+						// String was a <table>, *may* have spurious <tbody>
+						elem = tag === "table" && !rtbody.test( elem ) ?
+							tmp.firstChild :
+
+							// String was a bare <thead> or <tfoot>
+							wrap[1] === "<table>" && !rtbody.test( elem ) ?
+								tmp :
+								0;
+
+						j = elem && elem.childNodes.length;
+						while ( j-- ) {
+							if ( jQuery.nodeName( (tbody = elem.childNodes[j]), "tbody" ) && !tbody.childNodes.length ) {
+								elem.removeChild( tbody );
+							}
+						}
+					}
+
+					jQuery.merge( nodes, tmp.childNodes );
+
+					// Fix #12392 for WebKit and IE > 9
+					tmp.textContent = "";
+
+					// Fix #12392 for oldIE
+					while ( tmp.firstChild ) {
+						tmp.removeChild( tmp.firstChild );
+					}
+
+					// Remember the top-level container for proper cleanup
+					tmp = safe.lastChild;
+				}
+			}
+		}
+
+		// Fix #11356: Clear elements from fragment
+		if ( tmp ) {
+			safe.removeChild( tmp );
+		}
+
+		// Reset defaultChecked for any radios and checkboxes
+		// about to be appended to the DOM in IE 6/7 (#8060)
+		if ( !jQuery.support.appendChecked ) {
+			jQuery.grep( getAll( nodes, "input" ), fixDefaultChecked );
+		}
+
+		i = 0;
+		while ( (elem = nodes[ i++ ]) ) {
+
+			// #4087 - If origin and destination elements are the same, and this is
+			// that element, do not do anything
+			if ( selection && jQuery.inArray( elem, selection ) !== -1 ) {
+				continue;
+			}
+
+			contains = jQuery.contains( elem.ownerDocument, elem );
+
+			// Append to fragment
+			tmp = getAll( safe.appendChild( elem ), "script" );
+
+			// Preserve script evaluation history
+			if ( contains ) {
+				setGlobalEval( tmp );
+			}
+
+			// Capture executables
+			if ( scripts ) {
+				j = 0;
+				while ( (elem = tmp[ j++ ]) ) {
+					if ( rscriptType.test( elem.type || "" ) ) {
+						scripts.push( elem );
+					}
+				}
+			}
+		}
+
+		tmp = null;
+
+		return safe;
+	},
+
+	cleanData: function( elems, /* internal */ acceptData ) {
+		var elem, type, id, data,
+			i = 0,
+			internalKey = jQuery.expando,
+			cache = jQuery.cache,
+			deleteExpando = jQuery.support.deleteExpando,
+			special = jQuery.event.special;
+
+		for ( ; (elem = elems[i]) != null; i++ ) {
+
+			if ( acceptData || jQuery.acceptData( elem ) ) {
+
+				id = elem[ internalKey ];
+				data = id && cache[ id ];
+
+				if ( data ) {
+					if ( data.events ) {
+						for ( type in data.events ) {
+							if ( special[ type ] ) {
+								jQuery.event.remove( elem, type );
+
+							// This is a shortcut to avoid jQuery.event.remove's overhead
+							} else {
+								jQuery.removeEvent( elem, type, data.handle );
+							}
+						}
+					}
+
+					// Remove cache only if it was not already removed by jQuery.event.remove
+					if ( cache[ id ] ) {
+
+						delete cache[ id ];
+
+						// IE does not allow us to delete expando properties from nodes,
+						// nor does it have a removeAttribute function on Document nodes;
+						// we must handle all of these cases
+						if ( deleteExpando ) {
+							delete elem[ internalKey ];
+
+						} else if ( typeof elem.removeAttribute !== core_strundefined ) {
+							elem.removeAttribute( internalKey );
+
+						} else {
+							elem[ internalKey ] = null;
+						}
+
+						core_deletedIds.push( id );
+					}
+				}
+			}
+		}
+	}
+});
+var iframe, getStyles, curCSS,
+	ralpha = /alpha\([^)]*\)/i,
+	ropacity = /opacity\s*=\s*([^)]*)/,
+	rposition = /^(top|right|bottom|left)$/,
+	// swappable if display is none or starts with table except "table", "table-cell", or "table-caption"
+	// see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
+	rdisplayswap = /^(none|table(?!-c[ea]).+)/,
+	rmargin = /^margin/,
+	rnumsplit = new RegExp( "^(" + core_pnum + ")(.*)$", "i" ),
+	rnumnonpx = new RegExp( "^(" + core_pnum + ")(?!px)[a-z%]+$", "i" ),
+	rrelNum = new RegExp( "^([+-])=(" + core_pnum + ")", "i" ),
+	elemdisplay = { BODY: "block" },
+
+	cssShow = { position: "absolute", visibility: "hidden", display: "block" },
+	cssNormalTransform = {
+		letterSpacing: 0,
+		fontWeight: 400
+	},
+
+	cssExpand = [ "Top", "Right", "Bottom", "Left" ],
+	cssPrefixes = [ "Webkit", "O", "Moz", "ms" ];
+
+// return a css property mapped to a potentially vendor prefixed property
+function vendorPropName( style, name ) {
+
+	// shortcut for names that are not vendor prefixed
+	if ( name in style ) {
+		return name;
+	}
+
+	// check for vendor prefixed names
+	var capName = name.charAt(0).toUpperCase() + name.slice(1),
+		origName = name,
+		i = cssPrefixes.length;
+
+	while ( i-- ) {
+		name = cssPrefixes[ i ] + capName;
+		if ( name in style ) {
+			return name;
+		}
+	}
+
+	return origName;
+}
+
+function isHidden( elem, el ) {
+	// isHidden might be called from jQuery#filter function;
+	// in that case, element will be second argument
+	elem = el || elem;
+	return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem );
+}
+
+function showHide( elements, show ) {
+	var display, elem, hidden,
+		values = [],
+		index = 0,
+		length = elements.length;
+
+	for ( ; index < length; index++ ) {
+		elem = elements[ index ];
+		if ( !elem.style ) {
+			continue;
+		}
+
+		values[ index ] = jQuery._data( elem, "olddisplay" );
+		display = elem.style.display;
+		if ( show ) {
+			// Reset the inline display of this element to learn if it is
+			// being hidden by cascaded rules or not
+			if ( !values[ index ] && display === "none" ) {
+				elem.style.display = "";
+			}
+
+			// Set elements which have been overridden with display: none
+			// in a stylesheet to whatever the default browser style is
+			// for such an element
+			if ( elem.style.display === "" && isHidden( elem ) ) {
+				values[ index ] = jQuery._data( elem, "olddisplay", css_defaultDisplay(elem.nodeName) );
+			}
+		} else {
+
+			if ( !values[ index ] ) {
+				hidden = isHidden( elem );
+
+				if ( display && display !== "none" || !hidden ) {
+					jQuery._data( elem, "olddisplay", hidden ? display : jQuery.css( elem, "display" ) );
+				}
+			}
+		}
+	}
+
+	// Set the display of most of the elements in a second loop
+	// to avoid the constant reflow
+	for ( index = 0; index < length; index++ ) {
+		elem = elements[ index ];
+		if ( !elem.style ) {
+			continue;
+		}
+		if ( !show || elem.style.display === "none" || elem.style.display === "" ) {
+			elem.style.display = show ? values[ index ] || "" : "none";
+		}
+	}
+
+	return elements;
+}
+
+jQuery.fn.extend({
+	css: function( name, value ) {
+		return jQuery.access( this, function( elem, name, value ) {
+			var len, styles,
+				map = {},
+				i = 0;
+
+			if ( jQuery.isArray( name ) ) {
+				styles = getStyles( elem );
+				len = name.length;
+
+				for ( ; i < len; i++ ) {
+					map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
+				}
+
+				return map;
+			}
+
+			return value !== undefined ?
+				jQuery.style( elem, name, value ) :
+				jQuery.css( elem, name );
+		}, name, value, arguments.length > 1 );
+	},
+	show: function() {
+		return showHide( this, true );
+	},
+	hide: function() {
+		return showHide( this );
+	},
+	toggle: function( state ) {
+		var bool = typeof state === "boolean";
+
+		return this.each(function() {
+			if ( bool ? state : isHidden( this ) ) {
+				jQuery( this ).show();
+			} else {
+				jQuery( this ).hide();
+			}
+		});
+	}
+});
+
+jQuery.extend({
+	// Add in style property hooks for overriding the default
+	// behavior of getting and setting a style property
+	cssHooks: {
+		opacity: {
+			get: function( elem, computed ) {
+				if ( computed ) {
+					// We should always get a number back from opacity
+					var ret = curCSS( elem, "opacity" );
+					return ret === "" ? "1" : ret;
+				}
+			}
+		}
+	},
+
+	// Exclude the following css properties to add px
+	cssNumber: {
+		"columnCount": true,
+		"fillOpacity": true,
+		"fontWeight": true,
+		"lineHeight": true,
+		"opacity": true,
+		"orphans": true,
+		"widows": true,
+		"zIndex": true,
+		"zoom": true
+	},
+
+	// Add in properties whose names you wish to fix before
+	// setting or getting the value
+	cssProps: {
+		// normalize float css property
+		"float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat"
+	},
+
+	// Get and set the style property on a DOM Node
+	style: function( elem, name, value, extra ) {
+		// Don't set styles on text and comment nodes
+		if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
+			return;
+		}
+		
+		// Make sure that we're working with the right name
+		var ret, type, hooks,
+			origName = jQuery.camelCase( name ),
+			style = elem.style;
+
+		name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) );
+
+		// gets hook for the prefixed version
+		// followed by the unprefixed version
+		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
+
+		// Check if we're setting a value
+		if ( value !== undefined ) {
+			type = typeof value;
+
+			// convert relative number strings (+= or -=) to relative numbers. #7345
+			if ( type === "string" && (ret = rrelNum.exec( value )) ) {
+				value = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) );
+				// Fixes bug #9237
+				type = "number";
+			}
+
+			// Make sure that NaN and null values aren't set. See: #7116
+			if ( value == null || type === "number" && isNaN( value ) ) {
+				return;
+			}
+
+			// If a number was passed in, add 'px' to the (except for certain CSS properties)
+			if ( type === "number" && !jQuery.cssNumber[ origName ] ) {
+				value += "px";
+			}
+
+			// Fixes #8908, it can be done more correctly by specifing setters in cssHooks,
+			// but it would mean to define eight (for every problematic property) identical functions
+			if ( !jQuery.support.clearCloneStyle && value === "" && name.indexOf("background") === 0 ) {
+				style[ name ] = "inherit";
+			}
+
+			// If a hook was provided, use that value, otherwise just set the specified value
+			if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) {
+
+				// Wrapped to prevent IE from throwing errors when 'invalid' values are provided
+				// Fixes bug #5509
+				try {
+					style[ name ] = value;
+				} catch(e) {}
+			}
+
+		} else {
+			// If a hook was provided get the non-computed value from there
+			if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {
+				return ret;
+			}
+
+			// Otherwise just get the value from the style object
+			return style[ name ];
+		}
+	},
+
+	css: function( elem, name, extra, styles ) {
+		var num, val, hooks,
+			origName = jQuery.camelCase( name );
+
+		// Make sure that we're working with the right name
+		name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) );
+
+		// gets hook for the prefixed version
+		// followed by the unprefixed version
+		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
+
+		// If a hook was provided get the computed value from there
+		if ( hooks && "get" in hooks ) {
+			val = hooks.get( elem, true, extra );
+		}
+
+		// Otherwise, if a way to get the computed value exists, use that
+		if ( val === undefined ) {
+			val = curCSS( elem, name, styles );
+		}
+
+		//convert "normal" to computed value
+		if ( val === "normal" && name in cssNormalTransform ) {
+			val = cssNormalTransform[ name ];
+		}
+
+		// Return, converting to number if forced or a qualifier was provided and val looks numeric
+		if ( extra === "" || extra ) {
+			num = parseFloat( val );
+			return extra === true || jQuery.isNumeric( num ) ? num || 0 : val;
+		}
+		return val;
+	},
+
+	// A method for quickly swapping in/out CSS properties to get correct calculations
+	swap: function( elem, options, callback, args ) {
+		var ret, name,
+			old = {};
+
+		// Remember the old values, and insert the new ones
+		for ( name in options ) {
+			old[ name ] = elem.style[ name ];
+			elem.style[ name ] = options[ name ];
+		}
+
+		ret = callback.apply( elem, args || [] );
+
+		// Revert the old values
+		for ( name in options ) {
+			elem.style[ name ] = old[ name ];
+		}
+
+		return ret;
+	}
+});
+
+// NOTE: we've included the "window" in window.getComputedStyle
+// because jsdom on node.js will break without it.
+if ( window.getComputedStyle ) {
+	getStyles = function( elem ) {
+		return window.getComputedStyle( elem, null );
+	};
+
+	curCSS = function( elem, name, _computed ) {
+		var width, minWidth, maxWidth,
+			computed = _computed || getStyles( elem ),
+
+			// getPropertyValue is only needed for .css('filter') in IE9, see #12537
+			ret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined,
+			style = elem.style;
+
+		if ( computed ) {
+
+			if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {
+				ret = jQuery.style( elem, name );
+			}
+
+			// A tribute to the "awesome hack by Dean Edwards"
+			// Chrome < 17 and Safari 5.0 uses "computed value" instead of "used value" for margin-right
+			// Safari 5.1.7 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels
+			// this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values
+			if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) {
+
+				// Remember the original values
+				width = style.width;
+				minWidth = style.minWidth;
+				maxWidth = style.maxWidth;
+
+				// Put in the new values to get a computed value out
+				style.minWidth = style.maxWidth = style.width = ret;
+				ret = computed.width;
+
+				// Revert the changed values
+				style.width = width;
+				style.minWidth = minWidth;
+				style.maxWidth = maxWidth;
+			}
+		}
+
+		return ret;
+	};
+} else if ( document.documentElement.currentStyle ) {
+	getStyles = function( elem ) {
+		return elem.currentStyle;
+	};
+
+	curCSS = function( elem, name, _computed ) {
+		var left, rs, rsLeft,
+			computed = _computed || getStyles( elem ),
+			ret = computed ? computed[ name ] : undefined,
+			style = elem.style;
+
+		// Avoid setting ret to empty string here
+		// so we don't default to auto
+		if ( ret == null && style && style[ name ] ) {
+			ret = style[ name ];
+		}
+
+		// From the awesome hack by Dean Edwards
+		// http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
+
+		// If we're not dealing with a regular pixel number
+		// but a number that has a weird ending, we need to convert it to pixels
+		// but not position css attributes, as those are proportional to the parent element instead
+		// and we can't measure the parent instead because it might trigger a "stacking dolls" problem
+		if ( rnumnonpx.test( ret ) && !rposition.test( name ) ) {
+
+			// Remember the original values
+			left = style.left;
+			rs = elem.runtimeStyle;
+			rsLeft = rs && rs.left;
+
+			// Put in the new values to get a computed value out
+			if ( rsLeft ) {
+				rs.left = elem.currentStyle.left;
+			}
+			style.left = name === "fontSize" ? "1em" : ret;
+			ret = style.pixelLeft + "px";
+
+			// Revert the changed values
+			style.left = left;
+			if ( rsLeft ) {
+				rs.left = rsLeft;
+			}
+		}
+
+		return ret === "" ? "auto" : ret;
+	};
+}
+
+function setPositiveNumber( elem, value, subtract ) {
+	var matches = rnumsplit.exec( value );
+	return matches ?
+		// Guard against undefined "subtract", e.g., when used as in cssHooks
+		Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) :
+		value;
+}
+
+function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
+	var i = extra === ( isBorderBox ? "border" : "content" ) ?
+		// If we already have the right measurement, avoid augmentation
+		4 :
+		// Otherwise initialize for horizontal or vertical properties
+		name === "width" ? 1 : 0,
+
+		val = 0;
+
+	for ( ; i < 4; i += 2 ) {
+		// both box models exclude margin, so add it if we want it
+		if ( extra === "margin" ) {
+			val += jQuery.css( elem, extra + cssExpand[ i ], true, styles );
+		}
+
+		if ( isBorderBox ) {
+			// border-box includes padding, so remove it if we want content
+			if ( extra === "content" ) {
+				val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
+			}
+
+			// at this point, extra isn't border nor margin, so remove border
+			if ( extra !== "margin" ) {
+				val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
+			}
+		} else {
+			// at this point, extra isn't content, so add padding
+			val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
+
+			// at this point, extra isn't content nor padding, so add border
+			if ( extra !== "padding" ) {
+				val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
+			}
+		}
+	}
+
+	return val;
+}
+
+function getWidthOrHeight( elem, name, extra ) {
+
+	// Start with offset property, which is equivalent to the border-box value
+	var valueIsBorderBox = true,
+		val = name === "width" ? elem.offsetWidth : elem.offsetHeight,
+		styles = getStyles( elem ),
+		isBorderBox = jQuery.support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
+
+	// some non-html elements return undefined for offsetWidth, so check for null/undefined
+	// svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285
+	// MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668
+	if ( val <= 0 || val == null ) {
+		// Fall back to computed then uncomputed css if necessary
+		val = curCSS( elem, name, styles );
+		if ( val < 0 || val == null ) {
+			val = elem.style[ name ];
+		}
+
+		// Computed unit is not pixels. Stop here and return.
+		if ( rnumnonpx.test(val) ) {
+			return val;
+		}
+
+		// we need the check for style in case a browser which returns unreliable values
+		// for getComputedStyle silently falls back to the reliable elem.style
+		valueIsBorderBox = isBorderBox && ( jQuery.support.boxSizingReliable || val === elem.style[ name ] );
+
+		// Normalize "", auto, and prepare for extra
+		val = parseFloat( val ) || 0;
+	}
+
+	// use the active box-sizing model to add/subtract irrelevant styles
+	return ( val +
+		augmentWidthOrHeight(
+			elem,
+			name,
+			extra || ( isBorderBox ? "border" : "content" ),
+			valueIsBorderBox,
+			styles
+		)
+	) + "px";
+}
+
+// Try to determine the default display value of an element
+function css_defaultDisplay( nodeName ) {
+	var doc = document,
+		display = elemdisplay[ nodeName ];
+
+	if ( !display ) {
+		display = actualDisplay( nodeName, doc );
+
+		// If the simple way fails, read from inside an iframe
+		if ( display === "none" || !display ) {
+			// Use the already-created iframe if possible
+			iframe = ( iframe ||
+				jQuery("<iframe frameborder='0' width='0' height='0'/>")
+				.css( "cssText", "display:block !important" )
+			).appendTo( doc.documentElement );
+
+			// Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse
+			doc = ( iframe[0].contentWindow || iframe[0].contentDocument ).document;
+			doc.write("<!doctype html><html><body>");
+			doc.close();
+
+			display = actualDisplay( nodeName, doc );
+			iframe.detach();
+		}
+
+		// Store the correct default display
+		elemdisplay[ nodeName ] = display;
+	}
+
+	return display;
+}
+
+// Called ONLY from within css_defaultDisplay
+function actualDisplay( name, doc ) {
+	var elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),
+		display = jQuery.css( elem[0], "display" );
+	elem.remove();
+	return display;
+}
+
+jQuery.each([ "height", "width" ], function( i, name ) {
+	jQuery.cssHooks[ name ] = {
+		get: function( elem, computed, extra ) {
+			if ( computed ) {
+				// certain elements can have dimension info if we invisibly show them
+				// however, it must have a current display style that would benefit from this
+				return elem.offsetWidth === 0 && rdisplayswap.test( jQuery.css( elem, "display" ) ) ?
+					jQuery.swap( elem, cssShow, function() {
+						return getWidthOrHeight( elem, name, extra );
+					}) :
+					getWidthOrHeight( elem, name, extra );
+			}
+		},
+
+		set: function( elem, value, extra ) {
+			var styles = extra && getStyles( elem );
+			return setPositiveNumber( elem, value, extra ?
+				augmentWidthOrHeight(
+					elem,
+					name,
+					extra,
+					jQuery.support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
+					styles
+				) : 0
+			);
+		}
+	};
+});
+
+if ( !jQuery.support.opacity ) {
+	jQuery.cssHooks.opacity = {
+		get: function( elem, computed ) {
+			// IE uses filters for opacity
+			return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ?
+				( 0.01 * parseFloat( RegExp.$1 ) ) + "" :
+				computed ? "1" : "";
+		},
+
+		set: function( elem, value ) {
+			var style = elem.style,
+				currentStyle = elem.currentStyle,
+				opacity = jQuery.isNumeric( value ) ? "alpha(opacity=" + value * 100 + ")" : "",
+				filter = currentStyle && currentStyle.filter || style.filter || "";
+
+			// IE has trouble with opacity if it does not have layout
+			// Force it by setting the zoom level
+			style.zoom = 1;
+
+			// if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652
+			// if value === "", then remove inline opacity #12685
+			if ( ( value >= 1 || value === "" ) &&
+					jQuery.trim( filter.replace( ralpha, "" ) ) === "" &&
+					style.removeAttribute ) {
+
+				// Setting style.filter to null, "" & " " still leave "filter:" in the cssText
+				// if "filter:" is present at all, clearType is disabled, we want to avoid this
+				// style.removeAttribute is IE Only, but so apparently is this code path...
+				style.removeAttribute( "filter" );
+
+				// if there is no filter style applied in a css rule or unset inline opacity, we are done
+				if ( value === "" || currentStyle && !currentStyle.filter ) {
+					return;
+				}
+			}
+
+			// otherwise, set new filter values
+			style.filter = ralpha.test( filter ) ?
+				filter.replace( ralpha, opacity ) :
+				filter + " " + opacity;
+		}
+	};
+}
+
+// These hooks cannot be added until DOM ready because the support test
+// for it is not run until after DOM ready
+jQuery(function() {
+	if ( !jQuery.support.reliableMarginRight ) {
+		jQuery.cssHooks.marginRight = {
+			get: function( elem, computed ) {
+				if ( computed ) {
+					// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
+					// Work around by temporarily setting element display to inline-block
+					return jQuery.swap( elem, { "display": "inline-block" },
+						curCSS, [ elem, "marginRight" ] );
+				}
+			}
+		};
+	}
+
+	// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
+	// getComputedStyle returns percent when specified for top/left/bottom/right
+	// rather than make the css module depend on the offset module, we just check for it here
+	if ( !jQuery.support.pixelPosition && jQuery.fn.position ) {
+		jQuery.each( [ "top", "left" ], function( i, prop ) {
+			jQuery.cssHooks[ prop ] = {
+				get: function( elem, computed ) {
+					if ( computed ) {
+						computed = curCSS( elem, prop );
+						// if curCSS returns percentage, fallback to offset
+						return rnumnonpx.test( computed ) ?
+							jQuery( elem ).position()[ prop ] + "px" :
+							computed;
+					}
+				}
+			};
+		});
+	}
+
+});
+
+if ( jQuery.expr && jQuery.expr.filters ) {
+	jQuery.expr.filters.hidden = function( elem ) {
+		// Support: Opera <= 12.12
+		// Opera reports offsetWidths and offsetHeights less than zero on some elements
+		return elem.offsetWidth <= 0 && elem.offsetHeight <= 0 ||
+			(!jQuery.support.reliableHiddenOffsets && ((elem.style && elem.style.display) || jQuery.css( elem, "display" )) === "none");
+	};
+
+	jQuery.expr.filters.visible = function( elem ) {
+		return !jQuery.expr.filters.hidden( elem );
+	};
+}
+
+// These hooks are used by animate to expand properties
+jQuery.each({
+	margin: "",
+	padding: "",
+	border: "Width"
+}, function( prefix, suffix ) {
+	jQuery.cssHooks[ prefix + suffix ] = {
+		expand: function( value ) {
+			var i = 0,
+				expanded = {},
+
+				// assumes a single number if not a string
+				parts = typeof value === "string" ? value.split(" ") : [ value ];
+
+			for ( ; i < 4; i++ ) {
+				expanded[ prefix + cssExpand[ i ] + suffix ] =
+					parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
+			}
+
+			return expanded;
+		}
+	};
+
+	if ( !rmargin.test( prefix ) ) {
+		jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
+	}
+});
+var r20 = /%20/g,
+	rbracket = /\[\]$/,
+	rCRLF = /\r?\n/g,
+	rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
+	rsubmittable = /^(?:input|select|textarea|keygen)/i;
+
+jQuery.fn.extend({
+	serialize: function() {
+		return jQuery.param( this.serializeArray() );
+	},
+	serializeArray: function() {
+		return this.map(function(){
+			// Can add propHook for "elements" to filter or add form elements
+			var elements = jQuery.prop( this, "elements" );
+			return elements ? jQuery.makeArray( elements ) : this;
+		})
+		.filter(function(){
+			var type = this.type;
+			// Use .is(":disabled") so that fieldset[disabled] works
+			return this.name && !jQuery( this ).is( ":disabled" ) &&
+				rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
+				( this.checked || !manipulation_rcheckableType.test( type ) );
+		})
+		.map(function( i, elem ){
+			var val = jQuery( this ).val();
+
+			return val == null ?
+				null :
+				jQuery.isArray( val ) ?
+					jQuery.map( val, function( val ){
+						return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+					}) :
+					{ name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+		}).get();
+	}
+});
+
+//Serialize an array of form elements or a set of
+//key/values into a query string
+jQuery.param = function( a, traditional ) {
+	var prefix,
+		s = [],
+		add = function( key, value ) {
+			// If value is a function, invoke it and return its value
+			value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value );
+			s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
+		};
+
+	// Set traditional to true for jQuery <= 1.3.2 behavior.
+	if ( traditional === undefined ) {
+		traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;
+	}
+
+	// If an array was passed in, assume that it is an array of form elements.
+	if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
+		// Serialize the form elements
+		jQuery.each( a, function() {
+			add( this.name, this.value );
+		});
+
+	} else {
+		// If traditional, encode the "old" way (the way 1.3.2 or older
+		// did it), otherwise encode params recursively.
+		for ( prefix in a ) {
+			buildParams( prefix, a[ prefix ], traditional, add );
+		}
+	}
+
+	// Return the resulting serialization
+	return s.join( "&" ).replace( r20, "+" );
+};
+
+function buildParams( prefix, obj, traditional, add ) {
+	var name;
+
+	if ( jQuery.isArray( obj ) ) {
+		// Serialize array item.
+		jQuery.each( obj, function( i, v ) {
+			if ( traditional || rbracket.test( prefix ) ) {
+				// Treat each array item as a scalar.
+				add( prefix, v );
+
+			} else {
+				// Item is non-scalar (array or object), encode its numeric index.
+				buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add );
+			}
+		});
+
+	} else if ( !traditional && jQuery.type( obj ) === "object" ) {
+		// Serialize object item.
+		for ( name in obj ) {
+			buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
+		}
+
+	} else {
+		// Serialize scalar item.
+		add( prefix, obj );
+	}
+}
+jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
+	"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
+	"change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) {
+
+	// Handle event binding
+	jQuery.fn[ name ] = function( data, fn ) {
+		return arguments.length > 0 ?
+			this.on( name, null, data, fn ) :
+			this.trigger( name );
+	};
+});
+
+jQuery.fn.hover = function( fnOver, fnOut ) {
+	return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
+};
+var
+	// Document location
+	ajaxLocParts,
+	ajaxLocation,
+	ajax_nonce = jQuery.now(),
+
+	ajax_rquery = /\?/,
+	rhash = /#.*$/,
+	rts = /([?&])_=[^&]*/,
+	rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL
+	// #7653, #8125, #8152: local protocol detection
+	rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
+	rnoContent = /^(?:GET|HEAD)$/,
+	rprotocol = /^\/\//,
+	rurl = /^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,
+
+	// Keep a copy of the old load method
+	_load = jQuery.fn.load,
+
+	/* Prefilters
+	 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
+	 * 2) These are called:
+	 *    - BEFORE asking for a transport
+	 *    - AFTER param serialization (s.data is a string if s.processData is true)
+	 * 3) key is the dataType
+	 * 4) the catchall symbol "*" can be used
+	 * 5) execution will start with transport dataType and THEN continue down to "*" if needed
+	 */
+	prefilters = {},
+
+	/* Transports bindings
+	 * 1) key is the dataType
+	 * 2) the catchall symbol "*" can be used
+	 * 3) selection will start with transport dataType and THEN go to "*" if needed
+	 */
+	transports = {},
+
+	// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
+	allTypes = "*/".concat("*");
+
+// #8138, IE may throw an exception when accessing
+// a field from window.location if document.domain has been set
+try {
+	ajaxLocation = location.href;
+} catch( e ) {
+	// Use the href attribute of an A element
+	// since IE will modify it given document.location
+	ajaxLocation = document.createElement( "a" );
+	ajaxLocation.href = "";
+	ajaxLocation = ajaxLocation.href;
+}
+
+// Segment location into parts
+ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];
+
+// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
+function addToPrefiltersOrTransports( structure ) {
+
+	// dataTypeExpression is optional and defaults to "*"
+	return function( dataTypeExpression, func ) {
+
+		if ( typeof dataTypeExpression !== "string" ) {
+			func = dataTypeExpression;
+			dataTypeExpression = "*";
+		}
+
+		var dataType,
+			i = 0,
+			dataTypes = dataTypeExpression.toLowerCase().match( core_rnotwhite ) || [];
+
+		if ( jQuery.isFunction( func ) ) {
+			// For each dataType in the dataTypeExpression
+			while ( (dataType = dataTypes[i++]) ) {
+				// Prepend if requested
+				if ( dataType[0] === "+" ) {
+					dataType = dataType.slice( 1 ) || "*";
+					(structure[ dataType ] = structure[ dataType ] || []).unshift( func );
+
+				// Otherwise append
+				} else {
+					(structure[ dataType ] = structure[ dataType ] || []).push( func );
+				}
+			}
+		}
+	};
+}
+
+// Base inspection function for prefilters and transports
+function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
+
+	var inspected = {},
+		seekingTransport = ( structure === transports );
+
+	function inspect( dataType ) {
+		var selected;
+		inspected[ dataType ] = true;
+		jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
+			var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
+			if( typeof dataTypeOrTransport === "string" && !seekingTransport && !inspected[ dataTypeOrTransport ] ) {
+				options.dataTypes.unshift( dataTypeOrTransport );
+				inspect( dataTypeOrTransport );
+				return false;
+			} else if ( seekingTransport ) {
+				return !( selected = dataTypeOrTransport );
+			}
+		});
+		return selected;
+	}
+
+	return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
+}
+
+// A special extend for ajax options
+// that takes "flat" options (not to be deep extended)
+// Fixes #9887
+function ajaxExtend( target, src ) {
+	var deep, key,
+		flatOptions = jQuery.ajaxSettings.flatOptions || {};
+
+	for ( key in src ) {
+		if ( src[ key ] !== undefined ) {
+			( flatOptions[ key ] ? target : ( deep || (deep = {}) ) )[ key ] = src[ key ];
+		}
+	}
+	if ( deep ) {
+		jQuery.extend( true, target, deep );
+	}
+
+	return target;
+}
+
+jQuery.fn.load = function( url, params, callback ) {
+	if ( typeof url !== "string" && _load ) {
+		return _load.apply( this, arguments );
+	}
+
+	var selector, response, type,
+		self = this,
+		off = url.indexOf(" ");
+
+	if ( off >= 0 ) {
+		selector = url.slice( off, url.length );
+		url = url.slice( 0, off );
+	}
+
+	// If it's a function
+	if ( jQuery.isFunction( params ) ) {
+
+		// We assume that it's the callback
+		callback = params;
+		params = undefined;
+
+	// Otherwise, build a param string
+	} else if ( params && typeof params === "object" ) {
+		type = "POST";
+	}
+
+	// If we have elements to modify, make the request
+	if ( self.length > 0 ) {
+		jQuery.ajax({
+			url: url,
+
+			// if "type" variable is undefined, then "GET" method will be used
+			type: type,
+			dataType: "html",
+			data: params
+		}).done(function( responseText ) {
+
+			// Save response for use in complete callback
+			response = arguments;
+
+			self.html( selector ?
+
+				// If a selector was specified, locate the right elements in a dummy div
+				// Exclude scripts to avoid IE 'Permission Denied' errors
+				jQuery("<div>").append( jQuery.parseHTML( responseText ) ).find( selector ) :
+
+				// Otherwise use the full result
+				responseText );
+
+		}).complete( callback && function( jqXHR, status ) {
+			self.each( callback, response || [ jqXHR.responseText, status, jqXHR ] );
+		});
+	}
+
+	return this;
+};
+
+// Attach a bunch of functions for handling common AJAX events
+jQuery.each( [ "ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend" ], function( i, type ){
+	jQuery.fn[ type ] = function( fn ){
+		return this.on( type, fn );
+	};
+});
+
+jQuery.each( [ "get", "post" ], function( i, method ) {
+	jQuery[ method ] = function( url, data, callback, type ) {
+		// shift arguments if data argument was omitted
+		if ( jQuery.isFunction( data ) ) {
+			type = type || callback;
+			callback = data;
+			data = undefined;
+		}
+
+		return jQuery.ajax({
+			url: url,
+			type: method,
+			dataType: type,
+			data: data,
+			success: callback
+		});
+	};
+});
+
+jQuery.extend({
+
+	// Counter for holding the number of active queries
+	active: 0,
+
+	// Last-Modified header cache for next request
+	lastModified: {},
+	etag: {},
+
+	ajaxSettings: {
+		url: ajaxLocation,
+		type: "GET",
+		isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),
+		global: true,
+		processData: true,
+		async: true,
+		contentType: "application/x-www-form-urlencoded; charset=UTF-8",
+		/*
+		timeout: 0,
+		data: null,
+		dataType: null,
+		username: null,
+		password: null,
+		cache: null,
+		throws: false,
+		traditional: false,
+		headers: {},
+		*/
+
+		accepts: {
+			"*": allTypes,
+			text: "text/plain",
+			html: "text/html",
+			xml: "application/xml, text/xml",
+			json: "application/json, text/javascript"
+		},
+
+		contents: {
+			xml: /xml/,
+			html: /html/,
+			json: /json/
+		},
+
+		responseFields: {
+			xml: "responseXML",
+			text: "responseText"
+		},
+
+		// Data converters
+		// Keys separate source (or catchall "*") and destination types with a single space
+		converters: {
+
+			// Convert anything to text
+			"* text": window.String,
+
+			// Text to html (true = no transformation)
+			"text html": true,
+
+			// Evaluate text as a json expression
+			"text json": jQuery.parseJSON,
+
+			// Parse text as xml
+			"text xml": jQuery.parseXML
+		},
+
+		// For options that shouldn't be deep extended:
+		// you can add your own custom options here if
+		// and when you create one that shouldn't be
+		// deep extended (see ajaxExtend)
+		flatOptions: {
+			url: true,
+			context: true
+		}
+	},
+
+	// Creates a full fledged settings object into target
+	// with both ajaxSettings and settings fields.
+	// If target is omitted, writes into ajaxSettings.
+	ajaxSetup: function( target, settings ) {
+		return settings ?
+
+			// Building a settings object
+			ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
+
+			// Extending ajaxSettings
+			ajaxExtend( jQuery.ajaxSettings, target );
+	},
+
+	ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
+	ajaxTransport: addToPrefiltersOrTransports( transports ),
+
+	// Main method
+	ajax: function( url, options ) {
+
+		// If url is an object, simulate pre-1.5 signature
+		if ( typeof url === "object" ) {
+			options = url;
+			url = undefined;
+		}
+
+		// Force options to be an object
+		options = options || {};
+
+		var // Cross-domain detection vars
+			parts,
+			// Loop variable
+			i,
+			// URL without anti-cache param
+			cacheURL,
+			// Response headers as string
+			responseHeadersString,
+			// timeout handle
+			timeoutTimer,
+
+			// To know if global events are to be dispatched
+			fireGlobals,
+
+			transport,
+			// Response headers
+			responseHeaders,
+			// Create the final options object
+			s = jQuery.ajaxSetup( {}, options ),
+			// Callbacks context
+			callbackContext = s.context || s,
+			// Context for global events is callbackContext if it is a DOM node or jQuery collection
+			globalEventContext = s.context && ( callbackContext.nodeType || callbackContext.jquery ) ?
+				jQuery( callbackContext ) :
+				jQuery.event,
+			// Deferreds
+			deferred = jQuery.Deferred(),
+			completeDeferred = jQuery.Callbacks("once memory"),
+			// Status-dependent callbacks
+			statusCode = s.statusCode || {},
+			// Headers (they are sent all at once)
+			requestHeaders = {},
+			requestHeadersNames = {},
+			// The jqXHR state
+			state = 0,
+			// Default abort message
+			strAbort = "canceled",
+			// Fake xhr
+			jqXHR = {
+				readyState: 0,
+
+				// Builds headers hashtable if needed
+				getResponseHeader: function( key ) {
+					var match;
+					if ( state === 2 ) {
+						if ( !responseHeaders ) {
+							responseHeaders = {};
+							while ( (match = rheaders.exec( responseHeadersString )) ) {
+								responseHeaders[ match[1].toLowerCase() ] = match[ 2 ];
+							}
+						}
+						match = responseHeaders[ key.toLowerCase() ];
+					}
+					return match == null ? null : match;
+				},
+
+				// Raw string
+				getAllResponseHeaders: function() {
+					return state === 2 ? responseHeadersString : null;
+				},
+
+				// Caches the header
+				setRequestHeader: function( name, value ) {
+					var lname = name.toLowerCase();
+					if ( !state ) {
+						name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
+						requestHeaders[ name ] = value;
+					}
+					return this;
+				},
+
+				// Overrides response content-type header
+				overrideMimeType: function( type ) {
+					if ( !state ) {
+						s.mimeType = type;
+					}
+					return this;
+				},
+
+				// Status-dependent callbacks
+				statusCode: function( map ) {
+					var code;
+					if ( map ) {
+						if ( state < 2 ) {
+							for ( code in map ) {
+								// Lazy-add the new callback in a way that preserves old ones
+								statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
+							}
+						} else {
+							// Execute the appropriate callbacks
+							jqXHR.always( map[ jqXHR.status ] );
+						}
+					}
+					return this;
+				},
+
+				// Cancel the request
+				abort: function( statusText ) {
+					var finalText = statusText || strAbort;
+					if ( transport ) {
+						transport.abort( finalText );
+					}
+					done( 0, finalText );
+					return this;
+				}
+			};
+
+		// Attach deferreds
+		deferred.promise( jqXHR ).complete = completeDeferred.add;
+		jqXHR.success = jqXHR.done;
+		jqXHR.error = jqXHR.fail;
+
+		// Remove hash character (#7531: and string promotion)
+		// Add protocol if not provided (#5866: IE7 issue with protocol-less urls)
+		// Handle falsy url in the settings object (#10093: consistency with old signature)
+		// We also use the url parameter if available
+		s.url = ( ( url || s.url || ajaxLocation ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" );
+
+		// Alias method option to type as per ticket #12004
+		s.type = options.method || options.type || s.method || s.type;
+
+		// Extract dataTypes list
+		s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().match( core_rnotwhite ) || [""];
+
+		// A cross-domain request is in order when we have a protocol:host:port mismatch
+		if ( s.crossDomain == null ) {
+			parts = rurl.exec( s.url.toLowerCase() );
+			s.crossDomain = !!( parts &&
+				( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] ||
+					( parts[ 3 ] || ( parts[ 1 ] === "http:" ? 80 : 443 ) ) !=
+						( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? 80 : 443 ) ) )
+			);
+		}
+
+		// Convert data if not already a string
+		if ( s.data && s.processData && typeof s.data !== "string" ) {
+			s.data = jQuery.param( s.data, s.traditional );
+		}
+
+		// Apply prefilters
+		inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
+
+		// If request was aborted inside a prefilter, stop there
+		if ( state === 2 ) {
+			return jqXHR;
+		}
+
+		// We can fire global events as of now if asked to
+		fireGlobals = s.global;
+
+		// Watch for a new set of requests
+		if ( fireGlobals && jQuery.active++ === 0 ) {
+			jQuery.event.trigger("ajaxStart");
+		}
+
+		// Uppercase the type
+		s.type = s.type.toUpperCase();
+
+		// Determine if request has content
+		s.hasContent = !rnoContent.test( s.type );
+
+		// Save the URL in case we're toying with the If-Modified-Since
+		// and/or If-None-Match header later on
+		cacheURL = s.url;
+
+		// More options handling for requests with no content
+		if ( !s.hasContent ) {
+
+			// If data is available, append data to url
+			if ( s.data ) {
+				cacheURL = ( s.url += ( ajax_rquery.test( cacheURL ) ? "&" : "?" ) + s.data );
+				// #9682: remove data so that it's not used in an eventual retry
+				delete s.data;
+			}
+
+			// Add anti-cache in url if needed
+			if ( s.cache === false ) {
+				s.url = rts.test( cacheURL ) ?
+
+					// If there is already a '_' parameter, set its value
+					cacheURL.replace( rts, "$1_=" + ajax_nonce++ ) :
+
+					// Otherwise add one to the end
+					cacheURL + ( ajax_rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ajax_nonce++;
+			}
+		}
+
+		// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+		if ( s.ifModified ) {
+			if ( jQuery.lastModified[ cacheURL ] ) {
+				jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
+			}
+			if ( jQuery.etag[ cacheURL ] ) {
+				jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
+			}
+		}
+
+		// Set the correct header, if data is being sent
+		if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
+			jqXHR.setRequestHeader( "Content-Type", s.contentType );
+		}
+
+		// Set the Accepts header for the server, depending on the dataType
+		jqXHR.setRequestHeader(
+			"Accept",
+			s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?
+				s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
+				s.accepts[ "*" ]
+		);
+
+		// Check for headers option
+		for ( i in s.headers ) {
+			jqXHR.setRequestHeader( i, s.headers[ i ] );
+		}
+
+		// Allow custom headers/mimetypes and early abort
+		if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
+			// Abort if not done already and return
+			return jqXHR.abort();
+		}
+
+		// aborting is no longer a cancellation
+		strAbort = "abort";
+
+		// Install callbacks on deferreds
+		for ( i in { success: 1, error: 1, complete: 1 } ) {
+			jqXHR[ i ]( s[ i ] );
+		}
+
+		// Get transport
+		transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
+
+		// If no transport, we auto-abort
+		if ( !transport ) {
+			done( -1, "No Transport" );
+		} else {
+			jqXHR.readyState = 1;
+
+			// Send global event
+			if ( fireGlobals ) {
+				globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
+			}
+			// Timeout
+			if ( s.async && s.timeout > 0 ) {
+				timeoutTimer = setTimeout(function() {
+					jqXHR.abort("timeout");
+				}, s.timeout );
+			}
+
+			try {
+				state = 1;
+				transport.send( requestHeaders, done );
+			} catch ( e ) {
+				// Propagate exception as error if not done
+				if ( state < 2 ) {
+					done( -1, e );
+				// Simply rethrow otherwise
+				} else {
+					throw e;
+				}
+			}
+		}
+
+		// Callback for when everything is done
+		function done( status, nativeStatusText, responses, headers ) {
+			var isSuccess, success, error, response, modified,
+				statusText = nativeStatusText;
+
+			// Called once
+			if ( state === 2 ) {
+				return;
+			}
+
+			// State is "done" now
+			state = 2;
+
+			// Clear timeout if it exists
+			if ( timeoutTimer ) {
+				clearTimeout( timeoutTimer );
+			}
+
+			// Dereference transport for early garbage collection
+			// (no matter how long the jqXHR object will be used)
+			transport = undefined;
+
+			// Cache response headers
+			responseHeadersString = headers || "";
+
+			// Set readyState
+			jqXHR.readyState = status > 0 ? 4 : 0;
+
+			// Get response data
+			if ( responses ) {
+				response = ajaxHandleResponses( s, jqXHR, responses );
+			}
+
+			// If successful, handle type chaining
+			if ( status >= 200 && status < 300 || status === 304 ) {
+
+				// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+				if ( s.ifModified ) {
+					modified = jqXHR.getResponseHeader("Last-Modified");
+					if ( modified ) {
+						jQuery.lastModified[ cacheURL ] = modified;
+					}
+					modified = jqXHR.getResponseHeader("etag");
+					if ( modified ) {
+						jQuery.etag[ cacheURL ] = modified;
+					}
+				}
+
+				// if no content
+				if ( status === 204 ) {
+					isSuccess = true;
+					statusText = "nocontent";
+
+				// if not modified
+				} else if ( status === 304 ) {
+					isSuccess = true;
+					statusText = "notmodified";
+
+				// If we have data, let's convert it
+				} else {
+					isSuccess = ajaxConvert( s, response );
+					statusText = isSuccess.state;
+					success = isSuccess.data;
+					error = isSuccess.error;
+					isSuccess = !error;
+				}
+			} else {
+				// We extract error from statusText
+				// then normalize statusText and status for non-aborts
+				error = statusText;
+				if ( status || !statusText ) {
+					statusText = "error";
+					if ( status < 0 ) {
+						status = 0;
+					}
+				}
+			}
+
+			// Set data for the fake xhr object
+			jqXHR.status = status;
+			jqXHR.statusText = ( nativeStatusText || statusText ) + "";
+
+			// Success/Error
+			if ( isSuccess ) {
+				deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
+			} else {
+				deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
+			}
+
+			// Status-dependent callbacks
+			jqXHR.statusCode( statusCode );
+			statusCode = undefined;
+
+			if ( fireGlobals ) {
+				globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
+					[ jqXHR, s, isSuccess ? success : error ] );
+			}
+
+			// Complete
+			completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
+
+			if ( fireGlobals ) {
+				globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
+				// Handle the global AJAX counter
+				if ( !( --jQuery.active ) ) {
+					jQuery.event.trigger("ajaxStop");
+				}
+			}
+		}
+
+		return jqXHR;
+	},
+
+	getScript: function( url, callback ) {
+		return jQuery.get( url, undefined, callback, "script" );
+	},
+
+	getJSON: function( url, data, callback ) {
+		return jQuery.get( url, data, callback, "json" );
+	}
+});
+
+/* Handles responses to an ajax request:
+ * - sets all responseXXX fields accordingly
+ * - finds the right dataType (mediates between content-type and expected dataType)
+ * - returns the corresponding response
+ */
+function ajaxHandleResponses( s, jqXHR, responses ) {
+	var firstDataType, ct, finalDataType, type,
+		contents = s.contents,
+		dataTypes = s.dataTypes,
+		responseFields = s.responseFields;
+
+	// Fill responseXXX fields
+	for ( type in responseFields ) {
+		if ( type in responses ) {
+			jqXHR[ responseFields[type] ] = responses[ type ];
+		}
+	}
+
+	// Remove auto dataType and get content-type in the process
+	while( dataTypes[ 0 ] === "*" ) {
+		dataTypes.shift();
+		if ( ct === undefined ) {
+			ct = s.mimeType || jqXHR.getResponseHeader("Content-Type");
+		}
+	}
+
+	// Check if we're dealing with a known content-type
+	if ( ct ) {
+		for ( type in contents ) {
+			if ( contents[ type ] && contents[ type ].test( ct ) ) {
+				dataTypes.unshift( type );
+				break;
+			}
+		}
+	}
+
+	// Check to see if we have a response for the expected dataType
+	if ( dataTypes[ 0 ] in responses ) {
+		finalDataType = dataTypes[ 0 ];
+	} else {
+		// Try convertible dataTypes
+		for ( type in responses ) {
+			if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) {
+				finalDataType = type;
+				break;
+			}
+			if ( !firstDataType ) {
+				firstDataType = type;
+			}
+		}
+		// Or just use first one
+		finalDataType = finalDataType || firstDataType;
+	}
+
+	// If we found a dataType
+	// We add the dataType to the list if needed
+	// and return the corresponding response
+	if ( finalDataType ) {
+		if ( finalDataType !== dataTypes[ 0 ] ) {
+			dataTypes.unshift( finalDataType );
+		}
+		return responses[ finalDataType ];
+	}
+}
+
+// Chain conversions given the request and the original response
+function ajaxConvert( s, response ) {
+	var conv2, current, conv, tmp,
+		converters = {},
+		i = 0,
+		// Work with a copy of dataTypes in case we need to modify it for conversion
+		dataTypes = s.dataTypes.slice(),
+		prev = dataTypes[ 0 ];
+
+	// Apply the dataFilter if provided
+	if ( s.dataFilter ) {
+		response = s.dataFilter( response, s.dataType );
+	}
+
+	// Create converters map with lowercased keys
+	if ( dataTypes[ 1 ] ) {
+		for ( conv in s.converters ) {
+			converters[ conv.toLowerCase() ] = s.converters[ conv ];
+		}
+	}
+
+	// Convert to each sequential dataType, tolerating list modification
+	for ( ; (current = dataTypes[++i]); ) {
+
+		// There's only work to do if current dataType is non-auto
+		if ( current !== "*" ) {
+
+			// Convert response if prev dataType is non-auto and differs from current
+			if ( prev !== "*" && prev !== current ) {
+
+				// Seek a direct converter
+				conv = converters[ prev + " " + current ] || converters[ "* " + current ];
+
+				// If none found, seek a pair
+				if ( !conv ) {
+					for ( conv2 in converters ) {
+
+						// If conv2 outputs current
+						tmp = conv2.split(" ");
+						if ( tmp[ 1 ] === current ) {
+
+							// If prev can be converted to accepted input
+							conv = converters[ prev + " " + tmp[ 0 ] ] ||
+								converters[ "* " + tmp[ 0 ] ];
+							if ( conv ) {
+								// Condense equivalence converters
+								if ( conv === true ) {
+									conv = converters[ conv2 ];
+
+								// Otherwise, insert the intermediate dataType
+								} else if ( converters[ conv2 ] !== true ) {
+									current = tmp[ 0 ];
+									dataTypes.splice( i--, 0, current );
+								}
+
+								break;
+							}
+						}
+					}
+				}
+
+				// Apply converter (if not an equivalence)
+				if ( conv !== true ) {
+
+					// Unless errors are allowed to bubble, catch and return them
+					if ( conv && s["throws"] ) {
+						response = conv( response );
+					} else {
+						try {
+							response = conv( response );
+						} catch ( e ) {
+							return { state: "parsererror", error: conv ? e : "No conversion from " + prev + " to " + current };
+						}
+					}
+				}
+			}
+
+			// Update prev for next iteration
+			prev = current;
+		}
+	}
+
+	return { state: "success", data: response };
+}
+// Install script dataType
+jQuery.ajaxSetup({
+	accepts: {
+		script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
+	},
+	contents: {
+		script: /(?:java|ecma)script/
+	},
+	converters: {
+		"text script": function( text ) {
+			jQuery.globalEval( text );
+			return text;
+		}
+	}
+});
+
+// Handle cache's special case and global
+jQuery.ajaxPrefilter( "script", function( s ) {
+	if ( s.cache === undefined ) {
+		s.cache = false;
+	}
+	if ( s.crossDomain ) {
+		s.type = "GET";
+		s.global = false;
+	}
+});
+
+// Bind script tag hack transport
+jQuery.ajaxTransport( "script", function(s) {
+
+	// This transport only deals with cross domain requests
+	if ( s.crossDomain ) {
+
+		var script,
+			head = document.head || jQuery("head")[0] || document.documentElement;
+
+		return {
+
+			send: function( _, callback ) {
+
+				script = document.createElement("script");
+
+				script.async = true;
+
+				if ( s.scriptCharset ) {
+					script.charset = s.scriptCharset;
+				}
+
+				script.src = s.url;
+
+				// Attach handlers for all browsers
+				script.onload = script.onreadystatechange = function( _, isAbort ) {
+
+					if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {
+
+						// Handle memory leak in IE
+						script.onload = script.onreadystatechange = null;
+
+						// Remove the script
+						if ( script.parentNode ) {
+							script.parentNode.removeChild( script );
+						}
+
+						// Dereference the script
+						script = null;
+
+						// Callback if not abort
+						if ( !isAbort ) {
+							callback( 200, "success" );
+						}
+					}
+				};
+
+				// Circumvent IE6 bugs with base elements (#2709 and #4378) by prepending
+				// Use native DOM manipulation to avoid our domManip AJAX trickery
+				head.insertBefore( script, head.firstChild );
+			},
+
+			abort: function() {
+				if ( script ) {
+					script.onload( undefined, true );
+				}
+			}
+		};
+	}
+});
+var oldCallbacks = [],
+	rjsonp = /(=)\?(?=&|$)|\?\?/;
+
+// Default jsonp settings
+jQuery.ajaxSetup({
+	jsonp: "callback",
+	jsonpCallback: function() {
+		var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( ajax_nonce++ ) );
+		this[ callback ] = true;
+		return callback;
+	}
+});
+
+// Detect, normalize options and install callbacks for jsonp requests
+jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
+
+	var callbackName, overwritten, responseContainer,
+		jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
+			"url" :
+			typeof s.data === "string" && !( s.contentType || "" ).indexOf("application/x-www-form-urlencoded") && rjsonp.test( s.data ) && "data"
+		);
+
+	// Handle iff the expected data type is "jsonp" or we have a parameter to set
+	if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
+
+		// Get callback name, remembering preexisting value associated with it
+		callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?
+			s.jsonpCallback() :
+			s.jsonpCallback;
+
+		// Insert callback into url or form data
+		if ( jsonProp ) {
+			s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
+		} else if ( s.jsonp !== false ) {
+			s.url += ( ajax_rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
+		}
+
+		// Use data converter to retrieve json after script execution
+		s.converters["script json"] = function() {
+			if ( !responseContainer ) {
+				jQuery.error( callbackName + " was not called" );
+			}
+			return responseContainer[ 0 ];
+		};
+
+		// force json dataType
+		s.dataTypes[ 0 ] = "json";
+
+		// Install callback
+		overwritten = window[ callbackName ];
+		window[ callbackName ] = function() {
+			responseContainer = arguments;
+		};
+
+		// Clean-up function (fires after converters)
+		jqXHR.always(function() {
+			// Restore preexisting value
+			window[ callbackName ] = overwritten;
+
+			// Save back as free
+			if ( s[ callbackName ] ) {
+				// make sure that re-using the options doesn't screw things around
+				s.jsonpCallback = originalSettings.jsonpCallback;
+
+				// save the callback name for future use
+				oldCallbacks.push( callbackName );
+			}
+
+			// Call if it was a function and we have a response
+			if ( responseContainer && jQuery.isFunction( overwritten ) ) {
+				overwritten( responseContainer[ 0 ] );
+			}
+
+			responseContainer = overwritten = undefined;
+		});
+
+		// Delegate to script
+		return "script";
+	}
+});
+var xhrCallbacks, xhrSupported,
+	xhrId = 0,
+	// #5280: Internet Explorer will keep connections alive if we don't abort on unload
+	xhrOnUnloadAbort = window.ActiveXObject && function() {
+		// Abort all pending requests
+		var key;
+		for ( key in xhrCallbacks ) {
+			xhrCallbacks[ key ]( undefined, true );
+		}
+	};
+
+// Functions to create xhrs
+function createStandardXHR() {
+	try {
+		return new window.XMLHttpRequest();
+	} catch( e ) {}
+}
+
+function createActiveXHR() {
+	try {
+		return new window.ActiveXObject("Microsoft.XMLHTTP");
+	} catch( e ) {}
+}
+
+// Create the request object
+// (This is still attached to ajaxSettings for backward compatibility)
+jQuery.ajaxSettings.xhr = window.ActiveXObject ?
+	/* Microsoft failed to properly
+	 * implement the XMLHttpRequest in IE7 (can't request local files),
+	 * so we use the ActiveXObject when it is available
+	 * Additionally XMLHttpRequest can be disabled in IE7/IE8 so
+	 * we need a fallback.
+	 */
+	function() {
+		return !this.isLocal && createStandardXHR() || createActiveXHR();
+	} :
+	// For all other browsers, use the standard XMLHttpRequest object
+	createStandardXHR;
+
+// Determine support properties
+xhrSupported = jQuery.ajaxSettings.xhr();
+jQuery.support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
+xhrSupported = jQuery.support.ajax = !!xhrSupported;
+
+// Create transport if the browser can provide an xhr
+if ( xhrSupported ) {
+
+	jQuery.ajaxTransport(function( s ) {
+		// Cross domain only allowed if supported through XMLHttpRequest
+		if ( !s.crossDomain || jQuery.support.cors ) {
+
+			var callback;
+
+			return {
+				send: function( headers, complete ) {
+
+					// Get a new xhr
+					var handle, i,
+						xhr = s.xhr();
+
+					// Open the socket
+					// Passing null username, generates a login popup on Opera (#2865)
+					if ( s.username ) {
+						xhr.open( s.type, s.url, s.async, s.username, s.password );
+					} else {
+						xhr.open( s.type, s.url, s.async );
+					}
+
+					// Apply custom fields if provided
+					if ( s.xhrFields ) {
+						for ( i in s.xhrFields ) {
+							xhr[ i ] = s.xhrFields[ i ];
+						}
+					}
+
+					// Override mime type if needed
+					if ( s.mimeType && xhr.overrideMimeType ) {
+						xhr.overrideMimeType( s.mimeType );
+					}
+
+					// X-Requested-With header
+					// For cross-domain requests, seeing as conditions for a preflight are
+					// akin to a jigsaw puzzle, we simply never set it to be sure.
+					// (it can always be set on a per-request basis or even using ajaxSetup)
+					// For same-domain requests, won't change header if already provided.
+					if ( !s.crossDomain && !headers["X-Requested-With"] ) {
+						headers["X-Requested-With"] = "XMLHttpRequest";
+					}
+
+					// Need an extra try/catch for cross domain requests in Firefox 3
+					try {
+						for ( i in headers ) {
+							xhr.setRequestHeader( i, headers[ i ] );
+						}
+					} catch( err ) {}
+
+					// Do send the request
+					// This may raise an exception which is actually
+					// handled in jQuery.ajax (so no try/catch here)
+					xhr.send( ( s.hasContent && s.data ) || null );
+
+					// Listener
+					callback = function( _, isAbort ) {
+						var status, responseHeaders, statusText, responses;
+
+						// Firefox throws exceptions when accessing properties
+						// of an xhr when a network error occurred
+						// http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE)
+						try {
+
+							// Was never called and is aborted or complete
+							if ( callback && ( isAbort || xhr.readyState === 4 ) ) {
+
+								// Only called once
+								callback = undefined;
+
+								// Do not keep as active anymore
+								if ( handle ) {
+									xhr.onreadystatechange = jQuery.noop;
+									if ( xhrOnUnloadAbort ) {
+										delete xhrCallbacks[ handle ];
+									}
+								}
+
+								// If it's an abort
+								if ( isAbort ) {
+									// Abort it manually if needed
+									if ( xhr.readyState !== 4 ) {
+										xhr.abort();
+									}
+								} else {
+									responses = {};
+									status = xhr.status;
+									responseHeaders = xhr.getAllResponseHeaders();
+
+									// When requesting binary data, IE6-9 will throw an exception
+									// on any attempt to access responseText (#11426)
+									if ( typeof xhr.responseText === "string" ) {
+										responses.text = xhr.responseText;
+									}
+
+									// Firefox throws an exception when accessing
+									// statusText for faulty cross-domain requests
+									try {
+										statusText = xhr.statusText;
+									} catch( e ) {
+										// We normalize with Webkit giving an empty statusText
+										statusText = "";
+									}
+
+									// Filter status for non standard behaviors
+
+									// If the request is local and we have data: assume a success
+									// (success with no data won't get notified, that's the best we
+									// can do given current implementations)
+									if ( !status && s.isLocal && !s.crossDomain ) {
+										status = responses.text ? 200 : 404;
+									// IE - #1450: sometimes returns 1223 when it should be 204
+									} else if ( status === 1223 ) {
+										status = 204;
+									}
+								}
+							}
+						} catch( firefoxAccessException ) {
+							if ( !isAbort ) {
+								complete( -1, firefoxAccessException );
+							}
+						}
+
+						// Call complete if needed
+						if ( responses ) {
+							complete( status, statusText, responses, responseHeaders );
+						}
+					};
+
+					if ( !s.async ) {
+						// if we're in sync mode we fire the callback
+						callback();
+					} else if ( xhr.readyState === 4 ) {
+						// (IE6 & IE7) if it's in cache and has been
+						// retrieved directly we need to fire the callback
+						setTimeout( callback );
+					} else {
+						handle = ++xhrId;
+						if ( xhrOnUnloadAbort ) {
+							// Create the active xhrs callbacks list if needed
+							// and attach the unload handler
+							if ( !xhrCallbacks ) {
+								xhrCallbacks = {};
+								jQuery( window ).unload( xhrOnUnloadAbort );
+							}
+							// Add to list of active xhrs callbacks
+							xhrCallbacks[ handle ] = callback;
+						}
+						xhr.onreadystatechange = callback;
+					}
+				},
+
+				abort: function() {
+					if ( callback ) {
+						callback( undefined, true );
+					}
+				}
+			};
+		}
+	});
+}
+var fxNow, timerId,
+	rfxtypes = /^(?:toggle|show|hide)$/,
+	rfxnum = new RegExp( "^(?:([+-])=|)(" + core_pnum + ")([a-z%]*)$", "i" ),
+	rrun = /queueHooks$/,
+	animationPrefilters = [ defaultPrefilter ],
+	tweeners = {
+		"*": [function( prop, value ) {
+			var end, unit,
+				tween = this.createTween( prop, value ),
+				parts = rfxnum.exec( value ),
+				target = tween.cur(),
+				start = +target || 0,
+				scale = 1,
+				maxIterations = 20;
+
+			if ( parts ) {
+				end = +parts[2];
+				unit = parts[3] || ( jQuery.cssNumber[ prop ] ? "" : "px" );
+
+				// We need to compute starting value
+				if ( unit !== "px" && start ) {
+					// Iteratively approximate from a nonzero starting point
+					// Prefer the current property, because this process will be trivial if it uses the same units
+					// Fallback to end or a simple constant
+					start = jQuery.css( tween.elem, prop, true ) || end || 1;
+
+					do {
+						// If previous iteration zeroed out, double until we get *something*
+						// Use a string for doubling factor so we don't accidentally see scale as unchanged below
+						scale = scale || ".5";
+
+						// Adjust and apply
+						start = start / scale;
+						jQuery.style( tween.elem, prop, start + unit );
+
+					// Update scale, tolerating zero or NaN from tween.cur()
+					// And breaking the loop if scale is unchanged or perfect, or if we've just had enough
+					} while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations );
+				}
+
+				tween.unit = unit;
+				tween.start = start;
+				// If a +=/-= token was provided, we're doing a relative animation
+				tween.end = parts[1] ? start + ( parts[1] + 1 ) * end : end;
+			}
+			return tween;
+		}]
+	};
+
+// Animations created synchronously will run synchronously
+function createFxNow() {
+	setTimeout(function() {
+		fxNow = undefined;
+	});
+	return ( fxNow = jQuery.now() );
+}
+
+function createTweens( animation, props ) {
+	jQuery.each( props, function( prop, value ) {
+		var collection = ( tweeners[ prop ] || [] ).concat( tweeners[ "*" ] ),
+			index = 0,
+			length = collection.length;
+		for ( ; index < length; index++ ) {
+			if ( collection[ index ].call( animation, prop, value ) ) {
+
+				// we're done with this property
+				return;
+			}
+		}
+	});
+}
+
+function Animation( elem, properties, options ) {
+	var result,
+		stopped,
+		index = 0,
+		length = animationPrefilters.length,
+		deferred = jQuery.Deferred().always( function() {
+			// don't match elem in the :animated selector
+			delete tick.elem;
+		}),
+		tick = function() {
+			if ( stopped ) {
+				return false;
+			}
+			var currentTime = fxNow || createFxNow(),
+				remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
+				// archaic crash bug won't allow us to use 1 - ( 0.5 || 0 ) (#12497)
+				temp = remaining / animation.duration || 0,
+				percent = 1 - temp,
+				index = 0,
+				length = animation.tweens.length;
+
+			for ( ; index < length ; index++ ) {
+				animation.tweens[ index ].run( percent );
+			}
+
+			deferred.notifyWith( elem, [ animation, percent, remaining ]);
+
+			if ( percent < 1 && length ) {
+				return remaining;
+			} else {
+				deferred.resolveWith( elem, [ animation ] );
+				return false;
+			}
+		},
+		animation = deferred.promise({
+			elem: elem,
+			props: jQuery.extend( {}, properties ),
+			opts: jQuery.extend( true, { specialEasing: {} }, options ),
+			originalProperties: properties,
+			originalOptions: options,
+			startTime: fxNow || createFxNow(),
+			duration: options.duration,
+			tweens: [],
+			createTween: function( prop, end ) {
+				var tween = jQuery.Tween( elem, animation.opts, prop, end,
+						animation.opts.specialEasing[ prop ] || animation.opts.easing );
+				animation.tweens.push( tween );
+				return tween;
+			},
+			stop: function( gotoEnd ) {
+				var index = 0,
+					// if we are going to the end, we want to run all the tweens
+					// otherwise we skip this part
+					length = gotoEnd ? animation.tweens.length : 0;
+				if ( stopped ) {
+					return this;
+				}
+				stopped = true;
+				for ( ; index < length ; index++ ) {
+					animation.tweens[ index ].run( 1 );
+				}
+
+				// resolve when we played the last frame
+				// otherwise, reject
+				if ( gotoEnd ) {
+					deferred.resolveWith( elem, [ animation, gotoEnd ] );
+				} else {
+					deferred.rejectWith( elem, [ animation, gotoEnd ] );
+				}
+				return this;
+			}
+		}),
+		props = animation.props;
+
+	propFilter( props, animation.opts.specialEasing );
+
+	for ( ; index < length ; index++ ) {
+		result = animationPrefilters[ index ].call( animation, elem, props, animation.opts );
+		if ( result ) {
+			return result;
+		}
+	}
+
+	createTweens( animation, props );
+
+	if ( jQuery.isFunction( animation.opts.start ) ) {
+		animation.opts.start.call( elem, animation );
+	}
+
+	jQuery.fx.timer(
+		jQuery.extend( tick, {
+			elem: elem,
+			anim: animation,
+			queue: animation.opts.queue
+		})
+	);
+
+	// attach callbacks from options
+	return animation.progress( animation.opts.progress )
+		.done( animation.opts.done, animation.opts.complete )
+		.fail( animation.opts.fail )
+		.always( animation.opts.always );
+}
+
+function propFilter( props, specialEasing ) {
+	var value, name, index, easing, hooks;
+
+	// camelCase, specialEasing and expand cssHook pass
+	for ( index in props ) {
+		name = jQuery.camelCase( index );
+		easing = specialEasing[ name ];
+		value = props[ index ];
+		if ( jQuery.isArray( value ) ) {
+			easing = value[ 1 ];
+			value = props[ index ] = value[ 0 ];
+		}
+
+		if ( index !== name ) {
+			props[ name ] = value;
+			delete props[ index ];
+		}
+
+		hooks = jQuery.cssHooks[ name ];
+		if ( hooks && "expand" in hooks ) {
+			value = hooks.expand( value );
+			delete props[ name ];
+
+			// not quite $.extend, this wont overwrite keys already present.
+			// also - reusing 'index' from above because we have the correct "name"
+			for ( index in value ) {
+				if ( !( index in props ) ) {
+					props[ index ] = value[ index ];
+					specialEasing[ index ] = easing;
+				}
+			}
+		} else {
+			specialEasing[ name ] = easing;
+		}
+	}
+}
+
+jQuery.Animation = jQuery.extend( Animation, {
+
+	tweener: function( props, callback ) {
+		if ( jQuery.isFunction( props ) ) {
+			callback = props;
+			props = [ "*" ];
+		} else {
+			props = props.split(" ");
+		}
+
+		var prop,
+			index = 0,
+			length = props.length;
+
+		for ( ; index < length ; index++ ) {
+			prop = props[ index ];
+			tweeners[ prop ] = tweeners[ prop ] || [];
+			tweeners[ prop ].unshift( callback );
+		}
+	},
+
+	prefilter: function( callback, prepend ) {
+		if ( prepend ) {
+			animationPrefilters.unshift( callback );
+		} else {
+			animationPrefilters.push( callback );
+		}
+	}
+});
+
+function defaultPrefilter( elem, props, opts ) {
+	/*jshint validthis:true */
+	var prop, index, length,
+		value, dataShow, toggle,
+		tween, hooks, oldfire,
+		anim = this,
+		style = elem.style,
+		orig = {},
+		handled = [],
+		hidden = elem.nodeType && isHidden( elem );
+
+	// handle queue: false promises
+	if ( !opts.queue ) {
+		hooks = jQuery._queueHooks( elem, "fx" );
+		if ( hooks.unqueued == null ) {
+			hooks.unqueued = 0;
+			oldfire = hooks.empty.fire;
+			hooks.empty.fire = function() {
+				if ( !hooks.unqueued ) {
+					oldfire();
+				}
+			};
+		}
+		hooks.unqueued++;
+
+		anim.always(function() {
+			// doing this makes sure that the complete handler will be called
+			// before this completes
+			anim.always(function() {
+				hooks.unqueued--;
+				if ( !jQuery.queue( elem, "fx" ).length ) {
+					hooks.empty.fire();
+				}
+			});
+		});
+	}
+
+	// height/width overflow pass
+	if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) {
+		// Make sure that nothing sneaks out
+		// Record all 3 overflow attributes because IE does not
+		// change the overflow attribute when overflowX and
+		// overflowY are set to the same value
+		opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
+
+		// Set display property to inline-block for height/width
+		// animations on inline elements that are having width/height animated
+		if ( jQuery.css( elem, "display" ) === "inline" &&
+				jQuery.css( elem, "float" ) === "none" ) {
+
+			// inline-level elements accept inline-block;
+			// block-level elements need to be inline with layout
+			if ( !jQuery.support.inlineBlockNeedsLayout || css_defaultDisplay( elem.nodeName ) === "inline" ) {
+				style.display = "inline-block";
+
+			} else {
+				style.zoom = 1;
+			}
+		}
+	}
+
+	if ( opts.overflow ) {
+		style.overflow = "hidden";
+		if ( !jQuery.support.shrinkWrapBlocks ) {
+			anim.always(function() {
+				style.overflow = opts.overflow[ 0 ];
+				style.overflowX = opts.overflow[ 1 ];
+				style.overflowY = opts.overflow[ 2 ];
+			});
+		}
+	}
+
+
+	// show/hide pass
+	for ( index in props ) {
+		value = props[ index ];
+		if ( rfxtypes.exec( value ) ) {
+			delete props[ index ];
+			toggle = toggle || value === "toggle";
+			if ( value === ( hidden ? "hide" : "show" ) ) {
+				continue;
+			}
+			handled.push( index );
+		}
+	}
+
+	length = handled.length;
+	if ( length ) {
+		dataShow = jQuery._data( elem, "fxshow" ) || jQuery._data( elem, "fxshow", {} );
+		if ( "hidden" in dataShow ) {
+			hidden = dataShow.hidden;
+		}
+
+		// store state if its toggle - enables .stop().toggle() to "reverse"
+		if ( toggle ) {
+			dataShow.hidden = !hidden;
+		}
+		if ( hidden ) {
+			jQuery( elem ).show();
+		} else {
+			anim.done(function() {
+				jQuery( elem ).hide();
+			});
+		}
+		anim.done(function() {
+			var prop;
+			jQuery._removeData( elem, "fxshow" );
+			for ( prop in orig ) {
+				jQuery.style( elem, prop, orig[ prop ] );
+			}
+		});
+		for ( index = 0 ; index < length ; index++ ) {
+			prop = handled[ index ];
+			tween = anim.createTween( prop, hidden ? dataShow[ prop ] : 0 );
+			orig[ prop ] = dataShow[ prop ] || jQuery.style( elem, prop );
+
+			if ( !( prop in dataShow ) ) {
+				dataShow[ prop ] = tween.start;
+				if ( hidden ) {
+					tween.end = tween.start;
+					tween.start = prop === "width" || prop === "height" ? 1 : 0;
+				}
+			}
+		}
+	}
+}
+
+function Tween( elem, options, prop, end, easing ) {
+	return new Tween.prototype.init( elem, options, prop, end, easing );
+}
+jQuery.Tween = Tween;
+
+Tween.prototype = {
+	constructor: Tween,
+	init: function( elem, options, prop, end, easing, unit ) {
+		this.elem = elem;
+		this.prop = prop;
+		this.easing = easing || "swing";
+		this.options = options;
+		this.start = this.now = this.cur();
+		this.end = end;
+		this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
+	},
+	cur: function() {
+		var hooks = Tween.propHooks[ this.prop ];
+
+		return hooks && hooks.get ?
+			hooks.get( this ) :
+			Tween.propHooks._default.get( this );
+	},
+	run: function( percent ) {
+		var eased,
+			hooks = Tween.propHooks[ this.prop ];
+
+		if ( this.options.duration ) {
+			this.pos = eased = jQuery.easing[ this.easing ](
+				percent, this.options.duration * percent, 0, 1, this.options.duration
+			);
+		} else {
+			this.pos = eased = percent;
+		}
+		this.now = ( this.end - this.start ) * eased + this.start;
+
+		if ( this.options.step ) {
+			this.options.step.call( this.elem, this.now, this );
+		}
+
+		if ( hooks && hooks.set ) {
+			hooks.set( this );
+		} else {
+			Tween.propHooks._default.set( this );
+		}
+		return this;
+	}
+};
+
+Tween.prototype.init.prototype = Tween.prototype;
+
+Tween.propHooks = {
+	_default: {
+		get: function( tween ) {
+			var result;
+
+			if ( tween.elem[ tween.prop ] != null &&
+				(!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) {
+				return tween.elem[ tween.prop ];
+			}
+
+			// passing an empty string as a 3rd parameter to .css will automatically
+			// attempt a parseFloat and fallback to a string if the parse fails
+			// so, simple values such as "10px" are parsed to Float.
+			// complex values such as "rotate(1rad)" are returned as is.
+			result = jQuery.css( tween.elem, tween.prop, "" );
+			// Empty strings, null, undefined and "auto" are converted to 0.
+			return !result || result === "auto" ? 0 : result;
+		},
+		set: function( tween ) {
+			// use step hook for back compat - use cssHook if its there - use .style if its
+			// available and use plain properties where available
+			if ( jQuery.fx.step[ tween.prop ] ) {
+				jQuery.fx.step[ tween.prop ]( tween );
+			} else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) {
+				jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
+			} else {
+				tween.elem[ tween.prop ] = tween.now;
+			}
+		}
+	}
+};
+
+// Remove in 2.0 - this supports IE8's panic based approach
+// to setting things on disconnected nodes
+
+Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
+	set: function( tween ) {
+		if ( tween.elem.nodeType && tween.elem.parentNode ) {
+			tween.elem[ tween.prop ] = tween.now;
+		}
+	}
+};
+
+jQuery.each([ "toggle", "show", "hide" ], function( i, name ) {
+	var cssFn = jQuery.fn[ name ];
+	jQuery.fn[ name ] = function( speed, easing, callback ) {
+		return speed == null || typeof speed === "boolean" ?
+			cssFn.apply( this, arguments ) :
+			this.animate( genFx( name, true ), speed, easing, callback );
+	};
+});
+
+jQuery.fn.extend({
+	fadeTo: function( speed, to, easing, callback ) {
+
+		// show any hidden elements after setting opacity to 0
+		return this.filter( isHidden ).css( "opacity", 0 ).show()
+
+			// animate to the value specified
+			.end().animate({ opacity: to }, speed, easing, callback );
+	},
+	animate: function( prop, speed, easing, callback ) {
+		var empty = jQuery.isEmptyObject( prop ),
+			optall = jQuery.speed( speed, easing, callback ),
+			doAnimation = function() {
+				// Operate on a copy of prop so per-property easing won't be lost
+				var anim = Animation( this, jQuery.extend( {}, prop ), optall );
+				doAnimation.finish = function() {
+					anim.stop( true );
+				};
+				// Empty animations, or finishing resolves immediately
+				if ( empty || jQuery._data( this, "finish" ) ) {
+					anim.stop( true );
+				}
+			};
+			doAnimation.finish = doAnimation;
+
+		return empty || optall.queue === false ?
+			this.each( doAnimation ) :
+			this.queue( optall.queue, doAnimation );
+	},
+	stop: function( type, clearQueue, gotoEnd ) {
+		var stopQueue = function( hooks ) {
+			var stop = hooks.stop;
+			delete hooks.stop;
+			stop( gotoEnd );
+		};
+
+		if ( typeof type !== "string" ) {
+			gotoEnd = clearQueue;
+			clearQueue = type;
+			type = undefined;
+		}
+		if ( clearQueue && type !== false ) {
+			this.queue( type || "fx", [] );
+		}
+
+		return this.each(function() {
+			var dequeue = true,
+				index = type != null && type + "queueHooks",
+				timers = jQuery.timers,
+				data = jQuery._data( this );
+
+			if ( index ) {
+				if ( data[ index ] && data[ index ].stop ) {
+					stopQueue( data[ index ] );
+				}
+			} else {
+				for ( index in data ) {
+					if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
+						stopQueue( data[ index ] );
+					}
+				}
+			}
+
+			for ( index = timers.length; index--; ) {
+				if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {
+					timers[ index ].anim.stop( gotoEnd );
+					dequeue = false;
+					timers.splice( index, 1 );
+				}
+			}
+
+			// start the next in the queue if the last step wasn't forced
+			// timers currently will call their complete callbacks, which will dequeue
+			// but only if they were gotoEnd
+			if ( dequeue || !gotoEnd ) {
+				jQuery.dequeue( this, type );
+			}
+		});
+	},
+	finish: function( type ) {
+		if ( type !== false ) {
+			type = type || "fx";
+		}
+		return this.each(function() {
+			var index,
+				data = jQuery._data( this ),
+				queue = data[ type + "queue" ],
+				hooks = data[ type + "queueHooks" ],
+				timers = jQuery.timers,
+				length = queue ? queue.length : 0;
+
+			// enable finishing flag on private data
+			data.finish = true;
+
+			// empty the queue first
+			jQuery.queue( this, type, [] );
+
+			if ( hooks && hooks.cur && hooks.cur.finish ) {
+				hooks.cur.finish.call( this );
+			}
+
+			// look for any active animations, and finish them
+			for ( index = timers.length; index--; ) {
+				if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
+					timers[ index ].anim.stop( true );
+					timers.splice( index, 1 );
+				}
+			}
+
+			// look for any animations in the old queue and finish them
+			for ( index = 0; index < length; index++ ) {
+				if ( queue[ index ] && queue[ index ].finish ) {
+					queue[ index ].finish.call( this );
+				}
+			}
+
+			// turn off finishing flag
+			delete data.finish;
+		});
+	}
+});
+
+// Generate parameters to create a standard animation
+function genFx( type, includeWidth ) {
+	var which,
+		attrs = { height: type },
+		i = 0;
+
+	// if we include width, step value is 1 to do all cssExpand values,
+	// if we don't include width, step value is 2 to skip over Left and Right
+	includeWidth = includeWidth? 1 : 0;
+	for( ; i < 4 ; i += 2 - includeWidth ) {
+		which = cssExpand[ i ];
+		attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
+	}
+
+	if ( includeWidth ) {
+		attrs.opacity = attrs.width = type;
+	}
+
+	return attrs;
+}
+
+// Generate shortcuts for custom animations
+jQuery.each({
+	slideDown: genFx("show"),
+	slideUp: genFx("hide"),
+	slideToggle: genFx("toggle"),
+	fadeIn: { opacity: "show" },
+	fadeOut: { opacity: "hide" },
+	fadeToggle: { opacity: "toggle" }
+}, function( name, props ) {
+	jQuery.fn[ name ] = function( speed, easing, callback ) {
+		return this.animate( props, speed, easing, callback );
+	};
+});
+
+jQuery.speed = function( speed, easing, fn ) {
+	var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
+		complete: fn || !fn && easing ||
+			jQuery.isFunction( speed ) && speed,
+		duration: speed,
+		easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
+	};
+
+	opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
+		opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;
+
+	// normalize opt.queue - true/undefined/null -> "fx"
+	if ( opt.queue == null || opt.queue === true ) {
+		opt.queue = "fx";
+	}
+
+	// Queueing
+	opt.old = opt.complete;
+
+	opt.complete = function() {
+		if ( jQuery.isFunction( opt.old ) ) {
+			opt.old.call( this );
+		}
+
+		if ( opt.queue ) {
+			jQuery.dequeue( this, opt.queue );
+		}
+	};
+
+	return opt;
+};
+
+jQuery.easing = {
+	linear: function( p ) {
+		return p;
+	},
+	swing: function( p ) {
+		return 0.5 - Math.cos( p*Math.PI ) / 2;
+	}
+};
+
+jQuery.timers = [];
+jQuery.fx = Tween.prototype.init;
+jQuery.fx.tick = function() {
+	var timer,
+		timers = jQuery.timers,
+		i = 0;
+
+	fxNow = jQuery.now();
+
+	for ( ; i < timers.length; i++ ) {
+		timer = timers[ i ];
+		// Checks the timer has not already been removed
+		if ( !timer() && timers[ i ] === timer ) {
+			timers.splice( i--, 1 );
+		}
+	}
+
+	if ( !timers.length ) {
+		jQuery.fx.stop();
+	}
+	fxNow = undefined;
+};
+
+jQuery.fx.timer = function( timer ) {
+	if ( timer() && jQuery.timers.push( timer ) ) {
+		jQuery.fx.start();
+	}
+};
+
+jQuery.fx.interval = 13;
+
+jQuery.fx.start = function() {
+	if ( !timerId ) {
+		timerId = setInterval( jQuery.fx.tick, jQuery.fx.interval );
+	}
+};
+
+jQuery.fx.stop = function() {
+	clearInterval( timerId );
+	timerId = null;
+};
+
+jQuery.fx.speeds = {
+	slow: 600,
+	fast: 200,
+	// Default speed
+	_default: 400
+};
+
+// Back Compat <1.8 extension point
+jQuery.fx.step = {};
+
+if ( jQuery.expr && jQuery.expr.filters ) {
+	jQuery.expr.filters.animated = function( elem ) {
+		return jQuery.grep(jQuery.timers, function( fn ) {
+			return elem === fn.elem;
+		}).length;
+	};
+}
+jQuery.fn.offset = function( options ) {
+	if ( arguments.length ) {
+		return options === undefined ?
+			this :
+			this.each(function( i ) {
+				jQuery.offset.setOffset( this, options, i );
+			});
+	}
+
+	var docElem, win,
+		box = { top: 0, left: 0 },
+		elem = this[ 0 ],
+		doc = elem && elem.ownerDocument;
+
+	if ( !doc ) {
+		return;
+	}
+
+	docElem = doc.documentElement;
+
+	// Make sure it's not a disconnected DOM node
+	if ( !jQuery.contains( docElem, elem ) ) {
+		return box;
+	}
+
+	// If we don't have gBCR, just use 0,0 rather than error
+	// BlackBerry 5, iOS 3 (original iPhone)
+	if ( typeof elem.getBoundingClientRect !== core_strundefined ) {
+		box = elem.getBoundingClientRect();
+	}
+	win = getWindow( doc );
+	return {
+		top: box.top  + ( win.pageYOffset || docElem.scrollTop )  - ( docElem.clientTop  || 0 ),
+		left: box.left + ( win.pageXOffset || docElem.scrollLeft ) - ( docElem.clientLeft || 0 )
+	};
+};
+
+jQuery.offset = {
+
+	setOffset: function( elem, options, i ) {
+		var position = jQuery.css( elem, "position" );
+
+		// set position first, in-case top/left are set even on static elem
+		if ( position === "static" ) {
+			elem.style.position = "relative";
+		}
+
+		var curElem = jQuery( elem ),
+			curOffset = curElem.offset(),
+			curCSSTop = jQuery.css( elem, "top" ),
+			curCSSLeft = jQuery.css( elem, "left" ),
+			calculatePosition = ( position === "absolute" || position === "fixed" ) && jQuery.inArray("auto", [curCSSTop, curCSSLeft]) > -1,
+			props = {}, curPosition = {}, curTop, curLeft;
+
+		// need to be able to calculate position if either top or left is auto and position is either absolute or fixed
+		if ( calculatePosition ) {
+			curPosition = curElem.position();
+			curTop = curPosition.top;
+			curLeft = curPosition.left;
+		} else {
+			curTop = parseFloat( curCSSTop ) || 0;
+			curLeft = parseFloat( curCSSLeft ) || 0;
+		}
+
+		if ( jQuery.isFunction( options ) ) {
+			options = options.call( elem, i, curOffset );
+		}
+
+		if ( options.top != null ) {
+			props.top = ( options.top - curOffset.top ) + curTop;
+		}
+		if ( options.left != null ) {
+			props.left = ( options.left - curOffset.left ) + curLeft;
+		}
+
+		if ( "using" in options ) {
+			options.using.call( elem, props );
+		} else {
+			curElem.css( props );
+		}
+	}
+};
+
+
+jQuery.fn.extend({
+
+	position: function() {
+		if ( !this[ 0 ] ) {
+			return;
+		}
+
+		var offsetParent, offset,
+			parentOffset = { top: 0, left: 0 },
+			elem = this[ 0 ];
+
+		// fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is it's only offset parent
+		if ( jQuery.css( elem, "position" ) === "fixed" ) {
+			// we assume that getBoundingClientRect is available when computed position is fixed
+			offset = elem.getBoundingClientRect();
+		} else {
+			// Get *real* offsetParent
+			offsetParent = this.offsetParent();
+
+			// Get correct offsets
+			offset = this.offset();
+			if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) {
+				parentOffset = offsetParent.offset();
+			}
+
+			// Add offsetParent borders
+			parentOffset.top  += jQuery.css( offsetParent[ 0 ], "borderTopWidth", true );
+			parentOffset.left += jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true );
+		}
+
+		// Subtract parent offsets and element margins
+		// note: when an element has margin: auto the offsetLeft and marginLeft
+		// are the same in Safari causing offset.left to incorrectly be 0
+		return {
+			top:  offset.top  - parentOffset.top - jQuery.css( elem, "marginTop", true ),
+			left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true)
+		};
+	},
+
+	offsetParent: function() {
+		return this.map(function() {
+			var offsetParent = this.offsetParent || document.documentElement;
+			while ( offsetParent && ( !jQuery.nodeName( offsetParent, "html" ) && jQuery.css( offsetParent, "position") === "static" ) ) {
+				offsetParent = offsetParent.offsetParent;
+			}
+			return offsetParent || document.documentElement;
+		});
+	}
+});
+
+
+// Create scrollLeft and scrollTop methods
+jQuery.each( {scrollLeft: "pageXOffset", scrollTop: "pageYOffset"}, function( method, prop ) {
+	var top = /Y/.test( prop );
+
+	jQuery.fn[ method ] = function( val ) {
+		return jQuery.access( this, function( elem, method, val ) {
+			var win = getWindow( elem );
+
+			if ( val === undefined ) {
+				return win ? (prop in win) ? win[ prop ] :
+					win.document.documentElement[ method ] :
+					elem[ method ];
+			}
+
+			if ( win ) {
+				win.scrollTo(
+					!top ? val : jQuery( win ).scrollLeft(),
+					top ? val : jQuery( win ).scrollTop()
+				);
+
+			} else {
+				elem[ method ] = val;
+			}
+		}, method, val, arguments.length, null );
+	};
+});
+
+function getWindow( elem ) {
+	return jQuery.isWindow( elem ) ?
+		elem :
+		elem.nodeType === 9 ?
+			elem.defaultView || elem.parentWindow :
+			false;
+}
+// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
+jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
+	jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, function( defaultExtra, funcName ) {
+		// margin is only for outerHeight, outerWidth
+		jQuery.fn[ funcName ] = function( margin, value ) {
+			var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
+				extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
+
+			return jQuery.access( this, function( elem, type, value ) {
+				var doc;
+
+				if ( jQuery.isWindow( elem ) ) {
+					// As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there
+					// isn't a whole lot we can do. See pull request at this URL for discussion:
+					// https://github.com/jquery/jquery/pull/764
+					return elem.document.documentElement[ "client" + name ];
+				}
+
+				// Get document width or height
+				if ( elem.nodeType === 9 ) {
+					doc = elem.documentElement;
+
+					// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], whichever is greatest
+					// unfortunately, this causes bug #3838 in IE6/8 only, but there is currently no good, small way to fix it.
+					return Math.max(
+						elem.body[ "scroll" + name ], doc[ "scroll" + name ],
+						elem.body[ "offset" + name ], doc[ "offset" + name ],
+						doc[ "client" + name ]
+					);
+				}
+
+				return value === undefined ?
+					// Get width or height on the element, requesting but not forcing parseFloat
+					jQuery.css( elem, type, extra ) :
+
+					// Set width or height on the element
+					jQuery.style( elem, type, value, extra );
+			}, type, chainable ? margin : undefined, chainable, null );
+		};
+	});
+});
+// Limit scope pollution from any deprecated API
+// (function() {
+
+// })();
+// Expose jQuery to the global object
+window.jQuery = window.$ = jQuery;
+
+// Expose jQuery as an AMD module, but only for AMD loaders that
+// understand the issues with loading multiple versions of jQuery
+// in a page that all might call define(). The loader will indicate
+// they have special allowances for multiple jQuery versions by
+// specifying define.amd.jQuery = true. Register as a named module,
+// since jQuery can be concatenated with other files that may use define,
+// but not use a proper concatenation script that understands anonymous
+// AMD modules. A named AMD is safest and most robust way to register.
+// Lowercase jquery is used because AMD module names are derived from
+// file names, and jQuery is normally delivered in a lowercase file name.
+// Do this after creating the global so that if an AMD module wants to call
+// noConflict to hide this version of jQuery, it will work.
+if ( typeof define === "function" && define.amd && define.amd.jQuery ) {
+	define( "jquery", [], function () { return jQuery; } );
+}
+
+})( window );
\ No newline at end of file
diff --git a/vendor/dimsemenov/magnific-popup/website/third-party-libs/jquery.min.js b/vendor/dimsemenov/magnific-popup/website/third-party-libs/jquery.min.js
new file mode 100644
index 0000000000000000000000000000000000000000..50d1b22f274d2cc896a3686a2b8ec373536e8e57
--- /dev/null
+++ b/vendor/dimsemenov/magnific-popup/website/third-party-libs/jquery.min.js
@@ -0,0 +1,4 @@
+/*! jQuery v1.9.0 | (c) 2005, 2012 jQuery Foundation, Inc. | jquery.org/license */(function(e,t){"use strict";function n(e){var t=e.length,n=st.type(e);return st.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||"function"!==n&&(0===t||"number"==typeof t&&t>0&&t-1 in e)}function r(e){var t=Tt[e]={};return st.each(e.match(lt)||[],function(e,n){t[n]=!0}),t}function i(e,n,r,i){if(st.acceptData(e)){var o,a,s=st.expando,u="string"==typeof n,l=e.nodeType,c=l?st.cache:e,f=l?e[s]:e[s]&&s;if(f&&c[f]&&(i||c[f].data)||!u||r!==t)return f||(l?e[s]=f=K.pop()||st.guid++:f=s),c[f]||(c[f]={},l||(c[f].toJSON=st.noop)),("object"==typeof n||"function"==typeof n)&&(i?c[f]=st.extend(c[f],n):c[f].data=st.extend(c[f].data,n)),o=c[f],i||(o.data||(o.data={}),o=o.data),r!==t&&(o[st.camelCase(n)]=r),u?(a=o[n],null==a&&(a=o[st.camelCase(n)])):a=o,a}}function o(e,t,n){if(st.acceptData(e)){var r,i,o,a=e.nodeType,u=a?st.cache:e,l=a?e[st.expando]:st.expando;if(u[l]){if(t&&(r=n?u[l]:u[l].data)){st.isArray(t)?t=t.concat(st.map(t,st.camelCase)):t in r?t=[t]:(t=st.camelCase(t),t=t in r?[t]:t.split(" "));for(i=0,o=t.length;o>i;i++)delete r[t[i]];if(!(n?s:st.isEmptyObject)(r))return}(n||(delete u[l].data,s(u[l])))&&(a?st.cleanData([e],!0):st.support.deleteExpando||u!=u.window?delete u[l]:u[l]=null)}}}function a(e,n,r){if(r===t&&1===e.nodeType){var i="data-"+n.replace(Nt,"-$1").toLowerCase();if(r=e.getAttribute(i),"string"==typeof r){try{r="true"===r?!0:"false"===r?!1:"null"===r?null:+r+""===r?+r:wt.test(r)?st.parseJSON(r):r}catch(o){}st.data(e,n,r)}else r=t}return r}function s(e){var t;for(t in e)if(("data"!==t||!st.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}function u(){return!0}function l(){return!1}function c(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}function f(e,t,n){if(t=t||0,st.isFunction(t))return st.grep(e,function(e,r){var i=!!t.call(e,r,e);return i===n});if(t.nodeType)return st.grep(e,function(e){return e===t===n});if("string"==typeof t){var r=st.grep(e,function(e){return 1===e.nodeType});if(Wt.test(t))return st.filter(t,r,!n);t=st.filter(t,r)}return st.grep(e,function(e){return st.inArray(e,t)>=0===n})}function p(e){var t=zt.split("|"),n=e.createDocumentFragment();if(n.createElement)for(;t.length;)n.createElement(t.pop());return n}function d(e,t){return e.getElementsByTagName(t)[0]||e.appendChild(e.ownerDocument.createElement(t))}function h(e){var t=e.getAttributeNode("type");return e.type=(t&&t.specified)+"/"+e.type,e}function g(e){var t=nn.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function m(e,t){for(var n,r=0;null!=(n=e[r]);r++)st._data(n,"globalEval",!t||st._data(t[r],"globalEval"))}function y(e,t){if(1===t.nodeType&&st.hasData(e)){var n,r,i,o=st._data(e),a=st._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(r=0,i=s[n].length;i>r;r++)st.event.add(t,n,s[n][r])}a.data&&(a.data=st.extend({},a.data))}}function v(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!st.support.noCloneEvent&&t[st.expando]){r=st._data(t);for(i in r.events)st.removeEvent(t,i,r.handle);t.removeAttribute(st.expando)}"script"===n&&t.text!==e.text?(h(t).text=e.text,g(t)):"object"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),st.support.html5Clone&&e.innerHTML&&!st.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):"input"===n&&Zt.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):"option"===n?t.defaultSelected=t.selected=e.defaultSelected:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}}function b(e,n){var r,i,o=0,a=e.getElementsByTagName!==t?e.getElementsByTagName(n||"*"):e.querySelectorAll!==t?e.querySelectorAll(n||"*"):t;if(!a)for(a=[],r=e.childNodes||e;null!=(i=r[o]);o++)!n||st.nodeName(i,n)?a.push(i):st.merge(a,b(i,n));return n===t||n&&st.nodeName(e,n)?st.merge([e],a):a}function x(e){Zt.test(e.type)&&(e.defaultChecked=e.checked)}function T(e,t){if(t in e)return t;for(var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=Nn.length;i--;)if(t=Nn[i]+n,t in e)return t;return r}function w(e,t){return e=t||e,"none"===st.css(e,"display")||!st.contains(e.ownerDocument,e)}function N(e,t){for(var n,r=[],i=0,o=e.length;o>i;i++)n=e[i],n.style&&(r[i]=st._data(n,"olddisplay"),t?(r[i]||"none"!==n.style.display||(n.style.display=""),""===n.style.display&&w(n)&&(r[i]=st._data(n,"olddisplay",S(n.nodeName)))):r[i]||w(n)||st._data(n,"olddisplay",st.css(n,"display")));for(i=0;o>i;i++)n=e[i],n.style&&(t&&"none"!==n.style.display&&""!==n.style.display||(n.style.display=t?r[i]||"":"none"));return e}function C(e,t,n){var r=mn.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function k(e,t,n,r,i){for(var o=n===(r?"border":"content")?4:"width"===t?1:0,a=0;4>o;o+=2)"margin"===n&&(a+=st.css(e,n+wn[o],!0,i)),r?("content"===n&&(a-=st.css(e,"padding"+wn[o],!0,i)),"margin"!==n&&(a-=st.css(e,"border"+wn[o]+"Width",!0,i))):(a+=st.css(e,"padding"+wn[o],!0,i),"padding"!==n&&(a+=st.css(e,"border"+wn[o]+"Width",!0,i)));return a}function E(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=ln(e),a=st.support.boxSizing&&"border-box"===st.css(e,"boxSizing",!1,o);if(0>=i||null==i){if(i=un(e,t,o),(0>i||null==i)&&(i=e.style[t]),yn.test(i))return i;r=a&&(st.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+k(e,t,n||(a?"border":"content"),r,o)+"px"}function S(e){var t=V,n=bn[e];return n||(n=A(e,t),"none"!==n&&n||(cn=(cn||st("<iframe frameborder='0' width='0' height='0'/>").css("cssText","display:block !important")).appendTo(t.documentElement),t=(cn[0].contentWindow||cn[0].contentDocument).document,t.write("<!doctype html><html><body>"),t.close(),n=A(e,t),cn.detach()),bn[e]=n),n}function A(e,t){var n=st(t.createElement(e)).appendTo(t.body),r=st.css(n[0],"display");return n.remove(),r}function j(e,t,n,r){var i;if(st.isArray(t))st.each(t,function(t,i){n||kn.test(e)?r(e,i):j(e+"["+("object"==typeof i?t:"")+"]",i,n,r)});else if(n||"object"!==st.type(t))r(e,t);else for(i in t)j(e+"["+i+"]",t[i],n,r)}function D(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(lt)||[];if(st.isFunction(n))for(;r=o[i++];)"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function L(e,n,r,i){function o(u){var l;return a[u]=!0,st.each(e[u]||[],function(e,u){var c=u(n,r,i);return"string"!=typeof c||s||a[c]?s?!(l=c):t:(n.dataTypes.unshift(c),o(c),!1)}),l}var a={},s=e===$n;return o(n.dataTypes[0])||!a["*"]&&o("*")}function H(e,n){var r,i,o=st.ajaxSettings.flatOptions||{};for(r in n)n[r]!==t&&((o[r]?e:i||(i={}))[r]=n[r]);return i&&st.extend(!0,e,i),e}function M(e,n,r){var i,o,a,s,u=e.contents,l=e.dataTypes,c=e.responseFields;for(o in c)o in r&&(n[c[o]]=r[o]);for(;"*"===l[0];)l.shift(),i===t&&(i=e.mimeType||n.getResponseHeader("Content-Type"));if(i)for(o in u)if(u[o]&&u[o].test(i)){l.unshift(o);break}if(l[0]in r)a=l[0];else{for(o in r){if(!l[0]||e.converters[o+" "+l[0]]){a=o;break}s||(s=o)}a=a||s}return a?(a!==l[0]&&l.unshift(a),r[a]):t}function q(e,t){var n,r,i,o,a={},s=0,u=e.dataTypes.slice(),l=u[0];if(e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u[1])for(n in e.converters)a[n.toLowerCase()]=e.converters[n];for(;i=u[++s];)if("*"!==i){if("*"!==l&&l!==i){if(n=a[l+" "+i]||a["* "+i],!n)for(r in a)if(o=r.split(" "),o[1]===i&&(n=a[l+" "+o[0]]||a["* "+o[0]])){n===!0?n=a[r]:a[r]!==!0&&(i=o[0],u.splice(s--,0,i));break}if(n!==!0)if(n&&e["throws"])t=n(t);else try{t=n(t)}catch(c){return{state:"parsererror",error:n?c:"No conversion from "+l+" to "+i}}}l=i}return{state:"success",data:t}}function _(){try{return new e.XMLHttpRequest}catch(t){}}function F(){try{return new e.ActiveXObject("Microsoft.XMLHTTP")}catch(t){}}function O(){return setTimeout(function(){Qn=t}),Qn=st.now()}function B(e,t){st.each(t,function(t,n){for(var r=(rr[t]||[]).concat(rr["*"]),i=0,o=r.length;o>i;i++)if(r[i].call(e,t,n))return})}function P(e,t,n){var r,i,o=0,a=nr.length,s=st.Deferred().always(function(){delete u.elem}),u=function(){if(i)return!1;for(var t=Qn||O(),n=Math.max(0,l.startTime+l.duration-t),r=n/l.duration||0,o=1-r,a=0,u=l.tweens.length;u>a;a++)l.tweens[a].run(o);return s.notifyWith(e,[l,o,n]),1>o&&u?n:(s.resolveWith(e,[l]),!1)},l=s.promise({elem:e,props:st.extend({},t),opts:st.extend(!0,{specialEasing:{}},n),originalProperties:t,originalOptions:n,startTime:Qn||O(),duration:n.duration,tweens:[],createTween:function(t,n){var r=st.Tween(e,l.opts,t,n,l.opts.specialEasing[t]||l.opts.easing);return l.tweens.push(r),r},stop:function(t){var n=0,r=t?l.tweens.length:0;if(i)return this;for(i=!0;r>n;n++)l.tweens[n].run(1);return t?s.resolveWith(e,[l,t]):s.rejectWith(e,[l,t]),this}}),c=l.props;for(R(c,l.opts.specialEasing);a>o;o++)if(r=nr[o].call(l,e,c,l.opts))return r;return B(l,c),st.isFunction(l.opts.start)&&l.opts.start.call(e,l),st.fx.timer(st.extend(u,{elem:e,anim:l,queue:l.opts.queue})),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always)}function R(e,t){var n,r,i,o,a;for(n in e)if(r=st.camelCase(n),i=t[r],o=e[n],st.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),a=st.cssHooks[r],a&&"expand"in a){o=a.expand(o),delete e[r];for(n in o)n in e||(e[n]=o[n],t[n]=i)}else t[r]=i}function W(e,t,n){var r,i,o,a,s,u,l,c,f,p=this,d=e.style,h={},g=[],m=e.nodeType&&w(e);n.queue||(c=st._queueHooks(e,"fx"),null==c.unqueued&&(c.unqueued=0,f=c.empty.fire,c.empty.fire=function(){c.unqueued||f()}),c.unqueued++,p.always(function(){p.always(function(){c.unqueued--,st.queue(e,"fx").length||c.empty.fire()})})),1===e.nodeType&&("height"in t||"width"in t)&&(n.overflow=[d.overflow,d.overflowX,d.overflowY],"inline"===st.css(e,"display")&&"none"===st.css(e,"float")&&(st.support.inlineBlockNeedsLayout&&"inline"!==S(e.nodeName)?d.zoom=1:d.display="inline-block")),n.overflow&&(d.overflow="hidden",st.support.shrinkWrapBlocks||p.done(function(){d.overflow=n.overflow[0],d.overflowX=n.overflow[1],d.overflowY=n.overflow[2]}));for(r in t)if(o=t[r],Zn.exec(o)){if(delete t[r],u=u||"toggle"===o,o===(m?"hide":"show"))continue;g.push(r)}if(a=g.length){s=st._data(e,"fxshow")||st._data(e,"fxshow",{}),"hidden"in s&&(m=s.hidden),u&&(s.hidden=!m),m?st(e).show():p.done(function(){st(e).hide()}),p.done(function(){var t;st._removeData(e,"fxshow");for(t in h)st.style(e,t,h[t])});for(r=0;a>r;r++)i=g[r],l=p.createTween(i,m?s[i]:0),h[i]=s[i]||st.style(e,i),i in s||(s[i]=l.start,m&&(l.end=l.start,l.start="width"===i||"height"===i?1:0))}}function $(e,t,n,r,i){return new $.prototype.init(e,t,n,r,i)}function I(e,t){var n,r={height:e},i=0;for(t=t?1:0;4>i;i+=2-t)n=wn[i],r["margin"+n]=r["padding"+n]=e;return t&&(r.opacity=r.width=e),r}function z(e){return st.isWindow(e)?e:9===e.nodeType?e.defaultView||e.parentWindow:!1}var X,U,V=e.document,Y=e.location,J=e.jQuery,G=e.$,Q={},K=[],Z="1.9.0",et=K.concat,tt=K.push,nt=K.slice,rt=K.indexOf,it=Q.toString,ot=Q.hasOwnProperty,at=Z.trim,st=function(e,t){return new st.fn.init(e,t,X)},ut=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,lt=/\S+/g,ct=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,ft=/^(?:(<[\w\W]+>)[^>]*|#([\w-]*))$/,pt=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,dt=/^[\],:{}\s]*$/,ht=/(?:^|:|,)(?:\s*\[)+/g,gt=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,mt=/"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,yt=/^-ms-/,vt=/-([\da-z])/gi,bt=function(e,t){return t.toUpperCase()},xt=function(){V.addEventListener?(V.removeEventListener("DOMContentLoaded",xt,!1),st.ready()):"complete"===V.readyState&&(V.detachEvent("onreadystatechange",xt),st.ready())};st.fn=st.prototype={jquery:Z,constructor:st,init:function(e,n,r){var i,o;if(!e)return this;if("string"==typeof e){if(i="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:ft.exec(e),!i||!i[1]&&n)return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e);if(i[1]){if(n=n instanceof st?n[0]:n,st.merge(this,st.parseHTML(i[1],n&&n.nodeType?n.ownerDocument||n:V,!0)),pt.test(i[1])&&st.isPlainObject(n))for(i in n)st.isFunction(this[i])?this[i](n[i]):this.attr(i,n[i]);return this}if(o=V.getElementById(i[2]),o&&o.parentNode){if(o.id!==i[2])return r.find(e);this.length=1,this[0]=o}return this.context=V,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):st.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),st.makeArray(e,this))},selector:"",length:0,size:function(){return this.length},toArray:function(){return nt.call(this)},get:function(e){return null==e?this.toArray():0>e?this[this.length+e]:this[e]},pushStack:function(e){var t=st.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return st.each(this,e,t)},ready:function(e){return st.ready.promise().done(e),this},slice:function(){return this.pushStack(nt.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},map:function(e){return this.pushStack(st.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:tt,sort:[].sort,splice:[].splice},st.fn.init.prototype=st.fn,st.extend=st.fn.extend=function(){var e,n,r,i,o,a,s=arguments[0]||{},u=1,l=arguments.length,c=!1;for("boolean"==typeof s&&(c=s,s=arguments[1]||{},u=2),"object"==typeof s||st.isFunction(s)||(s={}),l===u&&(s=this,--u);l>u;u++)if(null!=(e=arguments[u]))for(n in e)r=s[n],i=e[n],s!==i&&(c&&i&&(st.isPlainObject(i)||(o=st.isArray(i)))?(o?(o=!1,a=r&&st.isArray(r)?r:[]):a=r&&st.isPlainObject(r)?r:{},s[n]=st.extend(c,a,i)):i!==t&&(s[n]=i));return s},st.extend({noConflict:function(t){return e.$===st&&(e.$=G),t&&e.jQuery===st&&(e.jQuery=J),st},isReady:!1,readyWait:1,holdReady:function(e){e?st.readyWait++:st.ready(!0)},ready:function(e){if(e===!0?!--st.readyWait:!st.isReady){if(!V.body)return setTimeout(st.ready);st.isReady=!0,e!==!0&&--st.readyWait>0||(U.resolveWith(V,[st]),st.fn.trigger&&st(V).trigger("ready").off("ready"))}},isFunction:function(e){return"function"===st.type(e)},isArray:Array.isArray||function(e){return"array"===st.type(e)},isWindow:function(e){return null!=e&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?Q[it.call(e)]||"object":typeof e},isPlainObject:function(e){if(!e||"object"!==st.type(e)||e.nodeType||st.isWindow(e))return!1;try{if(e.constructor&&!ot.call(e,"constructor")&&!ot.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(n){return!1}var r;for(r in e);return r===t||ot.call(e,r)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||V;var r=pt.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=st.buildFragment([e],t,i),i&&st(i).remove(),st.merge([],r.childNodes))},parseJSON:function(n){return e.JSON&&e.JSON.parse?e.JSON.parse(n):null===n?n:"string"==typeof n&&(n=st.trim(n),n&&dt.test(n.replace(gt,"@").replace(mt,"]").replace(ht,"")))?Function("return "+n)():(st.error("Invalid JSON: "+n),t)},parseXML:function(n){var r,i;if(!n||"string"!=typeof n)return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,"text/xml")):(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(n))}catch(o){r=t}return r&&r.documentElement&&!r.getElementsByTagName("parsererror").length||st.error("Invalid XML: "+n),r},noop:function(){},globalEval:function(t){t&&st.trim(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(yt,"ms-").replace(vt,bt)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,r){var i,o=0,a=e.length,s=n(e);if(r){if(s)for(;a>o&&(i=t.apply(e[o],r),i!==!1);o++);else for(o in e)if(i=t.apply(e[o],r),i===!1)break}else if(s)for(;a>o&&(i=t.call(e[o],o,e[o]),i!==!1);o++);else for(o in e)if(i=t.call(e[o],o,e[o]),i===!1)break;return e},trim:at&&!at.call("\ufeff\u00a0")?function(e){return null==e?"":at.call(e)}:function(e){return null==e?"":(e+"").replace(ct,"")},makeArray:function(e,t){var r=t||[];return null!=e&&(n(Object(e))?st.merge(r,"string"==typeof e?[e]:e):tt.call(r,e)),r},inArray:function(e,t,n){var r;if(t){if(rt)return rt.call(t,e,n);for(r=t.length,n=n?0>n?Math.max(0,r+n):n:0;r>n;n++)if(n in t&&t[n]===e)return n}return-1},merge:function(e,n){var r=n.length,i=e.length,o=0;if("number"==typeof r)for(;r>o;o++)e[i++]=n[o];else for(;n[o]!==t;)e[i++]=n[o++];return e.length=i,e},grep:function(e,t,n){var r,i=[],o=0,a=e.length;for(n=!!n;a>o;o++)r=!!t(e[o],o),n!==r&&i.push(e[o]);return i},map:function(e,t,r){var i,o=0,a=e.length,s=n(e),u=[];if(s)for(;a>o;o++)i=t(e[o],o,r),null!=i&&(u[u.length]=i);else for(o in e)i=t(e[o],o,r),null!=i&&(u[u.length]=i);return et.apply([],u)},guid:1,proxy:function(e,n){var r,i,o;return"string"==typeof n&&(r=e[n],n=e,e=r),st.isFunction(e)?(i=nt.call(arguments,2),o=function(){return e.apply(n||this,i.concat(nt.call(arguments)))},o.guid=e.guid=e.guid||st.guid++,o):t},access:function(e,n,r,i,o,a,s){var u=0,l=e.length,c=null==r;if("object"===st.type(r)){o=!0;for(u in r)st.access(e,n,u,r[u],!0,a,s)}else if(i!==t&&(o=!0,st.isFunction(i)||(s=!0),c&&(s?(n.call(e,i),n=null):(c=n,n=function(e,t,n){return c.call(st(e),n)})),n))for(;l>u;u++)n(e[u],r,s?i:i.call(e[u],u,n(e[u],r)));return o?e:c?n.call(e):l?n(e[0],r):a},now:function(){return(new Date).getTime()}}),st.ready.promise=function(t){if(!U)if(U=st.Deferred(),"complete"===V.readyState)setTimeout(st.ready);else if(V.addEventListener)V.addEventListener("DOMContentLoaded",xt,!1),e.addEventListener("load",st.ready,!1);else{V.attachEvent("onreadystatechange",xt),e.attachEvent("onload",st.ready);var n=!1;try{n=null==e.frameElement&&V.documentElement}catch(r){}n&&n.doScroll&&function i(){if(!st.isReady){try{n.doScroll("left")}catch(e){return setTimeout(i,50)}st.ready()}}()}return U.promise(t)},st.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(e,t){Q["[object "+t+"]"]=t.toLowerCase()}),X=st(V);var Tt={};st.Callbacks=function(e){e="string"==typeof e?Tt[e]||r(e):st.extend({},e);var n,i,o,a,s,u,l=[],c=!e.once&&[],f=function(t){for(n=e.memory&&t,i=!0,u=a||0,a=0,s=l.length,o=!0;l&&s>u;u++)if(l[u].apply(t[0],t[1])===!1&&e.stopOnFalse){n=!1;break}o=!1,l&&(c?c.length&&f(c.shift()):n?l=[]:p.disable())},p={add:function(){if(l){var t=l.length;(function r(t){st.each(t,function(t,n){var i=st.type(n);"function"===i?e.unique&&p.has(n)||l.push(n):n&&n.length&&"string"!==i&&r(n)})})(arguments),o?s=l.length:n&&(a=t,f(n))}return this},remove:function(){return l&&st.each(arguments,function(e,t){for(var n;(n=st.inArray(t,l,n))>-1;)l.splice(n,1),o&&(s>=n&&s--,u>=n&&u--)}),this},has:function(e){return st.inArray(e,l)>-1},empty:function(){return l=[],this},disable:function(){return l=c=n=t,this},disabled:function(){return!l},lock:function(){return c=t,n||p.disable(),this},locked:function(){return!c},fireWith:function(e,t){return t=t||[],t=[e,t.slice?t.slice():t],!l||i&&!c||(o?c.push(t):f(t)),this},fire:function(){return p.fireWith(this,arguments),this},fired:function(){return!!i}};return p},st.extend({Deferred:function(e){var t=[["resolve","done",st.Callbacks("once memory"),"resolved"],["reject","fail",st.Callbacks("once memory"),"rejected"],["notify","progress",st.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return st.Deferred(function(n){st.each(t,function(t,o){var a=o[0],s=st.isFunction(e[t])&&e[t];i[o[1]](function(){var e=s&&s.apply(this,arguments);e&&st.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[a+"With"](this===r?n.promise():this,s?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?st.extend(e,r):r}},i={};return r.pipe=r.then,st.each(t,function(e,o){var a=o[2],s=o[3];r[o[1]]=a.add,s&&a.add(function(){n=s},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+"With"](this===i?r:this,arguments),this},i[o[0]+"With"]=a.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t,n,r,i=0,o=nt.call(arguments),a=o.length,s=1!==a||e&&st.isFunction(e.promise)?a:0,u=1===s?e:st.Deferred(),l=function(e,n,r){return function(i){n[e]=this,r[e]=arguments.length>1?nt.call(arguments):i,r===t?u.notifyWith(n,r):--s||u.resolveWith(n,r)}};if(a>1)for(t=Array(a),n=Array(a),r=Array(a);a>i;i++)o[i]&&st.isFunction(o[i].promise)?o[i].promise().done(l(i,r,o)).fail(u.reject).progress(l(i,n,t)):--s;return s||u.resolveWith(r,o),u.promise()}}),st.support=function(){var n,r,i,o,a,s,u,l,c,f,p=V.createElement("div");if(p.setAttribute("className","t"),p.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",r=p.getElementsByTagName("*"),i=p.getElementsByTagName("a")[0],!r||!i||!r.length)return{};o=V.createElement("select"),a=o.appendChild(V.createElement("option")),s=p.getElementsByTagName("input")[0],i.style.cssText="top:1px;float:left;opacity:.5",n={getSetAttribute:"t"!==p.className,leadingWhitespace:3===p.firstChild.nodeType,tbody:!p.getElementsByTagName("tbody").length,htmlSerialize:!!p.getElementsByTagName("link").length,style:/top/.test(i.getAttribute("style")),hrefNormalized:"/a"===i.getAttribute("href"),opacity:/^0.5/.test(i.style.opacity),cssFloat:!!i.style.cssFloat,checkOn:!!s.value,optSelected:a.selected,enctype:!!V.createElement("form").enctype,html5Clone:"<:nav></:nav>"!==V.createElement("nav").cloneNode(!0).outerHTML,boxModel:"CSS1Compat"===V.compatMode,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},s.checked=!0,n.noCloneChecked=s.cloneNode(!0).checked,o.disabled=!0,n.optDisabled=!a.disabled;try{delete p.test}catch(d){n.deleteExpando=!1}s=V.createElement("input"),s.setAttribute("value",""),n.input=""===s.getAttribute("value"),s.value="t",s.setAttribute("type","radio"),n.radioValue="t"===s.value,s.setAttribute("checked","t"),s.setAttribute("name","t"),u=V.createDocumentFragment(),u.appendChild(s),n.appendChecked=s.checked,n.checkClone=u.cloneNode(!0).cloneNode(!0).lastChild.checked,p.attachEvent&&(p.attachEvent("onclick",function(){n.noCloneEvent=!1}),p.cloneNode(!0).click());for(f in{submit:!0,change:!0,focusin:!0})p.setAttribute(l="on"+f,"t"),n[f+"Bubbles"]=l in e||p.attributes[l].expando===!1;return p.style.backgroundClip="content-box",p.cloneNode(!0).style.backgroundClip="",n.clearCloneStyle="content-box"===p.style.backgroundClip,st(function(){var r,i,o,a="padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",s=V.getElementsByTagName("body")[0];s&&(r=V.createElement("div"),r.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",s.appendChild(r).appendChild(p),p.innerHTML="<table><tr><td></td><td>t</td></tr></table>",o=p.getElementsByTagName("td"),o[0].style.cssText="padding:0;margin:0;border:0;display:none",c=0===o[0].offsetHeight,o[0].style.display="",o[1].style.display="none",n.reliableHiddenOffsets=c&&0===o[0].offsetHeight,p.innerHTML="",p.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",n.boxSizing=4===p.offsetWidth,n.doesNotIncludeMarginInBodyOffset=1!==s.offsetTop,e.getComputedStyle&&(n.pixelPosition="1%"!==(e.getComputedStyle(p,null)||{}).top,n.boxSizingReliable="4px"===(e.getComputedStyle(p,null)||{width:"4px"}).width,i=p.appendChild(V.createElement("div")),i.style.cssText=p.style.cssText=a,i.style.marginRight=i.style.width="0",p.style.width="1px",n.reliableMarginRight=!parseFloat((e.getComputedStyle(i,null)||{}).marginRight)),p.style.zoom!==t&&(p.innerHTML="",p.style.cssText=a+"width:1px;padding:1px;display:inline;zoom:1",n.inlineBlockNeedsLayout=3===p.offsetWidth,p.style.display="block",p.innerHTML="<div></div>",p.firstChild.style.width="5px",n.shrinkWrapBlocks=3!==p.offsetWidth,s.style.zoom=1),s.removeChild(r),r=p=o=i=null)}),r=o=u=a=i=s=null,n}();var wt=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,Nt=/([A-Z])/g;st.extend({cache:{},expando:"jQuery"+(Z+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(e){return e=e.nodeType?st.cache[e[st.expando]]:e[st.expando],!!e&&!s(e)},data:function(e,t,n){return i(e,t,n,!1)},removeData:function(e,t){return o(e,t,!1)},_data:function(e,t,n){return i(e,t,n,!0)},_removeData:function(e,t){return o(e,t,!0)},acceptData:function(e){var t=e.nodeName&&st.noData[e.nodeName.toLowerCase()];return!t||t!==!0&&e.getAttribute("classid")===t}}),st.fn.extend({data:function(e,n){var r,i,o=this[0],s=0,u=null;if(e===t){if(this.length&&(u=st.data(o),1===o.nodeType&&!st._data(o,"parsedAttrs"))){for(r=o.attributes;r.length>s;s++)i=r[s].name,i.indexOf("data-")||(i=st.camelCase(i.substring(5)),a(o,i,u[i]));st._data(o,"parsedAttrs",!0)}return u}return"object"==typeof e?this.each(function(){st.data(this,e)}):st.access(this,function(n){return n===t?o?a(o,e,st.data(o,e)):null:(this.each(function(){st.data(this,e,n)}),t)},null,n,arguments.length>1,null,!0)},removeData:function(e){return this.each(function(){st.removeData(this,e)})}}),st.extend({queue:function(e,n,r){var i;return e?(n=(n||"fx")+"queue",i=st._data(e,n),r&&(!i||st.isArray(r)?i=st._data(e,n,st.makeArray(r)):i.push(r)),i||[]):t},dequeue:function(e,t){t=t||"fx";var n=st.queue(e,t),r=n.length,i=n.shift(),o=st._queueHooks(e,t),a=function(){st.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),o.cur=i,i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return st._data(e,n)||st._data(e,n,{empty:st.Callbacks("once memory").add(function(){st._removeData(e,t+"queue"),st._removeData(e,n)})})}}),st.fn.extend({queue:function(e,n){var r=2;return"string"!=typeof e&&(n=e,e="fx",r--),r>arguments.length?st.queue(this[0],e):n===t?this:this.each(function(){var t=st.queue(this,e,n);st._queueHooks(this,e),"fx"===e&&"inprogress"!==t[0]&&st.dequeue(this,e)})},dequeue:function(e){return this.each(function(){st.dequeue(this,e)})},delay:function(e,t){return e=st.fx?st.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,n){var r,i=1,o=st.Deferred(),a=this,s=this.length,u=function(){--i||o.resolveWith(a,[a])};for("string"!=typeof e&&(n=e,e=t),e=e||"fx";s--;)r=st._data(a[s],e+"queueHooks"),r&&r.empty&&(i++,r.empty.add(u));return u(),o.promise(n)}});var Ct,kt,Et=/[\t\r\n]/g,St=/\r/g,At=/^(?:input|select|textarea|button|object)$/i,jt=/^(?:a|area)$/i,Dt=/^(?:checked|selected|autofocus|autoplay|async|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped)$/i,Lt=/^(?:checked|selected)$/i,Ht=st.support.getSetAttribute,Mt=st.support.input;st.fn.extend({attr:function(e,t){return st.access(this,st.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){st.removeAttr(this,e)})},prop:function(e,t){return st.access(this,st.prop,e,t,arguments.length>1)},removeProp:function(e){return e=st.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,o,a=0,s=this.length,u="string"==typeof e&&e;if(st.isFunction(e))return this.each(function(t){st(this).addClass(e.call(this,t,this.className))});if(u)for(t=(e||"").match(lt)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(Et," "):" ")){for(o=0;i=t[o++];)0>r.indexOf(" "+i+" ")&&(r+=i+" ");n.className=st.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,a=0,s=this.length,u=0===arguments.length||"string"==typeof e&&e;if(st.isFunction(e))return this.each(function(t){st(this).removeClass(e.call(this,t,this.className))});if(u)for(t=(e||"").match(lt)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(Et," "):"")){for(o=0;i=t[o++];)for(;r.indexOf(" "+i+" ")>=0;)r=r.replace(" "+i+" "," ");n.className=e?st.trim(r):""}return this},toggleClass:function(e,t){var n=typeof e,r="boolean"==typeof t;return st.isFunction(e)?this.each(function(n){st(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if("string"===n)for(var i,o=0,a=st(this),s=t,u=e.match(lt)||[];i=u[o++];)s=r?s:!a.hasClass(i),a[s?"addClass":"removeClass"](i);else("undefined"===n||"boolean"===n)&&(this.className&&st._data(this,"__className__",this.className),this.className=this.className||e===!1?"":st._data(this,"__className__")||"")})},hasClass:function(e){for(var t=" "+e+" ",n=0,r=this.length;r>n;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(Et," ").indexOf(t)>=0)return!0;return!1},val:function(e){var n,r,i,o=this[0];{if(arguments.length)return i=st.isFunction(e),this.each(function(r){var o,a=st(this);1===this.nodeType&&(o=i?e.call(this,r,a.val()):e,null==o?o="":"number"==typeof o?o+="":st.isArray(o)&&(o=st.map(o,function(e){return null==e?"":e+""})),n=st.valHooks[this.type]||st.valHooks[this.nodeName.toLowerCase()],n&&"set"in n&&n.set(this,o,"value")!==t||(this.value=o))});if(o)return n=st.valHooks[o.type]||st.valHooks[o.nodeName.toLowerCase()],n&&"get"in n&&(r=n.get(o,"value"))!==t?r:(r=o.value,"string"==typeof r?r.replace(St,""):null==r?"":r)}}}),st.extend({valHooks:{option:{get:function(e){var t=e.attributes.value;return!t||t.specified?e.value:e.text}},select:{get:function(e){for(var t,n,r=e.options,i=e.selectedIndex,o="select-one"===e.type||0>i,a=o?null:[],s=o?i+1:r.length,u=0>i?s:o?i:0;s>u;u++)if(n=r[u],!(!n.selected&&u!==i||(st.support.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&st.nodeName(n.parentNode,"optgroup"))){if(t=st(n).val(),o)return t;a.push(t)}return a},set:function(e,t){var n=st.makeArray(t);return st(e).find("option").each(function(){this.selected=st.inArray(st(this).val(),n)>=0}),n.length||(e.selectedIndex=-1),n}}},attr:function(e,n,r){var i,o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return e.getAttribute===t?st.prop(e,n,r):(a=1!==s||!st.isXMLDoc(e),a&&(n=n.toLowerCase(),o=st.attrHooks[n]||(Dt.test(n)?kt:Ct)),r===t?o&&a&&"get"in o&&null!==(i=o.get(e,n))?i:(e.getAttribute!==t&&(i=e.getAttribute(n)),null==i?t:i):null!==r?o&&a&&"set"in o&&(i=o.set(e,r,n))!==t?i:(e.setAttribute(n,r+""),r):(st.removeAttr(e,n),t))},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(lt);if(o&&1===e.nodeType)for(;n=o[i++];)r=st.propFix[n]||n,Dt.test(n)?!Ht&&Lt.test(n)?e[st.camelCase("default-"+n)]=e[r]=!1:e[r]=!1:st.attr(e,n,""),e.removeAttribute(Ht?n:r)},attrHooks:{type:{set:function(e,t){if(!st.support.radioValue&&"radio"===t&&st.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(e,n,r){var i,o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return a=1!==s||!st.isXMLDoc(e),a&&(n=st.propFix[n]||n,o=st.propHooks[n]),r!==t?o&&"set"in o&&(i=o.set(e,r,n))!==t?i:e[n]=r:o&&"get"in o&&null!==(i=o.get(e,n))?i:e[n]},propHooks:{tabIndex:{get:function(e){var n=e.getAttributeNode("tabindex");return n&&n.specified?parseInt(n.value,10):At.test(e.nodeName)||jt.test(e.nodeName)&&e.href?0:t}}}}),kt={get:function(e,n){var r=st.prop(e,n),i="boolean"==typeof r&&e.getAttribute(n),o="boolean"==typeof r?Mt&&Ht?null!=i:Lt.test(n)?e[st.camelCase("default-"+n)]:!!i:e.getAttributeNode(n);return o&&o.value!==!1?n.toLowerCase():t},set:function(e,t,n){return t===!1?st.removeAttr(e,n):Mt&&Ht||!Lt.test(n)?e.setAttribute(!Ht&&st.propFix[n]||n,n):e[st.camelCase("default-"+n)]=e[n]=!0,n}},Mt&&Ht||(st.attrHooks.value={get:function(e,n){var r=e.getAttributeNode(n);return st.nodeName(e,"input")?e.defaultValue:r&&r.specified?r.value:t
+},set:function(e,n,r){return st.nodeName(e,"input")?(e.defaultValue=n,t):Ct&&Ct.set(e,n,r)}}),Ht||(Ct=st.valHooks.button={get:function(e,n){var r=e.getAttributeNode(n);return r&&("id"===n||"name"===n||"coords"===n?""!==r.value:r.specified)?r.value:t},set:function(e,n,r){var i=e.getAttributeNode(r);return i||e.setAttributeNode(i=e.ownerDocument.createAttribute(r)),i.value=n+="","value"===r||n===e.getAttribute(r)?n:t}},st.attrHooks.contenteditable={get:Ct.get,set:function(e,t,n){Ct.set(e,""===t?!1:t,n)}},st.each(["width","height"],function(e,n){st.attrHooks[n]=st.extend(st.attrHooks[n],{set:function(e,r){return""===r?(e.setAttribute(n,"auto"),r):t}})})),st.support.hrefNormalized||(st.each(["href","src","width","height"],function(e,n){st.attrHooks[n]=st.extend(st.attrHooks[n],{get:function(e){var r=e.getAttribute(n,2);return null==r?t:r}})}),st.each(["href","src"],function(e,t){st.propHooks[t]={get:function(e){return e.getAttribute(t,4)}}})),st.support.style||(st.attrHooks.style={get:function(e){return e.style.cssText||t},set:function(e,t){return e.style.cssText=t+""}}),st.support.optSelected||(st.propHooks.selected=st.extend(st.propHooks.selected,{get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null}})),st.support.enctype||(st.propFix.enctype="encoding"),st.support.checkOn||st.each(["radio","checkbox"],function(){st.valHooks[this]={get:function(e){return null===e.getAttribute("value")?"on":e.value}}}),st.each(["radio","checkbox"],function(){st.valHooks[this]=st.extend(st.valHooks[this],{set:function(e,n){return st.isArray(n)?e.checked=st.inArray(st(e).val(),n)>=0:t}})});var qt=/^(?:input|select|textarea)$/i,_t=/^key/,Ft=/^(?:mouse|contextmenu)|click/,Ot=/^(?:focusinfocus|focusoutblur)$/,Bt=/^([^.]*)(?:\.(.+)|)$/;st.event={global:{},add:function(e,n,r,i,o){var a,s,u,l,c,f,p,d,h,g,m,y=3!==e.nodeType&&8!==e.nodeType&&st._data(e);if(y){for(r.handler&&(a=r,r=a.handler,o=a.selector),r.guid||(r.guid=st.guid++),(l=y.events)||(l=y.events={}),(s=y.handle)||(s=y.handle=function(e){return st===t||e&&st.event.triggered===e.type?t:st.event.dispatch.apply(s.elem,arguments)},s.elem=e),n=(n||"").match(lt)||[""],c=n.length;c--;)u=Bt.exec(n[c])||[],h=m=u[1],g=(u[2]||"").split(".").sort(),p=st.event.special[h]||{},h=(o?p.delegateType:p.bindType)||h,p=st.event.special[h]||{},f=st.extend({type:h,origType:m,data:i,handler:r,guid:r.guid,selector:o,needsContext:o&&st.expr.match.needsContext.test(o),namespace:g.join(".")},a),(d=l[h])||(d=l[h]=[],d.delegateCount=0,p.setup&&p.setup.call(e,i,g,s)!==!1||(e.addEventListener?e.addEventListener(h,s,!1):e.attachEvent&&e.attachEvent("on"+h,s))),p.add&&(p.add.call(e,f),f.handler.guid||(f.handler.guid=r.guid)),o?d.splice(d.delegateCount++,0,f):d.push(f),st.event.global[h]=!0;e=null}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,m=st.hasData(e)&&st._data(e);if(m&&(u=m.events)){for(t=(t||"").match(lt)||[""],l=t.length;l--;)if(s=Bt.exec(t[l])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){for(f=st.event.special[d]||{},d=(r?f.delegateType:f.bindType)||d,p=u[d]||[],s=s[2]&&RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;o--;)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&f.teardown.call(e,h,m.handle)!==!1||st.removeEvent(e,d,m.handle),delete u[d])}else for(d in u)st.event.remove(e,d+t[l],n,r,!0);st.isEmptyObject(u)&&(delete m.handle,st._removeData(e,"events"))}},trigger:function(n,r,i,o){var a,s,u,l,c,f,p,d=[i||V],h=n.type||n,g=n.namespace?n.namespace.split("."):[];if(s=u=i=i||V,3!==i.nodeType&&8!==i.nodeType&&!Ot.test(h+st.event.triggered)&&(h.indexOf(".")>=0&&(g=h.split("."),h=g.shift(),g.sort()),c=0>h.indexOf(":")&&"on"+h,n=n[st.expando]?n:new st.Event(h,"object"==typeof n&&n),n.isTrigger=!0,n.namespace=g.join("."),n.namespace_re=n.namespace?RegExp("(^|\\.)"+g.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,n.result=t,n.target||(n.target=i),r=null==r?[n]:st.makeArray(r,[n]),p=st.event.special[h]||{},o||!p.trigger||p.trigger.apply(i,r)!==!1)){if(!o&&!p.noBubble&&!st.isWindow(i)){for(l=p.delegateType||h,Ot.test(l+h)||(s=s.parentNode);s;s=s.parentNode)d.push(s),u=s;u===(i.ownerDocument||V)&&d.push(u.defaultView||u.parentWindow||e)}for(a=0;(s=d[a++])&&!n.isPropagationStopped();)n.type=a>1?l:p.bindType||h,f=(st._data(s,"events")||{})[n.type]&&st._data(s,"handle"),f&&f.apply(s,r),f=c&&s[c],f&&st.acceptData(s)&&f.apply&&f.apply(s,r)===!1&&n.preventDefault();if(n.type=h,!(o||n.isDefaultPrevented()||p._default&&p._default.apply(i.ownerDocument,r)!==!1||"click"===h&&st.nodeName(i,"a")||!st.acceptData(i)||!c||!i[h]||st.isWindow(i))){u=i[c],u&&(i[c]=null),st.event.triggered=h;try{i[h]()}catch(m){}st.event.triggered=t,u&&(i[c]=u)}return n.result}},dispatch:function(e){e=st.event.fix(e);var n,r,i,o,a,s=[],u=nt.call(arguments),l=(st._data(this,"events")||{})[e.type]||[],c=st.event.special[e.type]||{};if(u[0]=e,e.delegateTarget=this,!c.preDispatch||c.preDispatch.call(this,e)!==!1){for(s=st.event.handlers.call(this,e,l),n=0;(o=s[n++])&&!e.isPropagationStopped();)for(e.currentTarget=o.elem,r=0;(a=o.handlers[r++])&&!e.isImmediatePropagationStopped();)(!e.namespace_re||e.namespace_re.test(a.namespace))&&(e.handleObj=a,e.data=a.data,i=((st.event.special[a.origType]||{}).handle||a.handler).apply(o.elem,u),i!==t&&(e.result=i)===!1&&(e.preventDefault(),e.stopPropagation()));return c.postDispatch&&c.postDispatch.call(this,e),e.result}},handlers:function(e,n){var r,i,o,a,s=[],u=n.delegateCount,l=e.target;if(u&&l.nodeType&&(!e.button||"click"!==e.type))for(;l!=this;l=l.parentNode||this)if(l.disabled!==!0||"click"!==e.type){for(i=[],r=0;u>r;r++)a=n[r],o=a.selector+" ",i[o]===t&&(i[o]=a.needsContext?st(o,this).index(l)>=0:st.find(o,this,null,[l]).length),i[o]&&i.push(a);i.length&&s.push({elem:l,handlers:i})}return n.length>u&&s.push({elem:this,handlers:n.slice(u)}),s},fix:function(e){if(e[st.expando])return e;var t,n,r=e,i=st.event.fixHooks[e.type]||{},o=i.props?this.props.concat(i.props):this.props;for(e=new st.Event(r),t=o.length;t--;)n=o[t],e[n]=r[n];return e.target||(e.target=r.srcElement||V),3===e.target.nodeType&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,i.filter?i.filter(e,r):e},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,n){var r,i,o,a=n.button,s=n.fromElement;return null==e.pageX&&null!=n.clientX&&(r=e.target.ownerDocument||V,i=r.documentElement,o=r.body,e.pageX=n.clientX+(i&&i.scrollLeft||o&&o.scrollLeft||0)-(i&&i.clientLeft||o&&o.clientLeft||0),e.pageY=n.clientY+(i&&i.scrollTop||o&&o.scrollTop||0)-(i&&i.clientTop||o&&o.clientTop||0)),!e.relatedTarget&&s&&(e.relatedTarget=s===e.target?n.toElement:s),e.which||a===t||(e.which=1&a?1:2&a?3:4&a?2:0),e}},special:{load:{noBubble:!0},click:{trigger:function(){return st.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):t}},focus:{trigger:function(){if(this!==V.activeElement&&this.focus)try{return this.focus(),!1}catch(e){}},delegateType:"focusin"},blur:{trigger:function(){return this===V.activeElement&&this.blur?(this.blur(),!1):t},delegateType:"focusout"},beforeunload:{postDispatch:function(e){e.result!==t&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var i=st.extend(new st.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?st.event.trigger(i,null,t):st.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},st.removeEvent=V.removeEventListener?function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}:function(e,n,r){var i="on"+n;e.detachEvent&&(e[i]===t&&(e[i]=null),e.detachEvent(i,r))},st.Event=function(e,n){return this instanceof st.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.returnValue===!1||e.getPreventDefault&&e.getPreventDefault()?u:l):this.type=e,n&&st.extend(this,n),this.timeStamp=e&&e.timeStamp||st.now(),this[st.expando]=!0,t):new st.Event(e,n)},st.Event.prototype={isDefaultPrevented:l,isPropagationStopped:l,isImmediatePropagationStopped:l,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=u,e&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=u,e&&(e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=u,this.stopPropagation()}},st.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){st.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return(!i||i!==r&&!st.contains(r,i))&&(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),st.support.submitBubbles||(st.event.special.submit={setup:function(){return st.nodeName(this,"form")?!1:(st.event.add(this,"click._submit keypress._submit",function(e){var n=e.target,r=st.nodeName(n,"input")||st.nodeName(n,"button")?n.form:t;r&&!st._data(r,"submitBubbles")&&(st.event.add(r,"submit._submit",function(e){e._submit_bubble=!0}),st._data(r,"submitBubbles",!0))}),t)},postDispatch:function(e){e._submit_bubble&&(delete e._submit_bubble,this.parentNode&&!e.isTrigger&&st.event.simulate("submit",this.parentNode,e,!0))},teardown:function(){return st.nodeName(this,"form")?!1:(st.event.remove(this,"._submit"),t)}}),st.support.changeBubbles||(st.event.special.change={setup:function(){return qt.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(st.event.add(this,"propertychange._change",function(e){"checked"===e.originalEvent.propertyName&&(this._just_changed=!0)}),st.event.add(this,"click._change",function(e){this._just_changed&&!e.isTrigger&&(this._just_changed=!1),st.event.simulate("change",this,e,!0)})),!1):(st.event.add(this,"beforeactivate._change",function(e){var t=e.target;qt.test(t.nodeName)&&!st._data(t,"changeBubbles")&&(st.event.add(t,"change._change",function(e){!this.parentNode||e.isSimulated||e.isTrigger||st.event.simulate("change",this.parentNode,e,!0)}),st._data(t,"changeBubbles",!0))}),t)},handle:function(e){var n=e.target;return this!==n||e.isSimulated||e.isTrigger||"radio"!==n.type&&"checkbox"!==n.type?e.handleObj.handler.apply(this,arguments):t},teardown:function(){return st.event.remove(this,"._change"),!qt.test(this.nodeName)}}),st.support.focusinBubbles||st.each({focus:"focusin",blur:"focusout"},function(e,t){var n=0,r=function(e){st.event.simulate(t,e.target,st.event.fix(e),!0)};st.event.special[t]={setup:function(){0===n++&&V.addEventListener(e,r,!0)},teardown:function(){0===--n&&V.removeEventListener(e,r,!0)}}}),st.fn.extend({on:function(e,n,r,i,o){var a,s;if("object"==typeof e){"string"!=typeof n&&(r=r||n,n=t);for(s in e)this.on(s,n,r,e[s],o);return this}if(null==r&&null==i?(i=n,r=n=t):null==i&&("string"==typeof n?(i=r,r=t):(i=r,r=n,n=t)),i===!1)i=l;else if(!i)return this;return 1===o&&(a=i,i=function(e){return st().off(e),a.apply(this,arguments)},i.guid=a.guid||(a.guid=st.guid++)),this.each(function(){st.event.add(this,e,i,r,n)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,n,r){var i,o;if(e&&e.preventDefault&&e.handleObj)return i=e.handleObj,st(e.delegateTarget).off(i.namespace?i.origType+"."+i.namespace:i.origType,i.selector,i.handler),this;if("object"==typeof e){for(o in e)this.off(o,n,e[o]);return this}return(n===!1||"function"==typeof n)&&(r=n,n=t),r===!1&&(r=l),this.each(function(){st.event.remove(this,e,r,n)})},bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},trigger:function(e,t){return this.each(function(){st.event.trigger(e,t,this)})},triggerHandler:function(e,n){var r=this[0];return r?st.event.trigger(e,n,r,!0):t},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),st.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(e,t){st.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)},_t.test(t)&&(st.event.fixHooks[t]=st.event.keyHooks),Ft.test(t)&&(st.event.fixHooks[t]=st.event.mouseHooks)}),function(e,t){function n(e){return ht.test(e+"")}function r(){var e,t=[];return e=function(n,r){return t.push(n+=" ")>C.cacheLength&&delete e[t.shift()],e[n]=r}}function i(e){return e[P]=!0,e}function o(e){var t=L.createElement("div");try{return e(t)}catch(n){return!1}finally{t=null}}function a(e,t,n,r){var i,o,a,s,u,l,c,d,h,g;if((t?t.ownerDocument||t:R)!==L&&D(t),t=t||L,n=n||[],!e||"string"!=typeof e)return n;if(1!==(s=t.nodeType)&&9!==s)return[];if(!M&&!r){if(i=gt.exec(e))if(a=i[1]){if(9===s){if(o=t.getElementById(a),!o||!o.parentNode)return n;if(o.id===a)return n.push(o),n}else if(t.ownerDocument&&(o=t.ownerDocument.getElementById(a))&&O(t,o)&&o.id===a)return n.push(o),n}else{if(i[2])return Q.apply(n,K.call(t.getElementsByTagName(e),0)),n;if((a=i[3])&&W.getByClassName&&t.getElementsByClassName)return Q.apply(n,K.call(t.getElementsByClassName(a),0)),n}if(W.qsa&&!q.test(e)){if(c=!0,d=P,h=t,g=9===s&&e,1===s&&"object"!==t.nodeName.toLowerCase()){for(l=f(e),(c=t.getAttribute("id"))?d=c.replace(vt,"\\$&"):t.setAttribute("id",d),d="[id='"+d+"'] ",u=l.length;u--;)l[u]=d+p(l[u]);h=dt.test(e)&&t.parentNode||t,g=l.join(",")}if(g)try{return Q.apply(n,K.call(h.querySelectorAll(g),0)),n}catch(m){}finally{c||t.removeAttribute("id")}}}return x(e.replace(at,"$1"),t,n,r)}function s(e,t){for(var n=e&&t&&e.nextSibling;n;n=n.nextSibling)if(n===t)return-1;return e?1:-1}function u(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function l(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function c(e){return i(function(t){return t=+t,i(function(n,r){for(var i,o=e([],n.length,t),a=o.length;a--;)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}function f(e,t){var n,r,i,o,s,u,l,c=X[e+" "];if(c)return t?0:c.slice(0);for(s=e,u=[],l=C.preFilter;s;){(!n||(r=ut.exec(s)))&&(r&&(s=s.slice(r[0].length)||s),u.push(i=[])),n=!1,(r=lt.exec(s))&&(n=r.shift(),i.push({value:n,type:r[0].replace(at," ")}),s=s.slice(n.length));for(o in C.filter)!(r=pt[o].exec(s))||l[o]&&!(r=l[o](r))||(n=r.shift(),i.push({value:n,type:o,matches:r}),s=s.slice(n.length));if(!n)break}return t?s.length:s?a.error(e):X(e,u).slice(0)}function p(e){for(var t=0,n=e.length,r="";n>t;t++)r+=e[t].value;return r}function d(e,t,n){var r=t.dir,i=n&&"parentNode"===t.dir,o=I++;return t.first?function(t,n,o){for(;t=t[r];)if(1===t.nodeType||i)return e(t,n,o)}:function(t,n,a){var s,u,l,c=$+" "+o;if(a){for(;t=t[r];)if((1===t.nodeType||i)&&e(t,n,a))return!0}else for(;t=t[r];)if(1===t.nodeType||i)if(l=t[P]||(t[P]={}),(u=l[r])&&u[0]===c){if((s=u[1])===!0||s===N)return s===!0}else if(u=l[r]=[c],u[1]=e(t,n,a)||N,u[1]===!0)return!0}}function h(e){return e.length>1?function(t,n,r){for(var i=e.length;i--;)if(!e[i](t,n,r))return!1;return!0}:e[0]}function g(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;u>s;s++)(o=e[s])&&(!n||n(o,r,i))&&(a.push(o),l&&t.push(s));return a}function m(e,t,n,r,o,a){return r&&!r[P]&&(r=m(r)),o&&!o[P]&&(o=m(o,a)),i(function(i,a,s,u){var l,c,f,p=[],d=[],h=a.length,m=i||b(t||"*",s.nodeType?[s]:s,[]),y=!e||!i&&t?m:g(m,p,e,s,u),v=n?o||(i?e:h||r)?[]:a:y;if(n&&n(y,v,s,u),r)for(l=g(v,d),r(l,[],s,u),c=l.length;c--;)(f=l[c])&&(v[d[c]]=!(y[d[c]]=f));if(i){if(o||e){if(o){for(l=[],c=v.length;c--;)(f=v[c])&&l.push(y[c]=f);o(null,v=[],l,u)}for(c=v.length;c--;)(f=v[c])&&(l=o?Z.call(i,f):p[c])>-1&&(i[l]=!(a[l]=f))}}else v=g(v===a?v.splice(h,v.length):v),o?o(null,a,v,u):Q.apply(a,v)})}function y(e){for(var t,n,r,i=e.length,o=C.relative[e[0].type],a=o||C.relative[" "],s=o?1:0,u=d(function(e){return e===t},a,!0),l=d(function(e){return Z.call(t,e)>-1},a,!0),c=[function(e,n,r){return!o&&(r||n!==j)||((t=n).nodeType?u(e,n,r):l(e,n,r))}];i>s;s++)if(n=C.relative[e[s].type])c=[d(h(c),n)];else{if(n=C.filter[e[s].type].apply(null,e[s].matches),n[P]){for(r=++s;i>r&&!C.relative[e[r].type];r++);return m(s>1&&h(c),s>1&&p(e.slice(0,s-1)).replace(at,"$1"),n,r>s&&y(e.slice(s,r)),i>r&&y(e=e.slice(r)),i>r&&p(e))}c.push(n)}return h(c)}function v(e,t){var n=0,r=t.length>0,o=e.length>0,s=function(i,s,u,l,c){var f,p,d,h=[],m=0,y="0",v=i&&[],b=null!=c,x=j,T=i||o&&C.find.TAG("*",c&&s.parentNode||s),w=$+=null==x?1:Math.E;for(b&&(j=s!==L&&s,N=n);null!=(f=T[y]);y++){if(o&&f){for(p=0;d=e[p];p++)if(d(f,s,u)){l.push(f);break}b&&($=w,N=++n)}r&&((f=!d&&f)&&m--,i&&v.push(f))}if(m+=y,r&&y!==m){for(p=0;d=t[p];p++)d(v,h,s,u);if(i){if(m>0)for(;y--;)v[y]||h[y]||(h[y]=G.call(l));h=g(h)}Q.apply(l,h),b&&!i&&h.length>0&&m+t.length>1&&a.uniqueSort(l)}return b&&($=w,j=x),v};return r?i(s):s}function b(e,t,n){for(var r=0,i=t.length;i>r;r++)a(e,t[r],n);return n}function x(e,t,n,r){var i,o,a,s,u,l=f(e);if(!r&&1===l.length){if(o=l[0]=l[0].slice(0),o.length>2&&"ID"===(a=o[0]).type&&9===t.nodeType&&!M&&C.relative[o[1].type]){if(t=C.find.ID(a.matches[0].replace(xt,Tt),t)[0],!t)return n;e=e.slice(o.shift().value.length)}for(i=pt.needsContext.test(e)?-1:o.length-1;i>=0&&(a=o[i],!C.relative[s=a.type]);i--)if((u=C.find[s])&&(r=u(a.matches[0].replace(xt,Tt),dt.test(o[0].type)&&t.parentNode||t))){if(o.splice(i,1),e=r.length&&p(o),!e)return Q.apply(n,K.call(r,0)),n;break}}return S(e,l)(r,t,M,n,dt.test(e)),n}function T(){}var w,N,C,k,E,S,A,j,D,L,H,M,q,_,F,O,B,P="sizzle"+-new Date,R=e.document,W={},$=0,I=0,z=r(),X=r(),U=r(),V=typeof t,Y=1<<31,J=[],G=J.pop,Q=J.push,K=J.slice,Z=J.indexOf||function(e){for(var t=0,n=this.length;n>t;t++)if(this[t]===e)return t;return-1},et="[\\x20\\t\\r\\n\\f]",tt="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",nt=tt.replace("w","w#"),rt="([*^$|!~]?=)",it="\\["+et+"*("+tt+")"+et+"*(?:"+rt+et+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+nt+")|)|)"+et+"*\\]",ot=":("+tt+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+it.replace(3,8)+")*)|.*)\\)|)",at=RegExp("^"+et+"+|((?:^|[^\\\\])(?:\\\\.)*)"+et+"+$","g"),ut=RegExp("^"+et+"*,"+et+"*"),lt=RegExp("^"+et+"*([\\x20\\t\\r\\n\\f>+~])"+et+"*"),ct=RegExp(ot),ft=RegExp("^"+nt+"$"),pt={ID:RegExp("^#("+tt+")"),CLASS:RegExp("^\\.("+tt+")"),NAME:RegExp("^\\[name=['\"]?("+tt+")['\"]?\\]"),TAG:RegExp("^("+tt.replace("w","w*")+")"),ATTR:RegExp("^"+it),PSEUDO:RegExp("^"+ot),CHILD:RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+et+"*(even|odd|(([+-]|)(\\d*)n|)"+et+"*(?:([+-]|)"+et+"*(\\d+)|))"+et+"*\\)|)","i"),needsContext:RegExp("^"+et+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+et+"*((?:-\\d)?\\d*)"+et+"*\\)|)(?=[^-]|$)","i")},dt=/[\x20\t\r\n\f]*[+~]/,ht=/\{\s*\[native code\]\s*\}/,gt=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,mt=/^(?:input|select|textarea|button)$/i,yt=/^h\d$/i,vt=/'|\\/g,bt=/\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,xt=/\\([\da-fA-F]{1,6}[\x20\t\r\n\f]?|.)/g,Tt=function(e,t){var n="0x"+t-65536;return n!==n?t:0>n?String.fromCharCode(n+65536):String.fromCharCode(55296|n>>10,56320|1023&n)};try{K.call(H.childNodes,0)[0].nodeType}catch(wt){K=function(e){for(var t,n=[];t=this[e];e++)n.push(t);return n}}E=a.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},D=a.setDocument=function(e){var r=e?e.ownerDocument||e:R;return r!==L&&9===r.nodeType&&r.documentElement?(L=r,H=r.documentElement,M=E(r),W.tagNameNoComments=o(function(e){return e.appendChild(r.createComment("")),!e.getElementsByTagName("*").length}),W.attributes=o(function(e){e.innerHTML="<select></select>";var t=typeof e.lastChild.getAttribute("multiple");return"boolean"!==t&&"string"!==t}),W.getByClassName=o(function(e){return e.innerHTML="<div class='hidden e'></div><div class='hidden'></div>",e.getElementsByClassName&&e.getElementsByClassName("e").length?(e.lastChild.className="e",2===e.getElementsByClassName("e").length):!1}),W.getByName=o(function(e){e.id=P+0,e.innerHTML="<a name='"+P+"'></a><div name='"+P+"'></div>",H.insertBefore(e,H.firstChild);var t=r.getElementsByName&&r.getElementsByName(P).length===2+r.getElementsByName(P+0).length;return W.getIdNotName=!r.getElementById(P),H.removeChild(e),t}),C.attrHandle=o(function(e){return e.innerHTML="<a href='#'></a>",e.firstChild&&typeof e.firstChild.getAttribute!==V&&"#"===e.firstChild.getAttribute("href")})?{}:{href:function(e){return e.getAttribute("href",2)},type:function(e){return e.getAttribute("type")}},W.getIdNotName?(C.find.ID=function(e,t){if(typeof t.getElementById!==V&&!M){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},C.filter.ID=function(e){var t=e.replace(xt,Tt);return function(e){return e.getAttribute("id")===t}}):(C.find.ID=function(e,n){if(typeof n.getElementById!==V&&!M){var r=n.getElementById(e);return r?r.id===e||typeof r.getAttributeNode!==V&&r.getAttributeNode("id").value===e?[r]:t:[]}},C.filter.ID=function(e){var t=e.replace(xt,Tt);return function(e){var n=typeof e.getAttributeNode!==V&&e.getAttributeNode("id");return n&&n.value===t}}),C.find.TAG=W.tagNameNoComments?function(e,n){return typeof n.getElementsByTagName!==V?n.getElementsByTagName(e):t}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){for(;n=o[i];i++)1===n.nodeType&&r.push(n);return r}return o},C.find.NAME=W.getByName&&function(e,n){return typeof n.getElementsByName!==V?n.getElementsByName(name):t},C.find.CLASS=W.getByClassName&&function(e,n){return typeof n.getElementsByClassName===V||M?t:n.getElementsByClassName(e)},_=[],q=[":focus"],(W.qsa=n(r.querySelectorAll))&&(o(function(e){e.innerHTML="<select><option selected=''></option></select>",e.querySelectorAll("[selected]").length||q.push("\\["+et+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),e.querySelectorAll(":checked").length||q.push(":checked")}),o(function(e){e.innerHTML="<input type='hidden' i=''/>",e.querySelectorAll("[i^='']").length&&q.push("[*^$]="+et+"*(?:\"\"|'')"),e.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),q.push(",.*:")})),(W.matchesSelector=n(F=H.matchesSelector||H.mozMatchesSelector||H.webkitMatchesSelector||H.oMatchesSelector||H.msMatchesSelector))&&o(function(e){W.disconnectedMatch=F.call(e,"div"),F.call(e,"[s!='']:x"),_.push("!=",ot)}),q=RegExp(q.join("|")),_=RegExp(_.join("|")),O=n(H.contains)||H.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},B=H.compareDocumentPosition?function(e,t){var n;return e===t?(A=!0,0):(n=t.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(t))?1&n||e.parentNode&&11===e.parentNode.nodeType?e===r||O(R,e)?-1:t===r||O(R,t)?1:0:4&n?-1:1:e.compareDocumentPosition?-1:1}:function(e,t){var n,i=0,o=e.parentNode,a=t.parentNode,u=[e],l=[t];if(e===t)return A=!0,0;if(e.sourceIndex&&t.sourceIndex)return(~t.sourceIndex||Y)-(O(R,e)&&~e.sourceIndex||Y);if(!o||!a)return e===r?-1:t===r?1:o?-1:a?1:0;if(o===a)return s(e,t);for(n=e;n=n.parentNode;)u.unshift(n);for(n=t;n=n.parentNode;)l.unshift(n);for(;u[i]===l[i];)i++;return i?s(u[i],l[i]):u[i]===R?-1:l[i]===R?1:0},A=!1,[0,0].sort(B),W.detectDuplicates=A,L):L},a.matches=function(e,t){return a(e,null,null,t)},a.matchesSelector=function(e,t){if((e.ownerDocument||e)!==L&&D(e),t=t.replace(bt,"='$1']"),!(!W.matchesSelector||M||_&&_.test(t)||q.test(t)))try{var n=F.call(e,t);if(n||W.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(r){}return a(t,L,null,[e]).length>0},a.contains=function(e,t){return(e.ownerDocument||e)!==L&&D(e),O(e,t)},a.attr=function(e,t){var n;return(e.ownerDocument||e)!==L&&D(e),M||(t=t.toLowerCase()),(n=C.attrHandle[t])?n(e):M||W.attributes?e.getAttribute(t):((n=e.getAttributeNode(t))||e.getAttribute(t))&&e[t]===!0?t:n&&n.specified?n.value:null},a.error=function(e){throw Error("Syntax error, unrecognized expression: "+e)},a.uniqueSort=function(e){var t,n=[],r=1,i=0;if(A=!W.detectDuplicates,e.sort(B),A){for(;t=e[r];r++)t===e[r-1]&&(i=n.push(r));for(;i--;)e.splice(n[i],1)}return e},k=a.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=k(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=k(t);return n},C=a.selectors={cacheLength:50,createPseudo:i,match:pt,find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(xt,Tt),e[3]=(e[4]||e[5]||"").replace(xt,Tt),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||a.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&a.error(e[0]),e},PSEUDO:function(e){var t,n=!e[5]&&e[2];return pt.CHILD.test(e[0])?null:(e[4]?e[2]=e[4]:n&&ct.test(n)&&(t=f(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){return"*"===e?function(){return!0}:(e=e.replace(xt,Tt).toLowerCase(),function(t){return t.nodeName&&t.nodeName.toLowerCase()===e})},CLASS:function(e){var t=z[e+" "];return t||(t=RegExp("(^|"+et+")"+e+"("+et+"|$)"))&&z(e,function(e){return t.test(e.className||typeof e.getAttribute!==V&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=a.attr(r,e);return null==i?"!="===t:t?(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.substr(i.length-n.length)===n:"~="===t?(" "+i+" ").indexOf(n)>-1:"|="===t?i===n||i.substr(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,f,p,d,h,g=o!==a?"nextSibling":"previousSibling",m=t.parentNode,y=s&&t.nodeName.toLowerCase(),v=!u&&!s;if(m){if(o){for(;g;){for(f=t;f=f[g];)if(s?f.nodeName.toLowerCase()===y:1===f.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?m.firstChild:m.lastChild],a&&v){for(c=m[P]||(m[P]={}),l=c[e]||[],d=l[0]===$&&l[1],p=l[0]===$&&l[2],f=d&&m.childNodes[d];f=++d&&f&&f[g]||(p=d=0)||h.pop();)if(1===f.nodeType&&++p&&f===t){c[e]=[$,d,p];break}}else if(v&&(l=(t[P]||(t[P]={}))[e])&&l[0]===$)p=l[1];else for(;(f=++d&&f&&f[g]||(p=d=0)||h.pop())&&((s?f.nodeName.toLowerCase()!==y:1!==f.nodeType)||!++p||(v&&((f[P]||(f[P]={}))[e]=[$,p]),f!==t)););return p-=i,p===r||0===p%r&&p/r>=0}}},PSEUDO:function(e,t){var n,r=C.pseudos[e]||C.setFilters[e.toLowerCase()]||a.error("unsupported pseudo: "+e);return r[P]?r(t):r.length>1?(n=[e,e,"",t],C.setFilters.hasOwnProperty(e.toLowerCase())?i(function(e,n){for(var i,o=r(e,t),a=o.length;a--;)i=Z.call(e,o[a]),e[i]=!(n[i]=o[a])}):function(e){return r(e,0,n)}):r}},pseudos:{not:i(function(e){var t=[],n=[],r=S(e.replace(at,"$1"));return r[P]?i(function(e,t,n,i){for(var o,a=r(e,null,i,[]),s=e.length;s--;)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),!n.pop()}}),has:i(function(e){return function(t){return a(e,t).length>0}}),contains:i(function(e){return function(t){return(t.textContent||t.innerText||k(t)).indexOf(e)>-1}}),lang:i(function(e){return ft.test(e||"")||a.error("unsupported lang: "+e),e=e.replace(xt,Tt).toLowerCase(),function(t){var n;do if(n=M?t.getAttribute("xml:lang")||t.getAttribute("lang"):t.lang)return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===H},focus:function(e){return e===L.activeElement&&(!L.hasFocus||L.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>"@"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!C.pseudos.empty(e)},header:function(e){return yt.test(e.nodeName)},input:function(e){return mt.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||t.toLowerCase()===e.type)},first:c(function(){return[0]}),last:c(function(e,t){return[t-1]}),eq:c(function(e,t,n){return[0>n?n+t:n]}),even:c(function(e,t){for(var n=0;t>n;n+=2)e.push(n);return e}),odd:c(function(e,t){for(var n=1;t>n;n+=2)e.push(n);return e}),lt:c(function(e,t,n){for(var r=0>n?n+t:n;--r>=0;)e.push(r);return e}),gt:c(function(e,t,n){for(var r=0>n?n+t:n;t>++r;)e.push(r);return e})}};for(w in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})C.pseudos[w]=u(w);for(w in{submit:!0,reset:!0})C.pseudos[w]=l(w);S=a.compile=function(e,t){var n,r=[],i=[],o=U[e+" "];if(!o){for(t||(t=f(e)),n=t.length;n--;)o=y(t[n]),o[P]?r.push(o):i.push(o);o=U(e,v(i,r))}return o},C.pseudos.nth=C.pseudos.eq,C.filters=T.prototype=C.pseudos,C.setFilters=new T,D(),a.attr=st.attr,st.find=a,st.expr=a.selectors,st.expr[":"]=st.expr.pseudos,st.unique=a.uniqueSort,st.text=a.getText,st.isXMLDoc=a.isXML,st.contains=a.contains}(e);var Pt=/Until$/,Rt=/^(?:parents|prev(?:Until|All))/,Wt=/^.[^:#\[\.,]*$/,$t=st.expr.match.needsContext,It={children:!0,contents:!0,next:!0,prev:!0};st.fn.extend({find:function(e){var t,n,r;if("string"!=typeof e)return r=this,this.pushStack(st(e).filter(function(){for(t=0;r.length>t;t++)if(st.contains(r[t],this))return!0}));for(n=[],t=0;this.length>t;t++)st.find(e,this[t],n);return n=this.pushStack(st.unique(n)),n.selector=(this.selector?this.selector+" ":"")+e,n},has:function(e){var t,n=st(e,this),r=n.length;return this.filter(function(){for(t=0;r>t;t++)if(st.contains(this,n[t]))return!0})},not:function(e){return this.pushStack(f(this,e,!1))},filter:function(e){return this.pushStack(f(this,e,!0))},is:function(e){return!!e&&("string"==typeof e?$t.test(e)?st(e,this.context).index(this[0])>=0:st.filter(e,this).length>0:this.filter(e).length>0)},closest:function(e,t){for(var n,r=0,i=this.length,o=[],a=$t.test(e)||"string"!=typeof e?st(e,t||this.context):0;i>r;r++)for(n=this[r];n&&n.ownerDocument&&n!==t&&11!==n.nodeType;){if(a?a.index(n)>-1:st.find.matchesSelector(n,e)){o.push(n);break}n=n.parentNode}return this.pushStack(o.length>1?st.unique(o):o)},index:function(e){return e?"string"==typeof e?st.inArray(this[0],st(e)):st.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){var n="string"==typeof e?st(e,t):st.makeArray(e&&e.nodeType?[e]:e),r=st.merge(this.get(),n);return this.pushStack(st.unique(r))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),st.fn.andSelf=st.fn.addBack,st.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return st.dir(e,"parentNode")},parentsUntil:function(e,t,n){return st.dir(e,"parentNode",n)},next:function(e){return c(e,"nextSibling")},prev:function(e){return c(e,"previousSibling")
+},nextAll:function(e){return st.dir(e,"nextSibling")},prevAll:function(e){return st.dir(e,"previousSibling")},nextUntil:function(e,t,n){return st.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return st.dir(e,"previousSibling",n)},siblings:function(e){return st.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return st.sibling(e.firstChild)},contents:function(e){return st.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:st.merge([],e.childNodes)}},function(e,t){st.fn[e]=function(n,r){var i=st.map(this,t,n);return Pt.test(e)||(r=n),r&&"string"==typeof r&&(i=st.filter(r,i)),i=this.length>1&&!It[e]?st.unique(i):i,this.length>1&&Rt.test(e)&&(i=i.reverse()),this.pushStack(i)}}),st.extend({filter:function(e,t,n){return n&&(e=":not("+e+")"),1===t.length?st.find.matchesSelector(t[0],e)?[t[0]]:[]:st.find.matches(e,t)},dir:function(e,n,r){for(var i=[],o=e[n];o&&9!==o.nodeType&&(r===t||1!==o.nodeType||!st(o).is(r));)1===o.nodeType&&i.push(o),o=o[n];return i},sibling:function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}});var zt="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",Xt=/ jQuery\d+="(?:null|\d+)"/g,Ut=RegExp("<(?:"+zt+")[\\s/>]","i"),Vt=/^\s+/,Yt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,Jt=/<([\w:]+)/,Gt=/<tbody/i,Qt=/<|&#?\w+;/,Kt=/<(?:script|style|link)/i,Zt=/^(?:checkbox|radio)$/i,en=/checked\s*(?:[^=]|=\s*.checked.)/i,tn=/^$|\/(?:java|ecma)script/i,nn=/^true\/(.*)/,rn=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,on={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:st.support.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},an=p(V),sn=an.appendChild(V.createElement("div"));on.optgroup=on.option,on.tbody=on.tfoot=on.colgroup=on.caption=on.thead,on.th=on.td,st.fn.extend({text:function(e){return st.access(this,function(e){return e===t?st.text(this):this.empty().append((this[0]&&this[0].ownerDocument||V).createTextNode(e))},null,e,arguments.length)},wrapAll:function(e){if(st.isFunction(e))return this.each(function(t){st(this).wrapAll(e.call(this,t))});if(this[0]){var t=st(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){for(var e=this;e.firstChild&&1===e.firstChild.nodeType;)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return st.isFunction(e)?this.each(function(t){st(this).wrapInner(e.call(this,t))}):this.each(function(){var t=st(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=st.isFunction(e);return this.each(function(n){st(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){st.nodeName(this,"body")||st(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(e){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&this.appendChild(e)})},prepend:function(){return this.domManip(arguments,!0,function(e){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&this.insertBefore(e,this.firstChild)})},before:function(){return this.domManip(arguments,!1,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,!1,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){for(var n,r=0;null!=(n=this[r]);r++)(!e||st.filter(e,[n]).length>0)&&(t||1!==n.nodeType||st.cleanData(b(n)),n.parentNode&&(t&&st.contains(n.ownerDocument,n)&&m(b(n,"script")),n.parentNode.removeChild(n)));return this},empty:function(){for(var e,t=0;null!=(e=this[t]);t++){for(1===e.nodeType&&st.cleanData(b(e,!1));e.firstChild;)e.removeChild(e.firstChild);e.options&&st.nodeName(e,"select")&&(e.options.length=0)}return this},clone:function(e,t){return e=null==e?!1:e,t=null==t?e:t,this.map(function(){return st.clone(this,e,t)})},html:function(e){return st.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return 1===n.nodeType?n.innerHTML.replace(Xt,""):t;if(!("string"!=typeof e||Kt.test(e)||!st.support.htmlSerialize&&Ut.test(e)||!st.support.leadingWhitespace&&Vt.test(e)||on[(Jt.exec(e)||["",""])[1].toLowerCase()])){e=e.replace(Yt,"<$1></$2>");try{for(;i>r;r++)n=this[r]||{},1===n.nodeType&&(st.cleanData(b(n,!1)),n.innerHTML=e);n=0}catch(o){}}n&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(e){var t=st.isFunction(e);return t||"string"==typeof e||(e=st(e).not(this).detach()),this.domManip([e],!0,function(e){var t=this.nextSibling,n=this.parentNode;(n&&1===this.nodeType||11===this.nodeType)&&(st(this).remove(),t?t.parentNode.insertBefore(e,t):n.appendChild(e))})},detach:function(e){return this.remove(e,!0)},domManip:function(e,n,r){e=et.apply([],e);var i,o,a,s,u,l,c=0,f=this.length,p=this,m=f-1,y=e[0],v=st.isFunction(y);if(v||!(1>=f||"string"!=typeof y||st.support.checkClone)&&en.test(y))return this.each(function(i){var o=p.eq(i);v&&(e[0]=y.call(this,i,n?o.html():t)),o.domManip(e,n,r)});if(f&&(i=st.buildFragment(e,this[0].ownerDocument,!1,this),o=i.firstChild,1===i.childNodes.length&&(i=o),o)){for(n=n&&st.nodeName(o,"tr"),a=st.map(b(i,"script"),h),s=a.length;f>c;c++)u=i,c!==m&&(u=st.clone(u,!0,!0),s&&st.merge(a,b(u,"script"))),r.call(n&&st.nodeName(this[c],"table")?d(this[c],"tbody"):this[c],u,c);if(s)for(l=a[a.length-1].ownerDocument,st.map(a,g),c=0;s>c;c++)u=a[c],tn.test(u.type||"")&&!st._data(u,"globalEval")&&st.contains(l,u)&&(u.src?st.ajax({url:u.src,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0}):st.globalEval((u.text||u.textContent||u.innerHTML||"").replace(rn,"")));i=o=null}return this}}),st.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){st.fn[e]=function(e){for(var n,r=0,i=[],o=st(e),a=o.length-1;a>=r;r++)n=r===a?this:this.clone(!0),st(o[r])[t](n),tt.apply(i,n.get());return this.pushStack(i)}}),st.extend({clone:function(e,t,n){var r,i,o,a,s,u=st.contains(e.ownerDocument,e);if(st.support.html5Clone||st.isXMLDoc(e)||!Ut.test("<"+e.nodeName+">")?s=e.cloneNode(!0):(sn.innerHTML=e.outerHTML,sn.removeChild(s=sn.firstChild)),!(st.support.noCloneEvent&&st.support.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||st.isXMLDoc(e)))for(r=b(s),i=b(e),a=0;null!=(o=i[a]);++a)r[a]&&v(o,r[a]);if(t)if(n)for(i=i||b(e),r=r||b(s),a=0;null!=(o=i[a]);a++)y(o,r[a]);else y(e,s);return r=b(s,"script"),r.length>0&&m(r,!u&&b(e,"script")),r=i=o=null,s},buildFragment:function(e,t,n,r){for(var i,o,a,s,u,l,c,f=e.length,d=p(t),h=[],g=0;f>g;g++)if(o=e[g],o||0===o)if("object"===st.type(o))st.merge(h,o.nodeType?[o]:o);else if(Qt.test(o)){for(s=s||d.appendChild(t.createElement("div")),a=(Jt.exec(o)||["",""])[1].toLowerCase(),u=on[a]||on._default,s.innerHTML=u[1]+o.replace(Yt,"<$1></$2>")+u[2],c=u[0];c--;)s=s.lastChild;if(!st.support.leadingWhitespace&&Vt.test(o)&&h.push(t.createTextNode(Vt.exec(o)[0])),!st.support.tbody)for(o="table"!==a||Gt.test(o)?"<table>"!==u[1]||Gt.test(o)?0:s:s.firstChild,c=o&&o.childNodes.length;c--;)st.nodeName(l=o.childNodes[c],"tbody")&&!l.childNodes.length&&o.removeChild(l);for(st.merge(h,s.childNodes),s.textContent="";s.firstChild;)s.removeChild(s.firstChild);s=d.lastChild}else h.push(t.createTextNode(o));for(s&&d.removeChild(s),st.support.appendChecked||st.grep(b(h,"input"),x),g=0;o=h[g++];)if((!r||-1===st.inArray(o,r))&&(i=st.contains(o.ownerDocument,o),s=b(d.appendChild(o),"script"),i&&m(s),n))for(c=0;o=s[c++];)tn.test(o.type||"")&&n.push(o);return s=null,d},cleanData:function(e,n){for(var r,i,o,a,s=0,u=st.expando,l=st.cache,c=st.support.deleteExpando,f=st.event.special;null!=(o=e[s]);s++)if((n||st.acceptData(o))&&(i=o[u],r=i&&l[i])){if(r.events)for(a in r.events)f[a]?st.event.remove(o,a):st.removeEvent(o,a,r.handle);l[i]&&(delete l[i],c?delete o[u]:o.removeAttribute!==t?o.removeAttribute(u):o[u]=null,K.push(i))}}});var un,ln,cn,fn=/alpha\([^)]*\)/i,pn=/opacity\s*=\s*([^)]*)/,dn=/^(top|right|bottom|left)$/,hn=/^(none|table(?!-c[ea]).+)/,gn=/^margin/,mn=RegExp("^("+ut+")(.*)$","i"),yn=RegExp("^("+ut+")(?!px)[a-z%]+$","i"),vn=RegExp("^([+-])=("+ut+")","i"),bn={BODY:"block"},xn={position:"absolute",visibility:"hidden",display:"block"},Tn={letterSpacing:0,fontWeight:400},wn=["Top","Right","Bottom","Left"],Nn=["Webkit","O","Moz","ms"];st.fn.extend({css:function(e,n){return st.access(this,function(e,n,r){var i,o,a={},s=0;if(st.isArray(n)){for(i=ln(e),o=n.length;o>s;s++)a[n[s]]=st.css(e,n[s],!1,i);return a}return r!==t?st.style(e,n,r):st.css(e,n)},e,n,arguments.length>1)},show:function(){return N(this,!0)},hide:function(){return N(this)},toggle:function(e){var t="boolean"==typeof e;return this.each(function(){(t?e:w(this))?st(this).show():st(this).hide()})}}),st.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=un(e,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":st.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,a,s,u=st.camelCase(n),l=e.style;if(n=st.cssProps[u]||(st.cssProps[u]=T(l,u)),s=st.cssHooks[n]||st.cssHooks[u],r===t)return s&&"get"in s&&(o=s.get(e,!1,i))!==t?o:l[n];if(a=typeof r,"string"===a&&(o=vn.exec(r))&&(r=(o[1]+1)*o[2]+parseFloat(st.css(e,n)),a="number"),!(null==r||"number"===a&&isNaN(r)||("number"!==a||st.cssNumber[u]||(r+="px"),st.support.clearCloneStyle||""!==r||0!==n.indexOf("background")||(l[n]="inherit"),s&&"set"in s&&(r=s.set(e,r,i))===t)))try{l[n]=r}catch(c){}}},css:function(e,n,r,i){var o,a,s,u=st.camelCase(n);return n=st.cssProps[u]||(st.cssProps[u]=T(e.style,u)),s=st.cssHooks[n]||st.cssHooks[u],s&&"get"in s&&(o=s.get(e,!0,r)),o===t&&(o=un(e,n,i)),"normal"===o&&n in Tn&&(o=Tn[n]),r?(a=parseFloat(o),r===!0||st.isNumeric(a)?a||0:o):o},swap:function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i}}),e.getComputedStyle?(ln=function(t){return e.getComputedStyle(t,null)},un=function(e,n,r){var i,o,a,s=r||ln(e),u=s?s.getPropertyValue(n)||s[n]:t,l=e.style;return s&&(""!==u||st.contains(e.ownerDocument,e)||(u=st.style(e,n)),yn.test(u)&&gn.test(n)&&(i=l.width,o=l.minWidth,a=l.maxWidth,l.minWidth=l.maxWidth=l.width=u,u=s.width,l.width=i,l.minWidth=o,l.maxWidth=a)),u}):V.documentElement.currentStyle&&(ln=function(e){return e.currentStyle},un=function(e,n,r){var i,o,a,s=r||ln(e),u=s?s[n]:t,l=e.style;return null==u&&l&&l[n]&&(u=l[n]),yn.test(u)&&!dn.test(n)&&(i=l.left,o=e.runtimeStyle,a=o&&o.left,a&&(o.left=e.currentStyle.left),l.left="fontSize"===n?"1em":u,u=l.pixelLeft+"px",l.left=i,a&&(o.left=a)),""===u?"auto":u}),st.each(["height","width"],function(e,n){st.cssHooks[n]={get:function(e,r,i){return r?0===e.offsetWidth&&hn.test(st.css(e,"display"))?st.swap(e,xn,function(){return E(e,n,i)}):E(e,n,i):t},set:function(e,t,r){var i=r&&ln(e);return C(e,t,r?k(e,n,r,st.support.boxSizing&&"border-box"===st.css(e,"boxSizing",!1,i),i):0)}}}),st.support.opacity||(st.cssHooks.opacity={get:function(e,t){return pn.test((t&&e.currentStyle?e.currentStyle.filter:e.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":t?"1":""},set:function(e,t){var n=e.style,r=e.currentStyle,i=st.isNumeric(t)?"alpha(opacity="+100*t+")":"",o=r&&r.filter||n.filter||"";n.zoom=1,(t>=1||""===t)&&""===st.trim(o.replace(fn,""))&&n.removeAttribute&&(n.removeAttribute("filter"),""===t||r&&!r.filter)||(n.filter=fn.test(o)?o.replace(fn,i):o+" "+i)}}),st(function(){st.support.reliableMarginRight||(st.cssHooks.marginRight={get:function(e,n){return n?st.swap(e,{display:"inline-block"},un,[e,"marginRight"]):t}}),!st.support.pixelPosition&&st.fn.position&&st.each(["top","left"],function(e,n){st.cssHooks[n]={get:function(e,r){return r?(r=un(e,n),yn.test(r)?st(e).position()[n]+"px":r):t}}})}),st.expr&&st.expr.filters&&(st.expr.filters.hidden=function(e){return 0===e.offsetWidth&&0===e.offsetHeight||!st.support.reliableHiddenOffsets&&"none"===(e.style&&e.style.display||st.css(e,"display"))},st.expr.filters.visible=function(e){return!st.expr.filters.hidden(e)}),st.each({margin:"",padding:"",border:"Width"},function(e,t){st.cssHooks[e+t]={expand:function(n){for(var r=0,i={},o="string"==typeof n?n.split(" "):[n];4>r;r++)i[e+wn[r]+t]=o[r]||o[r-2]||o[0];return i}},gn.test(e)||(st.cssHooks[e+t].set=C)});var Cn=/%20/g,kn=/\[\]$/,En=/\r?\n/g,Sn=/^(?:submit|button|image|reset)$/i,An=/^(?:input|select|textarea|keygen)/i;st.fn.extend({serialize:function(){return st.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=st.prop(this,"elements");return e?st.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!st(this).is(":disabled")&&An.test(this.nodeName)&&!Sn.test(e)&&(this.checked||!Zt.test(e))}).map(function(e,t){var n=st(this).val();return null==n?null:st.isArray(n)?st.map(n,function(e){return{name:t.name,value:e.replace(En,"\r\n")}}):{name:t.name,value:n.replace(En,"\r\n")}}).get()}}),st.param=function(e,n){var r,i=[],o=function(e,t){t=st.isFunction(t)?t():null==t?"":t,i[i.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};if(n===t&&(n=st.ajaxSettings&&st.ajaxSettings.traditional),st.isArray(e)||e.jquery&&!st.isPlainObject(e))st.each(e,function(){o(this.name,this.value)});else for(r in e)j(r,e[r],n,o);return i.join("&").replace(Cn,"+")};var jn,Dn,Ln=st.now(),Hn=/\?/,Mn=/#.*$/,qn=/([?&])_=[^&]*/,_n=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Fn=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,On=/^(?:GET|HEAD)$/,Bn=/^\/\//,Pn=/^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,Rn=st.fn.load,Wn={},$n={},In="*/".concat("*");try{Dn=Y.href}catch(zn){Dn=V.createElement("a"),Dn.href="",Dn=Dn.href}jn=Pn.exec(Dn.toLowerCase())||[],st.fn.load=function(e,n,r){if("string"!=typeof e&&Rn)return Rn.apply(this,arguments);var i,o,a,s=this,u=e.indexOf(" ");return u>=0&&(i=e.slice(u,e.length),e=e.slice(0,u)),st.isFunction(n)?(r=n,n=t):n&&"object"==typeof n&&(o="POST"),s.length>0&&st.ajax({url:e,type:o,dataType:"html",data:n}).done(function(e){a=arguments,s.html(i?st("<div>").append(st.parseHTML(e)).find(i):e)}).complete(r&&function(e,t){s.each(r,a||[e.responseText,t,e])}),this},st.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){st.fn[t]=function(e){return this.on(t,e)}}),st.each(["get","post"],function(e,n){st[n]=function(e,r,i,o){return st.isFunction(r)&&(o=o||i,i=r,r=t),st.ajax({url:e,type:n,dataType:o,data:r,success:i})}}),st.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Dn,type:"GET",isLocal:Fn.test(jn[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":In,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":e.String,"text html":!0,"text json":st.parseJSON,"text xml":st.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?H(H(e,st.ajaxSettings),t):H(st.ajaxSettings,e)},ajaxPrefilter:D(Wn),ajaxTransport:D($n),ajax:function(e,n){function r(e,n,r,s){var l,f,v,b,T,N=n;2!==x&&(x=2,u&&clearTimeout(u),i=t,a=s||"",w.readyState=e>0?4:0,r&&(b=M(p,w,r)),e>=200&&300>e||304===e?(p.ifModified&&(T=w.getResponseHeader("Last-Modified"),T&&(st.lastModified[o]=T),T=w.getResponseHeader("etag"),T&&(st.etag[o]=T)),304===e?(l=!0,N="notmodified"):(l=q(p,b),N=l.state,f=l.data,v=l.error,l=!v)):(v=N,(e||!N)&&(N="error",0>e&&(e=0))),w.status=e,w.statusText=(n||N)+"",l?g.resolveWith(d,[f,N,w]):g.rejectWith(d,[w,N,v]),w.statusCode(y),y=t,c&&h.trigger(l?"ajaxSuccess":"ajaxError",[w,p,l?f:v]),m.fireWith(d,[w,N]),c&&(h.trigger("ajaxComplete",[w,p]),--st.active||st.event.trigger("ajaxStop")))}"object"==typeof e&&(n=e,e=t),n=n||{};var i,o,a,s,u,l,c,f,p=st.ajaxSetup({},n),d=p.context||p,h=p.context&&(d.nodeType||d.jquery)?st(d):st.event,g=st.Deferred(),m=st.Callbacks("once memory"),y=p.statusCode||{},v={},b={},x=0,T="canceled",w={readyState:0,getResponseHeader:function(e){var t;if(2===x){if(!s)for(s={};t=_n.exec(a);)s[t[1].toLowerCase()]=t[2];t=s[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return 2===x?a:null},setRequestHeader:function(e,t){var n=e.toLowerCase();return x||(e=b[n]=b[n]||e,v[e]=t),this},overrideMimeType:function(e){return x||(p.mimeType=e),this},statusCode:function(e){var t;if(e)if(2>x)for(t in e)y[t]=[y[t],e[t]];else w.always(e[w.status]);return this},abort:function(e){var t=e||T;return i&&i.abort(t),r(0,t),this}};if(g.promise(w).complete=m.add,w.success=w.done,w.error=w.fail,p.url=((e||p.url||Dn)+"").replace(Mn,"").replace(Bn,jn[1]+"//"),p.type=n.method||n.type||p.method||p.type,p.dataTypes=st.trim(p.dataType||"*").toLowerCase().match(lt)||[""],null==p.crossDomain&&(l=Pn.exec(p.url.toLowerCase()),p.crossDomain=!(!l||l[1]===jn[1]&&l[2]===jn[2]&&(l[3]||("http:"===l[1]?80:443))==(jn[3]||("http:"===jn[1]?80:443)))),p.data&&p.processData&&"string"!=typeof p.data&&(p.data=st.param(p.data,p.traditional)),L(Wn,p,n,w),2===x)return w;c=p.global,c&&0===st.active++&&st.event.trigger("ajaxStart"),p.type=p.type.toUpperCase(),p.hasContent=!On.test(p.type),o=p.url,p.hasContent||(p.data&&(o=p.url+=(Hn.test(o)?"&":"?")+p.data,delete p.data),p.cache===!1&&(p.url=qn.test(o)?o.replace(qn,"$1_="+Ln++):o+(Hn.test(o)?"&":"?")+"_="+Ln++)),p.ifModified&&(st.lastModified[o]&&w.setRequestHeader("If-Modified-Since",st.lastModified[o]),st.etag[o]&&w.setRequestHeader("If-None-Match",st.etag[o])),(p.data&&p.hasContent&&p.contentType!==!1||n.contentType)&&w.setRequestHeader("Content-Type",p.contentType),w.setRequestHeader("Accept",p.dataTypes[0]&&p.accepts[p.dataTypes[0]]?p.accepts[p.dataTypes[0]]+("*"!==p.dataTypes[0]?", "+In+"; q=0.01":""):p.accepts["*"]);for(f in p.headers)w.setRequestHeader(f,p.headers[f]);if(p.beforeSend&&(p.beforeSend.call(d,w,p)===!1||2===x))return w.abort();T="abort";for(f in{success:1,error:1,complete:1})w[f](p[f]);if(i=L($n,p,n,w)){w.readyState=1,c&&h.trigger("ajaxSend",[w,p]),p.async&&p.timeout>0&&(u=setTimeout(function(){w.abort("timeout")},p.timeout));try{x=1,i.send(v,r)}catch(N){if(!(2>x))throw N;r(-1,N)}}else r(-1,"No Transport");return w},getScript:function(e,n){return st.get(e,t,n,"script")},getJSON:function(e,t,n){return st.get(e,t,n,"json")}}),st.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(e){return st.globalEval(e),e}}}),st.ajaxPrefilter("script",function(e){e.cache===t&&(e.cache=!1),e.crossDomain&&(e.type="GET",e.global=!1)}),st.ajaxTransport("script",function(e){if(e.crossDomain){var n,r=V.head||st("head")[0]||V.documentElement;return{send:function(t,i){n=V.createElement("script"),n.async=!0,e.scriptCharset&&(n.charset=e.scriptCharset),n.src=e.url,n.onload=n.onreadystatechange=function(e,t){(t||!n.readyState||/loaded|complete/.test(n.readyState))&&(n.onload=n.onreadystatechange=null,n.parentNode&&n.parentNode.removeChild(n),n=null,t||i(200,"success"))},r.insertBefore(n,r.firstChild)},abort:function(){n&&n.onload(t,!0)}}}});var Xn=[],Un=/(=)\?(?=&|$)|\?\?/;st.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Xn.pop()||st.expando+"_"+Ln++;return this[e]=!0,e}}),st.ajaxPrefilter("json jsonp",function(n,r,i){var o,a,s,u=n.jsonp!==!1&&(Un.test(n.url)?"url":"string"==typeof n.data&&!(n.contentType||"").indexOf("application/x-www-form-urlencoded")&&Un.test(n.data)&&"data");return u||"jsonp"===n.dataTypes[0]?(o=n.jsonpCallback=st.isFunction(n.jsonpCallback)?n.jsonpCallback():n.jsonpCallback,u?n[u]=n[u].replace(Un,"$1"+o):n.jsonp!==!1&&(n.url+=(Hn.test(n.url)?"&":"?")+n.jsonp+"="+o),n.converters["script json"]=function(){return s||st.error(o+" was not called"),s[0]},n.dataTypes[0]="json",a=e[o],e[o]=function(){s=arguments},i.always(function(){e[o]=a,n[o]&&(n.jsonpCallback=r.jsonpCallback,Xn.push(o)),s&&st.isFunction(a)&&a(s[0]),s=a=t}),"script"):t});var Vn,Yn,Jn=0,Gn=e.ActiveXObject&&function(){var e;for(e in Vn)Vn[e](t,!0)};st.ajaxSettings.xhr=e.ActiveXObject?function(){return!this.isLocal&&_()||F()}:_,Yn=st.ajaxSettings.xhr(),st.support.cors=!!Yn&&"withCredentials"in Yn,Yn=st.support.ajax=!!Yn,Yn&&st.ajaxTransport(function(n){if(!n.crossDomain||st.support.cors){var r;return{send:function(i,o){var a,s,u=n.xhr();if(n.username?u.open(n.type,n.url,n.async,n.username,n.password):u.open(n.type,n.url,n.async),n.xhrFields)for(s in n.xhrFields)u[s]=n.xhrFields[s];n.mimeType&&u.overrideMimeType&&u.overrideMimeType(n.mimeType),n.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");try{for(s in i)u.setRequestHeader(s,i[s])}catch(l){}u.send(n.hasContent&&n.data||null),r=function(e,i){var s,l,c,f,p;try{if(r&&(i||4===u.readyState))if(r=t,a&&(u.onreadystatechange=st.noop,Gn&&delete Vn[a]),i)4!==u.readyState&&u.abort();else{f={},s=u.status,p=u.responseXML,c=u.getAllResponseHeaders(),p&&p.documentElement&&(f.xml=p),"string"==typeof u.responseText&&(f.text=u.responseText);try{l=u.statusText}catch(d){l=""}s||!n.isLocal||n.crossDomain?1223===s&&(s=204):s=f.text?200:404}}catch(h){i||o(-1,h)}f&&o(s,l,f,c)},n.async?4===u.readyState?setTimeout(r):(a=++Jn,Gn&&(Vn||(Vn={},st(e).unload(Gn)),Vn[a]=r),u.onreadystatechange=r):r()},abort:function(){r&&r(t,!0)}}}});var Qn,Kn,Zn=/^(?:toggle|show|hide)$/,er=RegExp("^(?:([+-])=|)("+ut+")([a-z%]*)$","i"),tr=/queueHooks$/,nr=[W],rr={"*":[function(e,t){var n,r,i=this.createTween(e,t),o=er.exec(t),a=i.cur(),s=+a||0,u=1,l=20;if(o){if(n=+o[2],r=o[3]||(st.cssNumber[e]?"":"px"),"px"!==r&&s){s=st.css(i.elem,e,!0)||n||1;do u=u||".5",s/=u,st.style(i.elem,e,s+r);while(u!==(u=i.cur()/a)&&1!==u&&--l)}i.unit=r,i.start=s,i.end=o[1]?s+(o[1]+1)*n:n}return i}]};st.Animation=st.extend(P,{tweener:function(e,t){st.isFunction(e)?(t=e,e=["*"]):e=e.split(" ");for(var n,r=0,i=e.length;i>r;r++)n=e[r],rr[n]=rr[n]||[],rr[n].unshift(t)},prefilter:function(e,t){t?nr.unshift(e):nr.push(e)}}),st.Tween=$,$.prototype={constructor:$,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||"swing",this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(st.cssNumber[n]?"":"px")},cur:function(){var e=$.propHooks[this.prop];return e&&e.get?e.get(this):$.propHooks._default.get(this)},run:function(e){var t,n=$.propHooks[this.prop];return this.pos=t=this.options.duration?st.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):$.propHooks._default.set(this),this}},$.prototype.init.prototype=$.prototype,$.propHooks={_default:{get:function(e){var t;return null==e.elem[e.prop]||e.elem.style&&null!=e.elem.style[e.prop]?(t=st.css(e.elem,e.prop,"auto"),t&&"auto"!==t?t:0):e.elem[e.prop]},set:function(e){st.fx.step[e.prop]?st.fx.step[e.prop](e):e.elem.style&&(null!=e.elem.style[st.cssProps[e.prop]]||st.cssHooks[e.prop])?st.style(e.elem,e.prop,e.now+e.unit):e.elem[e.prop]=e.now}}},$.propHooks.scrollTop=$.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},st.each(["toggle","show","hide"],function(e,t){var n=st.fn[t];st.fn[t]=function(e,r,i){return null==e||"boolean"==typeof e?n.apply(this,arguments):this.animate(I(t,!0),e,r,i)}}),st.fn.extend({fadeTo:function(e,t,n,r){return this.filter(w).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=st.isEmptyObject(e),o=st.speed(t,n,r),a=function(){var t=P(this,st.extend({},e),o);a.finish=function(){t.stop(!0)},(i||st._data(this,"finish"))&&t.stop(!0)};return a.finish=a,i||o.queue===!1?this.each(a):this.queue(o.queue,a)},stop:function(e,n,r){var i=function(e){var t=e.stop;delete e.stop,t(r)};return"string"!=typeof e&&(r=n,n=e,e=t),n&&e!==!1&&this.queue(e||"fx",[]),this.each(function(){var t=!0,n=null!=e&&e+"queueHooks",o=st.timers,a=st._data(this);if(n)a[n]&&a[n].stop&&i(a[n]);else for(n in a)a[n]&&a[n].stop&&tr.test(n)&&i(a[n]);for(n=o.length;n--;)o[n].elem!==this||null!=e&&o[n].queue!==e||(o[n].anim.stop(r),t=!1,o.splice(n,1));(t||!r)&&st.dequeue(this,e)})},finish:function(e){return e!==!1&&(e=e||"fx"),this.each(function(){var t,n=st._data(this),r=n[e+"queue"],i=n[e+"queueHooks"],o=st.timers,a=r?r.length:0;for(n.finish=!0,st.queue(this,e,[]),i&&i.cur&&i.cur.finish&&i.cur.finish.call(this),t=o.length;t--;)o[t].elem===this&&o[t].queue===e&&(o[t].anim.stop(!0),o.splice(t,1));for(t=0;a>t;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}}),st.each({slideDown:I("show"),slideUp:I("hide"),slideToggle:I("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,t){st.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),st.speed=function(e,t,n){var r=e&&"object"==typeof e?st.extend({},e):{complete:n||!n&&t||st.isFunction(e)&&e,duration:e,easing:n&&t||t&&!st.isFunction(t)&&t};return r.duration=st.fx.off?0:"number"==typeof r.duration?r.duration:r.duration in st.fx.speeds?st.fx.speeds[r.duration]:st.fx.speeds._default,(null==r.queue||r.queue===!0)&&(r.queue="fx"),r.old=r.complete,r.complete=function(){st.isFunction(r.old)&&r.old.call(this),r.queue&&st.dequeue(this,r.queue)},r},st.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2}},st.timers=[],st.fx=$.prototype.init,st.fx.tick=function(){var e,n=st.timers,r=0;for(Qn=st.now();n.length>r;r++)e=n[r],e()||n[r]!==e||n.splice(r--,1);n.length||st.fx.stop(),Qn=t},st.fx.timer=function(e){e()&&st.timers.push(e)&&st.fx.start()},st.fx.interval=13,st.fx.start=function(){Kn||(Kn=setInterval(st.fx.tick,st.fx.interval))},st.fx.stop=function(){clearInterval(Kn),Kn=null},st.fx.speeds={slow:600,fast:200,_default:400},st.fx.step={},st.expr&&st.expr.filters&&(st.expr.filters.animated=function(e){return st.grep(st.timers,function(t){return e===t.elem}).length}),st.fn.offset=function(e){if(arguments.length)return e===t?this:this.each(function(t){st.offset.setOffset(this,e,t)});var n,r,i={top:0,left:0},o=this[0],a=o&&o.ownerDocument;if(a)return n=a.documentElement,st.contains(n,o)?(o.getBoundingClientRect!==t&&(i=o.getBoundingClientRect()),r=z(a),{top:i.top+(r.pageYOffset||n.scrollTop)-(n.clientTop||0),left:i.left+(r.pageXOffset||n.scrollLeft)-(n.clientLeft||0)}):i},st.offset={setOffset:function(e,t,n){var r=st.css(e,"position");"static"===r&&(e.style.position="relative");var i,o,a=st(e),s=a.offset(),u=st.css(e,"top"),l=st.css(e,"left"),c=("absolute"===r||"fixed"===r)&&st.inArray("auto",[u,l])>-1,f={},p={};c?(p=a.position(),i=p.top,o=p.left):(i=parseFloat(u)||0,o=parseFloat(l)||0),st.isFunction(t)&&(t=t.call(e,n,s)),null!=t.top&&(f.top=t.top-s.top+i),null!=t.left&&(f.left=t.left-s.left+o),"using"in t?t.using.call(e,f):a.css(f)}},st.fn.extend({position:function(){if(this[0]){var e,t,n={top:0,left:0},r=this[0];return"fixed"===st.css(r,"position")?t=r.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),st.nodeName(e[0],"html")||(n=e.offset()),n.top+=st.css(e[0],"borderTopWidth",!0),n.left+=st.css(e[0],"borderLeftWidth",!0)),{top:t.top-n.top-st.css(r,"marginTop",!0),left:t.left-n.left-st.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){for(var e=this.offsetParent||V.documentElement;e&&!st.nodeName(e,"html")&&"static"===st.css(e,"position");)e=e.offsetParent;return e||V.documentElement})}}),st.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,n){var r=/Y/.test(n);st.fn[e]=function(i){return st.access(this,function(e,i,o){var a=z(e);return o===t?a?n in a?a[n]:a.document.documentElement[i]:e[i]:(a?a.scrollTo(r?st(a).scrollLeft():o,r?o:st(a).scrollTop()):e[i]=o,t)},e,i,arguments.length,null)}}),st.each({Height:"height",Width:"width"},function(e,n){st.each({padding:"inner"+e,content:n,"":"outer"+e},function(r,i){st.fn[i]=function(i,o){var a=arguments.length&&(r||"boolean"!=typeof i),s=r||(i===!0||o===!0?"margin":"border");return st.access(this,function(n,r,i){var o;return st.isWindow(n)?n.document.documentElement["client"+e]:9===n.nodeType?(o=n.documentElement,Math.max(n.body["scroll"+e],o["scroll"+e],n.body["offset"+e],o["offset"+e],o["client"+e])):i===t?st.css(n,r,s):st.style(n,r,i,s)},n,a?i:t,a,null)}})}),e.jQuery=e.$=st,"function"==typeof define&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return st})})(window);
+//@ sourceMappingURL=jquery.min.map
\ No newline at end of file
diff --git a/vendor/dimsemenov/magnific-popup/website/third-party-libs/uglify.js b/vendor/dimsemenov/magnific-popup/website/third-party-libs/uglify.js
new file mode 100644
index 0000000000000000000000000000000000000000..ccc4f23f2b88a99bfd921ae9989a441c05e3a79b
--- /dev/null
+++ b/vendor/dimsemenov/magnific-popup/website/third-party-libs/uglify.js
@@ -0,0 +1,13 @@
+/**
+ * UglifUI
+ * by Alex Sexton
+ *
+ * UglifyJS 
+ * by Mihai Bazon, BSD license
+ *
+ * Underscore.js
+ * by Brad Dunbar
+ * 
+ */
+(function(){})(),function(){var a=this,b=a._,c={},d=Array.prototype,e=Object.prototype,f=d.slice,g=d.unshift,h=e.toString,i=e.hasOwnProperty,j=d.forEach,k=d.map,l=d.reduce,m=d.reduceRight,n=d.filter,o=d.every,p=d.some,q=d.indexOf,r=d.lastIndexOf;e=Array.isArray;var s=Object.keys,t=function(a){return new y(a)};typeof module!="undefined"&&module.exports?(module.exports=t,t._=t):a._=t,t.VERSION="1.1.4";var u=t.each=t.forEach=function(a,b,d){if(a!=null)if(j&&a.forEach===j)a.forEach(b,d);else if(t.isNumber(a.length)){for(var e=0,f=a.length;e<f;e++)if(b.call(d,a[e],e,a)===c)break}else for(e in a)if(i.call(a,e)&&b.call(d,a[e],e,a)===c)break};t.map=function(a,b,c){var d=[];return a==null?d:k&&a.map===k?a.map(b,c):(u(a,function(a,e,f){d[d.length]=b.call(c,a,e,f)}),d)},t.reduce=t.foldl=t.inject=function(a,b,c,d){var e=c!==void 0;a==null&&(a=[]);if(l&&a.reduce===l)return d&&(b=t.bind(b,d)),e?a.reduce(b,c):a.reduce(b);u(a,function(a,f,g){!e&&f===0?(c=a,e=!0):c=b.call(d,c,a,f,g)});if(!e)throw new TypeError("Reduce of empty array with no initial value");return c},t.reduceRight=t.foldr=function(a,b,c,d){return a==null&&(a=[]),m&&a.reduceRight===m?(d&&(b=t.bind(b,d)),c!==void 0?a.reduceRight(b,c):a.reduceRight(b)):(a=(t.isArray(a)?a.slice():t.toArray(a)).reverse(),t.reduce(a,b,c,d))},t.find=t.detect=function(a,b,c){var d;return v(a,function(a,e,f){if(b.call(c,a,e,f))return d=a,!0}),d},t.filter=t.select=function(a,b,c){var d=[];return a==null?d:n&&a.filter===n?a.filter(b,c):(u(a,function(a,e,f){b.call(c,a,e,f)&&(d[d.length]=a)}),d)},t.reject=function(a,b,c){var d=[];return a==null?d:(u(a,function(a,e,f){b.call(c,a,e,f)||(d[d.length]=a)}),d)},t.every=t.all=function(a,b,d){b=b||t.identity;var e=!0;return a==null?e:o&&a.every===o?a.every(b,d):(u(a,function(a,f,g){if(!(e=e&&b.call(d,a,f,g)))return c}),e)};var v=t.some=t.any=function(a,b,d){b=b||t.identity;var e=!1;return a==null?e:p&&a.some===p?a.some(b,d):(u(a,function(a,f,g){if(e=b.call(d,a,f,g))return c}),e)};t.include=t.contains=function(a,b){var c=!1;return a==null?c:q&&a.indexOf===q?a.indexOf(b)!=-1:(v(a,function(a){if(c=a===b)return!0}),c)},t.invoke=function(a,b){var c=f.call(arguments,2);return t.map(a,function(a){return(b?a[b]:a).apply(a,c)})},t.pluck=function(a,b){return t.map(a,function(a){return a[b]})},t.max=function(a,b,c){if(!b&&t.isArray(a))return Math.max.apply(Math,a);var d={computed:-Infinity};return u(a,function(a,e,f){e=b?b.call(c,a,e,f):a,e>=d.computed&&(d={value:a,computed:e})}),d.value},t.min=function(a,b,c){if(!b&&t.isArray(a))return Math.min.apply(Math,a);var d={computed:Infinity};return u(a,function(a,e,f){e=b?b.call(c,a,e,f):a,e<d.computed&&(d={value:a,computed:e})}),d.value},t.sortBy=function(a,b,c){return t.pluck(t.map(a,function(a,d,e){return{value:a,criteria:b.call(c,a,d,e)}}).sort(function(a,b){var c=a.criteria,d=b.criteria;return c<d?-1:c>d?1:0}),"value")},t.sortedIndex=function(a,b,c){c=c||t.identity;for(var d=0,e=a.length;d<e;){var f=d+e>>1;c(a[f])<c(b)?d=f+1:e=f}return d},t.toArray=function(a){return a?a.toArray?a.toArray():t.isArray(a)?a:t.isArguments(a)?f.call(a):t.values(a):[]},t.size=function(a){return t.toArray(a).length},t.first=t.head=function(a,b,c){return b&&!c?f.call(a,0,b):a[0]},t.rest=t.tail=function(a,b,c){return f.call(a,t.isUndefined(b)||c?1:b)},t.last=function(a){return a[a.length-1]},t.compact=function(a){return t.filter(a,function(a){return!!a})},t.flatten=function(a){return t.reduce(a,function(a,b){return t.isArray(b)?a.concat(t.flatten(b)):(a[a.length]=b,a)},[])},t.without=function(a){var b=f.call(arguments,1);return t.filter(a,function(a){return!t.include(b,a)})},t.uniq=t.unique=function(a,b){return t.reduce(a,function(a,c,d){if(0==d||(b===!0?t.last(a)!=c:!t.include(a,c)))a[a.length]=c;return a},[])},t.intersect=function(a){var b=f.call(arguments,1);return t.filter(t.uniq(a),function(a){return t.every(b,function(b){return t.indexOf(b,a)>=0})})},t.zip=function(){for(var a=f.call(arguments),b=t.max(t.pluck(a,"length")),c=Array(b),d=0;d<b;d++)c[d]=t.pluck(a,""+d);return c},t.indexOf=function(a,b,c){if(a==null)return-1;if(c)return c=t.sortedIndex(a,b),a[c]===b?c:-1;if(q&&a.indexOf===q)return a.indexOf(b);c=0;for(var d=a.length;c<d;c++)if(a[c]===b)return c;return-1},t.lastIndexOf=function(a,b){if(a==null)return-1;if(r&&a.lastIndexOf===r)return a.lastIndexOf(b);for(var c=a.length;c--;)if(a[c]===b)return c;return-1},t.range=function(a,b,c){var d=f.call(arguments),e=d.length<=1;a=e?0:d[0],b=e?d[0]:d[1],c=d[2]||1,d=Math.max(Math.ceil((b-a)/c),0),e=0;for(var g=Array(d);e<d;)g[e++]=a,a+=c;return g},t.bind=function(a,b){var c=f.call(arguments,2);return function(){return a.apply(b||{},c.concat(f.call(arguments)))}},t.bindAll=function(a){var b=f.call(arguments,1);return b.length==0&&(b=t.functions(a)),u(b,function(b){a[b]=t.bind(a[b],a)}),a},t.memoize=function(a,b){var c={};return b=b||t.identity,function(){var d=b.apply(this,arguments);return d in c?c[d]:c[d]=a.apply(this,arguments)}},t.delay=function(a,b){var c=f.call(arguments,2);return setTimeout(function(){return a.apply(a,c)},b)},t.defer=function(a){return t.delay.apply(t,[a,1].concat(f.call(arguments,1)))};var w=function(a,b,c){var d;return function(){var e=this,f=arguments,g=function(){d=null,a.apply(e,f)};c&&clearTimeout(d);if(c||!d)d=setTimeout(g,b)}};t.throttle=function(a,b){return w(a,b,!1)},t.debounce=function(a,b){return w(a,b,!0)},t.wrap=function(a,b){return function(){var c=[a].concat(f.call(arguments));return b.apply(this,c)}},t.compose=function(){var a=f.call(arguments);return function(){for(var b=f.call(arguments),c=a.length-1;c>=0;c--)b=[a[c].apply(this,b)];return b[0]}},t.keys=s||function(a){if(t.isArray(a))return t.range(0,a.length);var b=[],c;for(c in a)i.call(a,c)&&(b[b.length]=c);return b},t.values=function(a){return t.map(a,t.identity)},t.functions=t.methods=function(a){return t.filter(t.keys(a),function(b){return t.isFunction(a[b])}).sort()},t.extend=function(a){return u(f.call(arguments,1),function(b){for(var c in b)a[c]=b[c]}),a},t.clone=function(a){return t.isArray(a)?a.slice():t.extend({},a)},t.tap=function(a,b){return b(a),a},t.isEqual=function(a,b){if(a===b)return!0;var c=typeof a;if(c!=typeof b)return!1;if(a==b)return!0;if(!a&&b||a&&!b)return!1;a._chain&&(a=a._wrapped),b._chain&&(b=b._wrapped);if(a.isEqual)return a.isEqual(b);if(t.isDate(a)&&t.isDate(b))return a.getTime()===b.getTime();if(t.isNaN(a)&&t.isNaN(b))return!1;if(t.isRegExp(a)&&t.isRegExp(b))return a.source===b.source&&a.global===b.global&&a.ignoreCase===b.ignoreCase&&a.multiline===b.multiline;if(c!=="object")return!1;if(a.length&&a.length!==b.length)return!1;c=t.keys(a);var d=t.keys(b);if(c.length!=d.length)return!1;for(var e in a)if(!(e in b)||!t.isEqual(a[e],b[e]))return!1;return!0},t.isEmpty=function(a){if(t.isArray(a)||t.isString(a))return a.length===0;for(var b in a)if(i.call(a,b))return!1;return!0},t.isElement=function(a){return!!a&&a.nodeType==1},t.isArray=e||function(a){return h.call(a)==="[object Array]"},t.isArguments=function(a){return!!a&&!!i.call(a,"callee")},t.isFunction=function(a){return!!(a&&a.constructor&&a.call&&a.apply)},t.isString=function(a){return!!(a===""||a&&a.charCodeAt&&a.substr)},t.isNumber=function(a){return!!(a===0||a&&a.toExponential&&a.toFixed)},t.isNaN=function(a){return a!==a},t.isBoolean=function(a){return a===!0||a===!1},t.isDate=function(a){return!!(a&&a.getTimezoneOffset&&a.setUTCFullYear)},t.isRegExp=function(a){return!(!(a&&a.test&&a.exec)||!a.ignoreCase&&a.ignoreCase!==!1)},t.isNull=function(a){return a===null},t.isUndefined=function(a){return a===void 0},t.noConflict=function(){return a._=b,this},t.identity=function(a){return a},t.times=function(a,b,c){for(var d=0;d<a;d++)b.call(c,d)},t.mixin=function(a){u(t.functions(a),function(b){A(b,t[b]=a[b])})};var x=0;t.uniqueId=function(a){var b=x++;return a?a+b:b},t.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g},t.template=function(a,b){var c=t.templateSettings;return c="var __p=[],print=function(){__p.push.apply(__p,arguments);};with(obj||{}){__p.push('"+a.replace(/\\/g,"\\\\").replace(/'/g,"\\'").replace(c.interpolate,function(a,b){return"',"+b.replace(/\\'/g,"'")+",'"}).replace(c.evaluate||null,function(a,b){return"');"+b.replace(/\\'/g,"'").replace(/[\r\n\t]/g," ")+"__p.push('"}).replace(/\r/g,"\\r").replace(/\n/g,"\\n").replace(/\t/g,"\\t")+"');}return __p.join('');",c=Function("obj",c),b?c(b):c};var y=function(a){this._wrapped=a};t.prototype=y.prototype;var z=function(a,b){return b?t(a).chain():a},A=function(a,b){y.prototype[a]=function(){var a=f.call(arguments);return g.call(a,this._wrapped),z(b.apply(t,a),this._chain)}};t.mixin(t),u(["pop","push","reverse","shift","sort","splice","unshift"],function(a){var b=d[a];y.prototype[a]=function(){return b.apply(this._wrapped,arguments),z(this._wrapped,this._chain)}}),u(["concat","join","slice"],function(a){var b=d[a];y.prototype[a]=function(){return z(b.apply(this._wrapped,arguments),this._chain)}}),y.prototype.chain=function(){return this._chain=!0,this},y.prototype.value=function(){return this._wrapped}}(),function(a){function b(a){return J.letter.test(a)}function c(a){return a=a.charCodeAt(0),a>=48&&a<=57}function d(a){return c(a)||b(a)}function e(a){return J.non_spacing_mark.test(a)||J.space_combining_mark.test(a)}function f(a){return J.connector_punctuation.test(a)}function g(a){return a=="$"||a=="_"||b(a)}function h(a){return g(a)||e(a)||c(a)||f(a)||a=="‌"||a=="‍"}function i(a){if(B.test(a))return parseInt(a.substr(2),16);if(C.test(a))return parseInt(a.substr(1),8);if(D.test(a))return parseFloat(a)}function j(a,b,c,d){this.message=a,this.line=b+1,this.col=c+1,this.pos=d+1,this.stack=Error().stack}function k(a,b,c,d){}function l(a,b,c){return a.type==b&&(c==null||a.value==c)}function m(a){function b(){return P.text.charAt(P.pos)}function e(a,b){var c=P.text.charAt(P.pos++);if(a&&!c)throw K;return c=="\n"?(P.newline_before=P.newline_before||!b,++P.line,P.col=0):++P.col,c}function f(){return!P.peek()}function j(a,b){var c=P.text.indexOf(a,P.pos);if(b&&c==-1)throw K;return c}function l(){P.tokline=P.line,P.tokcol=P.col,P.tokpos=P.pos}function m(a,b,c){P.regex_allowed=a=="operator"&&!v(M,b)||a=="keyword"&&v(y,b)||a=="punc"&&v(G,b);var d={type:a,value:b,line:P.tokline,col:P.tokcol,pos:P.tokpos,endpos:P.pos,nlb:P.newline_before};return c||(d.comments_before=P.comments_before,P.comments_before=[]),P.newline_before=!1,d}function n(){while(v(F,b()))e()}function o(a){var c="",d=b(),f=0;while(d&&a(d,f++))c+=e(),d=b();return c}function p(a){k(a,P.tokline,P.tokcol,P.tokpos)}function q(a){var b=!1,c=!1,e=!1,f=a==".",g=o(function(g,h){return g=="x"||g=="X"?e?!1:e=!0:!!e||g!="E"&&g!="e"?g=="-"?c||h==0&&!a?!0:!1:g=="+"?c:(c=!1,g=="."?!f&&!e?f=!0:!1:d(g)):b?!1:b=c=!0});a&&(g=a+g);var h=i(g);if(!isNaN(h))return m("num",h);p("Invalid syntax: "+g)}function r(a){var b=e(!0,a);switch(b){case"n":return"\n";case"r":return"\r";case"t":return"\t";case"b":return"\b";case"v":return"";case"f":return"\f";case"0":return"\0";case"x":return String.fromCharCode(s(2));case"u":return String.fromCharCode(s(4));case"\n":return"";default:return b}}function s(a){var b=0;for(;a>0;--a){var c=parseInt(e(!0),16);isNaN(c)&&p("Invalid hex-character pattern in string"),b=b<<4|c}return b}function t(){return N("Unterminated string constant",function(){var a=e(),b="";for(;;){var c=e(!0);if(c=="\\"){var d=0,f=null;c=o(function(a){if(a>="0"&&a<="7"){if(!f)return f=a,++d;if(f<="3"&&d<=2)return++d;if(f>="4"&&d<=1)return++d}return!1}),d>0?c=String.fromCharCode(parseInt(c,8)):c=r(!0)}else if(c==a)break;b+=c}return m("string",b)})}function u(){e();var a=j("\n"),b;return a==-1?(b=P.text.substr(P.pos),P.pos=P.text.length):(b=P.text.substring(P.pos,a),P.pos=a),m("comment1",b,!0)}function x(){return e(),N("Unterminated multiline comment",function(){var a=j("*/",!0),b=P.text.substring(P.pos,a);return P.pos=a+2,P.line+=b.split("\n").length-1,P.newline_before=b.indexOf("\n")>=0,/^@cc_on/i.test(b)&&(R("WARNING: at line "+P.line),R('*** Found "conditional comment": '+b),R("*** UglifyJS DISCARDS ALL COMMENTS.  This means your code might no longer work properly in Internet Explorer.")),m("comment2",b,!0)})}function B(){var a=!1,c="",d;while((d=b())!=null)if(!a)if(d=="\\")a=!0,e();else{if(!h(d))break;c+=e()}else d!="u"&&p("Expecting UnicodeEscapeSequence -- uXXXX"),d=r(),h(d)||p("Unicode char: "+d.charCodeAt(0)+" is not valid in identifier"),c+=d,a=!1;return c}function C(a){return N("Unterminated regular expression",function(){var b=!1,c,d=!1;while(c=e(!0))if(b)a+="\\"+c,b=!1;else if(c=="[")d=!0,a+=c;else if(c=="]"&&d)d=!1,a+=c;else{if(c=="/"&&!d)break;c=="\\"?b=!0:a+=c}var f=B();return m("regexp",[a,f])})}function D(a){function c(a){if(!b())return a;var d=a+b();return v(E,d)?(e(),c(d)):a}return m("operator",c(a||e()))}function I(){e();var a=P.regex_allowed;switch(b()){case"/":return P.comments_before.push(u()),P.regex_allowed=a,O();case"*":return P.comments_before.push(x()),P.regex_allowed=a,O()}return P.regex_allowed?C(""):D("/")}function J(){return e(),c(b())?q("."):m("punc",".")}function L(){var a=B();return v(w,a)?v(E,a)?m("operator",a):v(z,a)?m("atom",a):m("keyword",a):m("name",a)}function N(a,b){try{return b()}catch(c){if(c!==K)throw c;p(a)}}function O(a){if(a!=null)return C(a);n(),l();var d=b();if(!d)return m("eof");if(c(d))return q();if(d=='"'||d=="'")return t();if(v(H,d))return m("punc",e());if(d==".")return J();if(d=="/")return I();if(v(A,d))return D();if(d=="\\"||g(d))return L();p("Unexpected character '"+d+"'")}var P={text:a.replace(/\r\n?|[\n\u2028\u2029]/g,"\n").replace(/^\uFEFF/,""),pos:0,tokpos:0,line:0,tokline:0,col:0,tokcol:0,newline_before:!1,regex_allowed:!1,comments_before:[]};return O.context=function(a){return a&&(P=a),P},O}function n(a,b,c){this.name=a,this.start=b,this.end=c}function o(a,b,c){function d(a,b){return l(jb.token,a,b)}function e(){return jb.peeked||(jb.peeked=jb.input())}function f(){return jb.prev=jb.token,jb.peeked?(jb.token=jb.peeked,jb.peeked=null):jb.token=jb.input(),jb.token}function g(){return jb.prev}function h(a,b,c,d){var e=jb.input.context();k(a,b!=null?b:e.tokline,c!=null?c:e.tokcol,d!=null?d:e.tokpos)}function i(a,b){h(b,a.line,a.col)}function j(a){a==null&&(a=jb.token),i(a,"Unexpected token: "+a.type+" ("+a.value+")")}function o(a,b){if(d(a,b))return f();i(jb.token,"Unexpected token "+jb.token.type+", expected "+a)}function r(a){return o("punc",a)}function t(){return!b&&(jb.token.nlb||d("eof")||d("punc","}"))}function w(){d("punc",";")?f():t()||j()}function x(){return s(arguments)}function y(){r("(");var a=ob();return r(")"),a}function z(a,b,c){return a instanceof n?a:new n(a,b,c)}function A(a){return c?function(){var b=jb.token,c=a.apply(this,arguments);return c[0]=z(c[0],b,g()),c}:a}function B(a){jb.labels.push(a);var c=jb.token,d=kb();return b&&!v(P,d[0])&&j(c),jb.labels.pop(),x("label",a,d)}function C(){return x("stat",q(ob,w))}function D(a){var b;return t()||(b=d("name")?jb.token.value:null),b!=null?(f(),u(b,jb.labels)||h("Label "+b+" without matching loop or statement")):jb.in_loop==0&&h(a+" not inside a loop or switch"),w(),x(a,b)}function E(){r("(");var a=null;if(!d("punc",";")){a=d("keyword","var")?(f(),R(!0)):ob(!0,!0);if(d("operator","in"))return a[0]=="var"&&a[1].length>1&&h("Only one variable declaration allowed in for..in loop"),G(a)}return F(a)}function F(a){r(";");var b=d("punc",";")?null:ob();r(";");var c=d("punc",")")?null:ob();return r(")"),x("for",a,b,c,ib(kb))}function G(a){var b=a[0]=="var"?x("name",a[1][0]):a;f();var c=ob();return r(")"),x("for-in",a,b,c,ib(kb))}function H(){var a=y(),b=kb(),c;return d("keyword","else")&&(f(),c=kb()),x("if",a,b,c)}function I(){r("{");var a=[];while(!d("punc","}"))d("eof")&&j(),a.push(kb());return f(),a}function J(){var a=I(),b,c;if(d("keyword","catch")){f(),r("("),d("name")||h("Name expected");var e=jb.token.value;f(),r(")"),b=[e,I()]}return d("keyword","finally")&&(f(),c=I()),!b&&!c&&h("Missing catch/finally blocks"),x("try",a,b,c)}function K(a){var b=[];for(;;){d("name")||j();var c=jb.token.value;f(),d("operator","=")?(f(),b.push([c,ob(!1,a)])):b.push([c]);if(!d("punc",","))break;f()}return b}function R(a){return x("var",K(a))}function S(){return x("const",K())}function V(){var a=nb(!1),b;return d("punc","(")?(f(),b=W(")")):b=[],ab(x("new",a,b),!0)}function W(a,b,c){var e=!0,g=[];while(!d("punc",a)){e?e=!1:r(",");if(b&&d("punc",a))break;d("punc",",")&&c?g.push(["atom","undefined"]):g.push(ob(!1))}return f(),g}function X(){return x("array",W("]",!b,!0))}function Y(){var a=!0,c=[];while(!d("punc","}")){a?a=!1:r(",");if(!b&&d("punc","}"))break;var e=jb.token.type,g=Z();e!="name"||g!="get"&&g!="set"||!!d("punc",":")?(r(":"),c.push([g,ob(!1)])):c.push([$(),lb(!1),g])}return f(),x("object",c)}function Z(){switch(jb.token.type){case"num":case"string":return q(jb.token.value,f)}return $()}function $(){switch(jb.token.type){case"name":case"operator":case"keyword":case"atom":return q(jb.token.value,f);default:j()}}function ab(a,b){return d("punc",".")?(f(),ab(x("dot",a,$()),b)):d("punc","[")?(f(),ab(x("sub",a,q(ob,p(r,"]"))),b)):b&&d("punc","(")?(f(),ab(x("call",a,W(")")),!0)):a}function bb(a){if(d("operator")&&v(L,jb.token.value))return cb("unary-prefix",q(jb.token.value,f),bb(a));var b=nb(a);while(d("operator")&&v(M,jb.token.value)&&!jb.token.nlb)b=cb("unary-postfix",jb.token.value,b),f();return b}function cb(a,b,c){return(b=="++"||b=="--")&&!gb(c)&&h("Invalid use of "+b+" operator"),x(a,b,c)}function db(a,b,c){var e=d("operator")?jb.token.value:null;e&&e=="in"&&c&&(e=null);var g=e!=null?O[e]:null;if(g!=null&&g>b){f();var h=db(bb(!0),g,c);return db(x("binary",e,a,h),b,c)}return a}function eb(a){return db(bb(!0),0,a)}function fb(a){var b=eb(a);if(d("operator","?")){f();var c=ob(!1);return r(":"),x("conditional",b,c,ob(!1,a))}return b}function gb(a){if(!b)return!0;switch(a[0]+""){case"dot":case"sub":case"new":case"call":return!0;case"name":return a[1]!="this"}}function hb(a){var b=fb(a),c=jb.token.value;if(d("operator")&&v(N,c)){if(gb(b))return f(),x("assign",N[c],b,hb(a));h("Invalid assignment")}return b}function ib(a){try{return++jb.in_loop,a()}catch(b){}finally{--jb.in_loop}}var jb={input:typeof a=="string"?m(a,!0):a,token:null,prev:null,peeked:null,in_function:0,in_loop:0,labels:[]};jb.token=f();var kb=A(function(){if(d("operator","/")||d("operator","/="))jb.peeked=null,jb.token=jb.input(jb.token.value.substr(1));switch(jb.token.type){case"num":case"string":case"regexp":case"operator":case"atom":return C();case"name":return l(e(),"punc",":")?B(q(jb.token.value,f,f)):C();case"punc":switch(jb.token.value){case"{":return x("block",I());case"[":case"(":return C();case";":return f(),x("block");default:j()};case"keyword":switch(q(jb.token.value,f)){case"break":return D("break");case"continue":return D("continue");case"debugger":return w(),x("debugger");case"do":return function(a){return o("keyword","while"),x("do",q(y,w),a)}(ib(kb));case"for":return E();case"function":return lb(!0);case"if":return H();case"return":return jb.in_function==0&&h("'return' outside of function"),x("return",d("punc",";")?(f(),null):t()?null:q(ob,w));case"switch":return x("switch",y(),mb());case"throw":return jb.token.nlb&&h("Illegal newline after 'throw'"),x("throw",q(ob,w));case"try":return J();case"var":return q(R,w);case"const":return q(S,w);case"while":return x("while",y(),ib(kb));case"with":return x("with",y(),kb());default:j()}}}),lb=function(a){var b=d("name")?q(jb.token.value,f):null;return a&&!b&&j(),r("("),x(a?"defun":"function",b,function(a,b){while(!d("punc",")"))a?a=!1:r(","),d("name")||j(),b.push(jb.token.value),f();return f(),b}(!0,[]),function(){++jb.in_function;var a=jb.in_loop;jb.in_loop=0;var b=I();return--jb.in_function,jb.in_loop=a,b}())},mb=p(ib,function(){r("{");var a=[],b=null;while(!d("punc","}"))d("eof")&&j(),d("keyword","case")?(f(),b=[],a.push([ob(),b]),r(":")):d("keyword","default")?(f(),r(":"),b=[],a.push([null,b])):(b||j(),b.push(kb()));return f(),a}),nb=A(function(a){if(d("operator","new"))return f(),V();if(d("punc")){switch(jb.token.value){case"(":return f(),ab(q(ob,p(r,")")),a);case"[":return f(),ab(X(),a);case"{":return f(),ab(Y(),a)}j()}if(d("keyword","function"))return f(),ab(lb(!1),a);if(v(Q,jb.token.type)){var b=jb.token.type=="regexp"?x("regexp",jb.token.value[0],jb.token.value[1]):x(jb.token.type,jb.token.value);return ab(q(b,f),a)}j()}),ob=A(function(a,b){arguments.length==0&&(a=!0);var c=hb(b);return a&&d("punc",",")?(f(),x("seq",c,ob(!0,b))):c});return x("toplevel",function(a){while(!d("eof"))a.push(kb());return a}([]))}function p(a){var b=s(arguments,1);return function(){return a.apply(this,b.concat(s(arguments)))}}function q(a){a instanceof Function&&(a=a());for(var b=1,c=arguments.length;--c>0;++b)arguments[b]();return a}function r(a){var b={};for(var c=0;c<a.length;++c)b[a[c]]=!0;return b}function s(a,b){return Array.prototype.slice.call(a,b||0)}function t(a){return a.split("")}function u(a,b){for(var c=b.length;--c>=0;)if(b[c]==a)return!0;return!1}function v(a,b){return Object.prototype.hasOwnProperty.call(a,b)}var w=r(["break","case","catch","const","continue","debugger","default","delete","do","else","finally","for","function","if","in","instanceof","new","return","switch","throw","try","typeof","var","void","while","with"]),x=r(["abstract","boolean","byte","char","class","double","enum","export","extends","final","float","goto","implements","import","int","interface","long","native","package","private","protected","public","short","static","super","synchronized","throws","transient","volatile"]),y=r(["return","new","delete","throw","else","case"]),z=r(["false","null","true","undefined"]),A=r(t("+-*&%=<>!?|~^")),B=/^0x[0-9a-f]+$/i,C=/^0[0-7]+$/,D=/^\d*\.?\d*(?:e[+-]?\d*(?:\d\.?|\.?\d)\d*)?$/i,E=r(["in","instanceof","typeof","new","void","delete","++","--","+","-","!","~","&","|","^","*","/","%",">>","<<",">>>","<",">","<=",">=","==","===","!=","!==","?","=","+=","-=","/=","*=","%=",">>=","<<=",">>>=","|=","^=","&=","&&","||"]),F=r(t("  \n\r\t\f​᠎              ")),G=r(t("[{}(,.;:")),H=r(t("[]{}(),;:")),I=r(t("gmsiy")),J={letter:RegExp("[\\u0041-\\u005A\\u0061-\\u007A\\u00AA\\u00B5\\u00BA\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u0523\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0621-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971\\u0972\\u097B-\\u097F\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C33\\u0C35-\\u0C39\\u0C3D\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D28\\u0D2A-\\u0D39\\u0D3D\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC\\u0EDD\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8B\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10D0-\\u10FA\\u10FC\\u1100-\\u1159\\u115F-\\u11A2\\u11A8-\\u11F9\\u1200-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u1676\\u1681-\\u169A\\u16A0-\\u16EA\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u1900-\\u191C\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19A9\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u2094\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2C6F\\u2C71-\\u2C7D\\u2C80-\\u2CE4\\u2D00-\\u2D25\\u2D30-\\u2D65\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31B7\\u31F0-\\u31FF\\u3400\\u4DB5\\u4E00\\u9FC3\\uA000-\\uA48C\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA65F\\uA662-\\uA66E\\uA67F-\\uA697\\uA717-\\uA71F\\uA722-\\uA788\\uA78B\\uA78C\\uA7FB-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA90A-\\uA925\\uA930-\\uA946\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAC00\\uD7A3\\uF900-\\uFA2D\\uFA30-\\uFA6A\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]"),non_spacing_mark:RegExp("[\\u0300-\\u036F\\u0483-\\u0487\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0610-\\u061A\\u064B-\\u065E\\u0670\\u06D6-\\u06DC\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0900-\\u0902\\u093C\\u0941-\\u0948\\u094D\\u0951-\\u0955\\u0962\\u0963\\u0981\\u09BC\\u09C1-\\u09C4\\u09CD\\u09E2\\u09E3\\u0A01\\u0A02\\u0A3C\\u0A41\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81\\u0A82\\u0ABC\\u0AC1-\\u0AC5\\u0AC7\\u0AC8\\u0ACD\\u0AE2\\u0AE3\\u0B01\\u0B3C\\u0B3F\\u0B41-\\u0B44\\u0B4D\\u0B56\\u0B62\\u0B63\\u0B82\\u0BC0\\u0BCD\\u0C3E-\\u0C40\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0CBC\\u0CBF\\u0CC6\\u0CCC\\u0CCD\\u0CE2\\u0CE3\\u0D41-\\u0D44\\u0D4D\\u0D62\\u0D63\\u0DCA\\u0DD2-\\u0DD4\\u0DD6\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EB9\\u0EBB\\u0EBC\\u0EC8-\\u0ECD\\u0F18\\u0F19\\u0F35\\u0F37\\u0F39\\u0F71-\\u0F7E\\u0F80-\\u0F84\\u0F86\\u0F87\\u0F90-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u102D-\\u1030\\u1032-\\u1037\\u1039\\u103A\\u103D\\u103E\\u1058\\u1059\\u105E-\\u1060\\u1071-\\u1074\\u1082\\u1085\\u1086\\u108D\\u109D\\u135F\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B7-\\u17BD\\u17C6\\u17C9-\\u17D3\\u17DD\\u180B-\\u180D\\u18A9\\u1920-\\u1922\\u1927\\u1928\\u1932\\u1939-\\u193B\\u1A17\\u1A18\\u1A56\\u1A58-\\u1A5E\\u1A60\\u1A62\\u1A65-\\u1A6C\\u1A73-\\u1A7C\\u1A7F\\u1B00-\\u1B03\\u1B34\\u1B36-\\u1B3A\\u1B3C\\u1B42\\u1B6B-\\u1B73\\u1B80\\u1B81\\u1BA2-\\u1BA5\\u1BA8\\u1BA9\\u1C2C-\\u1C33\\u1C36\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE0\\u1CE2-\\u1CE8\\u1CED\\u1DC0-\\u1DE6\\u1DFD-\\u1DFF\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2CEF-\\u2CF1\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F\\uA67C\\uA67D\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA825\\uA826\\uA8C4\\uA8E0-\\uA8F1\\uA926-\\uA92D\\uA947-\\uA951\\uA980-\\uA982\\uA9B3\\uA9B6-\\uA9B9\\uA9BC\\uAA29-\\uAA2E\\uAA31\\uAA32\\uAA35\\uAA36\\uAA43\\uAA4C\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uABE5\\uABE8\\uABED\\uFB1E\\uFE00-\\uFE0F\\uFE20-\\uFE26]"),space_combining_mark:RegExp("[\\u0903\\u093E-\\u0940\\u0949-\\u094C\\u094E\\u0982\\u0983\\u09BE-\\u09C0\\u09C7\\u09C8\\u09CB\\u09CC\\u09D7\\u0A03\\u0A3E-\\u0A40\\u0A83\\u0ABE-\\u0AC0\\u0AC9\\u0ACB\\u0ACC\\u0B02\\u0B03\\u0B3E\\u0B40\\u0B47\\u0B48\\u0B4B\\u0B4C\\u0B57\\u0BBE\\u0BBF\\u0BC1\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCC\\u0BD7\\u0C01-\\u0C03\\u0C41-\\u0C44\\u0C82\\u0C83\\u0CBE\\u0CC0-\\u0CC4\\u0CC7\\u0CC8\\u0CCA\\u0CCB\\u0CD5\\u0CD6\\u0D02\\u0D03\\u0D3E-\\u0D40\\u0D46-\\u0D48\\u0D4A-\\u0D4C\\u0D57\\u0D82\\u0D83\\u0DCF-\\u0DD1\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0F3E\\u0F3F\\u0F7F\\u102B\\u102C\\u1031\\u1038\\u103B\\u103C\\u1056\\u1057\\u1062-\\u1064\\u1067-\\u106D\\u1083\\u1084\\u1087-\\u108C\\u108F\\u109A-\\u109C\\u17B6\\u17BE-\\u17C5\\u17C7\\u17C8\\u1923-\\u1926\\u1929-\\u192B\\u1930\\u1931\\u1933-\\u1938\\u19B0-\\u19C0\\u19C8\\u19C9\\u1A19-\\u1A1B\\u1A55\\u1A57\\u1A61\\u1A63\\u1A64\\u1A6D-\\u1A72\\u1B04\\u1B35\\u1B3B\\u1B3D-\\u1B41\\u1B43\\u1B44\\u1B82\\u1BA1\\u1BA6\\u1BA7\\u1BAA\\u1C24-\\u1C2B\\u1C34\\u1C35\\u1CE1\\u1CF2\\uA823\\uA824\\uA827\\uA880\\uA881\\uA8B4-\\uA8C3\\uA952\\uA953\\uA983\\uA9B4\\uA9B5\\uA9BA\\uA9BB\\uA9BD-\\uA9C0\\uAA2F\\uAA30\\uAA33\\uAA34\\uAA4D\\uAA7B\\uABE3\\uABE4\\uABE6\\uABE7\\uABE9\\uABEA\\uABEC]"),connector_punctuation:RegExp("[\\u005F\\u203F\\u2040\\u2054\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFF3F]")};j.prototype.toString=function(){return this.message+" (line: "+this.line+", col: "+this.col+", pos: "+this.pos+")"+"\n\n"+this.stack};var K={},L=r(["typeof","void","delete","--","++","!","~","-","+"]),M=r(["--","++"]),N=function(a,b,c){while(c<a.length)b[a[c]]=a[c].substr(0,a[c].length-1),c++;return b}(["+=","-=","/=","*=","%=",">>=","<<=",">>>=","|=","^=","&="],{"=":!0},0),O=function(a,b){for(var c=0,d=1;c<a.length;++c,++d){var e=a[c];for(var f=0;f<e.length;++f)b[e[f]]=d}return b}([["||"],["&&"],["|"],["^"],["&"],["==","===","!=","!=="],["<",">","<=",">=","in","instanceof"],[">>","<<",">>>"],["+","-"],["*","/","%"]],{}),P=r(["for","do","while","switch"]),Q=r(["atom","num","string","regexp","name"]);n.prototype.toString=function(){return this.name};var R=function(){},S={};(function(a){a.tokenizer=m,a.parse=o,a.slice=s,a.curry=p,a.member=u,a.array_to_hash=r,a.PRECEDENCE=O,a.KEYWORDS_ATOM=z,a.RESERVED_WORDS=x,a.KEYWORDS=w,a.ATOMIC_START_TOKEN=Q,a.OPERATORS=E,a.is_alphanumeric_char=d,a.set_logger=function(a){R=a}})(S),a.parsejs=S}(this),function(a){function b(){function a(a){return[this[0],I(a,function(a){var b=[a[0]];return a.length>1&&(b[1]=c(a[1])),b})]}function b(a){var b=[this[0]];return a!=null&&b.push(I(a,c)),b}function c(a){if(a==null)return null;try{h.push(a);var b=a[0],c=g[b];if(c){var d=c.apply(a,a.slice(1));if(d!=null)return d}return c=f[b],c.apply(a,a.slice(1))}catch(e){}finally{h.pop()}}function d(a){if(a==null)return null;try{return h.push(a),f[a[0]].apply(a,a.slice(1))}catch(b){}finally{h.pop()}}function e(a,b){var c={},d;for(d in a)x(a,d)&&(c[d]=g[d],g[d]=a[d]);var e=b();for(d in c)x(c,d)&&(c[d]?g[d]=c[d]:delete g[d]);return e}var f={string:function(a){return[this[0],a]},num:function(a){return[this[0],a]},name:function(a){return[this[0],a]},toplevel:function(a){return[this[0],I(a,c)]},block:b,splice:b,"var":a,"const":a,"try":function(a,b,d){return[this[0],I(a,c),b!=null?[b[0],I(b[1],c)]:null,d!=null?I(d,c):null]},"throw":function(a){return[this[0],c(a)]},"new":function(a,b){return[this[0],c(a),I(b,c)]},"switch":function(a,b){return[this[0],c(a),I(b,function(a){return[a[0]?c(a[0]):null,I(a[1],c)]})]},"break":function(a){return[this[0],a]},"continue":function(a){return[this[0],a]},conditional:function(a,b,d){return[this[0],c(a),c(b),c(d)]},assign:function(a,b,d){return[this[0],a,c(b),c(d)]},dot:function(a){return[this[0],c(a)].concat(z(arguments,1))},call:function(a,b){return[this[0],c(a),I(b,c)]},"function":function(a,b,d){return[this[0],a,b.slice(),I(d,c)]},"debugger":function(){return[this[0]]},defun:function(a,b,d){return[this[0],a,b.slice(),I(d,c)]},"if":function(a,b,d){return[this[0],c(a),c(b),c(d)]},"for":function(a,b,d,e){return[this[0],c(a),c(b),c(d),c(e)]},"for-in":function(a,b,d,e){return[this[0],c(a),c(b),c(d),c(e)]},"while"
+:function(a,b){return[this[0],c(a),c(b)]},"do":function(a,b){return[this[0],c(a),c(b)]},"return":function(a){return[this[0],c(a)]},binary:function(a,b,d){return[this[0],a,c(b),c(d)]},"unary-prefix":function(a,b){return[this[0],a,c(b)]},"unary-postfix":function(a,b){return[this[0],a,c(b)]},sub:function(a,b){return[this[0],c(a),c(b)]},object:function(a){return[this[0],I(a,function(a){return a.length==2?[a[0],c(a[1])]:[a[0],c(a[1]),a[2]]})]},regexp:function(a,b){return[this[0],a,b]},array:function(a){return[this[0],I(a,c)]},stat:function(a){return[this[0],c(a)]},seq:function(){return[this[0]].concat(I(z(arguments),c))},label:function(a,b){return[this[0],a,c(b)]},"with":function(a,b){return[this[0],c(a),c(b)]},atom:function(a){return[this[0],a]}},g={},h=[];return{walk:c,dive:d,with_walkers:e,parent:function(){return h[h.length-2]},stack:function(){return h}}}function c(a){this.names={},this.mangled={},this.rev_mangled={},this.cname=-1,this.refs={},this.uses_with=!1,this.uses_eval=!1,this.parent=a,this.children=[],a?(this.level=a.level+1,a.children.push(this)):this.level=0}function d(a){function d(a){j=new c(j),j.labels=new c;var b=j.body=a();return b.scope=j,j=j.parent,b}function e(a,b){return j.define(a,b)}function f(a){j.refs[a]=!0}function g(a,b,c){var f=this[0]=="defun";return[this[0],f?e(a,"defun"):a,b,d(function(){return f||e(a,"lambda"),I(b,function(a){e(a,"arg")}),I(c,l)})]}function h(a){return function(b){I(b,function(b){e(b[0],a),b[1]&&f(b[0])})}}function i(a){a&&(j.labels.refs[a]=!0)}var j=null,k=b(),l=k.walk,m=[];return d(function(){function b(a,c){for(c=a.children.length;--c>=0;)b(a.children[c]);for(c in a.refs)if(x(a.refs,c))for(var d=a.has(c),e=a;e;e=e.parent){e.refs[c]=d;if(e===d)break}}var c=k.with_walkers({"function":g,defun:g,label:function(a,b){j.labels.define(a)},"break":i,"continue":i,"with":function(a,b){for(var c=j;c;c=c.parent)c.uses_with=!0},"var":h("var"),"const":h("const"),"try":function(a,b,c){if(b!=null)return[this[0],I(a,l),[e(b[0],"catch"),I(b[1],l)],c!=null?I(c,l):null]},name:function(a){a=="eval"&&m.push(j),f(a)}},function(){return l(a)});return I(m,function(a){if(!a.has("eval"))while(a)a.uses_eval=!0,a=a.parent}),b(j),c})}function e(a,c){function e(a,b){return!c.toplevel&&!m.parent?a:c.except&&A(a,c.except)?a:m.get_mangled(a,b)}function f(a){if(c.defines)return!m.has(a)&&x(c.defines,a)?c.defines[a]:null}function g(a,b,d){if(!c.no_functions){var f=this[0]=="defun",g;a&&(f?a=e(a):d.scope.references(a)?(g={},!m.uses_eval&&!m.uses_with?a=g[a]=m.next_mangled():g[a]=a):a=null)}return d=h(d.scope,function(){return b=I(b,function(a){return e(a)}),I(d,l)},g),[this[0],a,b,d]}function h(a,b,c){var d=m;m=a;if(c)for(var f in c)x(c,f)&&a.set_mangle(f,c[f]);for(var f in a.names)x(a.names,f)&&e(f,!0);var g=b();return g.scope=a,m=d,g}function i(a){return[this[0],I(a,function(a){return[e(a[0]),l(a[1])]})]}function j(a){if(a)return[this[0],m.labels.get_mangled(a)]}var k=b(),l=k.walk,m;return c=c||{},k.with_walkers({"function":g,defun:function(){var a=g.apply(this,arguments);switch(k.parent()[0]){case"toplevel":case"function":case"defun":return I.at_top(a)}return a},label:function(a,b){return m.labels.refs[a]?[this[0],m.labels.get_mangled(a,!0),l(b)]:l(b)},"break":j,"continue":j,"var":i,"const":i,name:function(a){return f(a)||[this[0],e(a)]},"try":function(a,b,c){return[this[0],I(a,l),b!=null?[e(b[0]),I(b[1],l)]:null,c!=null?I(c,l):null]},toplevel:function(a){var b=this;return h(b.scope,function(){return[b[0],I(a,l)]})}},function(){return l(d(a))})}function f(a,b){return s(a).length>s(b[0]=="stat"?b[1]:b).length?b:a}function g(a){return a[0]=="block"&&a[1]&&a[1].length>0?a[1][a[1].length-1]:a}function h(a){if(a)switch(g(a)[0]){case"return":case"break":case"continue":case"throw":return!0}}function i(a){return a[0]=="unary-prefix"&&A(a[1],["!","delete"])||a[0]=="binary"&&A(a[1],["in","instanceof","==","!=","===","!==","<","<=",">=",">"])||a[0]=="binary"&&A(a[1],["&&","||"])&&i(a[2])&&i(a[3])||a[0]=="conditional"&&i(a[2])&&i(a[3])||a[0]=="assign"&&a[1]===!0&&i(a[3])||a[0]=="seq"&&i(a[a.length-1])}function j(a){return!a||a[0]=="block"&&(!a[1]||a[1].length==0)}function k(a){return a[0]=="string"||a[0]=="unary-prefix"&&a[1]=="typeof"||a[0]=="binary"&&a[1]=="+"&&(k(a[2])||k(a[3]))}function l(a){j(a)||E("Dropping unreachable code: "+s(a,!0))}function m(a){function c(a){a=I(a,g);for(var b=0;b<a.length;++b){var d=a[b];if(d[0]!="if")continue;if(d[3]&&g(d[3]))continue;var e=g(d[2]);if(!h(e))continue;var f=g(d[1]),i=c(a.slice(b+1)),j=i.length==1?i[0]:["block",i];return a.slice(0,b).concat([[d[0],f,e,j]])}return a}function d(a,b,d){return d=c(d),[this[0],a,b,d]}function e(a){return[this[0],a!=null?c(a):null]}var f=b(),g=f.walk;return f.with_walkers({defun:d,"function":d,block:e,splice:e,toplevel:function(a){return[this[0],c(a)]},"try":function(a,b,d){return[this[0],c(a),b!=null?[b[0],c(b[1])]:null,d!=null?c(d):null]}},function(){return g(a)})}function n(a,c){function d(){throw j}function e(){throw k}function f(){return c.call(this,this,h,d,e)}function g(a){if(a=="++"||a=="--")return f.apply(this,arguments)}var h=b(),i=h.walk,j={},k={};return h.with_walkers({"try":f,"throw":f,"return":f,"new":f,"switch":f,"break":f,"continue":f,assign:f,call:f,"if":f,"for":f,"for-in":f,"while":f,"do":f,"return":f,"unary-prefix":g,"unary-postfix":g,defun:f},function(){for(;;)try{i(a);break}catch(b){if(b===j)break;if(b===k)continue;throw b}})}function o(a){function c(a,b){var c=i;i=b,a=I(a,h);var d={},e=I(b.names,function(a,c){return a!="var"?I.skip:b.references(c)?(d[c]=!0,[c]):I.skip});return e.length>0&&(n(["block",a],function(a,b,c,f){if(a[0]=="assign"&&a[1]===!0&&a[2][0]=="name"&&x(d,a[2][1])){for(var g=e.length;--g>=0;)if(e[g][0]==a[2][1]){e[g][1]&&c(),e[g][1]=a[3],e.push(e.splice(g,1)[0]);break}var h=b.parent();if(h[0]=="seq"){var i=h[2];i.unshift(0,h.length),h.splice.apply(h,i)}else h[0]=="stat"?h.splice(0,h.length,"block"):c();f()}c()}),a.unshift(["var",e])),i=c,a}function e(a){var b=null;for(var c=a.length;--c>=0;){var d=a[c];if(!d[1])continue;d=["assign",!0,["name",d[0]],d[1]],b==null?b=d:b=["seq",d,b]}return b==null?g.parent()[0]=="for-in"?["name",a[0][0]]:I.skip:["stat",b]}function f(a){return[this[0],c(a,this.scope)]}var g=b(),h=g.walk,i;return g.with_walkers({"function":function(a,b,d){for(var e=b.length;--e>=0&&!d.scope.references(b[e]);)b.pop();return d.scope.references(a)||(a=null),[this[0],a,b,c(d,d.scope)]},defun:function(a,b,d){if(!i.references(a))return I.skip;for(var e=b.length;--e>=0&&!d.scope.references(b[e]);)b.pop();return[this[0],a,b,c(d,d.scope)]},"var":e,toplevel:f},function(){return h(d(a))})}function p(a,c){function d(a){var b=["unary-prefix","!",a];switch(a[0]){case"unary-prefix":return a[1]=="!"&&i(a[2])?a[2]:b;case"seq":return a=z(a),a[a.length-1]=d(a[a.length-1]),a;case"conditional":return f(b,["conditional",a[1],d(a[2]),d(a[3])]);case"binary":var e=a[1],g=a[2],h=a[3];if(!c.keep_comps)switch(e){case"<=":return["binary",">",g,h];case"<":return["binary",">=",g,h];case">=":return["binary","<",g,h];case">":return["binary","<=",g,h]}switch(e){case"==":return["binary","!=",g,h];case"!=":return["binary","==",g,h];case"===":return["binary","!==",g,h];case"!==":return["binary","===",g,h];case"&&":return f(b,["binary","||",d(g),d(h)]);case"||":return f(b,["binary","&&",d(g),d(h)])}}return b}function e(a,b,c){var e=function(){return a[0]=="unary-prefix"&&a[1]=="!"?c?["conditional",a[2],c,b]:["binary","||",a[2],b]:c?f(["conditional",a,b,c],["conditional",d(a),c,b]):["binary","&&",a,b]};return F(a,function(a,d){return l(d?c:b),d?b:c},e)}function g(a){return a!=null&&a[0]=="block"&&a[1]&&(a[1].length==1?a=a[1][0]:a[1].length==0&&(a=["block"])),a}function k(a,b,c){return[this[0],a,b,n(c,"lambda")]}function n(a,b){return a=I(a,u),a=_(a).reduce(function(a,b){return b[0]=="block"?b[1]&&a.push.apply(a,b[1]):a.push(b),a},[]),a=function(b,c){return _(a).forEach(function(a){c&&(a[0]=="var"&&c[0]=="var"||a[0]=="const"&&c[0]=="const")?c[1]=c[1].concat(a[1]):(b.push(a),c=a)}),b}([]),c.dead_code&&(a=function(b,d){return _(a).forEach(function(a){d?a[0]=="function"||a[0]=="defun"?b.push(a):a[0]=="var"||a[0]=="const"?(c.no_warnings||E("Variables declared in unreachable code"),a[1]=I(a[1],function(a){return a[1]&&!c.no_warnings&&l(["assign",!0,["name",a[0]],a[1]]),[a[0]]}),b.push(a)):c.no_warnings||l(a):(b.push(a),A(a[0],["return","throw","break","continue"])&&(d=!0))}),b}([])),c.make_seqs&&(a=function(b,c){return _(a).forEach(function(a){c&&c[0]=="stat"&&a[0]=="stat"?c[1]=["seq",c[1],a[1]]:(b.push(a),c=a)}),b.length>=2&&b[b.length-2][0]=="stat"&&(b[b.length-1][0]=="return"||b[b.length-1][0]=="throw")&&b[b.length-1][1]&&b.splice(b.length-2,2,[b[b.length-1][0],["seq",b[b.length-2][1],b[b.length-1][1]]]),b}([])),a}function o(a,b,c){return F(a,function(a,d){return d?(b=u(b),l(c),b||["block"]):(c=u(c),l(b),c||["block"])},function(){return q(a,b,c)})}function p(a,b,c){var e=[["if",d(a),c]];return b[0]=="block"?b[1]&&(e=e.concat(b[1])):e.push(b),u(["block",e])}function q(a,b,c){a=u(a),b=u(b),c=u(c),j(b)?(a=d(a),b=c,c=null):j(c)?c=null:function(){var e=s(a),f=d(a),g=s(f);if(g.length<e.length){var h=b;b=c,c=h,a=f}}();if(j(c)&&j(b))return["stat",a];var g=["if",a,b,c];return b[0]=="if"&&j(b[3])&&j(c)?g=f(g,u(["if",["binary","&&",a,b[1]],b[2]])):b[0]=="stat"?c?c[0]=="stat"?g=f(g,["stat",e(a,b[1],c[1])]):h(c)&&(g=p(a,b,c)):g=f(g,["stat",e(a,b[1])]):c&&b[0]==c[0]&&(b[0]=="return"||b[0]=="throw")&&b[1]&&c[1]?g=f(g,[b[0],e(a,b[1],c[1])]):c&&h(b)?(g=[["if",a,b]],c[0]=="block"?c[1]&&(g=g.concat(c[1])):g.push(c),g=u(["block",g])):b&&h(c)&&(g=p(a,b,c)),g}function r(a,b){return F(a,function(a,c){return c?["for",null,null,null,u(b)]:(l(b),["block"])})}c=v(c,{make_seqs:!0,dead_code:!0,no_warnings:!1,keep_comps:!0});var t=b(),u=t.walk;return t.with_walkers({sub:function(a,b){if(b[0]=="string"){var c=b[1];if(w(c))return["dot",u(a),c];if(/^[1-9][0-9]*$/.test(c)||c==="0")return["sub",u(a),["num",parseInt(c,10)]]}},"if":o,toplevel:function(a){return["toplevel",n(a)]},"switch":function(a,b){var c=b.length-1;return["switch",u(a),I(b,function(a,b){var d=n(a[1]);if(b==c&&d.length>0){var e=d[d.length-1];e[0]=="break"&&!e[1]&&d.pop()}return[a[0]?u(a[0]):null,d]})]},"function":k,defun:k,block:function(a){if(a)return g(["block",n(a)])},binary:function(a,b,c){return F(["binary",a,u(b),u(c)],function(a){return f(u(a),this)},function(){return function(){if(a!="=="&&a!="!=")return;var d=u(b),e=u(c);return d&&d[0]=="unary-prefix"&&d[1]=="!"&&d[2][0]=="num"?b=["num",+!d[2][1]]:e&&e[0]=="unary-prefix"&&e[1]=="!"&&e[2][0]=="num"&&(c=["num",+!e[2][1]]),["binary",a,b,c]}()||this})},conditional:function(a,b,c){return e(u(a),u(b),u(c))},"try":function(a,b,c){return["try",n(a),b!=null?[b[0],n(b[1])]:null,c!=null?n(c):null]},"unary-prefix":function(a,b){b=u(b);var c=["unary-prefix",a,b];return a=="!"&&(c=f(c,d(b))),F(c,function(a,b){return u(a)},function(){return c})},name:function(a){switch(a){case"true":return["unary-prefix","!",["num",0]];case"false":return["unary-prefix","!",["num",1]]}},"while":r,assign:function(a,b,c){b=u(b),c=u(c);var d=["+","-","/","*","%",">>","<<",">>>","|","^","&"];return a===!0&&b[0]==="name"&&c[0]==="binary"&&~d.indexOf(c[1])&&c[2][0]==="name"&&c[2][1]===b[1]?[this[0],c[1],b,c[3]]:[this[0],a,b,c]}},function(){for(var b=0;b<2;++b)a=m(a),a=u(a);return a})}function q(a,b){var c=0,d=0;return a=a.replace(/[\\\b\f\n\r\t\x22\x27\u2028\u2029\0]/g,function(a){switch(a){case"\\":return"\\\\";case"\b":return"\\b";case"\f":return"\\f";case"\n":return"\\n";case"\r":return"\\r";case"\t":return"\\t";case"\u2028":return"\\u2028";case"\u2029":return"\\u2029";case'"':return++c,'"';case"'":return++d,"'";case"\0":return"\\0"}return a}),b&&(a=r(a)),c>d?"'"+a.replace(/\x27/g,"\\'")+"'":'"'+a.replace(/\x22/g,'\\"')+'"'}function r(a){return a.replace(/[\u0080-\uffff]/g,function(a){var b=a.charCodeAt(0).toString(16);while(b.length<4)b="0"+b;return"\\u"+b})}function s(a,c){function d(a){var b=q(a,c.ascii_only);return c.inline_script&&(b=b.replace(/<\x2fscript([>\/\t\n\f\r ])/gi,"<\\/script$1")),b}function e(a){return a+="",c.ascii_only&&(a=r(a)),a}function f(a){return a==null&&(a=""),J&&(a=u(" ",c.indent_start+K*c.indent_level)+a),a}function g(a,b){b==null&&(b=1),K+=b;try{return a.apply(null,z(arguments,1))}catch(c){}finally{K-=b}}function h(a){if(J)return a.join(" ");var b=[];for(var c=0;c<a.length;++c){var d=a[c+1];b.push(a[c]),d&&(/[a-z0-9_\x24]$/i.test(a[c]+"")&&/^[a-z0-9_\x24]/i.test(d+"")||/[\+\-]$/.test(a[c]+"")&&/^[\+\-]/.test(d+""))&&b.push(" ")}return b.join("")}function i(a){return a.join(","+Q)}function k(a){var b=S(a);for(var c=1;c<arguments.length;++c){var d=arguments[c];if(d instanceof Function&&d(a)||a[0]==d)return"("+b+")"}return b}function l(a){if(a.length==1)return a[0];if(a.length==2){var b=a[1];return a=a[0],a.length>b.length?b:a}return l([a[0],l(a.slice(1))])}function m(a){if(a[0]=="function"||a[0]=="object"){var b=z(R.stack()),c=b.pop(),d=b.pop();while(d){if(d[0]=="stat")return!0;if((d[0]!="seq"&&d[0]!="call"&&d[0]!="dot"&&d[0]!="sub"&&d[0]!="conditional"||d[1]!==c)&&(d[0]!="binary"&&d[0]!="assign"&&d[0]!="unary-postfix"||d[2]!==c))return!1;c=d,d=b.pop()}}return!x(G,a[0])}function n(a){var b=a.toString(10),c=[b.replace(/^0\./,".")],d;return Math.floor(a)===a?(a<0?c.push("-0x"+(-a).toString(16).toLowerCase(),"-0"+(-a).toString(8)):c.push("0x"+a.toString(16).toLowerCase(),"0"+a.toString(8)),(d=/^(.*?)(0+)$/.exec(a))&&c.push(d[1]+"e"+d[2].length)):(d=/^0?\.(0+)(.*)$/.exec(a))&&c.push(d[2]+"e-"+(d[1].length+d[2].length),b.substr(b.indexOf("."))),l(c)}function o(a){if(a==null)return";";if(a[0]=="do")return E([a]);var b=a;for(;;){var c=b[0];if(c=="if"){if(!b[3])return S(["block",[a]]);b=b[3]}else if(c=="while"||c=="do")b=b[2];else{if(c!="for"&&c!="for-in")break;b=b[4]}}return S(a)}function p(a,b,c,d,f){var g=d||"function";return a&&(g+=" "+e(a)),g+="("+i(I(b,e))+")",g=h([g,E(c)]),!f&&m(this)?"("+g+")":g}function s(a){switch(a[0]){case"with":case"while":return j(a[2]);case"for":case"for-in":return j(a[4]);case"if":if(j(a[2])&&!a[3])return!0;if(a[3])return j(a[3])?!0:s(a[3]);return s(a[2])}}function t(a,b){for(var c=[],d=a.length-1,e=0;e<=d;++e){var g=a[e],h=S(g);h!=";"&&(!J&&e==d&&!s(g)&&(h=h.replace(/;+\s*$/,"")),c.push(h))}return b?c:I(c,f)}function D(a){var b=a.length;return b==0?"{}":"{"+L+I(a,function(a,c){var d=a[1].length>0,e=g(function(){return f(a[0]?h(["case",S(a[0])+":"]):"default:")},.5)+(d?L+g(function(){return t(a[1]).join(L)}):"");return!J&&d&&c<b-1&&(e+=";"),e}).join(L)+L+f("}")}function E(a){return a?a.length==0?"{}":"{"+L+g(function(){return t(a).join(L)})+L+f("}"):";"}function F(a){var b=a[0],c=a[1];return c!=null&&(b=h([e(b),"=",k(c,"seq")])),b}c=v(c,{indent_start:0,indent_level:4,quote_keys:!1,space_colon:!1,beautify:!1,ascii_only:!1,inline_script:!1});var J=!!c.beautify,K=0,L=J?"\n":"",Q=J?" ":"",R=b(),S=R.walk;return R.with_walkers({string:d,num:n,name:e,"debugger":function(){return"debugger"},toplevel:function(a){return t(a).join(L+L)},splice:function(a){var b=R.parent();return x(H,b)?E.apply(this,arguments):I(t(a,!0),function(a,b){return b>0?f(a):a}).join(L)},block:E,"var":function(a){return"var "+i(I(a,F))+";"},"const":function(a){return"const "+i(I(a,F))+";"},"try":function(a,b,c){var d=["try",E(a)];return b&&d.push("catch","("+b[0]+")",E(b[1])),c&&d.push("finally",E(c)),h(d)},"throw":function(a){return h(["throw",S(a)])+";"},"new":function(a,c){return c=c.length>0?"("+i(I(c,function(a){return k(a,"seq")}))+")":"",h(["new",k(a,"seq","binary","conditional","assign",function(a){var c=b(),d={};try{c.with_walkers({call:function(){throw d},"function":function(){return this}},function(){c.walk(a)})}catch(e){if(e===d)return!0;throw e}})+c])},"switch":function(a,b){return h(["switch","("+S(a)+")",D(b)])},"break":function(a){var b="break";return a!=null&&(b+=" "+e(a)),b+";"},"continue":function(a){var b="continue";return a!=null&&(b+=" "+e(a)),b+";"},conditional:function(a,b,c){return h([k(a,"assign","seq","conditional"),"?",k(b,"seq"),":",k(c,"seq")])},assign:function(a,b,c){return a&&a!==!0?a+="=":a="=",h([S(b),a,k(c,"seq")])},dot:function(a){var b=S(a),c=1;a[0]=="num"?/\./.test(a[1])||(b+="."):m(a)&&(b="("+b+")");while(c<arguments.length)b+="."+e(arguments[c++]);return b},call:function(a,b){var c=S(a);return c.charAt(0)!="("&&m(a)&&(c="("+c+")"),c+"("+i(I(b,function(a){return k(a,"seq")}))+")"},"function":p,defun:p,"if":function(a,b,c){var d=["if","("+S(a)+")",c?o(b):S(b)];return c&&d.push("else",S(c)),h(d)},"for":function(a,b,c,d){var e=["for"];a=(a!=null?S(a):"").replace(/;*\s*$/,";"+Q),b=(b!=null?S(b):"").replace(/;*\s*$/,";"+Q),c=(c!=null?S(c):"").replace(/;*\s*$/,"");var f=a+b+c;return f=="; ; "&&(f=";;"),e.push("("+f+")",S(d)),h(e)},"for-in":function(a,b,c,d){return h(["for","("+(a?S(a).replace(/;+$/,""):S(b)),"in",S(c)+")",S(d)])},"while":function(a,b){return h(["while","("+S(a)+")",S(b)])},"do":function(a,b){return h(["do",S(b),"while","("+S(a)+")"])+";"},"return":function(a){var b=["return"];return a!=null&&b.push(S(a)),h(b)+";"},binary:function(a,b,d){var e=S(b),f=S(d);if(A(b[0],["assign","conditional","seq"])||b[0]=="binary"&&B[a]>B[b[1]]||b[0]=="function"&&m(this))e="("+e+")";return A(d[0],["assign","conditional","seq"])||d[0]=="binary"&&B[a]>=B[d[1]]&&(d[1]!=a||!A(a,["&&","||","*"]))?f="("+f+")":!J&&c.inline_script&&(a=="<"||a=="<<")&&d[0]=="regexp"&&/^script/i.test(d[1])&&(f=" "+f),h([e,a,f])},"unary-prefix":function(a,b){var c=S(b);return b[0]=="num"||b[0]=="unary-prefix"&&!x(C,a+b[1])||!m(b)||(c="("+c+")"),a+(y.is_alphanumeric_char(a.charAt(0))?" ":"")+c},"unary-postfix":function(a,b){var c=S(b);return b[0]=="num"||b[0]=="unary-postfix"&&!x(C,a+b[1])||!m(b)||(c="("+c+")"),c+a},sub:function(a,b){var c=S(a);return m(a)&&(c="("+c+")"),c+"["+S(b)+"]"},object:function(a){var b=m(this);if(a.length==0)return b?"({})":"{}";var e="{"+L+g(function(){return I(a,function(a){if(a.length==3)return f(p(a[0],a[1][2],a[1][3],a[2],!0));var b=a[0],e=k(a[1],"seq");return c.quote_keys?b=d(b):(typeof b=="number"||!J&&+b+""==b)&&parseFloat(b)>=0?b=n(+b):w(b)||(b=d(b)),f(h(J&&c.space_colon?[b,":",e]:[b+":",e]))}).join(","+L)})+L+f("}");return b?"("+e+")":e},regexp:function(a,b){return"/"+a+"/"+b},array:function(a){return a.length==0?"[]":h(["[",i(I(a,function(b,c){return!J&&b[0]=="atom"&&b[1]=="undefined"?c===a.length-1?",":"":k(b,"seq")})),"]"])},stat:function(a){return S(a).replace(/;*\s*$/,";")},seq:function(){return i(I(z(arguments),S))},label:function(a,b){return h([e(a),":",S(b)])},"with":function(a,b){return h(["with","("+S(a)+")",S(b)])},atom:function(a){return e(a)}},function(){return S(a)})}function t(a,b){var c=[0];return y.parse(function(){function d(a){return a.pos-h}function e(a){h=a.pos,c.push(h)}function f(){var a=g.apply(this,arguments);a:{if(i&&i.type=="keyword")break a;if(d(a)>b)switch(a.type){case"keyword":case"atom":case"name":case"punc":e(a);break a}}return i=a,a}var g=y.tokenizer(a),h=0,i;return f.context=function(){return g.context.apply(this,arguments)},f}()),c.map(function(b,d){return a.substring(b,c[d+1]||a.length)}).join("\n")}function u(a,b){if(b>0){if(b==1)return a;var c=u(a,b>>1);return c+=c,b&1&&(c+=a),c}return""}function v(a,b){var c={};a===!0&&(a={});for(var d in b)x(b,d)&&(c[d]=a&&x(a,d)?a[d]:b[d]);return c}function w(a){return/^[a-z_$][a-z0-9_$]*$/i.test(a)&&a!="this"&&!x(y.KEYWORDS_ATOM,a)&&!x(y.RESERVED_WORDS,a)&&!x(y.KEYWORDS,a)}function x(a,b){return Object.prototype.hasOwnProperty.call(a,b)}var y=a.parsejs,z=y.slice,A=y.member,B=y.PRECEDENCE,C=y.OPERATORS,D=function(){var a="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_0123456789";return function(b){var c="",d=54;do c+=a.charAt(b%d),b=Math.floor(b/d),d=64;while(b>0);return c}}();c.prototype={has:function(a){for(var b=this;b;b=b.parent)if(x(b.names,a))return b},has_mangled:function(a){for(var b=this;b;b=b.parent)if(x(b.rev_mangled,a))return b},toJSON:function(){return{names:this.names,uses_eval:this.uses_eval,uses_with:this.uses_with}},next_mangled:function(){for(;;){var a=D(++this.cname),b;b=this.has_mangled(a);if(b&&this.refs[b.rev_mangled[a]]===b)continue;b=this.has(a);if(b&&b!==this&&this.refs[a]===b&&!b.has_mangled(a))continue;if(x(this.refs,a)&&this.refs[a]==null)continue;if(!w(a))continue;return a}},set_mangle:function(a,b){return this.rev_mangled[b]=a,this.mangled[a]=b},get_mangled:function(a,b){if(this.uses_eval||this.uses_with)return a;var c=this.has(a);return c?x(c.mangled,a)?c.mangled[a]:b?c.set_mangle(a,c.next_mangled()):a:a},references:function(a){return a&&!this.parent||this.uses_with||this.uses_eval||this.refs[a]},define:function(a,b){if(a!=null){if(b=="var"||!x(this.names,a))this.names[a]=b||"var";return a}}};var E=function(){},F=function(){function a(c){switch(c[0]){case"string":case"num":return c[1];case"name":case"atom":switch(c[1]){case"true":return!0;case"false":return!1;case"null":return null}break;case"unary-prefix":switch(c[1]){case"!":return!a(c[2]);case"typeof":return typeof a(c[2]);case"~":return~a(c[2]);case"-":return-a(c[2]);case"+":return+a(c[2])}break;case"binary":var d=c[2],e=c[3];switch(c[1]){case"&&":return a(d)&&a(e);case"||":return a(d)||a(e);case"|":return a(d)|a(e);case"&":return a(d)&a(e);case"^":return a(d)^a(e);case"+":return a(d)+a(e);case"*":return a(d)*a(e);case"/":return a(d)/a(e);case"%":return a(d)%a(e);case"-":return a(d)-a(e);case"<<":return a(d)<<a(e);case">>":return a(d)>>a(e);case">>>":return a(d)>>>a(e);case"==":return a(d)==a(e);case"===":return a(d)===a(e);case"!=":return a(d)!=a(e);case"!==":return a(d)!==a(e);case"<":return a(d)<a(e);case"<=":return a(d)<=a(e);case">":return a(d)>a(e);case">=":return a(d)>=a(e);case"in":return a(d)in a(e);case"instanceof":return a(d)instanceof a(e)}}throw b}var b={};return function(c,d,e){try{var f=a(c),g;switch(typeof f){case"string":g=["string",f];break;case"number":g=["num",f];break;case"boolean":g=["name",f+""];break;default:if(f===null){g=["atom","null"];break}throw Error("Can't handle constant of type: "+typeof f)}return d.call(c,g,f)}catch(h){if(h===b){if(c[0]!="binary"||c[1]!="==="&&c[1]!="!=="||!(k(c[2])&&k(c[3])||i(c[2])&&i(c[3]))){if(e&&c[0]=="binary"&&(c[1]=="||"||c[1]=="&&"))try{var j=a(c[2]);c=c[1]=="&&"&&(j?c[3]:j)||c[1]=="||"&&(j?j:c[3])||c}catch(l){}}else c[1]=c[1].substr(0,2);return e?e.call(c,c):null}throw h}}}(),G=y.array_to_hash(["name","array","object","string","dot","sub","call","regexp","defun"]),H=y.array_to_hash(["if","while","do","for","for-in","with"]),I;(function(){function a(a){this.v=a}function b(a){this.v=a}I=function(d,e,f){function g(){var g=e.call(f,d[j],j);g instanceof a?(g=g.v,g instanceof b?i.push.apply(i,g.v):i.push(g)):g!=c&&(g instanceof b?h.push.apply(h,g.v):h.push(g))}var h=[],i=[],j;if(d instanceof Array)for(j=0;j<d.length;++j)g();else for(j in d)x(d,j)&&g();return i.concat(h)},I.at_top=function(b){return new a(b)},I.splice=function(a){return new b(a)};var c=I.skip={}})();var J={};(function(a){a.ast_walker=b,a.ast_mangle=e,a.ast_squeeze=p,a.ast_lift_variables=o,a.gen_code=s,a.ast_add_scope=d,a.set_logger=function(a){E=a},a.make_string=q,a.split_lines=t,a.MAP=I})(J),a.process=J}(this),function(a){function b(a){function b(a,b){var c=i,d;return i=a,d=b(),i=c,d}function c(a,c,d){return[this[0],a,c,b(d.scope,g(h,d,f))]}var e=d.ast_walker(),f=e.walk,i;return e.with_walkers({toplevel:function(a){return[this[0],b(this.scope,g(h,a,f))]},"function":c,defun:c,"new":function(a,b){if(a[0]=="name"){if(a[1]=="Array"&&!i.has("Array"))return b.length!=1?["array",b]:f(["call",["name","Array"],b]);if(a[1]=="Object"&&!i.has("Object"))return b.length?f(["call",["name","Object"],b]):["object",[]];if((a[1]=="RegExp"||a[1]=="Function"||a[1]=="Error")&&!i.has(a[1]))return f(["call",["name",a[1]],b])}},call:function(a,b){if(a[0]=="dot"&&a[2]=="toString"&&b.length==0)return["binary","+",a[1],["string",""]];if(a[0]=="name"){if(a[1]=="Array"&&b.length!=1&&!i.has("Array"))return["array",b];if(a[1]=="Object"&&!b.length&&!i.has("Object"))return["object",[]];if(a[1]=="String"&&!i.has("String"))return["binary","+",b[0],["string",""]]}}},function(){return f(d.ast_add_scope(a))})}var c=a.parsejs,d=a.process,e=c.slice,f=c.member,g=c.curry,h=d.MAP,i=c.PRECEDENCE,j=c.OPERATORS,k={};(function(a){a.ast_squeeze_more=b})(k),a.process.ast_squeeze_more=k.ast_squeeze_more}(this),function(a){a.uglify=function(b,c){function d(a){var b="";for(var c=0;c<a.length;++c){var d=a[c];d.type=="comment1"?b+="//"+d.value+"\n":b+="/*"+d.value+"*/"}return b}function f(a){var b="";if(k.show_copyright){var c=[],e=i.tokenizer(a,!1),f;f=e();var h=null;while(/^comment/.test(f.type)&&(!h||h==f.type))c.push(f),h=f.type,f=e();b+=d(c)}var l=g("parse",function(){return i.parse(a)});return k.mangle&&(l=g("mangle",function(){return j.ast_mangle(l,k.mangle_toplevel)})),k.squeeze&&(l=g("squeeze",function(){return l=j.ast_squeeze(l,{make_seqs:k.make_seqs,dead_code:k.dead_code,extra:k.extra}),k.unsafe&&(l=j.ast_squeeze_more(l)),l})),k.ast?sys.inspect(l,null,null):(b+=g("generate",function(){return j.gen_code(l,k.beautify&&k.beautify_options)}),!k.beautify&&k.max_line_length&&(b=g("split",function(){return j.split_lines(b,k.max_line_length)})),b)}function g(a,b){if(!k.verbose)return b();var c=(new Date).getTime();try{return b()}catch(d){}}var h={parser:a.parsejs,uglify:a.process},i=h.parser,j=h.uglify;j.set_logger(function(a){});var k={ast:!1,mangle:!0,mangle_toplevel:!1,squeeze:!0,make_seqs:!0,dead_code:!0,beautify:!1,verbose:!1,show_copyright:!0,out_same_file:!1,max_line_length:32768,extra:!1,unsafe:!1,beautify_options:{indent_level:4,indent_start:0,quote_keys:!1,space_colon:!1},output:!0},l=c,m;a:while(l.length>0){var n=l.shift();switch(n){case"-b":case"--beautify":k.beautify=!0;break;case"-i":case"--indent":k.beautify_options.indent_level=l.shift();break;case"-q":case"--quote-keys":k.beautify_options.quote_keys=!0;break;case"-mt":case"--mangle-toplevel":k.mangle_toplevel=!0;break;case"--no-mangle":case"-nm":k.mangle=!1;break;case"--no-squeeze":case"-ns":k.squeeze=!1;break;case"--no-seqs":k.make_seqs=!1;break;case"--no-dead-code":k.dead_code=!1;break;case"--no-copyright":case"-nc":k.show_copyright=!1;break;case"-o":case"--output":k.output=l.shift();break;case"--overwrite":k.out_same_file=!0;break;case"-v":case"--verbose":k.verbose=!0;break;case"--ast":k.ast=!0;break;case"--extra":k.extra=!0;break;case"--unsafe":k.unsafe=!0;break;case"--max-line-len":k.max_line_length=l.shift();break;default:m=n;break a}}return f(b)}}(this)
\ No newline at end of file
diff --git a/vendor/dimsemenov/magnific-popup/website/third-party-libs/zepto.js b/vendor/dimsemenov/magnific-popup/website/third-party-libs/zepto.js
new file mode 100644
index 0000000000000000000000000000000000000000..566f2cbc0cebf4075e1cf3873cff16c478c4d048
--- /dev/null
+++ b/vendor/dimsemenov/magnific-popup/website/third-party-libs/zepto.js
@@ -0,0 +1,1565 @@
+/* Zepto v1.0-1-ga3cab6c - polyfill zepto detect event ajax form fx - zeptojs.com/license */
+
+
+;(function(undefined){
+  if (String.prototype.trim === undefined) // fix for iOS 3.2
+    String.prototype.trim = function(){ return this.replace(/^\s+|\s+$/g, '') }
+
+  // For iOS 3.x
+  // from https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/reduce
+  if (Array.prototype.reduce === undefined)
+    Array.prototype.reduce = function(fun){
+      if(this === void 0 || this === null) throw new TypeError()
+      var t = Object(this), len = t.length >>> 0, k = 0, accumulator
+      if(typeof fun != 'function') throw new TypeError()
+      if(len == 0 && arguments.length == 1) throw new TypeError()
+
+      if(arguments.length >= 2)
+       accumulator = arguments[1]
+      else
+        do{
+          if(k in t){
+            accumulator = t[k++]
+            break
+          }
+          if(++k >= len) throw new TypeError()
+        } while (true)
+
+      while (k < len){
+        if(k in t) accumulator = fun.call(undefined, accumulator, t[k], k, t)
+        k++
+      }
+      return accumulator
+    }
+
+})()
+
+var Zepto = (function() {
+  var undefined, key, $, classList, emptyArray = [], slice = emptyArray.slice, filter = emptyArray.filter,
+    document = window.document,
+    elementDisplay = {}, classCache = {},
+    getComputedStyle = document.defaultView.getComputedStyle,
+    cssNumber = { 'column-count': 1, 'columns': 1, 'font-weight': 1, 'line-height': 1,'opacity': 1, 'z-index': 1, 'zoom': 1 },
+    fragmentRE = /^\s*<(\w+|!)[^>]*>/,
+    tagExpanderRE = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,
+    rootNodeRE = /^(?:body|html)$/i,
+
+    // special attributes that should be get/set via method calls
+    methodAttributes = ['val', 'css', 'html', 'text', 'data', 'width', 'height', 'offset'],
+
+    adjacencyOperators = [ 'after', 'prepend', 'before', 'append' ],
+    table = document.createElement('table'),
+    tableRow = document.createElement('tr'),
+    containers = {
+      'tr': document.createElement('tbody'),
+      'tbody': table, 'thead': table, 'tfoot': table,
+      'td': tableRow, 'th': tableRow,
+      '*': document.createElement('div')
+    },
+    readyRE = /complete|loaded|interactive/,
+    classSelectorRE = /^\.([\w-]+)$/,
+    idSelectorRE = /^#([\w-]*)$/,
+    tagSelectorRE = /^[\w-]+$/,
+    class2type = {},
+    toString = class2type.toString,
+    zepto = {},
+    camelize, uniq,
+    tempParent = document.createElement('div')
+
+  zepto.matches = function(element, selector) {
+    if (!element || element.nodeType !== 1) return false
+    var matchesSelector = element.webkitMatchesSelector || element.mozMatchesSelector ||
+                          element.oMatchesSelector || element.matchesSelector
+    if (matchesSelector) return matchesSelector.call(element, selector)
+    // fall back to performing a selector:
+    var match, parent = element.parentNode, temp = !parent
+    if (temp) (parent = tempParent).appendChild(element)
+    match = ~zepto.qsa(parent, selector).indexOf(element)
+    temp && tempParent.removeChild(element)
+    return match
+  }
+
+  function type(obj) {
+    return obj == null ? String(obj) :
+      class2type[toString.call(obj)] || "object"
+  }
+
+  function isFunction(value) { return type(value) == "function" }
+  function isWindow(obj)     { return obj != null && obj == obj.window }
+  function isDocument(obj)   { return obj != null && obj.nodeType == obj.DOCUMENT_NODE }
+  function isObject(obj)     { return type(obj) == "object" }
+  function isPlainObject(obj) {
+    return isObject(obj) && !isWindow(obj) && obj.__proto__ == Object.prototype
+  }
+  function isArray(value) { return value instanceof Array }
+  function likeArray(obj) { return typeof obj.length == 'number' }
+
+  function compact(array) { return filter.call(array, function(item){ return item != null }) }
+  function flatten(array) { return array.length > 0 ? $.fn.concat.apply([], array) : array }
+  camelize = function(str){ return str.replace(/-+(.)?/g, function(match, chr){ return chr ? chr.toUpperCase() : '' }) }
+  function dasherize(str) {
+    return str.replace(/::/g, '/')
+           .replace(/([A-Z]+)([A-Z][a-z])/g, '$1_$2')
+           .replace(/([a-z\d])([A-Z])/g, '$1_$2')
+           .replace(/_/g, '-')
+           .toLowerCase()
+  }
+  uniq = function(array){ return filter.call(array, function(item, idx){ return array.indexOf(item) == idx }) }
+
+  function classRE(name) {
+    return name in classCache ?
+      classCache[name] : (classCache[name] = new RegExp('(^|\\s)' + name + '(\\s|$)'))
+  }
+
+  function maybeAddPx(name, value) {
+    return (typeof value == "number" && !cssNumber[dasherize(name)]) ? value + "px" : value
+  }
+
+  function defaultDisplay(nodeName) {
+    var element, display
+    if (!elementDisplay[nodeName]) {
+      element = document.createElement(nodeName)
+      document.body.appendChild(element)
+      display = getComputedStyle(element, '').getPropertyValue("display")
+      element.parentNode.removeChild(element)
+      display == "none" && (display = "block")
+      elementDisplay[nodeName] = display
+    }
+    return elementDisplay[nodeName]
+  }
+
+  function children(element) {
+    return 'children' in element ?
+      slice.call(element.children) :
+      $.map(element.childNodes, function(node){ if (node.nodeType == 1) return node })
+  }
+
+  // `$.zepto.fragment` takes a html string and an optional tag name
+  // to generate DOM nodes nodes from the given html string.
+  // The generated DOM nodes are returned as an array.
+  // This function can be overriden in plugins for example to make
+  // it compatible with browsers that don't support the DOM fully.
+  zepto.fragment = function(html, name, properties) {
+    if (html.replace) html = html.replace(tagExpanderRE, "<$1></$2>")
+    if (name === undefined) name = fragmentRE.test(html) && RegExp.$1
+    if (!(name in containers)) name = '*'
+
+    var nodes, dom, container = containers[name]
+    container.innerHTML = '' + html
+    dom = $.each(slice.call(container.childNodes), function(){
+      container.removeChild(this)
+    })
+    if (isPlainObject(properties)) {
+      nodes = $(dom)
+      $.each(properties, function(key, value) {
+        if (methodAttributes.indexOf(key) > -1) nodes[key](value)
+        else nodes.attr(key, value)
+      })
+    }
+    return dom
+  }
+
+  // `$.zepto.Z` swaps out the prototype of the given `dom` array
+  // of nodes with `$.fn` and thus supplying all the Zepto functions
+  // to the array. Note that `__proto__` is not supported on Internet
+  // Explorer. This method can be overriden in plugins.
+  zepto.Z = function(dom, selector) {
+    dom = dom || []
+    dom.__proto__ = $.fn
+    dom.selector = selector || ''
+    return dom
+  }
+
+  // `$.zepto.isZ` should return `true` if the given object is a Zepto
+  // collection. This method can be overriden in plugins.
+  zepto.isZ = function(object) {
+    return object instanceof zepto.Z
+  }
+
+  // `$.zepto.init` is Zepto's counterpart to jQuery's `$.fn.init` and
+  // takes a CSS selector and an optional context (and handles various
+  // special cases).
+  // This method can be overriden in plugins.
+  zepto.init = function(selector, context) {
+    // If nothing given, return an empty Zepto collection
+    if (!selector) return zepto.Z()
+    // If a function is given, call it when the DOM is ready
+    else if (isFunction(selector)) return $(document).ready(selector)
+    // If a Zepto collection is given, juts return it
+    else if (zepto.isZ(selector)) return selector
+    else {
+      var dom
+      // normalize array if an array of nodes is given
+      if (isArray(selector)) dom = compact(selector)
+      // Wrap DOM nodes. If a plain object is given, duplicate it.
+      else if (isObject(selector))
+        dom = [isPlainObject(selector) ? $.extend({}, selector) : selector], selector = null
+      // If it's a html fragment, create nodes from it
+      else if (fragmentRE.test(selector))
+        dom = zepto.fragment(selector.trim(), RegExp.$1, context), selector = null
+      // If there's a context, create a collection on that context first, and select
+      // nodes from there
+      else if (context !== undefined) return $(context).find(selector)
+      // And last but no least, if it's a CSS selector, use it to select nodes.
+      else dom = zepto.qsa(document, selector)
+      // create a new Zepto collection from the nodes found
+      return zepto.Z(dom, selector)
+    }
+  }
+
+  // `$` will be the base `Zepto` object. When calling this
+  // function just call `$.zepto.init, which makes the implementation
+  // details of selecting nodes and creating Zepto collections
+  // patchable in plugins.
+  $ = function(selector, context){
+    return zepto.init(selector, context)
+  }
+
+  function extend(target, source, deep) {
+    for (key in source)
+      if (deep && (isPlainObject(source[key]) || isArray(source[key]))) {
+        if (isPlainObject(source[key]) && !isPlainObject(target[key]))
+          target[key] = {}
+        if (isArray(source[key]) && !isArray(target[key]))
+          target[key] = []
+        extend(target[key], source[key], deep)
+      }
+      else if (source[key] !== undefined) target[key] = source[key]
+  }
+
+  // Copy all but undefined properties from one or more
+  // objects to the `target` object.
+  $.extend = function(target){
+    var deep, args = slice.call(arguments, 1)
+    if (typeof target == 'boolean') {
+      deep = target
+      target = args.shift()
+    }
+    args.forEach(function(arg){ extend(target, arg, deep) })
+    return target
+  }
+
+  // `$.zepto.qsa` is Zepto's CSS selector implementation which
+  // uses `document.querySelectorAll` and optimizes for some special cases, like `#id`.
+  // This method can be overriden in plugins.
+  zepto.qsa = function(element, selector){
+    var found
+    return (isDocument(element) && idSelectorRE.test(selector)) ?
+      ( (found = element.getElementById(RegExp.$1)) ? [found] : [] ) :
+      (element.nodeType !== 1 && element.nodeType !== 9) ? [] :
+      slice.call(
+        classSelectorRE.test(selector) ? element.getElementsByClassName(RegExp.$1) :
+        tagSelectorRE.test(selector) ? element.getElementsByTagName(selector) :
+        element.querySelectorAll(selector)
+      )
+  }
+
+  function filtered(nodes, selector) {
+    return selector === undefined ? $(nodes) : $(nodes).filter(selector)
+  }
+
+  $.contains = function(parent, node) {
+    return parent !== node && parent.contains(node)
+  }
+
+  function funcArg(context, arg, idx, payload) {
+    return isFunction(arg) ? arg.call(context, idx, payload) : arg
+  }
+
+  function setAttribute(node, name, value) {
+    value == null ? node.removeAttribute(name) : node.setAttribute(name, value)
+  }
+
+  // access className property while respecting SVGAnimatedString
+  function className(node, value){
+    var klass = node.className,
+        svg   = klass && klass.baseVal !== undefined
+
+    if (value === undefined) return svg ? klass.baseVal : klass
+    svg ? (klass.baseVal = value) : (node.className = value)
+  }
+
+  // "true"  => true
+  // "false" => false
+  // "null"  => null
+  // "42"    => 42
+  // "42.5"  => 42.5
+  // JSON    => parse if valid
+  // String  => self
+  function deserializeValue(value) {
+    var num
+    try {
+      return value ?
+        value == "true" ||
+        ( value == "false" ? false :
+          value == "null" ? null :
+          !isNaN(num = Number(value)) ? num :
+          /^[\[\{]/.test(value) ? $.parseJSON(value) :
+          value )
+        : value
+    } catch(e) {
+      return value
+    }
+  }
+
+  $.type = type
+  $.isFunction = isFunction
+  $.isWindow = isWindow
+  $.isArray = isArray
+  $.isPlainObject = isPlainObject
+
+  $.isEmptyObject = function(obj) {
+    var name
+    for (name in obj) return false
+    return true
+  }
+
+  $.inArray = function(elem, array, i){
+    return emptyArray.indexOf.call(array, elem, i)
+  }
+
+  $.camelCase = camelize
+  $.trim = function(str) { return str.trim() }
+
+  // plugin compatibility
+  $.uuid = 0
+  $.support = { }
+  $.expr = { }
+
+  $.map = function(elements, callback){
+    var value, values = [], i, key
+    if (likeArray(elements))
+      for (i = 0; i < elements.length; i++) {
+        value = callback(elements[i], i)
+        if (value != null) values.push(value)
+      }
+    else
+      for (key in elements) {
+        value = callback(elements[key], key)
+        if (value != null) values.push(value)
+      }
+    return flatten(values)
+  }
+
+  $.each = function(elements, callback){
+    var i, key
+    if (likeArray(elements)) {
+      for (i = 0; i < elements.length; i++)
+        if (callback.call(elements[i], i, elements[i]) === false) return elements
+    } else {
+      for (key in elements)
+        if (callback.call(elements[key], key, elements[key]) === false) return elements
+    }
+
+    return elements
+  }
+
+  $.grep = function(elements, callback){
+    return filter.call(elements, callback)
+  }
+
+  if (window.JSON) $.parseJSON = JSON.parse
+
+  // Populate the class2type map
+  $.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) {
+    class2type[ "[object " + name + "]" ] = name.toLowerCase()
+  })
+
+  // Define methods that will be available on all
+  // Zepto collections
+  $.fn = {
+    // Because a collection acts like an array
+    // copy over these useful array functions.
+    forEach: emptyArray.forEach,
+    reduce: emptyArray.reduce,
+    push: emptyArray.push,
+    sort: emptyArray.sort,
+    indexOf: emptyArray.indexOf,
+    concat: emptyArray.concat,
+
+    // `map` and `slice` in the jQuery API work differently
+    // from their array counterparts
+    map: function(fn){
+      return $($.map(this, function(el, i){ return fn.call(el, i, el) }))
+    },
+    slice: function(){
+      return $(slice.apply(this, arguments))
+    },
+
+    ready: function(callback){
+      if (readyRE.test(document.readyState)) callback($)
+      else document.addEventListener('DOMContentLoaded', function(){ callback($) }, false)
+      return this
+    },
+    get: function(idx){
+      return idx === undefined ? slice.call(this) : this[idx >= 0 ? idx : idx + this.length]
+    },
+    toArray: function(){ return this.get() },
+    size: function(){
+      return this.length
+    },
+    remove: function(){
+      return this.each(function(){
+        if (this.parentNode != null)
+          this.parentNode.removeChild(this)
+      })
+    },
+    each: function(callback){
+      emptyArray.every.call(this, function(el, idx){
+        return callback.call(el, idx, el) !== false
+      })
+      return this
+    },
+    filter: function(selector){
+      if (isFunction(selector)) return this.not(this.not(selector))
+      return $(filter.call(this, function(element){
+        return zepto.matches(element, selector)
+      }))
+    },
+    add: function(selector,context){
+      return $(uniq(this.concat($(selector,context))))
+    },
+    is: function(selector){
+      return this.length > 0 && zepto.matches(this[0], selector)
+    },
+    not: function(selector){
+      var nodes=[]
+      if (isFunction(selector) && selector.call !== undefined)
+        this.each(function(idx){
+          if (!selector.call(this,idx)) nodes.push(this)
+        })
+      else {
+        var excludes = typeof selector == 'string' ? this.filter(selector) :
+          (likeArray(selector) && isFunction(selector.item)) ? slice.call(selector) : $(selector)
+        this.forEach(function(el){
+          if (excludes.indexOf(el) < 0) nodes.push(el)
+        })
+      }
+      return $(nodes)
+    },
+    has: function(selector){
+      return this.filter(function(){
+        return isObject(selector) ?
+          $.contains(this, selector) :
+          $(this).find(selector).size()
+      })
+    },
+    eq: function(idx){
+      return idx === -1 ? this.slice(idx) : this.slice(idx, + idx + 1)
+    },
+    first: function(){
+      var el = this[0]
+      return el && !isObject(el) ? el : $(el)
+    },
+    last: function(){
+      var el = this[this.length - 1]
+      return el && !isObject(el) ? el : $(el)
+    },
+    find: function(selector){
+      var result, $this = this
+      if (typeof selector == 'object')
+        result = $(selector).filter(function(){
+          var node = this
+          return emptyArray.some.call($this, function(parent){
+            return $.contains(parent, node)
+          })
+        })
+      else if (this.length == 1) result = $(zepto.qsa(this[0], selector))
+      else result = this.map(function(){ return zepto.qsa(this, selector) })
+      return result
+    },
+    closest: function(selector, context){
+      var node = this[0], collection = false
+      if (typeof selector == 'object') collection = $(selector)
+      while (node && !(collection ? collection.indexOf(node) >= 0 : zepto.matches(node, selector)))
+        node = node !== context && !isDocument(node) && node.parentNode
+      return $(node)
+    },
+    parents: function(selector){
+      var ancestors = [], nodes = this
+      while (nodes.length > 0)
+        nodes = $.map(nodes, function(node){
+          if ((node = node.parentNode) && !isDocument(node) && ancestors.indexOf(node) < 0) {
+            ancestors.push(node)
+            return node
+          }
+        })
+      return filtered(ancestors, selector)
+    },
+    parent: function(selector){
+      return filtered(uniq(this.pluck('parentNode')), selector)
+    },
+    children: function(selector){
+      return filtered(this.map(function(){ return children(this) }), selector)
+    },
+    contents: function() {
+      return this.map(function() { return slice.call(this.childNodes) })
+    },
+    siblings: function(selector){
+      return filtered(this.map(function(i, el){
+        return filter.call(children(el.parentNode), function(child){ return child!==el })
+      }), selector)
+    },
+    empty: function(){
+      return this.each(function(){ this.innerHTML = '' })
+    },
+    // `pluck` is borrowed from Prototype.js
+    pluck: function(property){
+      return $.map(this, function(el){ return el[property] })
+    },
+    show: function(){
+      return this.each(function(){
+        this.style.display == "none" && (this.style.display = null)
+        if (getComputedStyle(this, '').getPropertyValue("display") == "none")
+          this.style.display = defaultDisplay(this.nodeName)
+      })
+    },
+    replaceWith: function(newContent){
+      return this.before(newContent).remove()
+    },
+    wrap: function(structure){
+      var func = isFunction(structure)
+      if (this[0] && !func)
+        var dom   = $(structure).get(0),
+            clone = dom.parentNode || this.length > 1
+
+      return this.each(function(index){
+        $(this).wrapAll(
+          func ? structure.call(this, index) :
+            clone ? dom.cloneNode(true) : dom
+        )
+      })
+    },
+    wrapAll: function(structure){
+      if (this[0]) {
+        $(this[0]).before(structure = $(structure))
+        var children
+        // drill down to the inmost element
+        while ((children = structure.children()).length) structure = children.first()
+        $(structure).append(this)
+      }
+      return this
+    },
+    wrapInner: function(structure){
+      var func = isFunction(structure)
+      return this.each(function(index){
+        var self = $(this), contents = self.contents(),
+            dom  = func ? structure.call(this, index) : structure
+        contents.length ? contents.wrapAll(dom) : self.append(dom)
+      })
+    },
+    unwrap: function(){
+      this.parent().each(function(){
+        $(this).replaceWith($(this).children())
+      })
+      return this
+    },
+    clone: function(){
+      return this.map(function(){ return this.cloneNode(true) })
+    },
+    hide: function(){
+      return this.css("display", "none")
+    },
+    toggle: function(setting){
+      return this.each(function(){
+        var el = $(this)
+        ;(setting === undefined ? el.css("display") == "none" : setting) ? el.show() : el.hide()
+      })
+    },
+    prev: function(selector){ return $(this.pluck('previousElementSibling')).filter(selector || '*') },
+    next: function(selector){ return $(this.pluck('nextElementSibling')).filter(selector || '*') },
+    html: function(html){
+      return html === undefined ?
+        (this.length > 0 ? this[0].innerHTML : null) :
+        this.each(function(idx){
+          var originHtml = this.innerHTML
+          $(this).empty().append( funcArg(this, html, idx, originHtml) )
+        })
+    },
+    text: function(text){
+      return text === undefined ?
+        (this.length > 0 ? this[0].textContent : null) :
+        this.each(function(){ this.textContent = text })
+    },
+    attr: function(name, value){
+      var result
+      return (typeof name == 'string' && value === undefined) ?
+        (this.length == 0 || this[0].nodeType !== 1 ? undefined :
+          (name == 'value' && this[0].nodeName == 'INPUT') ? this.val() :
+          (!(result = this[0].getAttribute(name)) && name in this[0]) ? this[0][name] : result
+        ) :
+        this.each(function(idx){
+          if (this.nodeType !== 1) return
+          if (isObject(name)) for (key in name) setAttribute(this, key, name[key])
+          else setAttribute(this, name, funcArg(this, value, idx, this.getAttribute(name)))
+        })
+    },
+    removeAttr: function(name){
+      return this.each(function(){ this.nodeType === 1 && setAttribute(this, name) })
+    },
+    prop: function(name, value){
+      return (value === undefined) ?
+        (this[0] && this[0][name]) :
+        this.each(function(idx){
+          this[name] = funcArg(this, value, idx, this[name])
+        })
+    },
+    data: function(name, value){
+      var data = this.attr('data-' + dasherize(name), value)
+      return data !== null ? deserializeValue(data) : undefined
+    },
+    val: function(value){
+      return (value === undefined) ?
+        (this[0] && (this[0].multiple ?
+           $(this[0]).find('option').filter(function(o){ return this.selected }).pluck('value') :
+           this[0].value)
+        ) :
+        this.each(function(idx){
+          this.value = funcArg(this, value, idx, this.value)
+        })
+    },
+    offset: function(coordinates){
+      if (coordinates) return this.each(function(index){
+        var $this = $(this),
+            coords = funcArg(this, coordinates, index, $this.offset()),
+            parentOffset = $this.offsetParent().offset(),
+            props = {
+              top:  coords.top  - parentOffset.top,
+              left: coords.left - parentOffset.left
+            }
+
+        if ($this.css('position') == 'static') props['position'] = 'relative'
+        $this.css(props)
+      })
+      if (this.length==0) return null
+      var obj = this[0].getBoundingClientRect()
+      return {
+        left: obj.left + window.pageXOffset,
+        top: obj.top + window.pageYOffset,
+        width: Math.round(obj.width),
+        height: Math.round(obj.height)
+      }
+    },
+    css: function(property, value){
+      if (arguments.length < 2 && typeof property == 'string')
+        return this[0] && (this[0].style[camelize(property)] || getComputedStyle(this[0], '').getPropertyValue(property))
+
+      var css = ''
+      if (type(property) == 'string') {
+        if (!value && value !== 0)
+          this.each(function(){ this.style.removeProperty(dasherize(property)) })
+        else
+          css = dasherize(property) + ":" + maybeAddPx(property, value)
+      } else {
+        for (key in property)
+          if (!property[key] && property[key] !== 0)
+            this.each(function(){ this.style.removeProperty(dasherize(key)) })
+          else
+            css += dasherize(key) + ':' + maybeAddPx(key, property[key]) + ';'
+      }
+
+      return this.each(function(){ this.style.cssText += ';' + css })
+    },
+    index: function(element){
+      return element ? this.indexOf($(element)[0]) : this.parent().children().indexOf(this[0])
+    },
+    hasClass: function(name){
+      return emptyArray.some.call(this, function(el){
+        return this.test(className(el))
+      }, classRE(name))
+    },
+    addClass: function(name){
+      return this.each(function(idx){
+        classList = []
+        var cls = className(this), newName = funcArg(this, name, idx, cls)
+        newName.split(/\s+/g).forEach(function(klass){
+          if (!$(this).hasClass(klass)) classList.push(klass)
+        }, this)
+        classList.length && className(this, cls + (cls ? " " : "") + classList.join(" "))
+      })
+    },
+    removeClass: function(name){
+      return this.each(function(idx){
+        if (name === undefined) return className(this, '')
+        classList = className(this)
+        funcArg(this, name, idx, classList).split(/\s+/g).forEach(function(klass){
+          classList = classList.replace(classRE(klass), " ")
+        })
+        className(this, classList.trim())
+      })
+    },
+    toggleClass: function(name, when){
+      return this.each(function(idx){
+        var $this = $(this), names = funcArg(this, name, idx, className(this))
+        names.split(/\s+/g).forEach(function(klass){
+          (when === undefined ? !$this.hasClass(klass) : when) ?
+            $this.addClass(klass) : $this.removeClass(klass)
+        })
+      })
+    },
+    scrollTop: function(){
+      if (!this.length) return
+      return ('scrollTop' in this[0]) ? this[0].scrollTop : this[0].scrollY
+    },
+    position: function() {
+      if (!this.length) return
+
+      var elem = this[0],
+        // Get *real* offsetParent
+        offsetParent = this.offsetParent(),
+        // Get correct offsets
+        offset       = this.offset(),
+        parentOffset = rootNodeRE.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset()
+
+      // Subtract element margins
+      // note: when an element has margin: auto the offsetLeft and marginLeft
+      // are the same in Safari causing offset.left to incorrectly be 0
+      offset.top  -= parseFloat( $(elem).css('margin-top') ) || 0
+      offset.left -= parseFloat( $(elem).css('margin-left') ) || 0
+
+      // Add offsetParent borders
+      parentOffset.top  += parseFloat( $(offsetParent[0]).css('border-top-width') ) || 0
+      parentOffset.left += parseFloat( $(offsetParent[0]).css('border-left-width') ) || 0
+
+      // Subtract the two offsets
+      return {
+        top:  offset.top  - parentOffset.top,
+        left: offset.left - parentOffset.left
+      }
+    },
+    offsetParent: function() {
+      return this.map(function(){
+        var parent = this.offsetParent || document.body
+        while (parent && !rootNodeRE.test(parent.nodeName) && $(parent).css("position") == "static")
+          parent = parent.offsetParent
+        return parent
+      })
+    }
+  }
+
+  // for now
+  $.fn.detach = $.fn.remove
+
+  // Generate the `width` and `height` functions
+  ;['width', 'height'].forEach(function(dimension){
+    $.fn[dimension] = function(value){
+      var offset, el = this[0],
+        Dimension = dimension.replace(/./, function(m){ return m[0].toUpperCase() })
+      if (value === undefined) return isWindow(el) ? el['inner' + Dimension] :
+        isDocument(el) ? el.documentElement['offset' + Dimension] :
+        (offset = this.offset()) && offset[dimension]
+      else return this.each(function(idx){
+        el = $(this)
+        el.css(dimension, funcArg(this, value, idx, el[dimension]()))
+      })
+    }
+  })
+
+  function traverseNode(node, fun) {
+    fun(node)
+    for (var key in node.childNodes) traverseNode(node.childNodes[key], fun)
+  }
+
+  // Generate the `after`, `prepend`, `before`, `append`,
+  // `insertAfter`, `insertBefore`, `appendTo`, and `prependTo` methods.
+  adjacencyOperators.forEach(function(operator, operatorIndex) {
+    var inside = operatorIndex % 2 //=> prepend, append
+
+    $.fn[operator] = function(){
+      // arguments can be nodes, arrays of nodes, Zepto objects and HTML strings
+      var argType, nodes = $.map(arguments, function(arg) {
+            argType = type(arg)
+            return argType == "object" || argType == "array" || arg == null ?
+              arg : zepto.fragment(arg)
+          }),
+          parent, copyByClone = this.length > 1
+      if (nodes.length < 1) return this
+
+      return this.each(function(_, target){
+        parent = inside ? target : target.parentNode
+
+        // convert all methods to a "before" operation
+        target = operatorIndex == 0 ? target.nextSibling :
+                 operatorIndex == 1 ? target.firstChild :
+                 operatorIndex == 2 ? target :
+                 null
+
+        nodes.forEach(function(node){
+          if (copyByClone) node = node.cloneNode(true)
+          else if (!parent) return $(node).remove()
+
+          traverseNode(parent.insertBefore(node, target), function(el){
+            if (el.nodeName != null && el.nodeName.toUpperCase() === 'SCRIPT' &&
+               (!el.type || el.type === 'text/javascript') && !el.src)
+              window['eval'].call(window, el.innerHTML)
+          })
+        })
+      })
+    }
+
+    // after    => insertAfter
+    // prepend  => prependTo
+    // before   => insertBefore
+    // append   => appendTo
+    $.fn[inside ? operator+'To' : 'insert'+(operatorIndex ? 'Before' : 'After')] = function(html){
+      $(html)[operator](this)
+      return this
+    }
+  })
+
+  zepto.Z.prototype = $.fn
+
+  // Export internal API functions in the `$.zepto` namespace
+  zepto.uniq = uniq
+  zepto.deserializeValue = deserializeValue
+  $.zepto = zepto
+
+  return $
+})()
+
+window.Zepto = Zepto
+'$' in window || (window.$ = Zepto)
+
+;(function($){
+  function detect(ua){
+    var os = this.os = {}, browser = this.browser = {},
+      webkit = ua.match(/WebKit\/([\d.]+)/),
+      android = ua.match(/(Android)\s+([\d.]+)/),
+      ipad = ua.match(/(iPad).*OS\s([\d_]+)/),
+      iphone = !ipad && ua.match(/(iPhone\sOS)\s([\d_]+)/),
+      webos = ua.match(/(webOS|hpwOS)[\s\/]([\d.]+)/),
+      touchpad = webos && ua.match(/TouchPad/),
+      kindle = ua.match(/Kindle\/([\d.]+)/),
+      silk = ua.match(/Silk\/([\d._]+)/),
+      blackberry = ua.match(/(BlackBerry).*Version\/([\d.]+)/),
+      bb10 = ua.match(/(BB10).*Version\/([\d.]+)/),
+      rimtabletos = ua.match(/(RIM\sTablet\sOS)\s([\d.]+)/),
+      playbook = ua.match(/PlayBook/),
+      chrome = ua.match(/Chrome\/([\d.]+)/) || ua.match(/CriOS\/([\d.]+)/),
+      firefox = ua.match(/Firefox\/([\d.]+)/)
+
+    // Todo: clean this up with a better OS/browser seperation:
+    // - discern (more) between multiple browsers on android
+    // - decide if kindle fire in silk mode is android or not
+    // - Firefox on Android doesn't specify the Android version
+    // - possibly devide in os, device and browser hashes
+
+    if (browser.webkit = !!webkit) browser.version = webkit[1]
+
+    if (android) os.android = true, os.version = android[2]
+    if (iphone) os.ios = os.iphone = true, os.version = iphone[2].replace(/_/g, '.')
+    if (ipad) os.ios = os.ipad = true, os.version = ipad[2].replace(/_/g, '.')
+    if (webos) os.webos = true, os.version = webos[2]
+    if (touchpad) os.touchpad = true
+    if (blackberry) os.blackberry = true, os.version = blackberry[2]
+    if (bb10) os.bb10 = true, os.version = bb10[2]
+    if (rimtabletos) os.rimtabletos = true, os.version = rimtabletos[2]
+    if (playbook) browser.playbook = true
+    if (kindle) os.kindle = true, os.version = kindle[1]
+    if (silk) browser.silk = true, browser.version = silk[1]
+    if (!silk && os.android && ua.match(/Kindle Fire/)) browser.silk = true
+    if (chrome) browser.chrome = true, browser.version = chrome[1]
+    if (firefox) browser.firefox = true, browser.version = firefox[1]
+
+    os.tablet = !!(ipad || playbook || (android && !ua.match(/Mobile/)) || (firefox && ua.match(/Tablet/)))
+    os.phone  = !!(!os.tablet && (android || iphone || webos || blackberry || bb10 ||
+      (chrome && ua.match(/Android/)) || (chrome && ua.match(/CriOS\/([\d.]+)/)) || (firefox && ua.match(/Mobile/))))
+  }
+
+  detect.call($, navigator.userAgent)
+  // make available to unit tests
+  $.__detect = detect
+
+})(Zepto)
+
+;(function($){
+  var $$ = $.zepto.qsa, handlers = {}, _zid = 1, specialEvents={},
+      hover = { mouseenter: 'mouseover', mouseleave: 'mouseout' }
+
+  specialEvents.click = specialEvents.mousedown = specialEvents.mouseup = specialEvents.mousemove = 'MouseEvents'
+
+  function zid(element) {
+    return element._zid || (element._zid = _zid++)
+  }
+  function findHandlers(element, event, fn, selector) {
+    event = parse(event)
+    if (event.ns) var matcher = matcherFor(event.ns)
+    return (handlers[zid(element)] || []).filter(function(handler) {
+      return handler
+        && (!event.e  || handler.e == event.e)
+        && (!event.ns || matcher.test(handler.ns))
+        && (!fn       || zid(handler.fn) === zid(fn))
+        && (!selector || handler.sel == selector)
+    })
+  }
+  function parse(event) {
+    var parts = ('' + event).split('.')
+    return {e: parts[0], ns: parts.slice(1).sort().join(' ')}
+  }
+  function matcherFor(ns) {
+    return new RegExp('(?:^| )' + ns.replace(' ', ' .* ?') + '(?: |$)')
+  }
+
+  function eachEvent(events, fn, iterator){
+    if ($.type(events) != "string") $.each(events, iterator)
+    else events.split(/\s/).forEach(function(type){ iterator(type, fn) })
+  }
+
+  function eventCapture(handler, captureSetting) {
+    return handler.del &&
+      (handler.e == 'focus' || handler.e == 'blur') ||
+      !!captureSetting
+  }
+
+  function realEvent(type) {
+    return hover[type] || type
+  }
+
+  function add(element, events, fn, selector, getDelegate, capture){
+    var id = zid(element), set = (handlers[id] || (handlers[id] = []))
+    eachEvent(events, fn, function(event, fn){
+      var handler   = parse(event)
+      handler.fn    = fn
+      handler.sel   = selector
+      // emulate mouseenter, mouseleave
+      if (handler.e in hover) fn = function(e){
+        var related = e.relatedTarget
+        if (!related || (related !== this && !$.contains(this, related)))
+          return handler.fn.apply(this, arguments)
+      }
+      handler.del   = getDelegate && getDelegate(fn, event)
+      var callback  = handler.del || fn
+      handler.proxy = function (e) {
+        var result = callback.apply(element, [e].concat(e.data))
+        if (result === false) e.preventDefault(), e.stopPropagation()
+        return result
+      }
+      handler.i = set.length
+      set.push(handler)
+      element.addEventListener(realEvent(handler.e), handler.proxy, eventCapture(handler, capture))
+    })
+  }
+  function remove(element, events, fn, selector, capture){
+    var id = zid(element)
+    eachEvent(events || '', fn, function(event, fn){
+      findHandlers(element, event, fn, selector).forEach(function(handler){
+        delete handlers[id][handler.i]
+        element.removeEventListener(realEvent(handler.e), handler.proxy, eventCapture(handler, capture))
+      })
+    })
+  }
+
+  $.event = { add: add, remove: remove }
+
+  $.proxy = function(fn, context) {
+    if ($.isFunction(fn)) {
+      var proxyFn = function(){ return fn.apply(context, arguments) }
+      proxyFn._zid = zid(fn)
+      return proxyFn
+    } else if (typeof context == 'string') {
+      return $.proxy(fn[context], fn)
+    } else {
+      throw new TypeError("expected function")
+    }
+  }
+
+  $.fn.bind = function(event, callback){
+    return this.each(function(){
+      add(this, event, callback)
+    })
+  }
+  $.fn.unbind = function(event, callback){
+    return this.each(function(){
+      remove(this, event, callback)
+    })
+  }
+  $.fn.one = function(event, callback){
+    return this.each(function(i, element){
+      add(this, event, callback, null, function(fn, type){
+        return function(){
+          var result = fn.apply(element, arguments)
+          remove(element, type, fn)
+          return result
+        }
+      })
+    })
+  }
+
+  var returnTrue = function(){return true},
+      returnFalse = function(){return false},
+      ignoreProperties = /^([A-Z]|layer[XY]$)/,
+      eventMethods = {
+        preventDefault: 'isDefaultPrevented',
+        stopImmediatePropagation: 'isImmediatePropagationStopped',
+        stopPropagation: 'isPropagationStopped'
+      }
+  function createProxy(event) {
+    var key, proxy = { originalEvent: event }
+    for (key in event)
+      if (!ignoreProperties.test(key) && event[key] !== undefined) proxy[key] = event[key]
+
+    $.each(eventMethods, function(name, predicate) {
+      proxy[name] = function(){
+        this[predicate] = returnTrue
+        return event[name].apply(event, arguments)
+      }
+      proxy[predicate] = returnFalse
+    })
+    return proxy
+  }
+
+  // emulates the 'defaultPrevented' property for browsers that have none
+  function fix(event) {
+    if (!('defaultPrevented' in event)) {
+      event.defaultPrevented = false
+      var prevent = event.preventDefault
+      event.preventDefault = function() {
+        this.defaultPrevented = true
+        prevent.call(this)
+      }
+    }
+  }
+
+  $.fn.delegate = function(selector, event, callback){
+    return this.each(function(i, element){
+      add(element, event, callback, selector, function(fn){
+        return function(e){
+          var evt, match = $(e.target).closest(selector, element).get(0)
+          if (match) {
+            evt = $.extend(createProxy(e), {currentTarget: match, liveFired: element})
+            return fn.apply(match, [evt].concat([].slice.call(arguments, 1)))
+          }
+        }
+      })
+    })
+  }
+  $.fn.undelegate = function(selector, event, callback){
+    return this.each(function(){
+      remove(this, event, callback, selector)
+    })
+  }
+
+  $.fn.live = function(event, callback){
+    $(document.body).delegate(this.selector, event, callback)
+    return this
+  }
+  $.fn.die = function(event, callback){
+    $(document.body).undelegate(this.selector, event, callback)
+    return this
+  }
+
+  $.fn.on = function(event, selector, callback){
+    return !selector || $.isFunction(selector) ?
+      this.bind(event, selector || callback) : this.delegate(selector, event, callback)
+  }
+  $.fn.off = function(event, selector, callback){
+    return !selector || $.isFunction(selector) ?
+      this.unbind(event, selector || callback) : this.undelegate(selector, event, callback)
+  }
+
+  $.fn.trigger = function(event, data){
+    if (typeof event == 'string' || $.isPlainObject(event)) event = $.Event(event)
+    fix(event)
+    event.data = data
+    return this.each(function(){
+      // items in the collection might not be DOM elements
+      // (todo: possibly support events on plain old objects)
+      if('dispatchEvent' in this) this.dispatchEvent(event)
+    })
+  }
+
+  // triggers event handlers on current element just as if an event occurred,
+  // doesn't trigger an actual event, doesn't bubble
+  $.fn.triggerHandler = function(event, data){
+    var e, result
+    this.each(function(i, element){
+      e = createProxy(typeof event == 'string' ? $.Event(event) : event)
+      e.data = data
+      e.target = element
+      $.each(findHandlers(element, event.type || event), function(i, handler){
+        result = handler.proxy(e)
+        if (e.isImmediatePropagationStopped()) return false
+      })
+    })
+    return result
+  }
+
+  // shortcut methods for `.bind(event, fn)` for each event type
+  ;('focusin focusout load resize scroll unload click dblclick '+
+  'mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave '+
+  'change select keydown keypress keyup error').split(' ').forEach(function(event) {
+    $.fn[event] = function(callback) {
+      return callback ?
+        this.bind(event, callback) :
+        this.trigger(event)
+    }
+  })
+
+  ;['focus', 'blur'].forEach(function(name) {
+    $.fn[name] = function(callback) {
+      if (callback) this.bind(name, callback)
+      else this.each(function(){
+        try { this[name]() }
+        catch(e) {}
+      })
+      return this
+    }
+  })
+
+  $.Event = function(type, props) {
+    if (typeof type != 'string') props = type, type = props.type
+    var event = document.createEvent(specialEvents[type] || 'Events'), bubbles = true
+    if (props) for (var name in props) (name == 'bubbles') ? (bubbles = !!props[name]) : (event[name] = props[name])
+    event.initEvent(type, bubbles, true, null, null, null, null, null, null, null, null, null, null, null, null)
+    event.isDefaultPrevented = function(){ return this.defaultPrevented }
+    return event
+  }
+
+})(Zepto)
+
+;(function($){
+  var jsonpID = 0,
+      document = window.document,
+      key,
+      name,
+      rscript = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
+      scriptTypeRE = /^(?:text|application)\/javascript/i,
+      xmlTypeRE = /^(?:text|application)\/xml/i,
+      jsonType = 'application/json',
+      htmlType = 'text/html',
+      blankRE = /^\s*$/
+
+  // trigger a custom event and return false if it was cancelled
+  function triggerAndReturn(context, eventName, data) {
+    var event = $.Event(eventName)
+    $(context).trigger(event, data)
+    return !event.defaultPrevented
+  }
+
+  // trigger an Ajax "global" event
+  function triggerGlobal(settings, context, eventName, data) {
+    if (settings.global) return triggerAndReturn(context || document, eventName, data)
+  }
+
+  // Number of active Ajax requests
+  $.active = 0
+
+  function ajaxStart(settings) {
+    if (settings.global && $.active++ === 0) triggerGlobal(settings, null, 'ajaxStart')
+  }
+  function ajaxStop(settings) {
+    if (settings.global && !(--$.active)) triggerGlobal(settings, null, 'ajaxStop')
+  }
+
+  // triggers an extra global event "ajaxBeforeSend" that's like "ajaxSend" but cancelable
+  function ajaxBeforeSend(xhr, settings) {
+    var context = settings.context
+    if (settings.beforeSend.call(context, xhr, settings) === false ||
+        triggerGlobal(settings, context, 'ajaxBeforeSend', [xhr, settings]) === false)
+      return false
+
+    triggerGlobal(settings, context, 'ajaxSend', [xhr, settings])
+  }
+  function ajaxSuccess(data, xhr, settings) {
+    var context = settings.context, status = 'success'
+    settings.success.call(context, data, status, xhr)
+    triggerGlobal(settings, context, 'ajaxSuccess', [xhr, settings, data])
+    ajaxComplete(status, xhr, settings)
+  }
+  // type: "timeout", "error", "abort", "parsererror"
+  function ajaxError(error, type, xhr, settings) {
+    var context = settings.context
+    settings.error.call(context, xhr, type, error)
+    triggerGlobal(settings, context, 'ajaxError', [xhr, settings, error])
+    ajaxComplete(type, xhr, settings)
+  }
+  // status: "success", "notmodified", "error", "timeout", "abort", "parsererror"
+  function ajaxComplete(status, xhr, settings) {
+    var context = settings.context
+    settings.complete.call(context, xhr, status)
+    triggerGlobal(settings, context, 'ajaxComplete', [xhr, settings])
+    ajaxStop(settings)
+  }
+
+  // Empty function, used as default callback
+  function empty() {}
+
+  $.ajaxJSONP = function(options){
+    if (!('type' in options)) return $.ajax(options)
+
+    var callbackName = 'jsonp' + (++jsonpID),
+      script = document.createElement('script'),
+      cleanup = function() {
+        clearTimeout(abortTimeout)
+        $(script).remove()
+        delete window[callbackName]
+      },
+      abort = function(type){
+        cleanup()
+        // In case of manual abort or timeout, keep an empty function as callback
+        // so that the SCRIPT tag that eventually loads won't result in an error.
+        if (!type || type == 'timeout') window[callbackName] = empty
+        ajaxError(null, type || 'abort', xhr, options)
+      },
+      xhr = { abort: abort }, abortTimeout
+
+    if (ajaxBeforeSend(xhr, options) === false) {
+      abort('abort')
+      return false
+    }
+
+    window[callbackName] = function(data){
+      cleanup()
+      ajaxSuccess(data, xhr, options)
+    }
+
+    script.onerror = function() { abort('error') }
+
+    script.src = options.url.replace(/=\?/, '=' + callbackName)
+    $('head').append(script)
+
+    if (options.timeout > 0) abortTimeout = setTimeout(function(){
+      abort('timeout')
+    }, options.timeout)
+
+    return xhr
+  }
+
+  $.ajaxSettings = {
+    // Default type of request
+    type: 'GET',
+    // Callback that is executed before request
+    beforeSend: empty,
+    // Callback that is executed if the request succeeds
+    success: empty,
+    // Callback that is executed the the server drops error
+    error: empty,
+    // Callback that is executed on request complete (both: error and success)
+    complete: empty,
+    // The context for the callbacks
+    context: null,
+    // Whether to trigger "global" Ajax events
+    global: true,
+    // Transport
+    xhr: function () {
+      return new window.XMLHttpRequest()
+    },
+    // MIME types mapping
+    accepts: {
+      script: 'text/javascript, application/javascript',
+      json:   jsonType,
+      xml:    'application/xml, text/xml',
+      html:   htmlType,
+      text:   'text/plain'
+    },
+    // Whether the request is to another domain
+    crossDomain: false,
+    // Default timeout
+    timeout: 0,
+    // Whether data should be serialized to string
+    processData: true,
+    // Whether the browser should be allowed to cache GET responses
+    cache: true,
+  }
+
+  function mimeToDataType(mime) {
+    if (mime) mime = mime.split(';', 2)[0]
+    return mime && ( mime == htmlType ? 'html' :
+      mime == jsonType ? 'json' :
+      scriptTypeRE.test(mime) ? 'script' :
+      xmlTypeRE.test(mime) && 'xml' ) || 'text'
+  }
+
+  function appendQuery(url, query) {
+    return (url + '&' + query).replace(/[&?]{1,2}/, '?')
+  }
+
+  // serialize payload and append it to the URL for GET requests
+  function serializeData(options) {
+    if (options.processData && options.data && $.type(options.data) != "string")
+      options.data = $.param(options.data, options.traditional)
+    if (options.data && (!options.type || options.type.toUpperCase() == 'GET'))
+      options.url = appendQuery(options.url, options.data)
+  }
+
+  $.ajax = function(options){
+    var settings = $.extend({}, options || {})
+    for (key in $.ajaxSettings) if (settings[key] === undefined) settings[key] = $.ajaxSettings[key]
+
+    ajaxStart(settings)
+
+    if (!settings.crossDomain) settings.crossDomain = /^([\w-]+:)?\/\/([^\/]+)/.test(settings.url) &&
+      RegExp.$2 != window.location.host
+
+    if (!settings.url) settings.url = window.location.toString()
+    serializeData(settings)
+    if (settings.cache === false) settings.url = appendQuery(settings.url, '_=' + Date.now())
+
+    var dataType = settings.dataType, hasPlaceholder = /=\?/.test(settings.url)
+    if (dataType == 'jsonp' || hasPlaceholder) {
+      if (!hasPlaceholder) settings.url = appendQuery(settings.url, 'callback=?')
+      return $.ajaxJSONP(settings)
+    }
+
+    var mime = settings.accepts[dataType],
+        baseHeaders = { },
+        protocol = /^([\w-]+:)\/\//.test(settings.url) ? RegExp.$1 : window.location.protocol,
+        xhr = settings.xhr(), abortTimeout
+
+    if (!settings.crossDomain) baseHeaders['X-Requested-With'] = 'XMLHttpRequest'
+    if (mime) {
+      baseHeaders['Accept'] = mime
+      if (mime.indexOf(',') > -1) mime = mime.split(',', 2)[0]
+      xhr.overrideMimeType && xhr.overrideMimeType(mime)
+    }
+    if (settings.contentType || (settings.contentType !== false && settings.data && settings.type.toUpperCase() != 'GET'))
+      baseHeaders['Content-Type'] = (settings.contentType || 'application/x-www-form-urlencoded')
+    settings.headers = $.extend(baseHeaders, settings.headers || {})
+
+    xhr.onreadystatechange = function(){
+      if (xhr.readyState == 4) {
+        xhr.onreadystatechange = empty;
+        clearTimeout(abortTimeout)
+        var result, error = false
+        if ((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304 || (xhr.status == 0 && protocol == 'file:')) {
+          dataType = dataType || mimeToDataType(xhr.getResponseHeader('content-type'))
+          result = xhr.responseText
+
+          try {
+            // http://perfectionkills.com/global-eval-what-are-the-options/
+            if (dataType == 'script')    (1,eval)(result)
+            else if (dataType == 'xml')  result = xhr.responseXML
+            else if (dataType == 'json') result = blankRE.test(result) ? null : $.parseJSON(result)
+          } catch (e) { error = e }
+
+          if (error) ajaxError(error, 'parsererror', xhr, settings)
+          else ajaxSuccess(result, xhr, settings)
+        } else {
+          ajaxError(null, xhr.status ? 'error' : 'abort', xhr, settings)
+        }
+      }
+    }
+
+    var async = 'async' in settings ? settings.async : true
+    xhr.open(settings.type, settings.url, async)
+
+    for (name in settings.headers) xhr.setRequestHeader(name, settings.headers[name])
+
+    if (ajaxBeforeSend(xhr, settings) === false) {
+      xhr.abort()
+      return false
+    }
+
+    if (settings.timeout > 0) abortTimeout = setTimeout(function(){
+        xhr.onreadystatechange = empty
+        xhr.abort()
+        ajaxError(null, 'timeout', xhr, settings)
+      }, settings.timeout)
+
+    // avoid sending empty string (#319)
+    xhr.send(settings.data ? settings.data : null)
+    return xhr
+  }
+
+  // handle optional data/success arguments
+  function parseArguments(url, data, success, dataType) {
+    var hasData = !$.isFunction(data)
+    return {
+      url:      url,
+      data:     hasData  ? data : undefined,
+      success:  !hasData ? data : $.isFunction(success) ? success : undefined,
+      dataType: hasData  ? dataType || success : success
+    }
+  }
+
+  $.get = function(url, data, success, dataType){
+    return $.ajax(parseArguments.apply(null, arguments))
+  }
+
+  $.post = function(url, data, success, dataType){
+    var options = parseArguments.apply(null, arguments)
+    options.type = 'POST'
+    return $.ajax(options)
+  }
+
+  $.getJSON = function(url, data, success){
+    var options = parseArguments.apply(null, arguments)
+    options.dataType = 'json'
+    return $.ajax(options)
+  }
+
+  $.fn.load = function(url, data, success){
+    if (!this.length) return this
+    var self = this, parts = url.split(/\s/), selector,
+        options = parseArguments(url, data, success),
+        callback = options.success
+    if (parts.length > 1) options.url = parts[0], selector = parts[1]
+    options.success = function(response){
+      self.html(selector ?
+        $('<div>').html(response.replace(rscript, "")).find(selector)
+        : response)
+      callback && callback.apply(self, arguments)
+    }
+    $.ajax(options)
+    return this
+  }
+
+  var escape = encodeURIComponent
+
+  function serialize(params, obj, traditional, scope){
+    var type, array = $.isArray(obj)
+    $.each(obj, function(key, value) {
+      type = $.type(value)
+      if (scope) key = traditional ? scope : scope + '[' + (array ? '' : key) + ']'
+      // handle data in serializeArray() format
+      if (!scope && array) params.add(value.name, value.value)
+      // recurse into nested objects
+      else if (type == "array" || (!traditional && type == "object"))
+        serialize(params, value, traditional, key)
+      else params.add(key, value)
+    })
+  }
+
+  $.param = function(obj, traditional){
+    var params = []
+    params.add = function(k, v){ this.push(escape(k) + '=' + escape(v)) }
+    serialize(params, obj, traditional)
+    return params.join('&').replace(/%20/g, '+')
+  }
+})(Zepto)
+
+;(function ($) {
+  $.fn.serializeArray = function () {
+    var result = [], el
+    $( Array.prototype.slice.call(this.get(0).elements) ).each(function () {
+      el = $(this)
+      var type = el.attr('type')
+      if (this.nodeName.toLowerCase() != 'fieldset' &&
+        !this.disabled && type != 'submit' && type != 'reset' && type != 'button' &&
+        ((type != 'radio' && type != 'checkbox') || this.checked))
+        result.push({
+          name: el.attr('name'),
+          value: el.val()
+        })
+    })
+    return result
+  }
+
+  $.fn.serialize = function () {
+    var result = []
+    this.serializeArray().forEach(function (elm) {
+      result.push( encodeURIComponent(elm.name) + '=' + encodeURIComponent(elm.value) )
+    })
+    return result.join('&')
+  }
+
+  $.fn.submit = function (callback) {
+    if (callback) this.bind('submit', callback)
+    else if (this.length) {
+      var event = $.Event('submit')
+      this.eq(0).trigger(event)
+      if (!event.defaultPrevented) this.get(0).submit()
+    }
+    return this
+  }
+
+})(Zepto)
+
+;(function($, undefined){
+  var prefix = '', eventPrefix, endEventName, endAnimationName,
+    vendors = { Webkit: 'webkit', Moz: '', O: 'o', ms: 'MS' },
+    document = window.document, testEl = document.createElement('div'),
+    supportedTransforms = /^((translate|rotate|scale)(X|Y|Z|3d)?|matrix(3d)?|perspective|skew(X|Y)?)$/i,
+    transform,
+    transitionProperty, transitionDuration, transitionTiming,
+    animationName, animationDuration, animationTiming,
+    cssReset = {}
+
+  function dasherize(str) { return downcase(str.replace(/([a-z])([A-Z])/, '$1-$2')) }
+  function downcase(str) { return str.toLowerCase() }
+  function normalizeEvent(name) { return eventPrefix ? eventPrefix + name : downcase(name) }
+
+  $.each(vendors, function(vendor, event){
+    if (testEl.style[vendor + 'TransitionProperty'] !== undefined) {
+      prefix = '-' + downcase(vendor) + '-'
+      eventPrefix = event
+      return false
+    }
+  })
+
+  transform = prefix + 'transform'
+  cssReset[transitionProperty = prefix + 'transition-property'] =
+  cssReset[transitionDuration = prefix + 'transition-duration'] =
+  cssReset[transitionTiming   = prefix + 'transition-timing-function'] =
+  cssReset[animationName      = prefix + 'animation-name'] =
+  cssReset[animationDuration  = prefix + 'animation-duration'] =
+  cssReset[animationTiming    = prefix + 'animation-timing-function'] = ''
+
+  $.fx = {
+    off: (eventPrefix === undefined && testEl.style.transitionProperty === undefined),
+    speeds: { _default: 400, fast: 200, slow: 600 },
+    cssPrefix: prefix,
+    transitionEnd: normalizeEvent('TransitionEnd'),
+    animationEnd: normalizeEvent('AnimationEnd')
+  }
+
+  $.fn.animate = function(properties, duration, ease, callback){
+    if ($.isPlainObject(duration))
+      ease = duration.easing, callback = duration.complete, duration = duration.duration
+    if (duration) duration = (typeof duration == 'number' ? duration :
+                    ($.fx.speeds[duration] || $.fx.speeds._default)) / 1000
+    return this.anim(properties, duration, ease, callback)
+  }
+
+  $.fn.anim = function(properties, duration, ease, callback){
+    var key, cssValues = {}, cssProperties, transforms = '',
+        that = this, wrappedCallback, endEvent = $.fx.transitionEnd
+
+    if (duration === undefined) duration = 0.4
+    if ($.fx.off) duration = 0
+
+    if (typeof properties == 'string') {
+      // keyframe animation
+      cssValues[animationName] = properties
+      cssValues[animationDuration] = duration + 's'
+      cssValues[animationTiming] = (ease || 'linear')
+      endEvent = $.fx.animationEnd
+    } else {
+      cssProperties = []
+      // CSS transitions
+      for (key in properties)
+        if (supportedTransforms.test(key)) transforms += key + '(' + properties[key] + ') '
+        else cssValues[key] = properties[key], cssProperties.push(dasherize(key))
+
+      if (transforms) cssValues[transform] = transforms, cssProperties.push(transform)
+      if (duration > 0 && typeof properties === 'object') {
+        cssValues[transitionProperty] = cssProperties.join(', ')
+        cssValues[transitionDuration] = duration + 's'
+        cssValues[transitionTiming] = (ease || 'linear')
+      }
+    }
+
+    wrappedCallback = function(event){
+      if (typeof event !== 'undefined') {
+        if (event.target !== event.currentTarget) return // makes sure the event didn't bubble from "below"
+        $(event.target).unbind(endEvent, wrappedCallback)
+      }
+      $(this).css(cssReset)
+      callback && callback.call(this)
+    }
+    if (duration > 0) this.bind(endEvent, wrappedCallback)
+
+    // trigger page reflow so new elements can animate
+    this.size() && this.get(0).clientLeft
+
+    this.css(cssValues)
+
+    if (duration <= 0) setTimeout(function() {
+      that.each(function(){ wrappedCallback.call(this) })
+    }, 0)
+
+    return this
+  }
+
+  testEl = null
+})(Zepto)
\ No newline at end of file
diff --git a/vendor/dimsemenov/magnific-popup/website/third-party-libs/zepto.min.js b/vendor/dimsemenov/magnific-popup/website/third-party-libs/zepto.min.js
new file mode 100644
index 0000000000000000000000000000000000000000..112a1da69c1a6b83c74aab3f2521d55d84f4466c
--- /dev/null
+++ b/vendor/dimsemenov/magnific-popup/website/third-party-libs/zepto.min.js
@@ -0,0 +1,2 @@
+/* Zepto v1.0-1-ga3cab6c - polyfill zepto detect event ajax form fx - zeptojs.com/license */
+(function(a){String.prototype.trim===a&&(String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g,"")}),Array.prototype.reduce===a&&(Array.prototype.reduce=function(b){if(this===void 0||this===null)throw new TypeError;var c=Object(this),d=c.length>>>0,e=0,f;if(typeof b!="function")throw new TypeError;if(d==0&&arguments.length==1)throw new TypeError;if(arguments.length>=2)f=arguments[1];else do{if(e in c){f=c[e++];break}if(++e>=d)throw new TypeError}while(!0);while(e<d)e in c&&(f=b.call(a,f,c[e],e,c)),e++;return f})})();var Zepto=function(){function E(a){return a==null?String(a):y[z.call(a)]||"object"}function F(a){return E(a)=="function"}function G(a){return a!=null&&a==a.window}function H(a){return a!=null&&a.nodeType==a.DOCUMENT_NODE}function I(a){return E(a)=="object"}function J(a){return I(a)&&!G(a)&&a.__proto__==Object.prototype}function K(a){return a instanceof Array}function L(a){return typeof a.length=="number"}function M(a){return g.call(a,function(a){return a!=null})}function N(a){return a.length>0?c.fn.concat.apply([],a):a}function O(a){return a.replace(/::/g,"/").replace(/([A-Z]+)([A-Z][a-z])/g,"$1_$2").replace(/([a-z\d])([A-Z])/g,"$1_$2").replace(/_/g,"-").toLowerCase()}function P(a){return a in j?j[a]:j[a]=new RegExp("(^|\\s)"+a+"(\\s|$)")}function Q(a,b){return typeof b=="number"&&!l[O(a)]?b+"px":b}function R(a){var b,c;return i[a]||(b=h.createElement(a),h.body.appendChild(b),c=k(b,"").getPropertyValue("display"),b.parentNode.removeChild(b),c=="none"&&(c="block"),i[a]=c),i[a]}function S(a){return"children"in a?f.call(a.children):c.map(a.childNodes,function(a){if(a.nodeType==1)return a})}function T(c,d,e){for(b in d)e&&(J(d[b])||K(d[b]))?(J(d[b])&&!J(c[b])&&(c[b]={}),K(d[b])&&!K(c[b])&&(c[b]=[]),T(c[b],d[b],e)):d[b]!==a&&(c[b]=d[b])}function U(b,d){return d===a?c(b):c(b).filter(d)}function V(a,b,c,d){return F(b)?b.call(a,c,d):b}function W(a,b,c){c==null?a.removeAttribute(b):a.setAttribute(b,c)}function X(b,c){var d=b.className,e=d&&d.baseVal!==a;if(c===a)return e?d.baseVal:d;e?d.baseVal=c:b.className=c}function Y(a){var b;try{return a?a=="true"||(a=="false"?!1:a=="null"?null:isNaN(b=Number(a))?/^[\[\{]/.test(a)?c.parseJSON(a):a:b):a}catch(d){return a}}function Z(a,b){b(a);for(var c in a.childNodes)Z(a.childNodes[c],b)}var a,b,c,d,e=[],f=e.slice,g=e.filter,h=window.document,i={},j={},k=h.defaultView.getComputedStyle,l={"column-count":1,columns:1,"font-weight":1,"line-height":1,opacity:1,"z-index":1,zoom:1},m=/^\s*<(\w+|!)[^>]*>/,n=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,o=/^(?:body|html)$/i,p=["val","css","html","text","data","width","height","offset"],q=["after","prepend","before","append"],r=h.createElement("table"),s=h.createElement("tr"),t={tr:h.createElement("tbody"),tbody:r,thead:r,tfoot:r,td:s,th:s,"*":h.createElement("div")},u=/complete|loaded|interactive/,v=/^\.([\w-]+)$/,w=/^#([\w-]*)$/,x=/^[\w-]+$/,y={},z=y.toString,A={},B,C,D=h.createElement("div");return A.matches=function(a,b){if(!a||a.nodeType!==1)return!1;var c=a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.matchesSelector;if(c)return c.call(a,b);var d,e=a.parentNode,f=!e;return f&&(e=D).appendChild(a),d=~A.qsa(e,b).indexOf(a),f&&D.removeChild(a),d},B=function(a){return a.replace(/-+(.)?/g,function(a,b){return b?b.toUpperCase():""})},C=function(a){return g.call(a,function(b,c){return a.indexOf(b)==c})},A.fragment=function(b,d,e){b.replace&&(b=b.replace(n,"<$1></$2>")),d===a&&(d=m.test(b)&&RegExp.$1),d in t||(d="*");var g,h,i=t[d];return i.innerHTML=""+b,h=c.each(f.call(i.childNodes),function(){i.removeChild(this)}),J(e)&&(g=c(h),c.each(e,function(a,b){p.indexOf(a)>-1?g[a](b):g.attr(a,b)})),h},A.Z=function(a,b){return a=a||[],a.__proto__=c.fn,a.selector=b||"",a},A.isZ=function(a){return a instanceof A.Z},A.init=function(b,d){if(!b)return A.Z();if(F(b))return c(h).ready(b);if(A.isZ(b))return b;var e;if(K(b))e=M(b);else if(I(b))e=[J(b)?c.extend({},b):b],b=null;else if(m.test(b))e=A.fragment(b.trim(),RegExp.$1,d),b=null;else{if(d!==a)return c(d).find(b);e=A.qsa(h,b)}return A.Z(e,b)},c=function(a,b){return A.init(a,b)},c.extend=function(a){var b,c=f.call(arguments,1);return typeof a=="boolean"&&(b=a,a=c.shift()),c.forEach(function(c){T(a,c,b)}),a},A.qsa=function(a,b){var c;return H(a)&&w.test(b)?(c=a.getElementById(RegExp.$1))?[c]:[]:a.nodeType!==1&&a.nodeType!==9?[]:f.call(v.test(b)?a.getElementsByClassName(RegExp.$1):x.test(b)?a.getElementsByTagName(b):a.querySelectorAll(b))},c.contains=function(a,b){return a!==b&&a.contains(b)},c.type=E,c.isFunction=F,c.isWindow=G,c.isArray=K,c.isPlainObject=J,c.isEmptyObject=function(a){var b;for(b in a)return!1;return!0},c.inArray=function(a,b,c){return e.indexOf.call(b,a,c)},c.camelCase=B,c.trim=function(a){return a.trim()},c.uuid=0,c.support={},c.expr={},c.map=function(a,b){var c,d=[],e,f;if(L(a))for(e=0;e<a.length;e++)c=b(a[e],e),c!=null&&d.push(c);else for(f in a)c=b(a[f],f),c!=null&&d.push(c);return N(d)},c.each=function(a,b){var c,d;if(L(a)){for(c=0;c<a.length;c++)if(b.call(a[c],c,a[c])===!1)return a}else for(d in a)if(b.call(a[d],d,a[d])===!1)return a;return a},c.grep=function(a,b){return g.call(a,b)},window.JSON&&(c.parseJSON=JSON.parse),c.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){y["[object "+b+"]"]=b.toLowerCase()}),c.fn={forEach:e.forEach,reduce:e.reduce,push:e.push,sort:e.sort,indexOf:e.indexOf,concat:e.concat,map:function(a){return c(c.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return c(f.apply(this,arguments))},ready:function(a){return u.test(h.readyState)?a(c):h.addEventListener("DOMContentLoaded",function(){a(c)},!1),this},get:function(b){return b===a?f.call(this):this[b>=0?b:b+this.length]},toArray:function(){return this.get()},size:function(){return this.length},remove:function(){return this.each(function(){this.parentNode!=null&&this.parentNode.removeChild(this)})},each:function(a){return e.every.call(this,function(b,c){return a.call(b,c,b)!==!1}),this},filter:function(a){return F(a)?this.not(this.not(a)):c(g.call(this,function(b){return A.matches(b,a)}))},add:function(a,b){return c(C(this.concat(c(a,b))))},is:function(a){return this.length>0&&A.matches(this[0],a)},not:function(b){var d=[];if(F(b)&&b.call!==a)this.each(function(a){b.call(this,a)||d.push(this)});else{var e=typeof b=="string"?this.filter(b):L(b)&&F(b.item)?f.call(b):c(b);this.forEach(function(a){e.indexOf(a)<0&&d.push(a)})}return c(d)},has:function(a){return this.filter(function(){return I(a)?c.contains(this,a):c(this).find(a).size()})},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){var a=this[0];return a&&!I(a)?a:c(a)},last:function(){var a=this[this.length-1];return a&&!I(a)?a:c(a)},find:function(a){var b,d=this;return typeof a=="object"?b=c(a).filter(function(){var a=this;return e.some.call(d,function(b){return c.contains(b,a)})}):this.length==1?b=c(A.qsa(this[0],a)):b=this.map(function(){return A.qsa(this,a)}),b},closest:function(a,b){var d=this[0],e=!1;typeof a=="object"&&(e=c(a));while(d&&!(e?e.indexOf(d)>=0:A.matches(d,a)))d=d!==b&&!H(d)&&d.parentNode;return c(d)},parents:function(a){var b=[],d=this;while(d.length>0)d=c.map(d,function(a){if((a=a.parentNode)&&!H(a)&&b.indexOf(a)<0)return b.push(a),a});return U(b,a)},parent:function(a){return U(C(this.pluck("parentNode")),a)},children:function(a){return U(this.map(function(){return S(this)}),a)},contents:function(){return this.map(function(){return f.call(this.childNodes)})},siblings:function(a){return U(this.map(function(a,b){return g.call(S(b.parentNode),function(a){return a!==b})}),a)},empty:function(){return this.each(function(){this.innerHTML=""})},pluck:function(a){return c.map(this,function(b){return b[a]})},show:function(){return this.each(function(){this.style.display=="none"&&(this.style.display=null),k(this,"").getPropertyValue("display")=="none"&&(this.style.display=R(this.nodeName))})},replaceWith:function(a){return this.before(a).remove()},wrap:function(a){var b=F(a);if(this[0]&&!b)var d=c(a).get(0),e=d.parentNode||this.length>1;return this.each(function(f){c(this).wrapAll(b?a.call(this,f):e?d.cloneNode(!0):d)})},wrapAll:function(a){if(this[0]){c(this[0]).before(a=c(a));var b;while((b=a.children()).length)a=b.first();c(a).append(this)}return this},wrapInner:function(a){var b=F(a);return this.each(function(d){var e=c(this),f=e.contents(),g=b?a.call(this,d):a;f.length?f.wrapAll(g):e.append(g)})},unwrap:function(){return this.parent().each(function(){c(this).replaceWith(c(this).children())}),this},clone:function(){return this.map(function(){return this.cloneNode(!0)})},hide:function(){return this.css("display","none")},toggle:function(b){return this.each(function(){var d=c(this);(b===a?d.css("display")=="none":b)?d.show():d.hide()})},prev:function(a){return c(this.pluck("previousElementSibling")).filter(a||"*")},next:function(a){return c(this.pluck("nextElementSibling")).filter(a||"*")},html:function(b){return b===a?this.length>0?this[0].innerHTML:null:this.each(function(a){var d=this.innerHTML;c(this).empty().append(V(this,b,a,d))})},text:function(b){return b===a?this.length>0?this[0].textContent:null:this.each(function(){this.textContent=b})},attr:function(c,d){var e;return typeof c=="string"&&d===a?this.length==0||this[0].nodeType!==1?a:c=="value"&&this[0].nodeName=="INPUT"?this.val():!(e=this[0].getAttribute(c))&&c in this[0]?this[0][c]:e:this.each(function(a){if(this.nodeType!==1)return;if(I(c))for(b in c)W(this,b,c[b]);else W(this,c,V(this,d,a,this.getAttribute(c)))})},removeAttr:function(a){return this.each(function(){this.nodeType===1&&W(this,a)})},prop:function(b,c){return c===a?this[0]&&this[0][b]:this.each(function(a){this[b]=V(this,c,a,this[b])})},data:function(b,c){var d=this.attr("data-"+O(b),c);return d!==null?Y(d):a},val:function(b){return b===a?this[0]&&(this[0].multiple?c(this[0]).find("option").filter(function(a){return this.selected}).pluck("value"):this[0].value):this.each(function(a){this.value=V(this,b,a,this.value)})},offset:function(a){if(a)return this.each(function(b){var d=c(this),e=V(this,a,b,d.offset()),f=d.offsetParent().offset(),g={top:e.top-f.top,left:e.left-f.left};d.css("position")=="static"&&(g.position="relative"),d.css(g)});if(this.length==0)return null;var b=this[0].getBoundingClientRect();return{left:b.left+window.pageXOffset,top:b.top+window.pageYOffset,width:Math.round(b.width),height:Math.round(b.height)}},css:function(a,c){if(arguments.length<2&&typeof a=="string")return this[0]&&(this[0].style[B(a)]||k(this[0],"").getPropertyValue(a));var d="";if(E(a)=="string")!c&&c!==0?this.each(function(){this.style.removeProperty(O(a))}):d=O(a)+":"+Q(a,c);else for(b in a)!a[b]&&a[b]!==0?this.each(function(){this.style.removeProperty(O(b))}):d+=O(b)+":"+Q(b,a[b])+";";return this.each(function(){this.style.cssText+=";"+d})},index:function(a){return a?this.indexOf(c(a)[0]):this.parent().children().indexOf(this[0])},hasClass:function(a){return e.some.call(this,function(a){return this.test(X(a))},P(a))},addClass:function(a){return this.each(function(b){d=[];var e=X(this),f=V(this,a,b,e);f.split(/\s+/g).forEach(function(a){c(this).hasClass(a)||d.push(a)},this),d.length&&X(this,e+(e?" ":"")+d.join(" "))})},removeClass:function(b){return this.each(function(c){if(b===a)return X(this,"");d=X(this),V(this,b,c,d).split(/\s+/g).forEach(function(a){d=d.replace(P(a)," ")}),X(this,d.trim())})},toggleClass:function(b,d){return this.each(function(e){var f=c(this),g=V(this,b,e,X(this));g.split(/\s+/g).forEach(function(b){(d===a?!f.hasClass(b):d)?f.addClass(b):f.removeClass(b)})})},scrollTop:function(){if(!this.length)return;return"scrollTop"in this[0]?this[0].scrollTop:this[0].scrollY},position:function(){if(!this.length)return;var a=this[0],b=this.offsetParent(),d=this.offset(),e=o.test(b[0].nodeName)?{top:0,left:0}:b.offset();return d.top-=parseFloat(c(a).css("margin-top"))||0,d.left-=parseFloat(c(a).css("margin-left"))||0,e.top+=parseFloat(c(b[0]).css("border-top-width"))||0,e.left+=parseFloat(c(b[0]).css("border-left-width"))||0,{top:d.top-e.top,left:d.left-e.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||h.body;while(a&&!o.test(a.nodeName)&&c(a).css("position")=="static")a=a.offsetParent;return a})}},c.fn.detach=c.fn.remove,["width","height"].forEach(function(b){c.fn[b]=function(d){var e,f=this[0],g=b.replace(/./,function(a){return a[0].toUpperCase()});return d===a?G(f)?f["inner"+g]:H(f)?f.documentElement["offset"+g]:(e=this.offset())&&e[b]:this.each(function(a){f=c(this),f.css(b,V(this,d,a,f[b]()))})}}),q.forEach(function(a,b){var d=b%2;c.fn[a]=function(){var a,e=c.map(arguments,function(b){return a=E(b),a=="object"||a=="array"||b==null?b:A.fragment(b)}),f,g=this.length>1;return e.length<1?this:this.each(function(a,h){f=d?h:h.parentNode,h=b==0?h.nextSibling:b==1?h.firstChild:b==2?h:null,e.forEach(function(a){if(g)a=a.cloneNode(!0);else if(!f)return c(a).remove();Z(f.insertBefore(a,h),function(a){a.nodeName!=null&&a.nodeName.toUpperCase()==="SCRIPT"&&(!a.type||a.type==="text/javascript")&&!a.src&&window.eval.call(window,a.innerHTML)})})})},c.fn[d?a+"To":"insert"+(b?"Before":"After")]=function(b){return c(b)[a](this),this}}),A.Z.prototype=c.fn,A.uniq=C,A.deserializeValue=Y,c.zepto=A,c}();window.Zepto=Zepto,"$"in window||(window.$=Zepto),function(a){function b(a){var b=this.os={},c=this.browser={},d=a.match(/WebKit\/([\d.]+)/),e=a.match(/(Android)\s+([\d.]+)/),f=a.match(/(iPad).*OS\s([\d_]+)/),g=!f&&a.match(/(iPhone\sOS)\s([\d_]+)/),h=a.match(/(webOS|hpwOS)[\s\/]([\d.]+)/),i=h&&a.match(/TouchPad/),j=a.match(/Kindle\/([\d.]+)/),k=a.match(/Silk\/([\d._]+)/),l=a.match(/(BlackBerry).*Version\/([\d.]+)/),m=a.match(/(BB10).*Version\/([\d.]+)/),n=a.match(/(RIM\sTablet\sOS)\s([\d.]+)/),o=a.match(/PlayBook/),p=a.match(/Chrome\/([\d.]+)/)||a.match(/CriOS\/([\d.]+)/),q=a.match(/Firefox\/([\d.]+)/);if(c.webkit=!!d)c.version=d[1];e&&(b.android=!0,b.version=e[2]),g&&(b.ios=b.iphone=!0,b.version=g[2].replace(/_/g,".")),f&&(b.ios=b.ipad=!0,b.version=f[2].replace(/_/g,".")),h&&(b.webos=!0,b.version=h[2]),i&&(b.touchpad=!0),l&&(b.blackberry=!0,b.version=l[2]),m&&(b.bb10=!0,b.version=m[2]),n&&(b.rimtabletos=!0,b.version=n[2]),o&&(c.playbook=!0),j&&(b.kindle=!0,b.version=j[1]),k&&(c.silk=!0,c.version=k[1]),!k&&b.android&&a.match(/Kindle Fire/)&&(c.silk=!0),p&&(c.chrome=!0,c.version=p[1]),q&&(c.firefox=!0,c.version=q[1]),b.tablet=!!(f||o||e&&!a.match(/Mobile/)||q&&a.match(/Tablet/)),b.phone=!b.tablet&&!!(e||g||h||l||m||p&&a.match(/Android/)||p&&a.match(/CriOS\/([\d.]+)/)||q&&a.match(/Mobile/))}b.call(a,navigator.userAgent),a.__detect=b}(Zepto),function(a){function g(a){return a._zid||(a._zid=d++)}function h(a,b,d,e){b=i(b);if(b.ns)var f=j(b.ns);return(c[g(a)]||[]).filter(function(a){return a&&(!b.e||a.e==b.e)&&(!b.ns||f.test(a.ns))&&(!d||g(a.fn)===g(d))&&(!e||a.sel==e)})}function i(a){var b=(""+a).split(".");return{e:b[0],ns:b.slice(1).sort().join(" ")}}function j(a){return new RegExp("(?:^| )"+a.replace(" "," .* ?")+"(?: |$)")}function k(b,c,d){a.type(b)!="string"?a.each(b,d):b.split(/\s/).forEach(function(a){d(a,c)})}function l(a,b){return a.del&&(a.e=="focus"||a.e=="blur")||!!b}function m(a){return f[a]||a}function n(b,d,e,h,j,n){var o=g(b),p=c[o]||(c[o]=[]);k(d,e,function(c,d){var e=i(c);e.fn=d,e.sel=h,e.e in f&&(d=function(b){var c=b.relatedTarget;if(!c||c!==this&&!a.contains(this,c))return e.fn.apply(this,arguments)}),e.del=j&&j(d,c);var g=e.del||d;e.proxy=function(a){var c=g.apply(b,[a].concat(a.data));return c===!1&&(a.preventDefault(),a.stopPropagation()),c},e.i=p.length,p.push(e),b.addEventListener(m(e.e),e.proxy,l(e,n))})}function o(a,b,d,e,f){var i=g(a);k(b||"",d,function(b,d){h(a,b,d,e).forEach(function(b){delete c[i][b.i],a.removeEventListener(m(b.e),b.proxy,l(b,f))})})}function t(b){var c,d={originalEvent:b};for(c in b)!r.test(c)&&b[c]!==undefined&&(d[c]=b[c]);return a.each(s,function(a,c){d[a]=function(){return this[c]=p,b[a].apply(b,arguments)},d[c]=q}),d}function u(a){if(!("defaultPrevented"in a)){a.defaultPrevented=!1;var b=a.preventDefault;a.preventDefault=function(){this.defaultPrevented=!0,b.call(this)}}}var b=a.zepto.qsa,c={},d=1,e={},f={mouseenter:"mouseover",mouseleave:"mouseout"};e.click=e.mousedown=e.mouseup=e.mousemove="MouseEvents",a.event={add:n,remove:o},a.proxy=function(b,c){if(a.isFunction(b)){var d=function(){return b.apply(c,arguments)};return d._zid=g(b),d}if(typeof c=="string")return a.proxy(b[c],b);throw new TypeError("expected function")},a.fn.bind=function(a,b){return this.each(function(){n(this,a,b)})},a.fn.unbind=function(a,b){return this.each(function(){o(this,a,b)})},a.fn.one=function(a,b){return this.each(function(c,d){n(this,a,b,null,function(a,b){return function(){var c=a.apply(d,arguments);return o(d,b,a),c}})})};var p=function(){return!0},q=function(){return!1},r=/^([A-Z]|layer[XY]$)/,s={preventDefault:"isDefaultPrevented",stopImmediatePropagation:"isImmediatePropagationStopped",stopPropagation:"isPropagationStopped"};a.fn.delegate=function(b,c,d){return this.each(function(e,f){n(f,c,d,b,function(c){return function(d){var e,g=a(d.target).closest(b,f).get(0);if(g)return e=a.extend(t(d),{currentTarget:g,liveFired:f}),c.apply(g,[e].concat([].slice.call(arguments,1)))}})})},a.fn.undelegate=function(a,b,c){return this.each(function(){o(this,b,c,a)})},a.fn.live=function(b,c){return a(document.body).delegate(this.selector,b,c),this},a.fn.die=function(b,c){return a(document.body).undelegate(this.selector,b,c),this},a.fn.on=function(b,c,d){return!c||a.isFunction(c)?this.bind(b,c||d):this.delegate(c,b,d)},a.fn.off=function(b,c,d){return!c||a.isFunction(c)?this.unbind(b,c||d):this.undelegate(c,b,d)},a.fn.trigger=function(b,c){if(typeof b=="string"||a.isPlainObject(b))b=a.Event(b);return u(b),b.data=c,this.each(function(){"dispatchEvent"in this&&this.dispatchEvent(b)})},a.fn.triggerHandler=function(b,c){var d,e;return this.each(function(f,g){d=t(typeof b=="string"?a.Event(b):b),d.data=c,d.target=g,a.each(h(g,b.type||b),function(a,b){e=b.proxy(d);if(d.isImmediatePropagationStopped())return!1})}),e},"focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select keydown keypress keyup error".split(" ").forEach(function(b){a.fn[b]=function(a){return a?this.bind(b,a):this.trigger(b)}}),["focus","blur"].forEach(function(b){a.fn[b]=function(a){return a?this.bind(b,a):this.each(function(){try{this[b]()}catch(a){}}),this}}),a.Event=function(a,b){typeof a!="string"&&(b=a,a=b.type);var c=document.createEvent(e[a]||"Events"),d=!0;if(b)for(var f in b)f=="bubbles"?d=!!b[f]:c[f]=b[f];return c.initEvent(a,d,!0,null,null,null,null,null,null,null,null,null,null,null,null),c.isDefaultPrevented=function(){return this.defaultPrevented},c}}(Zepto),function($){function triggerAndReturn(a,b,c){var d=$.Event(b);return $(a).trigger(d,c),!d.defaultPrevented}function triggerGlobal(a,b,c,d){if(a.global)return triggerAndReturn(b||document,c,d)}function ajaxStart(a){a.global&&$.active++===0&&triggerGlobal(a,null,"ajaxStart")}function ajaxStop(a){a.global&&!--$.active&&triggerGlobal(a,null,"ajaxStop")}function ajaxBeforeSend(a,b){var c=b.context;if(b.beforeSend.call(c,a,b)===!1||triggerGlobal(b,c,"ajaxBeforeSend",[a,b])===!1)return!1;triggerGlobal(b,c,"ajaxSend",[a,b])}function ajaxSuccess(a,b,c){var d=c.context,e="success";c.success.call(d,a,e,b),triggerGlobal(c,d,"ajaxSuccess",[b,c,a]),ajaxComplete(e,b,c)}function ajaxError(a,b,c,d){var e=d.context;d.error.call(e,c,b,a),triggerGlobal(d,e,"ajaxError",[c,d,a]),ajaxComplete(b,c,d)}function ajaxComplete(a,b,c){var d=c.context;c.complete.call(d,b,a),triggerGlobal(c,d,"ajaxComplete",[b,c]),ajaxStop(c)}function empty(){}function mimeToDataType(a){return a&&(a=a.split(";",2)[0]),a&&(a==htmlType?"html":a==jsonType?"json":scriptTypeRE.test(a)?"script":xmlTypeRE.test(a)&&"xml")||"text"}function appendQuery(a,b){return(a+"&"+b).replace(/[&?]{1,2}/,"?")}function serializeData(a){a.processData&&a.data&&$.type(a.data)!="string"&&(a.data=$.param(a.data,a.traditional)),a.data&&(!a.type||a.type.toUpperCase()=="GET")&&(a.url=appendQuery(a.url,a.data))}function parseArguments(a,b,c,d){var e=!$.isFunction(b);return{url:a,data:e?b:undefined,success:e?$.isFunction(c)?c:undefined:b,dataType:e?d||c:c}}function serialize(a,b,c,d){var e,f=$.isArray(b);$.each(b,function(b,g){e=$.type(g),d&&(b=c?d:d+"["+(f?"":b)+"]"),!d&&f?a.add(g.name,g.value):e=="array"||!c&&e=="object"?serialize(a,g,c,b):a.add(b,g)})}var jsonpID=0,document=window.document,key,name,rscript=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,scriptTypeRE=/^(?:text|application)\/javascript/i,xmlTypeRE=/^(?:text|application)\/xml/i,jsonType="application/json",htmlType="text/html",blankRE=/^\s*$/;$.active=0,$.ajaxJSONP=function(a){if("type"in a){var b="jsonp"+ ++jsonpID,c=document.createElement("script"),d=function(){clearTimeout(g),$(c).remove(),delete window[b]},e=function(c){d();if(!c||c=="timeout")window[b]=empty;ajaxError(null,c||"abort",f,a)},f={abort:e},g;return ajaxBeforeSend(f,a)===!1?(e("abort"),!1):(window[b]=function(b){d(),ajaxSuccess(b,f,a)},c.onerror=function(){e("error")},c.src=a.url.replace(/=\?/,"="+b),$("head").append(c),a.timeout>0&&(g=setTimeout(function(){e("timeout")},a.timeout)),f)}return $.ajax(a)},$.ajaxSettings={type:"GET",beforeSend:empty,success:empty,error:empty,complete:empty,context:null,global:!0,xhr:function(){return new window.XMLHttpRequest},accepts:{script:"text/javascript, application/javascript",json:jsonType,xml:"application/xml, text/xml",html:htmlType,text:"text/plain"},crossDomain:!1,timeout:0,processData:!0,cache:!0},$.ajax=function(options){var settings=$.extend({},options||{});for(key in $.ajaxSettings)settings[key]===undefined&&(settings[key]=$.ajaxSettings[key]);ajaxStart(settings),settings.crossDomain||(settings.crossDomain=/^([\w-]+:)?\/\/([^\/]+)/.test(settings.url)&&RegExp.$2!=window.location.host),settings.url||(settings.url=window.location.toString()),serializeData(settings),settings.cache===!1&&(settings.url=appendQuery(settings.url,"_="+Date.now()));var dataType=settings.dataType,hasPlaceholder=/=\?/.test(settings.url);if(dataType=="jsonp"||hasPlaceholder)return hasPlaceholder||(settings.url=appendQuery(settings.url,"callback=?")),$.ajaxJSONP(settings);var mime=settings.accepts[dataType],baseHeaders={},protocol=/^([\w-]+:)\/\//.test(settings.url)?RegExp.$1:window.location.protocol,xhr=settings.xhr(),abortTimeout;settings.crossDomain||(baseHeaders["X-Requested-With"]="XMLHttpRequest"),mime&&(baseHeaders.Accept=mime,mime.indexOf(",")>-1&&(mime=mime.split(",",2)[0]),xhr.overrideMimeType&&xhr.overrideMimeType(mime));if(settings.contentType||settings.contentType!==!1&&settings.data&&settings.type.toUpperCase()!="GET")baseHeaders["Content-Type"]=settings.contentType||"application/x-www-form-urlencoded";settings.headers=$.extend(baseHeaders,settings.headers||{}),xhr.onreadystatechange=function(){if(xhr.readyState==4){xhr.onreadystatechange=empty,clearTimeout(abortTimeout);var result,error=!1;if(xhr.status>=200&&xhr.status<300||xhr.status==304||xhr.status==0&&protocol=="file:"){dataType=dataType||mimeToDataType(xhr.getResponseHeader("content-type")),result=xhr.responseText;try{dataType=="script"?(1,eval)(result):dataType=="xml"?result=xhr.responseXML:dataType=="json"&&(result=blankRE.test(result)?null:$.parseJSON(result))}catch(e){error=e}error?ajaxError(error,"parsererror",xhr,settings):ajaxSuccess(result,xhr,settings)}else ajaxError(null,xhr.status?"error":"abort",xhr,settings)}};var async="async"in settings?settings.async:!0;xhr.open(settings.type,settings.url,async);for(name in settings.headers)xhr.setRequestHeader(name,settings.headers[name]);return ajaxBeforeSend(xhr,settings)===!1?(xhr.abort(),!1):(settings.timeout>0&&(abortTimeout=setTimeout(function(){xhr.onreadystatechange=empty,xhr.abort(),ajaxError(null,"timeout",xhr,settings)},settings.timeout)),xhr.send(settings.data?settings.data:null),xhr)},$.get=function(a,b,c,d){return $.ajax(parseArguments.apply(null,arguments))},$.post=function(a,b,c,d){var e=parseArguments.apply(null,arguments);return e.type="POST",$.ajax(e)},$.getJSON=function(a,b,c){var d=parseArguments.apply(null,arguments);return d.dataType="json",$.ajax(d)},$.fn.load=function(a,b,c){if(!this.length)return this;var d=this,e=a.split(/\s/),f,g=parseArguments(a,b,c),h=g.success;return e.length>1&&(g.url=e[0],f=e[1]),g.success=function(a){d.html(f?$("<div>").html(a.replace(rscript,"")).find(f):a),h&&h.apply(d,arguments)},$.ajax(g),this};var escape=encodeURIComponent;$.param=function(a,b){var c=[];return c.add=function(a,b){this.push(escape(a)+"="+escape(b))},serialize(c,a,b),c.join("&").replace(/%20/g,"+")}}(Zepto),function(a){a.fn.serializeArray=function(){var b=[],c;return a(Array.prototype.slice.call(this.get(0).elements)).each(function(){c=a(this);var d=c.attr("type");this.nodeName.toLowerCase()!="fieldset"&&!this.disabled&&d!="submit"&&d!="reset"&&d!="button"&&(d!="radio"&&d!="checkbox"||this.checked)&&b.push({name:c.attr("name"),value:c.val()})}),b},a.fn.serialize=function(){var a=[];return this.serializeArray().forEach(function(b){a.push(encodeURIComponent(b.name)+"="+encodeURIComponent(b.value))}),a.join("&")},a.fn.submit=function(b){if(b)this.bind("submit",b);else if(this.length){var c=a.Event("submit");this.eq(0).trigger(c),c.defaultPrevented||this.get(0).submit()}return this}}(Zepto),function(a,b){function s(a){return t(a.replace(/([a-z])([A-Z])/,"$1-$2"))}function t(a){return a.toLowerCase()}function u(a){return d?d+a:t(a)}var c="",d,e,f,g={Webkit:"webkit",Moz:"",O:"o",ms:"MS"},h=window.document,i=h.createElement("div"),j=/^((translate|rotate|scale)(X|Y|Z|3d)?|matrix(3d)?|perspective|skew(X|Y)?)$/i,k,l,m,n,o,p,q,r={};a.each(g,function(a,e){if(i.style[a+"TransitionProperty"]!==b)return c="-"+t(a)+"-",d=e,!1}),k=c+"transform",r[l=c+"transition-property"]=r[m=c+"transition-duration"]=r[n=c+"transition-timing-function"]=r[o=c+"animation-name"]=r[p=c+"animation-duration"]=r[q=c+"animation-timing-function"]="",a.fx={off:d===b&&i.style.transitionProperty===b,speeds:{_default:400,fast:200,slow:600},cssPrefix:c,transitionEnd:u("TransitionEnd"),animationEnd:u("AnimationEnd")},a.fn.animate=function(b,c,d,e){return a.isPlainObject(c)&&(d=c.easing,e=c.complete,c=c.duration),c&&(c=(typeof c=="number"?c:a.fx.speeds[c]||a.fx.speeds._default)/1e3),this.anim(b,c,d,e)},a.fn.anim=function(c,d,e,f){var g,h={},i,t="",u=this,v,w=a.fx.transitionEnd;d===b&&(d=.4),a.fx.off&&(d=0);if(typeof c=="string")h[o]=c,h[p]=d+"s",h[q]=e||"linear",w=a.fx.animationEnd;else{i=[];for(g in c)j.test(g)?t+=g+"("+c[g]+") ":(h[g]=c[g],i.push(s(g)));t&&(h[k]=t,i.push(k)),d>0&&typeof c=="object"&&(h[l]=i.join(", "),h[m]=d+"s",h[n]=e||"linear")}return v=function(b){if(typeof b!="undefined"){if(b.target!==b.currentTarget)return;a(b.target).unbind(w,v)}a(this).css(r),f&&f.call(this)},d>0&&this.bind(w,v),this.size()&&this.get(0).clientLeft,this.css(h),d<=0&&setTimeout(function(){u.each(function(){v.call(this)})},0),this},i=null}(Zepto)
\ No newline at end of file
diff --git a/vendor/dimsemenov/magnific-popup/website/wordpress.html b/vendor/dimsemenov/magnific-popup/website/wordpress.html
new file mode 100644
index 0000000000000000000000000000000000000000..1a7979d257398194e5dee1d8d80ba8044ba0830a
--- /dev/null
+++ b/vendor/dimsemenov/magnific-popup/website/wordpress.html
@@ -0,0 +1,24 @@
+---
+
+layout: default
+
+title: Magnific WordPress Plugin
+
+description: The complete guide on how to use Magnific Popup - the open source responsive lightbox plugin.
+
+addjs: false
+
+canonical_url: http://dimsemenov.com/plugins/magnific-popup/wordpress.html
+
+buildtool: false
+
+---
+
+<style>
+#mc_embed_signup {
+	display: block !important;
+	max-width: 540px;
+	background: none;
+}
+</style>
+{% include signup.html %}
diff --git a/vendor/dnoegel/php-xdg-base-dir/.gitignore b/vendor/dnoegel/php-xdg-base-dir/.gitignore
deleted file mode 100644
index 57872d0f1e5f46731396e93c4e22b149809798f8..0000000000000000000000000000000000000000
--- a/vendor/dnoegel/php-xdg-base-dir/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/vendor/
diff --git a/vendor/dnoegel/php-xdg-base-dir/README.md b/vendor/dnoegel/php-xdg-base-dir/README.md
index 9e51bbb5b5527bbcf19d4bf6576fe93da31e7b7a..ee06b2d646a9d71cf60f775dd7966a25e7d634a5 100644
--- a/vendor/dnoegel/php-xdg-base-dir/README.md
+++ b/vendor/dnoegel/php-xdg-base-dir/README.md
@@ -1,6 +1,9 @@
 # XDG Base Directory
 
+[![Latest Stable Version](https://img.shields.io/packagist/v/dnoegel/php-xdg-base-dir.svg?style=flat-square)](https://packagist.org/packages/dnoegel/php-xdg-base-dir)
+[![Total Downloads](https://img.shields.io/packagist/dt/dnoegel/php-xdg-base-dir.svg?style=flat-square)](https://packagist.org/packages/dnoegel/php-xdg-base-dir)
 [![Software License](https://img.shields.io/badge/license-MIT-brightgreen.svg?style=flat-square)](LICENSE.md)
+[![Build Status](https://img.shields.io/travis/dnoegel/php-xdg-base-dir/master.svg?style=flat-square)](https://travis-ci.org/dnoegel/php-xdg-base-dir)
 
 Implementation of XDG Base Directory  specification for php
 
@@ -15,16 +18,16 @@ $ composer require dnoegel/php-xdg-base-dir
 ## Usage
 
 ``` php
-$xdg = \XdgBaseDir\Xdg();
+$xdg = new \XdgBaseDir\Xdg();
 
 echo $xdg->getHomeDir();
-echo $xdg->getHomeConfigDir()
-echo $xdg->getHomeDataDir()
-echo $xdg->getHomeCacheDir()
-echo $xdg->getRuntimeDir()
+echo $xdg->getHomeConfigDir();
+echo $xdg->getHomeDataDir();
+echo $xdg->getHomeCacheDir();
+echo $xdg->getRuntimeDir();
 
-$xdg->getDataDirs() // returns array
-$xdg->getConfigDirs() // returns array
+print_r($xdg->getDataDirs()); // returns array
+print_r($xdg->getConfigDirs()); // returns array
 ```
 
 ## Testing
diff --git a/vendor/dnoegel/php-xdg-base-dir/composer.json b/vendor/dnoegel/php-xdg-base-dir/composer.json
index f6caf31a293ecd5f42a89d7a0c94453d264d4834..94c463745bfe36c605d219c715981468b74c60e1 100644
--- a/vendor/dnoegel/php-xdg-base-dir/composer.json
+++ b/vendor/dnoegel/php-xdg-base-dir/composer.json
@@ -1,13 +1,13 @@
 {
     "name": "dnoegel/php-xdg-base-dir",
     "description": "implementation of xdg base directory specification for php",
-    "type": "project",
+    "type": "library",
     "license": "MIT",
     "require": {
         "php": ">=5.3.2"
     },
     "require-dev": {
-        "phpunit/phpunit": "@stable"
+        "phpunit/phpunit": "~7.0|~6.0|~5.0|~4.8.35"
     },
     "autoload": {
         "psr-4": {
diff --git a/vendor/dnoegel/php-xdg-base-dir/phpunit.xml.dist b/vendor/dnoegel/php-xdg-base-dir/phpunit.xml.dist
deleted file mode 100644
index 4000c012dc3a5eae7cab5d8727347ab71baa8761..0000000000000000000000000000000000000000
--- a/vendor/dnoegel/php-xdg-base-dir/phpunit.xml.dist
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<phpunit colors="true"
-         convertErrorsToExceptions="true"
-         convertNoticesToExceptions="true"
-         convertWarningsToExceptions="true"
-         processIsolation="false"
-         stopOnFailure="false"
-         syntaxCheck="false"
-         bootstrap="vendor/autoload.php"
-        >
-
-    <testsuites>
-        <testsuite name="php-xdg-base-dir unit tests">
-            <directory>./tests/</directory>
-        </testsuite>
-    </testsuites>
-
-    <filter>
-        <whitelist>
-            <directory>./src/</directory>
-        </whitelist>
-    </filter>
-</phpunit>
diff --git a/vendor/dnoegel/php-xdg-base-dir/src/Xdg.php b/vendor/dnoegel/php-xdg-base-dir/src/Xdg.php
index e2acda19d0905f7bb27d49759917b2ce4e0ee1d4..2dd314d0bca4f6f62bac0ca6ccd07943e6ca712f 100644
--- a/vendor/dnoegel/php-xdg-base-dir/src/Xdg.php
+++ b/vendor/dnoegel/php-xdg-base-dir/src/Xdg.php
@@ -6,9 +6,6 @@
  * Simple implementation of the XDG standard http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html
  *
  * Based on the python implementation https://github.com/takluyver/pyxdg/blob/master/xdg/BaseDirectory.py
- *
- * Class Xdg
- * @package ShopwareCli\Application
  */
 class Xdg
 {
@@ -30,7 +27,13 @@ public function getHomeDir()
      */
     public function getHomeConfigDir()
     {
-        $path = getenv('XDG_CONFIG_HOME') ?: $this->getHomeDir() . DIRECTORY_SEPARATOR . '.config';
+        if ($path = getenv('XDG_CONFIG_HOME')) {
+            return $path;
+        }
+
+        $homeDir = $this->getHomeDir();
+
+        $path = DIRECTORY_SEPARATOR === $homeDir ? $homeDir.'.config' : $homeDir . DIRECTORY_SEPARATOR . '.config';
 
         return $path;
     }
@@ -104,7 +107,7 @@ public function getRuntimeDir($strict=true)
         if (!$st['mode'] & self::S_IFDIR) {
             rmdir($fallback);
             $create = true;
-        } elseif ($st['uid'] != getmyuid() ||
+        } elseif ($st['uid'] != $this->getUid() ||
             $st['mode'] & (self::S_IRWXG | self::S_IRWXO)
         ) {
             rmdir($fallback);
@@ -118,4 +121,12 @@ public function getRuntimeDir($strict=true)
         return $fallback;
     }
 
+    private function getUid()
+    {
+        if (function_exists('posix_getuid')) {
+            return posix_getuid();
+        }
+
+        return getmyuid();
+    }
 }
diff --git a/vendor/dnoegel/php-xdg-base-dir/tests/XdgTest.php b/vendor/dnoegel/php-xdg-base-dir/tests/XdgTest.php
deleted file mode 100644
index 92c2e07ed40ff25219f0ed0322a4fe389c448eb5..0000000000000000000000000000000000000000
--- a/vendor/dnoegel/php-xdg-base-dir/tests/XdgTest.php
+++ /dev/null
@@ -1,116 +0,0 @@
-<?php
-
-class XdgTest extends PHPUnit_Framework_TestCase
-{
-    /**
-     * @return \XdgBaseDir\Xdg
-     */
-    public function getXdg()
-    {
-        return new \XdgBaseDir\Xdg();
-    }
-
-    public function testGetHomeDir()
-    {
-         putenv('HOME=/fake-dir');
-         $this->assertEquals('/fake-dir', $this->getXdg()->getHomeDir());
-    }
-
-    public function testGetFallbackHomeDir()
-    {
-        putenv('HOME=');
-        putenv('HOMEDRIVE=C:');
-        putenv('HOMEPATH=fake-dir');
-        $this->assertEquals('C:/fake-dir', $this->getXdg()->getHomeDir());
-    }
-
-    public function testXdgPutCache()
-    {
-        putenv('XDG_DATA_HOME=tmp/');
-        putenv('XDG_CONFIG_HOME=tmp/');
-        putenv('XDG_CACHE_HOME=tmp/');
-        $this->assertEquals('tmp/', $this->getXdg()->getHomeCacheDir());
-    }
-
-    public function testXdgPutData()
-    {
-        putenv('XDG_DATA_HOME=tmp/');
-        $this->assertEquals('tmp/', $this->getXdg()->getHomeDataDir());
-    }
-
-    public function testXdgPutConfig()
-    {
-        putenv('XDG_CONFIG_HOME=tmp/');
-        $this->assertEquals('tmp/', $this->getXdg()->getHomeConfigDir());
-    }
-
-    public function testXdgDataDirsShouldIncludeHomeDataDir()
-    {
-        putenv('XDG_DATA_HOME=tmp/');
-        putenv('XDG_CONFIG_HOME=tmp/');
-
-        $this->assertArrayHasKey('tmp/', array_flip($this->getXdg()->getDataDirs()));
-    }
-
-    public function testXdgConfigDirsShouldIncludeHomeConfigDir()
-    {
-        putenv('XDG_CONFIG_HOME=tmp/');
-
-        $this->assertArrayHasKey('tmp/', array_flip($this->getXdg()->getConfigDirs()));
-    }
-
-    /**
-     * If XDG_RUNTIME_DIR is set, it should be returned
-     */
-    public function testGetRuntimeDir()
-    {
-        putenv('XDG_RUNTIME_DIR=/tmp/');
-        $runtimeDir = $this->getXdg()->getRuntimeDir();
-
-        $this->assertEquals(is_dir($runtimeDir), true);
-    }
-
-    /**
-     * In strict mode, an exception should be shown if XDG_RUNTIME_DIR does not exist
-     *
-     * @expectedException \RuntimeException
-     */
-    public function testGetRuntimeDirShouldThrowException()
-    {
-        putenv('XDG_RUNTIME_DIR=');
-        $this->getXdg()->getRuntimeDir(true);
-    }
-
-    /**
-     * In fallback mode a directory should be created
-     */
-    public function testGetRuntimeDirShouldCreateDirectory()
-    {
-        putenv('XDG_RUNTIME_DIR=');
-        $dir = $this->getXdg()->getRuntimeDir(false);
-        $permission = decoct(fileperms($dir) & 0777);
-        $this->assertEquals(700, $permission);
-    }
-
-    /**
-     * Ensure, that the fallback directories are created with correct permission
-     */
-    public function testGetRuntimeShouldDeleteDirsWithWrongPermission()
-    {
-        $runtimeDir = sys_get_temp_dir() . DIRECTORY_SEPARATOR . XdgBaseDir\Xdg::RUNTIME_DIR_FALLBACK . getenv('USER');
-
-        rmdir($runtimeDir);
-        mkdir($runtimeDir, 0764, true);
-
-        // Permission should be wrong now
-        $permission = decoct(fileperms($runtimeDir) & 0777);
-        $this->assertEquals(764, $permission);
-
-        putenv('XDG_RUNTIME_DIR=');
-        $dir = $this->getXdg()->getRuntimeDir(false);
-
-        // Permission should be fixed
-        $permission = decoct(fileperms($dir) & 0777);
-        $this->assertEquals(700, $permission);
-    }
-}
diff --git a/vendor/drupal-composer/drupal-scaffold/.editorconfig b/vendor/drupal-composer/drupal-scaffold/.editorconfig
deleted file mode 100644
index 12bcb27e4ee7bbca7f74423a87d205926d2ad1d2..0000000000000000000000000000000000000000
--- a/vendor/drupal-composer/drupal-scaffold/.editorconfig
+++ /dev/null
@@ -1,17 +0,0 @@
-# Drupal editor configuration normalization
-# @see http://editorconfig.org/
-
-# This is the top-most .editorconfig file; do not search in parent directories.
-root = true
-
-# All files.
-[*]
-end_of_line = LF
-indent_style = space
-indent_size = 2
-charset = utf-8
-trim_trailing_whitespace = true
-insert_final_newline = true
-
-[{composer.json,composer.lock}]
-indent_size = 4
diff --git a/vendor/drupal-composer/drupal-scaffold/.gitignore b/vendor/drupal-composer/drupal-scaffold/.gitignore
deleted file mode 100644
index 22d0d82f8095e9c0ed572776afb47f9ca293ce00..0000000000000000000000000000000000000000
--- a/vendor/drupal-composer/drupal-scaffold/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-vendor
diff --git a/vendor/drupal-composer/drupal-scaffold/.scenarios.lock/install b/vendor/drupal-composer/drupal-scaffold/.scenarios.lock/install
deleted file mode 100755
index 8e691b0c156324bb73b7050e60222bab8fcce703..0000000000000000000000000000000000000000
--- a/vendor/drupal-composer/drupal-scaffold/.scenarios.lock/install
+++ /dev/null
@@ -1,52 +0,0 @@
-#!/bin/bash
-
-SCENARIO=$1
-DEPENDENCIES=${2-install}
-
-# Convert the aliases 'highest', 'lowest' and 'lock' to
-# the corresponding composer command to run.
-case $DEPENDENCIES in
-  highest)
-    DEPENDENCIES=update
-    ;;
-  lowest)
-    DEPENDENCIES='update --prefer-lowest'
-    ;;
-  lock|default|"")
-    DEPENDENCIES=install
-    ;;
-esac
-
-original_name=scenarios
-recommended_name=".scenarios.lock"
-
-base="$original_name"
-if [ -d "$recommended_name" ] ; then
-  base="$recommended_name"
-fi
-
-# If scenario is not specified, install the lockfile at
-# the root of the project.
-dir="$base/${SCENARIO}"
-if [ -z "$SCENARIO" ] || [ "$SCENARIO" == "default" ] ; then
-  SCENARIO=default
-  dir=.
-fi
-
-# Test to make sure that the selected scenario exists.
-if [ ! -d "$dir" ] ; then
-  echo "Requested scenario '${SCENARIO}' does not exist."
-  exit 1
-fi
-
-echo
-echo "::"
-echo ":: Switch to ${SCENARIO} scenario"
-echo "::"
-echo
-
-set -ex
-
-composer -n validate --working-dir=$dir --no-check-all --ansi
-composer -n --working-dir=$dir ${DEPENDENCIES} --prefer-dist --no-scripts
-composer -n --working-dir=$dir info
diff --git a/vendor/drupal-composer/drupal-scaffold/.scenarios.lock/phpunit4/.gitignore b/vendor/drupal-composer/drupal-scaffold/.scenarios.lock/phpunit4/.gitignore
deleted file mode 100644
index 22d0d82f8095e9c0ed572776afb47f9ca293ce00..0000000000000000000000000000000000000000
--- a/vendor/drupal-composer/drupal-scaffold/.scenarios.lock/phpunit4/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-vendor
diff --git a/vendor/drupal-composer/drupal-scaffold/.scenarios.lock/phpunit4/composer.json b/vendor/drupal-composer/drupal-scaffold/.scenarios.lock/phpunit4/composer.json
deleted file mode 100644
index 52d5a59b1364bb31dd5668ff7074768e87239b95..0000000000000000000000000000000000000000
--- a/vendor/drupal-composer/drupal-scaffold/.scenarios.lock/phpunit4/composer.json
+++ /dev/null
@@ -1,53 +0,0 @@
-{
-    "name": "drupal-composer/drupal-scaffold",
-    "description": "Composer Plugin for updating the Drupal scaffold files when using drupal/core",
-    "type": "composer-plugin",
-    "license": "GPL-2.0-or-later",
-    "require": {
-        "php": ">=5.4.5",
-        "composer-plugin-api": "^1.0.0",
-        "composer/semver": "^1.4"
-    },
-    "autoload": {
-        "psr-4": {
-            "DrupalComposer\\DrupalScaffold\\": "src/"
-        }
-    },
-    "extra": {
-        "class": "DrupalComposer\\DrupalScaffold\\Plugin",
-        "branch-alias": {
-            "dev-master": "2.0.x-dev"
-        }
-    },
-    "scripts": {
-        "cs": "phpcs --standard=PSR2 -n src",
-        "cbf": "phpcbf --standard=PSR2 -n src",
-        "unit": "phpunit --colors=always",
-        "lint": [
-            "find src -name '*.php' -print0 | xargs -0 -n1 php -l"
-        ],
-        "test": [
-            "@lint",
-            "@unit"
-        ],
-        "scenario": ".scenarios.lock/install",
-        "post-update-cmd": [
-            "create-scenario phpunit4 'phpunit/phpunit:^4.8.36' --platform-php '5.5.27'"
-        ]
-    },
-    "config": {
-        "optimize-autoloader": true,
-        "sort-packages": true,
-        "platform": {
-            "php": "5.5.27"
-        },
-        "vendor-dir": "../../vendor"
-    },
-    "require-dev": {
-        "composer/composer": "dev-master",
-        "g1a/composer-test-scenarios": "^2.1.0",
-        "phpunit/phpunit": "^4.8.36",
-        "squizlabs/php_codesniffer": "^2.8"
-    },
-    "minimum-stability": "stable"
-}
diff --git a/vendor/drupal-composer/drupal-scaffold/.scenarios.lock/phpunit4/src b/vendor/drupal-composer/drupal-scaffold/.scenarios.lock/phpunit4/src
deleted file mode 120000
index 929cb3dc9ba04d657e86ebde2d29661b78bdd85c..0000000000000000000000000000000000000000
--- a/vendor/drupal-composer/drupal-scaffold/.scenarios.lock/phpunit4/src
+++ /dev/null
@@ -1 +0,0 @@
-../../src
\ No newline at end of file
diff --git a/vendor/drupal-composer/drupal-scaffold/.scenarios.lock/phpunit4/tests b/vendor/drupal-composer/drupal-scaffold/.scenarios.lock/phpunit4/tests
deleted file mode 120000
index c2ebfe530b4e16023832427b3134004e19542bd6..0000000000000000000000000000000000000000
--- a/vendor/drupal-composer/drupal-scaffold/.scenarios.lock/phpunit4/tests
+++ /dev/null
@@ -1 +0,0 @@
-../../tests
\ No newline at end of file
diff --git a/vendor/drupal-composer/drupal-scaffold/.travis.yml b/vendor/drupal-composer/drupal-scaffold/.travis.yml
deleted file mode 100644
index ba2f61edd18ad75859e73a7b2e3f272b8d68e6cb..0000000000000000000000000000000000000000
--- a/vendor/drupal-composer/drupal-scaffold/.travis.yml
+++ /dev/null
@@ -1,42 +0,0 @@
-language: php
-
-branches:
-  # Only test the master branch and SemVer tags.
-  only:
-    - master
-    - /^[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+.*$/
-
-matrix:
-  fast_finish: true
-  include:
-    - php: 7.2
-      env: 'DEPENCENCIES=highest'
-    - php: 7.2
-    - php: 7.1
-    - php: 7.0.11
-    - php: 5.6
-      env: 'SCENARIO=phpunit4'
-    - php: 5.5
-      env: 'SCENARIO=phpunit4'
-    - php: 5.5
-      env: 'SCENARIO=phpunit4 DEPENDENCIES=lowest'
-
-sudo: false
-
-git:
- depth: 10000
-
-before_install:
-  - phpenv config-rm xdebug.ini
-  - composer --verbose self-update
-  - composer --version
-
-install:
-  - 'composer scenario "${SCENARIO}" "${DEPENDENCIES}"'
-
-before_script:
-  - git config --global user.email "travisci@example.com"
-  - git config --global user.name "Travis CI Test"
-
-script:
-  - composer test
diff --git a/vendor/drupal-composer/drupal-scaffold/README.md b/vendor/drupal-composer/drupal-scaffold/README.md
deleted file mode 100644
index 03e14933ccabdf9d37bad30245f92768ef3e6d95..0000000000000000000000000000000000000000
--- a/vendor/drupal-composer/drupal-scaffold/README.md
+++ /dev/null
@@ -1,121 +0,0 @@
-# drupal-scaffold
-
-[![Build Status](https://travis-ci.org/drupal-composer/drupal-scaffold.svg?branch=master)](https://travis-ci.org/drupal-composer/drupal-scaffold)
-
-Composer plugin for automatically downloading Drupal scaffold files (like
-`index.php`, `update.php`, …) when using `drupal/core` via Composer.
-
-It is recommended that the vendor directory be placed in its standard location
-at the project root, outside of the Drupal root; however, the location of the
-vendor directory and the name of the Drupal root may be placed in whatever
-location suits the project.  Drupal-scaffold will generate the autoload.php
-file at the Drupal root to require the Composer-generated autoload file in the
-vendor directory.
-
-## Usage
-
-Run `composer require drupal-composer/drupal-scaffold:dev-master` in your composer
-project before installing or updating `drupal/core`.
-
-Once drupal-scaffold is required by your project, it will automatically update
-your scaffold files whenever `composer update` changes the version of
-`drupal/core` installed.
-
-## Configuration
-
-You can configure the plugin with providing some settings in the `extra` section
-of your root `composer.json`.
-
-```json
-{
-  "extra": {
-    "drupal-scaffold": {
-      "source": "https://cgit.drupalcode.org/drupal/plain/{path}?h={version}",
-      "excludes": [
-        "google123.html",
-        "robots.txt"
-      ],
-      "includes": [
-        "sites/default/example.settings.my.php"
-      ],
-      "initial": {
-        "sites/default/default.services.yml": "sites/default/services.yml",
-        "sites/default/default.settings.php": "sites/default/settings.php"
-      },
-      "omit-defaults": false
-    }
-  }
-}
-```
-The `source` option may be used to specify the URL to download the
-scaffold files from; the default source is drupal.org. The literal string
-`{version}` in the `source` option is replaced with the current version of
-Drupal core being updated prior to download.
-
-With the `drupal-scaffold` option `excludes`, you can provide additional paths
-that should not be copied or overwritten. The plugin provides no excludes by
-default.
-
-Default includes are provided by the plugin:
-```
-.csslintrc
-.editorconfig
-.eslintignore
-.eslintrc (Drupal <= 8.2.x)
-.eslintrc.json (Drupal >= 8.3.x)
-.gitattributes
-.ht.router.php (Drupal >= 8.5.x)
-.htaccess
-index.php
-robots.txt
-sites/default/default.settings.php
-sites/default/default.services.yml
-sites/development.services.yml
-sites/example.settings.local.php
-sites/example.sites.php
-update.php
-web.config
-```
-
-When setting `omit-defaults` to `true`, neither the default excludes nor the
-default includes will be provided; in this instance, only those files explicitly
-listed in the `excludes` and `includes` options will be considered. If
-`omit-defaults` is `false` (the default), then any items listed in `excludes`
-or `includes` will be in addition to the usual defaults.
-
-The `initial` hash lists files that should be copied over only if they do not
-exist in the destination. The key specifies the path to the source file, and
-the value indicates the path to the destination file.
-
-## Limitation
-
-When using Composer to install or update the Drupal development branch, the
-scaffold files are always taken from the HEAD of the branch (or, more
-specifically, from the most recent development .tar.gz archive). This might
-not be what you want when using an old development version (e.g. when the
-version is fixed via composer.lock). To avoid problems, always commit your
-scaffold files to the repository any time that composer.lock is committed.
-Note that the correct scaffold files are retrieved when using a tagged release
-of `drupal/core` (recommended).
-
-## Custom command
-
-The plugin by default is only downloading the scaffold files when installing or
-updating `drupal/core`. If you want to call it manually, you have to add the
-command callback to the `scripts`-section of your root `composer.json`, like this:
-
-```json
-{
-  "scripts": {
-    "drupal-scaffold": "DrupalComposer\\DrupalScaffold\\Plugin::scaffold"
-  }
-}
-```
-
-After that you can manually download the scaffold files according to your
-configuration by using `composer drupal-scaffold`.
-
-It is assumed that the scaffold files will be committed to the repository, to
-ensure that the correct files are used on the CI server (see **Limitation**,
-above). After running `composer install` for the first time commit the scaffold
-files to your repository.
diff --git a/vendor/drupal-composer/drupal-scaffold/composer.json b/vendor/drupal-composer/drupal-scaffold/composer.json
deleted file mode 100644
index b08ff80fc86813034c4d7596018cda5bced5e1c6..0000000000000000000000000000000000000000
--- a/vendor/drupal-composer/drupal-scaffold/composer.json
+++ /dev/null
@@ -1,51 +0,0 @@
-{
-    "name": "drupal-composer/drupal-scaffold",
-    "description": "Composer Plugin for updating the Drupal scaffold files when using drupal/core",
-    "type": "composer-plugin",
-    "license": "GPL-2.0-or-later",
-    "require": {
-        "php": ">=5.4.5",
-        "composer-plugin-api": "^1.0.0",
-        "composer/semver": "^1.4"
-    },
-    "autoload": {
-        "psr-4": {
-            "DrupalComposer\\DrupalScaffold\\": "src/"
-        }
-    },
-    "extra": {
-        "class": "DrupalComposer\\DrupalScaffold\\Plugin",
-        "branch-alias": {
-            "dev-master": "2.0.x-dev"
-        }
-    },
-    "scripts": {
-        "cs": "phpcs --standard=PSR2 -n src",
-        "cbf": "phpcbf --standard=PSR2 -n src",
-        "unit": "phpunit --colors=always",
-        "lint": [
-            "find src -name '*.php' -print0 | xargs -0 -n1 php -l"
-        ],
-        "test": [
-            "@lint",
-            "@unit"
-        ],
-        "scenario": ".scenarios.lock/install",
-        "post-update-cmd": [
-            "create-scenario phpunit4 'phpunit/phpunit:^4.8.36' --platform-php '5.5.27'"
-        ]
-    },
-    "config": {
-        "optimize-autoloader": true,
-        "sort-packages": true,
-        "platform": {
-            "php": "7.0.8"
-        }
-    },
-    "require-dev": {
-        "composer/composer": "dev-master",
-        "g1a/composer-test-scenarios": "^2.1.0",
-        "phpunit/phpunit": "^6",
-        "squizlabs/php_codesniffer": "^2.8"
-    }
-}
diff --git a/vendor/drupal-composer/drupal-scaffold/phpunit.xml.dist b/vendor/drupal-composer/drupal-scaffold/phpunit.xml.dist
deleted file mode 100644
index ac16a3eafb32e04f8ff0e1895b3aeec355948492..0000000000000000000000000000000000000000
--- a/vendor/drupal-composer/drupal-scaffold/phpunit.xml.dist
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/4.1/phpunit.xsd"
-    backupGlobals="false"
-    colors="true"
-    bootstrap="vendor/autoload.php"
-    verbose="true"
->
-    <testsuites>
-        <testsuite name="drupal-scaffold">
-            <directory>./tests/</directory>
-        </testsuite>
-    </testsuites>
-</phpunit>
diff --git a/vendor/drupal-composer/drupal-scaffold/src/DrupalScaffoldCommand.php b/vendor/drupal-composer/drupal-scaffold/src/DrupalScaffoldCommand.php
deleted file mode 100644
index 485a2f531a99d575b44cea79068392cd9b340900..0000000000000000000000000000000000000000
--- a/vendor/drupal-composer/drupal-scaffold/src/DrupalScaffoldCommand.php
+++ /dev/null
@@ -1,36 +0,0 @@
-<?php
-
-namespace DrupalComposer\DrupalScaffold;
-
-use Composer\Command\BaseCommand;
-use Symfony\Component\Console\Input\InputInterface;
-use Symfony\Component\Console\Output\OutputInterface;
-
-/**
- * The "drupal:scaffold" command class.
- *
- * Downloads scaffold files and generates the autoload.php file.
- */
-class DrupalScaffoldCommand extends BaseCommand {
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function configure() {
-    parent::configure();
-    $this
-      ->setName('drupal:scaffold')
-      ->setDescription('Update the Drupal scaffold files.');
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function execute(InputInterface $input, OutputInterface $output) {
-    $handler = new Handler($this->getComposer(), $this->getIO());
-    $handler->downloadScaffold();
-    // Generate the autoload.php file after generating the scaffold files.
-    $handler->generateAutoload();
-  }
-
-}
diff --git a/vendor/drupal-composer/drupal-scaffold/src/FileFetcher.php b/vendor/drupal-composer/drupal-scaffold/src/FileFetcher.php
deleted file mode 100644
index 653e7f22f1a8bdb58f2d4ea30e8a5e5e8c162a3e..0000000000000000000000000000000000000000
--- a/vendor/drupal-composer/drupal-scaffold/src/FileFetcher.php
+++ /dev/null
@@ -1,87 +0,0 @@
-<?php
-
-namespace DrupalComposer\DrupalScaffold;
-
-use Composer\IO\IOInterface;
-use Composer\Util\Filesystem;
-use Composer\Util\RemoteFilesystem;
-
-/**
- * Downloads all required files and writes it to the file system.
- */
-class FileFetcher {
-
-  /**
-   * @var \Composer\Util\RemoteFilesystem
-   */
-  protected $remoteFilesystem;
-
-  /**
-   * @var \Composer\IO\IOInterface
-   */
-  protected $io;
-
-  /**
-   * @var bool
-   *
-   * A boolean indicating if progress should be displayed.
-   */
-  protected $progress;
-
-  protected $source;
-  protected $filenames;
-  protected $fs;
-
-  /**
-   * Constructs this FileFetcher object.
-   */
-  public function __construct(RemoteFilesystem $remoteFilesystem, $source, IOInterface $io, $progress = TRUE) {
-    $this->remoteFilesystem = $remoteFilesystem;
-    $this->io = $io;
-    $this->source = $source;
-    $this->fs = new Filesystem();
-    $this->progress = $progress;
-  }
-
-  /**
-   * Downloads all required files and writes it to the file system.
-   */
-  public function fetch($version, $destination, $override) {
-    foreach ($this->filenames as $sourceFilename => $filename) {
-      $target = "$destination/$filename";
-      if ($override || !file_exists($target)) {
-        $url = $this->getUri($sourceFilename, $version);
-        $this->fs->ensureDirectoryExists($destination . '/' . dirname($filename));
-        if ($this->progress) {
-          $this->io->writeError("  - <info>$filename</info> (<comment>$url</comment>): ", FALSE);
-          $this->remoteFilesystem->copy($url, $url, $target, $this->progress);
-          // Used to put a new line because the remote file system does not put
-          // one.
-          $this->io->writeError('');
-        }
-        else {
-          $this->remoteFilesystem->copy($url, $url, $target, $this->progress);
-        }
-      }
-    }
-  }
-
-  /**
-   * Set filenames.
-   */
-  public function setFilenames(array $filenames) {
-    $this->filenames = $filenames;
-  }
-
-  /**
-   * Replace filename and version in the source pattern with their values.
-   */
-  protected function getUri($filename, $version) {
-    $map = [
-      '{path}' => $filename,
-      '{version}' => $version,
-    ];
-    return str_replace(array_keys($map), array_values($map), $this->source);
-  }
-
-}
diff --git a/vendor/drupal-composer/drupal-scaffold/src/Handler.php b/vendor/drupal-composer/drupal-scaffold/src/Handler.php
deleted file mode 100644
index 1bdefe0f69135a0aaa134a458c30a65c5fe87cde..0000000000000000000000000000000000000000
--- a/vendor/drupal-composer/drupal-scaffold/src/Handler.php
+++ /dev/null
@@ -1,411 +0,0 @@
-<?php
-
-namespace DrupalComposer\DrupalScaffold;
-
-use Composer\Script\Event;
-use Composer\Installer\PackageEvent;
-use Composer\Plugin\CommandEvent;
-use Composer\Composer;
-use Composer\DependencyResolver\Operation\InstallOperation;
-use Composer\DependencyResolver\Operation\UpdateOperation;
-use Composer\EventDispatcher\EventDispatcher;
-use Composer\IO\IOInterface;
-use Composer\Package\PackageInterface;
-use Composer\Semver\Semver;
-use Composer\Util\Filesystem;
-use Composer\Util\RemoteFilesystem;
-use Symfony\Component\Filesystem\Filesystem as SymfonyFilesystem;
-
-/**
- * Core class of the plugin, contains all logic which files should be fetched.
- */
-class Handler {
-
-  const PRE_DRUPAL_SCAFFOLD_CMD = 'pre-drupal-scaffold-cmd';
-  const POST_DRUPAL_SCAFFOLD_CMD = 'post-drupal-scaffold-cmd';
-
-  /**
-   * @var \Composer\Composer
-   */
-  protected $composer;
-
-  /**
-   * @var \Composer\IO\IOInterface
-   */
-  protected $io;
-
-  /**
-   * @var bool
-   *
-   * A boolean indicating if progress should be displayed.
-   */
-  protected $progress;
-
-  /**
-   * @var \Composer\Package\PackageInterface
-   */
-  protected $drupalCorePackage;
-
-  /**
-   * Handler constructor.
-   *
-   * @param \Composer\Composer $composer
-   * @param \Composer\IO\IOInterface $io
-   */
-  public function __construct(Composer $composer, IOInterface $io) {
-    $this->composer = $composer;
-    $this->io = $io;
-    $this->progress = TRUE;
-
-    // Pre-load all of our sources so that we do not run up
-    // against problems in `composer update` operations.
-    $this->manualLoad();
-  }
-
-  protected function manualLoad() {
-    $src_dir = __DIR__;
-
-    $classes = [
-      'CommandProvider',
-      'DrupalScaffoldCommand',
-      'FileFetcher',
-      'PrestissimoFileFetcher',
-    ];
-
-    foreach ($classes as $src) {
-      if (!class_exists('\\DrupalComposer\\DrupalScaffold\\' . $src)) {
-        include "{$src_dir}/{$src}.php";
-      }
-    }
-  }
-
-  /**
-   * @param $operation
-   * @return mixed
-   */
-  protected function getCorePackage($operation) {
-    if ($operation instanceof InstallOperation) {
-      $package = $operation->getPackage();
-    }
-    elseif ($operation instanceof UpdateOperation) {
-      $package = $operation->getTargetPackage();
-    }
-    if (isset($package) && $package instanceof PackageInterface && $package->getName() == 'drupal/core') {
-      return $package;
-    }
-    return NULL;
-  }
-
-  /**
-   * Get the command options.
-   *
-   * @param \Composer\Plugin\CommandEvent $event
-   */
-  public function onCmdBeginsEvent(CommandEvent $event) {
-    if ($event->getInput()->hasOption('no-progress')) {
-      $this->progress = !($event->getInput()->getOption('no-progress'));
-    }
-    else {
-      $this->progress = TRUE;
-    }
-  }
-
-  /**
-   * Marks scaffolding to be processed after an install or update command.
-   *
-   * @param \Composer\Installer\PackageEvent $event
-   */
-  public function onPostPackageEvent(PackageEvent $event) {
-    $package = $this->getCorePackage($event->getOperation());
-    if ($package) {
-      // By explicitly setting the core package, the onPostCmdEvent() will
-      // process the scaffolding automatically.
-      $this->drupalCorePackage = $package;
-    }
-  }
-
-  /**
-   * Post install command event to execute the scaffolding.
-   *
-   * @param \Composer\Script\Event $event
-   */
-  public function onPostCmdEvent(Event $event) {
-    // Only install the scaffolding if drupal/core was installed,
-    // AND there are no scaffolding files present.
-    if (isset($this->drupalCorePackage)) {
-      $this->downloadScaffold();
-      // Generate the autoload.php file after generating the scaffold files.
-      $this->generateAutoload();
-    }
-  }
-
-  /**
-   * Downloads drupal scaffold files for the current process.
-   */
-  public function downloadScaffold() {
-    $drupalCorePackage = $this->getDrupalCorePackage();
-    $webroot = realpath($this->getWebRoot());
-
-    // Collect options, excludes and settings files.
-    $options = $this->getOptions();
-    $files = array_diff($this->getIncludes(), $this->getExcludes());
-
-    // Call any pre-scaffold scripts that may be defined.
-    $dispatcher = new EventDispatcher($this->composer, $this->io);
-    $dispatcher->dispatch(self::PRE_DRUPAL_SCAFFOLD_CMD);
-
-    $version = $this->getDrupalCoreVersion($drupalCorePackage);
-
-    $remoteFs = new RemoteFilesystem($this->io);
-
-    $fetcher = new PrestissimoFileFetcher($remoteFs, $options['source'], $this->io, $this->progress, $this->composer->getConfig());
-    $fetcher->setFilenames(array_combine($files, $files));
-    $fetcher->fetch($version, $webroot, TRUE);
-
-    $fetcher->setFilenames($this->getInitial());
-    $fetcher->fetch($version, $webroot, FALSE);
-
-    // Call post-scaffold scripts.
-    $dispatcher->dispatch(self::POST_DRUPAL_SCAFFOLD_CMD);
-  }
-
-  /**
-   * Generate the autoload file at the project root.  Include the
-   * autoload file that Composer generated.
-   */
-  public function generateAutoload() {
-    $vendorPath = $this->getVendorPath();
-    $webroot = $this->getWebRoot();
-
-    // Calculate the relative path from the webroot (location of the
-    // project autoload.php) to the vendor directory.
-    $fs = new SymfonyFilesystem();
-    $relativeVendorPath = $fs->makePathRelative($vendorPath, realpath($webroot));
-
-    $fs->dumpFile($webroot . "/autoload.php", $this->autoLoadContents($relativeVendorPath));
-  }
-
-  /**
-   * Build the contents of the autoload file.
-   *
-   * @return string
-   */
-  protected function autoLoadContents($relativeVendorPath) {
-    $relativeVendorPath = rtrim($relativeVendorPath, '/');
-
-    $autoloadContents = <<<EOF
-<?php
-
-/**
- * @file
- * Includes the autoloader created by Composer.
- *
- * This file was generated by drupal-composer/drupal-scaffold.
- * https://github.com/drupal-composer/drupal-scaffold
- *
- * @see composer.json
- * @see index.php
- * @see core/install.php
- * @see core/rebuild.php
- * @see core/modules/statistics/statistics.php
- */
-
-return require __DIR__ . '/$relativeVendorPath/autoload.php';
-
-EOF;
-    return $autoloadContents;
-  }
-
-  /**
-   * Get the path to the 'vendor' directory.
-   *
-   * @return string
-   */
-  public function getVendorPath() {
-    $config = $this->composer->getConfig();
-    $filesystem = new Filesystem();
-    $filesystem->ensureDirectoryExists($config->get('vendor-dir'));
-    $vendorPath = $filesystem->normalizePath(realpath($config->get('vendor-dir')));
-
-    return $vendorPath;
-  }
-
-  /**
-   * Look up the Drupal core package object, or return it from where we cached
-   * it in the $drupalCorePackage field.
-   *
-   * @return \Composer\Package\PackageInterface
-   */
-  public function getDrupalCorePackage() {
-    if (!isset($this->drupalCorePackage)) {
-      $this->drupalCorePackage = $this->getPackage('drupal/core');
-    }
-    return $this->drupalCorePackage;
-  }
-
-  /**
-   * Returns the Drupal core version for the given package.
-   *
-   * @param \Composer\Package\PackageInterface $drupalCorePackage
-   *
-   * @return string
-   */
-  protected function getDrupalCoreVersion(PackageInterface $drupalCorePackage) {
-    $version = $drupalCorePackage->getPrettyVersion();
-    if ($drupalCorePackage->getStability() == 'dev' && substr($version, -4) == '-dev') {
-      $version = substr($version, 0, -4);
-      return $version;
-    }
-    return $version;
-  }
-
-  /**
-   * Retrieve the path to the web root.
-   *
-   * @return string
-   */
-  public function getWebRoot() {
-    $drupalCorePackage = $this->getDrupalCorePackage();
-    $installationManager = $this->composer->getInstallationManager();
-    $corePath = $installationManager->getInstallPath($drupalCorePackage);
-    // Webroot is the parent path of the drupal core installation path.
-    $webroot = dirname($corePath);
-
-    return $webroot;
-  }
-
-  /**
-   * Retrieve a package from the current composer process.
-   *
-   * @param string $name
-   *   Name of the package to get from the current composer installation.
-   *
-   * @return \Composer\Package\PackageInterface
-   */
-  protected function getPackage($name) {
-    return $this->composer->getRepositoryManager()->getLocalRepository()->findPackage($name, '*');
-  }
-
-  /**
-   * Retrieve excludes from optional "extra" configuration.
-   *
-   * @return array
-   */
-  protected function getExcludes() {
-    return $this->getNamedOptionList('excludes', 'getExcludesDefault');
-  }
-
-  /**
-   * Retrieve list of additional settings files from optional "extra" configuration.
-   *
-   * @return array
-   */
-  protected function getIncludes() {
-    return $this->getNamedOptionList('includes', 'getIncludesDefault');
-  }
-
-  /**
-   * Retrieve list of initial files from optional "extra" configuration.
-   *
-   * @return array
-   */
-  protected function getInitial() {
-    return $this->getNamedOptionList('initial', 'getInitialDefault');
-  }
-
-  /**
-   * Retrieve a named list of options from optional "extra" configuration.
-   * Respects 'omit-defaults', and either includes or does not include the
-   * default values, as requested.
-   *
-   * @return array
-   */
-  protected function getNamedOptionList($optionName, $defaultFn) {
-    $options = $this->getOptions($this->composer);
-    $result = array();
-    if (empty($options['omit-defaults'])) {
-      $result = $this->$defaultFn();
-    }
-    $result = array_merge($result, (array) $options[$optionName]);
-
-    return $result;
-  }
-
-  /**
-   * Retrieve excludes from optional "extra" configuration.
-   *
-   * @return array
-   */
-  protected function getOptions() {
-    $extra = $this->composer->getPackage()->getExtra() + ['drupal-scaffold' => []];
-    $options = $extra['drupal-scaffold'] + [
-      'omit-defaults' => FALSE,
-      'excludes' => [],
-      'includes' => [],
-      'initial' => [],
-      'source' => 'https://cgit.drupalcode.org/drupal/plain/{path}?h={version}',
-      // Github: https://raw.githubusercontent.com/drupal/drupal/{version}/{path}
-    ];
-    return $options;
-  }
-
-  /**
-   * Holds default excludes.
-   */
-  protected function getExcludesDefault() {
-    return [];
-  }
-
-  /**
-   * Holds default settings files list.
-   */
-  protected function getIncludesDefault() {
-    $version = $this->getDrupalCoreVersion($this->getDrupalCorePackage());
-    list($major, $minor) = explode('.', $version, 3);
-    $version = "$major.$minor";
-
-    /**
-     * Files from 8.3.x
-     *
-     * @see https://cgit.drupalcode.org/drupal/tree/?h=8.3.x
-     */
-    $common = [
-      '.csslintrc',
-      '.editorconfig',
-      '.eslintignore',
-      '.gitattributes',
-      '.htaccess',
-      'index.php',
-      'robots.txt',
-      'sites/default/default.settings.php',
-      'sites/default/default.services.yml',
-      'sites/development.services.yml',
-      'sites/example.settings.local.php',
-      'sites/example.sites.php',
-      'update.php',
-      'web.config',
-    ];
-
-    // Version specific variations.
-    if (Semver::satisfies($version, '<8.3')) {
-      $common[] = '.eslintrc';
-    }
-    if (Semver::satisfies($version, '>=8.3')) {
-      $common[] = '.eslintrc.json';
-    }
-    if (Semver::satisfies($version, '>=8.5')) {
-      $common[] = '.ht.router.php';
-    }
-
-    sort($common);
-    return $common;
-  }
-
-  /**
-   * Holds default initial files.
-   */
-  protected function getInitialDefault() {
-    return [];
-  }
-
-}
diff --git a/vendor/drupal-composer/drupal-scaffold/src/Plugin.php b/vendor/drupal-composer/drupal-scaffold/src/Plugin.php
deleted file mode 100644
index 7833903f59449ea2c1290f5f3bdf613e63b6296b..0000000000000000000000000000000000000000
--- a/vendor/drupal-composer/drupal-scaffold/src/Plugin.php
+++ /dev/null
@@ -1,103 +0,0 @@
-<?php
-
-namespace DrupalComposer\DrupalScaffold;
-
-use Composer\Script\Event;
-use Composer\Plugin\CommandEvent;
-use Composer\Composer;
-use Composer\EventDispatcher\EventSubscriberInterface;
-use Composer\Installer\PackageEvent;
-use Composer\Installer\PackageEvents;
-use Composer\IO\IOInterface;
-use Composer\Plugin\Capable;
-use Composer\Plugin\PluginEvents;
-use Composer\Plugin\PluginInterface;
-use Composer\Script\ScriptEvents;
-
-/**
- * Composer plugin for handling drupal scaffold.
- */
-class Plugin implements PluginInterface, EventSubscriberInterface, Capable {
-
-  /**
-   * @var \DrupalComposer\DrupalScaffold\Handler
-   */
-  protected $handler;
-
-  /**
-   * {@inheritdoc}
-   */
-  public function activate(Composer $composer, IOInterface $io) {
-    // We use a separate PluginScripts object. This way we separate
-    // functionality and also avoid some debug issues with the plugin being
-    // copied on initialisation.
-    // @see \Composer\Plugin\PluginManager::registerPackage()
-    $this->handler = new Handler($composer, $io);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getCapabilities() {
-    return array(
-      'Composer\Plugin\Capability\CommandProvider' => 'DrupalComposer\DrupalScaffold\CommandProvider',
-    );
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public static function getSubscribedEvents() {
-    return array(
-      PackageEvents::POST_PACKAGE_INSTALL => 'postPackage',
-      PackageEvents::POST_PACKAGE_UPDATE => 'postPackage',
-      ScriptEvents::POST_UPDATE_CMD => 'postCmd',
-      PluginEvents::COMMAND => 'cmdBegins',
-    );
-  }
-
-  /**
-   * Command begins event callback.
-   *
-   * @param \Composer\Plugin\CommandEvent $event
-   */
-  public function cmdBegins(CommandEvent $event) {
-    $this->handler->onCmdBeginsEvent($event);
-  }
-
-  /**
-   * Post package event behaviour.
-   *
-   * @param \Composer\Installer\PackageEvent $event
-   */
-  public function postPackage(PackageEvent $event) {
-    $this->handler->onPostPackageEvent($event);
-  }
-
-  /**
-   * Post command event callback.
-   *
-   * @param \Composer\Script\Event $event
-   */
-  public function postCmd(Event $event) {
-    $this->handler->onPostCmdEvent($event);
-  }
-
-  /**
-   * Script callback for putting in composer scripts to download the
-   * scaffold files.
-   *
-   * @param \Composer\Script\Event $event
-   *
-   * @deprecated since version 2.5.0, to be removed in 3.0. Use the command
-   *   "composer drupal:scaffold" instead.
-   */
-  public static function scaffold(Event $event) {
-    @trigger_error('\DrupalComposer\DrupalScaffold\Plugin::scaffold is deprecated since version 2.5.0 and will be removed in 3.0. Use "composer drupal:scaffold" instead.', E_USER_DEPRECATED);
-    $handler = new Handler($event->getComposer(), $event->getIO());
-    $handler->downloadScaffold();
-    // Generate the autoload.php file after generating the scaffold files.
-    $handler->generateAutoload();
-  }
-
-}
diff --git a/vendor/drupal-composer/drupal-scaffold/src/PrestissimoFileFetcher.php b/vendor/drupal-composer/drupal-scaffold/src/PrestissimoFileFetcher.php
deleted file mode 100644
index 30b7c233c4ed5096be244e71208e0085e29a691d..0000000000000000000000000000000000000000
--- a/vendor/drupal-composer/drupal-scaffold/src/PrestissimoFileFetcher.php
+++ /dev/null
@@ -1,87 +0,0 @@
-<?php
-
-namespace DrupalComposer\DrupalScaffold;
-
-use Composer\Util\RemoteFilesystem;
-use Composer\Config;
-use Composer\IO\IOInterface;
-use Hirak\Prestissimo\CopyRequest;
-use Hirak\Prestissimo\CurlMulti;
-
-/**
- * Extends the default FileFetcher and uses hirak/prestissimo for parallel
- * downloads.
- */
-class PrestissimoFileFetcher extends FileFetcher {
-
-  /**
-   * @var \Composer\Config
-   */
-  protected $config;
-
-  /**
-   * Constructs this PrestissimoFileFetcher object.
-   */
-  public function __construct(RemoteFilesystem $remoteFilesystem, $source, IOInterface $io, $progress = TRUE, Config $config) {
-    parent::__construct($remoteFilesystem, $source, $io, $progress);
-    $this->config = $config;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function fetch($version, $destination, $override) {
-    if (class_exists(CurlMulti::class)) {
-      $this->fetchWithPrestissimo($version, $destination, $override);
-      return;
-    }
-    parent::fetch($version, $destination, $override);
-  }
-
-  /**
-   * Fetch files in parallel.
-   */
-  protected function fetchWithPrestissimo($version, $destination, $override) {
-    $requests = [];
-
-    foreach ($this->filenames as $sourceFilename => $filename) {
-      $target = "$destination/$filename";
-      if ($override || !file_exists($target)) {
-        $url = $this->getUri($sourceFilename, $version);
-        $this->fs->ensureDirectoryExists($destination . '/' . dirname($filename));
-        $requests[] = new CopyRequest($url, $target, FALSE, $this->io, $this->config);
-      }
-    }
-
-    $successCnt = $failureCnt = 0;
-    $errors = [];
-    $totalCnt = count($requests);
-    if ($totalCnt == 0) {
-      return;
-    }
-
-    $multi = new CurlMulti();
-    $multi->setRequests($requests);
-    do {
-      $multi->setupEventLoop();
-      $multi->wait();
-      $result = $multi->getFinishedResults();
-      $successCnt += $result['successCnt'];
-      $failureCnt += $result['failureCnt'];
-      if (isset($result['errors'])) {
-        $errors += $result['errors'];
-      }
-      if ($this->progress) {
-        foreach ($result['urls'] as $url) {
-          $this->io->writeError("  - Downloading <comment>$successCnt</comment>/<comment>$totalCnt</comment>: <info>$url</info>", TRUE);
-        }
-      }
-    } while ($multi->remain());
-
-    $urls = array_keys($errors);
-    if ($urls) {
-      throw new \Exception('Failed to download ' . implode(", ", $urls));
-    }
-  }
-
-}
diff --git a/vendor/drupal-composer/drupal-scaffold/tests/FetcherTest.php b/vendor/drupal-composer/drupal-scaffold/tests/FetcherTest.php
deleted file mode 100644
index ea822f928e7d8e01f209d51f998cbdea9ba3c823..0000000000000000000000000000000000000000
--- a/vendor/drupal-composer/drupal-scaffold/tests/FetcherTest.php
+++ /dev/null
@@ -1,79 +0,0 @@
-<?php
-
-namespace DrupalComposer\DrupalScaffold\Tests;
-
-use Composer\IO\NullIO;
-use Composer\Util\Filesystem;
-use Composer\Util\RemoteFilesystem;
-use DrupalComposer\DrupalScaffold\FileFetcher;
-use PHPUnit\Framework\TestCase;
-
-class FetcherTest extends TestCase {
-
-  /**
-   * @var \Composer\Util\Filesystem
-   */
-  protected $fs;
-
-  /**
-   * @var string
-   */
-  protected $tmpDir;
-
-  /**
-   * @var string
-   */
-  protected $rootDir;
-
-  /**
-   * @var string
-   */
-  protected $tmpReleaseTag;
-
-  /**
-   * SetUp test.
-   */
-  public function setUp() {
-    $this->rootDir = realpath(realpath(__DIR__ . '/..'));
-
-    // Prepare temp directory.
-    $this->fs = new Filesystem();
-    $this->tmpDir = realpath(sys_get_temp_dir()) . DIRECTORY_SEPARATOR . 'drupal-scaffold';
-    $this->ensureDirectoryExistsAndClear($this->tmpDir);
-
-    chdir($this->tmpDir);
-  }
-
-  /**
-   * Makes sure the given directory exists and has no content.
-   *
-   * @param string $directory
-   */
-  protected function ensureDirectoryExistsAndClear($directory) {
-    if (is_dir($directory)) {
-      $this->fs->removeDirectory($directory);
-    }
-    mkdir($directory, 0777, TRUE);
-  }
-
-  public function testFetch() {
-    $fetcher = new FileFetcher(new RemoteFilesystem(new NullIO()), 'https://cgit.drupalcode.org/drupal/plain/{path}?h={version}', new NullIO());
-    $fetcher->setFilenames([
-      '.htaccess' => '.htaccess',
-      'sites/default/default.settings.php' => 'sites/default/default.settings.php',
-    ]);
-    $fetcher->fetch('8.1.1', $this->tmpDir, TRUE);
-    $this->assertFileExists($this->tmpDir . '/.htaccess');
-    $this->assertFileExists($this->tmpDir . '/sites/default/default.settings.php');
-  }
-
-  public function testInitialFetch() {
-    $fetcher = new FileFetcher(new RemoteFilesystem(new NullIO()), 'https://cgit.drupalcode.org/drupal/plain/{path}?h={version}', new NullIO());
-    $fetcher->setFilenames([
-      'sites/default/default.settings.php' => 'sites/default/settings.php',
-    ]);
-    $fetcher->fetch('8.1.1', $this->tmpDir, FALSE);
-    $this->assertFileExists($this->tmpDir . '/sites/default/settings.php');
-  }
-
-}
diff --git a/vendor/drupal-composer/drupal-scaffold/tests/PluginTest.php b/vendor/drupal-composer/drupal-scaffold/tests/PluginTest.php
deleted file mode 100644
index a392e060d9556a8500275877ce878c5d9c095c00..0000000000000000000000000000000000000000
--- a/vendor/drupal-composer/drupal-scaffold/tests/PluginTest.php
+++ /dev/null
@@ -1,195 +0,0 @@
-<?php
-
-namespace DrupalComposer\DrupalScaffold\Tests;
-
-use Composer\Util\Filesystem;
-use PHPUnit\Framework\TestCase;
-
-/**
- * Tests composer plugin functionality.
- */
-class PluginTest extends TestCase {
-
-  /**
-   * @var \Composer\Util\Filesystem
-   */
-  protected $fs;
-
-  /**
-   * @var string
-   */
-  protected $tmpDir;
-
-  /**
-   * @var string
-   */
-  protected $rootDir;
-
-  /**
-   * @var string
-   */
-  protected $tmpReleaseTag;
-
-  /**
-   * SetUp test.
-   */
-  public function setUp() {
-    $this->rootDir = realpath(realpath(__DIR__ . '/..'));
-
-    // Prepare temp directory.
-    $this->fs = new Filesystem();
-    $this->tmpDir = realpath(sys_get_temp_dir()) . DIRECTORY_SEPARATOR . 'drupal-scaffold';
-    $this->ensureDirectoryExistsAndClear($this->tmpDir);
-
-    $this->writeTestReleaseTag();
-    $this->writeComposerJSON();
-
-    chdir($this->tmpDir);
-  }
-
-  /**
-   * TearDown.
-   *
-   * @return void
-   */
-  public function tearDown() {
-    $this->fs->removeDirectory($this->tmpDir);
-    $this->git(sprintf('tag -d "%s"', $this->tmpReleaseTag));
-  }
-
-  /**
-   * Tests a simple composer install without core, but adding core later.
-   */
-  public function testComposerInstallAndUpdate() {
-    $exampleScaffoldFile = $this->tmpDir . DIRECTORY_SEPARATOR . 'index.php';
-    $this->assertFileNotExists($exampleScaffoldFile, 'Scaffold file should not be exist.');
-    $this->composer('install --no-dev --prefer-dist');
-    $this->assertFileExists($this->tmpDir . DIRECTORY_SEPARATOR . 'core', 'Drupal core is installed.');
-    $this->assertFileExists($exampleScaffoldFile, 'Scaffold file should be automatically installed.');
-    $this->fs->remove($exampleScaffoldFile);
-    $this->assertFileNotExists($exampleScaffoldFile, 'Scaffold file should not be exist.');
-    $this->composer('drupal:scaffold');
-    $this->assertFileExists($exampleScaffoldFile, 'Scaffold file should be installed by "drupal:scaffold" command.');
-
-    foreach (['8.0.1', '8.1.x-dev', '8.3.0', '8.5.x-dev'] as $version) {
-      // We touch a scaffold file, so we can check the file was modified after
-      // the scaffold update.
-      touch($exampleScaffoldFile);
-      $mtime_touched = filemtime($exampleScaffoldFile);
-      // Requiring a newer version triggers "composer update".
-      $this->composer('require --update-with-dependencies --prefer-dist --update-no-dev drupal/core:"' . $version . '"');
-      clearstatcache();
-      $mtime_after = filemtime($exampleScaffoldFile);
-      $this->assertNotEquals($mtime_after, $mtime_touched, 'Scaffold file was modified by composer update. (' . $version . ')');
-      switch ($version) {
-        case '8.0.1':
-        case '8.1.x-dev':
-          $this->assertFileExists($this->tmpDir . DIRECTORY_SEPARATOR . '.eslintrc');
-          $this->assertFileNotExists($this->tmpDir . DIRECTORY_SEPARATOR . '.eslintrc.json');
-          $this->assertFileNotExists($this->tmpDir . DIRECTORY_SEPARATOR . '.ht.router.php');
-          break;
-
-        case '8.3.0':
-          // Note we don't clean up .eslintrc file.
-          $this->assertFileExists($this->tmpDir . DIRECTORY_SEPARATOR . '.eslintrc');
-          $this->assertFileExists($this->tmpDir . DIRECTORY_SEPARATOR . '.eslintrc.json');
-          $this->assertFileNotExists($this->tmpDir . DIRECTORY_SEPARATOR . '.ht.router.php');
-          break;
-
-        case '8.5.x-dev':
-          $this->assertFileExists($this->tmpDir . DIRECTORY_SEPARATOR . '.eslintrc');
-          $this->assertFileExists($this->tmpDir . DIRECTORY_SEPARATOR . '.eslintrc.json');
-          $this->assertFileExists($this->tmpDir . DIRECTORY_SEPARATOR . '.ht.router.php');
-          break;
-      }
-    }
-
-    // We touch a scaffold file, so we can check the file was modified by the
-    // custom command.
-    file_put_contents($exampleScaffoldFile, 1);
-    $this->composer('drupal:scaffold');
-    $this->assertNotEquals(file_get_contents($exampleScaffoldFile), 1, 'Scaffold file was modified by custom command.');
-  }
-
-  /**
-   * Writes the default composer json to the temp direcoty.
-   */
-  protected function writeComposerJSON() {
-    $json = json_encode($this->composerJSONDefaults(), JSON_PRETTY_PRINT);
-    // Write composer.json.
-    file_put_contents($this->tmpDir . '/composer.json', $json);
-  }
-
-  /**
-   * Writes a tag for the current commit, so we can reference it directly in the
-   * composer.json.
-   */
-  protected function writeTestReleaseTag() {
-    // Tag the current state.
-    $this->tmpReleaseTag = '999.0.' . time();
-    $this->git(sprintf('tag -a "%s" -m "%s"', $this->tmpReleaseTag, 'Tag for testing this exact commit'));
-  }
-
-  /**
-   * Provides the default composer.json data.
-   *
-   * @return array
-   */
-  protected function composerJSONDefaults() {
-    return array(
-      'repositories' => array(
-        array(
-          'type' => 'vcs',
-          'url' => $this->rootDir,
-        ),
-      ),
-      'require' => array(
-        'drupal-composer/drupal-scaffold' => $this->tmpReleaseTag,
-        'composer/installers' => '^1.0.20',
-        'drupal/core' => '8.0.0',
-      ),
-      'minimum-stability' => 'dev',
-    );
-  }
-
-  /**
-   * Wrapper for the composer command.
-   *
-   * @param string $command
-   *   Composer command name, arguments and/or options.
-   */
-  protected function composer($command) {
-    chdir($this->tmpDir);
-    passthru(escapeshellcmd($this->rootDir . '/vendor/bin/composer ' . $command), $exit_code);
-    if ($exit_code !== 0) {
-      throw new \Exception('Composer returned a non-zero exit code');
-    }
-  }
-
-  /**
-   * Wrapper for git command in the root directory.
-   *
-   * @param $command
-   *   Git command name, arguments and/or options.
-   */
-  protected function git($command) {
-    chdir($this->rootDir);
-    passthru(escapeshellcmd('git ' . $command), $exit_code);
-    if ($exit_code !== 0) {
-      throw new \Exception('Git returned a non-zero exit code');
-    }
-  }
-
-  /**
-   * Makes sure the given directory exists and has no content.
-   *
-   * @param string $directory
-   */
-  protected function ensureDirectoryExistsAndClear($directory) {
-    if (is_dir($directory)) {
-      $this->fs->removeDirectory($directory);
-    }
-    mkdir($directory, 0777, TRUE);
-  }
-
-}
diff --git a/vendor/drupal/console-core/composer.json b/vendor/drupal/console-core/composer.json
index 6007ef48534f3a7ff235511dfd10574e8f95d8ab..1318b84d254214d086e431f2dba6b2ede29590c9 100644
--- a/vendor/drupal/console-core/composer.json
+++ b/vendor/drupal/console-core/composer.json
@@ -1,33 +1,38 @@
 {
     "name": "drupal/console-core",
     "description": "Drupal Console Core",
-    "keywords": ["Drupal", "Console", "Development", "Symfony"],
+    "keywords": [
+        "Drupal",
+        "Console",
+        "Development",
+        "Symfony"
+    ],
     "homepage": "http://drupalconsole.com/",
     "type": "library",
     "license": "GPL-2.0-or-later",
     "authors": [
         {
-            "name":      "David Flores",
-            "email":     "dmousex@gmail.com",
-            "homepage":  "http://dmouse.net"
+            "name": "David Flores",
+            "email": "dmousex@gmail.com",
+            "homepage": "http://dmouse.net"
         },
         {
-            "name":      "Jesus Manuel Olivas",
-            "email":     "jesus.olivas@gmail.com",
-            "homepage":  "http://jmolivas.com"
+            "name": "Jesus Manuel Olivas",
+            "email": "jesus.olivas@gmail.com",
+            "homepage": "http://jmolivas.com"
         },
         {
-            "name":      "Eduardo Garcia",
-            "email":     "enzo@enzolutions.com",
-            "homepage":  "http://enzolutions.com/"
+            "name": "Eduardo Garcia",
+            "email": "enzo@enzolutions.com",
+            "homepage": "http://enzolutions.com/"
         },
         {
-            "name":      "Omar Aguirre",
-            "email":     "omersguchigu@gmail.com"
+            "name": "Omar Aguirre",
+            "email": "omersguchigu@gmail.com"
         },
         {
-            "name":      "Drupal Console Contributors",
-            "homepage":  "https://github.com/hechoendrupal/DrupalConsole/graphs/contributors"
+            "name": "Drupal Console Contributors",
+            "homepage": "https://github.com/hechoendrupal/DrupalConsole/graphs/contributors"
         }
     ],
     "support": {
@@ -36,23 +41,24 @@
         "docs": "http://docs.drupalconsole.com/"
     },
     "require": {
-        "php": "^5.5.9 || ^7.0",
+        "php": ">=7.0.8",
         "dflydev/dot-access-configuration": "^1.0",
-        "drupal/console-en": "1.8.0",
+        "drupal/console-en": "1.9.7",
         "stecman/symfony-console-completion": "~0.7",
-        "symfony/config": "~2.8|~3.0",
-        "symfony/console": "~2.8|~3.0",
-        "symfony/debug": "~2.8|~3.0",
-        "symfony/dependency-injection": "~2.8|~3.0",
-        "symfony/event-dispatcher": "~2.8|~3.0",
-        "symfony/filesystem": "~2.8|~3.0",
-        "symfony/finder": "~2.8|~3.0",
-        "symfony/process": "~2.8|~3.0",
-        "symfony/translation": "~2.8|~3.0",
-        "symfony/yaml": "~2.8|~3.0",
-        "twig/twig": "^1.23.1",
+        "symfony/config": "~3.0|^4.4",
+        "symfony/console": "~3.0|^4.4",
+        "symfony/debug": "~3.0|^4.4",
+        "symfony/dependency-injection": "~3.0|^4.4",
+        "symfony/event-dispatcher": "~3.0|^4.4",
+        "symfony/filesystem": "~3.0|^4.4",
+        "symfony/finder": "~3.0|^4.4",
+        "symfony/process": "~3.0|^4.4",
+        "symfony/translation": "~3.0|^4.4",
+        "symfony/yaml": "~3.0|^4.4",
+        "twig/twig": "^1.38.2|^2.12.0",
         "webflo/drupal-finder": "^1.0",
-        "webmozart/path-util": "^2.3"
+        "webmozart/path-util": "^2.3",
+        "guzzlehttp/guzzle": "~6.1"
     },
     "minimum-stability": "dev",
     "prefer-stable": true,
@@ -60,6 +66,8 @@
         "files": [
             "src/functions.php"
         ],
-        "psr-4": {"Drupal\\Console\\Core\\": "src"}
+        "psr-4": {
+            "Drupal\\Console\\Core\\": "src"
+        }
     }
-}
+}
\ No newline at end of file
diff --git a/vendor/drupal/console-core/config/chain/develop-contribute.yml b/vendor/drupal/console-core/config/chain/develop-contribute.yml
index ae3070a7a3fef6ad9ada1861588697251f943aac..4e7bf7a5aeb6359867f870c323c3042828cf17b1 100644
--- a/vendor/drupal/console-core/config/chain/develop-contribute.yml
+++ b/vendor/drupal/console-core/config/chain/develop-contribute.yml
@@ -11,7 +11,7 @@ commands:
       bin: composer create-project {{repository}} {{drupal}} --prefer-dist --no-progress --no-interaction --no-install
   - command: exec
     arguments:
-      bin: composer require drupal/console-develop --dev --working-dir={{drupal}} --no-update
+      bin: composer require drupal/features drupal/console-develop --dev --working-dir={{drupal}} --no-update
   - command: exec
     arguments:
       bin: composer install --working-dir={{drupal}}
@@ -20,4 +20,7 @@ commands:
       bin: drupal site:install standard --root={{drupal}} --db-type="sqlite" --no-interaction
   - command: exec
     arguments:
-      bin: drupal develop:create:symlinks --code-directory={{code}} --root={{drupal}}
+      bin: drupal module:install --root={{drupal}} rest taxonomy locale migrate simpletest breakpoint node views features
+  - command: exec
+    arguments:
+      bin: drupal develop:create:symlinks --root={{drupal}} --code-directory={{code}}
diff --git a/vendor/drupal/console-core/config/config.yml b/vendor/drupal/console-core/config/config.yml
index 8c56fa1b47161e20f5406523e2ed3a2f4a50bbf6..94fcc77d34ac7d205df60f4f75808e8a85b4c950 100644
--- a/vendor/drupal/console-core/config/config.yml
+++ b/vendor/drupal/console-core/config/config.yml
@@ -1,4 +1,8 @@
 application:
+  statistics:
+    enabled: false
+    last-attempted: ~
+    times-attempted: 0
   language: 'en'
   autowire:
     commands:
@@ -17,11 +21,14 @@ application:
     defaults: ~
     mappings: ~
   languages:
+    ar: 'العَرَبِيَّة‎'
     en: 'English'
     es: 'Español'
     ca: 'Català'
+    fa-ir: 'فارسی'
     fr: 'Français'
     ko: '한국어'
+    he: 'בעברית'
     hi: 'हिन्दी'
     hu: 'Magyar'
     id: 'Bahasa Indonesia'
@@ -33,5 +40,7 @@ application:
     ru: 'pусский язык'
     tl: 'Tagalog'
     vn: 'Tiếng Việt'
+    ua: 'українська'
+    ur: 'اُردُو'
     zh-hans: '简体中文'
     zh-hant: '繁體中文'
diff --git a/vendor/drupal/console-core/config/site.mode.yml b/vendor/drupal/console-core/config/site.mode.yml
index dceecf436e7d2a2385181af6f42beb7254eadb00..7d04090b3af1582de6d4cf4f8bc75d5f928b7a7c 100644
--- a/vendor/drupal/console-core/config/site.mode.yml
+++ b/vendor/drupal/console-core/config/site.mode.yml
@@ -41,5 +41,5 @@ services:
       dev: true
       prod: false
     cache:
-      dev: true
+      dev: false
       prod: true
diff --git a/vendor/drupal/console-core/dist/chain/update-gitbook.yml b/vendor/drupal/console-core/dist/chain/update-gitbook.yml
index 9cdd4c2405875789ad26fae2118cb4cae5014aaa..c42185e481aec5b0e856d3cf2ba0d3726d62402d 100644
--- a/vendor/drupal/console-core/dist/chain/update-gitbook.yml
+++ b/vendor/drupal/console-core/dist/chain/update-gitbook.yml
@@ -1,5 +1,5 @@
 # How to use
-# update:gitbook --directory="/path/to/drupal-project/"
+# update:gitbook --directory="/path/to/drupal-console/gitbook-repository/"
 command:
   name: update:gitbook
   description: 'Update gitbook'
@@ -16,12 +16,16 @@ commands:
         - node
         - views
         - features
-{% set languages = ['en', 'es', 'hi', 'hu', 'pt_br', 'ro', 'vn', 'zh_hans'] %}
+  - command: 'develop:translation:sync'
+{% set languages = ['en', 'ca', 'es', 'hi', 'hu', 'ja', 'mr', 'pt-br', 'ro', 'ru', 'vn' , 'zh-hans'] %}
 {% for language in languages %}
   - command: settings:set
     arguments:
       name: language
       value: {{ language }}
+  - command: exec
+    arguments:
+        bin: 'rm -Rf {{ directory }}/{{ language }}/commands'
   - command: develop:doc:gitbook
     options:
       path: '{{ directory }}/{{ language }}'
@@ -29,4 +33,4 @@ commands:
   - command: settings:set
     arguments:
       name: language
-      value: en
+      value: en
\ No newline at end of file
diff --git a/vendor/drupal/console-core/services.yml b/vendor/drupal/console-core/services.yml
index 27bc47ff07797c72d7f17829928b7e49d6b4dc4c..e0e0011c08e9ae2d4b6757533684e0462a187c1a 100644
--- a/vendor/drupal/console-core/services.yml
+++ b/vendor/drupal/console-core/services.yml
@@ -105,6 +105,7 @@ services:
   # DrupalConsoleCore Generators
   console.init_generator:
     class: Drupal\Console\Core\Generator\InitGenerator
+    arguments: ['@console.configuration_manager']
     tags:
       - { name: drupal.generator }
   console.site_alias_generator:
diff --git a/vendor/drupal/console-core/src/Application.php b/vendor/drupal/console-core/src/Application.php
index 9ee20032dd839a63c6a3b1bef4717e2c41d36079..f1ace11d2680f751abd88e8021c1e5f8a3e52d2d 100644
--- a/vendor/drupal/console-core/src/Application.php
+++ b/vendor/drupal/console-core/src/Application.php
@@ -2,7 +2,9 @@
 
 namespace Drupal\Console\Core;
 
+use Drupal\Console\Core\EventSubscriber\SendStatisticsListener;
 use Drupal\Console\Core\EventSubscriber\RemoveMessagesListener;
+use Drupal\Console\Core\EventSubscriber\SaveStatisticsListener;
 use Drupal\Console\Core\EventSubscriber\ShowGenerateCountCodeLinesListener;
 use Drupal\Console\Core\Utils\TranslatorManagerInterface;
 use Symfony\Component\DependencyInjection\ContainerInterface;
@@ -20,6 +22,7 @@
 use Drupal\Console\Core\EventSubscriber\ShowGeneratedFilesListener;
 use Drupal\Console\Core\EventSubscriber\ShowGenerateInlineListener;
 use Drupal\Console\Core\EventSubscriber\CallCommandListener;
+use Drupal\Console\Core\EventSubscriber\MaintenanceModeListener;
 use Drupal\Console\Core\Utils\ConfigurationManager;
 use Drupal\Console\Core\Style\DrupalStyle;
 use Drupal\Console\Core\Utils\ChainDiscovery;
@@ -304,12 +307,36 @@ private function registerEvents()
                 )
             );
 
+            $dispatcher->addSubscriber(
+                new SaveStatisticsListener(
+                    $this->container->get('console.count_code_lines'),
+                    $this->container->get('console.configuration_manager'),
+                    $this->container->get('console.translator_manager')
+                )
+            );
+
+            $dispatcher->addSubscriber(
+                new SendStatisticsListener(
+                    $this->container->get('console.configuration_manager'),
+                    $this->container->get('console.translator_manager')
+                )
+            );
+
             $dispatcher->addSubscriber(
                 new RemoveMessagesListener(
                     $this->container->get('console.message_manager')
                 )
             );
 
+            if($this->container->has('state')) {
+                $dispatcher->addSubscriber(
+                    new MaintenanceModeListener(
+                        $this->container->get('console.translator_manager'),
+                        $this->container->get('state')
+                    )
+                );
+            }
+
             $this->setDispatcher($dispatcher);
             $this->eventRegistered = true;
         }
@@ -664,7 +691,7 @@ private function registerExtendCommands()
             ->loadExtendConfiguration();
     }
 
-    public function getData()
+    public function getData($filterNamespaces = null, $excludeNamespaces = [], $excludeChainCommands = false)
     {
         $singleCommands = [
             'about',
@@ -676,7 +703,8 @@ public function getData()
             'init',
             'list',
             'shell',
-            'server'
+            'server',
+            'snippet'
         ];
 
         $languages = $this->container->get('console.configuration_manager')
@@ -684,8 +712,11 @@ public function getData()
             ->get('application.languages');
 
         $data = [];
-        foreach ($singleCommands as $singleCommand) {
-            $data['commands']['misc'][] = $this->commandData($singleCommand);
+        // Exclude misc if it is inside the $excludeNamespaces array.
+        if (!in_array('misc', $excludeNamespaces)) {
+            foreach ($singleCommands as $singleCommand) {
+                $data['commands']['misc'][] = $this->commandData($singleCommand);
+            }
         }
 
         $namespaces = array_filter(
@@ -693,9 +724,18 @@ public function getData()
                 return (strpos($item, ':')<=0);
             }
         );
+
         sort($namespaces);
         array_unshift($namespaces, 'misc');
 
+        // Exclude specific namespaces
+        $namespaces = array_diff($namespaces, $excludeNamespaces);
+
+        // filter namespaces if available
+        if ($filterNamespaces) {
+            $namespaces = array_intersect($namespaces, $filterNamespaces);
+        }
+
         foreach ($namespaces as $namespace) {
             $commands = $this->all($namespace);
             usort(
@@ -705,6 +745,11 @@ public function getData()
             );
 
             foreach ($commands as $command) {
+                // Exclude command if is a chain command and was requested to exclude chain commands
+                if ($excludeChainCommands && $command instanceof ChainCustomCommand) {
+                    continue;
+                }
+
                 if (method_exists($command, 'getModule')) {
                     if ($command->getModule() == 'Console') {
                         $data['commands'][$namespace][] = $this->commandData(
@@ -719,6 +764,13 @@ public function getData()
             }
         }
 
+        // Remove namepsaces without commands
+        $namespaces = array_filter(
+            $namespaces, function ($namespace) use ($data) {
+                return count($data['commands'][$namespace]) > 0;
+            }
+        );
+
         $input = $this->getDefinition();
         $options = [];
         foreach ($input->getOptions() as $option) {
@@ -735,25 +787,32 @@ public function getData()
             ];
         }
 
-        $data['application'] = [
-            'namespaces' => $namespaces,
-            'options' => $options,
-            'arguments' => $arguments,
-            'languages' => $languages,
-            'messages' => [
-                'title' => $this->trans('application.gitbook.messages.title'),
-                'note' =>  $this->trans('application.gitbook.messages.note'),
-                'note_description' =>  $this->trans('application.gitbook.messages.note-description'),
-                'command' =>  $this->trans('application.gitbook.messages.command'),
-                'options' => $this->trans('application.gitbook.messages.options'),
-                'option' => $this->trans('application.gitbook.messages.option'),
-                'details' => $this->trans('application.gitbook.messages.details'),
-                'arguments' => $this->trans('application.gitbook.messages.arguments'),
-                'argument' => $this->trans('application.gitbook.messages.argument'),
-                'examples' => $this->trans('application.gitbook.messages.examples')
-            ],
-            'examples' => []
-        ];
+        //Add default Language
+        $language = $this->container->get('console.translator_manager')->getLanguage();
+        $data['default_language'] = $language;
+
+        // Exclude application if it is inside the $excludeNamespaces array.
+        if (!in_array('application', $excludeNamespaces)) {
+            $data['application'] = [
+                'namespaces' => $namespaces,
+                'options' => $options,
+                'arguments' => $arguments,
+                'languages' => $languages,
+                'messages' => [
+                    'title' => $this->trans('application.gitbook.messages.title'),
+                    'note' =>  $this->trans('application.gitbook.messages.note'),
+                    'note_description' =>  $this->trans('application.gitbook.messages.note-description'),
+                    'command' =>  $this->trans('application.gitbook.messages.command'),
+                    'options' => $this->trans('application.gitbook.messages.options'),
+                    'option' => $this->trans('application.gitbook.messages.option'),
+                    'details' => $this->trans('application.gitbook.messages.details'),
+                    'arguments' => $this->trans('application.gitbook.messages.arguments'),
+                    'argument' => $this->trans('application.gitbook.messages.argument'),
+                    'examples' => $this->trans('application.gitbook.messages.examples')
+                ],
+                'examples' => []
+            ];
+        }
 
         return $data;
     }
@@ -860,7 +919,8 @@ public function getContainer()
     /**
      * Add Drupal system messages.
      */
-    protected function addDrupalMessages($messageManager) {
+    protected function addDrupalMessages($messageManager)
+    {
         if (function_exists('drupal_get_messages')) {
             $drupalMessages = drupal_get_messages();
             foreach ($drupalMessages as $type => $messages) {
@@ -881,13 +941,14 @@ protected function addDrupalMessages($messageManager) {
      * @return string
      *   Name of the method
      */
-    protected function getMessageMethod($type) {
+    protected function getMessageMethod($type)
+    {
         $methodName = 'info';
         switch ($type) {
-            case 'error':
-            case 'warning':
-                $methodName = $type;
-                break;
+        case 'error':
+        case 'warning':
+            $methodName = $type;
+            break;
         }
 
         return $methodName;
diff --git a/vendor/drupal/console-core/src/Command/Chain/ChainCustomCommand.php b/vendor/drupal/console-core/src/Command/Chain/ChainCustomCommand.php
index 0306ff7a202d724443dfb659c32a94c7fa7be879..b14eefcfda5c0c0b4caff55d37afe0b4b54e3c95 100644
--- a/vendor/drupal/console-core/src/Command/Chain/ChainCustomCommand.php
+++ b/vendor/drupal/console-core/src/Command/Chain/ChainCustomCommand.php
@@ -62,7 +62,7 @@ public function __construct(
             'file',
             null,
             InputOption::VALUE_OPTIONAL,
-            null,
+            "File",
             $file
         );
     }
diff --git a/vendor/drupal/console-core/src/Command/Command.php b/vendor/drupal/console-core/src/Command/Command.php
index 509a68c4008c3798ac6b0f1b0976cf70a3ce3c8a..69f34e1c7beb861ded0df883eaa4af7aa12ae91a 100644
--- a/vendor/drupal/console-core/src/Command/Command.php
+++ b/vendor/drupal/console-core/src/Command/Command.php
@@ -33,6 +33,11 @@ abstract class Command extends BaseCommand
      */
     private $io;
 
+    /**
+     * @var bool
+     */
+    private $maintenance = false;
+
     /**
      * {@inheritdoc}
      */
@@ -49,6 +54,34 @@ public function getIo()
         return $this->io;
     }
 
+    /**
+     * Check maintenance mode.
+     *
+     * @return bool
+     */
+    public function isMaintenance()
+    {
+        return $this->maintenance;
+    }
+
+    /**
+     * Enable maintenance mode.
+     *
+     * @return $this
+     *   Command.
+     */
+    public function enableMaintenance()
+    {
+        $this->maintenance = true;
+        return $this;
+    }
+  
+    /**
+     * Create Exception
+     *
+     * @return void
+     * 
+     */ 
     public function createException($message) {
         $this->getIo()->error($message);
         exit(1);
diff --git a/vendor/drupal/console-core/src/Command/Generate/SiteAliasCommand.php b/vendor/drupal/console-core/src/Command/Generate/SiteAliasCommand.php
index 835afe165ca59de233927754396c190447f06306..d4a546e530c3301892043a18051860a1857c2b47 100644
--- a/vendor/drupal/console-core/src/Command/Generate/SiteAliasCommand.php
+++ b/vendor/drupal/console-core/src/Command/Generate/SiteAliasCommand.php
@@ -47,6 +47,7 @@ class SiteAliasCommand extends Command
     private $extraOptions = [
         'ssh' => [
             'none' => '',
+            'tty' => '-tt',
             'vagrant' => '-o PasswordAuthentication=no -i ~/.vagrant.d/insecure_private_key',
         ],
         'container' => [
@@ -131,6 +132,12 @@ protected function configure()
                 InputOption::VALUE_OPTIONAL,
                 $this->trans('commands.generate.site.alias.options.port')
             )
+            ->addOption(
+                'drupal-console-binary',
+                null,
+                InputOption::VALUE_OPTIONAL,
+                $this->trans('commands.generate.site.alias.options.drupal-console-binary')
+            )
             ->addOption(
                 'extra-options',
                 null,
@@ -232,6 +239,19 @@ protected function interact(
         }
 
         if ($type !== 'local') {
+            $drupalConsoleBinary = $input->getOption('drupal-console-binary');
+            if (!$drupalConsoleBinary) {
+
+                $drupalConsoleBinary = $this->getIo()->askEmpty(
+                    $this->trans(
+                        'commands.generate.site.alias.questions.drupal-console-binary'
+                    ),
+                    'drupal'
+                );
+
+                $input->setOption('drupal-console-binary', $drupalConsoleBinary);
+            }
+
             $extraOptions = $input->getOption('extra-options');
             if (!$extraOptions) {
                 $options = array_values($this->extraOptions[$type]);
@@ -308,6 +328,7 @@ protected function execute(
                 'environment' => $input->getOption('environment'),
                 'type' => $input->getOption('type'),
                 'extra_options' => $input->getOption('extra-options'),
+                'drupal_console_binary' => $input->getOption('drupal-console-binary'),
                 'root' => $input->getOption('composer-root'),
                 'uri' => $input->getOption('site-uri'),
                 'port' => $input->getOption('port'),
diff --git a/vendor/drupal/console-core/src/Command/InitCommand.php b/vendor/drupal/console-core/src/Command/InitCommand.php
index 9ecc6f916826b82d4c771d2559694cddbc379568..dafec64c1c0f02968f85fb7b6a3986d621d8c66a 100644
--- a/vendor/drupal/console-core/src/Command/InitCommand.php
+++ b/vendor/drupal/console-core/src/Command/InitCommand.php
@@ -56,7 +56,8 @@ class InitCommand extends Command
         'sites' => false,
         'learning' => false,
         'generate_inline' => false,
-        'generate_chain' => false
+        'generate_chain' => false,
+        'statistics' => true
     ];
 
     private $directories = [
@@ -192,6 +193,27 @@ protected function interact(InputInterface $input, OutputInterface $output)
             );
             $input->setOption('autocomplete', $autocomplete);
         }
+
+        $this->getIo()->commentBlock(
+            sprintf(
+                $this->trans('commands.init.messages.statistics'),
+                sprintf(
+                    '%sconfig.yml',
+                    $this->configurationManager->getConsoleDirectory()
+                )
+            )
+        );
+
+        $this->configParameters['statistics'] = $this->getIo()->confirm(
+            $this->trans('commands.init.questions.statistics'),
+            true
+        );
+
+        if ($this->configParameters['statistics']) {
+            $this->getIo()->commentBlock(
+                $this->trans('commands.init.messages.statistics-disable')
+            );
+        }
     }
 
     /**
@@ -269,13 +291,15 @@ protected function execute(InputInterface $input, OutputInterface $output)
             $process->stop();
         }
 
-        $this->generator->generate([
-          'user_home' => $this->configurationManager->getConsoleDirectory(),
-          'executable_name' => $executableName,
-          'override' => $override,
-          'destination' => $destination,
-          'config_parameters' => $this->configParameters,
-        ]);
+        $this->generator->generate(
+            [
+            'user_home' => $this->configurationManager->getConsoleDirectory(),
+            'executable_name' => $executableName,
+            'override' => $override,
+            'destination' => $destination,
+            'config_parameters' => $this->configParameters,
+            ]
+        );
 
         $this->getIo()->writeln($this->trans('application.messages.autocomplete'));
 
diff --git a/vendor/drupal/console-core/src/Command/Settings/SetCommand.php b/vendor/drupal/console-core/src/Command/Settings/SetCommand.php
index ce10b798640b1f20002b53cf8d0d84a8260f1fc2..5474527f42a2841ef4da4f450f164e3fdbe6ecf6 100644
--- a/vendor/drupal/console-core/src/Command/Settings/SetCommand.php
+++ b/vendor/drupal/console-core/src/Command/Settings/SetCommand.php
@@ -82,6 +82,18 @@ protected function execute(InputInterface $input, OutputInterface $output)
         $settingName = $input->getArgument('name');
         $settingValue = $input->getArgument('value');
 
+        // Reset the default values ​​of the statistics.
+        if ($settingName == 'statistics.enabled') {
+            $this->configurationManager->updateConfigGlobalParameter(
+                'statistics.last-attempted',
+                null
+            );
+            $this->configurationManager->updateConfigGlobalParameter(
+                'statistics.times-attempted',
+                0
+            );
+        }
+
         $userConfigFile = sprintf(
             '%s/.console/config.yml',
             $this->configurationManager->getHomeDirectory()
@@ -111,6 +123,8 @@ protected function execute(InputInterface $input, OutputInterface $output)
         }
 
         $parents = array_merge(['application'], explode(".", $settingName));
+        // Change the value type if it is boolean.
+        $settingValue = json_decode($settingValue) === null ? $settingValue : json_decode($settingValue);
 
         $this->nestedArray->setValue(
             $userConfigFileParsed,
@@ -163,6 +177,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
             return 1;
         }
 
+        $settingValue = is_bool($settingValue) ? $settingValue ? 'true' : 'false' : $settingValue;
         $this->getIo()->success(
             sprintf(
                 $this->trans('commands.settings.set.messages.success'),
diff --git a/vendor/drupal/console-core/src/Descriptor/TextDescriptor.php b/vendor/drupal/console-core/src/Descriptor/TextDescriptor.php
index 54f9808200f7a1425c4e07e5eed313e84639be88..e788eea0133fef58ad5af4a18162ff9f141c3abb 100644
--- a/vendor/drupal/console-core/src/Descriptor/TextDescriptor.php
+++ b/vendor/drupal/console-core/src/Descriptor/TextDescriptor.php
@@ -272,7 +272,8 @@ protected function describeApplication(Application $application, array $options
                 'init',
                 'list',
                 'shell',
-                'server'
+                'server',
+                'snippet'
             ];
 
             // add commands by namespace
diff --git a/vendor/drupal/console-core/src/EventSubscriber/MaintenanceModeListener.php b/vendor/drupal/console-core/src/EventSubscriber/MaintenanceModeListener.php
new file mode 100644
index 0000000000000000000000000000000000000000..bdb32f880d06bc8acdb5bc7bd6efa6fe78bfbaaa
--- /dev/null
+++ b/vendor/drupal/console-core/src/EventSubscriber/MaintenanceModeListener.php
@@ -0,0 +1,116 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Console\Core\EventSubscriber\MaintenanceModeListener.
+ */
+
+namespace Drupal\Console\Core\EventSubscriber;
+
+use Drupal\Core\State\StateInterface;
+use Drupal\Console\Core\Style\DrupalStyle;
+use Drupal\Console\Core\Utils\TranslatorManagerInterface;
+use Symfony\Component\Console\ConsoleEvents;
+use Symfony\Component\Console\Command\Command;
+use Symfony\Component\Console\Event\ConsoleEvent;
+use Symfony\Component\EventDispatcher\EventSubscriberInterface;
+
+/**
+ * Class MaintenanceModeListener
+ *
+ * @package Drupal\Console\Core\EventSubscriber
+ */
+class MaintenanceModeListener implements EventSubscriberInterface
+{
+    /**
+     * @var TranslatorManagerInterface
+     */
+    protected $translator;
+
+    /**
+     * @var StateInterface
+     */
+    protected $state;
+
+    /**
+     * MaintenanceModeListener constructor.
+     *
+     * @param TranslatorManagerInterface $translator
+     * @param StateInterface $state
+     */
+    public function __construct(
+        TranslatorManagerInterface $translator,
+        StateInterface $state
+    ) {
+        $this->translator = $translator;
+        $this->state = $state;
+    }
+
+    /**
+     * Enable maintenance mode.
+     *
+     * @param ConsoleEvent $event
+     */
+    public function enableMaintenanceMode(ConsoleEvent $event)
+    {
+        $this->switchMaintenanceMode($event, 'on');
+    }
+
+    /**
+     * Disable maintenance mode.
+     *
+     * @param ConsoleEvent $event
+     */
+    public function disableMaintenanceMode(ConsoleEvent $event)
+    {
+        $this->switchMaintenanceMode($event, 'off');
+    }
+
+    /**
+     * Switch maintenance mode.
+     *
+     * @param ConsoleEvent $event
+     * @param string $mode
+     */
+    public function switchMaintenanceMode(ConsoleEvent $event, $mode)
+    {
+        /* @var Command $command */
+        $command = $event->getCommand();
+
+        if ($command->isMaintenance()) {
+
+            /* @var DrupalStyle $io */
+            $io = new DrupalStyle($event->getInput(), $event->getOutput());
+            $stateName = 'system.maintenance_mode';
+            $modeMessage = null;
+
+            if ($mode == 'on') {
+                $this->state->set($stateName, true);
+                $modeMessage = $this->translator->trans('commands.site.maintenance.messages.maintenance-on');
+            }
+
+            if ($mode == 'off') {
+                $this->state->set($stateName, false);
+                $modeMessage = $this->translator->trans('commands.site.maintenance.messages.maintenance-off');
+            }
+
+            if ($modeMessage) {
+                $io->newLine();
+                $io->info($modeMessage, true);
+                $io->newLine();
+            }
+        }
+    }
+
+
+    /**
+     * @{@inheritdoc}
+     */
+    public static function getSubscribedEvents()
+    {
+        return [
+            ConsoleEvents::COMMAND => 'enableMaintenanceMode',
+            ConsoleEvents::TERMINATE => 'disableMaintenanceMode',
+        ];
+    }
+}
diff --git a/vendor/drupal/console-core/src/EventSubscriber/SaveStatisticsListener.php b/vendor/drupal/console-core/src/EventSubscriber/SaveStatisticsListener.php
new file mode 100644
index 0000000000000000000000000000000000000000..b8a651a5caab030b8bc88ad622f0c4747464e5b7
--- /dev/null
+++ b/vendor/drupal/console-core/src/EventSubscriber/SaveStatisticsListener.php
@@ -0,0 +1,127 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Console\Core\EventSubscriber\SaveStatisticsListener.
+ */
+
+namespace Drupal\Console\Core\EventSubscriber;
+
+use Drupal\Console\Core\Command\Chain\ChainCustomCommand;
+use Drupal\Console\Core\Utils\ConfigurationManager;
+use Drupal\Console\Core\Utils\CountCodeLines;
+use Drupal\Console\Core\Utils\TranslatorManagerInterface;
+use Symfony\Component\Console\Event\ConsoleTerminateEvent;
+use Symfony\Component\EventDispatcher\EventSubscriberInterface;
+use Symfony\Component\Console\ConsoleEvents;
+use Symfony\Component\Filesystem\Filesystem;
+
+/**
+ * Class SaveStatisticsListener
+ *
+ * @package Drupal\Console\Core\EventSubscriber
+ */
+class SaveStatisticsListener implements EventSubscriberInterface
+{
+
+    /**
+     * @var ShowGenerateChainListener
+     */
+    protected $countCodeLines;
+
+    /**
+     * @var ConfigurationManager
+     */
+    protected $configurationManager;
+
+    /**
+     * @var TranslatorManagerInterface
+     */
+    protected $translator;
+
+    /**
+     * FileSystem $fs
+     */
+    protected $fs;
+
+    /**
+     * SaveStatisticsListener constructor.
+     *
+     * @param CountCodeLines             $countCodeLines
+     * @param ConfigurationManager       $configurationManager
+     * @param TranslatorManagerInterface $translator
+     */
+    public function __construct(
+        CountCodeLines $countCodeLines,
+        ConfigurationManager $configurationManager,
+        TranslatorManagerInterface $translator
+    ) {
+        $this->countCodeLines = $countCodeLines;
+        $this->configurationManager = $configurationManager;
+        $this->translator = $translator;
+
+        $this->fs = new Filesystem();
+    }
+
+    /**
+     * @param ConsoleTerminateEvent $event
+     */
+    public function saveStatistics(ConsoleTerminateEvent $event)
+    {
+        if ($event->getExitCode() != 0) {
+            return;
+        }
+
+        $configGlobalAsArray = $this->configurationManager->getConfigGlobalAsArray();
+
+        //Validate if the config is defined.
+        if (is_null($configGlobalAsArray) || !isset($configGlobalAsArray['application']['statistics'])) {
+            return;
+        }
+
+        //Validate if the statistics is enabled.
+        if (!isset($configGlobalAsArray['application']['statistics']['enabled']) || !$configGlobalAsArray['application']['statistics']['enabled']) {
+            return;
+        }
+
+        //Check that the namespace starts with 'Drupal\Console'.
+        $class = new \ReflectionClass($event->getCommand());
+        if (strpos($class->getNamespaceName(), "Drupal\Console") !== 0) {
+            return;
+        }
+
+        //Validate if the command is not a custom chain command.
+        if ($event->getCommand() instanceof ChainCustomCommand) {
+            return;
+        }
+
+        $path =  $path = sprintf(
+            '%s/.console/stats/',
+            $this->configurationManager->getHomeDirectory()
+        );
+
+        $information = $event->getCommand()->getName() . ',' . $this->translator->getLanguage();
+
+        $countCodeLines = $this->countCodeLines->getCountCodeLines();
+        if ($countCodeLines > 0) {
+            $information = $information . ',' . $countCodeLines;
+        }
+
+        try{
+            $this->fs->appendToFile(
+                $path .  date('Y-m-d') . '.csv',
+                $information . PHP_EOL
+            );
+        }catch (\Exception $exception) {
+            return;
+        }
+    }
+
+    /**
+     * @{@inheritdoc}
+     */
+    public static function getSubscribedEvents()
+    {
+        return [ConsoleEvents::TERMINATE => 'saveStatistics'];
+    }
+}
diff --git a/vendor/drupal/console-core/src/EventSubscriber/SendStatisticsListener.php b/vendor/drupal/console-core/src/EventSubscriber/SendStatisticsListener.php
new file mode 100644
index 0000000000000000000000000000000000000000..ed66f1e5cb3adec38f30d65c5dcfafb93cbc5416
--- /dev/null
+++ b/vendor/drupal/console-core/src/EventSubscriber/SendStatisticsListener.php
@@ -0,0 +1,215 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Console\Core\EventSubscriber\SendStatisticsListener.
+ */
+
+namespace Drupal\Console\Core\EventSubscriber;
+
+use Drupal\Console\Core\Style\DrupalStyle;
+use Drupal\Console\Core\Utils\ConfigurationManager;
+use Drupal\Console\Core\Utils\TranslatorManagerInterface;
+use GuzzleHttp\Client;
+use Symfony\Component\Console\Event\ConsoleTerminateEvent;
+use Symfony\Component\EventDispatcher\EventSubscriberInterface;
+use Symfony\Component\Console\ConsoleEvents;
+use Symfony\Component\Filesystem\Filesystem;
+use Symfony\Component\Finder\Finder;
+
+/**
+ * Class SendStatisticsListener
+ *
+ * @package Drupal\Console\Core\EventSubscriber
+ */
+class SendStatisticsListener implements EventSubscriberInterface
+{
+
+    /**
+     * @var ConfigurationManager
+     */
+    protected $configurationManager;
+
+    /**
+     * FileSystem $fs
+     */
+    protected $fs;
+
+    /**
+     * @var TranslatorManagerInterface
+     */
+    protected $translator;
+
+    /**
+     * SaveStatisticsListener constructor.
+     *
+     * @param ConfigurationManager       $configurationManager
+     * @param TranslatorManagerInterface $translator
+     */
+    public function __construct(
+        ConfigurationManager $configurationManager,
+        TranslatorManagerInterface $translator
+    ) {
+        $this->configurationManager = $configurationManager;
+        $this->translator = $translator;
+        $this->fs = new Filesystem();
+    }
+
+    /**
+     * @param ConsoleTerminateEvent $event
+     */
+    public function calculateStatistics(ConsoleTerminateEvent $event)
+    {
+        if ($event->getExitCode() != 0) {
+            return;
+        }
+
+        $date = date('Y-m-d');
+        $configGlobalAsArray = $this->configurationManager->getConfigGlobalAsArray();
+
+        //Validate if the config is defined.
+        if (is_null($configGlobalAsArray) || !isset($configGlobalAsArray['application']['statistics'])) {
+            return;
+        }
+
+        //Validate if the statistics is enabled.
+        if (!isset($configGlobalAsArray['application']['statistics']['enabled']) || !$configGlobalAsArray['application']['statistics']['enabled']) {
+            return;
+        }
+
+        /* @var DrupalStyle $io */
+        $io = new DrupalStyle($event->getInput(), $event->getOutput());
+
+        //Validate if the times attempted is 10
+        if ($configGlobalAsArray['application']['statistics']['times-attempted'] >= 10) {
+            $io->error($this->translator->trans('application.errors.statistics-failed'));
+
+            $this->configurationManager->updateConfigGlobalParameter('statistics.enabled', false);
+            return;
+        }
+
+        //Validate if the last attempted was today
+        if ($configGlobalAsArray['application']['statistics']['last-attempted'] === $date) {
+            return;
+        }
+
+        $path = sprintf(
+            '%s/.console/stats',
+            $this->configurationManager->getHomeDirectory()
+        );
+
+        //Find all statistics with pending status from other days.
+        $finder = new Finder();
+        $finder
+            ->files()
+            ->name('*.csv')
+            ->notName($date.'.csv')
+            ->in($path);
+
+        //Validate if finder in not null
+        if ($finder->count() == 0) {
+            return;
+        }
+
+        $statisticsKeys = ['command', 'language', 'linesOfCode'];
+        $commands = [];
+        $languages = [];
+        $filePathToDelete = [];
+
+        foreach ($finder as $file) {
+            if (($handle = fopen($file->getPathname(), "r")) !== false) {
+                while (($content = fgetcsv($handle, 0, ',')) !== false) {
+
+                    /**
+                     * If the command doesn't have linesOfCode,
+                     * we add a null value at the end to combine with statistics keys.
+                     */
+                    if (count($content) === 2) {
+                        array_push($content, 0);
+                    }
+
+                    $commands = $this->getCommandStatisticsAsArray($commands, array_combine($statisticsKeys, $content));
+                    $languages = $this->getLanguageStatisticsAsArray($languages, array_combine($statisticsKeys, $content));
+                }
+
+                fclose($handle);
+
+                //Save file path to delete if the response is success.
+                array_push($filePathToDelete, $file->getPathname());
+            }
+        }
+
+        try {
+            if(!isset($configGlobalAsArray['application']['statistics']['url']) || empty($configGlobalAsArray['application']['statistics']['url'])){
+                $io->error($this->translator->trans('application.errors.statistics-url-failed'));
+                return;
+            }
+
+            $client = new Client();
+            $response = $client->post(
+                $configGlobalAsArray['application']['statistics']['url'],
+                [
+                    'headers' => [
+                        'Accept' => 'application/json',
+                    ],
+                    'json' => ['commands' => $commands, 'languages' => $languages]
+                ]
+            );
+
+            if ($response->getStatusCode() === 200) {
+                $this->fs->remove($filePathToDelete);
+
+                //Reset the count attempted to 0.
+                $this->configurationManager->updateConfigGlobalParameter('statistics.times-attempted', 0);
+            }
+        } catch (\Exception $exception) {
+            //Increase the count attempted in global config.
+            $countAttempted = $configGlobalAsArray['application']['statistics']['times-attempted'] + 1;
+            $this->configurationManager->updateConfigGlobalParameter('statistics.times-attempted', $countAttempted);
+        }
+
+        //Update last attempted in global config.
+        $this->configurationManager->updateConfigGlobalParameter('statistics.last-attempted', $date);
+    }
+
+    /**
+     * Build the statistics by command.
+     *
+     * @param  $commands
+     * @param  $content
+     * @return array
+     */
+    private function getCommandStatisticsAsArray($commands, $content)
+    {
+        //Check if in $commands with the $content['command'] key with the value 'executed' have value to sum.
+        $executed = $commands[$content['command']]['executed'] + 1;
+        $linesOfCode = $commands[$content['command']]['linesOfCode'] + $content['linesOfCode'];
+
+        $commands[$content['command']] = ["executed" => $executed, "linesOfCode" => $linesOfCode];
+
+        return $commands;
+    }
+
+    /**
+     * Update the languages by command.
+     *
+     * @param  $languages
+     * @param  $content
+     * @return array
+     */
+    private function getLanguageStatisticsAsArray($languages, $content)
+    {
+        //Check if in $commands with the $content['language'] key have value to sum.
+        $languages[$content['language']] = $languages[$content['language']] + 1;
+
+        return $languages;
+    }
+
+    /**
+     * @{@inheritdoc}
+     */
+    public static function getSubscribedEvents()
+    {
+        return [ConsoleEvents::TERMINATE => 'calculateStatistics'];
+    }
+}
diff --git a/vendor/drupal/console-core/src/Generator/InitGenerator.php b/vendor/drupal/console-core/src/Generator/InitGenerator.php
index be2dc666798ae1bf32e8a459b08cea13e7dc9d7b..9d603eec1554d160f9b29a00b1603ee5e003e83b 100644
--- a/vendor/drupal/console-core/src/Generator/InitGenerator.php
+++ b/vendor/drupal/console-core/src/Generator/InitGenerator.php
@@ -6,6 +6,8 @@
  */
 namespace Drupal\Console\Core\Generator;
 
+use Drupal\Console\Core\Utils\ConfigurationManager;
+
 /**
  * Class InitGenerator
  *
@@ -13,26 +15,33 @@
  */
 class InitGenerator extends Generator
 {
+
+    /**
+     * @var ConfigurationManager
+     */
+    protected $configurationManager;
+
+    /**
+     * InitGenerator constructor.
+     *
+     * @param ConfigurationManager $configurationManager
+     */
+    public function __construct(ConfigurationManager $configurationManager)
+    {
+        $this->configurationManager = $configurationManager;
+    }
+
     /**
      * {@inheritdoc}
      */
-    public function generate(array $parameters) {
+    public function generate(array $parameters)
+    {
         $userHome = $parameters['user_home'];
         $executableName = $parameters['executable_name'];
         $override = $parameters['override'];
         $destination = $parameters['destination'];
         $configParameters = $parameters['config_parameters'];
 
-        $configParameters = array_map(
-            function ($item) {
-                if (is_bool($item)) {
-                    return $item ? 'true' : 'false';
-                }
-                return $item;
-            },
-            $configParameters
-        );
-
         $configFile = $userHome . 'config.yml';
         if ($destination) {
             $configFile = $destination . 'config.yml';
@@ -45,12 +54,38 @@ function ($item) {
             );
         }
 
+        // If configFile is an override, we only change the value of statistics in the global config.
+        $consoleDestination = $userHome . 'config.yml';
+        if ($configFile !== $consoleDestination) {
+            if ($configParameters['statistics'] || file_exists($consoleDestination)) {
+                $configParameters['statistics'] = $configParameters['statistics'] ? 'true' : 'false';
+                $this->renderFile(
+                    'core/init/statistics.config.yml.twig',
+                    $consoleDestination,
+                    $configParameters
+                );
+            }
+
+            unset($configParameters['statistics']);
+        }
+
+        $configParameters = array_map(
+            function ($item) {
+                if (is_bool($item)) {
+                    return $item ? 'true' : 'false';
+                }
+                return $item;
+            },
+            $configParameters
+        );
+
         $this->renderFile(
             'core/init/config.yml.twig',
             $configFile,
             $configParameters
         );
 
+
         if ($executableName) {
             $parameters = [
                 'executable' => $executableName,
diff --git a/vendor/drupal/console-core/src/Utils/ConfigurationManager.php b/vendor/drupal/console-core/src/Utils/ConfigurationManager.php
index da7f775a9c83e11b221986ca976b1f4a93f2a6e5..1c5208199c4057e8f9bf6b70a625f35756183d46 100644
--- a/vendor/drupal/console-core/src/Utils/ConfigurationManager.php
+++ b/vendor/drupal/console-core/src/Utils/ConfigurationManager.php
@@ -2,6 +2,9 @@
 
 namespace Drupal\Console\Core\Utils;
 
+use Symfony\Component\Filesystem\Filesystem;
+use Symfony\Component\Yaml\Dumper;
+use Symfony\Component\Yaml\Parser;
 use Symfony\Component\Yaml\Yaml;
 use Symfony\Component\Console\Input\ArgvInput;
 use Symfony\Component\Finder\Finder;
@@ -118,8 +121,7 @@ public function readTarget($target)
             $site = $exploded[0];
             $environment = $exploded[1];
         }
-
-        $sites = $this->getSites();
+        $sites = $this->getSites($site);
         if (!array_key_exists($site, $sites)) {
             return [];
         }
@@ -359,7 +361,7 @@ private function appendExtraConfiguration($type)
 
     public function loadExtendConfiguration()
     {
-        $directory = $this->getConsoleDirectory() . '/extend/';
+        $directory = $this->getConsoleDirectory() . 'extend/';
         if (!is_dir($directory)) {
             return null;
         }
@@ -387,9 +389,11 @@ private function importConfigurationFromFile($configFile)
     }
 
     /**
+     * @param string $target
+     *
      * @return array
      */
-    public function getSites()
+    public function getSites($target = "*")
     {
         if ($this->sites) {
             return $this->sites;
@@ -403,7 +407,7 @@ public function getSites()
 
         $finder = new Finder();
         $finder->in($sitesDirectories);
-        $finder->name("*.yml");
+        $finder->name($target.".yml");
 
         foreach ($finder as $site) {
             $siteName = $site->getBasename('.yml');
@@ -419,7 +423,11 @@ public function getSites()
 
             foreach ($environments as $environment => $config) {
                 if (!array_key_exists('type', $config)) {
-                    throw new \UnexpectedValueException("The 'type' parameter is required in sites configuration.");
+                    throw new \UnexpectedValueException(
+                        sprintf(
+                            "The 'type' parameter is required in sites configuration:\n %s.", $site->getPathname()
+                        )
+                    );
                 }
                 if ($config['type'] !== 'local') {
                     if (array_key_exists('host', $config)) {
@@ -439,6 +447,80 @@ public function getSites()
         return $this->sites;
     }
 
+    /**
+     * Get config global as array.
+     *
+     * @return array
+     */
+    public function getConfigGlobalAsArray()
+    {
+        $filePath = sprintf(
+            '%s/.console/config.yml',
+            $this->getHomeDirectory()
+        );
+
+        $fs = new Filesystem();
+
+        if (!$fs->exists($filePath)) {
+            return null;
+        }
+
+        $yaml = new Parser();
+        $globalConfig = $yaml->parse(file_get_contents($filePath), true);
+
+        return $globalConfig;
+    }
+
+    /**
+     * Update parameter in global config.
+     *
+     * @param  $configName
+     * @param  $value
+     * @return int
+     */
+    public function updateConfigGlobalParameter($configName, $value)
+    {
+        $parser = new Parser();
+        $dumper = new Dumper();
+
+        $userConfigFile = sprintf(
+            '%s/.console/config.yml',
+            $this->getHomeDirectory()
+        );
+
+        if (!file_exists($userConfigFile)) {
+            return 1;
+        }
+
+        try {
+            $userConfigFileParsed = $parser->parse(
+                file_get_contents($userConfigFile)
+            );
+        } catch (\Exception $e) {
+        }
+
+        $parents = array_merge(['application'], explode('.', $configName));
+
+        $nestedArray = new NestedArray();
+
+        $nestedArray->setValue(
+            $userConfigFileParsed,
+            $parents,
+            $value,
+            true
+        );
+
+        try {
+            $userConfigFileDump = $dumper->dump($userConfigFileParsed, 10);
+        } catch (\Exception $e) {
+        }
+
+        try {
+            file_put_contents($userConfigFile, $userConfigFileDump);
+        } catch (\Exception $e) {
+        }
+    }
+
     /**
      * @return array
      */
diff --git a/vendor/drupal/console-core/src/Utils/DrupalFinder.php b/vendor/drupal/console-core/src/Utils/DrupalFinder.php
index 2aa7af27c8a419f352613d4c06f67702bd8907f5..afd40c75498555445826d8e5712c3f4e44dee795 100644
--- a/vendor/drupal/console-core/src/Utils/DrupalFinder.php
+++ b/vendor/drupal/console-core/src/Utils/DrupalFinder.php
@@ -78,6 +78,12 @@ protected function defineConstants($vendorDir)
                 "/{$vendorDir}/drupal/console-%s/translations/"
             );
         }
+      if (!defined("DRUPAL_CONSOLE_LANGUAGE_INSTALLERS")) {
+        define(
+          "DRUPAL_CONSOLE_LANGUAGE_INSTALLERS",
+          "/console/language/console-%s/translations/"
+        );
+      }
 
         if (!defined("DRUPAL_CONSOLE_LIBRARY")) {
             define(
diff --git a/vendor/drupal/console-core/src/Utils/TranslatorManager.php b/vendor/drupal/console-core/src/Utils/TranslatorManager.php
index 60f2b86ed7c0aa5a103040f134f90a51538d2dcf..444f666a9817930070c342671634926948dac14d 100644
--- a/vendor/drupal/console-core/src/Utils/TranslatorManager.php
+++ b/vendor/drupal/console-core/src/Utils/TranslatorManager.php
@@ -7,6 +7,9 @@
 
 namespace Drupal\Console\Core\Utils;
 
+use Drupal\Console\Core\Style\DrupalStyle;
+use Symfony\Component\Console\Input\ArrayInput;
+use Symfony\Component\Console\Output\ConsoleOutput;
 use Symfony\Component\Translation\Translator;
 use Symfony\Component\Translation\Loader\YamlFileLoader;
 use Symfony\Component\Translation\Loader\ArrayLoader;
@@ -47,6 +50,11 @@ class TranslatorManager implements TranslatorManagerInterface
      */
     protected $coreLanguageRoot;
 
+    /**
+     * @var DrupalStyle
+     */
+    private $io;
+
     /**
      * Translator constructor.
      */
@@ -54,6 +62,10 @@ public function __construct()
     {
         $this->parser = new Parser();
         $this->filesystem = new Filesystem();
+
+        $output = new ConsoleOutput();
+        $input = new ArrayInput([]);
+        $this->io = new DrupalStyle($input, $output);
     }
 
     /**
@@ -91,14 +103,40 @@ private function buildCoreLanguageDirectory(
         $language,
         $directoryRoot
     ) {
+        $output = new ConsoleOutput();
+        $input = new ArrayInput([]);
+        $io = new DrupalStyle($input, $output);
+        
         $coreLanguageDirectory =
             $directoryRoot .
             sprintf(
                 DRUPAL_CONSOLE_LANGUAGE,
                 $language
             );
+        $installersLanguageDirectory =
+          $directoryRoot .
+          sprintf(
+            DRUPAL_CONSOLE_LANGUAGE_INSTALLERS,
+            $language
+          );
+
+        $languageDirectory = null;
+        foreach ([$coreLanguageDirectory, $installersLanguageDirectory] as $candidate) {
+            if (is_dir($candidate)) {
+              $languageDirectory = $candidate;
+            }
+        }
 
-        if (!is_dir($coreLanguageDirectory)) {
+        if (!isset($languageDirectory)) {
+            if ($language == 'en') {
+              throw new \Exception('No languages found. Make sure you have installed a console language package in a supported directory');
+            }else{
+                $io->warning(
+                    sprintf(
+                        'Language not available please execute this command in order to get the language locally using composer, run composer require drupal/console-'.$language.''
+                    )
+                );
+            }
             return $this->buildCoreLanguageDirectory('en', $directoryRoot);
         }
 
@@ -106,7 +144,7 @@ private function buildCoreLanguageDirectory(
             $this->coreLanguageRoot = $directoryRoot;
         }
 
-        return [$language, $coreLanguageDirectory];
+        return [$language, $languageDirectory];
     }
 
     /**
@@ -164,7 +202,7 @@ public function loadResource($language, $directoryRoot)
                 try {
                     $this->loadTranslationByFile($resource, 'application');
                 } catch (ParseException $e) {
-                    echo 'application.yml'.' '.$e->getMessage();
+                    $this->io->error('application.yml'.' '.$e->getMessage());
                 }
 
                 continue;
@@ -173,7 +211,7 @@ public function loadResource($language, $directoryRoot)
             try {
                 $this->loadTranslationByFile($resource, $key);
             } catch (ParseException $e) {
-                echo $key.'.yml '.$e->getMessage();
+                $this->io->error($key.'.yml '.$e->getMessage());
             }
         }
 
diff --git a/vendor/drupal/console-core/src/Utils/TwigRenderer.php b/vendor/drupal/console-core/src/Utils/TwigRenderer.php
index 90bb8d01e4d067a218bdb699cc13d792c5a259f0..e2fd19d482c36500608a61ad00d057ac1be86328 100644
--- a/vendor/drupal/console-core/src/Utils/TwigRenderer.php
+++ b/vendor/drupal/console-core/src/Utils/TwigRenderer.php
@@ -103,6 +103,7 @@ public function render($template, $parameters = [])
             $this->engine->addFunction($this->getArgumentsFromRoute());
             $this->engine->addFunction($this->getServicesClassInitialization());
             $this->engine->addFunction($this->getServicesClassInjection());
+            $this->engine->addFunction($this->getServicesClassInjectionNoOverride());
             $this->engine->addFunction($this->getTagsAsArray());
             $this->engine->addFunction($this->getTranslationAsYamlComment());
             $this->engine->addFilter($this->createMachineName());
@@ -210,6 +211,25 @@ public function getServicesClassInjection()
         return $returnValue;
     }
 
+    /**
+     * @return \Twig_SimpleFunction
+     */
+    public function getServicesClassInjectionNoOverride()
+    {
+        $returnValue = new \Twig_SimpleFunction(
+            'serviceClassInjectionNoOverride', function ($services) {
+                $returnValues = [];
+                foreach ($services as $service) {
+                    $returnValues[] = sprintf('    $instance->%s = $container->get(\'%s\');', $service['camel_case_name'], $service['name']);
+                }
+
+                return implode(PHP_EOL, $returnValues);
+            }
+        );
+
+        return $returnValue;
+    }
+
     /**
      * @return \Twig_SimpleFunction
      */
diff --git a/vendor/drupal/console-core/templates/core/init/config.yml.twig b/vendor/drupal/console-core/templates/core/init/config.yml.twig
index 19fe6fc41a806a1656d59c807578469d04f88755..f2ef99f2b04da7e096f897cd5e8520063f4f4281 100644
--- a/vendor/drupal/console-core/templates/core/init/config.yml.twig
+++ b/vendor/drupal/console-core/templates/core/init/config.yml.twig
@@ -1,5 +1,12 @@
 application:
   environment: 'prod'
+{% if statistics is defined %}
+  statistics:
+    enabled: {{statistics}}
+    url: 'https://drupalconsole.com/statistics?_format=json'
+    last-attempted: ~
+    times-attempted: 0
+{% endif %}
   language: '{{language}}'
 #  editor: 'vim'
   temp: '{{temp}}'
diff --git a/vendor/drupal/console-core/templates/core/init/statistics.config.yml.twig b/vendor/drupal/console-core/templates/core/init/statistics.config.yml.twig
new file mode 100644
index 0000000000000000000000000000000000000000..bf639d1adfb2f32d385a1b9a4b674fbbf4d2dd9a
--- /dev/null
+++ b/vendor/drupal/console-core/templates/core/init/statistics.config.yml.twig
@@ -0,0 +1,6 @@
+application:
+  statistics:
+    enabled: {{statistics}}
+    url: 'https://drupalconsole.com/statistics?_format=json'
+    last-attempted: ~
+    times-attempted: 0
diff --git a/vendor/drupal/console-core/templates/core/sites/alias.yml.twig b/vendor/drupal/console-core/templates/core/sites/alias.yml.twig
index b17302b89045de38d727694c49718a3a294ee434..5ee08eefef8cb72c7678411e093cf6afac64549c 100644
--- a/vendor/drupal/console-core/templates/core/sites/alias.yml.twig
+++ b/vendor/drupal/console-core/templates/core/sites/alias.yml.twig
@@ -10,9 +10,14 @@
 {% if user %}
   user: {{ user }}
 {% endif %}
-{% if uri %}
+{% if uri or drupal_console_binary %}
   options:
+{% if uri %}
     uri: {{ uri }}
+{% endif %}
+{% if drupal_console_binary %}
+    drupal-console-binary: {{ drupal_console_binary }}
+{% endif %}
 {% else %}
 #  options:
 {% endif %}
diff --git a/vendor/drupal/console-en/README.md b/vendor/drupal/console-en/README.md
index 4e0ddb433dca7b7ea574e4d1bba2b51a757e343b..24040ce65b9104a32c14ab2c75e221ccc63791c9 100644
--- a/vendor/drupal/console-en/README.md
+++ b/vendor/drupal/console-en/README.md
@@ -17,7 +17,8 @@ $ composer require drupal/console:~1.0 --prefer-dist --optimize-autoloader
 
 ### Install Drupal Console launcher
 
-Drupal Console launcher was created to avoid conflicts between major and minor releases. Drupal Console binary commands are available to every Drupal 8 instance on the machine.
+In order to avoid conflicts between Drupal release and have a Drupal Console version between major and minor releases in Drupal,  a Drupal Console launcher was created. In order to facilitate to load the Drupal Console commands available to each
+Drupal 8 website,
  
 To install Drupal Console launcher globally follow the instruction below. 
 
@@ -32,7 +33,7 @@ $ chmod +x /usr/local/bin/drupal
 
 ### Contribute
 
-Follow these steps to contribute to the current translation:
+If you want to contribute to this translation, you need to follow this steps to setup your environment.
 
 - [Project requirements](https://docs.drupalconsole.com/en/contributing/project-requirements.html)
 - [Getting the project](https://docs.drupalconsole.com/en/contributing/getting-the-project.html)
diff --git a/vendor/drupal/console-en/composer.json b/vendor/drupal/console-en/composer.json
index 05abf44884fc146d9bbb1d4a0652412ae6b6141b..e2fb93d0e98fc382d5063bb48cfc261f2d1e8d73 100644
--- a/vendor/drupal/console-en/composer.json
+++ b/vendor/drupal/console-en/composer.json
@@ -3,7 +3,6 @@
     "description": "Drupal Console English Language",
     "keywords": ["Drupal", "Console", "Development", "Symfony"],
     "homepage": "http://drupalconsole.com/",
-    "type": "drupal-console-language",
     "license": "GPL-2.0-or-later",
     "authors": [
         {
diff --git a/vendor/drupal/console-en/translations/application.yml b/vendor/drupal/console-en/translations/application.yml
index cf197981131ce3b32716eb6989baf3891615a134..5b05068c006f8bcbfd3c8825354789fa4e748b24 100644
--- a/vendor/drupal/console-en/translations/application.yml
+++ b/vendor/drupal/console-en/translations/application.yml
@@ -29,7 +29,7 @@ messages:
     files:
         generated: 'Generated or updated files'
         copied: 'Copied files'
-    lines-code: 'Generated lines: "%s"'
+    lines-code: 'Generated lines: %s'
     path: 'Generation path'
     learning:
         route: "In order to to create pages it is necessary to define routes for them.\nA route maps a URL path to a controller. It defines what function\nor method will be called when a URL is accessed.\nIf the user accesses http://drupal8.dev/{{ route.path }}, the routing\nsystem will look for a route with that path. In this case it will find a\nmatch, and execute the _controller callback. In this case the callback is\ndefined as a classname\n(\"\\Drupal\\{{ module }}\\Controller\\{{ class_name }}\")\nand a method (\"{{ route.method }}\")."
@@ -43,7 +43,7 @@ messages:
                 <info>source "$HOME/.console/console.rc" 2>/dev/null</info>
 
                 Fish: Create a symbolic link
-                <info>ln -s ~/.console/drupal.fish ~/.config/fish/completions/drupal.fish</info>
+                <info>mkdir -p ~/.config/fish/completions/ && ln -s ~/.console/drupal.fish ~/.config/fish/completions/drupal.fish</info>
     version: '<info>"%s"</info> version <comment>"%s"</comment>'
     disable:
       command:
@@ -53,6 +53,16 @@ errors:
     invalid-command: 'Command "%s", is not a valid command name.'
     renamed-command: 'Command "%s" was renamed, use "%s" instead.'
     drush-command: 'Command "%s" is a Drush command (deprecated). Drupal Console equivalent "%s" was executed instead.'
+    statistics-failed: |
+      The Drupal console failed to send statistics. After 10 attempts, this feature was disabled.
+      If you want to enable it again, use the following command:
+
+      <info>drupal settings:set statistics.enabled true</info>
+    statistics-url-failed: |
+      The Drupal console failed to send statistics.
+      You must configure it in the global config.yml, use the following command and choose your preference:
+
+      <info>drupal init</info>
 site:
     messages:
         path: 'Site path'
diff --git a/vendor/drupal/console-en/translations/common.yml b/vendor/drupal/console-en/translations/common.yml
index abc9c4c1c698fb6b6beed2232d1fbc7ffdcbe8b8..1f873fcccb083ff6f1069ff6dcbefb811fce9183 100644
--- a/vendor/drupal/console-en/translations/common.yml
+++ b/vendor/drupal/console-en/translations/common.yml
@@ -2,15 +2,17 @@ options:
     class: 'Class name'
     events: 'Load events from the container'
     module: 'The Module name.'
-    extension: 'The extension name.'
-    extension-type: 'The extension type.'
+    extension: 'The name of the Extension (modules, profiles or themes name).'
+    extension-type: 'The type of the Extension (can be module, profile or theme).'
     services: 'Load services from the container.'
     tags: 'Set service tags from the container.'
     inputs: 'Create inputs in a form.'
     permissions: 'Create permissions.'
+    theme: 'The Theme name'
 questions:
     class: 'Enter the Class name'
     module: 'Enter the module name'
+    theme: 'Enter the theme name'
     extension: 'Enter the extension name'
     extension-type: 'Enter the extension type'
     confirm: 'Do you want proceed with the operation?'
@@ -55,3 +57,4 @@ messages:
     move-phar: 'Accessing console from anywhere on your system'
     quick-start: 'Download, install and serve Drupal 8'
     available-field-types: 'Available types: <comment>%s</comment>'
+    theme: 'The %s theme is not instaled'
diff --git a/vendor/drupal/console-en/translations/config.delete.yml b/vendor/drupal/console-en/translations/config.delete.yml
index 08e4e37749f17b3f45e0bffaa2c486a886018865..b4c6f8d5164b3f5c36954dafad1a89f1c2aa1dfa 100644
--- a/vendor/drupal/console-en/translations/config.delete.yml
+++ b/vendor/drupal/console-en/translations/config.delete.yml
@@ -17,4 +17,3 @@ questions:
 examples:
     - description: 'Provide a config type and a config name'
       execution: drupal config:delete active all
-
diff --git a/vendor/drupal/console-en/translations/config.diff.yml b/vendor/drupal/console-en/translations/config.diff.yml
index 7b3b81ff7c8e0cc00d078efd53978b2966d4d545..d74fe914bb77ea1edf582aa357d245db18f2413c 100644
--- a/vendor/drupal/console-en/translations/config.diff.yml
+++ b/vendor/drupal/console-en/translations/config.diff.yml
@@ -15,4 +15,3 @@ messages:
 examples:
     - description: 'Provide a config directory'
       execution: drupal config:diff ../config/path
-
diff --git a/vendor/drupal/console-en/translations/config.edit.yml b/vendor/drupal/console-en/translations/config.edit.yml
index 282e4f27881fb1edc038654a8fba2c2c92370d1d..a29498bee6744888ad2d9d2919cfed85f2d8a02a 100644
--- a/vendor/drupal/console-en/translations/config.edit.yml
+++ b/vendor/drupal/console-en/translations/config.edit.yml
@@ -12,4 +12,3 @@ examples:
       execution: 'drupal config:edit system.cron'
     - description: 'Edit system cron configurations with "gedit".'
       execution: 'drupal config:edit system.cron gedit'
-
diff --git a/vendor/drupal/console-en/translations/config.export.content.type.yml b/vendor/drupal/console-en/translations/config.export.content.type.yml
index 488f2f961d5a94e9264db8735923ae1b26308039..6eb4e93544f46479b770c1118d3bed0ff740a1d4 100644
--- a/vendor/drupal/console-en/translations/config.export.content.type.yml
+++ b/vendor/drupal/console-en/translations/config.export.content.type.yml
@@ -3,21 +3,27 @@ arguments:
     content-type: 'Content Type to be exported'
 questions:
     content-type: 'Content Type to be exported'
+    remove-uuid: 'Content Type to be exported without uuid key.'
     optional-config: 'Export content type in module as an optional configuration'
+    all: 'All content types'
+    remove-config-hash: 'Content type to be exported without the default site hash key.'
+    include-module-dependencies: 'Include content type module dependencies in module info YAML file'
 messages:
     content-type-exported: 'Exporting content type'
 options:
     optional-config: 'Export content type as an optional YAML configuration in your module'
     remove-uuid: 'If set, the configuration will be exported without uuid key.'
     remove-config-hash: 'If set, the configuration will be exported without the default site hash key.'
+    include-module-dependencies: 'Include content type module dependencies in module info YAML file'
 examples:
-    - description: 'Provide a content type  and module name'
+    - description: 'Provide a content type and module name.'
       execution: |
         drupal config:export:content:type page \
           --module="demo"
-    - description: 'If you want export content type provide the optional config'
+    - description: 'Export content type as an optional config for the provided module.'
       execution: |
         drupal config:export:content:type page \
           --module="demo" \
-          --optional-config 
-
+          --optional-config \
+          --remove-uuid \
+          --remove-config-hash
diff --git a/vendor/drupal/console-en/translations/config.export.entity.yml b/vendor/drupal/console-en/translations/config.export.entity.yml
new file mode 100644
index 0000000000000000000000000000000000000000..612c4d7578a62236a91fd30937f3741ec9a8d4f6
--- /dev/null
+++ b/vendor/drupal/console-en/translations/config.export.entity.yml
@@ -0,0 +1,31 @@
+description: 'Export a specific config entity and their fields.'
+arguments:
+    entity-type: 'An entity type (node_type, taxonomy_vocabulary, paragraphs_type) to be exported'
+    bundle: 'A bundle to be exported'
+questions:
+    all: 'All'
+    entity-type: 'Select entity type'
+    bundle: 'A bundle to be exported'
+    remove-uuid: 'The bundle to be exported without uuid key.'
+    optional-config: 'Export the bundle in the module as an optional configuration'
+    remove-config-hash: 'The bundle to be exported without the default site hash key.'
+    include-module-dependencies: 'Include bundle module dependencies in module info YAML file'
+messages:
+    bundle-exported: 'Exporting bundle %s'
+options:
+    optional-config: 'Export bundle as an optional YAML configuration in your module'
+    remove-uuid: 'If set, the configuration will be exported without uuid key.'
+    remove-config-hash: 'If set, the configuration will be exported without the default site hash key.'
+    include-module-dependencies: 'Include bundle module dependencies in module info YAML file'
+examples:
+    - description: 'Provide an entity type, a bundle and a module name'
+      execution: |
+        drupal config:export:entity node_type page \
+          --module="demo"
+    - description: 'If you want export a bundle as an optional config'
+      execution: |
+        drupal config:export:entity node_type page \
+          --module="demo" \
+          --optional-config \
+          --remove-uuid \
+          --remove-config-hash
diff --git a/vendor/drupal/console-en/translations/config.export.single.yml b/vendor/drupal/console-en/translations/config.export.single.yml
index 102cffe072fbd82b764b1873b02b2fbd02b2a1e5..5a5668d37e4722e74d6543657b99831b2b40889c 100644
--- a/vendor/drupal/console-en/translations/config.export.single.yml
+++ b/vendor/drupal/console-en/translations/config.export.single.yml
@@ -1,7 +1,6 @@
 description: 'Export a single configuration or a list of configurations as yml file(s).'
-arguments:
-    name: 'Configuration name.'
 options:
+    name: 'Configuration name.'
     include-dependencies: 'Export dependencies of the configuration as well.'
     simple-configuration: 'Simple configuration'
     optional: 'Export config as an optional YAML configuration in your module'
@@ -20,11 +19,11 @@ messages:
     invalid-config-name: 'Invalid config name, please select one of the list'
     config-exported: 'Configuration(s) exported successfully'
 examples:
-    - description: 'Provide config settings name to be exported'
+    - description: 'Provide config settings name to be exported.'
       execution: |
         drupal config:export:single \
           --name=config.settings.name
-    - description: 'if uuid and/or config hashes will be removed.'
+    - description: 'Export with uuid and config hashes removed.'
       execution: |
         drupal config:export:single \
           --name=config.settings.name \
diff --git a/vendor/drupal/console-en/translations/config.export.view.yml b/vendor/drupal/console-en/translations/config.export.view.yml
index ede70183372ae904d6742bfc516f18967130d829..c4574cbe7d2285c14232b583eee6fe48133405b1 100644
--- a/vendor/drupal/console-en/translations/config.export.view.yml
+++ b/vendor/drupal/console-en/translations/config.export.view.yml
@@ -1,23 +1,35 @@
-description: 'Export a view in YAML format inside a provided module to reuse in other website.'
+description: 'Export a view in YAML format inside a provided module to reuse in another website.'
 messages:
-    view_exported: 'View exported sucessfully'
+    view-exported: 'View exported sucessfully'
     depencies-included: 'The following module dependencies were included at "%s"'
+    wrong-view: 'The view "%s" does not exist'
 questions:
     view: 'View to be exported'
     optional-config: 'Export view in module as an optional configuration'
     include-module-dependencies: 'Include view module dependencies in module info YAML file'
+    remove-uuid: 'The view to be exported without uuid key.'
+    remove-config-hash: 'The view to be exported without the default site hash key.'
 arguments:
     view-id: 'View ID'
 options:
     optional-config: 'Export view as an optional YAML configuration in your module'
-    include-module-dependencies: 'Include module dependencies in module info YAML file'
+    include-module-dependencies: 'Include view module dependencies in module info YAML file'
+    remove-uuid: 'If set, the configuration will be exported without uuid key.'
+    remove-config-hash: 'If set, the configuration will be exported without the default site hash key.'
 examples:
-    - description: 'Provide a view id'
+    - description: 'Perform a simple export.'
       execution: drupal config:export:view viewid
-    - description: 'You can provide the interactive values like parameter.'
+    - description: 'Export as optional config for the provided module.'
+      execution: |
+        drupal config:export:view viewid \
+          --module="modulename" \
+          --optional-config \
+          --include-module-dependencies \
+          --remove-uuid \
+          --remove-config-hash
+    - description: "Export as config for the provided module, updating the module's info.yml with any module dependencies from the view."
       execution: |
         drupal config:export:view viewid \
           --module="modulename" \
           --optional-config \
           --include-module-dependencies
-
diff --git a/vendor/drupal/console-en/translations/config.export.yml b/vendor/drupal/console-en/translations/config.export.yml
index 66f83289da533949fdde93b7984020c6e4b0aa42..b7cdda30e8059d41d5b3380ce2989b13c9810827 100644
--- a/vendor/drupal/console-en/translations/config.export.yml
+++ b/vendor/drupal/console-en/translations/config.export.yml
@@ -4,6 +4,8 @@ options:
     tar: 'If set, the configuration will be exported to an archive file.'
     remove-uuid: 'If set, the configuration will be exported without uuid key.'
     remove-config-hash: 'If set, the configuration will be exported without the default site hash key.'
+questions:
+    directory: 'Enter the directory name to save the configuration files.'
 messages:
     directory: 'The configuration was exported at "%s"'
     error: 'An error occurred while creating your directory at "%s"'
@@ -12,11 +14,10 @@ examples:
       execution: |
         drupal config:export  \
           --directory="path/to/export"
-    - description: 'If export will be in a compressed file and/or if uuid and config hashes will be removed.'
+    - description: 'Export as a compressed file with uuid and config hashes removed'
       execution: |
         drupal config:export  \
           --directory="path/to/export" \
           --tar \
           --remove-uuid \
           --remove-config-hash
-
diff --git a/vendor/drupal/console-en/translations/config.import.single.yml b/vendor/drupal/console-en/translations/config.import.single.yml
index 02e9569fe211d85ce9e64b04b893f0aa592ba635..98df6091dc519e748692e5a7961eb54031a64ff3 100644
--- a/vendor/drupal/console-en/translations/config.import.single.yml
+++ b/vendor/drupal/console-en/translations/config.import.single.yml
@@ -4,7 +4,7 @@ options:
     directory: 'The path from where to import file(s).'
 questions:
     file: 'Enter file name or file absolute path to import'
-    directory: 'Enter path from where to import files.'
+    directory: 'Enter absolute path from where to import files.'
 messages:
     missing-file: 'File option is missing.'
     empty-value: 'Value can not be empty'
diff --git a/vendor/drupal/console-en/translations/config.import.yml b/vendor/drupal/console-en/translations/config.import.yml
index 30e1a8848b0ee34c966be0aa8e422e94564acd58..372c53e382c18a87d68ddc9299c5488147d6db72 100644
--- a/vendor/drupal/console-en/translations/config.import.yml
+++ b/vendor/drupal/console-en/translations/config.import.yml
@@ -3,6 +3,9 @@ options:
     file: 'Path to an archive file of configuration to import.'
     directory: 'Path to a directory of configuration to import.'
     remove-files: 'Remove files after synchronization.'
+    skip-uuid: 'Skip uuid from files'
+questions:
+    directory: 'Enter the directory name to import the configuration files.'
 messages:
     config_files_imported: 'List of config files.'
     imported: 'Configuration imported successfully.'
@@ -18,4 +21,3 @@ examples:
       execution: |
         drupal config:import  \
           --directory=/path/to/config/dir
-
diff --git a/vendor/drupal/console-en/translations/config.override.yml b/vendor/drupal/console-en/translations/config.override.yml
index 94d0e37d5f45aa3057eec4ee1dc5509561f016f1..16dde41871a4d19accabbf5543fc03f85d03a792 100644
--- a/vendor/drupal/console-en/translations/config.override.yml
+++ b/vendor/drupal/console-en/translations/config.override.yml
@@ -2,9 +2,10 @@ description: 'Override config value in active configuration.'
 questions:
     name: 'Enter configuration name'
     key: 'Enter the configuration key'
-    value: 'Enter the configuration value'
+    value: 'Enter the "%s" configuration value'
 arguments:
     name: 'Configuration name'
+options:
     key: 'Key'
     value: 'Value'
 messages:
@@ -13,7 +14,14 @@ messages:
     original: 'Original Value'
     updated: 'Override Value'
     invalid-name: 'Config object "%s" does not exist.'
+    invalid-config-file: 'Config file does not exist.'
 examples:
-    - description: 'Set the Contact module flood limit to 10.'
-      execution: 'drupal config:override contact.settings flood.limit 10'
-
+    - description: "Override options from the Who's new view"
+      execution: |
+        drupal config:override views.view.who_s_new \
+          --key='langcode' \
+          --key='label' \
+          --key='display.default.position' \
+          --value='es' \
+          --value='New label' \
+          --value='1'
diff --git a/vendor/drupal/console-en/translations/config.validate.yml b/vendor/drupal/console-en/translations/config.validate.yml
index b34ac21bea9647db65b074aef6d614dd0dac2316..c5647042cd2950355d17b4f1be74fcb0744de18e 100644
--- a/vendor/drupal/console-en/translations/config.validate.yml
+++ b/vendor/drupal/console-en/translations/config.validate.yml
@@ -7,4 +7,3 @@ messages:
 examples:
     - description: 'Provide the configuration name.'
       execution: 'drupal config:validate configuration.name'
-
diff --git a/vendor/drupal/console-en/translations/create.comments.yml b/vendor/drupal/console-en/translations/create.comments.yml
index f3a7a6539c9c2058e1f5d76b935138aa1acbb4be..b39aa147f56ad147cf9cf77480a71563b60b191b 100644
--- a/vendor/drupal/console-en/translations/create.comments.yml
+++ b/vendor/drupal/console-en/translations/create.comments.yml
@@ -38,4 +38,3 @@ examples:
           --limit="2" \
           --title-words="5" \
           --time-range="1"
-
diff --git a/vendor/drupal/console-en/translations/create.nodes.yml b/vendor/drupal/console-en/translations/create.nodes.yml
index 34cdc2666d5258d1c32cd26a4a3253810fd9c2f9..0d0073633dee4a571568100c1b0dc6f8d3fa665e 100644
--- a/vendor/drupal/console-en/translations/create.nodes.yml
+++ b/vendor/drupal/console-en/translations/create.nodes.yml
@@ -7,6 +7,7 @@ options:
     limit: 'How many nodes would you like to create'
     title-words: 'Maximum number of words in node titles'
     time-range: 'How far back in time should the nodes be dated'
+    revision: 'Create revisions'
 questions:
     content-type: 'Select content type(s) to be used on node creation'
     limit: 'Enter how many nodes would you like to generate'
@@ -19,6 +20,7 @@ questions:
         - '1 week ago'
         - '1 month ago'
         - '1 year ago'
+    revision: 'Do you want to add revisions?'
 messages:
     node-id: 'Node Id'
     content-type: 'Content type'
@@ -36,5 +38,5 @@ examples:
           --limit="5" \
           --title-words="5" \
           --time-range="1" \
+          --revision \
           --language="und"
-
diff --git a/vendor/drupal/console-en/translations/create.roles.yml b/vendor/drupal/console-en/translations/create.roles.yml
index 7584c5d9e492aa6d8d8f1f0ea7d9bd14578b235b..8d5f77daa33cc83d2b801466fd6d74190f7fc166 100644
--- a/vendor/drupal/console-en/translations/create.roles.yml
+++ b/vendor/drupal/console-en/translations/create.roles.yml
@@ -16,4 +16,3 @@ examples:
     - description: 'Provide the number of roles to create'
       execution: |
         drupal create:roles
-
diff --git a/vendor/drupal/console-en/translations/create.terms.yml b/vendor/drupal/console-en/translations/create.terms.yml
index be26f06cc34b94533e790e311524c44537301bd3..b4fce530c03c197289f26dd3ac8762e5b387dbb6 100644
--- a/vendor/drupal/console-en/translations/create.terms.yml
+++ b/vendor/drupal/console-en/translations/create.terms.yml
@@ -25,4 +25,3 @@ examples:
         drupal create:terms tags \
           --limit="10" \
           --name-words="5"
-
diff --git a/vendor/drupal/console-en/translations/create.users.yml b/vendor/drupal/console-en/translations/create.users.yml
index 3225da4baa62272d67c7d65e0c1d27322ed7020a..b4f4550245505e054622060a4e6cbabe0ea84f02 100644
--- a/vendor/drupal/console-en/translations/create.users.yml
+++ b/vendor/drupal/console-en/translations/create.users.yml
@@ -35,4 +35,3 @@ examples:
           --limit="5" \
           --password="usersnewpassword" \
           --time-range="1"
-
diff --git a/vendor/drupal/console-en/translations/create.vocabularies.yml b/vendor/drupal/console-en/translations/create.vocabularies.yml
index ca70cf4dc6643d5c41555b79144f79ab7eedd03d..db9d8bd672931797f845a4f5d3bf32517a1b7c8c 100644
--- a/vendor/drupal/console-en/translations/create.vocabularies.yml
+++ b/vendor/drupal/console-en/translations/create.vocabularies.yml
@@ -18,4 +18,3 @@ examples:
         drupal create:vocabularies \
           --limit="5" \
           --name-words="5"
-    
diff --git a/vendor/drupal/console-en/translations/cron.release.yml b/vendor/drupal/console-en/translations/cron.release.yml
index c7a8313f006badcd4d5b95525699fe60d0527a72..2de2f01a6c41abdc8a32e0bcda05d37a2304c71f 100644
--- a/vendor/drupal/console-en/translations/cron.release.yml
+++ b/vendor/drupal/console-en/translations/cron.release.yml
@@ -5,4 +5,3 @@ examples:
     - description: 'Execute the cron globally'
       execution: |
         drupal cron:execute
-
diff --git a/vendor/drupal/console-en/translations/database.add.yml b/vendor/drupal/console-en/translations/database.add.yml
index 2fb04a14b84e7263ef42441d0ae2a7062de83fd0..6c47cad8785d91249e4c31b34ce4c5d9c04ab5cb 100644
--- a/vendor/drupal/console-en/translations/database.add.yml
+++ b/vendor/drupal/console-en/translations/database.add.yml
@@ -7,6 +7,7 @@ options:
   host: 'The database host address'
   port: 'The database host port'
   driver: 'The database driver'
+  default: 'Set the database as the default one'
 questions:
   database: 'Enter the database name'
   username: 'Enter the username to access the database'
diff --git a/vendor/drupal/console-en/translations/database.client.yml b/vendor/drupal/console-en/translations/database.client.yml
index b2c9a4bd7c36519a966d135618ba86627ca4a936..d1fca4a61dadb2efefd36a2f7b42069656e7abad 100644
--- a/vendor/drupal/console-en/translations/database.client.yml
+++ b/vendor/drupal/console-en/translations/database.client.yml
@@ -1,6 +1,7 @@
 description: 'Launch a DB client if it''s available'
 arguments:
-    database: "Database key from settings.php"
+    database: 'Database key from settings.php'
+    target: 'Database target from settings.php'
 messages:
     connection: 'Connection: "%s"'
 examples:
diff --git a/vendor/drupal/console-en/translations/database.connect.yml b/vendor/drupal/console-en/translations/database.connect.yml
index a771d7d219f91d2b7536a4e4f4951e433913867a..8b42502581010647165133440e135fde2ca8453a 100644
--- a/vendor/drupal/console-en/translations/database.connect.yml
+++ b/vendor/drupal/console-en/translations/database.connect.yml
@@ -1,13 +1,14 @@
 description: "Shows DB connection"
 arguments:
-  database: "Database key from settings.php"
+  key: "Database key from settings.php"
+  target: "Database target from settings.php"
 messages:
-    database-not-found: 'Database "%s" connection info wasn''t found'
+    database-not-found: 'Database connection with key "%s" and target "%s" info wasn''t found'
     database-not-supported: 'Database type "%s" is not supported yet'
     database-client-not-found: 'Database client "%s" wasn''t found'
     connection: 'Connection: "%s"'
 examples:
-    - description: 'Connects to an specified database, or the default if not arguments passed'
+    - description: 'Connects to an specified database with key and target, or if no arguments default key and default target will be passed'
       execution: |
         drupal database:connect \
-          <database>
+          <key> <target>
diff --git a/vendor/drupal/console-en/translations/database.drop.yml b/vendor/drupal/console-en/translations/database.drop.yml
index 6f71d05bd5eaaf704acb3c96c6fd570dee78b153..adf64b13863ebc53250bfee29244cc10a7bdb42a 100644
--- a/vendor/drupal/console-en/translations/database.drop.yml
+++ b/vendor/drupal/console-en/translations/database.drop.yml
@@ -1,7 +1,8 @@
-description: "Drop all tables in a given database."
+description: 'Drop all tables in a given database.'
 help: 'The <info>database:drop</info> command helps you drop database tables.'
 arguments:
   database: 'Database key from settings.php'
+  target: 'Database target from settings.php'
 question:
     drop-tables: 'Confirm you really want to drop all tables in the database "%s"?'
 messages:
diff --git a/vendor/drupal/console-en/translations/database.dump.yml b/vendor/drupal/console-en/translations/database.dump.yml
index 4abeb0a642f815bc366f170d08242b685d7d5ba8..3e8f937418ffb7f271ba69647399de7827573b59 100644
--- a/vendor/drupal/console-en/translations/database.dump.yml
+++ b/vendor/drupal/console-en/translations/database.dump.yml
@@ -1,9 +1,11 @@
 description: 'Dump structure and contents of a database'
 arguments:
   database: 'Database key from settings.php'
+  target: 'Database target from settings.php'
 options:
   file: 'The filename for your database backup'
   gz: 'Pass this option if you want the sql result file gzipped'
+  exclude-cache: 'Pass this option if you want to exclude cache tables.'
 messages:
     success: 'Database exported to:'
 examples:
@@ -14,4 +16,4 @@ examples:
     - description: 'Dump in gz compressed format'
       execution: |
         drupal database:dump \
-          --gz
\ No newline at end of file
+          --gz
diff --git a/vendor/drupal/console-en/translations/database.log.clear.yml b/vendor/drupal/console-en/translations/database.log.clear.yml
index a5812dccb391dc83b9c4a9bcc51e22b89beaabba..ed9134674462835469da8740823a0f223868bfea 100644
--- a/vendor/drupal/console-en/translations/database.log.clear.yml
+++ b/vendor/drupal/console-en/translations/database.log.clear.yml
@@ -19,4 +19,4 @@ examples:
         drupal database:log:clear \
           <database> \
           --type=TYPE \
-          --severity=SEVERITY
\ No newline at end of file
+          --severity=SEVERITY
diff --git a/vendor/drupal/console-en/translations/database.log.common.yml b/vendor/drupal/console-en/translations/database.log.common.yml
index a0afaf323e0ab4c0f07950f3917dc69a2371580e..46aca7290d6f62affbfae4177dd304f04de26848 100644
--- a/vendor/drupal/console-en/translations/database.log.common.yml
+++ b/vendor/drupal/console-en/translations/database.log.common.yml
@@ -9,4 +9,5 @@ messages:
     message: Message
     user: User
     severity: Severity
-    invalid-severity: 'Severity type is invalid, filter was ignored'
\ No newline at end of file
+    invalid-severity: 'Severity type is invalid, filter was ignored'
+    user-deleted: 'User has been deleted'
diff --git a/vendor/drupal/console-en/translations/database.query.yml b/vendor/drupal/console-en/translations/database.query.yml
index 4e010a3939b69abc035affdaa356cafb84b54f8b..890c96e66439cd0d6f54b1423fcc91a3176d7ec5 100644
--- a/vendor/drupal/console-en/translations/database.query.yml
+++ b/vendor/drupal/console-en/translations/database.query.yml
@@ -2,6 +2,7 @@ description: 'Executes a SQL statement directly as argument'
 arguments:
     query: 'The SQL statement to execute'
     database: 'Database key from settings.php'
+    target: 'Database target from settings.php'
 options:
     quick: 'Do not cache each query result, print each row as it is received'
     debug: 'Prints debugging information and memory and CPU usage statistics when the program exits'
diff --git a/vendor/drupal/console-en/translations/database.restore.yml b/vendor/drupal/console-en/translations/database.restore.yml
index b11d5f2b84ae065549ecf899785bc4b2f4ef28dd..2f5c8847e73c42a808ce00014d264819889a9320 100644
--- a/vendor/drupal/console-en/translations/database.restore.yml
+++ b/vendor/drupal/console-en/translations/database.restore.yml
@@ -1,8 +1,9 @@
 description: 'Restore structure and contents of a database.'
 arguments:
   database: 'Database key from settings.php'
+  target: 'Database target from settings.php'
 options:
-  file: 'The filename for your database backup file. If using a .sql.gz file, the gunzip command needs to be installed.'
+  file: 'The filename for your database backup file (absolute path) . If using a .sql.gz file, the gunzip command needs to be installed.'
 messages:
     success: 'Database imported from:'
     no-file: 'Missing file option'
diff --git a/vendor/drupal/console-en/translations/debug.breakpoints.yml b/vendor/drupal/console-en/translations/debug.breakpoints.yml
index e88c54fed2bb475fc1f8c774d94bae2d26a1689e..a3f917a105ed57b0925d923fbe2cc531196513f6 100644
--- a/vendor/drupal/console-en/translations/debug.breakpoints.yml
+++ b/vendor/drupal/console-en/translations/debug.breakpoints.yml
@@ -3,9 +3,6 @@ options:
   group-name: 'Enter Breakpoint Group Name'
 messages:
   name: 'Extensions with breakpoints'
-examples:
-    - description: 'Provide a group name.'
-      execution: drupal debug:breakpoints bartik
 examples:
     - description: 'Displays the breakpoints available on the site'
       execution: |
diff --git a/vendor/drupal/console-en/translations/debug.event.yml b/vendor/drupal/console-en/translations/debug.event.yml
index e9197b33f058fcc3d35eb4e8585f5cadf5e763be..e3ff5b44a63d1a7ee60cd945e09ae527ea83e837 100644
--- a/vendor/drupal/console-en/translations/debug.event.yml
+++ b/vendor/drupal/console-en/translations/debug.event.yml
@@ -10,7 +10,7 @@ messages:
 examples:
     - description: 'List all the events that could be debugged'
       execution: |
-        drupal debug:evet
+        drupal debug:event
     - description: 'Show the information for the kernel.request event'
       execution: |
-        drupal debug:event kernel.request
\ No newline at end of file
+        drupal debug:event kernel.request
diff --git a/vendor/drupal/console-en/translations/debug.features.yml b/vendor/drupal/console-en/translations/debug.features.yml
index 5ef07c5d8a8b4bd0a3fedecbcafb8cb015ad463b..a7bf0958b76dd2a316031e92272766910e5b4197 100644
--- a/vendor/drupal/console-en/translations/debug.features.yml
+++ b/vendor/drupal/console-en/translations/debug.features.yml
@@ -8,4 +8,3 @@ messages:
   machine-name: 'Machine Name'
   status: 'Status'
   state: 'State'
-
diff --git a/vendor/drupal/console-en/translations/debug.module.yml b/vendor/drupal/console-en/translations/debug.module.yml
index 034d88adfa2d48b3c4cf223a2d72fc8641aa89ce..e565a082a69e8d38ee24ab736a5b953a9656d276 100644
--- a/vendor/drupal/console-en/translations/debug.module.yml
+++ b/vendor/drupal/console-en/translations/debug.module.yml
@@ -13,12 +13,8 @@ messages:
     uninstalled: Uninstalled
     version: Version
     schema-version: 'Schema version'
-    total-downloads: 'Total installs'
-    total-monthly: 'Monthly installs'
-    total-daily: 'Daily installs'
-    no-results: 'Module "%s" was not found in the repository'
 examples:
     - description: 'Display all installed modules'
-      execution: 'drupal mod --status=installed'
-    - description: 'Display all installed and no core modules'
-      execution: 'drupal mod --status=installed --type=no-core'
+      execution: 'drupal debug:module --status=installed'
+    - description: 'Display all installed and no core modules with alias'
+      execution: 'drupal dm --status=installed --type=no-core'
diff --git a/vendor/drupal/console-en/translations/debug.router.yml b/vendor/drupal/console-en/translations/debug.router.yml
index 1341a87eeeaae3655a39592db0f47e1d8e9652ce..114c702ac258041cc3018aa5a9f1a7f56fa726a6 100644
--- a/vendor/drupal/console-en/translations/debug.router.yml
+++ b/vendor/drupal/console-en/translations/debug.router.yml
@@ -1,6 +1,8 @@
 description: 'Displays current routes for the application or information for a particular route'
 arguments:
     route-name: 'Route names'
+options:
+    pattern: 'Route pattern'
 messages:
     name: 'Route name'
     class: 'Class path'
@@ -14,10 +16,12 @@ examples:
       execution: 'drupal rod'
     - description: 'Displays details for the route user.page (/user)'
       execution: 'drupal rod user.page'
-examples:
     - description: 'Shows the routes list on the site'
       execution: |
         drupal debug:router
     - description: 'Display information on the user.login'
       execution: |
-        drupal debug:router user.login
\ No newline at end of file
+        drupal debug:router user.login
+    - description: 'Display information for the routes by pattern (/user/login)'
+      execution: |
+        drupal debug:router --pattern=/user/login
diff --git a/vendor/drupal/console-en/translations/debug.theme.yml b/vendor/drupal/console-en/translations/debug.theme.yml
index fac0258006dbdb6a05dba6f551e69d51826c2659..54fa6557bf29fe2ac16b03d1ce8ff8c79de531ac 100644
--- a/vendor/drupal/console-en/translations/debug.theme.yml
+++ b/vendor/drupal/console-en/translations/debug.theme.yml
@@ -19,4 +19,4 @@ examples:
         drupal debug:theme
     - description: 'Bartik theme information'
       execution: |
-        drupal debug:theme bartik
\ No newline at end of file
+        drupal debug:theme bartik
diff --git a/vendor/drupal/console-en/translations/debug.update.composer.yml b/vendor/drupal/console-en/translations/debug.update.composer.yml
new file mode 100644
index 0000000000000000000000000000000000000000..5213cb97c8c4837cc984db0edc8e2c3cc593a7ac
--- /dev/null
+++ b/vendor/drupal/console-en/translations/debug.update.composer.yml
@@ -0,0 +1,13 @@
+description: 'Displays current updates available from the composer file'
+options:
+    only-drupal: Show only drupal (modules/themes) updates
+messages:
+    description: 'Description'
+    current-version: 'Version'
+    latest-version: 'Latest'
+    name: 'Name'
+    composer-list: 'Composer with pending updates'
+examples:
+    - description: 'List of pending updates from composer'
+      execution: |
+        drupal debug:update:composer
diff --git a/vendor/drupal/console-en/translations/entity.delete.yml b/vendor/drupal/console-en/translations/entity.delete.yml
index e465677e2debb055930d35ea385d034de121f2cc..d4fd13b980426ccda422a485c36ed39ab8faeb56 100644
--- a/vendor/drupal/console-en/translations/entity.delete.yml
+++ b/vendor/drupal/console-en/translations/entity.delete.yml
@@ -1,4 +1,4 @@
-description: 'Delete an specific entity'
+description: 'Delete a specific entity'
 help: 'The <info>entity:delete</info> command helps you delete entities.'
 arguments:
   entity-definition-id: 'Entity definition id'
diff --git a/vendor/drupal/console-en/translations/exec.yml b/vendor/drupal/console-en/translations/exec.yml
index 9f4d52c33876b037fec851541f9042ea45b8a8e0..bcf34e2549314d694e831fcf71308cb243453c0b 100644
--- a/vendor/drupal/console-en/translations/exec.yml
+++ b/vendor/drupal/console-en/translations/exec.yml
@@ -10,4 +10,3 @@ messages:
   binary-not-found: 'Unable to find the binary "%s" to execute.'
   working-directory: 'Working directory'
   executing-command: 'Executing command'
-
diff --git a/vendor/drupal/console-en/translations/generate.ajax.command.yml b/vendor/drupal/console-en/translations/generate.ajax.command.yml
index 39836810d0282a7d27da35401d384065baf1ea13..ac46f1a193cb78d8e46e19d98f75d9ca4c0e56a5 100644
--- a/vendor/drupal/console-en/translations/generate.ajax.command.yml
+++ b/vendor/drupal/console-en/translations/generate.ajax.command.yml
@@ -10,4 +10,4 @@ questions:
   module: 'Enter the module name'
   class: 'Enter the Ajax class name'
   method: 'Enter the render method name'
-  js-name: 'Enter a custom javascript name'
\ No newline at end of file
+  js-name: 'Enter a custom javascript name'
diff --git a/vendor/drupal/console-en/translations/generate.block.type.yml b/vendor/drupal/console-en/translations/generate.block.type.yml
new file mode 100644
index 0000000000000000000000000000000000000000..9957fdcafed785fb04df55ce0c93ff365e44f565
--- /dev/null
+++ b/vendor/drupal/console-en/translations/generate.block.type.yml
@@ -0,0 +1,26 @@
+description: 'Generate a block content type'
+help: 'The <info>generate:block:type</info> command helps you generate a new block content type.'
+welcome: 'Welcome to the Drupal Block Type generator'
+options:
+  module: 'The Module name.'
+  class: 'Block type class name'
+  block-label: 'Block content type label'
+  block-description: 'Block content type description'
+  block-id: 'Block id'
+questions:
+  module: 'Enter the module name'
+  class: 'Enter the block class name'
+  block-label: 'Enter the block label'
+  block-description: 'Enter the block description'
+  block-id: 'Enter the block content type id'
+  description: 'Description'
+  default-value: 'Default value'
+messages:  
+examples:
+  - description: 'Generate a block content type specifying the module name'
+    execution: |
+      drupal generate:block:type  \
+        --module="modulename"  \
+        --class="DefaultBlock"  \
+        --label="Default block"  \
+        --block-id="default_block"
\ No newline at end of file
diff --git a/vendor/drupal/console-en/translations/generate.breakpoint.yml b/vendor/drupal/console-en/translations/generate.breakpoint.yml
index 9b79cbdd15d012761ecd3f6fbf75f484c9aeacb5..3962b307a1fdbb830696061bd8e4c14484563bd3 100644
--- a/vendor/drupal/console-en/translations/generate.breakpoint.yml
+++ b/vendor/drupal/console-en/translations/generate.breakpoint.yml
@@ -17,4 +17,4 @@ examples:
     execution: |
       drupal generate:breakpoint  \
         --theme="classy"  \
-        --breakpoints='"breakpoint_name":"narrow", "breakpoint_label":"narrow", "breakpoint_media_query":"all and (min-width: 560px) and (max-width: 850px)", "breakpoint_weight":"1", "breakpoint_multipliers":"1x"'
\ No newline at end of file
+        --breakpoints='"breakpoint_name":"narrow", "breakpoint_label":"narrow", "breakpoint_media_query":"all and (min-width: 560px) and (max-width: 850px)", "breakpoint_weight":"1", "breakpoint_multipliers":"1x"'
diff --git a/vendor/drupal/console-en/translations/generate.cache.context.yml b/vendor/drupal/console-en/translations/generate.cache.context.yml
index 6058d4af6d13e5dabff2b88b83e09a5f40586621..31101cec5d5202edfa90ae7472cefdb84fb1d3e0 100644
--- a/vendor/drupal/console-en/translations/generate.cache.context.yml
+++ b/vendor/drupal/console-en/translations/generate.cache.context.yml
@@ -15,4 +15,4 @@ examples:
       drupal generate:cache:context  \
         --module="modulename"  \
         --cache-context="ContextName"  \
-        --class="DefaultCacheContext"
\ No newline at end of file
+        --class="DefaultCacheContext"
diff --git a/vendor/drupal/console-en/translations/generate.command.yml b/vendor/drupal/console-en/translations/generate.command.yml
index 745203475b2924102a2bf908ed1e3f3f2f5d5caf..48e16971765f4a0648f78e16650cd9936fbd006b 100644
--- a/vendor/drupal/console-en/translations/generate.command.yml
+++ b/vendor/drupal/console-en/translations/generate.command.yml
@@ -2,7 +2,8 @@ description: 'Generate commands for the console.'
 help: 'The <info>generate:command</info> command helps you generate a new command.'
 welcome: 'Welcome to the Drupal Command generator'
 options:
-  extension: 'The name of the Extension (that will contain the command).'
+  extension: 'The name of the Extension (modules, profiles or themes name that will contain the command).'
+  extension-type: 'The type of the Extension (can be module, profile or theme).'
   class: 'The Class that describes the command. (Must end with the word ''Command'').'
   name: 'The Command name.'
   interact: 'Add interact method.'
@@ -28,4 +29,4 @@ examples:
         --extension="ExtensionName"  \
         --extension-type="module"  \
         --class="DefaultCommand"  \
-        --name="CommandName"
\ No newline at end of file
+        --name="CommandName"
diff --git a/vendor/drupal/console-en/translations/generate.composer.yml b/vendor/drupal/console-en/translations/generate.composer.yml
new file mode 100644
index 0000000000000000000000000000000000000000..32e425f9ffba9be4db380f45fddfb9a8b278a6bb
--- /dev/null
+++ b/vendor/drupal/console-en/translations/generate.composer.yml
@@ -0,0 +1,58 @@
+description: 'Generate a composer.json file'
+help: 'The <info>"%s"</info> command helps you generate a new composer.json file'
+welcome: 'Welcome to the Drupal Composer file generator'
+options:
+  module: common.options.module
+  name: 'Package name'
+  type: 'Package type'
+  description: 'Package description'
+  keywords: 'Package keywords'
+  license: 'License'
+  homepage: 'Project homepage'
+  minimum-stability: 'Mininmal stability'
+  authors: 'Authors of the project'
+  support: 'Support channels'
+  required: 'Required packages'
+questions:
+  module: common.questions.module
+  name: 'Enter package name'
+  type: 'Enter package type'
+  description: 'Enter package description'
+  add-keywords: 'Do you want to add package keywords?'
+  keyword: 'Enter a keyword or press <info>enter</info> to continue'
+  license: 'Enter license information'
+  homepage: 'Enter project homepage'
+  minimum-stability: 'Enter mininmal stability (stable, dev, alpha, beta and RC)'
+  add-author: 'Do you want to add authors of the project?'
+  add-another-author: 'Do you want to add another authors of the project?'
+  author-name: 'Enter author name or press <info>enter</info> to skip it'
+  author-email: 'Enter author email or press <info>enter</info> to skip it'
+  author-homepage: 'Enter author homepage or press <info>enter</info> to skip it'
+  author-role: 'Enter author role or press <info>enter</info> to skip it'
+  add-support: 'Do you want to add information about support channels?'
+  add-another-support: 'Do you want to add another information about support channels?'
+  support-channel: 'Enter support channel (email, issues, forum, wiki, irc, source, docs, rss)'
+  support-value: 'Enter support channel value'
+  add-required: 'Do you want to add required packages for the project?'
+  add-another-required: 'Do you want to add another required packages for the project?'
+  required-name: 'Enter required package name'
+  required-version: 'Enter required package version'
+suggestions:
+  description-for-menu: 'A description for the menu entry'
+examples:
+  - description: 'Generate composer file specifying the module machine name, package name, package type, package description, keywords, lincense, homepage, minimum stability, authors, support channels and required packages'
+    execution: |
+      drupal generate:composer \
+        --module="module_name" \
+        --name="drupal/module_name" \
+        --type="drupal-module" \
+        --description="Package description" \
+        --keywords='Drupal' --keywords='logging' \
+        --license="GPL-2.0+" \
+        --homepage="https://www.drupal.org/project/module_name" \
+        --minimum-stability="stable" \
+        --authors='"name":"Author name", "email":"author@email.com", "homepage":"http://website.com", "role":"Developer"' \
+        --support='"channel":"email", "url":"author@email.com"' \
+        --support='"channel":"source", "url":"http://github.com"' \
+        --required='"name":"drupal/views", "version":"^1.0"' \
+        --required='"name":"drupal/token", "version":"^2.0"'
diff --git a/vendor/drupal/console-en/translations/generate.controller.yml b/vendor/drupal/console-en/translations/generate.controller.yml
index 5b05332f92ca8187850783fac12a1f56042c008e..16ab440a47dca3bd44ef07f526a1d0a7f82f6fd6 100644
--- a/vendor/drupal/console-en/translations/generate.controller.yml
+++ b/vendor/drupal/console-en/translations/generate.controller.yml
@@ -27,4 +27,4 @@ examples:
         --module="modulename"  \
         --class="DefaultController"  \
         --routes='"title":"ControllerMethod", "name":"modulename.default_controller_hello", "method":"hello", "path":"/modulename/hello/{name}"'  \
-        --test
\ No newline at end of file
+        --test
diff --git a/vendor/drupal/console-en/translations/generate.entity.bundle.yml b/vendor/drupal/console-en/translations/generate.entity.bundle.yml
index f3106b3fc31f988a746a4046295d120f43d16b0a..b7d75d6e317de43dcf8eb52a26e486a1a55e044f 100644
--- a/vendor/drupal/console-en/translations/generate.entity.bundle.yml
+++ b/vendor/drupal/console-en/translations/generate.entity.bundle.yml
@@ -17,4 +17,4 @@ examples:
       drupal generate:entity:bundle  \
         --module="modulename"  \
         --bundle-name="default"  \
-        --bundle-title="default"
\ No newline at end of file
+        --bundle-title="default"
diff --git a/vendor/drupal/console-en/translations/generate.entity.config.yml b/vendor/drupal/console-en/translations/generate.entity.config.yml
index 67b06b4cf9c81483ae7387a57889c8bff05aa17b..a30869f4584814944db46cb609c2d4469de8cb64 100644
--- a/vendor/drupal/console-en/translations/generate.entity.config.yml
+++ b/vendor/drupal/console-en/translations/generate.entity.config.yml
@@ -23,4 +23,4 @@ examples:
         --entity-class="DefaultEntity"  \
         --entity-name="default_entity"  \
         --base-path="/admin/structure"  \
-        --label="Default entity"
\ No newline at end of file
+        --label="Default entity"
diff --git a/vendor/drupal/console-en/translations/generate.entity.content.yml b/vendor/drupal/console-en/translations/generate.entity.content.yml
index 8be970c5256af4bf7e5704315ad3b6d4c0f434cb..a1341ecbaa99bce3f12f81f37d2826afcdbcb517 100644
--- a/vendor/drupal/console-en/translations/generate.entity.content.yml
+++ b/vendor/drupal/console-en/translations/generate.entity.content.yml
@@ -7,17 +7,23 @@ options:
   entity-name: 'The content entity name'
   label: 'The label'
   has-bundles: 'Entity has bundles'
+  has-forms: 'Entity has forms'
+  has-owner: 'Entity has owner'
   base-path: 'The base-path for the content entity routes'
   is-translatable: 'Content entity translatable'
+  has-bundle-permissions: 'Permissions on bundle level'
 questions:
   module: 'Enter the module name'
   entity-class: 'Enter the class of your new content entity'
   entity-name: 'Enter the machine name of your new content entity'
   label: 'Enter the label of your new content entity'
   has-bundles: 'Do you want this (content) entity to have bundles?'
+  has-forms: 'Do you want this (content) entity to have forms?'
+  has-owner: 'Do you want this (content) entity to have an owner?'
   base-path: 'Enter the base-path for the content entity routes'
   is-translatable: 'Is your entity translatable?'
   revisionable: 'Is your entity revisionable?'
+  has-bundle-permissions: 'Do you want this entity to have "per bundle" permissions?'
 examples:
   - description: 'Generate a content entity specifying the module, the entity class, the entity name, its path and label'
     execution: |
@@ -36,4 +42,5 @@ examples:
         --base-path="/admin/structure"  \
         --label="Default entity"  \
         --is-translatable  \
-        --revisionable
\ No newline at end of file
+        --revisionable
+        --has-forms
diff --git a/vendor/drupal/console-en/translations/generate.form.alter.yml b/vendor/drupal/console-en/translations/generate.form.alter.yml
index afd16b83d67137d3739a1395b0c5f04e4efbb1d2..4e7ab96cd5a92ef09ce9e283d49c41f688ef8f70 100644
--- a/vendor/drupal/console-en/translations/generate.form.alter.yml
+++ b/vendor/drupal/console-en/translations/generate.form.alter.yml
@@ -28,4 +28,4 @@ examples:
       drupal generate:form:alter  \
         --module="modulename"  \
         --inputs='"name":"inputtext", "type":"text_format", "label":"InputText", "options":"", "description":"Just an input text", "maxlength":"", "size":"", "default_value":"", "weight":"0", "fieldset":""'  \
-        --inputs='"name":"email", "type":"email", "label":"Email", "options":"", "description":"Just an email input", "maxlength":"", "size":"", "default_value":"", "weight":"0", "fieldset":""'
\ No newline at end of file
+        --inputs='"name":"email", "type":"email", "label":"Email", "options":"", "description":"Just an email input", "maxlength":"", "size":"", "default_value":"", "weight":"0", "fieldset":""'
diff --git a/vendor/drupal/console-en/translations/generate.help.yml b/vendor/drupal/console-en/translations/generate.help.yml
index 7f04a2d6e26087d620acfcb50e45ee1a8a862dd3..ec21b8d068114f89edf938857c7618c44dd944b1 100644
--- a/vendor/drupal/console-en/translations/generate.help.yml
+++ b/vendor/drupal/console-en/translations/generate.help.yml
@@ -14,4 +14,4 @@ examples:
     execution: |
       drupal generate:help  \
         --module="modulename"  \
-        --description="My Awesome Module"
\ No newline at end of file
+        --description="My Awesome Module"
diff --git a/vendor/drupal/console-en/translations/generate.module.file.yml b/vendor/drupal/console-en/translations/generate.module.file.yml
index abaedd57b103a9e7975702acc5856c0bdc6e71d3..df3f2059719e4a51a012b92997ed50bc4dee55b6 100644
--- a/vendor/drupal/console-en/translations/generate.module.file.yml
+++ b/vendor/drupal/console-en/translations/generate.module.file.yml
@@ -9,4 +9,4 @@ examples:
   - description: 'Generate the .module file specifying the module name'
     execution: |
       drupal generate:module:file  \
-        --module="modulename"
\ No newline at end of file
+        --module="modulename"
diff --git a/vendor/drupal/console-en/translations/generate.module.yml b/vendor/drupal/console-en/translations/generate.module.yml
index 12925f2fe64c58f51f4d2e4e1ad3540e82fee8f8..36bcb84832fa3156567b0eb50d774056ca024e20 100644
--- a/vendor/drupal/console-en/translations/generate.module.yml
+++ b/vendor/drupal/console-en/translations/generate.module.yml
@@ -41,7 +41,7 @@ examples:
       drupal generate:module  \
         --module="modulename"  \
         --machine-name="modulename"  \
-        --module-path="/modules/custom"  \
+        --module-path="modules/custom"  \
         --description="My Awesome Module"  \
         --core="8.x"  \
         --package="Custom"  \
diff --git a/vendor/drupal/console-en/translations/generate.plugin.block.yml b/vendor/drupal/console-en/translations/generate.plugin.block.yml
index 6510194d09ab14b859ee14734139238710d7b2a2..908a8596f54e18b8b6ca304624817f62dcb53aed 100644
--- a/vendor/drupal/console-en/translations/generate.plugin.block.yml
+++ b/vendor/drupal/console-en/translations/generate.plugin.block.yml
@@ -4,15 +4,16 @@ welcome: 'Welcome to the Drupal Plugin Block generator'
 options:
   module: 'The Module name.'
   class: 'Plugin class name'
-  label: 'Plugin label'
+  plugin-label: 'Plugin label'
   plugin-id: 'Plugin id'
   inputs: 'Create inputs in a form.'
   services: 'Load services from the container.'
   theme-region: 'Theme region to render Plugin Block'
+  twigtemplate: 'Generate theme template'
 questions:
   module: 'Enter the module name'
   class: 'Enter the plugin class name'
-  label: 'Enter the plugin label'
+  plugin-label: 'Enter the plugin label'
   plugin-id: 'Enter the plugin id'
   services: 'Enter your service'
   theme-region: 'Enter the theme region to render the Plugin Block.'
@@ -21,6 +22,7 @@ questions:
   description: 'Description'
   default-value: 'Default value'
   weight: 'Weight for input item'
+  twigtemplate: 'Do you want to generate a themeable template?'
 messages:
   inputs: "\nYou can add input fields to create special configurations in the block.\nThis is optional, press <info>enter</info> to <info>continue</info>"
   invalid-theme-region: 'Region "%s" is invalid'
@@ -33,4 +35,4 @@ examples:
         --label="Default block"  \
         --plugin-id="default_block"  \
         --theme-region="header"  \
-        --inputs='"name":"inputtext", "type":"text_format", "label":"InputText", "options":"", "description":"Just an input text", "maxlength":"", "size":"", "default_value":"", "weight":"0", "fieldset":""'
\ No newline at end of file
+        --inputs='"name":"inputtext", "type":"text_format", "label":"InputText", "options":"", "description":"Just an input text", "maxlength":"", "size":"", "default_value":"", "weight":"0", "fieldset":""'
diff --git a/vendor/drupal/console-en/translations/generate.plugin.ckeditorbutton.yml b/vendor/drupal/console-en/translations/generate.plugin.ckeditorbutton.yml
index 36d5c7f61e385ee526d4801c944c0f82c242df0c..f03c5e33b220ff39f1bce43c66524c733aca8f4f 100644
--- a/vendor/drupal/console-en/translations/generate.plugin.ckeditorbutton.yml
+++ b/vendor/drupal/console-en/translations/generate.plugin.ckeditorbutton.yml
@@ -6,8 +6,8 @@ options:
   class: 'Plugin class name'
   label: 'Plugin label'
   plugin-id: 'Plugin ID. NOTE: This corresponds to the CKEditor plugin name. It is the first argument of the CKEDITOR.plugins.add() function in the plugin.js file.'
-  button-name: 'Button name. NOTE: This corresponds to the CKEditor button name. They are the first argument of the editor.ui.addButton() or editor.ui.addRichCombo() functions in the plugin.js file.'
-  button-icon-path: 'Button icon path. This is the path to the icon/image of the button.'
+  buttons: 'CKEditor buttons.'
+  button-properties: 'Enter a new button properties.'
 questions:
   module: 'Enter the module name'
   class: 'Enter the plugin class name'
@@ -15,13 +15,24 @@ questions:
   plugin-id: 'Enter the plugin ID. NOTE: This corresponds to the CKEditor plugin name. It is the first argument of the CKEDITOR.plugins.add() function in the plugin.js file.'
   button-name: 'Enter the button name. NOTE: This corresponds to the CKEditor button name. They are the first argument of the editor.ui.addButton() or editor.ui.addRichCombo() functions in the plugin.js file.'
   button-icon-path: 'Enter the button icon path'
+  button-label: 'Enter the button label'
+  button-add: 'Do you want to add another button?'
 examples:
   - description: 'Generate plugin CKEditor button specifying the module name, the class, the label, its id, the button name and the icon path'
     execution: |
+      drupal generate:plugin:ckeditorbutton  \
+        --module="modulename" \
+        --class="DefaultCKEditorButton" \
+        --label="Default ckeditor button" \
+        --plugin-id="default_ckeditor_button" \
+        --buttons='name":"Default ckeditor button", "label":"Default ckeditor button", "icon":"modules/custom/modulename/js/plugins/default_ckeditor_button/images/icon.png"' \
+        --buttons='name":"My ckeditor button", "label":"My ckeditor button", "icon":"modules/custom/modulename/js/plugins/my_ckeditor_button/images/icon.png"' \
+        --no-interaction
+
       drupal generate:plugin:ckeditorbutton  \
         --module="modulename"  \
         --class="DefaultCKEditorButton"  \
         --label="Default ckeditor button"  \
         --plugin-id="default ckeditor button"  \
         --button-name="Default ckeditor button"  \
-        --button-icon-path="modules/custom/modulename/js/plugins/default ckeditor button/images/icon.png"
\ No newline at end of file
+        --button-icon-path="modules/custom/modulename/js/plugins/default ckeditor button/images/icon.png"
diff --git a/vendor/drupal/console-en/translations/generate.plugin.derivative.yml b/vendor/drupal/console-en/translations/generate.plugin.derivative.yml
new file mode 100644
index 0000000000000000000000000000000000000000..1515d99dbf851252c939adde5bcd0d692670321e
--- /dev/null
+++ b/vendor/drupal/console-en/translations/generate.plugin.derivative.yml
@@ -0,0 +1,29 @@
+description: 'Generate a custom block plugin derivative'
+help: 'The <info>generate:plugin:derivative</info> command helps you generate a new custom plugin block derivative'
+welcome: 'Welcome to the Drupal Plugin Block Derivative generator'
+options:
+  module: 'The Module name.'
+  class: 'The Class name.'
+  block_label: 'The Block label'
+  block_description: 'The Block description'
+  block_id: 'The Block id'
+questions:
+  module: 'Enter the module name'
+  class: 'Enter the plugin block derivative class name'
+  block_label: 'Enter the Block label'
+  block_description: 'Enter the Block description'
+  block_id: 'Enter the Block id'
+suggestions:
+  class: 'CustomBlockDerivative'
+  block_description: 'My custom block derivative.'
+  block_label: 'Custom block derivative'
+  block_id: 'custom_block_derivative'
+examples:
+  - description: 'Generate a custom view field plugin specifying the module name, the class, a title and its description'
+    execution: |
+      drupal generate:plugin:views:field  \
+        --module="modulename"  \
+        --class="CustomBlockDerivative"  \
+        --block-label="Custom block derivative"  \
+        --block-description="My custom block derivative." \
+        --block-id="custom_block_derivative"
diff --git a/vendor/drupal/console-en/translations/generate.plugin.migrate.dataparser.yml b/vendor/drupal/console-en/translations/generate.plugin.migrate.dataparser.yml
new file mode 100644
index 0000000000000000000000000000000000000000..e4da83a7db864e7533a2ae2e02a87f712e48f41d
--- /dev/null
+++ b/vendor/drupal/console-en/translations/generate.plugin.migrate.dataparser.yml
@@ -0,0 +1,20 @@
+description: 'Generate a migrate data parser'
+help: 'The <info>generate:plugin:migrate:dataparser</info> command helps you generate a new migrate data parser.'
+welcome: 'Welcome to the Drupal Migrate Data Parser generator'
+options:
+  module: 'The Module name.'
+  class: 'Plugin class name'
+  plugin-id: 'Plugin id'
+  plugin-title: 'Plugin title'
+questions:
+  class: 'Enter the plugin class name'
+  plugin-id: 'Enter the plugin id'
+  plugin-title: 'Enter the plugin title'
+examples:
+  - description: 'Generate a migration data parser specifying the module name, the class, the plugin id and the plugin title'
+    execution: |
+      drupal generate:plugin:migrate:source  \
+        --module="modulename"  \
+        --class="PluginClassName"  \
+        --plugin-id="plugin_class_name"  \
+        --plugin-title="Data parser"
diff --git a/vendor/drupal/console-en/translations/generate.plugin.queue.yml b/vendor/drupal/console-en/translations/generate.plugin.queue.yml
new file mode 100644
index 0000000000000000000000000000000000000000..f09ad5e4c9824fbe42c2c6c9363a0ac0ba6b4332
--- /dev/null
+++ b/vendor/drupal/console-en/translations/generate.plugin.queue.yml
@@ -0,0 +1,25 @@
+description: 'Drupal Console Queueworker generator.'
+help: 'The <info>generate:plugin:queue</info> command helps you generate a new queue worker plugin.'
+welcome: 'Welcome to the Drupal Queue Worker Plugin generator'
+options:
+  module: 'The module name'
+  class: 'QueueWorker file name'
+  plugin-id: 'Plugin QueueWorker id'
+  cron-time: 'Cron time'
+  label: 'Queue description'
+questions:
+  class: 'Enter the QueueWorker class name'
+  plugin-id: 'Enter the Plugin QueueWorker id'
+  cron-time: 'Enter the cron time to execute you queue'
+  label: 'Enter the Queue description'
+examples:
+  - description: 'Generate a queue worker plugin specifying the module name, the class and its plugin id'
+    execution: |
+      drupal generate:plugin:queue  \
+        --module="modulename"  \
+        --class="PluginClassName"  \
+        --plugin-id="plugin_class_name"  \
+        --cron-time="30"  \
+        --label="Example QueueWorker"
+messages:
+    success: 'The Queueworker was generated successfully.'
diff --git a/vendor/drupal/console-en/translations/generate.plugin.rules.action.yml b/vendor/drupal/console-en/translations/generate.plugin.rules.action.yml
index aa5d942af0b3a875195f9a6b02129c4fa270570d..1fe7907890b19636010e7b1f62aa8d64a43b3ac3 100644
--- a/vendor/drupal/console-en/translations/generate.plugin.rules.action.yml
+++ b/vendor/drupal/console-en/translations/generate.plugin.rules.action.yml
@@ -1,5 +1,5 @@
 description: 'Generate a plugin rule action'
-help: 'The <info>generate:plugin:rulesaction</info> command helps you generate a new plugin rule action.'
+help: 'The <info>generate:plugin:rules:action</info> command helps you generate a new plugin rule action.'
 welcome: 'Welcome to the Drupal Plugin Rules Action generator'
 options:
   module: common.options.module
diff --git a/console/language/console-en/translations/generate.plugin.rules.action.yml b/vendor/drupal/console-en/translations/generate.plugin.rules.condition.yml
similarity index 53%
rename from console/language/console-en/translations/generate.plugin.rules.action.yml
rename to vendor/drupal/console-en/translations/generate.plugin.rules.condition.yml
index aa5d942af0b3a875195f9a6b02129c4fa270570d..33299902833cf7a1eff63d8700928fcd06e0f029 100644
--- a/console/language/console-en/translations/generate.plugin.rules.action.yml
+++ b/vendor/drupal/console-en/translations/generate.plugin.rules.condition.yml
@@ -1,5 +1,5 @@
-description: 'Generate a plugin rule action'
-help: 'The <info>generate:plugin:rulesaction</info> command helps you generate a new plugin rule action.'
+description: 'Generate a plugin rule condition'
+help: 'The <info>generate:plugin:rules:condition</info> command helps you generate a new plugin rule condition.'
 welcome: 'Welcome to the Drupal Plugin Rules Action generator'
 options:
   module: common.options.module
@@ -21,21 +21,12 @@ questions:
   context-label: 'Enter context label'
   context-description: 'Enter context description'
 examples:
-  - description: 'Generate a user rule action plugin specifying the module name, the class, its label, the plugin id, the type, the category and its context'
+  - description: 'Generate a rule condition plugin specifying the module name, the class, its label, the plugin id, the type, the category and its context'
     execution: |
-      drupal generate:plugin:rules:action \
+      drupal generate:plugin:rules:condition \
         --module="modulename" \
         --class="DefaultAction" \
         --label="Default Action" \
-        --plugin-id="default_action" \
+        --plugin-id="default_condition" \
         --category="Action category" \
         --context='"name":"user", "type":"entity:user", "label":"Context label", "description":"Context description"'
-  - description: 'Generate a entity rule action plugin specifying the module name, the class, its label, the plugin id, the type, the category and its context'
-    execution: |
-      drupal generate:plugin:rules:action \
-        --module="modulename" \
-        --class="DefaultAction" \
-        --label="Default Action" \
-        --plugin-id="default_action" \
-        --category="Action category" \
-        --context='"entity":"node", "type":"entity", "label":"Context label", "description":"Context description"'
diff --git a/vendor/drupal/console-en/translations/generate.plugin.rules.dataprocessor.yml b/vendor/drupal/console-en/translations/generate.plugin.rules.dataprocessor.yml
new file mode 100644
index 0000000000000000000000000000000000000000..3896ddb95e41b3be3cf02c26fe0fbb066b8e75d7
--- /dev/null
+++ b/vendor/drupal/console-en/translations/generate.plugin.rules.dataprocessor.yml
@@ -0,0 +1,24 @@
+description: 'Generate a plugin rule dataprocessor'
+help: 'The <info>generate:plugin:rules:dataprocessor</info> command helps you generate a new Plugin rule dataprocessor.'
+welcome: 'Welcome to the Drupal Plugin Rules Dataprocessor generator'
+options:
+  module: common.options.module
+  class: 'Plugin class name'
+  label: 'Plugin label'
+  plugin-id: 'Plugin id'
+  category: 'Plugin category'
+  context: 'Plugin context'
+  type: 'Dataprocessor Type (user or node)'
+questions:
+  module: 'Enter the module name'
+  class: 'Enter the plugin class name'
+  label: 'Enter the plugin label'
+  plugin-id: 'Enter the plugin id'
+examples:
+  - description: 'Generate a user rule dataprocessor plugin specifying the module name, the class, its label, the plugin id, the type, the category and its context'
+    execution: |
+      drupal generate:plugin:rules:dataprocessor  \
+        --module="modulename"  \
+        --class="DefaultDataprocessor"  \
+        --label="Default dataprocessor"  \
+        --plugin-id="default_dataprocessor"  \
diff --git a/vendor/drupal/console-en/translations/generate.plugin.validationconstraint.yml b/vendor/drupal/console-en/translations/generate.plugin.validationconstraint.yml
new file mode 100644
index 0000000000000000000000000000000000000000..0727ee42ec6098ce32ef2cd3335dd20a75933b7e
--- /dev/null
+++ b/vendor/drupal/console-en/translations/generate.plugin.validationconstraint.yml
@@ -0,0 +1,29 @@
+description: 'Generate a validation constraint plugin.'
+help: 'The <info>generate:plugin:validationconstraint</info> command helps you generate a new validation constraint plugin.'
+welcome: 'Welcome to the Drupal Validation Constraint Plugin generator'
+options:
+  class: 'Plugin class name'
+  label: 'Plugin label'
+  plugin-id: 'Plugin id'
+  hook: 'Generate hook to validate a field'
+  bundle: 'Bundle'
+  field-id: 'Field id'
+questions:
+  class: 'Enter the plugin class name'
+  label: 'Enter the plugin label'
+  plugin-id: 'Enter the plugin id'
+  hook: 'Do you want to generate a hook to validate a field?'
+  bundle: 'Enter entity bundle'
+  field-id: 'Enter field id'
+examples:
+  - description: 'Generate a validation constraint plugin specifying the module name, the class, its label, the plugin id, the entity bundle and the field id'
+    execution: |
+      drupal generate:plugin:validationconstraint  \
+        --module="modulename" \
+        --class="ExampleConstraint" \
+        --label="Example validation constraint" \
+        -plugin-id="example_validation_constraint" \
+        --hook \
+        --field-id="field_exmaple_id" \
+        --bundle="entity_example_bundle" \
+        --no-interaction
diff --git a/vendor/drupal/console-en/translations/generate.plugin.views.field.yml b/vendor/drupal/console-en/translations/generate.plugin.views.field.yml
index 5d8675471385e9a3ae5ed1c973baf3c2e50d0dc3..0750835e41d2ca0280605bfe54ff416abc2f65f1 100644
--- a/vendor/drupal/console-en/translations/generate.plugin.views.field.yml
+++ b/vendor/drupal/console-en/translations/generate.plugin.views.field.yml
@@ -3,15 +3,16 @@ help: 'The <info>generate:plugin:views:field</info> command helps you generate a
 welcome: 'Welcome to the Drupal Plugin View Field generator'
 options:
   module: 'The Module name.'
-  class: 'Views plugin field class name'
-  title: 'Views plugin field title'
-  description: 'Views plugin field description'
+  fields: 'Fields definition (class name, title and description).'
 questions:
   module: 'Enter the module name'
   class: 'Enter the views plugin field class name'
   title: 'Enter the views plugin field title'
   description: 'Enter the views plugin field description'
   description_default: 'My awesome custom views field plugin.'
+  field-add: 'Do you want to add another field?'
+messages:
+  views-data-already-implemented: 'The hook views data was already implemented in module "%s". Please, merge the code manually'
 examples:
   - description: 'Generate a custom view field plugin specifying the module name, the class, a title and its description'
     execution: |
diff --git a/vendor/drupal/console-en/translations/generate.service.yml b/vendor/drupal/console-en/translations/generate.service.yml
index 567907b14b50c4121fc787b3a460fa2b27d04784..bbf1cf3a55a4f67616b963293810cf8419c417ab 100644
--- a/vendor/drupal/console-en/translations/generate.service.yml
+++ b/vendor/drupal/console-en/translations/generate.service.yml
@@ -7,6 +7,7 @@ options:
   class: 'Class name'
   interface: 'Interface'
   interface-name: 'Interface name'
+  logger-channel: 'Logger channel'
   services: 'Load services from the container.'
   path-service:  'Path'
 questions:
@@ -15,6 +16,7 @@ questions:
   class: 'Enter the Class name'
   interface: 'Create an interface'
   interface-name: 'Enter the interface name'
+  logger-channel: 'Create a logger channel'
   services: 'Enter your service'
   path-service: 'Enter the path for the services'
 messages:
diff --git a/vendor/drupal/console-en/translations/generate.site.alias.yml b/vendor/drupal/console-en/translations/generate.site.alias.yml
index ca3a7c179db84c6b2456d6d07472b2c729cfabb7..8ca417980d5aa2abf8ad7e8784afd0684040733a 100644
--- a/vendor/drupal/console-en/translations/generate.site.alias.yml
+++ b/vendor/drupal/console-en/translations/generate.site.alias.yml
@@ -8,7 +8,8 @@ options:
   host: 'The ip/domain name of the remote system. Not required on local sites.'
   port: 'The port to use when connecting via ssh.'
   user: 'The username to use when connecting via ssh.'
-  extra-options: 'Used only when the target requires extra options, such as alternative authentication method and/or alternative identity file.'
+  drupal-console-binary: 'The name of your drupal console binary. By default is "drupal"'
+  extra-options: 'Used only when the target requires extra options, such as tty option and/or alternative authentication method and/or alternative identity file.'
   site-uri: 'Drupal uri (for multi-sites).'
   directory: 'Directory to store the generated site alias.'
   site: 'Use local site as destination.'
@@ -20,6 +21,22 @@ questions:
   host: 'Enter the ip/domain name of the remote system.'
   port: 'Enter the port to use when connecting via ssh.'
   user: 'Enter the username to use when connecting via ssh.'
+  drupal-console-binary: 'Enter the name of your drupal console binary'
   extra-options: 'Select or enter a valid extra option.'
   site-uri: 'Enter the Drupal uri (for multi-sites).'
   directory: 'Select the directory to store the generated site alias.'
+examples:
+  - description: 'Generate site alias to connect with ssh using tty as extra-option'
+    execution: |
+      drupal generate:site:alias  \
+        --name="demo"  \
+        --environment="dev"  \
+        --type="ssh" \
+        --composer-root="/path/to/remote/project" \
+        --site-uri="default" \
+        --host="hostName/domain" \
+        --user="userName" \
+        --port="port" \
+        --drupal-console-binary="drupal" \
+        --extra-options="-tt" \
+        --directory="/Users/hjuarez/drupalSq/console/"
diff --git a/vendor/drupal/console-en/translations/generate.theme.setting.yml b/vendor/drupal/console-en/translations/generate.theme.setting.yml
new file mode 100644
index 0000000000000000000000000000000000000000..497218b63828d3ef035ace6d80176d5b65651425
--- /dev/null
+++ b/vendor/drupal/console-en/translations/generate.theme.setting.yml
@@ -0,0 +1,30 @@
+description: 'Generate a setting configuration theme'
+help: 'The <info>generate:theme:setting</info> command helps you generates a config YML file.'
+welcome: 'Welcome to the Drupal theme setting generator'
+options:
+  theme: 'The theme name'
+  theme-path: 'The path of the theme'
+  favicon: 'Favicon supplied by the theme'
+  comment-user-picture: 'User pictures in comments'
+  comment-user-verification: 'User verification status in comments'
+  node-user-picture: 'User pictures in posts'
+  logo: 'Logo supplied by the theme'
+  merge-existing-file: 'Merge the configuration with the existing file'
+questions:
+  theme: 'Enter the new theme name'
+  theme-path: 'Add the path of the theme'
+  favicon: 'Use the favicon supplied by the theme'
+  comment-user-picture: 'Use the user pictures in comments'
+  comment-user-verification: 'Use the user verification status in comments'
+  node-user-picture: 'Use the user pictures in posts'
+  logo: 'Use the logo supplied by the theme'
+  merge-existing-file: 'Merge the configuration with the existing file'
+suggestions:
+  my-awesome-theme: 'My Awesome theme'
+  other: 'Other'
+warnings:
+  module-unavailable: 'Warning The following modules are not available in your local environment "%s"'
+errors:
+  theme: 'The name theme "%s" is invalid.'
+  directory-notexists: 'The target directory "%s" not exists.'
+examples:
diff --git a/vendor/drupal/console-en/translations/generate.theme.yml b/vendor/drupal/console-en/translations/generate.theme.yml
index 9b54abd9430995c87813164b3a975b8d9b1697ec..658040127f50b38d5bbf913281273bdb0b6d8ce2 100644
--- a/vendor/drupal/console-en/translations/generate.theme.yml
+++ b/vendor/drupal/console-en/translations/generate.theme.yml
@@ -10,6 +10,7 @@ options:
   package: 'Theme package'
   composer: 'Add a composer.json file'
   base-theme: 'Base theme (i.e. classy, stable)'
+  base-theme-regions: 'Add the default regions of the chosen base theme'
   global-library: 'Global styling library name'
   libraries: 'Libraries'
   regions: Regions
diff --git a/vendor/drupal/console-en/translations/init.yml b/vendor/drupal/console-en/translations/init.yml
index d2bc26a8aa6a46d951df57f86c5fd488649918a6..66c8b1cdf3d2162581437124c4e701e6f23e7604 100644
--- a/vendor/drupal/console-en/translations/init.yml
+++ b/vendor/drupal/console-en/translations/init.yml
@@ -11,7 +11,21 @@ questions:
   temp: 'Enter temporary file path'
   chain: 'Copy chain files examples'
   sites: 'Copy site alias files examples'
-  temp: 'Enter temporary file path'
   learning: 'Shows information for learning purposes?'
   generate-inline: 'Show inline representation of the executed command?'
   generate-chain: 'Show chain representation of the executed command?'
+  statistics: 'Allow to collect and send this information to drupalConsole server?'
+messages:
+  statistics: |
+      Help us improve the Drupal Console project, providing information about how you use the application.
+      The colleted information at "%s", would be:
+
+      - Used language
+      - Executed command
+      - Generated lines of code
+
+      You could read about our privacy policy at http://drupalconsole.com/privacy.
+  statistics-disable: |
+      You can stop sending information using the following command:
+
+      drupal settings:set statistics.enabled false
diff --git a/vendor/drupal/console-en/translations/migrate.rollback.yml b/vendor/drupal/console-en/translations/migrate.rollback.yml
index 36666266ff2bc7a57564e189788a4b0daa811fbd..13bdae8e59386d74573401b003592b364d41a2fb 100644
--- a/vendor/drupal/console-en/translations/migrate.rollback.yml
+++ b/vendor/drupal/console-en/translations/migrate.rollback.yml
@@ -3,4 +3,4 @@ arguments:
     id: 'Migration id(s)'
 messages:
     not-available: 'Migration Id "%s" is invalid.Skipping'
-    processing: 'Rollback "%s" completed'
\ No newline at end of file
+    processing: 'Rollback "%s" completed'
diff --git a/vendor/drupal/console-en/translations/module.download.yml b/vendor/drupal/console-en/translations/module.download.yml
index 03e3c478ef2182723454184bf71aace154c854f8..f12d21d88cab0da1760951bbae1179e2439bd266 100644
--- a/vendor/drupal/console-en/translations/module.download.yml
+++ b/vendor/drupal/console-en/translations/module.download.yml
@@ -4,8 +4,6 @@ arguments:
 options:
   latest: 'Default to download most recent version'
   path: 'The path of the contrib project'
-  composer: 'Option to point out that the module will be downloaded, managed & installed by Composer'
-  unstable: 'Module unstable'
 questions:
   path: 'Enter the contrib project Path'
 messages:
@@ -16,8 +14,6 @@ messages:
   select-release: 'Please select your favorite release'
   outside-drupal: 'Drupal root can''t be determined. Use --root to set the destination, current folder will be used instead of.'
   error-creating-folder: 'Error creating folder "%s", please check your permissions'
-  no-composer-repo: 'Please, configure Composer in ~/.console/config.yml'
-  composer: 'Module "%s" was downloaded successfully using Composer'
 examples:
   - description: 'Download module specifying module name and its path'
     execution: |
diff --git a/vendor/drupal/console-en/translations/module.uninstall.yml b/vendor/drupal/console-en/translations/module.uninstall.yml
index 3b6d6a822590dfd4f3825b98454defb4286b7b9e..4b6b8d49760b2480a1b73f9947ce332944c19548 100644
--- a/vendor/drupal/console-en/translations/module.uninstall.yml
+++ b/vendor/drupal/console-en/translations/module.uninstall.yml
@@ -1,9 +1,10 @@
 description: 'Uninstall module or modules in the application'
+arguments:
+  module: 'Module or modules to be uninstalled should be separated by a space'
 questions:
   module: 'Module name (press <return> to stop adding modules)'
   invalid-module: 'Invalid module "%s"'
 options:
-  module: 'Module or modules to be uninstalled should be separated by a space'
   force: 'Do you want to ignore dependencies and forcefully uninstall the module?'
   composer: 'Uninstalls the module using Composer'
 messages:
diff --git a/vendor/drupal/console-en/translations/multisite.new.yml b/vendor/drupal/console-en/translations/multisite.new.yml
index 0f361ba2a3d89dd2c09842fa10ce0cc687aff970..a59711f77947512da9e30e1908187156cac0a731 100644
--- a/vendor/drupal/console-en/translations/multisite.new.yml
+++ b/vendor/drupal/console-en/translations/multisite.new.yml
@@ -25,4 +25,4 @@ messages:
 examples:
   - description: 'Set up files for a multisite install specifying destination path and uri'
     execution: |
-      drupal multisite:new  vendor/newsite http://mysite.example.com
+      drupal multisite:new  newsite http://newsite.com
diff --git a/vendor/drupal/console-en/translations/queue.run.yml b/vendor/drupal/console-en/translations/queue.run.yml
index 0411433d816e165227b48f4690ba5f0bc5484831..58e299a177669c64920773e068ab5827ffae469f 100644
--- a/vendor/drupal/console-en/translations/queue.run.yml
+++ b/vendor/drupal/console-en/translations/queue.run.yml
@@ -6,4 +6,3 @@ messages:
   failed: '"%s" failed: "%s".'
   missing-name: 'Provide a valid queue name.'
   invalid-name: 'Invalid queue name "%s" provided.'
-
diff --git a/vendor/drupal/console-en/translations/router.rebuild.yml b/vendor/drupal/console-en/translations/router.rebuild.yml
index bc0fbc17e361b12e8afe2034c6ad74805287e2f8..c11c79e7bea1471c1a56ce634b3eedd2fafb2aee 100644
--- a/vendor/drupal/console-en/translations/router.rebuild.yml
+++ b/vendor/drupal/console-en/translations/router.rebuild.yml
@@ -4,6 +4,7 @@ arguments:
 messages:
   rebuilding: 'Rebuilding routes, wait a moment please'
   completed: 'Done rebuilding route(s).'
+  error-rebuild: 'Error to rebuild route(s).'
 examples:
   - description: 'Rebuild routes'
     execution:
diff --git a/vendor/drupal/console-en/translations/self-update.yml b/vendor/drupal/console-en/translations/self-update.yml
index 72014fd3a1b00c7f602a4dc6af4ee1574b8f1d07..755af9ec424798f4e55ffdb30adc2058a7dcc8f8 100644
--- a/vendor/drupal/console-en/translations/self-update.yml
+++ b/vendor/drupal/console-en/translations/self-update.yml
@@ -17,4 +17,3 @@ messages:
    Or you can switch to a Phar install recommended
    composer global remove drupal/console
    curl https://drupalconsole.com/installer -L -o drupal.phar
-
diff --git a/vendor/drupal/console-en/translations/service.override.yml b/vendor/drupal/console-en/translations/service.override.yml
new file mode 100644
index 0000000000000000000000000000000000000000..e421a5cbba57ad25cc389eaa76d366bf68ac59f2
--- /dev/null
+++ b/vendor/drupal/console-en/translations/service.override.yml
@@ -0,0 +1,26 @@
+description: 'Override services value.'
+questions:
+    name: 'Enter service name'
+    key: 'Enter the service key'
+    value: 'Enter the "%s" service value'
+arguments:
+    name: 'Service name'
+options:
+    key: 'Key'
+    value: 'Value'
+messages:
+    service-name: 'Service name'
+    service-key: 'Service key'
+    original: 'Original Value'
+    updated: 'Override Value'
+    invalid-name: 'Service object "%s" does not exist.'
+    invalid-config-file: 'Service file does not exist.'
+examples:
+    - description: "Override options from twig.config service"
+      execution: |
+        drupal service:override twig.config \
+          --key='debug' \
+          --key='cache' \
+          --value='true' \
+          --value='false' \
+          --no-interaction
diff --git a/vendor/drupal/console-en/translations/site.install.yml b/vendor/drupal/console-en/translations/site.install.yml
index a831470393659177065c1b6e545bb26a91068120..bcfd83fac2af32acfebbadfcd8facadaffb4ded2 100644
--- a/vendor/drupal/console-en/translations/site.install.yml
+++ b/vendor/drupal/console-en/translations/site.install.yml
@@ -2,6 +2,7 @@ description: 'Install a Drupal project'
 arguments:
   profile: 'Drupal Profile to be installed'
   langcode: 'Drupal language'
+  db-url: 'Use Database url to the installation instead of using the options. (Sqlite is not supported)'
   db-type: 'Drupal Database type to be used in install'
   db-file: 'Drupal Database file to be used in install'
   site-name: 'Drupal site name'
@@ -26,9 +27,12 @@ messages:
   installed: 'Your Drupal 8 installation was completed successfully'
   using-current-database: 'Using "%s" database with name "%s" and user "%s"'
   already-installed: 'Drupal is already installed, try dropping your database executing database:drop or install executing site:install --force --no-interaction'
+  connection-failed: 'Connection to the database failed, please check your settings file that has the correct username, password, database, host, port configured.'
   sites-backup: 'The sites.php file has temporarily been renamed to backup.sites.php while Drupal installs.'
   sites-restore: 'The backup of sites.php has been been restored to sites.php.'
   invalid-multisite: 'Invalid multisite, please create multisite using command drupal multisite:new "%s" "%s"'
+  invalid-db-url: 'Invalid database url, please provide a valid url like "mysql://dbUser:dbPass@dbHost/dbName"'
+  invalid-url-driver: 'Invalid database type, the Sqlite driver is not supported'
 examples:
   - description: 'Install a drupal project specifying installation type, language code, database configuration, site name, site email and admin credential settings'
     execution: |
@@ -45,4 +49,12 @@ examples:
         --account-name="admin"  \
         --account-mail="admin@example.com"  \
         --account-pass="p455w0rd"
-
+  - description: 'Install a drupal project using a mysql url'
+    execution: |
+      drupal site:install  standard  mysql://dbUser:dbPass@dbHost/dbName \
+        --langcode="en"  \
+        --site-name="Drupal 8"  \
+        --site-mail="admin@example.com"  \
+        --account-name="admin"  \
+        --account-mail="admin@example.com"  \
+        --account-pass="p455w0rd"
diff --git a/vendor/drupal/console-en/translations/site.status.yml b/vendor/drupal/console-en/translations/site.status.yml
index 8d8dffde9951b656461ee65a566a7a6bf41e1505..21d661c506a9ff356b9f44e5af0373e5850e2841 100644
--- a/vendor/drupal/console-en/translations/site.status.yml
+++ b/vendor/drupal/console-en/translations/site.status.yml
@@ -4,14 +4,14 @@ messages:
   system: 'System Info'
   hash-salt: 'Hash salt'
   console: 'Drupal Console'
-  database: 'Database connection'
+  database: 'Database'
   driver: 'Driver'
   host: 'Host'
   port: 'Port'
-  username: 'Username'
-  password: 'Password'
+  username: 'DB Username'
+  password: 'DB Password'
   theme: 'Themes'
-  connection: 'Connection'
+  connection: 'Connection URL'
   theme-default: 'Default theme'
   theme-admin: 'Admin theme'
   directory: 'Directories'
diff --git a/vendor/drupal/console-en/translations/snippet.yml b/vendor/drupal/console-en/translations/snippet.yml
new file mode 100644
index 0000000000000000000000000000000000000000..be650425c6691da12c7e74395c7e3d3ce5b81ee2
--- /dev/null
+++ b/vendor/drupal/console-en/translations/snippet.yml
@@ -0,0 +1,16 @@
+description: 'Runs PHP code'
+help: 'Execute a PHP code'
+options:
+  file: 'Path to the file'
+  code: 'Code to execute'
+  show-code: 'Show code after execute'
+errors:
+  invalid-options: 'You need to provide the file option'
+  invalid-file: 'The file "%s" does not exist.'
+examples:
+  - description: 'Run using a file.'
+    execution: 'drupal snippet --file=/path/to/file'
+  - description: 'Passing code as option.'
+    execution: 'drupal snippet --code=codeToExecute'
+  - description: 'Show code executed'
+    execution: 'drupal snippet --show-code --file=/path/to/file'
diff --git a/vendor/drupal/console-en/translations/theme.download.yml b/vendor/drupal/console-en/translations/theme.download.yml
index 6fff4d5d08e98102f3e5be37ae34826448e59ed7..31b22ec63c6ccd377c8e866b4c23457c852eebf8 100644
--- a/vendor/drupal/console-en/translations/theme.download.yml
+++ b/vendor/drupal/console-en/translations/theme.download.yml
@@ -2,8 +2,6 @@ description: 'Download theme in application'
 arguments:
   version: 'Theme version i.e 1.x-dev'
   theme: 'the Theme name'
-options:
-  composer: 'Use --composer option for manage the theme download with Composer'
 messages:
   no-releases: 'There aren''t any releases for theme "%s"'
   getting-releases: 'Getting releases for theme "%s"'
diff --git a/vendor/drupal/console-en/translations/theme.install.yml b/vendor/drupal/console-en/translations/theme.install.yml
index 44605a78d300c45a71707b4c3939725e01787bcf..b5740e541ced070e62922f6f493dfa2b5d468fd5 100644
--- a/vendor/drupal/console-en/translations/theme.install.yml
+++ b/vendor/drupal/console-en/translations/theme.install.yml
@@ -19,6 +19,10 @@ messages:
   theme-default-success: 'The "%s" theme has been installed successfully as default theme'
   disabled-themes: 'Only uninstalled themes will be listed in autocomplete'
   invalid-theme-default: 'Option default is only valid for one theme'
+  getting-releases: 'Getting releases for theme "%s"'
+  select-release: 'Please select your favorite release'
+  downloading: 'Downloading theme "%s" release "%s"'
+  downloaded: 'Module "%s" version "%s" was downloaded successfully at "%s"'
 examples:
   - description: 'Install theme specifying the name'
     execution: |
diff --git a/vendor/drupal/console-en/translations/update.execute.yml b/vendor/drupal/console-en/translations/update.execute.yml
index 590a12153ca536238042ac34ec9bb76f180a558b..7f658768bf6a8df24e2e81bff9309879fb2ea231 100644
--- a/vendor/drupal/console-en/translations/update.execute.yml
+++ b/vendor/drupal/console-en/translations/update.execute.yml
@@ -1,13 +1,20 @@
 description: 'Execute a specific Update N function in a module, or execute all'
+questions:
+  update: 'Do you want to run the specified pending updates?'
+  post-update: 'Do you want to run the specified pending post updates?'
 arguments:
   module: 'Module name'
   update-n: 'Specific Update N function to be executed'
 messages:
   no-module-updates: 'There aren''t updates available for module "%s"'
   executing-update: 'Executing update function "%s" of module "%s"'
+  executing-post-update: 'Executing post update function "%s" of module "%s"'
   module-update-function-not-found: 'Module "%s" doesn''t have a function update for "%s"'
   executing-required-previous-updates: 'Executing required previous updates'
   no-pending-updates: 'There aren''t updates available'
+  no-pending-post-updates: 'There aren''t post updates available'
+  pending-post-updates: 'There are the following post updates available:'
+  pending-updates: 'There are the following updates available:'
 examples:
   - description: 'Execute all updates'
     execution: |
diff --git a/vendor/drupal/console-en/translations/user.login.url.yml b/vendor/drupal/console-en/translations/user.login.url.yml
index 174e98e2201f90647e97d31fc4add1ed91261cc9..7c3f3e20d3919b68ba6f4fcb979a64fd88333b06 100644
--- a/vendor/drupal/console-en/translations/user.login.url.yml
+++ b/vendor/drupal/console-en/translations/user.login.url.yml
@@ -11,4 +11,4 @@ examples:
   - description: 'Get one time login url for user id 10'
     execution: drupal user:login:url  10
   - description: 'Get one time login url for username jmolivas'
-    execution: drupal user:login:url jmolivas
\ No newline at end of file
+    execution: drupal user:login:url jmolivas
diff --git a/vendor/drupal/console-en/translations/user.unblock.yml b/vendor/drupal/console-en/translations/user.unblock.yml
new file mode 100644
index 0000000000000000000000000000000000000000..4ccccac409f8a4ea9c757642089048f5362d1857
--- /dev/null
+++ b/vendor/drupal/console-en/translations/user.unblock.yml
@@ -0,0 +1,21 @@
+description: 'Unblock a specific user.'
+help: 'The <info>user:unblock</info> command helps you to unblock a specific user.'
+welcome: 'Welcome to the Drupal user unblock'
+options:
+  user: 'User name/id'
+questions:
+  invalid-user: 'Invalid user name/id "%s", user id must be an integer'
+  user: 'Enter User name/id'
+messages:
+  unblock-successful: 'User "%s" was unblocked.'
+warnings:
+  unblocked-user: 'User "%s" is already unblocked'
+errors:
+  invalid-user: 'Invalid user name/id "%s"'
+examples:
+  - description: 'Unblock user providing the user id'
+    execution: |
+      drupal user:unblock 2
+  - description: 'Unblock user providing the user name'
+    execution: |
+      drupal user:unblock johndoe
diff --git a/vendor/drupal/console-extend-plugin/.gitignore b/vendor/drupal/console-extend-plugin/.gitignore
index 3423e54e58a2b8ee9b22f2ff55c924b267c1002d..99bfddd3366ee3d3d3cd20ae08bbdd6501809a7d 100644
--- a/vendor/drupal/console-extend-plugin/.gitignore
+++ b/vendor/drupal/console-extend-plugin/.gitignore
@@ -2,15 +2,9 @@
 /.rules
 
 # Composer
-.composer.lock
+composer.lock
 /vendor
 
-# Binaries
-/box.phar
-/console.phar
-/composer.phar
-/drupal.phar
-/drupal.phar.version
 
 # Test
 /phpunit.xml
diff --git a/vendor/drupal/console-extend-plugin/composer.json b/vendor/drupal/console-extend-plugin/composer.json
index 1aabc9f301fe7958c9b98e75f0788821cc43cf27..1ebea3551f6bfe401f0a24caede45a3ed5b5c7da 100644
--- a/vendor/drupal/console-extend-plugin/composer.json
+++ b/vendor/drupal/console-extend-plugin/composer.json
@@ -13,9 +13,10 @@
         "class": "Drupal\\Console\\Composer\\Plugin\\Extender"
     },
     "require": {
-        "composer-plugin-api": "^1.0",
-        "symfony/yaml": "~2.7|~3.0",
-        "symfony/finder": "~2.7|~3.0"
+        "composer-plugin-api": "^1.0 || ^2.0",
+        "composer/installers": "^1.2",
+        "symfony/yaml": "~3.0|^4.4",
+        "symfony/finder": "~3.0|^4.4"
     },
     "minimum-stability": "dev",
     "prefer-stable": true,
diff --git a/vendor/drupal/console-extend-plugin/src/DrupalConsoleInstaller.php b/vendor/drupal/console-extend-plugin/src/DrupalConsoleInstaller.php
new file mode 100644
index 0000000000000000000000000000000000000000..b410b5e364577b192d762766add835b3ff31ebdf
--- /dev/null
+++ b/vendor/drupal/console-extend-plugin/src/DrupalConsoleInstaller.php
@@ -0,0 +1,19 @@
+<?php
+namespace Drupal\Console\Composer\Plugin;
+
+use Composer\Installers\BaseInstaller;
+
+/**
+ * Class DemoInstaller
+ *
+ * @package Composer\Installers
+ */
+class DrupalConsoleInstaller extends BaseInstaller
+{
+  /**
+   * @var array
+   */
+  protected $locations = array(
+    'console-library' => 'vendor/drupal/{$name}/',
+  );
+}
diff --git a/vendor/drupal/console-extend-plugin/src/Extender.php b/vendor/drupal/console-extend-plugin/src/Extender.php
index 186f3218ed3ffc12ea84f8daebabb2a2f963f608..aacc484fa5d5eaed9511a4b26c33481f573b6722 100644
--- a/vendor/drupal/console-extend-plugin/src/Extender.php
+++ b/vendor/drupal/console-extend-plugin/src/Extender.php
@@ -38,6 +38,11 @@ public function activate(Composer $composer, IOInterface $io)
     {
         $this->composer = $composer;
         $this->io = $io;
+
+      $installer = new Installer($io, $composer);
+
+      $composer->getInstallationManager()->addInstaller($installer);
+
     }
 
     /**
@@ -155,4 +160,20 @@ protected function removeCacheFiles($directory)
             $this->io->write('<info>Cache file can not be deleted</info>');
         }
     }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function deactivate(Composer $composer, IOInterface $io)
+    {
+        // Nothing to deactivate.
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function uninstall(Composer $composer, IOInterface $io)
+    {
+        // Nothing to uninstall.
+    }	
 }
diff --git a/vendor/drupal/console-extend-plugin/src/Installer.php b/vendor/drupal/console-extend-plugin/src/Installer.php
new file mode 100644
index 0000000000000000000000000000000000000000..6fa1bd897a642573c8fdd7ee6161302149491f80
--- /dev/null
+++ b/vendor/drupal/console-extend-plugin/src/Installer.php
@@ -0,0 +1,71 @@
+<?php
+
+namespace Drupal\Console\Composer\Plugin;
+
+use Composer\IO\IOInterface;
+use Composer\Package\PackageInterface;
+use Composer\Installers\Installer as BaseInstaller;
+
+class Installer extends BaseInstaller
+{
+
+  /**
+   * Package types to installer class map
+   *
+   * @var array
+   */
+  private $supportedTypes = array(
+    'drupal' => 'DrupalConsoleInstaller'
+  );
+
+  /**
+   * {@inheritDoc}
+   */
+  public function getInstallPath(PackageInterface $package)
+  {
+    $type = $package->getType();
+    $frameworkType = $this->findFrameworkType($type);
+
+    if ($frameworkType === false) {
+      throw new \InvalidArgumentException(
+        'Sorry the package type of this package is not yet supported.'
+      );
+    }
+
+    $class = 'Drupal\\Console\\Composer\\Plugin\\' . $this->supportedTypes[$frameworkType];
+    $installer = new $class($package, $this->composer, $this->getIO());
+
+    return $installer->getInstallPath($package, $frameworkType);
+  }
+
+  /**
+   * Get the second part of the regular expression to check for support of a
+   * package type
+   *
+   * @param  string $frameworkType
+   * @return string
+   */
+  protected function getLocationPattern($frameworkType)
+  {
+    $pattern = false;
+    if (!empty($this->supportedTypes[$frameworkType])) {
+      $frameworkClass = 'Drupal\\Console\\Composer\\Plugin\\' . $this->supportedTypes[$frameworkType];
+      /** @var BaseInstaller $framework */
+      $framework = new $frameworkClass(null, $this->composer, $this->getIO());
+      $locations = array_keys($framework->getLocations());
+      $pattern = $locations ? '(' . implode('|', $locations) . ')' : false;
+    }
+
+    return $pattern ? : '(\w+)';
+  }
+
+  /**
+   * Get I/O object
+   *
+   * @return IOInterface
+   */
+  private function getIO()
+  {
+    return $this->io;
+  }
+}
diff --git a/vendor/drupal/console/.github/FUNDING.yml b/vendor/drupal/console/.github/FUNDING.yml
new file mode 100644
index 0000000000000000000000000000000000000000..57d82c3f0024aa45c0b3f32df78e6a6ae6e25c1a
--- /dev/null
+++ b/vendor/drupal/console/.github/FUNDING.yml
@@ -0,0 +1,12 @@
+# These are supported funding model platforms
+
+github: # [jmolivas]
+patreon: # Replace with a single Patreon username
+open_collective: drupalconsole 
+ko_fi: # Replace with a single Ko-fi username
+tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
+community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
+liberapay: # Replace with a single Liberapay username
+issuehunt: # Replace with a single IssueHunt username
+otechie: # Replace with a single Otechie username
+custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
diff --git a/vendor/drupal/console/.travis.yml b/vendor/drupal/console/.travis.yml
index c37288a28a1473c5851dbf620b137140822373b7..7006848117733a11859130ef0985fcd8ba4cc415 100644
--- a/vendor/drupal/console/.travis.yml
+++ b/vendor/drupal/console/.travis.yml
@@ -3,42 +3,77 @@ sudo: false
 language: php
 
 php:
-  - 5.5.9
   - 5.6
   - 7.0
   - 7.1
-  - hhvm
+  - 7.2
+  - 7.3
+  - 7.4snapshot
+
+services:
+  - mysql
 
 matrix:
+  include:
+    - php: 5.5.9
+      dist: trusty
   fast_finish: true
   allow_failures:
-    - php: hhvm
-    - php: 7.0
-    - php: 7.1
+    - php: 7.4snapshot
 
 env:
   global:
-    - PROJECT_DIR=/home/project
+    # Paths.
+    - DRUPAL_PATH="$HOME/drupal8"
+    - PATH="$PATH:$DRUPAL_PATH/vendor/bin:$HOME/.composer/vendor/bin"
+
+    # Suppress deprecation handling.
+    #- SYMFONY_DEPRECATIONS_HELPER=disabled
+
+mysql:
+  database: drupal_travis_db
+  username: root
+  encoding: utf8
 
 before_script:
-  - phpenv config-rm xdebug.ini
-  # This fixes a fail when install Drupal.
-  - echo 'sendmail_path = /bin/true' >> ~/.phpenv/versions/$(phpenv version-name)/etc/conf.d/travis.ini
-  - composer self-update
-  - composer install --no-dev
-#  - curl -LSs https://box-project.github.io/box2/installer.php | php
-#  - composer global require drupal/coder:~8.1
+  - phpenv config-rm xdebug.ini || true
+
+  # Set variables.
+  - |
+      if [[ "$TRAVIS_PHP_VERSION" == "5.5.9" ]] || [[ "$TRAVIS_PHP_VERSION" == "5.6" ]]; then
+        export DRUPAL_BRANCH="8.6.x"
+        # PHP 5.5.9 on TravisCI has a Sqlite version that fails
+        # minimum requirements, so we install on MySql instead.
+        export SIMPLETEST_DB="mysql://root:@localhost/drupal_travis_db#drupalconsole"
+        export IMAGEMAGICK_MODULE="drupal/imagemagick:^2"
+      else
+        export DRUPAL_BRANCH="8.8.x"
+        export SIMPLETEST_DB="sqlite://localhost/sites/default/files/.ht.sqlite#drupalconsole"
+        export IMAGEMAGICK_MODULE="drupal/imagemagick:dev-3.x"
+      fi
+
+  # Get Drupal via git, and install it via Composer.
+  - git clone --depth=5 --branch=$DRUPAL_BRANCH http://git.drupal.org/project/drupal.git $DRUPAL_PATH
+  - cd $DRUPAL_PATH
+  - composer install --no-progress --no-suggest
+
+  # Require drupal/console from the source just cloned from GitHub.
+  - cd $TRAVIS_BUILD_DIR
+  - git checkout -b travisci-run-branch
+  - cd $DRUPAL_PATH
+  - |
+      composer config repositories.travisci-run '{"type": "path", "url": "$TRAVIS_BUILD_DIR", "options": {"symlink": false}}'
+  - composer require "drupal/console:dev-travisci-run-branch" --no-progress --no-suggest
 
 script:
-  - if [ -n "${TRAVIS_BUILD_DIR+1}" ]; then PROJECT_DIR=$TRAVIS_BUILD_DIR; fi
-#  - phpunit
-#  - php box.phar build
-#  - php drupal.phar init
-#  - php drupal.phar check
-#  - php drupal.phar site:new drupal8.dev --latest --no-interaction
-#  - cd drupal8.dev
-#  - php ../drupal.phar site:install standard --langcode=en --db-type=sqlite --db-file=sites/default/files/.ht.sqlite --site-name="Drupal 8 Site Install" --site-mail=admin@example.com --account-name=admin --account-mail=admin@example.com --account-pass=admin --no-interaction
-#  - php ../drupal.phar chain --file=$PROJECT_DIR/config/dist/chain/sample.yml
+  # Install Drupal site via drupal/console and show site status.
+  - drupal site:install standard $SIMPLETEST_DB --langcode=en --site-name="Drupal 8 Site Install" --site-mail=admin@example.com --account-name=admin --account-mail=admin@example.com --account-pass=admin --no-interaction
+  - drupal module:install --composer token admin_toolbar "$IMAGEMAGICK_MODULE" --verbose --no-interaction
+  - drupal debug:module
+  - drupal config:override system.image --key=toolkit --value=imagemagick
+  - drupal site:status -v
+#  - cd $DRUPAL_PATH/vendor/drupal/console
+#  - ../../phpunit/phpunit/phpunit
 #  - ~/.composer/vendor/bin/phpcs --warning-severity=0 --standard=~/.composer/vendor/drupal/coder/coder_sniffer/Drupal/ruleset.xml $PROJECT_DIR/drupal8.dev/modules/custom/example
 
 notifications:
diff --git a/vendor/drupal/console/README.md b/vendor/drupal/console/README.md
index f94f86818bbcab8083583601fa5e4b354d36f996..e0dee49aba8448adf075eb26d668c5d17c77e0b5 100644
--- a/vendor/drupal/console/README.md
+++ b/vendor/drupal/console/README.md
@@ -31,20 +31,20 @@ Details of the latest version can be found on the Drupal Console project page un
 All notable changes to this project will be documented in the [releases page](https://github.com/hechoendrupal/DrupalConsole/releases)
 
 ## Documentation
-The most up-to-date documentation can be found at [http://docs.drupalconsole.com/](http://docs.drupalconsole.com/).
+The most up-to-date documentation can be found at [https://drupalconsole.com/docs/](https://drupalconsole.com/docs/).
 
-More information about using this project at the [official documentation](http://docs.drupalconsole.com/en/using/project.html).
+More information about using this project at the [official documentation](https://drupalconsole.com/docs/en/using/project).
 
 ## Required PHP Version
 PHP 5.5.9 or higher is required to use the Drupal Console application.
 
 ## Download 
 
-[Install Drupal Console Using Composer](https://docs.drupalconsole.com/en/getting/composer.html)
+[Install Drupal Console Using Composer](https://drupalconsole.com/docs/en/getting/composer)
 
-[Install Drupal Console Launcher](https://docs.drupalconsole.com/en/getting/launcher.html)
+[Install Drupal Console Launcher](https://drupalconsole.com/docs/en/getting/launcher)
 
-[Installing Drupal Console on Windows](https://docs.drupalconsole.com/en/getting/windows.html)
+[Installing Drupal Console on Windows](https://drupalconsole.com/docs/en/getting/windows)
 
 ## Run
 Using the DrupalConsole Launcher
@@ -66,8 +66,8 @@ bin/drupal
 You can ask for support at Drupal Console gitter chat room [http://bit.ly/console-support](http://bit.ly/console-support).
 
 ## Contribute to Drupal Console
-* [Getting the project](https://docs.drupalconsole.com/en/contributing/getting-the-project.html)
-* [Running the project](https://docs.drupalconsole.com/en/contributing/running-the-project.html)
+* [Getting the project](https://drupalconsole.com/docs/en/getting/project)
+* [Using the project](https://drupalconsole.com/docs/en/using/project)
 
 ## Enabling Autocomplete
 ```
@@ -92,10 +92,6 @@ ln -s ~/.console/drupal.fish ~/.config/fish/completions/drupal.fish
 
 ## Supporting Organizations
 
-[![weKnow](https://www.drupal.org/files/weKnow-logo_5.png)](http://weknowinc.com)
-
-[![Anexus](https://www.drupal.org/files/anexus-logo.png)](http://www.anexusit.com/)
-
 [All supporting organizations](https://drupalconsole.com/supporting-organizations)
 
 > Drupal is a registered trademark of Dries Buytaert.
diff --git a/vendor/drupal/console/autoload.local.php.dist b/vendor/drupal/console/autoload.local.php.dist
index d73d40900b4449f504886ec2d727ecd1bde58cb9..6b3d33a79d20bc7ca42be8a913ce53d4290c9791 100644
--- a/vendor/drupal/console/autoload.local.php.dist
+++ b/vendor/drupal/console/autoload.local.php.dist
@@ -1,3 +1,3 @@
 <?php
 
-$autoloaders = [ getcwd() . '/vendor/autoload.php' ];
+$autoloaders = [ getcwd() . '/../../autoload.php', getcwd() . '/vendor/autoload.php' ];
diff --git a/vendor/drupal/console/autoload.php.dist b/vendor/drupal/console/autoload.php.dist
index 5e948bf612bdbc5a6251873dae6690b473417376..754e0a5f5761d43c890439a12d79fee359bdc958 100644
--- a/vendor/drupal/console/autoload.php.dist
+++ b/vendor/drupal/console/autoload.php.dist
@@ -1,6 +1,6 @@
 <?php
 
-$loader = require __DIR__ . '/vendor/autoload.php';
+$loader = require __DIR__ . '/../../autoload.php';
 
 $loader->setPsr4('Drupal\\Console\\Test\\', __DIR__ . '/Test');
 
diff --git a/vendor/drupal/console/composer.json b/vendor/drupal/console/composer.json
index c27bb9dee6f838070b556bad234206861fae544c..388f4735e01cf50b6da5ed21cbb1eae78e128e45 100644
--- a/vendor/drupal/console/composer.json
+++ b/vendor/drupal/console/composer.json
@@ -1,33 +1,38 @@
 {
     "name": "drupal/console",
     "description": "The Drupal CLI. A tool to generate boilerplate code, interact with and debug Drupal.",
-    "keywords": ["Drupal", "Console", "Development", "Symfony"],
+    "keywords": [
+        "Drupal",
+        "Console",
+        "Development",
+        "Symfony"
+    ],
     "homepage": "http://drupalconsole.com/",
     "type": "library",
     "license": "GPL-2.0-or-later",
     "authors": [
         {
-            "name":      "David Flores",
-            "email":     "dmousex@gmail.com",
-            "homepage":  "http://dmouse.net"
+            "name": "David Flores",
+            "email": "dmousex@gmail.com",
+            "homepage": "http://dmouse.net"
         },
         {
-            "name":      "Jesus Manuel Olivas",
-            "email":     "jesus.olivas@gmail.com",
-            "homepage":  "http://jmolivas.com"
+            "name": "Jesus Manuel Olivas",
+            "email": "jesus.olivas@gmail.com",
+            "homepage": "http://jmolivas.com"
         },
         {
-            "name":      "Eduardo Garcia",
-            "email":     "enzo@enzolutions.com",
-            "homepage":  "http://enzolutions.com/"
+            "name": "Eduardo Garcia",
+            "email": "enzo@enzolutions.com",
+            "homepage": "http://enzolutions.com/"
         },
         {
-            "name":      "Omar Aguirre",
-            "email":     "omersguchigu@gmail.com"
+            "name": "Omar Aguirre",
+            "email": "omersguchigu@gmail.com"
         },
         {
-            "name":      "Drupal Console Contributors",
-            "homepage":  "https://github.com/hechoendrupal/drupal-console/graphs/contributors"
+            "name": "Drupal Console Contributors",
+            "homepage": "https://github.com/hechoendrupal/drupal-console/graphs/contributors"
         }
     ],
     "support": {
@@ -36,24 +41,25 @@
         "docs": "https://docs.drupalconsole.com/"
     },
     "require": {
-        "php": "^5.5.9 || ^7.0",
-        "alchemy/zippy": "0.4.3",
+        "php": ">=7.0.8",
+        "alchemy/zippy": "~0.4",
         "composer/installers": "~1.0",
         "doctrine/annotations": "^1.2",
         "doctrine/collections": "^1.3",
-        "drupal/console-core": "1.8.0",
-        "drupal/console-extend-plugin": "~0",
-        "guzzlehttp/guzzle": "~6.1",
+        "drupal/console-core": "1.9.7",
+        "drupal/console-extend-plugin": "~0.9.5",
         "psy/psysh": "0.6.* || ~0.8",
-        "symfony/css-selector": "~2.8|~3.0",
-        "symfony/dom-crawler": "~2.8|~3.0",
-        "symfony/http-foundation": "~2.8|~3.0"
+        "symfony/css-selector": "~3.0|~4.0",
+        "symfony/dom-crawler": "~3.0|~4.0",
+        "symfony/http-foundation": "~3.0|~4.0"
     },
     "suggest": {
-        "symfony/thanks": "Thank your favorite PHP projects on Github using the CLI!",
-        "vlucas/phpdotenv": "Loads environment variables from .env to getenv(), $_ENV and $_SERVER automagically."
+        "symfony/thanks": "Thank your favorite PHP projects on GitHub using the CLI",
+        "vlucas/phpdotenv": "Loads environment variables from .env to getenv(), $_ENV and $_SERVER automagically"
     },
-    "bin": ["bin/drupal"],
+    "bin": [
+        "bin/drupal"
+    ],
     "config": {
         "bin-dir": "bin/",
         "sort-packages": true
@@ -61,6 +67,8 @@
     "minimum-stability": "dev",
     "prefer-stable": true,
     "autoload": {
-        "psr-4": {"Drupal\\Console\\": "src"}
+        "psr-4": {
+            "Drupal\\Console\\": "src"
+        }
     }
-}
+}
\ No newline at end of file
diff --git a/vendor/drupal/console/config/services/config.yml b/vendor/drupal/console/config/services/config.yml
index 1458cd602b223f01cbdbac1ac9d49e8ba1a5f32f..5104eb4b36c67d1229ee831e9299b6bc28131a87 100644
--- a/vendor/drupal/console/config/services/config.yml
+++ b/vendor/drupal/console/config/services/config.yml
@@ -21,9 +21,14 @@ services:
       - { name: drupal.command }
   console.config_export_content_type:
     class: Drupal\Console\Command\Config\ExportContentTypeCommand
-    arguments: ['@entity_type.manager', '@config.storage', '@console.extension_manager', '@console.validator']
+    arguments: ['@console.extension_manager', '@entity_type.manager', '@console.validator', '@console.chain_queue', '@config.storage']
     tags:
       - { name: drupal.command }
+  console.config_export_entity:
+      class: Drupal\Console\Command\Config\ExportEntityCommand
+      arguments: ['@entity_type.manager', '@config.storage', '@console.extension_manager', '@console.validator', '@entity_type.repository', '@config.storage']
+      tags:
+        - { name: drupal.command }
   console.config_export_single:
     class: Drupal\Console\Command\Config\ExportSingleCommand
     arguments: ['@entity_type.manager', '@config.storage', '@console.extension_manager','@language_manager', '@console.validator']
@@ -31,7 +36,7 @@ services:
       - { name: drupal.command }
   console.config_export_view:
     class: Drupal\Console\Command\Config\ExportViewCommand
-    arguments: ['@entity_type.manager', '@config.storage', '@console.extension_manager', '@console.validator']
+    arguments: ['@entity_type.manager', '@config.storage', '@console.extension_manager', '@console.validator', '@console.chain_queue']
     tags:
       - { name: drupal.command }
   console.config_import:
diff --git a/vendor/drupal/console/config/services/database.yml b/vendor/drupal/console/config/services/database.yml
index 902995f57ee97706dbfe54f393e03b793088d7df..0cf1b7d4c18063e97bdb54178a32dd1b9d7b1701 100644
--- a/vendor/drupal/console/config/services/database.yml
+++ b/vendor/drupal/console/config/services/database.yml
@@ -1,29 +1,11 @@
 services:
-  console.database_add:
-    class: Drupal\Console\Command\Database\AddCommand
-    arguments: ['@console.database_settings_generator']
-    tags:
-      - { name: drupal.command }
-  console.database_client:
-    class: Drupal\Console\Command\Database\ClientCommand
-    tags:
-      - { name: drupal.command }
-  console.database_query:
-    class: Drupal\Console\Command\Database\QueryCommand
-    tags:
-      - { name: drupal.command }
-  console.database_connect:
-    class: Drupal\Console\Command\Database\ConnectCommand
-    tags:
-      - { name: drupal.command }
   console.database_drop:
     class: Drupal\Console\Command\Database\DropCommand
-    arguments: ['@database']
     tags:
       - { name: drupal.command }
   console.database_dump:
     class: Drupal\Console\Command\Database\DumpCommand
-    arguments: ['@app.root', '@console.shell_process']
+    arguments: ['@app.root', '@console.shell_process', '@database']
     tags:
       - { name: drupal.command }
   console.database_log_clear:
@@ -36,8 +18,3 @@ services:
     arguments: ['@database', '@date.formatter', '@entity_type.manager', '@string_translation']
     tags:
       - { name: drupal.command }
-  console.database_restore:
-    class: Drupal\Console\Command\Database\RestoreCommand
-    arguments: ['@app.root']
-    tags:
-      - { name: drupal.command }
diff --git a/vendor/drupal/console/config/services/debug.yml b/vendor/drupal/console/config/services/debug.yml
index 7d04fefffa5d267f87c36fa2ef1eeb578ccae596..8ccd8b409331021ee2421914b8f22a0ad11caf05 100644
--- a/vendor/drupal/console/config/services/debug.yml
+++ b/vendor/drupal/console/config/services/debug.yml
@@ -23,7 +23,7 @@ services:
       - { name: drupal.command }
   console.user_debug:
     class: Drupal\Console\Command\Debug\UserCommand
-    arguments: ['@entity_type.manager','@entity.query', '@console.drupal_api']
+    arguments: ['@entity_type.manager', '@console.drupal_api']
     tags:
       - { name: drupal.command }
   console.views_debug:
@@ -67,7 +67,7 @@ services:
       - { name: drupal.command }
   console.module_debug:
     class: Drupal\Console\Command\Debug\ModuleCommand
-    arguments: ['@console.configuration_manager', '@console.site', '@http_client']
+    arguments: ['@console.configuration_manager', '@console.site']
     tags:
       - { name: drupal.command }
   console.image_styles_debug:
@@ -130,7 +130,7 @@ services:
       - { name: drupal.command }
   console.rest_debug:
     class: Drupal\Console\Command\Debug\RestCommand
-    arguments: ['@?plugin.manager.rest']
+    arguments: ['@entity_type.manager', '@?plugin.manager.rest']
     tags:
       - { name: drupal.command }
   console.test_debug:
@@ -147,3 +147,8 @@ services:
     arguments: ['@console.drupal_api']
     tags:
       - { name: drupal.command }
+  console.hook_debug:
+      class: Drupal\Console\Command\Debug\HookCommand
+      arguments: ['@console.extension_manager', '@module_handler']
+      tags:
+        - { name: drupal.command }
diff --git a/vendor/drupal/console/config/services/generate.yml b/vendor/drupal/console/config/services/generate.yml
index 3c52a6ea34a6ceb6a0ef3acb5f6eaf85bcb9678d..c3b370badfa84935bfc41be6bcc6ef8684df575e 100644
--- a/vendor/drupal/console/config/services/generate.yml
+++ b/vendor/drupal/console/config/services/generate.yml
@@ -1,7 +1,7 @@
 services:
   console.generate_module:
     class: Drupal\Console\Command\Generate\ModuleCommand
-    arguments: ['@console.module_generator', '@console.validator', '@app.root', '@console.string_converter', '@console.drupal_api']
+    arguments: ['@console.module_generator', '@console.validator', '@app.root', '@console.string_converter', '@console.drupal_api', '@console.chain_queue', '@console.site']
     tags:
        - { name: drupal.command }
   console.generate_modulefile:
@@ -114,6 +114,11 @@ services:
     arguments: [ '@console.plugin_migrate_process_generator', '@console.chain_queue', '@console.extension_manager', '@console.string_converter', '@console.validator']
     tags:
        - { name: drupal.command }
+  console.generate_plugin_migrate_data_parser:
+    class: Drupal\Console\Command\Generate\PluginMigrateDataParserCommand
+    arguments: [ '@console.plugin_migrate_data_parser_generator', '@console.chain_queue', '@console.extension_manager', '@console.string_converter', '@console.validator']
+    tags:
+       - { name: drupal.command }
   console.generate_plugin_rest_resource:
     class: Drupal\Console\Command\Generate\PluginRestResourceCommand
     arguments: ['@console.extension_manager', '@console.plugin_rest_resource_generator','@console.string_converter', '@console.validator', '@console.chain_queue']
@@ -124,6 +129,14 @@ services:
     arguments: ['@console.extension_manager', '@console.plugin_rules_action_generator','@console.string_converter', '@console.validator', '@console.chain_queue']
     tags:
        - { name: drupal.command }
+  console.generate_plugin_rules_condition:
+      class: Drupal\Console\Command\Generate\PluginRulesConditionCommand
+      arguments: ['@console.extension_manager', '@console.plugin_rules_condition_generator','@console.string_converter', '@console.validator', '@console.chain_queue']
+  console.generate_plugin_rules_dataprocessor:
+      class: Drupal\Console\Command\Generate\PluginRulesDataprocessorCommand
+      arguments: ['@console.extension_manager', '@console.plugin_rules_dataprocessor_generator','@console.string_converter', '@console.validator', '@console.chain_queue']
+      tags:
+         - { name: drupal.command }
   console.generate_plugin_skeleton:
     class: Drupal\Console\Command\Generate\PluginSkeletonCommand
     arguments: ['@console.extension_manager', '@console.plugin_skeleton_generator','@console.string_converter', '@console.validator', '@console.chain_queue']
@@ -139,6 +152,11 @@ services:
     arguments: ['@console.extension_manager', '@console.plugin_views_field_generator', '@console.site','@console.string_converter', '@console.validator', '@console.chain_queue']
     tags:
        - { name: drupal.command }
+  console.generate_plugin_queue:
+    class: Drupal\Console\Command\Generate\PluginQueueWorkerCommand
+    arguments: ['@console.extension_manager', '@console.plugin_queue_generator','@console.validator','@console.string_converter','@console.chain_queue']
+    tags:
+      - { name: drupal.command }
   console.generate_post_update:
     class: Drupal\Console\Command\Generate\PostUpdateCommand
     arguments: ['@console.extension_manager', '@console.post_update_generator', '@console.site', '@console.validator','@console.chain_queue']
@@ -164,6 +182,11 @@ services:
     arguments: ['@console.extension_manager', '@console.theme_generator', '@console.validator', '@app.root', '@theme_handler', '@console.site', '@console.string_converter']
     tags:
        - { name: drupal.command }
+  console.generate_setting_theme:
+    class: Drupal\Console\Command\Generate\ThemeSettingCommand
+    arguments: ['@console.extension_manager', '@console.theme_setting_generator', '@console.validator', '@app.root', '@theme_handler', '@console.site', '@console.string_converter']
+    tags:
+       - { name: drupal.command }
   console.generate_twig_extension:
     class: Drupal\Console\Command\Generate\TwigExtensionCommand
     arguments: ['@console.extension_manager', '@console.twig_extension_generator', '@console.site', '@console.string_converter', '@console.validator', '@console.chain_queue']
@@ -179,6 +202,11 @@ services:
     arguments: ['@config.factory', '@console.chain_queue', '@console.pluginblock_generator', '@entity_type.manager', '@console.extension_manager', '@console.validator', '@console.string_converter', '@plugin.manager.element_info']
     tags:
        - { name: drupal.command }
+  console.generate_blocktype:
+    class: Drupal\Console\Command\Generate\BlockTypeCommand
+    arguments: ['@config.factory', '@console.chain_queue', '@console.blocktype_generator', '@entity_type.manager', '@console.extension_manager', '@console.validator', '@console.string_converter', '@plugin.manager.element_info']
+    tags:
+       - { name: drupal.command }
   console.generate_command:
     class: Drupal\Console\Command\Generate\CommandCommand
     arguments: ['@console.command_generator', '@console.extension_manager', '@console.validator', '@console.string_converter', '@console.site']
@@ -214,3 +242,18 @@ services:
     arguments: ['@console.extension_manager', '@console.js_test_generator', '@console.validator']
     tags:
        - { name: drupal.command }
+  console.generate_composer:
+      class: Drupal\Console\Command\Generate\ComposerCommand
+      arguments: ['@console.composer_generator', '@console.extension_manager', '@console.validator']
+      tags:
+         - { name: drupal.command }
+  console.generate_plugin_validation_constraint:
+    class: Drupal\Console\Command\Generate\PluginValidationConstraintCommand
+    arguments: ['@console.extension_manager', '@console.validation_constraint_generator','@console.string_converter',  '@console.validator', '@console.chain_queue']
+    tags:
+       - { name: drupal.command }
+  console.generate_pluginderivative:
+    class: Drupal\Console\Command\Generate\PluginDerivativeCommand
+    arguments: ['@config.factory', '@console.chain_queue', '@console.pluginderivative_generator', '@console.extension_manager', '@console.validator', '@console.string_converter']
+    tags:
+       - { name: drupal.command }
\ No newline at end of file
diff --git a/vendor/drupal/console/config/services/generator.yml b/vendor/drupal/console/config/services/generator.yml
index d38bac2b54cd0de1191faf2701f8221486a6f695..df6456dd87564eab6c7659f01e7a5fb0211aa9da 100644
--- a/vendor/drupal/console/config/services/generator.yml
+++ b/vendor/drupal/console/config/services/generator.yml
@@ -111,6 +111,11 @@ services:
     arguments: ['@console.extension_manager']
     tags:
       - { name: drupal.generator }
+  console.plugin_migrate_data_parser_generator:
+    class: Drupal\Console\Generator\PluginMigrateDataParserGenerator
+    arguments: ['@console.extension_manager']
+    tags:
+      - { name: drupal.generator }
   console.plugin_rest_resource_generator:
     class: Drupal\Console\Generator\PluginRestResourceGenerator
     arguments: ['@console.extension_manager']
@@ -121,6 +126,16 @@ services:
     arguments: ['@console.extension_manager']
     tags:
       - { name: drupal.generator }
+  console.plugin_rules_condition_generator:
+    class: Drupal\Console\Generator\PluginRulesConditionGenerator
+    arguments: ['@console.extension_manager']
+    tags:
+      - { name: drupal.generator }
+  console.plugin_rules_dataprocessor_generator:
+    class: Drupal\Console\Generator\PluginRulesDataprocessorGenerator
+    arguments: ['@console.extension_manager']
+    tags:
+      - { name: drupal.generator }
   console.plugin_skeleton_generator:
     class: Drupal\Console\Generator\PluginSkeletonGenerator
     arguments: ['@console.extension_manager']
@@ -141,6 +156,11 @@ services:
     arguments: ['@console.extension_manager']
     tags:
       - { name: drupal.generator }
+  console.plugin_queue_generator:
+    class: Drupal\Console\Generator\PluginQueueWorkerGenerator
+    arguments: ['@console.extension_manager']
+    tags:
+      - { name: drupal.generator }
   console.route_subscriber_generator:
     class: Drupal\Console\Generator\RouteSubscriberGenerator
     arguments: ['@console.extension_manager']
@@ -156,6 +176,11 @@ services:
     arguments: ['@console.extension_manager']
     tags:
       - { name: drupal.generator }
+  console.theme_setting_generator:
+    class: Drupal\Console\Generator\ThemeSettingGenerator
+    arguments: ['@console.extension_manager']
+    tags:
+      - { name: drupal.generator }
   console.twig_extension_generator:
     class: Drupal\Console\Generator\TwigExtensionGenerator
     arguments: ['@console.extension_manager']
@@ -171,6 +196,11 @@ services:
     arguments: ['@console.extension_manager']
     tags:
       - { name: drupal.generator }
+  console.blocktype_generator:
+    class: Drupal\Console\Generator\BlockTypeGenerator
+    arguments: ['@console.extension_manager']
+    tags:
+      - { name: drupal.generator }
   console.command_generator:
     class: Drupal\Console\Generator\CommandGenerator
     arguments: ['@console.extension_manager', '@console.translator_manager']
@@ -181,11 +211,6 @@ services:
     arguments: ['@console.extension_manager']
     tags:
       - { name: drupal.generator }
-  console.database_settings_generator:
-    class: Drupal\Console\Generator\DatabaseSettingsGenerator
-    arguments: ['@kernel']
-    tags:
-      - { name: drupal.generator }
   console.entitycontent_generator:
     class: Drupal\Console\Generator\EntityContentGenerator
     arguments: ['@console.extension_manager', '@console.site', '@console.renderer']
@@ -211,3 +236,18 @@ services:
     arguments: ['@console.extension_manager']
     tags:
       - { name: drupal.generator }
+  console.composer_generator:
+      class: Drupal\Console\Generator\ComposerGenerator
+      arguments: ['@console.extension_manager']
+      tags:
+        - { name: drupal.generator }
+  console.validation_constraint_generator:
+    class: Drupal\Console\Generator\PluginValidationConstraintGenerator
+    arguments: ['@console.extension_manager']
+    tags:
+      - { name: drupal.generator }
+  console.pluginderivative_generator:
+    class: Drupal\Console\Generator\PluginDerivativeGenerator
+    arguments: ['@console.extension_manager']
+    tags:
+      - { name: drupal.generator }
\ No newline at end of file
diff --git a/vendor/drupal/console/config/services/misc.yml b/vendor/drupal/console/config/services/misc.yml
index 1f97382f0c11b38d032dae69651444dd020f5345..161a9519ae03409095a4f685e6e5faf03c4c4333 100644
--- a/vendor/drupal/console/config/services/misc.yml
+++ b/vendor/drupal/console/config/services/misc.yml
@@ -13,3 +13,7 @@ services:
     arguments: ['@console.root', '@app.root']
     tags:
       - { name: drupal.command }
+  console.composerize:
+    class: Drupal\Console\Command\ComposerizeCommand
+    tags:
+      - { name: drupal.command }
\ No newline at end of file
diff --git a/vendor/drupal/console/config/services/module.yml b/vendor/drupal/console/config/services/module.yml
index e970203dc3338e0a2adecd67ebe9b49e28560607..6d081eb1325859a29034abc6d8c062a16bdff4fe 100644
--- a/vendor/drupal/console/config/services/module.yml
+++ b/vendor/drupal/console/config/services/module.yml
@@ -6,7 +6,7 @@ services:
       - { name: drupal.command }
   console.module_download:
     class: Drupal\Console\Command\Module\DownloadCommand
-    arguments: ['@console.drupal_api', '@http_client',  '@app.root', '@console.extension_manager', '@console.validator', '@console.site', '@console.configuration_manager', '@console.shell_process', '@console.root']
+    arguments: ['@console.drupal_api', '@http_client', '@app.root', '@console.extension_manager', '@console.validator', '@console.site']
     tags:
       - { name: drupal.command }
   console.module_install:
diff --git a/vendor/drupal/console/config/services/multisite.yml b/vendor/drupal/console/config/services/multisite.yml
new file mode 100644
index 0000000000000000000000000000000000000000..364f6d4a1ac33a191743f05696ed7ff6e19f5a3d
--- /dev/null
+++ b/vendor/drupal/console/config/services/multisite.yml
@@ -0,0 +1,11 @@
+services:
+  console.multisite_new:
+    class: Drupal\Console\Command\Multisite\NewCommand
+    arguments: ['@app.root', '@console.validator']
+    tags:
+      - { name: drupal.command }
+  console.multisite_update:
+    class: Drupal\Console\Command\Multisite\UpdateCommand
+    arguments: ['@app.root', '@console.site']
+    tags:
+      - { name: drupal.command }
diff --git a/vendor/drupal/console/config/services/rest.yml b/vendor/drupal/console/config/services/rest.yml
index 985c195edd7e77d641ae192661074cb4c78051de..34e96ecb55022d51dd83bfa78eecec2ec2f8e809 100644
--- a/vendor/drupal/console/config/services/rest.yml
+++ b/vendor/drupal/console/config/services/rest.yml
@@ -1,15 +1,14 @@
 services:
   console.rest_disable:
     class: Drupal\Console\Command\Rest\DisableCommand
-    arguments: ['@config.factory', '@?plugin.manager.rest']
+    arguments: ['@entity_type.manager', '@?plugin.manager.rest']
     tags:
       - { name: drupal.command }
   console.rest_enable:
     class: Drupal\Console\Command\Rest\EnableCommand
     arguments:
+      - '@entity_type.manager'
       - '@?plugin.manager.rest'
       - '@authentication_collector'
-      - '@config.factory'
-      - '@entity.manager'
     tags:
       - { name: drupal.command }
diff --git a/vendor/drupal/console/config/services/site.yml b/vendor/drupal/console/config/services/site.yml
index f1a4d9bbbf26245ac4b396a8741023d1890a7dd0..8c464bcad5a39269afc99ac4d3cf448a31ee539a 100644
--- a/vendor/drupal/console/config/services/site.yml
+++ b/vendor/drupal/console/config/services/site.yml
@@ -16,11 +16,16 @@ services:
       - { name: drupal.command }
   console.site_statistics:
     class: Drupal\Console\Command\Site\StatisticsCommand
-    arguments: ['@console.drupal_api', '@entity.query', '@console.extension_manager', '@module_handler']
+    arguments: ['@console.drupal_api', '@entity_type.manager', '@console.extension_manager', '@module_handler']
     tags:
       - { name: drupal.command }
   console.site_status:
     class: Drupal\Console\Command\Site\StatusCommand
-    arguments: ['@?system.manager', '@settings', '@config.factory', '@theme_handler', '@app.root']
+    arguments: ['@?system.manager', '@settings', '@config.factory', '@theme_handler', '@app.root', '@renderer']
+    tags:
+      - { name: drupal.command }
+  console.service_override:
+    class: Drupal\Console\Command\Service\OverrideCommand
+    arguments: ['@app.root', '@console.chain_queue']
     tags:
       - { name: drupal.command }
diff --git a/vendor/drupal/console/config/services/theme.yml b/vendor/drupal/console/config/services/theme.yml
index 74a2ff152cd99023c6f22cad2b916567a286139c..496b76f9b1540ce2ed61e91d6fe55eaf30ef0e5a 100644
--- a/vendor/drupal/console/config/services/theme.yml
+++ b/vendor/drupal/console/config/services/theme.yml
@@ -6,7 +6,7 @@ services:
       - { name: drupal.command }
   console.theme_install:
     class: Drupal\Console\Command\Theme\InstallCommand
-    arguments: ['@config.factory', '@theme_handler', '@console.chain_queue']
+    arguments: ['@config.factory', '@theme_handler', '@console.chain_queue', '@console.site', '@console.validator','@module_installer','@console.drupal_api','@console.extension_manager','@app.root']
     tags:
       - { name: drupal.command }
   console.theme_path:
@@ -16,6 +16,6 @@ services:
       - { name: drupal.command }
   console.theme_uninstall:
     class: Drupal\Console\Command\Theme\UninstallCommand
-    arguments: ['@config.factory', '@theme_handler', '@console.chain_queue']
+    arguments: ['@config.factory', '@theme_handler', '@console.chain_queue', '@console.site', '@console.validator','@module_installer','@console.drupal_api','@console.extension_manager','@app.root']
     tags:
       - { name: drupal.command }
diff --git a/vendor/drupal/console/config/services/user.yml b/vendor/drupal/console/config/services/user.yml
index a40f94b41327ee0a382893d48bdb143cf16e7e8b..2928d4399a7a4ab7f5ac4526cb78d645a0ccbee4 100644
--- a/vendor/drupal/console/config/services/user.yml
+++ b/vendor/drupal/console/config/services/user.yml
@@ -1,7 +1,7 @@
 services:
   console.user_delete:
     class: Drupal\Console\Command\User\DeleteCommand
-    arguments: ['@entity_type.manager','@entity.query', '@console.drupal_api']
+    arguments: ['@entity_type.manager', '@console.drupal_api']
     tags:
       - { name: drupal.command }
   console.user_login_clear_attempts:
@@ -34,3 +34,8 @@ services:
     arguments: ['@database', '@entity_type.manager', '@date.formatter', '@console.drupal_api']
     tags:
       - { name: drupal.command }
+  console.user_unblock:
+    class: Drupal\Console\Command\User\UnblockCommand
+    arguments: ['@entity_type.manager']
+    tags:
+      - { name: drupal.command }
diff --git a/vendor/drupal/console/config/services/views.yml b/vendor/drupal/console/config/services/views.yml
index 9fdc6a1cd60c6d4e10acb3201192d6f84fda44b1..0cc5959d055def44b77822342c3d60e8ed9eb461 100644
--- a/vendor/drupal/console/config/services/views.yml
+++ b/vendor/drupal/console/config/services/views.yml
@@ -1,11 +1,11 @@
 services:
   console.views_disable:
     class: Drupal\Console\Command\Views\DisableCommand
-    arguments: ['@entity_type.manager', '@entity.query']
+    arguments: ['@entity_type.manager']
     tags:
       - { name: drupal.command }
   console.views_enable:
     class: Drupal\Console\Command\Views\EnableCommand
-    arguments: ['@entity_type.manager', '@entity.query']
+    arguments: ['@entity_type.manager']
     tags:
       - { name: drupal.command }
diff --git a/vendor/drupal/console/services.yml b/vendor/drupal/console/services.yml
index b0d4597c6ef9c2bcc121d9ca1bc502d28b620f57..41964d3d51b2c8860643bf76305ed6b8e29ddac6 100644
--- a/vendor/drupal/console/services.yml
+++ b/vendor/drupal/console/services.yml
@@ -32,9 +32,3 @@ services:
   console.annotation_validator:
     class: Drupal\Console\Utils\AnnotationValidator
     arguments: ['@console.annotation_command_reader', '@console.extension_manager']
-  # Commands
-  console.generate_composer:
-    class: Drupal\Console\Command\ComposerizeCommand
-    tags:
-       - { name: drupal.command }
-
diff --git a/vendor/drupal/console/src/Application.php b/vendor/drupal/console/src/Application.php
index ff247181f974908e2fc71b8d44afcdb1b3688b55..12ed78343b43d150b163d40b8c2a53b1b648a916 100644
--- a/vendor/drupal/console/src/Application.php
+++ b/vendor/drupal/console/src/Application.php
@@ -25,7 +25,7 @@ class Application extends BaseApplication
     /**
      * @var string
      */
-    const VERSION = '1.8.0';
+    const VERSION = '1.9.7';
 
     public function __construct(ContainerInterface $container)
     {
diff --git a/vendor/drupal/console/src/Bootstrap/Drupal.php b/vendor/drupal/console/src/Bootstrap/Drupal.php
index a9d773346b01ecfc97aadb8cd5292f1b86be7c57..088007f0b36f456b44d367d274170bd11751e2c7 100644
--- a/vendor/drupal/console/src/Bootstrap/Drupal.php
+++ b/vendor/drupal/console/src/Bootstrap/Drupal.php
@@ -92,9 +92,20 @@ public function boot()
                 $io->writeln('➤ Creating request');
             }
 
+            $parsed_url = parse_url($uri);
+
+            if($parsed_url['scheme'] == 'https') {
+                $_SERVER['HTTPS'] = 'on';
+            }
+
+            $path = '/';
+            if(isset($parsed_url['path'])) {
+                $path =  $parsed_url['path'] . $path;
+            }
+
             $_SERVER['HTTP_HOST'] = parse_url($uri, PHP_URL_HOST);
             $_SERVER['SERVER_PORT'] = null;
-            $_SERVER['REQUEST_URI'] = '/';
+            $_SERVER['REQUEST_URI'] = $path;
             $_SERVER['REMOTE_ADDR'] = '127.0.0.1';
             $_SERVER['REQUEST_METHOD'] = 'GET';
             $_SERVER['SERVER_SOFTWARE'] = null;
diff --git a/vendor/drupal/console/src/Command/Config/ExportCommand.php b/vendor/drupal/console/src/Command/Config/ExportCommand.php
index b9fc3213e3f4de84422d377f8a785f18c7e092c9..63d004e5d08c579b03b40f6a9fc1dca4fcf8f7ca 100644
--- a/vendor/drupal/console/src/Command/Config/ExportCommand.php
+++ b/vendor/drupal/console/src/Command/Config/ExportCommand.php
@@ -56,12 +56,6 @@ protected function configure()
                 null,
                 InputOption::VALUE_OPTIONAL,
                 $this->trans('commands.config.export.options.directory')
-            )
-            ->addOption(
-                'tar',
-                null,
-                InputOption::VALUE_NONE,
-                $this->trans('commands.config.export.options.tar')
             )->addOption(
                 'remove-uuid',
                 null,
@@ -72,19 +66,40 @@ protected function configure()
                 null,
                 InputOption::VALUE_NONE,
                 $this->trans('commands.config.export.options.remove-config-hash')
+            )->addOption(
+                'tar',
+                null,
+                InputOption::VALUE_NONE,
+                $this->trans('commands.config.export.options.tar')
             )
             ->setAliases(['ce']);
     }
 
+    /**
+     * {@inheritdoc}
+     */
+    protected function interact(InputInterface $input, OutputInterface $output)
+    {
+        if (!$input->getOption('directory')) {
+            $directory = $this->getIo()->ask(
+                $this->trans('commands.config.export.questions.directory'),
+                config_get_config_directory(CONFIG_SYNC_DIRECTORY)
+            );
+            $input->setOption('directory', $directory);
+        }
+    }
+
     /**
      * {@inheritdoc}
      */
     protected function execute(InputInterface $input, OutputInterface $output)
     {
-        $directory = $input->getOption('directory');
+        $drupal_root = $this->drupalFinder->getComposerRoot();
+        $directory = $drupal_root.'/'.$input->getOption('directory');
         $tar = $input->getOption('tar');
         $removeUuid = $input->getOption('remove-uuid');
         $removeHash = $input->getOption('remove-config-hash');
+        $drupal_root = $this->drupalFinder->getComposerRoot();
 
         if (!$directory) {
             $directory = config_get_config_directory(CONFIG_SYNC_DIRECTORY);
@@ -92,7 +107,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
 
         $fileSystem = new Filesystem();
         try {
-            $fileSystem->mkdir($directory);
+            $fileSystem->mkdir($drupal_root."/".$directory);
         } catch (IOExceptionInterface $e) {
             $this->getIo()->error(
                 sprintf(
@@ -103,7 +118,9 @@ protected function execute(InputInterface $input, OutputInterface $output)
         }
 
         // Remove previous yaml files before creating new ones
-        array_map('unlink', glob($directory . '/*'));
+        foreach (glob($directory . '/*') as $item) {
+            $fileSystem->remove($item);
+        }
 
         if ($tar) {
             $dateTime = new \DateTime();
@@ -143,7 +160,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
                 $collection_storage = $this->storage->createCollection($collection);
                 $collection_path = str_replace('.', '/', $collection);
                 if (!$tar) {
-                    mkdir("$directory/$collection_path", 0755, true);
+                    $fileSystem->mkdir("$directory/$collection_path", 0755);
                 }
                 foreach ($collection_storage->listAll() as $name) {
                     $configName = "$collection_path/$name.yml";
diff --git a/vendor/drupal/console/src/Command/Config/ExportContentTypeCommand.php b/vendor/drupal/console/src/Command/Config/ExportContentTypeCommand.php
index 93b52c230ec15d4bcba3c18162d54f9bc6c6d8eb..03def65546af927c7ae82d19c02b540eb58595b4 100644
--- a/vendor/drupal/console/src/Command/Config/ExportContentTypeCommand.php
+++ b/vendor/drupal/console/src/Command/Config/ExportContentTypeCommand.php
@@ -7,64 +7,73 @@
 
 namespace Drupal\Console\Command\Config;
 
+use Drupal\Console\Command\Shared\ExportTrait;
 use Drupal\Console\Command\Shared\ModuleTrait;
+use Drupal\Console\Core\Command\Command;
+use Drupal\Console\Core\Utils\ChainQueue;
+use Drupal\Console\Extension\Manager;
 use Drupal\Console\Utils\Validator;
-use Symfony\Component\Console\Exception\InvalidOptionException;
+use Drupal\Core\Entity\EntityTypeManagerInterface;
 use Symfony\Component\Console\Input\InputArgument;
 use Symfony\Component\Console\Input\InputOption;
 use Symfony\Component\Console\Input\InputInterface;
 use Symfony\Component\Console\Output\OutputInterface;
-use Drupal\Console\Core\Command\Command;
+
 use Drupal\Core\Config\CachedStorage;
-use Drupal\Core\Entity\EntityTypeManagerInterface;
-use Drupal\Console\Command\Shared\ExportTrait;
-use Drupal\Console\Extension\Manager;
 
 class ExportContentTypeCommand extends Command
 {
     use ModuleTrait;
     use ExportTrait;
 
+    const ALL = '-all-';
+
+    /**
+     * @var Manager
+     */
+    protected $extensionManager;
+
     /**
      * @var EntityTypeManagerInterface
      */
     protected $entityTypeManager;
 
     /**
-     * @var CachedStorage
+     * @var Validator
      */
-    protected $configStorage;
+    protected $validator;
 
     /**
-     * @var Manager
+     * @var ChainQueue
      */
-    protected $extensionManager;
-
-    protected $configExport;
+    protected $chainQueue;
 
     /**
-     * @var Validator
+     * @var CachedStorage
      */
-    protected $validator;
+    protected $configStorage;
 
     /**
      * ExportContentTypeCommand constructor.
      *
      * @param EntityTypeManagerInterface $entityTypeManager
-     * @param CachedStorage              $configStorage
-     * @param Manager                    $extensionManager
-     * @param Validator                  $validator
+     * @param Validator $validator
+     * @param ChainQueue $chainQueue
+     * @param CachedStorage $configStorage,
      */
     public function __construct(
-        EntityTypeManagerInterface $entityTypeManager,
-        CachedStorage $configStorage,
         Manager $extensionManager,
-        Validator $validator
+        EntityTypeManagerInterface $entityTypeManager,
+        Validator $validator,
+        ChainQueue $chainQueue,
+        CachedStorage $configStorage
+
     ) {
-        $this->entityTypeManager = $entityTypeManager;
-        $this->configStorage = $configStorage;
         $this->extensionManager = $extensionManager;
+        $this->entityTypeManager = $entityTypeManager;
         $this->validator = $validator;
+        $this->chainQueue = $chainQueue;
+        $this->configStorage = $configStorage;
         parent::__construct();
     }
 
@@ -79,12 +88,12 @@ protected function configure()
             ->addOption('module', null, InputOption::VALUE_REQUIRED, $this->trans('commands.common.options.module'))
             ->addArgument(
                 'content-type',
-                InputArgument::REQUIRED,
+                InputArgument::REQUIRED | InputArgument::IS_ARRAY,
                 $this->trans('commands.config.export.content.type.arguments.content-type')
             )->addOption(
                 'optional-config',
                 null,
-                InputOption::VALUE_OPTIONAL,
+                InputOption::VALUE_NONE,
                 $this->trans('commands.config.export.content.type.options.optional-config')
             )->addOption(
                 'remove-uuid',
@@ -97,6 +106,12 @@ protected function configure()
                 InputOption::VALUE_NONE,
                 $this->trans('commands.config.export.content.type.options.remove-config-hash')
             )
+            ->addOption(
+              'include-module-dependencies',
+              null,
+              InputOption::VALUE_OPTIONAL,
+              $this->trans('commands.config.export.content.type.options.include-module-dependencies')
+            )
             ->setAliases(['cect']);
 
         $this->configExport = [];
@@ -114,17 +129,27 @@ protected function interact(InputInterface $input, OutputInterface $output)
         $contentType = $input->getArgument('content-type');
         if (!$contentType) {
             $bundles_entities = $this->entityTypeManager->getStorage('node_type')->loadMultiple();
-            $bundles = [];
+            $bundles = [ExportContentTypeCommand::ALL => $this->trans('commands.config.export.content.type.questions.all')];
+            $bundles_ids = [];
+
             foreach ($bundles_entities as $entity) {
                 $bundles[$entity->id()] = $entity->label();
+                $bundles_ids[] = $entity->id();
             }
 
-            $contentType = $this->getIo()->choice(
-                $this->trans('commands.config.export.content.type.questions.content-type'),
-                $bundles
-            );
+            if (!$contentType) {
+              $contentType = $this->getIo()->choice(
+                  $this->trans('commands.config.export.content.type.questions.content-type'),
+                  $bundles
+              );
+            }
+
+            if ($contentType == ExportContentTypeCommand::ALL) {
+              $input->setArgument('content-type', $bundles_ids);
+            }else{
+              $input->setArgument('content-type', [$contentType]);
+            }
         }
-        $input->setArgument('content-type', $contentType);
 
         $optionalConfig = $input->getOption('optional-config');
         if (!$optionalConfig) {
@@ -132,9 +157,8 @@ protected function interact(InputInterface $input, OutputInterface $output)
                 $this->trans('commands.config.export.content.type.questions.optional-config'),
                 true
             );
+            $input->setOption('optional-config', $optionalConfig);
         }
-        $input->setOption('optional-config', $optionalConfig);
-
 
         if (!$input->getOption('remove-uuid')) {
             $removeUuid = $this->getIo()->confirm(
@@ -150,6 +174,15 @@ protected function interact(InputInterface $input, OutputInterface $output)
             );
             $input->setOption('remove-config-hash', $removeHash);
         }
+
+        $includeModuleDependencies = $input->getOption('include-module-dependencies');
+        if (!$includeModuleDependencies) {
+          $includeModuleDependencies = $this->getIo()->confirm(
+            $this->trans('commands.config.export.content.type.questions.include-module-dependencies'),
+            true
+          );
+          $input->setOption('include-module-dependencies', $includeModuleDependencies);
+        }
     }
 
     /**
@@ -158,84 +191,22 @@ protected function interact(InputInterface $input, OutputInterface $output)
     protected function execute(InputInterface $input, OutputInterface $output)
     {
         $module = $input->getOption('module');
-        $contentType = $input->getArgument('content-type');
+        $contentTypes = $input->getArgument('content-type');
         $optionalConfig = $input->getOption('optional-config');
         $removeUuid = $input->getOption('remove-uuid');
         $removeHash = $input->getOption('remove-config-hash');
-
-        $contentTypeDefinition = $this->entityTypeManager->getDefinition('node_type');
-        $contentTypeName = $contentTypeDefinition->getConfigPrefix() . '.' . $contentType;
-
-        $contentTypeNameConfig = $this->getConfiguration($contentTypeName, $removeUuid, $removeHash);
-
-        if (empty($contentTypeNameConfig)) {
-            throw new InvalidOptionException(sprintf('The content type %s does not exist.', $contentType));
-        }
-
-        $this->configExport[$contentTypeName] = ['data' => $contentTypeNameConfig, 'optional' => $optionalConfig];
-
-        $this->getFields($contentType, $optionalConfig, $removeUuid, $removeHash);
-
-        $this->getFormDisplays($contentType, $optionalConfig, $removeUuid, $removeHash);
-
-        $this->getViewDisplays($contentType, $optionalConfig, $removeUuid, $removeHash);
-
-        $this->exportConfigToModule($module, $this->trans('commands.config.export.content.type.messages.content-type-exported'));
-    }
-
-    protected function getFields($contentType, $optional = false, $removeUuid = false, $removeHash = false)
-    {
-        $fields_definition = $this->entityTypeManager->getDefinition('field_config');
-
-        $fields_storage = $this->entityTypeManager->getStorage('field_config');
-        foreach ($fields_storage->loadMultiple() as $field) {
-            $field_name = $fields_definition->getConfigPrefix() . '.' . $field->id();
-            $field_name_config = $this->getConfiguration($field_name, $removeUuid, $removeHash);
-
-            // Only select fields related with content type
-            if ($field_name_config['bundle'] == $contentType) {
-                $this->configExport[$field_name] = ['data' => $field_name_config, 'optional' => $optional];
-                // Include dependencies in export files
-                if ($dependencies = $this->fetchDependencies($field_name_config, 'config')) {
-                    $this->resolveDependencies($dependencies, $optional);
-                }
-            }
-        }
-    }
-
-    protected function getFormDisplays($contentType, $optional = false, $removeUuid = false, $removeHash = false)
-    {
-        $form_display_definition = $this->entityTypeManager->getDefinition('entity_form_display');
-        $form_display_storage = $this->entityTypeManager->getStorage('entity_form_display');
-        foreach ($form_display_storage->loadMultiple() as $form_display) {
-            $form_display_name = $form_display_definition->getConfigPrefix() . '.' . $form_display->id();
-            $form_display_name_config = $this->getConfiguration($form_display_name, $removeUuid, $removeHash);
-            // Only select fields related with content type
-            if ($form_display_name_config['bundle'] == $contentType) {
-                $this->configExport[$form_display_name] = ['data' => $form_display_name_config, 'optional' => $optional];
-                // Include dependencies in export files
-                if ($dependencies = $this->fetchDependencies($form_display_name_config, 'config')) {
-                    $this->resolveDependencies($dependencies, $optional);
-                }
-            }
-        }
-    }
-
-    protected function getViewDisplays($contentType, $optional = false, $removeUuid = false, $removeHash = false)
-    {
-        $view_display_definition = $this->entityTypeManager->getDefinition('entity_view_display');
-        $view_display_storage = $this->entityTypeManager->getStorage('entity_view_display');
-        foreach ($view_display_storage->loadMultiple() as $view_display) {
-            $view_display_name = $view_display_definition->getConfigPrefix() . '.' . $view_display->id();
-            $view_display_name_config = $this->getConfiguration($view_display_name, $removeUuid, $removeHash);
-            // Only select fields related with content type
-            if ($view_display_name_config['bundle'] == $contentType) {
-                $this->configExport[$view_display_name] = ['data' => $view_display_name_config, 'optional' => $optional];
-                // Include dependencies in export files
-                if ($dependencies = $this->fetchDependencies($view_display_name_config, 'config')) {
-                    $this->resolveDependencies($dependencies, $optional);
-                }
-            }
-        }
+        $includeModuleDependencies = $input->getOption('include-module-dependencies');
+
+        $this->chainQueue->addCommand(
+          'config:export:entity', [
+            'entity-type' => 'node_type',
+            'bundle' => $contentTypes,
+            '--module' => $module,
+            '--optional-config' => $optionalConfig,
+            '--remove-uuid' => $removeUuid,
+            '--remove-config-hash' => $removeHash,
+            '--include-module-dependencies' => $includeModuleDependencies
+          ]
+        );
     }
 }
diff --git a/vendor/drupal/console/src/Command/Config/ExportEntityCommand.php b/vendor/drupal/console/src/Command/Config/ExportEntityCommand.php
new file mode 100644
index 0000000000000000000000000000000000000000..2c1b7f4f4fdfcc72b3fac20ccb55218e409a951e
--- /dev/null
+++ b/vendor/drupal/console/src/Command/Config/ExportEntityCommand.php
@@ -0,0 +1,271 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Console\Command\Config\ExportEntityCommand.
+ */
+
+namespace Drupal\Console\Command\Config;
+
+use Drupal\Console\Command\Shared\ExportTrait;
+use Drupal\Console\Command\Shared\ModuleTrait;
+use Drupal\Console\Core\Command\Command;
+use Drupal\Console\Extension\Manager;
+use Drupal\Console\Utils\Validator;
+use Drupal\Core\Config\CachedStorage;
+use Drupal\Core\Config\StorageInterface;
+use Drupal\Core\Entity\EntityTypeManagerInterface;
+use Drupal\Core\Entity\EntityTypeRepositoryInterface;
+use Symfony\Component\Console\Exception\InvalidOptionException;
+use Symfony\Component\Console\Input\InputArgument;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Output\OutputInterface;
+
+class ExportEntityCommand extends Command {
+
+    use ModuleTrait;
+    use ExportTrait;
+
+    const ALL = '-all-';
+
+    /**
+     * @var EntityTypeManagerInterface
+     */
+    protected $entityTypeManager;
+
+    /**
+     * @var CachedStorage
+     */
+    protected $configStorage;
+
+    /**
+     * @var Manager
+     */
+    protected $extensionManager;
+
+    /**
+     * @var EntityTypeRepositoryInterface
+     */
+    protected $entityTypeRepository;
+
+    protected $configExport;
+
+    /**
+     * @var Validator
+     */
+    protected $validator;
+
+    /**
+     * @var StorageInterface
+     */
+    protected $storage;
+
+    /**
+     * ExportContentTypeCommand constructor.
+     *
+     * @param EntityTypeManagerInterface $entityTypeManager
+     * @param CachedStorage $configStorage
+     * @param Manager $extensionManager
+     * @param Validator $validator
+     * @param EntityTypeRepositoryInterface $entityTypeRepository
+     * @param StorageInterface $storage
+
+     */
+    public function __construct(
+        EntityTypeManagerInterface $entityTypeManager,
+        CachedStorage $configStorage,
+        Manager $extensionManager,
+        Validator $validator,
+        EntityTypeRepositoryInterface  $entityTypeRepository,
+        StorageInterface $storage
+    ) {
+        $this->entityTypeManager = $entityTypeManager;
+        $this->configStorage = $configStorage;
+        $this->extensionManager = $extensionManager;
+        $this->validator = $validator;
+        $this->entityTypeRepository = $entityTypeRepository;
+        $this->storage = $storage;
+
+        parent::__construct();
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function configure() {
+        $this
+            ->setName('config:export:entity')
+            ->setDescription($this->trans('commands.config.export.entity.description'))
+            ->addOption('module', NULL, InputOption::VALUE_REQUIRED,
+                $this->trans('commands.common.options.module'))
+            ->addArgument(
+                'entity-type',
+                InputArgument::REQUIRED,
+                $this->trans('commands.config.export.entity.arguments.entity-type')
+            )
+            ->addArgument(
+                'bundle',
+                InputArgument::REQUIRED | InputArgument::IS_ARRAY,
+                $this->trans('commands.config.export.entity.arguments.bundle')
+            )->addOption(
+                'optional-config',
+                NULL,
+                InputOption::VALUE_NONE,
+                $this->trans('commands.config.export.entity.options.optional-config')
+            )->addOption(
+                'remove-uuid',
+                NULL,
+                InputOption::VALUE_NONE,
+                $this->trans('commands.config.export.entity.options.remove-uuid')
+            )->addOption(
+                'remove-config-hash',
+                NULL,
+                InputOption::VALUE_NONE,
+                $this->trans('commands.config.export.entity.options.remove-config-hash')
+            )
+            ->addOption(
+                'include-module-dependencies',
+                null,
+                InputOption::VALUE_OPTIONAL,
+                $this->trans('commands.config.export.entity.options.include-module-dependencies')
+            )
+            ->setAliases(['cee']);
+
+        $this->configExport = [];
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function interact(InputInterface $input, OutputInterface $output) {
+        // --module option
+        $this->getModuleOption();
+
+        $entity_types = $this->entityTypeRepository->getEntityTypeLabels(true);
+        ksort($entity_types['Configuration']);
+        // --content-type argument
+        $entityType = $input->getArgument('entity-type');
+        if (!$entityType) {
+            $entityType = $this->getIo()->choice(
+                $this->trans('commands.config.export.entity.questions.content-type'),
+                $entity_types['Configuration']
+            );
+
+            $input->setArgument('entity-type', $entityType);
+        }
+
+        // --bundle argument
+        $bundle = $input->getArgument('bundle');
+        if (!$bundle) {
+            $bundles_entities = $this->entityTypeManager->getStorage($entityType)
+                ->loadMultiple();
+            $bundles = [ExportEntityCommand::ALL => $this->trans('commands.config.export.entity.questions.all')];
+            $bundles_ids = [];
+            foreach ($bundles_entities as $entity) {
+                $bundles[$entity->id()] = $entity->label();
+                $bundles_ids[] = $entity->id();
+            }
+
+            $bundle = $this->getIo()->choice(
+                $this->trans('commands.config.export.entity.questions.bundle'),
+                $bundles
+            );
+
+            if ($bundle == ExportEntityCommand::ALL) {
+                $input->setArgument('bundle', $bundles_ids);
+            } else {
+                $input->setArgument('bundle', [$bundle]);
+            }
+        }
+
+        $optionalConfig = $input->getOption('optional-config');
+        if (!$optionalConfig) {
+            $optionalConfig = $this->getIo()->confirm(
+                $this->trans('commands.config.export.entity.questions.optional-config'),
+                TRUE
+            );
+
+            $input->setOption('optional-config', $optionalConfig);
+        }
+
+        if (!$input->getOption('remove-uuid')) {
+            $removeUuid = $this->getIo()->confirm(
+                $this->trans('commands.config.export.entity.questions.remove-uuid'),
+                TRUE
+            );
+            $input->setOption('remove-uuid', $removeUuid);
+        }
+
+        if (!$input->getOption('remove-config-hash')) {
+            $removeHash = $this->getIo()->confirm(
+                $this->trans('commands.config.export.entity.questions.remove-config-hash'),
+                TRUE
+            );
+            $input->setOption('remove-config-hash', $removeHash);
+        }
+
+        $includeModuleDependencies = $input->getOption('include-module-dependencies');
+        if (!$includeModuleDependencies) {
+            $includeModuleDependencies = $this->getIo()->confirm(
+                $this->trans('commands.config.export.entity.questions.include-module-dependencies'),
+                true
+            );
+            $input->setOption('include-module-dependencies', $includeModuleDependencies);
+        }
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function execute(InputInterface $input, OutputInterface $output) {
+        $module = $this->validateModule($input->getOption('module'));
+        $entityType = $input->getArgument('entity-type');
+        $bundles = $input->getArgument('bundle');
+        $optionalConfig = $input->getOption('optional-config');
+        $removeUuid = $input->getOption('remove-uuid');
+        $removeHash = $input->getOption('remove-config-hash');
+        $includeModuleDependencies = $input->getOption('include-module-dependencies');
+
+        foreach ($bundles as $bundle) {
+            $bundleDefinition = $this->entityTypeManager->getDefinition($entityType);
+            $bundleName = "{$bundleDefinition->getConfigPrefix()}.{$bundle}";
+
+            $bundleNameConfig = $this->getConfiguration($bundleName,
+                $removeUuid, $removeHash);
+
+            if (empty($bundleNameConfig)) {
+                throw new InvalidOptionException(sprintf('The bundle %s does not exist.',
+                    $bundle));
+            }
+
+            $this->configExport[$bundleName] = [
+                'data' => $bundleNameConfig,
+                'optional' => $optionalConfig,
+            ];
+
+            $this->getBasefieldOverrideFields($bundle, $optionalConfig, $removeUuid, $removeHash);
+
+            $this->getFields($bundle, $optionalConfig, $removeUuid, $removeHash);
+
+            $this->getFormDisplays($bundle, $optionalConfig, $removeUuid,
+                $removeHash);
+
+            $this->getViewDisplays($bundle, $optionalConfig, $removeUuid,
+                $removeHash);
+
+            // Include module dependencies in export files if export is not optional
+            if ($includeModuleDependencies) {
+                if ($dependencies = $this->fetchDependencies($bundleNameConfig, 'module')) {
+                    $this->exportModuleDependencies($module, $dependencies);
+                }
+            }
+
+            $this->exportConfigToModule($module,
+                sprintf(
+                    $this->trans('commands.config.export.entity.messages.bundle-exported'),
+                    $bundle
+                ));
+        }
+    }
+}
diff --git a/vendor/drupal/console/src/Command/Config/ExportSingleCommand.php b/vendor/drupal/console/src/Command/Config/ExportSingleCommand.php
index 71798888462079947a6c05290340aa018eea5749..0fe2607b3821863d9612ce9d4cf5f49ba2509f01 100644
--- a/vendor/drupal/console/src/Command/Config/ExportSingleCommand.php
+++ b/vendor/drupal/console/src/Command/Config/ExportSingleCommand.php
@@ -103,7 +103,7 @@ protected function configure()
                 'directory',
                 null,
                 InputOption::VALUE_OPTIONAL,
-                $this->trans('commands.config.export.arguments.directory')
+                $this->trans('commands.config.export.options.directory')
             )->addOption(
                 'module',
                 null,
@@ -260,7 +260,7 @@ protected function interact(InputInterface $input, OutputInterface $output)
     protected function execute(InputInterface $input, OutputInterface $output)
     {
         $directory = $input->getOption('directory');
-        $module = $input->getOption('module');
+        $module = $this->validateModule($input->getOption('module'));
         $name = $input->getOption('name');
         $optional = $input->getOption('optional');
         $removeUuid = $input->getOption('remove-uuid');
@@ -304,8 +304,8 @@ protected function execute(InputInterface $input, OutputInterface $output)
                 return 0;
             }
 
+            $directory = $directory_copy = config_get_config_directory(CONFIG_SYNC_DIRECTORY);
             if (!is_dir($directory)) {
-                $directory = $directory_copy = config_get_config_directory(CONFIG_SYNC_DIRECTORY);
                 if ($value) {
                     $directory = $directory_copy .'/' . str_replace('.', '/', $value);
                 }
diff --git a/vendor/drupal/console/src/Command/Config/ExportViewCommand.php b/vendor/drupal/console/src/Command/Config/ExportViewCommand.php
index dacc2bbbc87a094b499de711bad8290230276a62..ebbccefac4d2400da2052c6665d0f1d636cbe2e8 100644
--- a/vendor/drupal/console/src/Command/Config/ExportViewCommand.php
+++ b/vendor/drupal/console/src/Command/Config/ExportViewCommand.php
@@ -7,17 +7,18 @@
 
 namespace Drupal\Console\Command\Config;
 
-use Symfony\Component\Console\Input\InputArgument;
-use Symfony\Component\Console\Input\InputOption;
-use Symfony\Component\Console\Input\InputInterface;
-use Symfony\Component\Console\Output\OutputInterface;
 use Drupal\Console\Core\Command\Command;
-use Drupal\Console\Utils\Validator;
 use Drupal\Console\Command\Shared\ModuleTrait;
-use Drupal\Core\Entity\EntityTypeManagerInterface;
-use Drupal\Core\Config\CachedStorage;
 use Drupal\Console\Command\Shared\ExportTrait;
+use Drupal\Console\Core\Utils\ChainQueue;
 use Drupal\Console\Extension\Manager;
+use Drupal\Console\Utils\Validator;
+use Drupal\Core\Config\CachedStorage;
+use Drupal\Core\Entity\EntityTypeManagerInterface;
+use Symfony\Component\Console\Input\InputArgument;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
 
 class ExportViewCommand extends Command
 {
@@ -47,6 +48,11 @@ class ExportViewCommand extends Command
      */
     protected $validator;
 
+    /**
+     * @var ChainQueue
+     */
+    protected $chainQueue;
+
     /**
      * ExportViewCommand constructor.
      *
@@ -58,12 +64,14 @@ public function __construct(
         EntityTypeManagerInterface $entityTypeManager,
         CachedStorage $configStorage,
         Manager $extensionManager,
-        Validator $validator
+        Validator $validator,
+        ChainQueue $chainQueue
     ) {
         $this->entityTypeManager = $entityTypeManager;
         $this->configStorage = $configStorage;
         $this->extensionManager = $extensionManager;
         $this->validator = $validator;
+        $this->chainQueue = $chainQueue;
         parent::__construct();
     }
 
@@ -95,6 +103,17 @@ protected function configure()
                 InputOption::VALUE_OPTIONAL,
                 $this->trans('commands.config.export.view.options.include-module-dependencies')
             )
+            ->addOption(
+              'remove-uuid',
+              NULL,
+              InputOption::VALUE_NONE,
+              $this->trans('commands.config.export.entity.options.remove-uuid')
+            )->addOption(
+              'remove-config-hash',
+              NULL,
+              InputOption::VALUE_NONE,
+              $this->trans('commands.config.export.entity.options.remove-config-hash')
+            )
             ->setAliases(['cev']);
     }
 
@@ -140,34 +159,43 @@ protected function interact(InputInterface $input, OutputInterface $output)
             );
             $input->setOption('include-module-dependencies', $includeModuleDependencies);
         }
+
+        if (!$input->getOption('remove-uuid')) {
+          $removeUuid = $this->getIo()->confirm(
+            $this->trans('commands.config.export.entity.questions.remove-uuid'),
+            TRUE
+          );
+          $input->setOption('remove-uuid', $removeUuid);
+        }
+
+        if (!$input->getOption('remove-config-hash')) {
+          $removeHash = $this->getIo()->confirm(
+            $this->trans('commands.config.export.entity.questions.remove-config-hash'),
+            TRUE
+          );
+          $input->setOption('remove-config-hash', $removeHash);
+        }
     }
 
     protected function execute(InputInterface $input, OutputInterface $output)
     {
-        $module = $input->getOption('module');
+        $module = $this->validateModule($input->getOption('module'));
         $viewId = $input->getArgument('view-id');
         $optionalConfig = $input->getOption('optional-config');
         $includeModuleDependencies = $input->getOption('include-module-dependencies');
-
-        $viewTypeDefinition = $this->entityTypeManager->getDefinition('view');
-        $viewTypeName = $viewTypeDefinition->getConfigPrefix() . '.' . $viewId;
-
-        $viewNameConfig = $this->getConfiguration($viewTypeName);
-
-        $this->configExport[$viewTypeName] = ['data' => $viewNameConfig, 'optional' => $optionalConfig];
-
-        // Include config dependencies in export files
-        if ($dependencies = $this->fetchDependencies($viewNameConfig, 'config')) {
-            $this->resolveDependencies($dependencies, $optionalConfig);
-        }
-
-        // Include module dependencies in export files if export is not optional
-        if ($includeModuleDependencies) {
-            if ($dependencies = $this->fetchDependencies($viewNameConfig, 'module')) {
-                $this->exportModuleDependencies($module, $dependencies);
-            }
-        }
-
-        $this->exportConfigToModule($module, $this->trans('commands.views.export.messages.view-exported'));
+        $removeUuid = $input->getOption('remove-uuid');
+        $removeHash = $input->getOption('remove-config-hash');
+
+        $this->chainQueue->addCommand(
+          'config:export:entity', [
+            'entity-type' => 'view',
+            'bundle' => [$viewId],
+            '--module' => $module,
+            '--optional-config' => $optionalConfig,
+            '--remove-uuid' => $removeUuid,
+            '--remove-config-hash' => $removeHash,
+            '--include-module-dependencies' => $includeModuleDependencies
+          ]
+        );
     }
 }
diff --git a/vendor/drupal/console/src/Command/Config/ImportCommand.php b/vendor/drupal/console/src/Command/Config/ImportCommand.php
index 1d0963402eebaf7c8ff4e1732eabc42d4d3d7126..c5211852dcccf4718275c93d08eae128aac5bdf4 100644
--- a/vendor/drupal/console/src/Command/Config/ImportCommand.php
+++ b/vendor/drupal/console/src/Command/Config/ImportCommand.php
@@ -79,6 +79,20 @@ protected function configure()
             ->setAliases(['ci']);
     }
 
+    /**
+     * {@inheritdoc}
+     */
+    protected function interact(InputInterface $input, OutputInterface $output)
+    {
+        if (!$input->getOption('directory')) {
+            $directory = $this->getIo()->ask(
+                $this->trans('commands.config.import.questions.directory'),
+                config_get_config_directory(CONFIG_SYNC_DIRECTORY)
+        );
+            $input->setOption('directory', $directory);
+        }
+    }
+
     /**
      * {@inheritdoc}
      */
@@ -88,15 +102,11 @@ protected function execute(InputInterface $input, OutputInterface $output)
         $skipUuid = $input->getOption('skip-uuid');
 
         if ($directory) {
-            $configSyncDir = $directory;
+            $source_storage = new FileStorage($directory);
         } else {
-            $configSyncDir = config_get_config_directory(
-                CONFIG_SYNC_DIRECTORY
-            );
+            $source_storage = \Drupal::service('config.storage.sync');
         }
 
-        $source_storage = new FileStorage($configSyncDir);
-
         $storageComparer = '\Drupal\Core\Config\StorageComparer';
         if ($skipUuid) {
             $storageComparer = '\Drupal\Console\Override\StorageComparer';
diff --git a/vendor/drupal/console/src/Command/Config/ImportSingleCommand.php b/vendor/drupal/console/src/Command/Config/ImportSingleCommand.php
index 716fbc389c32e4441249c9d78322b7a3303a778c..1c322a20e4c24c2a82f7865b70cde5576533909b 100644
--- a/vendor/drupal/console/src/Command/Config/ImportSingleCommand.php
+++ b/vendor/drupal/console/src/Command/Config/ImportSingleCommand.php
@@ -63,7 +63,7 @@ protected function configure()
                 'directory',
                 null,
                 InputOption::VALUE_OPTIONAL,
-                $this->trans('commands.config.import.arguments.directory')
+                $this->trans('commands.config.import.options.directory')
             )
             ->setAliases(['cis']);
     }
diff --git a/vendor/drupal/console/src/Command/Config/OverrideCommand.php b/vendor/drupal/console/src/Command/Config/OverrideCommand.php
index eebf466c3ed0c486d41527ea6dbb625216184b54..d23a33bfa568d5f68cdeae6e08716637e2f02e85 100644
--- a/vendor/drupal/console/src/Command/Config/OverrideCommand.php
+++ b/vendor/drupal/console/src/Command/Config/OverrideCommand.php
@@ -9,6 +9,7 @@
 
 use Symfony\Component\Console\Input\InputArgument;
 use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputOption;
 use Symfony\Component\Console\Output\OutputInterface;
 use Drupal\Console\Core\Command\Command;
 use Drupal\Core\Config\CachedStorage;
@@ -51,15 +52,17 @@ protected function configure()
                 InputArgument::REQUIRED,
                 $this->trans('commands.config.override.arguments.name')
             )
-            ->addArgument(
+            ->addOption(
                 'key',
-                InputArgument::REQUIRED,
-                $this->trans('commands.config.override.arguments.key')
+                null,
+                InputOption::VALUE_REQUIRED | InputOption::VALUE_IS_ARRAY,
+                $this->trans('commands.config.override.options.key')
             )
-            ->addArgument(
+            ->addOption(
                 'value',
-                InputArgument::REQUIRED,
-                $this->trans('commands.config.override.arguments.value')
+                null,
+                InputOption::VALUE_REQUIRED | InputOption::VALUE_IS_ARRAY,
+                $this->trans('commands.config.override.options.value')
             )
             ->setAliases(['co']);
     }
@@ -89,23 +92,29 @@ protected function interact(InputInterface $input, OutputInterface $output)
             );
             $input->setArgument('name', $name);
         }
-        $key = $input->getArgument('key');
+        $key = $input->getOption('key');
         if (!$key) {
-            if ($this->configStorage->exists($name)) {
-                $configuration = $this->configStorage->read($name);
+            if (!$this->configStorage->exists($name)) {
+                $this->getIo()->newLine();
+                $this->getIo()->errorLite($this->trans('commands.config.override.messages.invalid-config-file'));
+                $this->getIo()->newLine();
+                return 0;
             }
-            $key = $this->getIo()->choiceNoList(
-                $this->trans('commands.config.override.questions.key'),
-                array_keys($configuration)
-            );
-            $input->setArgument('key', $key);
+
+            $configuration = $this->configStorage->read($name);
+            $input->setOption('key', $this->getKeysFromConfig($configuration));
         }
-        $value = $input->getArgument('value');
+        $value = $input->getOption('value');
         if (!$value) {
-            $value = $this->getIo()->ask(
-                $this->trans('commands.config.override.questions.value')
-            );
-            $input->setArgument('value', $value);
+            foreach ($input->getOption('key') as $name) {
+                $value[] = $this->getIo()->ask(
+                    sprintf(
+                        $this->trans('commands.config.override.questions.value'),
+                        $name
+                    )
+                );
+            }
+            $input->setOption('value', $value);
         }
     }
     /**
@@ -114,16 +123,24 @@ protected function interact(InputInterface $input, OutputInterface $output)
     protected function execute(InputInterface $input, OutputInterface $output)
     {
         $configName = $input->getArgument('name');
-        $key = $input->getArgument('key');
-        $value = $input->getArgument('value');
+        $keys = $input->getOption('key');
+        $values = $input->getOption('value');
+
+        if(empty($keys)) {
+            return 1;
+        }
 
         $config = $this->configFactory->getEditable($configName);
 
-        $configurationOverrideResult = $this->overrideConfiguration(
-            $config,
-            $key,
-            $value
-        );
+        $configurationOverrideResult = [];
+        foreach ($keys as $index => $key) {
+          $result = $this->overrideConfiguration(
+              $config,
+              $key,
+              $values[$index]
+          );
+          $configurationOverrideResult = array_merge($configurationOverrideResult, $result);
+        }
 
         $config->save();
 
@@ -151,4 +168,28 @@ protected function overrideConfiguration($config, $key, $value)
 
         return $result;
     }
+
+    /**
+     * Allow to search a specific key to override.
+     *
+     * @param $configuration
+     * @param null $key
+     *
+     * @return array
+     */
+    private function getKeysFromConfig($configuration, $key = null)
+    {
+        $choiceKey = $this->getIo()->choiceNoList(
+            $this->trans('commands.config.override.questions.key'),
+            array_keys($configuration)
+        );
+
+        $key = is_null($key) ? $choiceKey:$key.'.'.$choiceKey;
+
+        if(is_array($configuration[$choiceKey])){
+            return $this->getKeysFromConfig($configuration[$choiceKey], $key);
+        }
+
+        return [$key];
+    }
 }
diff --git a/vendor/drupal/console/src/Command/Create/NodesCommand.php b/vendor/drupal/console/src/Command/Create/NodesCommand.php
index 3e8e6f929f6930a80cdde9f3b5422b3935ff3b17..af9608bf754fc76fe9e0ead455e28c6b7cf6823d 100644
--- a/vendor/drupal/console/src/Command/Create/NodesCommand.php
+++ b/vendor/drupal/console/src/Command/Create/NodesCommand.php
@@ -87,6 +87,12 @@ protected function configure()
                 InputOption::VALUE_OPTIONAL,
                 $this->trans('commands.create.nodes.options.time-range')
             )
+            ->addOption(
+                'revision',
+                null,
+                InputOption::VALUE_NONE,
+                $this->trans('commands.create.nodes.options.revision')
+            )
             ->addOption(
                 'language',
                 null,
@@ -151,6 +157,15 @@ function ($contentType) use ($bundles) {
             $input->setOption('time-range', array_search($timeRange, $timeRanges));
         }
 
+        $revision = is_null($input->getOption('revision'));
+        if (!$revision) {
+            $revision = $this->getIo()->confirm(
+                $this->trans('commands.create.nodes.questions.revision')
+            );
+
+            $input->setOption('revision', $revision);
+        }
+
         // Language module is enabled or not.
         $languageModuleEnabled = \Drupal::moduleHandler()
             ->moduleExists('language');
@@ -177,7 +192,10 @@ function ($contentType) use ($bundles) {
             $input->setOption('language', $language);
         } else {
             // If 'language' module is not enabled.
-            $input->setOption('language', LanguageInterface::LANGCODE_NOT_SPECIFIED);
+            $input->setOption(
+                'language',
+                \Drupal::languageManager()->getDefaultLanguage()->getId()
+            );
         }
     }
 
@@ -190,6 +208,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
         $limit = $input->getOption('limit')?:25;
         $titleWords = $input->getOption('title-words')?:5;
         $timeRange = $input->getOption('time-range')?:31536000;
+        $revision = $input->getOption('revision');
         $available_types = array_keys($this->drupalApi->getBundles());
         $language = $input->getOption('language')?:'und';
 
@@ -208,6 +227,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
             $limit,
             $titleWords,
             $timeRange,
+            $revision,
             $language
         );
 
diff --git a/vendor/drupal/console/src/Command/Create/UsersCommand.php b/vendor/drupal/console/src/Command/Create/UsersCommand.php
index 73423dd36d5a4a05d1a4cf8a912f238b90618c7b..418ebd9d7980f1a9c8872deeae93df574c45a707 100644
--- a/vendor/drupal/console/src/Command/Create/UsersCommand.php
+++ b/vendor/drupal/console/src/Command/Create/UsersCommand.php
@@ -89,7 +89,7 @@ protected function interact(InputInterface $input, OutputInterface $output)
     {
         $rids = $input->getArgument('roles');
         if (!$rids) {
-            $roles = $this->drupalApi->getRoles();
+            $roles = $this->drupalApi->getRoles(true, true);
             $rids = $this->getIo()->choice(
                 $this->trans('commands.create.users.questions.roles'),
                 array_values($roles),
@@ -131,7 +131,7 @@ function ($role) use ($roles) {
             $timeRanges = $this->getTimeRange();
 
             $timeRange = $this->getIo()->choice(
-                $this->trans('commands.create.nodes.questions.time-range'),
+                $this->trans('commands.create.users.questions.time-range'),
                 array_values($timeRanges)
             );
 
diff --git a/vendor/drupal/console/src/Command/Cron/ExecuteCommand.php b/vendor/drupal/console/src/Command/Cron/ExecuteCommand.php
index 5fd9344636fb2092e751b8fa3a9e21b9bd47b2b2..dd00ac9e3f13bdae12194d82109692088f42ddbd 100644
--- a/vendor/drupal/console/src/Command/Cron/ExecuteCommand.php
+++ b/vendor/drupal/console/src/Command/Cron/ExecuteCommand.php
@@ -61,7 +61,8 @@ protected function configure()
             ->addArgument(
                 'module',
                 InputArgument::IS_ARRAY | InputArgument::OPTIONAL,
-                $this->trans('commands.common.options.module')
+                $this->trans('commands.common.options.module'),
+                ['all']
             )
             ->setAliases(['croe']);
     }
@@ -79,7 +80,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
             return 1;
         }
 
-        if ($modules === null || in_array('all', $modules)) {
+        if (in_array('all', $modules)) {
             $modules = $this->moduleHandler->getImplementations('cron');
         }
 
diff --git a/vendor/drupal/console/src/Command/Database/AddCommand.php b/vendor/drupal/console/src/Command/Database/AddCommand.php
index a83ba00796da728aae7a30c841978fd28bbb3d1a..a0527de16d5572cb431cf3a69c36cd95e2585483 100644
--- a/vendor/drupal/console/src/Command/Database/AddCommand.php
+++ b/vendor/drupal/console/src/Command/Database/AddCommand.php
@@ -56,7 +56,7 @@ protected function configure()
             ->addOption(
                 'password',
                 null,
-                InputOption::VALUE_REQUIRED,
+                InputOption::VALUE_OPTIONAL,
                 $this->trans('commands.database.add.options.password')
             )
             ->addOption(
@@ -83,6 +83,12 @@ protected function configure()
                 InputOption::VALUE_OPTIONAL,
                 $this->trans('commands.database.add.options.driver')
             )
+            ->addOption(
+                'default',
+                null,
+                InputOption::VALUE_NONE,
+                $this->trans('commands.database.query.options.default')
+            )
             ->setHelp($this->trans('commands.database.add.help'))
             ->setAliases(['dba']);
     }
@@ -122,9 +128,8 @@ protected function interact(InputInterface $input, OutputInterface $output)
         $input->setOption('username', $username);
         $password = $input->getOption('password');
         if (!$password) {
-            $password = $this->getIo()->ask(
-                $this->trans('commands.database.add.questions.password'),
-                ''
+            $password = $this->getIo()->askHiddenEmpty(
+                $this->trans('commands.migrate.execute.questions.db-pass')
             );
         }
         $input->setOption('password', $password);
diff --git a/vendor/drupal/console/src/Command/Database/ClientCommand.php b/vendor/drupal/console/src/Command/Database/ClientCommand.php
index 0e558f7a095d5a44f70cc83d966277e382f5395f..290a66b216db051f6aa7d9bb7b145d620f378fb2 100644
--- a/vendor/drupal/console/src/Command/Database/ClientCommand.php
+++ b/vendor/drupal/console/src/Command/Database/ClientCommand.php
@@ -32,6 +32,12 @@ protected function configure()
                 $this->trans('commands.database.client.arguments.database'),
                 'default'
             )
+            ->addArgument(
+                'target',
+                InputArgument::OPTIONAL,
+                $this->trans('commands.database.client.arguments.target'),
+                'default'
+            )
             ->setHelp($this->trans('commands.database.client.help'))
             ->setAliases(['dbc']);
     }
@@ -43,18 +49,10 @@ protected function execute(InputInterface $input, OutputInterface $output)
     {
         $database = $input->getArgument('database');
         $learning = $input->getOption('learning');
+        $target = $input->getArgument('target');
 
-        $databaseConnection = $this->resolveConnection($database);
-
-        $connection = sprintf(
-            '%s -A --database=%s --user=%s --password=%s --host=%s --port=%s',
-            $databaseConnection['driver'],
-            $databaseConnection['database'],
-            $databaseConnection['username'],
-            $databaseConnection['password'],
-            $databaseConnection['host'],
-            $databaseConnection['port']
-        );
+        $databaseConnection = $this->resolveConnection($database, $target);
+        $connection = $this->getConnectionString($databaseConnection);
 
         if ($learning) {
             $this->getIo()->commentBlock(
diff --git a/vendor/drupal/console/src/Command/Database/ConnectCommand.php b/vendor/drupal/console/src/Command/Database/ConnectCommand.php
index 85ddd266b0ca349de9e4af986e4003334945bb80..78f1bbc50ee410e30581cdc36e2e4c7df6f59d0c 100644
--- a/vendor/drupal/console/src/Command/Database/ConnectCommand.php
+++ b/vendor/drupal/console/src/Command/Database/ConnectCommand.php
@@ -26,9 +26,15 @@ protected function configure()
             ->setName('database:connect')
             ->setDescription($this->trans('commands.database.connect.description'))
             ->addArgument(
-                'database',
+                'key',
                 InputArgument::OPTIONAL,
-                $this->trans('commands.database.connect.arguments.database'),
+                $this->trans('commands.database.connect.arguments.key'),
+                'default'
+            )
+            ->addArgument(
+                'target',
+                InputArgument::OPTIONAL,
+                $this->trans('commands.database.connect.arguments.target'),
                 'default'
             )
             ->setHelp($this->trans('commands.database.connect.help'))
@@ -40,23 +46,14 @@ protected function configure()
      */
     protected function execute(InputInterface $input, OutputInterface $output)
     {
-        $database = $input->getArgument('database');
-        $databaseConnection = $this->resolveConnection($database);
-
-        $connection = sprintf(
-            '%s -A --database=%s --user=%s --password=%s --host=%s --port=%s',
-            $databaseConnection['driver'],
-            $databaseConnection['database'],
-            $databaseConnection['username'],
-            $databaseConnection['password'],
-            $databaseConnection['host'],
-            $databaseConnection['port']
-        );
+        $key = $input->getArgument('key');
+        $target = $input->getArgument('target');
+        $databaseConnection = $this->resolveConnection($key, $target);
 
         $this->getIo()->commentBlock(
             sprintf(
                 $this->trans('commands.database.connect.messages.connection'),
-                $connection
+                escapeshellcmd($this->getConnectionString($databaseConnection))
             )
         );
 
diff --git a/vendor/drupal/console/src/Command/Database/DatabaseLogBase.php b/vendor/drupal/console/src/Command/Database/DatabaseLogBase.php
index 7004ed0aa417932f259ad22e35f2c626fbcc0108..075ca661e77fc55c54c1a00e3114eb74cea9e0f1 100644
--- a/vendor/drupal/console/src/Command/Database/DatabaseLogBase.php
+++ b/vendor/drupal/console/src/Command/Database/DatabaseLogBase.php
@@ -197,12 +197,12 @@ protected function makeQuery($offset = null, $range = 1000)
     protected function createTableHeader()
     {
         return [
-        $this->trans('commands.database.log.common.messages.event-id'),
-        $this->trans('commands.database.log.common.messages.type'),
-        $this->trans('commands.database.log.common.messages.date'),
-        $this->trans('commands.database.log.common.messages.message'),
-        $this->trans('commands.database.log.common.messages.user'),
-        $this->trans('commands.database.log.common.messages.severity'),
+            $this->trans('commands.database.log.common.messages.event-id'),
+            $this->trans('commands.database.log.common.messages.type'),
+            $this->trans('commands.database.log.common.messages.date'),
+            $this->trans('commands.database.log.common.messages.message'),
+            $this->trans('commands.database.log.common.messages.user'),
+            $this->trans('commands.database.log.common.messages.severity'),
         ];
     }
 
@@ -216,7 +216,13 @@ protected function createTableRow(\stdClass $dblog)
         /**
          * @var User $user
          */
-        $user = $this->userStorage->load($dblog->uid);
+        if ($user = $this->userStorage->load($dblog->uid)) {
+            $user_id = $user->id();
+            $user_name = $user->getUsername();
+        } else {
+            $user_id = $dblog->uid;
+            $user_name = $this->trans('commands.database.log.common.messages.user-deleted');
+        }
 
         return [
             $dblog->wid,
@@ -228,7 +234,7 @@ protected function createTableRow(\stdClass $dblog)
                 true,
                 true
             ),
-            $user->getUsername() . ' (' . $user->id() . ')',
+            $user_name . ' (' . $user_id . ')',
             $this->severityList[$dblog->severity]->render(),
         ];
     }
diff --git a/vendor/drupal/console/src/Command/Database/DropCommand.php b/vendor/drupal/console/src/Command/Database/DropCommand.php
index 0a079c00de4fe533486f560fc126ff3cb77d92d2..5bc842e32737b73b3e66c614f4bd060c4295ebb2 100644
--- a/vendor/drupal/console/src/Command/Database/DropCommand.php
+++ b/vendor/drupal/console/src/Command/Database/DropCommand.php
@@ -13,6 +13,7 @@
 use Drupal\Console\Core\Command\Command;
 use Drupal\Core\Database\Connection;
 use Drupal\Console\Command\Shared\ConnectTrait;
+use Drupal\Core\Database\Database;
 
 /**
  * Class DropCommand
@@ -23,22 +24,6 @@ class DropCommand extends Command
 {
     use ConnectTrait;
 
-    /**
-     * @var Connection
-     */
-    protected $database;
-
-    /**
-     * DropCommand constructor.
-     *
-     * @param Connection $database
-     */
-    public function __construct(Connection $database)
-    {
-        $this->database = $database;
-        parent::__construct();
-    }
-
     /**
      * {@inheritdoc}
      */
@@ -53,6 +38,12 @@ protected function configure()
                 $this->trans('commands.database.drop.arguments.database'),
                 'default'
             )
+            ->addArgument(
+              'target',
+              InputArgument::OPTIONAL,
+              $this->trans('commands.database.drop.arguments.target'),
+              'default'
+            )
             ->setHelp($this->trans('commands.database.drop.help'))
             ->setAliases(['dbd']);
     }
@@ -63,9 +54,10 @@ protected function configure()
     protected function execute(InputInterface $input, OutputInterface $output)
     {
         $database = $input->getArgument('database');
+        $target = $input->getArgument('target');
         $yes = $input->getOption('yes');
 
-        $databaseConnection = $this->resolveConnection($database);
+        $databaseConnection = $this->resolveConnection($database, $target);
 
         if (!$yes) {
             if (!$this->getIo()->confirm(
@@ -80,7 +72,8 @@ protected function execute(InputInterface $input, OutputInterface $output)
             }
         }
 
-        $schema = $this->database->schema();
+        $connection = Database::getConnection($target, $database);
+        $schema = $connection->schema();
         $tables = $schema->findTables('%');
         $tableRows = [];
 
@@ -102,3 +95,4 @@ protected function execute(InputInterface $input, OutputInterface $output)
         return 0;
     }
 }
+
diff --git a/vendor/drupal/console/src/Command/Database/DumpCommand.php b/vendor/drupal/console/src/Command/Database/DumpCommand.php
index 9de8ad864332e068c94e10b8daa5baadfaf1df42..4650838db4c29e126ff314b2e55309fca4e65697 100644
--- a/vendor/drupal/console/src/Command/Database/DumpCommand.php
+++ b/vendor/drupal/console/src/Command/Database/DumpCommand.php
@@ -14,6 +14,8 @@
 use Drupal\Console\Core\Command\Command;
 use Drupal\Console\Command\Shared\ConnectTrait;
 use Drupal\Console\Core\Utils\ShellProcess;
+use Drupal\Core\Database\Connection;
+use Symfony\Component\Process\Process;
 
 class DumpCommand extends Command
 {
@@ -25,19 +27,26 @@ class DumpCommand extends Command
      * @var ShellProcess
      */
     protected $shellProcess;
+    /**
+     * @var Connection
+     */
+    protected $database;
 
     /**
      * DumpCommand constructor.
      *
      * @param $appRoot
      * @param ShellProcess $shellProcess
+     * @param Connection $database
      */
     public function __construct(
         $appRoot,
-        ShellProcess $shellProcess
+        ShellProcess $shellProcess,
+        Connection $database
     ) {
         $this->appRoot = $appRoot;
         $this->shellProcess = $shellProcess;
+        $this->database = $database;
         parent::__construct();
     }
 
@@ -55,6 +64,12 @@ protected function configure()
                 $this->trans('commands.database.dump.arguments.database'),
                 'default'
             )
+            ->addArgument(
+                'target',
+                InputArgument::OPTIONAL,
+                $this->trans('commands.database.dump.arguments.target'),
+                'default'
+            )
             ->addOption(
                 'file',
                 null,
@@ -67,6 +82,12 @@ protected function configure()
                 InputOption::VALUE_NONE,
                 $this->trans('commands.database.dump.options.gz')
             )
+            ->addOption(
+                'exclude-cache',
+                null,
+                InputOption::VALUE_NONE,
+                $this->trans('commands.database.dump.options.exclude.cache')
+            )
             ->setHelp($this->trans('commands.database.dump.help'))
             ->setAliases(['dbdu']);
     }
@@ -77,11 +98,36 @@ protected function configure()
     protected function execute(InputInterface $input, OutputInterface $output)
     {
         $database = $input->getArgument('database');
+        $target = $input->getArgument('target');
         $file = $input->getOption('file');
         $learning = $input->getOption('learning');
         $gz = $input->getOption('gz');
+        $excludeCache = $input->getOption('exclude-cache');
+
+        $databaseConnection = $this->escapeConnection($this->resolveConnection($database, $target));
+
+        if ($excludeCache) {
+            $query = '';
+            if ($databaseConnection['driver'] == 'mysql') {
+                $query = "SHOW TABLES LIKE 'cache_%'";
+            } elseif ($databaseConnection['driver'] == 'pgsql') {
+                $query = "SELECT tablename FROM pg_catalog.pg_tables WHERE schemaname != 'pg_catalog' AND schemaname != 'information_schema' AND tablename LIKE 'cache_%'";
+            }
 
-        $databaseConnection = $this->resolveConnection($database);
+            $result = $this->database
+                ->query($query)
+                ->fetchAll();
+
+            $excludeTables = [];
+            foreach ($result as $record) {
+                $table = array_values(json_decode(json_encode($record), true));
+                if ($databaseConnection['driver'] == 'mysql') {
+                    $excludeTables[] = $databaseConnection['database'] . '.' . $table[0];
+                } elseif ($databaseConnection['driver'] == 'pgsql') {
+                    $excludeTables[] = 'public' . '.' . $table[0];
+                }
+            }
+        }
 
         if (!$file) {
             $date = new \DateTime();
@@ -97,7 +143,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
 
         if ($databaseConnection['driver'] == 'mysql') {
             $command = sprintf(
-                'mysqldump --user="%s" --password="%s" --host="%s" --port="%s" "%s" > "%s"',
+                "mysqldump --user='%s' --password='%s' --host='%s' --port='%s' '%s' > '%s'",
                 $databaseConnection['username'],
                 $databaseConnection['password'],
                 $databaseConnection['host'],
@@ -105,9 +151,28 @@ protected function execute(InputInterface $input, OutputInterface $output)
                 $databaseConnection['database'],
                 $file
             );
+
+            if ($excludeCache) {
+                $ignoreTable = '';
+                foreach ($excludeTables as $table) {
+                    $ignoreTable .= "--ignore-table=\"{$table}\" ";
+                }
+
+                $command = sprintf(
+                    "mysqldump --user='%s' --password='%s' --host='%s' --port='%s' %s '%s'> '%s'",
+                    $databaseConnection['username'],
+                    $databaseConnection['password'],
+                    $databaseConnection['host'],
+                    $databaseConnection['port'],
+                    $ignoreTable,
+                    $databaseConnection['database'],
+                    $file
+                );
+
+            }
         } elseif ($databaseConnection['driver'] == 'pgsql') {
             $command = sprintf(
-                'PGPASSWORD="%s" pg_dumpall -w -U "%s" -h "%s" -p "%s" -l "%s" -f "%s"',
+                "PGPASSWORD='%s' pg_dumpall -w -U '%s' -h '%s' -p '%s' -l '%s' -f '%s'",
                 $databaseConnection['password'],
                 $databaseConnection['username'],
                 $databaseConnection['host'],
@@ -115,40 +180,67 @@ protected function execute(InputInterface $input, OutputInterface $output)
                 $databaseConnection['database'],
                 $file
             );
+
+            if ($excludeCache) {
+                $ignoreTable = '';
+                foreach ($excludeTables as $table) {
+                    $ignoreTable .= "-T \"{$table}\" ";
+                }
+
+                $command = sprintf(
+                    "PGPASSWORD='%s' pg_dump -w -U '%s' -h '%s' -p '%s' -f '%s' %s-d '%s'",
+                    $databaseConnection['password'],
+                    $databaseConnection['username'],
+                    $databaseConnection['host'],
+                    $databaseConnection['port'],
+                    $file,
+                    $ignoreTable,
+                    $databaseConnection['database']
+                );
+            }
         }
 
         if ($learning) {
             $this->getIo()->commentBlock($command);
         }
 
-        if ($this->shellProcess->exec($command, $this->appRoot)) {
-            $resultFile = $file;
-            if ($gz) {
-                if (substr($file, -3) != '.gz') {
-                    $resultFile = $file . ".gz";
-                }
-                file_put_contents(
-                    $resultFile,
-                    gzencode(
-                        file_get_contents(
-                            $file
+        try {
+            $process = new Process($command);
+            $process->setTimeout(null);
+            $process->setWorkingDirectory($this->appRoot);
+            $process->run();
+
+            if($process->isSuccessful()) {
+                $resultFile = $file;
+                if ($gz) {
+                    if (substr($file, -3) != '.gz') {
+                        $resultFile = $file . '.gz';
+                    }
+                    file_put_contents(
+                        $resultFile,
+                        gzencode(
+                            file_get_contents(
+                                $file
+                            )
                         )
+                    );
+                    if ($resultFile != $file) {
+                        unlink($file);
+                    }
+                }
+
+                $this->getIo()->success(
+                    sprintf(
+                        '%s %s',
+                        $this->trans('commands.database.dump.messages.success'),
+                        $resultFile
                     )
                 );
-                if ($resultFile != $file) {
-                    unlink($file);
-                }
             }
 
-            $this->getIo()->success(
-                sprintf(
-                    '%s %s',
-                    $this->trans('commands.database.dump.messages.success'),
-                    $resultFile
-                )
-            );
+            return 0;
+        } catch (\Exception $e) {
+            return 1;
         }
-
-        return 0;
     }
 }
diff --git a/vendor/drupal/console/src/Command/Database/QueryCommand.php b/vendor/drupal/console/src/Command/Database/QueryCommand.php
index 0658acbaaa67e348e286664b11be3a72bffe2d3a..43231e0100819ad76e73318f796955bf41747a6d 100644
--- a/vendor/drupal/console/src/Command/Database/QueryCommand.php
+++ b/vendor/drupal/console/src/Command/Database/QueryCommand.php
@@ -43,6 +43,12 @@ protected function configure()
                 $this->trans('commands.database.query.arguments.database'),
                 'default'
             )
+            ->addArgument(
+                'target',
+                InputArgument::OPTIONAL,
+                $this->trans('commands.database.connect.arguments.target'),
+                'default'
+            )
             ->addOption('quick', null, InputOption::VALUE_NONE, $this->trans('commands.database.query.options.quick'))
             ->addOption('debug', null, InputOption::VALUE_NONE, $this->trans('commands.database.query.options.debug'))
             ->addOption('html', null, InputOption::VALUE_NONE, $this->trans('commands.database.query.options.html'))
@@ -62,9 +68,10 @@ protected function execute(InputInterface $input, OutputInterface $output)
     {
         $query = $input->getArgument('query');
         $database = $input->getArgument('database');
+        $target = $input->getArgument('target');
         $learning = $input->getOption('learning');
 
-        $databaseConnection = $this->resolveConnection($database);
+        $databaseConnection = $this->resolveConnection($database, $target);
 
         $connection = sprintf(
             '%s -A --database=%s --user=%s --password=%s --host=%s --port=%s',
@@ -79,31 +86,31 @@ protected function execute(InputInterface $input, OutputInterface $output)
         $args = explode(' ', $connection);
         $args[] = sprintf('--execute=%s', $query);
 
-        $opts = ["quick", "debug", "html", "xml", "raw", "vertical", "batch"];
+        $opts = ['quick', 'debug', 'html', 'xml', 'raw', 'vertical', 'batch'];
         array_walk(
             $opts, function ($opt) use ($input, &$args) {
                 if ($input->getOption($opt)) {
                     switch ($opt) {
-                    case "quick":
-                        $args[] = "--quick";
+                    case 'quick':
+                        $args[] = '--quick';
                         break;
-                    case "debug":
-                        $args[] = "-T";
+                    case 'debug':
+                        $args[] = '-T';
                         break;
-                    case "html":
-                        $args[] = "-H";
+                    case 'html':
+                        $args[] = '-H';
                         break;
-                    case "xml":
-                        $args[] = "-X";
+                    case 'xml':
+                        $args[] = '-X';
                         break;
-                    case "raw":
-                        $args[] = "--raw";
+                    case 'raw':
+                        $args[] = '--raw';
                         break;
-                    case "vertical":
-                        $args[] = "-E";
+                    case 'vertical':
+                        $args[] = '-E';
                         break;
-                    case "batch":
-                        $args[] = "--batch";
+                    case 'batch':
+                        $args[] = '--batch';
                         break;
                     }
                 }
@@ -112,11 +119,11 @@ protected function execute(InputInterface $input, OutputInterface $output)
 
         if ($learning) {
             $this->getIo()->commentBlock(
-                implode(" ", $args)
+                implode(' ', $args)
             );
         }
 
-        $processBuilder = new ProcessBuilder([]);
+        $processBuilder = new ProcessBuilder();
         $processBuilder->setArguments($args);
         $process = $processBuilder->getProcess();
         $process->setTty('true');
diff --git a/vendor/drupal/console/src/Command/Database/RestoreCommand.php b/vendor/drupal/console/src/Command/Database/RestoreCommand.php
index 659f158d6aed580ca3a9b08851b93ecdf3fe977f..ad5be0074444696916166554ea1b3d7e00092250 100644
--- a/vendor/drupal/console/src/Command/Database/RestoreCommand.php
+++ b/vendor/drupal/console/src/Command/Database/RestoreCommand.php
@@ -11,7 +11,7 @@
 use Symfony\Component\Console\Input\InputOption;
 use Symfony\Component\Console\Input\InputInterface;
 use Symfony\Component\Console\Output\OutputInterface;
-use Symfony\Component\Process\ProcessBuilder;
+use Symfony\Component\Process\Process;
 use Drupal\Console\Core\Command\Command;
 use Drupal\Console\Command\Shared\ConnectTrait;
 
@@ -49,6 +49,12 @@ protected function configure()
                 $this->trans('commands.database.restore.arguments.database'),
                 'default'
             )
+            ->addArgument(
+                'target',
+                InputArgument::OPTIONAL,
+                $this->trans('commands.database.restore.arguments.target'),
+                'default'
+            )
             ->addOption(
                 'file',
                 null,
@@ -56,7 +62,8 @@ protected function configure()
                 $this->trans('commands.database.restore.options.file')
             )
             ->setHelp($this->trans('commands.database.restore.help'))
-            ->setAliases(['dbr']);
+            ->setAliases(['dbr'])
+            ->enableMaintenance();
     }
 
     /**
@@ -65,25 +72,49 @@ protected function configure()
     protected function execute(InputInterface $input, OutputInterface $output)
     {
         $database = $input->getArgument('database');
+        $target = $input->getArgument('target');
         $file = $input->getOption('file');
         $learning = $input->getOption('learning');
 
-        $databaseConnection = $this->resolveConnection($database);
-
-        if (!$file) {
+        $databaseConnection = $this->escapeConnection($this->resolveConnection($database, $target));
+        if (!$file || !file_exists($file)) {
             $this->getIo()->error(
                 $this->trans('commands.database.restore.messages.no-file')
             );
             return 1;
         }
+
         if (strpos($file, '.sql.gz') !== false) {
-            $catCommand = "gunzip -c %s | ";
+            $catCommand = 'gunzip -c %s | ';
         } else {
-            $catCommand = "cat %s | ";
+            $catCommand = 'cat %s | ';
         }
+
+        $commands = array();
         if ($databaseConnection['driver'] == 'mysql') {
-            $command = sprintf(
-                $catCommand . 'mysql --user=%s --password=%s --host=%s --port=%s %s',
+          // Drop database first.
+          $commands[] = sprintf(
+            "mysql --user='%s' --password='%s' --host='%s' --port='%s' -e'DROP DATABASE IF EXISTS %s'",
+            $databaseConnection['username'],
+            $databaseConnection['password'],
+            $databaseConnection['host'],
+            $databaseConnection['port'],
+            $databaseConnection['database']
+          );
+
+          // Recreate database.
+          $commands[] = sprintf(
+            "mysql --user='%s' --password='%s' --host='%s' --port='%s' -e'CREATE DATABASE %s'",
+            $databaseConnection['username'],
+            $databaseConnection['password'],
+            $databaseConnection['host'],
+            $databaseConnection['port'],
+            $databaseConnection['database']
+          );
+
+          // Import dump.
+          $commands[] = sprintf(
+                $catCommand . "mysql --user='%s' --password='%s' --host='%s' --port='%s' %s",
                 $file,
                 $databaseConnection['username'],
                 $databaseConnection['password'],
@@ -92,8 +123,8 @@ protected function execute(InputInterface $input, OutputInterface $output)
                 $databaseConnection['database']
             );
         } elseif ($databaseConnection['driver'] == 'pgsql') {
-            $command = sprintf(
-                'PGPASSWORD="%s" ' . $catCommand . 'psql -w -U %s -h %s -p %s -d %s',
+            $commands[] = sprintf(
+                "PGPASSWORD='%s' " . $catCommand . "psql -w -U '%s' -h '%s' -p '%s' -d '%s'",
                 $file,
                 $databaseConnection['password'],
                 $databaseConnection['username'],
@@ -103,26 +134,27 @@ protected function execute(InputInterface $input, OutputInterface $output)
             );
         }
 
-        if ($learning) {
-            $this->getIo()->commentBlock($command);
-        }
+        foreach ($commands as $command) {
+            if ($learning) {
+              $this->getIo()->commentBlock($command);
+            }
 
-        $processBuilder = new ProcessBuilder(['-v']);
-        $process = $processBuilder->getProcess();
-        $process->setWorkingDirectory($this->appRoot);
-        $process->setTty($input->isInteractive());
-        $process->setCommandLine($command);
-        $process->run();
+            $process = new Process($command);
+            $process->setTimeout(null);
+            $process->setWorkingDirectory($this->appRoot);
+            $process->setTty($input->isInteractive());
+            $process->run();
 
-        if (!$process->isSuccessful()) {
-            throw new \RuntimeException($process->getErrorOutput());
+            if (!$process->isSuccessful()) {
+              throw new \RuntimeException($process->getErrorOutput());
+            }
         }
 
         $this->getIo()->success(
             sprintf(
-                '%s %s',
-                $this->trans('commands.database.restore.messages.success'),
-                $file
+              '%s %s',
+              $this->trans('commands.database.restore.messages.success'),
+              $file
             )
         );
 
diff --git a/vendor/drupal/console/src/Command/Debug/ContainerCommand.php b/vendor/drupal/console/src/Command/Debug/ContainerCommand.php
index 17e2bcf63a3ee87ccd66f8212249d87007c7491c..98bee058ccf7bf5247071689533e1d02c7e84859 100644
--- a/vendor/drupal/console/src/Command/Debug/ContainerCommand.php
+++ b/vendor/drupal/console/src/Command/Debug/ContainerCommand.php
@@ -7,11 +7,11 @@
 
 namespace Drupal\Console\Command\Debug;
 
-use Symfony\Component\Console\Input\InputInterface;
-use Symfony\Component\Console\Output\OutputInterface;
+use Drupal\Console\Core\Command\ContainerAwareCommand;
 use Symfony\Component\Console\Input\InputArgument;
+use Symfony\Component\Console\Input\InputInterface;
 use Symfony\Component\Console\Input\InputOption;
-use Drupal\Console\Core\Command\ContainerAwareCommand;
+use Symfony\Component\Console\Output\OutputInterface;
 use Symfony\Component\Yaml\Yaml;
 
 /**
@@ -21,6 +21,15 @@
  */
 class ContainerCommand extends ContainerAwareCommand
 {
+
+    const BLUE = 'blue';
+    const CYAN = 'cyan';
+    const GREEN = 'green';
+    const MAGENTA = 'magenta';
+    const RED = 'red';
+    const YELLOW = 'yellow';
+    const WHITE = 'white';
+
     /**
      * {@inheritdoc}
      */
@@ -101,12 +110,25 @@ protected function execute(InputInterface $input, OutputInterface $output)
         return 0;
     }
 
+    /**
+     * Get callback list.
+     *
+     * @param string $service
+     *   Service name.
+     * @param string $method
+     *   Methods name.
+     * @param array $args
+     *   Arguments.
+     *
+     * @return array
+     *   List of callbacks.
+     */
     private function getCallbackReturnList($service, $method, $args)
     {
         if ($args != null) {
             $parsedArgs = json_decode($args, true);
             if (!is_array($parsedArgs)) {
-                $parsedArgs = explode(",", $args);
+                $parsedArgs = explode(',', $args);
             }
         } else {
             $parsedArgs = null;
@@ -119,34 +141,43 @@ private function getCallbackReturnList($service, $method, $args)
             return $serviceDetail;
         }
         $serviceDetail[] = [
-            '<fg=green>'.$this->trans('commands.debug.container.messages.service').'</>',
-            '<fg=yellow>'.$service.'</>'
+            $this->addGreenTranslationWrapper('commands.debug.container.messages.service'),
+            $this->addWrapper($service),
         ];
         $serviceDetail[] = [
-            '<fg=green>'.$this->trans('commands.debug.container.messages.class').'</>',
-            '<fg=yellow>'.get_class($serviceInstance).'</>'
+            $this->addGreenTranslationWrapper('commands.debug.container.messages.class'),
+            $this->addWrapper(get_class($serviceInstance)),
         ];
         $methods = [$method];
         $this->extendArgumentList($serviceInstance, $methods);
         $serviceDetail[] = [
-            '<fg=green>'.$this->trans('commands.debug.container.messages.method').'</>',
-            '<fg=yellow>'.$methods[0].'</>'
+            $this->addGreenTranslationWrapper('commands.debug.container.messages.method'),
+            $this->addWrapper($methods[0]),
         ];
         if ($parsedArgs) {
             $serviceDetail[] = [
-                '<fg=green>'.$this->trans('commands.debug.container.messages.arguments').'</>',
-                json_encode($parsedArgs, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE)
+                $this->addGreenTranslationWrapper('commands.debug.container.messages.arguments'),
+                $this->addWrapper(json_encode($parsedArgs, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE)),
             ];
         }
         $return = call_user_func_array([$serviceInstance,$method], $parsedArgs);
         $serviceDetail[] = [
-            '<fg=green>'.$this->trans('commands.debug.container.messages.return').'</>',
-            json_encode($return, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE)
+            $this->addGreenTranslationWrapper('commands.debug.container.messages.return'),
+            $this->addWrapper(json_encode($return, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE)),
         ];
         return $serviceDetail;
     }
 
-    private function getServiceList($tag)
+    /**
+     * Get service list.
+     *
+     * @param string $tag
+     *   Tag.
+     *
+     * @return array
+     *   Array of services.
+     */
+    private function getServiceList($tag = null)
     {
         if ($tag) {
             return $this->getServiceListByTag($tag);
@@ -162,6 +193,15 @@ private function getServiceList($tag)
         return $services;
     }
 
+    /**
+     * Get service list by a tag.
+     *
+     * @param string $tag
+     *   Tag.
+     *
+     * @return array
+     *   Array of services.
+     */
     private function getServiceListByTag($tag)
     {
         $services = [];
@@ -186,6 +226,17 @@ private function getServiceListByTag($tag)
         return $services;
     }
 
+    /**
+     * Compares the values.
+     *
+     * @param string $a
+     *   First value.
+     * @param string $b
+     *   Second value.
+     *
+     * @return int
+     *   Result.
+     */
     private function compareService($a, $b)
     {
         return strcmp($a[0], $b[0]);
@@ -195,41 +246,42 @@ private function getServiceDetail($service)
     {
         $serviceInstance = $this->get($service);
         $serviceDetail = [];
+        $class_name = get_class($serviceInstance);
 
         if ($serviceInstance) {
             $serviceDetail[] = [
-                '<fg=green>'.$this->trans('commands.debug.container.messages.service').'</>',
-                '<fg=yellow>'.$service.'</>'
+                $this->addGreenTranslationWrapper('commands.debug.container.messages.service'),
+                $this->addTranslationWrapper('commands.debug.container.messages.service'),
             ];
             $serviceDetail[] = [
-                '<fg=green>'.$this->trans('commands.debug.container.messages.class').'</>',
-                '<fg=yellow>'.get_class($serviceInstance).'</>'
+                $this->addGreenTranslationWrapper('commands.debug.container.messages.class'),
+                $this->addTranslationWrapper('commands.debug.container.messages.class'),
             ];
-            $interface = str_replace("{  }", "", Yaml::dump(class_implements($serviceInstance)));
+            $interface = str_replace('{  }', '', Yaml::dump(class_implements($serviceInstance)));
             if (!empty($interface)) {
                 $serviceDetail[] = [
-                    '<fg=green>'.$this->trans('commands.debug.container.messages.interface').'</>',
-                    '<fg=yellow>'.$interface.'</>'
+                    $this->addGreenTranslationWrapper('commands.debug.container.messages.interface'),
+                    $this->addWrapper($interface),
                 ];
             }
             if ($parent = get_parent_class($serviceInstance)) {
                 $serviceDetail[] = [
-                    '<fg=green>'.$this->trans('commands.debug.container.messages.parent').'</>',
-                    '<fg=yellow>'.$parent.'</>'
+                    $this->addGreenTranslationWrapper('commands.debug.container.messages.parent'),
+                    $this->addWrapper($parent),
                 ];
             }
-            if ($vars = get_class_vars($serviceInstance)) {
+            if ($vars = get_class_vars($class_name)) {
                 $serviceDetail[] = [
-                    '<fg=green>'.$this->trans('commands.debug.container.messages.variables').'</>',
-                    '<fg=yellow>'.Yaml::dump($vars).'</>'
+                    $this->addGreenTranslationWrapper('commands.debug.container.messages.variables'),
+                    $this->addWrapper(Yaml::dump($vars)),
                 ];
             }
-            if ($methods = get_class_methods($serviceInstance)) {
+            if ($methods = get_class_methods($class_name)) {
                 sort($methods);
                 $this->extendArgumentList($serviceInstance, $methods);
                 $serviceDetail[] = [
-                    '<fg=green>'.$this->trans('commands.debug.container.messages.methods').'</>',
-                    '<fg=yellow>'.implode("\n", $methods).'</>'
+                    $this->addGreenTranslationWrapper('commands.debug.container.messages.methods'),
+                    $this->addWrapper(implode("\n", $methods)),
                 ];
             }
         } else {
@@ -240,6 +292,50 @@ private function getServiceDetail($service)
 
         return $serviceDetail;
     }
+
+    /**
+     * Adds a wrapper with a color
+     *
+     * @param string $text
+     *   Text.
+     * @param string $color
+     *   Color.
+     *
+     * @return string
+     *   Result of the wrapping.
+     */
+    private function addWrapper($text, $color = ContainerCommand::YELLOW)
+    {
+        return "<fg=$color>$text</>";
+    }
+
+    /**
+     * Adds green color wrapper.
+     *
+     * @param string $translationString
+     *   Translation string.
+     *
+     * @return string
+     *   Result of the wrapping.
+     */
+    private function addGreenTranslationWrapper($translationString)
+    {
+        return $this->addTranslationWrapper($translationString, ContainerCommand::GREEN);
+    }
+
+    /**
+     * Adds green color wrapper.
+     *
+     * @param string $translationString
+     *   Translation string.
+     *
+     * @return string
+     *   Result of the wrapping.
+     */
+    private function addTranslationWrapper($translationString, $color = ContainerCommand::YELLOW) {
+        return $this->addWrapper($this->trans($translationString), $color);
+    }
+
     private function extendArgumentList($serviceInstance, &$methods)
     {
         foreach ($methods as $k => $m) {
@@ -248,37 +344,48 @@ private function extendArgumentList($serviceInstance, &$methods)
             $p = [];
 
             for ($i = 0; $i < count($params); $i++) {
+
                 if ($params[$i]->isDefaultValueAvailable()) {
                     $defaultVar = $params[$i]->getDefaultValue();
-                    $defaultVar = " = <fg=magenta>".str_replace(["\n","array ("], ["", "array("], var_export($def, true)).'</>';
+                    $defaultVar = ' = ' . $this->addWrapper(str_replace(["\n",'array ('], ['', 'array('], var_export($defaultVar, true)), ContainerCommand::MAGENTA);
                 } else {
                     $defaultVar = '';
                 }
+
                 if (method_exists($params[$i], 'hasType') && method_exists($params[$i], 'getType')) {
                     if ($params[$i]->hasType()) {
-                        $defaultType = '<fg=white>'.strval($params[$i]->getType()).'</> ';
+                        $defaultType = $this->addWrapper( strval($params[$i]->getType()), ContainerCommand::WHITE) . ' ';
                     } else {
                         $defaultType = '';
                     }
                 } else {
                     $defaultType = '';
                 }
+
                 if ($params[$i]->isPassedByReference()) {
-                    $parameterReference = '<fg=yellow>&</>';
+                    $parameterReference = $this->addWrapper('&');
                 } else {
                     $parameterReference = '';
                 }
-                $p[] = $defaultType.$parameterReference.'<fg=red>'.'$</><fg=red>'.$params[$i]->getName().'</>'.$defaultVar;
+
+                $p[] = $defaultType . $parameterReference . $this->addWrapper('$' . $params[$i]->getName(), ContainerCommand::RED) . $defaultVar;
             }
+
             if ($reflection->isPublic()) {
-                $methods[$k] = '<fg=cyan>'.$methods[$k]."</><fg=blue>(</>".implode(', ', $p)."<fg=blue>) </> ";
+                $methods[$k] = $this->addWrapper($methods[$k], ContainerCommand::CYAN) . $this->addWrapper('(', ContainerCommand::BLUE) . implode(', ', $p) . $this->addWrapper(')', ContainerCommand::BLUE);
             }
         }
     }
 
+    /**
+     * Get parameter list.
+     *
+     * @return array
+     *   Array with parameter.
+     */
     private function getParameterList()
     {
-        $parameters = array_filter(
+        return array_filter(
             $this->container->getParameterBag()->all(), function ($name) {
                 if (preg_match('/^container\./', $name)) {
                     return false;
@@ -292,7 +399,5 @@ private function getParameterList()
                 return true;
             }, ARRAY_FILTER_USE_KEY
         );
-
-        return $parameters;
     }
 }
diff --git a/vendor/drupal/console/src/Command/Debug/DatabaseTableCommand.php b/vendor/drupal/console/src/Command/Debug/DatabaseTableCommand.php
index 5f0768e1b32e93acfe3a404cd28d32bddfd21128..88399381b4e070297f257bbece133c9e0123cc08 100644
--- a/vendor/drupal/console/src/Command/Debug/DatabaseTableCommand.php
+++ b/vendor/drupal/console/src/Command/Debug/DatabaseTableCommand.php
@@ -76,9 +76,12 @@ protected function execute(InputInterface $input, OutputInterface $output)
         $table = $input->getArgument('table');
         $databaseConnection = $this->resolveConnection($database);
         if ($table) {
-            $result = $this->database
-                ->query('DESCRIBE '. $table .';')
-                ->fetchAll();
+
+            $result = $databaseConnection['driver'] == 'sqlite' ? $this->database->query('PRAGMA table_info('.$table.');') :
+                $this->database
+                    ->query('DESCRIBE ' . $table . ';')
+                    ->fetchAll();
+
             if (!$result) {
                 throw new \Exception(
                     sprintf(
@@ -96,8 +99,8 @@ protected function execute(InputInterface $input, OutputInterface $output)
             foreach ($result as $record) {
                 $column = json_decode(json_encode($record), true);
                 $tableRows[] = [
-                    'column' => $column['Field'],
-                    'type' => $column['Type'],
+                    'column' => $column[$databaseConnection['driver'] == 'sqlite' ? 'name': 'Field'],
+                    'type' => $column[$databaseConnection['driver'] == 'sqlite' ? 'type': 'Type'],
                 ];
             }
 
@@ -107,7 +110,9 @@ protected function execute(InputInterface $input, OutputInterface $output)
         }
 
         $schema = $this->database->schema();
-        $tables = $schema->findTables('%');
+
+        $tables = $databaseConnection['driver'] == 'sqlite' ? array_keys($this->database->query('SELECT name FROM sqlite_master WHERE type = "table" AND name NOT LIKE "sqlite_%";')
+            ->fetchAllAssoc('name')) : $schema->findTables('%');
 
         $this->getIo()->comment(
             sprintf(
diff --git a/vendor/drupal/console/src/Command/Debug/EntityCommand.php b/vendor/drupal/console/src/Command/Debug/EntityCommand.php
index 89656120f67203b744bcf85e9a685da5d0176d7e..cf9d07927a77c7332a29e7860c02aec8a48440d1 100644
--- a/vendor/drupal/console/src/Command/Debug/EntityCommand.php
+++ b/vendor/drupal/console/src/Command/Debug/EntityCommand.php
@@ -10,13 +10,13 @@
 use Symfony\Component\Console\Input\InputInterface;
 use Symfony\Component\Console\Output\OutputInterface;
 use Drupal\Console\Core\Command\Command;
-use Drupal\Core\Entity\EntityTypeRepository;
+use Drupal\Core\Entity\EntityTypeRepositoryInterface;
 use Drupal\Core\Entity\EntityTypeManagerInterface;
 
 class EntityCommand extends Command
 {
     /**
-     * @var EntityTypeRepository
+     * @var EntityTypeRepositoryInterface
      */
     protected $entityTypeRepository;
 
@@ -28,11 +28,11 @@ class EntityCommand extends Command
     /**
      * EntityCommand constructor.
      *
-     * @param EntityTypeRepository       $entityTypeRepository
-     * @param EntityTypeManagerInterface $entityTypeManager
+     * @param EntityTypeRepositoryInterface $entityTypeRepository
+     * @param EntityTypeManagerInterface    $entityTypeManager
      */
     public function __construct(
-        EntityTypeRepository $entityTypeRepository,
+        EntityTypeRepositoryInterface $entityTypeRepository,
         EntityTypeManagerInterface $entityTypeManager
     ) {
         $this->entityTypeRepository = $entityTypeRepository;
diff --git a/vendor/drupal/console/src/Command/Debug/HookCommand.php b/vendor/drupal/console/src/Command/Debug/HookCommand.php
new file mode 100644
index 0000000000000000000000000000000000000000..9e748704ee785b3bc6a7a09c24c549b953201039
--- /dev/null
+++ b/vendor/drupal/console/src/Command/Debug/HookCommand.php
@@ -0,0 +1,198 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Console\Command\Debug\HookCommand.
+ */
+
+namespace Drupal\Console\Command\Debug;
+
+use Drupal\Console\Core\Command\Command;
+use Drupal\Console\Extension\Manager;
+use Drupal\Component\Utility;
+use Drupal\Core\Extension\ModuleHandlerInterface;
+use Symfony\Component\Console\Input\InputArgument;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+use Symfony\Component\Finder\Finder;
+
+/**
+ * Class HookCommand.
+ *
+ * @package Drupal\Console\Command\Debug
+ */
+class HookCommand extends Command
+{
+    /**
+     * @var Manager $extensionManager
+     */
+    protected $extensionManager = null;
+
+    /**
+     * @var ModuleHandlerInterface
+     */
+    protected $moduleHandler;
+
+    /**
+     * @var array
+     */
+    protected $hooks = [];
+
+    /**
+     * HookCommand constructor.
+     *
+     * @param Manager $extensionManager
+     * @param ModuleHandlerInterface $moduleHandler
+     *
+     */
+    public function __construct(
+        Manager $extensionManager,
+        ModuleHandlerInterface $moduleHandler
+    ) {
+        $this->extensionManager = $extensionManager;
+        $this->moduleHandler = $moduleHandler;
+        parent::__construct();
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function configure()
+    {
+        $this
+            ->setName('debug:hook')
+            ->setDescription($this->trans('commands.debug.hook.description'))
+            ->setAliases(['dbh']);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function execute(InputInterface $input, OutputInterface $output)
+    {
+        $this->findHooks();
+        $tableHeader = [
+            $this->trans('commands.debug.hook.messages.name'),
+        ];
+
+        $this->getIo()->table($tableHeader, $this->getHooks(), 'compact');
+        return 0;
+    }
+
+    protected function findHooks()
+    {
+        $modules = $this->getAllModules();
+        $moduleInstances = [];
+        foreach ($modules as $module) {
+            $moduleInstance = $this->extensionManager->getModule($module);
+            if (empty($moduleInstance)) {
+                continue;
+            }
+            $moduleInstances[$module] = $moduleInstance;
+            $this->moduleHandler->setModuleList([$module => $moduleInstance]);
+            $this->findHooksInApiFile($moduleInstance);
+
+        }
+        $this->getHooksFromHookInfo($moduleInstances);
+    }
+
+    /**
+     * Get module of all modules in the system.
+     *
+     * @return array
+     *   Module list.
+     */
+    protected function getAllModules()
+    {
+        return $this->extensionManager->discoverModules()
+                    ->showInstalled()
+                    ->showUninstalled()
+                    ->showNoCore()
+                    ->showCore()
+                    ->getList(true);
+    }
+
+    /**
+     * Gets gooks from api file of the module.
+     *
+     * @param $moduleInstance
+     *   Module instance.
+     */
+    protected function findHooksInApiFile($moduleInstance)
+    {
+        $finder = new Finder();
+        $files = $finder->files()
+            ->name("{$moduleInstance->info['name']}.api.php")
+            ->in($moduleInstance->getPath());
+
+        foreach ($files as $file) {
+            $functions = $this->getFileFunctions($file->getPathname());
+            foreach ($functions as $function) {
+                if (Unicode::strpos($function, 'hook')) {
+                    $this->addHook($function);
+                }
+            }
+
+        }
+    }
+
+    /**
+     * Get names of all functions from file.
+     *
+     * @param string $filePath
+     *   File path
+     * @return array
+     *   Functions list.
+     */
+    protected function getFileFunctions($filePath)
+    {
+        $source = file_get_contents($filePath);
+        $tokens = token_get_all($source);
+
+        $functions = [];
+        $nextStringIsFunc = false;
+        foreach($tokens as $token) {
+            switch($token[0]) {
+                case T_FUNCTION:
+                    $nextStringIsFunc = true;
+                    break;
+
+                case T_STRING:
+                    if ($nextStringIsFunc) {
+                        $nextStringIsFunc = false;
+                        $functions[] = $token[1];
+                    }
+                    break;
+            }
+        }
+
+        return $functions;
+    }
+
+    /**
+     * @param $modules
+     */
+    protected function getHooksFromHookInfo($modules)
+    {
+        $this->moduleHandler->setModuleList($modules);
+        foreach(array_keys($this->moduleHandler->getHookInfo()) as $hook) {
+            $this->addHook('hook_' . $hook);
+        }
+    }
+
+    /**
+     * Add hook.
+     *
+     * @param string $value
+     *   Hook name.
+     */
+    protected function addHook($value)
+    {
+        $this->hooks[] = $value;
+    }
+
+    protected function getHooks()
+    {
+        return $this->hooks;
+    }
+}
diff --git a/vendor/drupal/console/src/Command/Debug/ModuleCommand.php b/vendor/drupal/console/src/Command/Debug/ModuleCommand.php
index eee1fbd4a6fdc383861fb286543db31a6870f80f..e9835606f3224399d858139b1241cee2fbe59338 100644
--- a/vendor/drupal/console/src/Command/Debug/ModuleCommand.php
+++ b/vendor/drupal/console/src/Command/Debug/ModuleCommand.php
@@ -7,13 +7,12 @@
 
 namespace Drupal\Console\Command\Debug;
 
-use Symfony\Component\Console\Input\InputArgument;
 use Symfony\Component\Console\Input\InputOption;
-use Symfony\Component\Console\Input\InputInterface;
 use Symfony\Component\Console\Output\OutputInterface;
+use Symfony\Component\Console\Input\InputArgument;
+use Symfony\Component\Console\Input\InputInterface;
 use Drupal\Console\Core\Command\Command;
 use Drupal\Console\Utils\Site;
-use GuzzleHttp\Client;
 use Drupal\Console\Core\Utils\ConfigurationManager;
 
 class ModuleCommand extends Command
@@ -28,14 +27,6 @@ class ModuleCommand extends Command
      */
     protected $site;
 
-    /**
-     * DebugCommand constructor.
-     *
-     * @param Client  $httpClient
-     */
-
-    protected $httpClient;
-
     /**
      * ChainDebugCommand constructor.
      *
@@ -44,12 +35,10 @@ class ModuleCommand extends Command
      */
     public function __construct(
         ConfigurationManager $configurationManager,
-        Site $site,
-        Client $httpClient
+        Site $site
     ) {
         $this->configurationManager = $configurationManager;
         $this->site = $site;
-        $this->httpClient = $httpClient;
         parent::__construct();
     }
 
@@ -84,61 +73,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
 
         $status = strtolower($input->getOption('status'));
         $type = strtolower($input->getOption('type'));
-        $modules = strtolower($input->getArgument('module'));
-
-        if ($modules) {
-            $config = $this->configurationManager->getConfiguration();
-            $repo = $config->get('application.composer.repositories.default');
-
-            foreach ($modules as $module) {
-                $url = sprintf(
-                    '%s/packages/drupal/%s.json',
-                    $config->get('application.composer.packages.default'),
-                    $module
-                );
-
-                try {
-                    $data = $this->httpClient->getUrlAsJson($repo . $url);
-                } catch (\Exception $e) {
-                    $this->getIo()->error(
-                        sprintf(
-                            $this->trans('commands.debug.module.messages.no-results'),
-                            $module
-                        )
-                    );
-
-                    return 1;
-                }
-
-                $tableHeader = [
-                  '<info>'.$data->package->name.'</info>'
-                ];
-
-                $tableRows = [];
-
-                $tableRows[] = [
-                  $data->package->description
-                ];
-
-                $tableRows[] = [
-                  '<comment>'.$this->trans('commands.debug.module.messages.total-downloads').'</comment>',
-                  $data->package->downloads->total
-                ];
-
-                $tableRows[] = [
-                  '<comment>'.$this->trans('commands.debug.module.messages.total-monthly').'</comment>',
-                  $data->package->downloads->monthly
-                ];
-
-                $tableRows[] = [
-                  '<comment>'.$this->trans('commands.debug.module.messages.total-daily').'</comment>',
-                  $data->package->downloads->daily
-                ];
-
-                $this->getIo()->table($tableHeader, $tableRows, 'compact');
-            }
-            return 0;
-        }
+        $modules = $input->getArgument('module');
 
         if ($status == 'installed') {
             $status = 1;
@@ -166,32 +101,58 @@ protected function execute(InputInterface $input, OutputInterface $output)
           $this->trans('commands.debug.module.messages.origin'),
         ];
 
-        $tableRows = [];
-        $modules = system_rebuild_module_data();
-        foreach ($modules as $module_id => $module) {
-            if ($status >= 0 && $status != $module->status) {
+        $tableRows = $this->getModules($status, $type, $modules);
+
+        $this->getIo()->table($tableHeader, $tableRows, 'compact');
+    }
+
+    /**
+     * Get the module info
+     * @param $status
+     * @param $type
+     * @param $modules
+     *
+     * @return array
+     */
+    private function getModules($status, $type, $modules) {
+
+        $result = [];
+        $modulesData = system_rebuild_module_data();
+
+        if(!$modules) {
+            $modules = array_keys($modulesData) ;
+        }
+
+        foreach ($modules as $module) {
+            $moduleData = $modulesData[strtolower($module)];
+
+            if(!$moduleData) {
+                continue;
+            }
+
+            if ($status >= 0 && $status != $moduleData->status) {
                 continue;
             }
 
-            if ($type !== null && $type !== $module->origin) {
+            if ($type !== null && $type !== $moduleData->origin) {
                 continue;
             }
 
-            $module_status = ($module->status) ? $this->trans('commands.debug.module.messages.installed') : $this->trans('commands.debug.module.messages.uninstalled');
-            $module_origin = ($module->origin) ? $module->origin : 'no core';
-            $schema_version = (drupal_get_installed_schema_version($module_id)!= -1?drupal_get_installed_schema_version($module_id): '');
-
-            $tableRows [] = [
-              $module_id,
-              $module->info['name'],
-              $module->info['package'],
-              $module->info['version'],
-              $schema_version,
-              $module_status,
-              $module_origin,
+            $module_status = ($moduleData->status) ? $this->trans('commands.debug.module.messages.installed') : $this->trans('commands.debug.module.messages.uninstalled');
+            $module_origin = ($moduleData->origin) ? $moduleData->origin : 'no core';
+            $schema_version = (drupal_get_installed_schema_version($module)!= -1?drupal_get_installed_schema_version($module): '');
+
+            $result [] = [
+                $module,
+                $moduleData->info['name'],
+                $moduleData->info['package'],
+                $moduleData->info['version'],
+                $schema_version,
+                $module_status,
+                $module_origin,
             ];
         }
 
-        $this->getIo()->table($tableHeader, $tableRows, 'compact');
+        return $result;
     }
 }
diff --git a/vendor/drupal/console/src/Command/Debug/PermissionCommand.php b/vendor/drupal/console/src/Command/Debug/PermissionCommand.php
index 99acbb9c6b2a1d652ed2add972627aaa20725f68..964480e6f098138433a21e69a78dbc590c92f674 100644
--- a/vendor/drupal/console/src/Command/Debug/PermissionCommand.php
+++ b/vendor/drupal/console/src/Command/Debug/PermissionCommand.php
@@ -2,22 +2,22 @@
 
 /**
  * @file
- * Contains \Drupal\Console\Command\PermissionDebugCommand.
+ * Contains \Drupal\Console\Command\PermissionCommand.
  */
 
 namespace Drupal\Console\Command\Debug;
 
+use Drupal\Console\Core\Command\Command;
 use Symfony\Component\Console\Input\InputInterface;
 use Symfony\Component\Console\Output\OutputInterface;
 use Symfony\Component\Console\Input\InputArgument;
-use Drupal\Console\Core\Command\ContainerAwareCommand;
 
 /**
  * Class DebugCommand
  *
  * @package Drupal\Console\Command\Debug
  */
-class PermissionCommand extends ContainerAwareCommand
+class PermissionCommand extends Command
 {
     /**
      * {@inheritdoc}
diff --git a/vendor/drupal/console/src/Command/Debug/PluginCommand.php b/vendor/drupal/console/src/Command/Debug/PluginCommand.php
index f6a661d8e91d1df10ecaba01905139977ab64f03..11536aceebeaf6788aa175ac7df0c780f95013cb 100644
--- a/vendor/drupal/console/src/Command/Debug/PluginCommand.php
+++ b/vendor/drupal/console/src/Command/Debug/PluginCommand.php
@@ -107,8 +107,108 @@ protected function execute(InputInterface $input, OutputInterface $output)
             $this->trans('commands.debug.plugin.table-headers.definition-key'),
             $this->trans('commands.debug.plugin.table-headers.definition-value')
         ];
+
+        $tableRows = $this->prepareTableRows($definition);
+
+        ksort($tableRows);
+        $this->getIo()->table($tableHeader, array_values($tableRows));
+
+        $this->displayPluginData($pluginType, $pluginId);
+        return true;
+    }
+
+    /**
+     * Displays additional plugin data.
+     *
+     * @param string $pluginType
+     *   Plugin type.
+     * @param $pluginId
+     *   Plugin ID.
+     */
+    protected function displayPluginData($pluginType, $pluginId) {
+        switch ($pluginType) {
+            case 'field.field_type':
+                $this->getFieldTypeData($pluginId);
+                break;
+
+            case 'field.formatter':
+                $this->getFieldFormatterData($pluginId);
+                break;
+
+            case 'field.widget':
+                $this->getFieldWidgetData($pluginId);
+                break;
+        }
+    }
+
+    /**
+     * Get field type plugin additional data.
+     *
+     * @param string $pluginId
+     *   Plugin ID.
+     */
+    protected function getFieldTypeData($pluginId) {
+        $settings = $this->container->get('plugin.manager.field.field_type')->getDefaultFieldSettings($pluginId);
+        $this->displaySettingsTable($settings);
+    }
+
+    /**
+     * Get field formatter plugin additional data.
+     *
+     * @param string $pluginId
+     *   Plugin ID.
+     */
+    protected function getFieldFormatterData($pluginId) {
+        $settings = $this->container->get('plugin.manager.field.formatter')->getDefaultSettings($pluginId);
+        $this->displaySettingsTable($settings);
+    }
+
+    /**
+     * Get field widget plugin additional data.
+     *
+     * @param string $pluginId
+     *   Plugin ID.
+     */
+    protected function getFieldWidgetData($pluginId) {
+        $settings = $this->container->get('plugin.manager.field.widget')->getDefaultSettings($pluginId);
+        $this->displaySettingsTable($settings);
+    }
+
+    /**
+     * Displays settings table.
+     *
+     * @param array $settings
+     *   Settings array.
+     */
+    protected function displaySettingsTable($settings) {
+        $tableHeader = [
+          $this->trans('commands.debug.plugin.table-headers.setting'),
+          $this->trans('commands.debug.plugin.table-headers.definition-value')
+        ];
+
+        $tableRows = $this->prepareTableRows($settings);
+
+        if (count($tableRows) > 0) {
+            $this->getIo()->newLine(1);
+            $this->getIo()->info(
+              $this->trans('commands.debug.plugin.messages.plugin-info')
+            );
+            $this->getIo()->table($tableHeader, array_values($tableRows));
+        }
+    }
+
+    /**
+     * Prepare table rows.
+     *
+     * @param array $items
+     *   Data array.
+     *
+     * @return array
+     *   Table rows.
+     */
+    protected function prepareTableRows($items) {
         $tableRows = [];
-        foreach ($definition as $key => $value) {
+        foreach ($items as $key => $value) {
             if (is_object($value) && method_exists($value, '__toString')) {
                 $value = (string) $value;
             } elseif (is_array($value) || is_object($value)) {
@@ -116,10 +216,8 @@ protected function execute(InputInterface $input, OutputInterface $output)
             } elseif (is_bool($value)) {
                 $value = ($value) ? 'TRUE' : 'FALSE';
             }
-            $tableRows[$key] = [$key, $value];
+            $tableRows[] = [$key, $value];
         }
-        ksort($tableRows);
-        $this->getIo()->table($tableHeader, array_values($tableRows));
-        return true;
+        return $tableRows;
     }
 }
diff --git a/vendor/drupal/console/src/Command/Debug/RestCommand.php b/vendor/drupal/console/src/Command/Debug/RestCommand.php
index 1aaa6a7a30fbc66163904d756e19601facf817c1..527051f90790fdc213025e3705d1591bef061b21 100644
--- a/vendor/drupal/console/src/Command/Debug/RestCommand.php
+++ b/vendor/drupal/console/src/Command/Debug/RestCommand.php
@@ -15,6 +15,7 @@
 use Drupal\Console\Annotations\DrupalCommand;
 use Drupal\Console\Command\Shared\RestTrait;
 use Drupal\rest\Plugin\Type\ResourcePluginManager;
+use Drupal\Core\Entity\EntityTypeManagerInterface;
 
 /**
  * @DrupalCommand(
@@ -26,6 +27,11 @@ class RestCommand extends Command
 {
     use RestTrait;
 
+    /**
+     * @var EntityTypeManagerInterface
+     */
+    protected $entityTypeManager;
+
     /**
      * @var ResourcePluginManager $pluginManagerRest
      */
@@ -34,10 +40,14 @@ class RestCommand extends Command
     /**
      * RestCommand constructor.
      *
-     * @param ResourcePluginManager $pluginManagerRest
+     * @param EntityTypeManagerInterface $entityTypeManager
+     * @param ResourcePluginManager      $pluginManagerRest
      */
-    public function __construct(ResourcePluginManager $pluginManagerRest)
-    {
+    public function __construct(
+        EntityTypeManagerInterface $entityTypeManager,
+        ResourcePluginManager $pluginManagerRest
+    ) {
+        $this->entityTypeManager = $entityTypeManager;
         $this->pluginManagerRest = $pluginManagerRest;
         parent::__construct();
     }
diff --git a/vendor/drupal/console/src/Command/Debug/RouterCommand.php b/vendor/drupal/console/src/Command/Debug/RouterCommand.php
index 17cd7dc02639c7a0fc69ffaabf7dcb55a0b3a0d0..16599c2275bd90f2dc0f5aebacaf57840a0c3154 100644
--- a/vendor/drupal/console/src/Command/Debug/RouterCommand.php
+++ b/vendor/drupal/console/src/Command/Debug/RouterCommand.php
@@ -7,12 +7,14 @@
 
 namespace Drupal\Console\Command\Debug;
 
+
+use Drupal\Console\Core\Command\Command;
+use Drupal\Component\Serialization\Yaml;
+use Drupal\Core\Routing\RouteProviderInterface;
 use Symfony\Component\Console\Input\InputArgument;
 use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputOption;
 use Symfony\Component\Console\Output\OutputInterface;
-use Drupal\Console\Core\Command\Command;
-use Drupal\Core\Routing\RouteProviderInterface;
-use Drupal\Component\Serialization\Yaml;
 
 class RouterCommand extends Command
 {
@@ -42,15 +44,24 @@ protected function configure()
                 InputArgument::OPTIONAL | InputArgument::IS_ARRAY,
                 $this->trans('commands.debug.router.arguments.route-name')
             )
+            ->addOption(
+                'pattern',
+                null,
+                InputArgument::OPTIONAL,
+                $this->trans('commands.debug.router.options.pattern')
+            )
             ->setAliases(['dr']);
     }
 
     protected function execute(InputInterface $input, OutputInterface $output)
     {
         $route_name = $input->getArgument('route-name');
+        $pattern = $input->getOption('pattern');
 
-        if ($route_name) {
-            $this->getRouteByNames($route_name);
+        if (!empty($route_name)) {
+            $this->getRoutesTables($this->routeProvider->getRoutesByNames($route_name));
+        } elseif (!empty($pattern)) {
+            $this->getRoutesTables($this->routeProvider->getRoutesByPattern($pattern));
         } else {
             $this->getAllRoutes();
         }
@@ -73,35 +84,33 @@ protected function getAllRoutes()
         $this->getIo()->table($tableHeader, $tableRows, 'compact');
     }
 
-    protected function getRouteByNames($route_name)
+    protected function getRoutesTables($routes)
     {
-        $routes = $this->routeProvider->getRoutesByNames($route_name);
-
         foreach ($routes as $name => $route) {
             $tableHeader = [
                 $this->trans('commands.debug.router.messages.route'),
-                '<info>'.$name.'</info>'
+                '<info>' . $name . '</info>'
             ];
             $tableRows = [];
 
             $tableRows[] = [
-                '<comment>'.$this->trans('commands.debug.router.messages.path').'</comment>',
+                '<comment>' . $this->trans('commands.debug.router.messages.path') . '</comment>',
                 $route->getPath(),
             ];
 
-            $tableRows[] = ['<comment>'.$this->trans('commands.debug.router.messages.defaults').'</comment>'];
+            $tableRows[] = ['<comment>' . $this->trans('commands.debug.router.messages.defaults') . '</comment>'];
             $attributes = $this->addRouteAttributes($route->getDefaults());
             foreach ($attributes as $attribute) {
                 $tableRows[] = $attribute;
             }
 
-            $tableRows[] = ['<comment>'.$this->trans('commands.debug.router.messages.requirements').'</comment>'];
+            $tableRows[] = ['<comment>' . $this->trans('commands.debug.router.messages.requirements') . '</comment>'];
             $requirements = $this->addRouteAttributes($route->getRequirements());
             foreach ($requirements as $requirement) {
                 $tableRows[] = $requirement;
             }
 
-            $tableRows[] = ['<comment>'.$this->trans('commands.debug.router.messages.options').'</comment>'];
+            $tableRows[] = ['<comment>' . $this->trans('commands.debug.router.messages.options') . '</comment>'];
             $options = $this->addRouteAttributes($route->getOptions());
             foreach ($options as $option) {
                 $tableRows[] = $option;
@@ -116,7 +125,7 @@ protected function addRouteAttributes($attr, $attributes = null)
         foreach ($attr as $key => $value) {
             if (is_array($value)) {
                 $attributes[] = [
-                  ' '.$key,
+                  ' ' . $key,
                   str_replace(
                       '- ',
                       '',
@@ -124,7 +133,7 @@ protected function addRouteAttributes($attr, $attributes = null)
                   )
                 ];
             } else {
-                $attributes[] = [' '.$key, $value];
+                $attributes[] = [' ' . $key, $value];
             }
         }
 
diff --git a/vendor/drupal/console/src/Command/Debug/UpdateCommand.php b/vendor/drupal/console/src/Command/Debug/UpdateCommand.php
index d0ff04ddc8be75ac8843c4f2a3a9a1a08422b9b7..6f24765d671f80ecae5a9a30e0647691cfd7ab11 100644
--- a/vendor/drupal/console/src/Command/Debug/UpdateCommand.php
+++ b/vendor/drupal/console/src/Command/Debug/UpdateCommand.php
@@ -7,6 +7,7 @@
 
 namespace Drupal\Console\Command\Debug;
 
+use Drupal\Console\Command\Shared\UpdateTrait;
 use Symfony\Component\Console\Input\InputInterface;
 use Symfony\Component\Console\Output\OutputInterface;
 use Drupal\Console\Core\Command\Command;
@@ -15,6 +16,8 @@
 
 class UpdateCommand extends Command
 {
+    use UpdateTrait;
+
     /**
      * @var Site
      */
@@ -65,16 +68,17 @@ protected function execute(InputInterface $input, OutputInterface $output)
         $requirements = update_check_requirements();
         $severity = drupal_requirements_severity($requirements);
         $updates = update_get_update_list();
+        $postUpdates = $this->postUpdateRegistry->getPendingUpdateInformation();
 
         $this->getIo()->newLine();
 
         if ($severity == REQUIREMENT_ERROR || ($severity == REQUIREMENT_WARNING)) {
             $this->populateRequirements($requirements);
-        } elseif (empty($updates)) {
+        } elseif (empty($updates) && empty($postUpdates)) {
             $this->getIo()->info($this->trans('commands.debug.update.messages.no-updates'));
         } else {
-            $this->populateUpdate($updates);
-            $this->populatePostUpdate();
+            $this->showUpdateTable($updates, $this->trans('commands.debug.update.messages.module-list'));
+            $this->showPostUpdateTable($postUpdates, $this->trans('commands.debug.update.messages.module-list-post-update'));
         }
     }
 
@@ -110,54 +114,4 @@ private function populateRequirements($requirements)
 
         $this->getIo()->table($tableHeader, $tableRows);
     }
-
-    /**
-     * @param $updates
-     */
-    private function populateUpdate($updates)
-    {
-        $this->getIo()->info($this->trans('commands.debug.update.messages.module-list'));
-        $tableHeader = [
-          $this->trans('commands.debug.update.messages.module'),
-          $this->trans('commands.debug.update.messages.update-n'),
-          $this->trans('commands.debug.update.messages.description')
-        ];
-        $tableRows = [];
-        foreach ($updates as $module => $module_updates) {
-            foreach ($module_updates['pending'] as $update_n => $update) {
-                list(, $description) = explode($update_n . " - ", $update);
-                $tableRows[] = [
-                  $module,
-                  $update_n,
-                  trim($description),
-                ];
-            }
-        }
-        $this->getIo()->table($tableHeader, $tableRows);
-    }
-
-    private function populatePostUpdate()
-    {
-        $this->getIo()->info(
-            $this->trans('commands.debug.update.messages.module-list-post-update')
-        );
-        $tableHeader = [
-          $this->trans('commands.debug.update.messages.module'),
-          $this->trans('commands.debug.update.messages.post-update'),
-          $this->trans('commands.debug.update.messages.description')
-        ];
-
-        $postUpdates = $this->postUpdateRegistry->getPendingUpdateInformation();
-        $tableRows = [];
-        foreach ($postUpdates as $module => $module_updates) {
-            foreach ($module_updates['pending'] as $postUpdateFunction => $message) {
-                $tableRows[] = [
-                  $module,
-                  $postUpdateFunction,
-                  $message,
-                ];
-            }
-        }
-        $this->getIo()->table($tableHeader, $tableRows);
-    }
 }
diff --git a/vendor/drupal/console/src/Command/Debug/UpdateComposerCommand.php b/vendor/drupal/console/src/Command/Debug/UpdateComposerCommand.php
new file mode 100644
index 0000000000000000000000000000000000000000..2e64fc24a1788076a5ef42da2f2573f61b719b57
--- /dev/null
+++ b/vendor/drupal/console/src/Command/Debug/UpdateComposerCommand.php
@@ -0,0 +1,71 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Console\Command\Debug\UpdateComposerCommand.
+ */
+
+namespace Drupal\Console\Command\Debug;
+
+use Drupal\Console\Command\Shared\UpdateTrait;
+use Drupal\Console\Core\Utils\DrupalFinder;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Output\OutputInterface;
+use Drupal\Console\Core\Command\Command;
+use Symfony\Component\Process\Process;
+
+class UpdateComposerCommand extends Command
+{
+    use UpdateTrait;
+
+    /**
+     * @var DrupalFinder
+     */
+    protected $drupalFinder;
+
+    /**
+     * DebugComposerCommand constructor.
+     *
+     * @param DrupalFinder $drupalFinder
+     */
+    public function __construct(DrupalFinder $drupalFinder) {
+        $this->drupalFinder = $drupalFinder;
+        parent::__construct();
+    }
+
+    /**
+     * @inheritdoc
+     */
+    protected function configure()
+    {
+        $this
+            ->setName('debug:update:composer')
+            ->setDescription($this->trans('commands.debug.update.composer.description'))
+            ->addOption(
+                'only-drupal',
+                null,
+                InputOption::VALUE_NONE,
+                $this->trans('commands.debug.update.composer.options.only-drupal')
+            )
+            ->setAliases(['duc']);
+    }
+
+    /**
+     * @inheritdoc
+     */
+    protected function execute(InputInterface $input, OutputInterface $output)
+    {
+        $onlyDrupal = $input->getOption('only-drupal');
+
+        $process = new Process("composer show --outdated --format=json");
+        $process->setTimeout(null);
+        $process->setWorkingDirectory($this->drupalFinder->getComposerRoot());
+        $process->run();
+
+        if($process->isSuccessful()){
+            $jsonData = json_decode($process->getOutput());
+            $this->showComposerUpdateTable($jsonData->installed, $onlyDrupal, $this->trans('commands.debug.update.composer.messages.composer-list'));
+        }
+    }
+}
diff --git a/vendor/drupal/console/src/Command/Debug/UserCommand.php b/vendor/drupal/console/src/Command/Debug/UserCommand.php
index 4139f1e50b387ded4ffe04a57e5f69eec867c1f1..61c53d2352b5824fd63829ec755ebc4c1f547738 100644
--- a/vendor/drupal/console/src/Command/Debug/UserCommand.php
+++ b/vendor/drupal/console/src/Command/Debug/UserCommand.php
@@ -12,7 +12,6 @@
 use Symfony\Component\Console\Output\OutputInterface;
 use Drupal\Console\Core\Command\Command;
 use Drupal\Core\Entity\EntityTypeManagerInterface;
-use Drupal\Core\Entity\Query\QueryFactory;
 use Drupal\Console\Utils\DrupalApi;
 
 /**
@@ -27,11 +26,6 @@ class UserCommand extends Command
      */
     protected $entityTypeManager;
 
-    /**
-     * @var QueryFactory
-     */
-    protected $entityQuery;
-
     /**
      * @var DrupalApi
      */
@@ -41,16 +35,13 @@ class UserCommand extends Command
      * DebugCommand constructor.
      *
      * @param EntityTypeManagerInterface $entityTypeManager
-     * @param QueryFactory               $entityQuery
      * @param DrupalApi                  $drupalApi
      */
     public function __construct(
         EntityTypeManagerInterface $entityTypeManager,
-        QueryFactory $entityQuery,
         DrupalApi $drupalApi
     ) {
         $this->entityTypeManager = $entityTypeManager;
-        $this->entityQuery = $entityQuery;
         $this->drupalApi = $drupalApi;
         parent::__construct();
     }
@@ -110,7 +101,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
         $userStorage = $this->entityTypeManager->getStorage('user');
         $systemRoles = $this->drupalApi->getRoles();
 
-        $query = $this->entityQuery->get('user');
+        $query = $this->entityTypeManager->getStorage('user')->getQuery();
         $query->condition('uid', 0, '>');
         $query->sort('uid');
 
diff --git a/vendor/drupal/console/src/Command/Debug/ViewsPluginsCommand.php b/vendor/drupal/console/src/Command/Debug/ViewsPluginsCommand.php
index 3a568b5b94ad70dc966fc2680e839f7bf6f7e5ad..81a53b71548e28cedec56989b3e82f0ed3f2cb89 100644
--- a/vendor/drupal/console/src/Command/Debug/ViewsPluginsCommand.php
+++ b/vendor/drupal/console/src/Command/Debug/ViewsPluginsCommand.php
@@ -7,18 +7,18 @@
 
 namespace Drupal\Console\Command\Debug;
 
+use Drupal\Console\Core\Command\Command;
+use Drupal\views\Views;
 use Symfony\Component\Console\Input\InputArgument;
 use Symfony\Component\Console\Input\InputInterface;
 use Symfony\Component\Console\Output\OutputInterface;
-use Drupal\Console\Core\Command\ContainerAwareCommand;
-use Drupal\views\Views;
 
 /**
  * Class ViewsPluginsCommand
  *
  * @package Drupal\Console\Command\Debug
  */
-class ViewsPluginsCommand extends ContainerAwareCommand
+class ViewsPluginsCommand extends Command
 {
     /**
      * {@inheritdoc}
@@ -63,7 +63,7 @@ protected function pluginList($type)
             foreach ($plugin['views'] as $plugin_name => $view) {
                 $views[] = $view;
             }
-            $rows[] = [$plugin['type'], $plugin['title'], $plugin['provider'], implode(",", $views)];
+            $rows[] = [$plugin['type'], $plugin['title'], $plugin['provider'], implode(',', $views)];
         }
 
         // Sort rows by field name.
diff --git a/vendor/drupal/console/src/Command/Entity/DeleteCommand.php b/vendor/drupal/console/src/Command/Entity/DeleteCommand.php
index 12ca54d0065aaff9bcf8c2219ac687b130f7313e..1add0315e6b89d4ac6b16eb19d313f9628241b64 100644
--- a/vendor/drupal/console/src/Command/Entity/DeleteCommand.php
+++ b/vendor/drupal/console/src/Command/Entity/DeleteCommand.php
@@ -11,13 +11,13 @@
 use Symfony\Component\Console\Input\InputOption;
 use Symfony\Component\Console\Output\OutputInterface;
 use Drupal\Console\Core\Command\Command;
-use Drupal\Core\Entity\EntityTypeRepository;
+use Drupal\Core\Entity\EntityTypeRepositoryInterface;
 use Drupal\Core\Entity\EntityTypeManagerInterface;
 
 class DeleteCommand extends Command
 {
     /**
-     * @var EntityTypeRepository
+     * @var EntityTypeRepositoryInterface
      */
     protected $entityTypeRepository;
 
@@ -29,11 +29,11 @@ class DeleteCommand extends Command
     /**
      * DeleteCommand constructor.
      *
-     * @param EntityTypeRepository       $entityTypeRepository
-     * @param EntityTypeManagerInterface $entityTypeManager
+     * @param EntityTypeRepositoryInterface $entityTypeRepository
+     * @param EntityTypeManagerInterface    $entityTypeManager
      */
     public function __construct(
-        EntityTypeRepository $entityTypeRepository,
+        EntityTypeRepositoryInterface $entityTypeRepository,
         EntityTypeManagerInterface $entityTypeManager
     ) {
         $this->entityTypeRepository = $entityTypeRepository;
diff --git a/vendor/drupal/console/src/Command/Generate/AjaxCommand.php b/vendor/drupal/console/src/Command/Generate/AjaxCommand.php
index b6d70b138a488187c6741746ae5985d0aa4e45a0..c2618f577b8bae4e4635d4b7bee2d5493acc33cc 100644
--- a/vendor/drupal/console/src/Command/Generate/AjaxCommand.php
+++ b/vendor/drupal/console/src/Command/Generate/AjaxCommand.php
@@ -10,7 +10,6 @@
 use Symfony\Component\Console\Input\InputInterface;
 use Symfony\Component\Console\Input\InputOption;
 use Symfony\Component\Console\Output\OutputInterface;
-use Drupal\Console\Command\Shared\ServicesTrait;
 use Drupal\Console\Command\Shared\ConfirmationTrait;
 use Drupal\Console\Command\Shared\ModuleTrait;
 use Drupal\Console\Generator\AjaxCommandGenerator;
@@ -27,7 +26,6 @@
 class AjaxCommand extends Command
 {
     use ModuleTrait;
-    use ServicesTrait;
     use ConfirmationTrait;
 
     /**
@@ -117,7 +115,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
             return 1;
         }
 
-        $module = $input->getOption('module');
+        $module = $this->validateModule($input->getOption('module'));
         $class = $this->validator->validateClassName($input->getOption('class'));
         $method = $input->getOption('method');
         $js_name = $input->getOption('js-name');
diff --git a/vendor/drupal/console/src/Command/Generate/AuthenticationProviderCommand.php b/vendor/drupal/console/src/Command/Generate/AuthenticationProviderCommand.php
index b728fc4de6ced4c311b6ea8910fc37ff61b34713..41f0bf7e6431c3d54221e1c7efca78565a046eea 100644
--- a/vendor/drupal/console/src/Command/Generate/AuthenticationProviderCommand.php
+++ b/vendor/drupal/console/src/Command/Generate/AuthenticationProviderCommand.php
@@ -11,7 +11,6 @@
 use Symfony\Component\Console\Input\InputInterface;
 use Symfony\Component\Console\Input\InputOption;
 use Symfony\Component\Console\Output\OutputInterface;
-use Drupal\Console\Command\Shared\ServicesTrait;
 use Drupal\Console\Command\Shared\ModuleTrait;
 use Drupal\Console\Core\Command\Command;
 use Drupal\Console\Generator\AuthenticationProviderGenerator;
@@ -21,7 +20,6 @@
 
 class AuthenticationProviderCommand extends Command
 {
-    use ServicesTrait;
     use ModuleTrait;
     use ConfirmationTrait;
 
@@ -98,7 +96,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
             return 1;
         }
 
-        $module = $input->getOption('module');
+        $module = $this->validateModule($input->getOption('module'));
         $class = $this->validator->validateClassName($input->getOption('class'));
         $provider_id = $input->getOption('provider-id');
 
diff --git a/vendor/drupal/console/src/Command/Generate/BlockTypeCommand.php b/vendor/drupal/console/src/Command/Generate/BlockTypeCommand.php
new file mode 100644
index 0000000000000000000000000000000000000000..95bf3a67edde6230db09228c09583bf3d00d9ba4
--- /dev/null
+++ b/vendor/drupal/console/src/Command/Generate/BlockTypeCommand.php
@@ -0,0 +1,250 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Console\Command\Generate\BlockTypeCommand.
+ */
+
+namespace Drupal\Console\Command\Generate;
+
+use Drupal\Console\Command\Shared\ArrayInputTrait;
+use Drupal\Console\Command\Shared\FormTrait;
+use Drupal\Console\Command\Shared\ConfirmationTrait;
+use Drupal\Console\Command\Shared\ModuleTrait;
+use Drupal\Console\Command\Shared\ServicesTrait;
+use Drupal\Console\Core\Command\ContainerAwareCommand;
+use Drupal\Console\Core\Utils\StringConverter;
+use Drupal\Console\Core\Utils\ChainQueue;
+use Drupal\Console\Generator\BlockTypeGenerator;
+use Drupal\Console\Extension\Manager;
+use Drupal\Console\Utils\Validator;
+use Drupal\Core\Config\ConfigFactory;
+use Drupal\Core\Entity\EntityTypeManagerInterface;
+use Drupal\Core\Render\ElementInfoManagerInterface;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Output\OutputInterface;
+use Drupal\block_content\Entity\BlockContent;
+use Drupal\block\Entity\Block;
+use Drupal\block_content\BlockContentTypeInterface;
+use Drupal\block_content\Entity\BlockContentType;
+
+class BlockTypeCommand extends ContainerAwareCommand
+{
+    use ArrayInputTrait;
+    use ServicesTrait;
+    use ModuleTrait;
+    use FormTrait;
+    use ConfirmationTrait;
+
+    /**
+     * @var ConfigFactory
+     */
+    protected $configFactory;
+
+    /**
+     * @var ChainQueue
+     */
+    protected $chainQueue;
+
+    /**
+     * @var BlockTypeGenerator
+     */
+    protected $generator;
+
+    /**
+     * @var EntityTypeManagerInterface
+     */
+    protected $entityTypeManager;
+
+    /**
+     * @var Manager
+     */
+    protected $extensionManager;
+
+    /**
+     * @var Validator
+     */
+    protected $validator;
+
+    /**
+     * @var StringConverter
+     */
+    protected $stringConverter;
+
+    /**
+     * @var ElementInfoManagerInterface
+     */
+    protected $elementInfoManager;
+
+    /**
+     * BlockTypeCommand constructor.
+     *
+     * @param ConfigFactory               $configFactory
+     * @param ChainQueue                  $chainQueue
+     * @param BlockTypeGenerator          $generator
+     * @param EntityTypeManagerInterface  $entityTypeManager
+     * @param Manager                     $extensionManager
+     * @param Validator                   $validator
+     * @param StringConverter             $stringConverter
+     * @param ElementInfoManagerInterface $elementInfoManager
+     */
+    public function __construct(
+        ConfigFactory $configFactory,
+        ChainQueue $chainQueue,
+        BlockTypeGenerator $generator,
+        EntityTypeManagerInterface $entityTypeManager,
+        Manager $extensionManager,
+        Validator $validator,
+        StringConverter $stringConverter,
+        ElementInfoManagerInterface $elementInfoManager
+    ) {
+        $this->configFactory = $configFactory;
+        $this->chainQueue = $chainQueue;
+        $this->generator = $generator;
+        $this->entityTypeManager = $entityTypeManager;
+        $this->extensionManager = $extensionManager;
+        $this->validator = $validator;
+        $this->stringConverter = $stringConverter;
+        $this->elementInfoManager = $elementInfoManager;
+        parent::__construct();
+    }
+
+    protected function configure()
+    {
+        $this
+            ->setName('generate:block:type')
+            ->setDescription($this->trans('commands.generate.block.type.description'))
+            ->setHelp($this->trans('commands.generate.block.type.help'))
+            ->addOption(
+                'module',
+                null,
+                InputOption::VALUE_REQUIRED,
+                $this->trans('commands.common.options.module')
+            )
+            ->addOption(
+                'class',
+                null,
+                InputOption::VALUE_OPTIONAL,
+                $this->trans('commands.generate.block.type.options.class')
+            )
+            ->addOption(
+                'block-label',
+                null,
+                InputOption::VALUE_OPTIONAL,
+                $this->trans('commands.generate.block.type.options.block-label')
+            )
+            ->addOption(
+                'block-description',
+                null,
+                InputOption::VALUE_OPTIONAL,
+                $this->trans('commands.generate.block.type.options.block-description')
+            )
+            ->addOption(
+                'block-id',
+                null,
+                InputOption::VALUE_OPTIONAL,
+                $this->trans('commands.generate.block.type.options.block-id')
+            )
+            
+            ->setAliases(['gbt']);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function execute(InputInterface $input, OutputInterface $output)
+    {
+        // @see use Drupal\Console\Command\Shared\ConfirmationTrait::confirmOperation
+        if (!$this->confirmOperation()) {
+            return 1;
+        }
+
+        $module = $this->validateModule($input->getOption('module'));
+        $class_name = $this->validator->validateClassName($input->getOption('class'));
+        $block_label = $input->getOption('block-label');
+        $block_description = $input->getOption('block-description');
+        $block_id = $input->getOption('block-id');
+        
+        $theme_region = true;
+        
+        $this->generator->generate([
+          'module' => $module,
+          'class_name' => $class_name,
+          'label' => $block_label,
+          'description' => $block_description,
+          'block_id' => $block_id,
+        ]);
+        
+        $this->chainQueue->addCommand('cache:rebuild', ['cache' => 'discovery']);
+
+        if ($theme_region) {
+            $block_content_type = BlockContentType::create([
+              'id' => $block_id,
+              'label' => $block_label,
+              'description' => $block_description,
+
+            ]);
+            $block_content_type->save();
+
+            $block_content = BlockContent::create([
+              'info' => $block_label,
+              'type' => $block_id,
+              'body' => [
+              'value' => "<h1>Block's body</h1>",
+                'format' => 'full_html',
+               ],
+            ]);
+
+            $block_content->save();
+        }
+    }
+
+    protected function interact(InputInterface $input, OutputInterface $output)
+    {
+        // --module option
+        $this->getModuleOption();
+
+        // --class option
+        $class = $input->getOption('class');
+        if (!$class) {
+            $class = $this->getIo()->ask(
+                $this->trans('commands.generate.block.type.questions.class'),
+                'DefaultBlockContentType',
+                function ($class) {
+                    return $this->validator->validateClassName($class);
+                }
+            );
+            $input->setOption('class', $class);
+        }
+
+        // --block-label option
+        $block_label = $input->getOption('block-label');
+        if (!$block_label) {
+            $block_label = $this->getIo()->ask(
+                $this->trans('commands.generate.block.type.questions.block-label'),
+                $this->stringConverter->camelCaseToHuman($class)
+            );
+            $input->setOption('block-label', $block_label);
+        }
+
+        // --block-id option
+        $blockId = $input->getOption('block-id');
+        if (!$blockId) {
+            $blockId = $this->getIo()->ask(
+                $this->trans('commands.generate.block.type.questions.block-id'),
+                $this->stringConverter->camelCaseToUnderscore($class)
+            );
+            $input->setOption('block-id', $blockId);
+        }
+        // --block-description option
+        $blockDesc = $input->getOption('block-description');
+        if (!$blockDesc) {
+            $blockDesc = $this->getIo()->ask(
+                $this->trans('commands.generate.block.type.questions.block-description'),
+                $this->stringConverter->camelCaseToUnderscore($class)
+            );
+            $input->setOption('block-description', $blockDesc);
+        }
+    }
+}
diff --git a/vendor/drupal/console/src/Command/Generate/CacheContextCommand.php b/vendor/drupal/console/src/Command/Generate/CacheContextCommand.php
index 3d29bdf6d6c207ec213cf57eb2d3e7c0e9b27899..40b911519c0e7329b957e8968bc22aa15a9b60b2 100644
--- a/vendor/drupal/console/src/Command/Generate/CacheContextCommand.php
+++ b/vendor/drupal/console/src/Command/Generate/CacheContextCommand.php
@@ -7,18 +7,18 @@
 
 namespace Drupal\Console\Command\Generate;
 
-use Drupal\Console\Utils\Validator;
-use Symfony\Component\Console\Input\InputInterface;
-use Symfony\Component\Console\Input\InputOption;
-use Symfony\Component\Console\Output\OutputInterface;
-use Drupal\Console\Command\Shared\ModuleTrait;
-use Drupal\Console\Generator\CacheContextGenerator;
 use Drupal\Console\Command\Shared\ConfirmationTrait;
+use Drupal\Console\Command\Shared\ModuleTrait;
+use Drupal\Console\Command\Shared\ServicesTrait;
 use Drupal\Console\Core\Command\ContainerAwareCommand;
 use Drupal\Console\Core\Utils\ChainQueue;
-use Drupal\Console\Extension\Manager;
-use Drupal\Console\Command\Shared\ServicesTrait;
 use Drupal\Console\Core\Utils\StringConverter;
+use Drupal\Console\Generator\CacheContextGenerator;
+use Drupal\Console\Extension\Manager;
+use Drupal\Console\Utils\Validator;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Output\OutputInterface;
 
 class CacheContextCommand extends ContainerAwareCommand
 {
@@ -120,7 +120,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
             return 1;
         }
 
-        $module = $input->getOption('module');
+        $module = $this->validateModule($input->getOption('module'));
         $cache_context = $input->getOption('cache-context');
         $class = $this->validator->validateClassName($input->getOption('class'));
         $services = $input->getOption('services');
diff --git a/vendor/drupal/console/src/Command/Generate/CommandCommand.php b/vendor/drupal/console/src/Command/Generate/CommandCommand.php
index cca91d85974f825dd782b5ba1c6aac643a990987..1b3c0bee34e0d210d7908753bff5b226261e2850 100644
--- a/vendor/drupal/console/src/Command/Generate/CommandCommand.php
+++ b/vendor/drupal/console/src/Command/Generate/CommandCommand.php
@@ -7,19 +7,19 @@
 
 namespace Drupal\Console\Command\Generate;
 
+use Drupal\Console\Command\Shared\ConfirmationTrait;
+use Drupal\Console\Command\Shared\ModuleTrait;
 use Drupal\Console\Command\Shared\ExtensionTrait;
 use Drupal\Console\Command\Shared\ServicesTrait;
-use Symfony\Component\Console\Input\InputInterface;
-use Symfony\Component\Console\Output\OutputInterface;
-use Symfony\Component\Console\Input\InputOption;
 use Drupal\Console\Core\Command\ContainerAwareCommand;
-use Drupal\Console\Command\Shared\ConfirmationTrait;
-use Drupal\Console\Command\Shared\ModuleTrait;
-use Drupal\Console\Generator\CommandGenerator;
 use Drupal\Console\Core\Utils\StringConverter;
+use Drupal\Console\Generator\CommandGenerator;
 use Drupal\Console\Extension\Manager;
 use Drupal\Console\Utils\Validator;
 use Drupal\Console\Utils\Site;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Output\OutputInterface;
 
 class CommandCommand extends ContainerAwareCommand
 {
diff --git a/vendor/drupal/console/src/Command/Generate/ComposerCommand.php b/vendor/drupal/console/src/Command/Generate/ComposerCommand.php
new file mode 100644
index 0000000000000000000000000000000000000000..5d21ece457f190247e699ae460a68bdf5564f206
--- /dev/null
+++ b/vendor/drupal/console/src/Command/Generate/ComposerCommand.php
@@ -0,0 +1,417 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Console\Command\Generate\ComposerCommand.
+ */
+
+namespace Drupal\Console\Command\Generate;
+
+use Drupal\Console\Command\Shared\ArrayInputTrait;
+use Drupal\Console\Command\Shared\ConfirmationTrait;
+use Drupal\Console\Command\Shared\ModuleTrait;
+use Drupal\Console\Core\Command\Command;
+use Drupal\Console\Extension\Manager;
+use Drupal\Console\Generator\ComposerGenerator;
+use Drupal\Console\Utils\Validator;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Output\OutputInterface;
+
+class ComposerCommand extends Command
+{
+    use ArrayInputTrait;
+    use ConfirmationTrait;
+    use ModuleTrait;
+
+    /**
+     * @var ComposerGenerator
+     */
+    protected $generator;
+
+    /**
+     * @var Manager
+     */
+    protected $extensionManager;
+
+    /**
+     * @var Validator
+     */
+    protected $validator;
+
+
+    /**
+     * ComposerCommand constructor.
+     *
+     * @param ComposerGenerator $generator
+     * @param Manager $extensionManager
+     * @param Validator $validator
+     */
+    public function __construct(
+      ComposerGenerator $generator,
+      Manager $extensionManager,
+      Validator $validator
+    ) {
+        $this->generator = $generator;
+        $this->extensionManager = $extensionManager;
+        $this->validator = $validator;
+        parent::__construct();
+    }
+
+    protected function configure()
+    {
+        $this
+          ->setName('generate:composer')
+          ->setDescription($this->trans('commands.generate.composer.description'))
+          ->setHelp($this->trans('commands.generate.composer.composer'))
+          ->addOption(
+            'module',
+            null,
+            InputOption::VALUE_REQUIRED,
+            $this->trans('commands.common.options.module')
+          )
+          ->addOption(
+            'name',
+            null,
+            InputOption::VALUE_REQUIRED,
+            $this->trans('commands.generate.composer.options.name')
+          )
+          ->addOption(
+            'type',
+            null,
+            InputOption::VALUE_REQUIRED,
+            $this->trans('commands.generate.composer.options.type')
+          )
+          ->addOption(
+            'description',
+            null,
+            InputOption::VALUE_REQUIRED,
+            $this->trans('commands.generate.composer.options.description')
+          )
+          ->addOption(
+            'keywords',
+            null,
+            InputOption::VALUE_REQUIRED | InputOption::VALUE_IS_ARRAY,
+            $this->trans('commands.generate.composer.options.keywords')
+          )
+          ->addOption(
+            'license',
+            null,
+            InputOption::VALUE_OPTIONAL,
+            $this->trans('commands.generate.composer.options.license')
+          )
+          ->addOption(
+            'homepage',
+            null,
+            InputOption::VALUE_OPTIONAL,
+            $this->trans('commands.generate.composer.options.homepage')
+          )
+          ->addOption(
+            'minimum-stability',
+            null,
+            InputOption::VALUE_OPTIONAL,
+            $this->trans('commands.generate.composer.options.minimum-stability')
+          )
+          ->addOption(
+            'authors',
+            null,
+            InputOption::VALUE_OPTIONAL | InputOption::VALUE_IS_ARRAY,
+            $this->trans('commands.generate.composer.options.authors')
+          )
+          ->addOption(
+            'support',
+            null,
+            InputOption::VALUE_OPTIONAL | InputOption::VALUE_IS_ARRAY,
+            $this->trans('commands.generate.composer.options.support')
+          )
+          ->addOption(
+            'required',
+            null,
+            InputOption::VALUE_OPTIONAL | InputOption::VALUE_IS_ARRAY,
+            $this->trans('commands.generate.composer.options.required')
+          )->setAliases(['gcom']);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function interact(InputInterface $input, OutputInterface $output)
+    {
+        // --module option
+        $module = $this->getModuleOption();
+
+        // --name option
+        $name = $input->getOption('name');
+        if (!$name) {
+            $name = $this->getIo()->askEmpty(
+              $this->trans('commands.generate.composer.questions.name'),
+              'drupal/' . $module
+            );
+            $input->setOption('name', $name);
+        }
+
+        // --type option
+        $type = $input->getOption('type');
+        if (!$type) {
+            $type = $this->getIo()->askEmpty(
+              $this->trans('commands.generate.composer.questions.type'),
+              'drupal-module'
+            );
+            $input->setOption('type', $type);
+        }
+
+        // --description option
+        $description = $input->getOption('description');
+        if (!$description) {
+            $description = $this->getIo()->askEmpty(
+              $this->trans('commands.generate.composer.questions.description')
+            );
+            $input->setOption('description', $description);
+        }
+
+        // --keywords option
+        $keywords = $input->getOption('keywords');
+        if (!$keywords) {
+            if ($this->getIo()->confirm(
+              $this->trans('commands.generate.composer.questions.add-keywords'),
+              false
+            )) {
+                $keywords = [];
+                while (true) {
+                    $keyword = $this->getIo()->askEmpty(
+                      $this->trans('commands.generate.composer.questions.keyword')
+                    );
+
+                    if (empty($keyword) || is_numeric($keyword)) {
+                        break;
+                    }
+
+                    $keywords[] = $keyword;
+
+                }
+                $input->setOption('keywords', $keywords);
+            }
+        }
+
+        // --license option
+        $license = $input->getOption('license');
+        if (!$license) {
+            $license = $this->getIo()->askEmpty(
+              $this->trans('commands.generate.composer.questions.license'),
+              'GPL-2.0+'
+            );
+            $input->setOption('license', $license);
+        }
+
+        // --homepage option
+        $homepage = $input->getOption('homepage');
+        if (!$homepage) {
+            $homepage = $this->getIo()->askEmpty(
+              $this->trans('commands.generate.composer.questions.homepage'),
+              'https://www.drupal.org/project/' . $module
+            );
+            $input->setOption('homepage', $homepage);
+        }
+
+        // --minimum-stability option
+        $minimumStability = $input->getOption('minimum-stability');
+        if (!$minimumStability) {
+            $stabilityOptions = [
+              'stable',
+              'dev',
+              'alpha',
+              'beta',
+              'RC',
+            ];
+            $minimumStability = $this->getIo()->choiceNoList(
+              $this->trans('commands.generate.composer.questions.minimum-stability'),
+              $stabilityOptions,
+              '',
+              true
+            );
+            $input->setOption('minimum-stability', $minimumStability);
+        }
+
+        // --authors option
+        $authors = $input->getOption('authors');
+        if (!$authors) {
+            if ($this->getIo()->confirm(
+              $this->trans('commands.generate.composer.questions.add-author'),
+              false
+            )) {
+                $authorItems = [];
+                while (true) {
+                    $authorName = $this->getIo()->askEmpty(
+                      $this->trans('commands.generate.composer.questions.author-name')
+                    );
+                    $authorEmail = $this->getIo()->askEmpty(
+                      $this->trans('commands.generate.composer.questions.author-email')
+                    );
+                    $authorHomepage = $this->getIo()->askEmpty(
+                      $this->trans('commands.generate.composer.questions.author-homepage')
+                    );
+                    $authorRole = $this->getIo()->askEmpty(
+                      $this->trans('commands.generate.composer.questions.author-role')
+                    );
+
+                    if (!empty($authorName) || !empty($authorEmail) || !empty($authorHomepage) || !empty($authorRole)) {
+                        $authorItems[] = [
+                          'name' => $authorName,
+                          'email' => $authorEmail,
+                          'homepage' => $authorHomepage,
+                          'role' => $authorRole,
+                        ];
+                    }
+
+                    $this->getIo()->newLine();
+
+                    if (!$this->getIo()->confirm(
+                      $this->trans('commands.generate.composer.questions.add-another-author'),
+                      false
+                    )) {
+                        break;
+                    }
+
+                }
+                $this->getIo()->newLine(2);
+                $input->setOption('authors', $authorItems);
+            }
+        }
+
+        // --support option
+        $support = $input->getOption('support');
+        if (!$support) {
+            if ($this->getIo()->confirm(
+              $this->trans('commands.generate.composer.questions.add-support'),
+              false
+            )) {
+                $supportChannels = [
+                  'email',
+                  'issues',
+                  'forum',
+                  'wiki',
+                  'irc',
+                  'source',
+                  'docs',
+                  'rss',
+                ];
+                $supportItems = [];
+                while (true) {
+                    $supportChannel = $this->getIo()->choiceNoList(
+                      $this->trans('commands.generate.composer.questions.support-channel'),
+                      $supportChannels,
+                      '',
+                      true
+                    );
+
+                    $supportUrl = $this->getIo()->ask(
+                      $this->trans('commands.generate.composer.questions.support-value')
+                    );
+
+                    $supportItems[] = [
+                      'channel' => $supportChannel,
+                      'url' => $supportUrl,
+                    ];
+
+                    $this->getIo()->newLine();
+
+                    if (!$this->getIo()->confirm(
+                      $this->trans('commands.generate.composer.questions.add-another-support'),
+                      false
+                    )) {
+                        break;
+                    }
+
+                }
+                $this->getIo()->newLine(2);
+                $input->setOption('support', $supportItems);
+            }
+        }
+
+        // --required option
+        $required = $input->getOption('required');
+        if (!$required) {
+            if ($this->getIo()->confirm(
+              $this->trans('commands.generate.composer.questions.add-required'),
+              false
+            )) {
+                $requiredItems = [];
+                while (true) {
+
+                    $requiredName = $this->getIo()->ask(
+                      $this->trans('commands.generate.composer.questions.required-name')
+                    );
+
+                    $requiredVersion = $this->getIo()->ask(
+                      $this->trans('commands.generate.composer.questions.required-version')
+                    );
+
+                    $requiredItems[] = [
+                      'name' => $requiredName,
+                      'version' => $requiredVersion,
+                    ];
+
+                    $this->getIo()->newLine();
+
+                    if (!$this->getIo()->confirm(
+                      $this->trans('commands.generate.composer.questions.add-another-required'),
+                      false
+                    )) {
+                        break;
+                    }
+
+                }
+                $input->setOption('required', $requiredItems);
+            }
+        }
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function execute(InputInterface $input, OutputInterface $output)
+    {
+        // @see use Drupal\Console\Command\ConfirmationTrait::confirmOperation
+        if (!$this->confirmOperation()) {
+            return 1;
+        }
+
+        $module = $input->getOption('module');
+        $name = $input->getOption('name');
+        $type = $input->getOption('type');
+        $description = $input->getOption('description');
+        $keywords = $input->getOption('keywords');
+        $license = $input->getOption('license');
+        $homepage = $input->getOption('homepage');
+        $minimumStability = $input->getOption('minimum-stability');
+        $authors = $input->getOption('authors');
+        $support = $input->getOption('support');
+        $required = $input->getOption('required');
+        $noInteraction = $input->getOption('no-interaction');
+
+        // Parse nested data.
+        if ($noInteraction) {
+            $authors = $this->explodeInlineArray($authors);
+            $support = $this->explodeInlineArray($support);
+            $required = $this->explodeInlineArray($required);
+        }
+
+        $this->generator->generate([
+          'machine_name' => $module,
+          'name' => $name,
+          'type' => $type,
+          'description' => $description,
+          'keywords' => $keywords,
+          'license' => $license,
+          'homepage' => $homepage,
+          'minimum_stability' => $minimumStability,
+          'authors' => $authors,
+          'support_items' => $support,
+          'required_items' => $required,
+        ]);
+
+        return 0;
+    }
+
+
+}
diff --git a/vendor/drupal/console/src/Command/Generate/ControllerCommand.php b/vendor/drupal/console/src/Command/Generate/ControllerCommand.php
index dd982279d4bebe8ff29b18ff77218e317890b900..36730f99547193476c1cc16696ee947f42bd338d 100644
--- a/vendor/drupal/console/src/Command/Generate/ControllerCommand.php
+++ b/vendor/drupal/console/src/Command/Generate/ControllerCommand.php
@@ -7,20 +7,20 @@
 
 namespace Drupal\Console\Command\Generate;
 
-use Symfony\Component\Console\Input\InputInterface;
-use Symfony\Component\Console\Input\InputOption;
-use Symfony\Component\Console\Output\OutputInterface;
-use Drupal\Console\Command\Shared\ServicesTrait;
 use Drupal\Console\Command\Shared\ConfirmationTrait;
 use Drupal\Console\Command\Shared\ModuleTrait;
+use Drupal\Console\Command\Shared\ServicesTrait;
 use Drupal\Console\Generator\ControllerGenerator;
 use Drupal\Console\Core\Command\ContainerAwareCommand;
-use Drupal\Core\Routing\RouteProviderInterface;
-use Drupal\Console\Core\Utils\StringConverter;
-use Drupal\Console\Core\Utils\ChainQueue;
 use Drupal\Console\Core\Command\Shared\InputTrait;
+use Drupal\Console\Core\Utils\ChainQueue;
+use Drupal\Console\Core\Utils\StringConverter;
 use Drupal\Console\Extension\Manager;
 use Drupal\Console\Utils\Validator;
+use Drupal\Core\Routing\RouteProviderInterface;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Output\OutputInterface;
 
 class ControllerCommand extends ContainerAwareCommand
 {
@@ -135,7 +135,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
             return 1;
         }
 
-        $module = $input->getOption('module');
+        $module = $this->validateModule($input->getOption('module'));
         $class = $this->validator->validateControllerName($input->getOption('class'));
         $routes = $input->getOption('routes');
         $test = $input->getOption('test');
diff --git a/vendor/drupal/console/src/Command/Generate/EntityBundleCommand.php b/vendor/drupal/console/src/Command/Generate/EntityBundleCommand.php
index e70ba956becb89492e8f368b12920549e320515d..8466bf77ff4f32185c4a7dda71b66bef5a6f98fd 100644
--- a/vendor/drupal/console/src/Command/Generate/EntityBundleCommand.php
+++ b/vendor/drupal/console/src/Command/Generate/EntityBundleCommand.php
@@ -13,7 +13,6 @@
 use Symfony\Component\Console\Output\OutputInterface;
 use Drupal\Console\Command\Shared\ConfirmationTrait;
 use Drupal\Console\Command\Shared\ModuleTrait;
-use Drupal\Console\Command\Shared\ServicesTrait;
 use Drupal\Console\Generator\EntityBundleGenerator;
 use Drupal\Console\Extension\Manager;
 use Drupal\Console\Utils\Validator;
@@ -21,7 +20,6 @@
 class EntityBundleCommand extends Command
 {
     use ModuleTrait;
-    use ServicesTrait;
     use ConfirmationTrait;
 
     /**
@@ -95,7 +93,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
             return 1;
         }
 
-        $module = $input->getOption('module');
+        $module = $this->validateModule($input->getOption('module'));
         $bundleName = $input->getOption('bundle-name');
         $bundleTitle = $input->getOption('bundle-title');
 
diff --git a/vendor/drupal/console/src/Command/Generate/EntityConfigCommand.php b/vendor/drupal/console/src/Command/Generate/EntityConfigCommand.php
index 3c2ac3901d39780f06b8b643b62d09244df12929..5a90c9f574bb73de657d96575a7324a171c28fc2 100644
--- a/vendor/drupal/console/src/Command/Generate/EntityConfigCommand.php
+++ b/vendor/drupal/console/src/Command/Generate/EntityConfigCommand.php
@@ -88,9 +88,9 @@ protected function interact(InputInterface $input, OutputInterface $output)
      */
     protected function execute(InputInterface $input, OutputInterface $output)
     {
-        $module = $input->getOption('module');
+        $module = $this->validateModule($input->getOption('module'));
         $entity_class = $input->getOption('entity-class');
-        $entity_name = $input->getOption('entity-name');
+        $entity_name = $this->validator->validateMachineName($input->getOption('entity-name'));
         $label = $input->getOption('label');
         $bundle_of = $input->getOption('bundle-of');
         $base_path = $input->getOption('base-path');
diff --git a/vendor/drupal/console/src/Command/Generate/EntityContentCommand.php b/vendor/drupal/console/src/Command/Generate/EntityContentCommand.php
index ffc685fc352e6d8db5b1ffb2d688ff39f95117c0..7605879d7624858e82bf25a65bcc238d8abfcebd 100644
--- a/vendor/drupal/console/src/Command/Generate/EntityContentCommand.php
+++ b/vendor/drupal/console/src/Command/Generate/EntityContentCommand.php
@@ -95,8 +95,30 @@ protected function configure()
             null,
             InputOption::VALUE_NONE,
             $this->trans('commands.generate.entity.content.options.revisionable')
-        )
-            ->setAliases(['geco']);
+        );
+
+        $this->addOption(
+            'has-forms',
+            null,
+            InputOption::VALUE_NONE,
+            $this->trans('commands.generate.entity.content.options.has-forms')
+        );
+
+        $this->addOption(
+            'has-owner',
+            null,
+            InputOption::VALUE_NONE,
+            $this->trans('commands.generate.entity.content.options.has-owner')
+        );
+
+        $this->addOption(
+            'has-bundle-permissions',
+            null,
+            InputOption::VALUE_NONE,
+            $this->trans('commands.generate.entity.content.options.has-bundle-permissions')
+        );
+
+        $this->setAliases(['geco']);
     }
 
     /**
@@ -129,6 +151,32 @@ protected function interact(InputInterface $input, OutputInterface $output)
             true
         );
         $input->setOption('revisionable', $revisionable);
+
+        // --has-forms option
+        $has_forms = $this->getIo()->confirm(
+            $this->trans('commands.generate.entity.content.questions.has-forms'),
+            true
+        );
+        $input->setOption('has-forms', $has_forms);
+
+        // --has-owner option
+        $has_owner = $this->getIo()->confirm(
+            $this->trans('commands.generate.entity.content.questions.has-owner'),
+            true
+        );
+        $input->setOption('has-owner', $has_owner);
+
+        // --has-bundle-permissions
+        if($bundle_of){
+          $has_bundle_permissions = $this->getIo()->confirm(
+            $this->trans('commands.generate.entity.content.questions.has-bundle-permissions'),
+            true
+          );
+          $input->setOption('has-bundle-permissions', $has_bundle_permissions);
+        }
+        else {
+          $input->setOption('has-bundle-permissions', false);
+        }
     }
 
     /**
@@ -136,16 +184,19 @@ protected function interact(InputInterface $input, OutputInterface $output)
      */
     protected function execute(InputInterface $input, OutputInterface $output)
     {
-        $module = $input->getOption('module');
-        $entity_class = $input->getOption('entity-class');
-        $entity_name = $input->getOption('entity-name');
-        $label = $input->getOption('label');
-        $has_bundles = $input->getOption('has-bundles');
-        $base_path = $input->getOption('base-path');
-        $learning = $input->hasOption('learning')?$input->getOption('learning'):false;
+        $module = $this->validateModule($input->getOption('module'));
+        $entity_class = $input->getOption('entity-class')?:'DefaultEntity';
+        $entity_name = $this->validator->validateMachineName($input->getOption('entity-name'))?:'default_entity';
+        $label = $input->getOption('label')?:'Default Entity';
+        $has_bundles = $input->getOption('has-bundles')?:false;
+        $base_path = $input->getOption('base-path')?:'/admin/structure';
+        $learning = $input->getOption('learning')?:false;
         $bundle_entity_type = $has_bundles ? $entity_name . '_type' : null;
-        $is_translatable = $input->hasOption('is-translatable') ? $input->getOption('is-translatable') : true;
-        $revisionable = $input->hasOption('revisionable') ? $input->getOption('revisionable') : false;
+        $is_translatable = $input->getOption('is-translatable');
+        $revisionable = $input->getOption('revisionable');
+        $has_forms = $input->getOption('has-forms');
+        $has_owner = $input->getOption('has-owner');
+        $has_bundle_permissions = $input->getOption('has-bundle-permissions');
 
         $generator = $this->generator;
 
@@ -162,6 +213,9 @@ protected function execute(InputInterface $input, OutputInterface $output)
             'base_path' => $base_path,
             'is_translatable' => $is_translatable,
             'revisionable' => $revisionable,
+            'has_forms' => $has_forms,
+            'has_owner' => $has_owner,
+            'has_bundle_permissions' => $has_bundle_permissions,
         ]);
 
         if ($has_bundles) {
@@ -171,7 +225,8 @@ protected function execute(InputInterface $input, OutputInterface $output)
                 '--entity-class' => $entity_class . 'Type',
                 '--entity-name' => $entity_name . '_type',
                 '--label' => $label . ' type',
-                '--bundle-of' => $entity_name
+                '--bundle-of' => $entity_name,
+                '--no-interaction'
                 ]
             );
         }
diff --git a/vendor/drupal/console/src/Command/Generate/EventSubscriberCommand.php b/vendor/drupal/console/src/Command/Generate/EventSubscriberCommand.php
index ec62750b0488b2133c90590936466cfc2bc0858f..bfb29c7cf18f1286f31a83acb7101ecd32520db8 100644
--- a/vendor/drupal/console/src/Command/Generate/EventSubscriberCommand.php
+++ b/vendor/drupal/console/src/Command/Generate/EventSubscriberCommand.php
@@ -7,20 +7,20 @@
 
 namespace Drupal\Console\Command\Generate;
 
-use Drupal\Console\Utils\Validator;
-use Symfony\Component\Console\Input\InputInterface;
-use Symfony\Component\Console\Input\InputOption;
-use Symfony\Component\Console\Output\OutputInterface;
-use Drupal\Console\Command\Shared\ServicesTrait;
-use Drupal\Console\Command\Shared\ModuleTrait;
-use Drupal\Console\Generator\EventSubscriberGenerator;
 use Drupal\Console\Command\Shared\ConfirmationTrait;
 use Drupal\Console\Command\Shared\EventsTrait;
+use Drupal\Console\Command\Shared\ModuleTrait;
+use Drupal\Console\Command\Shared\ServicesTrait;
 use Drupal\Console\Core\Command\ContainerAwareCommand;
+use Drupal\Console\Core\Utils\ChainQueue;
 use Drupal\Console\Core\Utils\StringConverter;
 use Drupal\Console\Extension\Manager;
+use Drupal\Console\Generator\EventSubscriberGenerator;
+use Drupal\Console\Utils\Validator;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Output\OutputInterface;
 use Symfony\Component\EventDispatcher\EventDispatcherInterface;
-use Drupal\Console\Core\Utils\ChainQueue;
 
 class EventSubscriberCommand extends ContainerAwareCommand
 {
@@ -138,7 +138,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
             return 1;
         }
 
-        $module = $input->getOption('module');
+        $module = $this->validateModule($input->getOption('module'));
         $name = $input->getOption('name');
         $class = $this->validator->validateClassName($input->getOption('class'));
         $events = $input->getOption('events');
diff --git a/vendor/drupal/console/src/Command/Generate/FormAlterCommand.php b/vendor/drupal/console/src/Command/Generate/FormAlterCommand.php
index 37073da06bb1d254f77929decd8233554677ee2c..1dbc8e783bfa0288ab24c11c61e8193198625b4f 100644
--- a/vendor/drupal/console/src/Command/Generate/FormAlterCommand.php
+++ b/vendor/drupal/console/src/Command/Generate/FormAlterCommand.php
@@ -12,7 +12,6 @@
 use Symfony\Component\Console\Input\InputOption;
 use Symfony\Component\Console\Output\OutputInterface;
 use Drupal\Console\Generator\FormAlterGenerator;
-use Drupal\Console\Command\Shared\ServicesTrait;
 use Drupal\Console\Command\Shared\ModuleTrait;
 use Drupal\Console\Command\Shared\FormTrait;
 use Drupal\Console\Command\Shared\ConfirmationTrait;
@@ -32,7 +31,6 @@ class FormAlterCommand extends Command
     use ArrayInputTrait;
     use FormTrait;
     use ModuleTrait;
-    use ServicesTrait;
 
     /**
      * @var Manager
@@ -164,7 +162,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
             return 1;
         }
 
-        $module = $input->getOption('module');
+        $module = $this->validateModule($input->getOption('module'));
         $formId = $input->getOption('form-id');
         $inputs = $input->getOption('inputs');
         $noInteraction = $input->getOption('no-interaction');
diff --git a/vendor/drupal/console/src/Command/Generate/FormCommand.php b/vendor/drupal/console/src/Command/Generate/FormCommand.php
index 56e71b9e829694a9fca2dd44da97afbeaab9abf6..6f36f8f0c7a331a49dcdbdc640ff2caf32b55e73 100644
--- a/vendor/drupal/console/src/Command/Generate/FormCommand.php
+++ b/vendor/drupal/console/src/Command/Generate/FormCommand.php
@@ -8,22 +8,22 @@
 namespace Drupal\Console\Command\Generate;
 
 use Drupal\Console\Command\Shared\ArrayInputTrait;
-use Drupal\Console\Utils\TranslatorManager;
-use Drupal\Console\Utils\Validator;
-use Symfony\Component\Console\Input\InputInterface;
-use Symfony\Component\Console\Input\InputOption;
-use Symfony\Component\Console\Output\OutputInterface;
-use Drupal\Console\Command\Shared\ServicesTrait;
+use Drupal\Console\Command\Shared\FormTrait;
 use Drupal\Console\Command\Shared\ModuleTrait;
 use Drupal\Console\Command\Shared\MenuTrait;
-use Drupal\Console\Command\Shared\FormTrait;
+use Drupal\Console\Command\Shared\ServicesTrait;
 use Drupal\Console\Core\Command\ContainerAwareCommand;
-use Drupal\Console\Generator\FormGenerator;
-use Drupal\Console\Extension\Manager;
 use Drupal\Console\Core\Utils\ChainQueue;
 use Drupal\Console\Core\Utils\StringConverter;
+use Drupal\Console\Generator\FormGenerator;
+use Drupal\Console\Extension\Manager;
+use Drupal\Console\Utils\TranslatorManager;
+use Drupal\Console\Utils\Validator;
 use Drupal\Core\Render\ElementInfoManager;
 use Drupal\Core\Routing\RouteProviderInterface;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Output\OutputInterface;
 
 abstract class FormCommand extends ContainerAwareCommand
 {
@@ -205,7 +205,7 @@ protected function configure()
      */
     protected function execute(InputInterface $input, OutputInterface $output)
     {
-        $module = $input->getOption('module');
+        $module = $this->validateModule($input->getOption('module'));
         $services = $input->getOption('services');
         $path = $input->getOption('path');
         $config_file = $input->getOption('config-file');
@@ -306,7 +306,6 @@ function ($className) {
         $path = $input->getOption('path');
         if (!$path) {
             if ($this->formType == 'ConfigFormBase') {
-                $form_path = '/admin/config/{{ module_name }}/{{ class_name_short }}';
                 $form_path = sprintf(
                     '/admin/config/%s/%s',
                     $module,
diff --git a/vendor/drupal/console/src/Command/Generate/HelpCommand.php b/vendor/drupal/console/src/Command/Generate/HelpCommand.php
index cd8e9b38b20de240f8a56b8c29e54d0f7fef1533..bbad064a27695d1fa5f063151ce88053edf4c490 100644
--- a/vendor/drupal/console/src/Command/Generate/HelpCommand.php
+++ b/vendor/drupal/console/src/Command/Generate/HelpCommand.php
@@ -103,7 +103,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
             return 1;
         }
 
-        $module = $input->getOption('module');
+        $module = $this->validateModule($input->getOption('module'));
 
         if ($this->extensionManager->validateModuleFunctionExist($module, $module . '_help')) {
             throw new \Exception(
diff --git a/vendor/drupal/console/src/Command/Generate/JsTestCommand.php b/vendor/drupal/console/src/Command/Generate/JsTestCommand.php
index edca262116a5e4eea8766b4e0fea07702f0c12ba..ec1122aee5dc28c350bab0d32551170f86ca343f 100644
--- a/vendor/drupal/console/src/Command/Generate/JsTestCommand.php
+++ b/vendor/drupal/console/src/Command/Generate/JsTestCommand.php
@@ -10,7 +10,6 @@
 use Drupal\Console\Command\Shared\ConfirmationTrait;
 use Drupal\Console\Command\Shared\ModuleTrait;
 use Drupal\Console\Core\Command\Command;
-use Drupal\Console\Core\Command\Shared\ContainerAwareCommandTrait;
 use Drupal\Console\Extension\Manager;
 use Drupal\Console\Generator\JsTestGenerator;
 use Drupal\Console\Utils\Validator;
@@ -22,7 +21,6 @@ class JsTestCommand extends Command
 {
     use ModuleTrait;
     use ConfirmationTrait;
-    use ContainerAwareCommandTrait;
 
     /**
      * @var Manager
@@ -91,7 +89,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
             return 1;
         }
 
-        $module = $input->getOption('module');
+        $module = $this->validateModule($input->getOption('module'));
         $class = $this->validator->validateClassName($input->getOption('class'));
 
         $this->generator->generate([
diff --git a/vendor/drupal/console/src/Command/Generate/ModuleCommand.php b/vendor/drupal/console/src/Command/Generate/ModuleCommand.php
index 23a8ccb5dafab83b9639789acdb44d5b26ea6913..d53ef8d3040253ac810f93babc367bf563a07ecd 100644
--- a/vendor/drupal/console/src/Command/Generate/ModuleCommand.php
+++ b/vendor/drupal/console/src/Command/Generate/ModuleCommand.php
@@ -7,6 +7,7 @@
 
 namespace Drupal\Console\Command\Generate;
 
+use Drupal\Console\Utils\Site;
 use Symfony\Component\Console\Input\InputInterface;
 use Symfony\Component\Console\Input\InputOption;
 use Symfony\Component\Console\Output\OutputInterface;
@@ -17,6 +18,7 @@
 use Drupal\Console\Core\Utils\StringConverter;
 use Drupal\Console\Utils\DrupalApi;
 use Webmozart\PathUtil\Path;
+use Drupal\Console\Core\Utils\ChainQueue;
 
 class ModuleCommand extends Command
 {
@@ -52,6 +54,16 @@ class ModuleCommand extends Command
      */
     protected $twigtemplate;
 
+    /**
+     * @var ChainQueue
+     */
+    protected $chainQueue;
+
+    /**
+     * @var Site
+     */
+    protected $site;
+
 
     /**
      * ModuleCommand constructor.
@@ -61,6 +73,8 @@ class ModuleCommand extends Command
      * @param $appRoot
      * @param StringConverter $stringConverter
      * @param DrupalApi       $drupalApi
+     * @param ChainQueue      $chainQueue
+     * @param Site            $site
      * @param $twigtemplate
      */
     public function __construct(
@@ -69,6 +83,8 @@ public function __construct(
         $appRoot,
         StringConverter $stringConverter,
         DrupalApi $drupalApi,
+        ChainQueue $chainQueue,
+        Site $site,
         $twigtemplate = null
     ) {
         $this->generator = $generator;
@@ -76,6 +92,8 @@ public function __construct(
         $this->appRoot = $appRoot;
         $this->stringConverter = $stringConverter;
         $this->drupalApi = $drupalApi;
+        $this->chainQueue = $chainQueue;
+        $this->site = $site;
         $this->twigtemplate = $twigtemplate;
         parent::__construct();
     }
@@ -180,14 +198,21 @@ protected function execute(InputInterface $input, OutputInterface $output)
         // Get the profile path and define a profile path if it is null
         // Check that it is an absolute path or otherwise create an absolute path using appRoot
         $modulePath = $input->getOption('module-path');
-        $modulePath = $modulePath == null ? 'modules/custom' : $modulePath;
+        if(is_null($modulePath)) {
+            $uri = $this->site->getMultisiteName($input);
+            $defaultModulePath = 'modules/custom';
+            $modulePath = $this->site->multisiteMode($uri)? 'sites/'.$this->site->getMultisiteDir($uri).'/'.$defaultModulePath : $defaultModulePath;
+        }
         $modulePath = Path::isAbsolute($modulePath) ? $modulePath : Path::makeAbsolute($modulePath, $this->appRoot);
         $modulePath = $this->validator->validateModulePath($modulePath, true);
 
-        $machineName = $this->validator->validateMachineName($input->getOption('machine-name'));
-        $description = $input->getOption('description');
-        $core = $input->getOption('core');
-        $package = $input->getOption('package');
+        $machineName = $input->getOption('machine-name') ?
+            $this->validator->validateMachineName($input->getOption('machine-name'))
+            :$this->stringConverter->createMachineName($module);
+
+        $description = $input->getOption('description')?:$this->trans('commands.generate.module.suggestions.my-awesome-module');
+        $core = $input->getOption('core')?:'8.x';
+        $package = $input->getOption('package')?:'Custom';
         $moduleFile = $input->getOption('module-file');
         $featuresBundle = $input->getOption('features-bundle');
         $composer = $input->getOption('composer');
@@ -214,6 +239,28 @@ protected function execute(InputInterface $input, OutputInterface $output)
             'twig_template' => $twigTemplate,
         ]);
 
+        if ($composer) {
+            $this->chainQueue
+              ->addCommand(
+                'generate:composer', [
+                '--module' => $machineName,
+                '--name' => 'drupal/' . $machineName,
+                '--type' => 'drupal-module',
+                '--description' => $description,
+                '--keywords' => 'Drupal',
+                '--license' => 'GPL-2.0+',
+                '--homepage' => 'https://www.drupal.org/project/' . $machineName,
+                '--minimum-stability' => 'dev',
+                '--support' => [
+                  '"channel":"issues", "url":"https://www.drupal.org/project/issues/' . $machineName . '"',
+                  '"channel":"source", "url":"http://cgit.drupalcode.org/' . $machineName . '"',
+                ],
+                '--no-interaction' => 'yes',
+              ],
+                false
+              );
+        }
+
         return 0;
     }
 
@@ -248,7 +295,7 @@ function ($module) use ($validator) {
 
         try {
             $machineName = $input->getOption('machine-name') ?
-              $this->validator->validateModuleName(
+                $validator->validateModuleName(
                   $input->getOption('machine-name')
               ) : null;
         } catch (\Exception $error) {
@@ -268,9 +315,11 @@ function ($machine_name) use ($validator) {
 
         $modulePath = $input->getOption('module-path');
         if (!$modulePath) {
+            $uri = $this->site->getMultisiteName($input);
+            $defaultModulePath = 'modules/custom';
             $modulePath = $this->getIo()->ask(
                 $this->trans('commands.generate.module.questions.module-path'),
-                'modules/custom',
+                $this->site->multisiteMode($uri)? 'sites/'.$this->site->getMultisiteDir($uri).'/'.$defaultModulePath : $defaultModulePath,
                 function ($modulePath) use ($machineName) {
                     $fullPath = Path::isAbsolute($modulePath) ? $modulePath : Path::makeAbsolute($modulePath, $this->appRoot);
                     $fullPath = $fullPath.'/'.$machineName;
diff --git a/vendor/drupal/console/src/Command/Generate/ModuleFileCommand.php b/vendor/drupal/console/src/Command/Generate/ModuleFileCommand.php
index 09653d294ba6992312a7df35957509369e429195..6f2dfc0fb558b5aaed41f927ac6649cc6c610115 100644
--- a/vendor/drupal/console/src/Command/Generate/ModuleFileCommand.php
+++ b/vendor/drupal/console/src/Command/Generate/ModuleFileCommand.php
@@ -87,11 +87,11 @@ protected function execute(InputInterface $input, OutputInterface $output)
             return 1;
         }
 
-        $machine_name =  $input->getOption('module');
-        $file_path =  $this->extensionManager->getModule($machine_name)->getPath();
+        $module = $this->validateModule($input->getOption('module'));
+        $file_path =  $this->extensionManager->getModule($module)->getPath();
 
         $this->generator->generate([
-            'machine_name' => $machine_name,
+            'machine_name' => $module,
             'file_path' => $file_path,
         ]);
     }
diff --git a/vendor/drupal/console/src/Command/Generate/PermissionCommand.php b/vendor/drupal/console/src/Command/Generate/PermissionCommand.php
index fe0adf882b513a8fe2cbdb178e1dbf7c7eedae80..8a90139b162f416255923e8c04aae7586c18c7cb 100644
--- a/vendor/drupal/console/src/Command/Generate/PermissionCommand.php
+++ b/vendor/drupal/console/src/Command/Generate/PermissionCommand.php
@@ -93,7 +93,7 @@ protected function configure()
      */
     protected function execute(InputInterface $input, OutputInterface $output)
     {
-        $module = $input->getOption('module');
+        $module = $this->validateModule($input->getOption('module'));
         $permissions = $input->getOption('permissions');
         $learning = $input->hasOption('learning');
         $noInteraction = $input->getOption('no-interaction');
diff --git a/vendor/drupal/console/src/Command/Generate/PluginBlockCommand.php b/vendor/drupal/console/src/Command/Generate/PluginBlockCommand.php
index a1f6dd6a43b59ea144c15ad1ea28b82d954b2c5d..89116f0136257b69fe5cb4b7fd37c5f100531142 100644
--- a/vendor/drupal/console/src/Command/Generate/PluginBlockCommand.php
+++ b/vendor/drupal/console/src/Command/Generate/PluginBlockCommand.php
@@ -8,22 +8,22 @@
 namespace Drupal\Console\Command\Generate;
 
 use Drupal\Console\Command\Shared\ArrayInputTrait;
-use Symfony\Component\Console\Input\InputInterface;
-use Symfony\Component\Console\Input\InputOption;
-use Symfony\Component\Console\Output\OutputInterface;
-use Drupal\Console\Core\Command\ContainerAwareCommand;
-use Drupal\Console\Generator\PluginBlockGenerator;
-use Drupal\Console\Command\Shared\ServicesTrait;
-use Drupal\Console\Command\Shared\ModuleTrait;
 use Drupal\Console\Command\Shared\FormTrait;
 use Drupal\Console\Command\Shared\ConfirmationTrait;
-use Drupal\Console\Extension\Manager;
-use Drupal\Console\Utils\Validator;
+use Drupal\Console\Command\Shared\ModuleTrait;
+use Drupal\Console\Command\Shared\ServicesTrait;
+use Drupal\Console\Core\Command\ContainerAwareCommand;
 use Drupal\Console\Core\Utils\StringConverter;
 use Drupal\Console\Core\Utils\ChainQueue;
+use Drupal\Console\Generator\PluginBlockGenerator;
+use Drupal\Console\Extension\Manager;
+use Drupal\Console\Utils\Validator;
 use Drupal\Core\Config\ConfigFactory;
 use Drupal\Core\Entity\EntityTypeManagerInterface;
 use Drupal\Core\Render\ElementInfoManagerInterface;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Output\OutputInterface;
 
 class PluginBlockCommand extends ContainerAwareCommand
 {
@@ -125,10 +125,10 @@ protected function configure()
                 $this->trans('commands.generate.plugin.block.options.class')
             )
             ->addOption(
-                'label',
+                'plugin-label',
                 null,
                 InputOption::VALUE_OPTIONAL,
-                $this->trans('commands.generate.plugin.block.options.label')
+                $this->trans('commands.generate.plugin.block.options.plugin-label')
             )
             ->addOption(
                 'plugin-id',
@@ -154,6 +154,12 @@ protected function configure()
                 InputOption::VALUE_OPTIONAL | InputOption::VALUE_IS_ARRAY,
                 $this->trans('commands.common.options.services')
             )
+            ->addOption(
+                'twigtemplate',
+                null,
+                InputOption::VALUE_NONE,
+                $this->trans('commands.generate.plugin.block.options.twigtemplate')
+            )
             ->setAliases(['gpb']);
     }
 
@@ -167,14 +173,16 @@ protected function execute(InputInterface $input, OutputInterface $output)
             return 1;
         }
 
-        $module = $input->getOption('module');
+        $module = $this->validateModule($input->getOption('module'));
         $class_name = $this->validator->validateClassName($input->getOption('class'));
-        $label = $input->getOption('label');
+        $plugin_label = $input->getOption('plugin-label');
         $plugin_id = $input->getOption('plugin-id');
         $services = $input->getOption('services');
         $theme_region = $input->getOption('theme-region');
         $inputs = $input->getOption('inputs');
         $noInteraction = $input->getOption('no-interaction');
+        $twigTemplate = $input->getOption('twigtemplate');
+
         // Parse nested data.
         if ($noInteraction) {
             $inputs = $this->explodeInlineArray($inputs);
@@ -200,13 +208,13 @@ protected function execute(InputInterface $input, OutputInterface $output)
         $this->generator->generate([
           'module' => $module,
           'class_name' => $class_name,
-          'label' => $label,
+          'label' => $plugin_label,
           'plugin_id' => $plugin_id,
           'services' => $build_services,
           'inputs' => $inputs,
+          'twig_template' => $twigTemplate,
         ]);
 
-
         $this->chainQueue->addCommand('cache:rebuild', ['cache' => 'discovery']);
 
         if ($theme_region) {
@@ -224,9 +232,6 @@ protected function execute(InputInterface $input, OutputInterface $output)
 
     protected function interact(InputInterface $input, OutputInterface $output)
     {
-        $theme = $this->configFactory->get('system.theme')->get('default');
-        $themeRegions = \system_region_list($theme, REGIONS_VISIBLE);
-
         // --module option
         $this->getModuleOption();
 
@@ -243,14 +248,14 @@ function ($class) {
             $input->setOption('class', $class);
         }
 
-        // --label option
-        $label = $input->getOption('label');
-        if (!$label) {
-            $label = $this->getIo()->ask(
-                $this->trans('commands.generate.plugin.block.questions.label'),
+        // --plugin-label option
+        $plugin_label = $input->getOption('plugin-label');
+        if (!$plugin_label) {
+            $plugin_label = $this->getIo()->ask(
+                $this->trans('commands.generate.plugin.block.questions.plugin-label'),
                 $this->stringConverter->camelCaseToHuman($class)
             );
-            $input->setOption('label', $label);
+            $input->setOption('plugin-label', $plugin_label);
         }
 
         // --plugin-id option
@@ -265,10 +270,17 @@ function ($class) {
 
         // --theme-region option
         $themeRegion = $input->getOption('theme-region');
+
         if (!$themeRegion) {
+            $theme = $this->configFactory->get('system.theme')->get('default');
+            $themeRegions = \system_region_list($theme, REGIONS_VISIBLE);
+            $themeRegionOptions = [];
+            foreach ($themeRegions as $key => $region) {
+                $themeRegionOptions[$key] = $region->render();
+            }
             $themeRegion = $this->getIo()->choiceNoList(
                 $this->trans('commands.generate.plugin.block.questions.theme-region'),
-                array_values($themeRegions),
+                $themeRegionOptions,
                 '',
                 true
             );
@@ -293,5 +305,14 @@ function ($class) {
             $inputs = $this->explodeInlineArray($inputs);
         }
         $input->setOption('inputs', $inputs);
+
+        $twigtemplate = $input->getOption('twigtemplate');
+        if (!$twigtemplate) {
+            $twigtemplate = $this->getIo()->confirm(
+                $this->trans('commands.generate.plugin.block.questions.twigtemplate'),
+                false
+            );
+            $input->setOption('twigtemplate', $twigtemplate);
+        }
     }
 }
diff --git a/vendor/drupal/console/src/Command/Generate/PluginCKEditorButtonCommand.php b/vendor/drupal/console/src/Command/Generate/PluginCKEditorButtonCommand.php
index 347b76671c3013c9ad5feb37079a7fb1bb4e11a4..a0061d931d6a15fb1e598cc17fc1fe537a41284c 100644
--- a/vendor/drupal/console/src/Command/Generate/PluginCKEditorButtonCommand.php
+++ b/vendor/drupal/console/src/Command/Generate/PluginCKEditorButtonCommand.php
@@ -7,22 +7,24 @@
 
 namespace Drupal\Console\Command\Generate;
 
+use Drupal\Console\Command\Shared\ArrayInputTrait;
+use Drupal\Console\Command\Shared\ConfirmationTrait;
+use Drupal\Console\Command\Shared\ModuleTrait;
+use Drupal\Console\Core\Command\Command;
+use Drupal\Console\Core\Utils\ChainQueue;
+use Drupal\Console\Core\Utils\StringConverter;
+use Drupal\Console\Extension\Manager;
+use Drupal\Console\Generator\PluginCKEditorButtonGenerator;
 use Drupal\Console\Utils\Validator;
 use Symfony\Component\Console\Input\InputInterface;
 use Symfony\Component\Console\Input\InputOption;
 use Symfony\Component\Console\Output\OutputInterface;
-use Drupal\Console\Core\Command\Command;
-use Drupal\Console\Generator\PluginCKEditorButtonGenerator;
-use Drupal\Console\Command\Shared\ModuleTrait;
-use Drupal\Console\Command\Shared\ConfirmationTrait;
-use Drupal\Console\Core\Utils\ChainQueue;
-use Drupal\Console\Extension\Manager;
-use Drupal\Console\Core\Utils\StringConverter;
 
 class PluginCKEditorButtonCommand extends Command
 {
-    use ModuleTrait;
+    use ArrayInputTrait;
     use ConfirmationTrait;
+    use ModuleTrait;
 
     /**
      * @var ChainQueue
@@ -31,13 +33,13 @@ class PluginCKEditorButtonCommand extends Command
 
 
     /**
- * @var PluginCKEditorButtonGenerator
-*/
+     * @var PluginCKEditorButtonGenerator
+     */
     protected $generator;
 
     /**
- * @var Manager
-*/
+     * @var Manager
+     */
     protected $extensionManager;
 
     /**
@@ -50,7 +52,6 @@ class PluginCKEditorButtonCommand extends Command
      */
     protected $validator;
 
-
     /**
      * PluginCKEditorButtonCommand constructor.
      *
@@ -106,16 +107,10 @@ protected function configure()
                 $this->trans('commands.generate.plugin.ckeditorbutton.options.plugin-id')
             )
             ->addOption(
-                'button-name',
-                null,
-                InputOption::VALUE_REQUIRED,
-                $this->trans('commands.generate.plugin.ckeditorbutton.options.button-name')
-            )
-            ->addOption(
-                'button-icon-path',
+                'buttons',
                 null,
-                InputOption::VALUE_REQUIRED,
-                $this->trans('commands.generate.plugin.ckeditorbutton.options.button-icon-path')
+                InputOption::VALUE_REQUIRED | InputOption::VALUE_IS_ARRAY,
+                $this->trans('commands.generate.plugin.ckeditorbutton.options.buttons')
             )->setAliases(['gpc']);
     }
 
@@ -129,20 +124,24 @@ protected function execute(InputInterface $input, OutputInterface $output)
             return 1;
         }
 
-        $module = $input->getOption('module');
+        $module = $this->validateModule($input->getOption('module'));
         $class_name = $this->validator->validateClassName($input->getOption('class'));
         $label = $input->getOption('label');
         $plugin_id = $input->getOption('plugin-id');
-        $button_name = $input->getOption('button-name');
-        $button_icon_path = $input->getOption('button-icon-path');
+        $buttons = $input->getOption('buttons');
+
+        $noInteraction = $input->getOption('no-interaction');
+        // Parse nested data.
+        if ($noInteraction) {
+            $buttons = $this->explodeInlineArray($buttons);
+        }
 
         $this->generator->generate([
           'module' => $module,
           'class_name' => $class_name,
           'label' => $label,
           'plugin_id' => $plugin_id,
-          'button_name' => $button_name,
-          'button_icon_path' => $button_icon_path,
+          'buttons' => $buttons,
         ]);
 
         $this->chainQueue->addCommand('cache:rebuild', ['cache' => 'discovery'], false);
@@ -183,29 +182,48 @@ function ($class_name) {
         if (!$plugin_id) {
             $plugin_id = $this->getIo()->ask(
                 $this->trans('commands.generate.plugin.ckeditorbutton.questions.plugin-id'),
-                $this->stringConverter->camelCaseToLowerCase($label)
+                $this->stringConverter->createMachineName($label)
             );
             $input->setOption('plugin-id', $plugin_id);
         }
 
-        // --button-name option
-        $button_name = $input->getOption('button-name');
-        if (!$button_name) {
-            $button_name = $this->getIo()->ask(
+        $buttons = [];
+        while (true) {
+            $this->getIo()->newLine(2);
+            $this->getIo()->comment($this->trans('commands.generate.plugin.ckeditorbutton.options.button-properties'));
+            // --button-name option
+            $buttonName = $this->getIo()->ask(
                 $this->trans('commands.generate.plugin.ckeditorbutton.questions.button-name'),
-                $this->stringConverter->anyCaseToUcFirst($plugin_id)
+                $this->stringConverter->anyCaseToUcFirst($label)
+            );
+
+            $buttonLabel = $this->getIo()->ask(
+                $this->trans('commands.generate.plugin.ckeditorbutton.questions.button-label'),
+                $label
             );
-            $input->setOption('button-name', $button_name);
-        }
 
-        // --button-icon-path option
-        $button_icon_path = $input->getOption('button-icon-path');
-        if (!$button_icon_path) {
-            $button_icon_path = $this->getIo()->ask(
+            $buttonIcon = $this->getIo()->ask(
                 $this->trans('commands.generate.plugin.ckeditorbutton.questions.button-icon-path'),
-                drupal_get_path('module', $module) . '/js/plugins/' . $plugin_id . '/images/icon.png'
+                drupal_get_path('module', $module) . '/js/plugin/'.$plugin_id.'/icons/'.$buttonName.'.png'
             );
-            $input->setOption('button-icon-path', $button_icon_path);
+
+            array_push(
+                $buttons,
+                [
+                    'name' => $buttonName,
+                    'label' => $buttonLabel,
+                    'icon' => $buttonIcon,
+                ]
+            );
+
+            if (!$this->getIo()->confirm(
+                $this->trans('commands.generate.plugin.ckeditorbutton.questions.button-add'),
+                true
+            )
+            ) {
+                break;
+            }
         }
+        $input->setOption('buttons', $buttons);
     }
 }
diff --git a/vendor/drupal/console/src/Command/Generate/PluginConditionCommand.php b/vendor/drupal/console/src/Command/Generate/PluginConditionCommand.php
index 462ef56caf1f387cc36b56f22e22225c488ec7dd..ceb26dbedaff1e0b226675cf7917423e2173bacb 100644
--- a/vendor/drupal/console/src/Command/Generate/PluginConditionCommand.php
+++ b/vendor/drupal/console/src/Command/Generate/PluginConditionCommand.php
@@ -12,7 +12,7 @@
 use Symfony\Component\Console\Input\InputOption;
 use Symfony\Component\Console\Output\OutputInterface;
 use Drupal\Console\Core\Command\Command;
-use Drupal\Core\Entity\EntityTypeRepository;
+use Drupal\Core\Entity\EntityTypeRepositoryInterface;
 use Drupal\Console\Generator\PluginConditionGenerator;
 use Drupal\Console\Command\Shared\ModuleTrait;
 use Drupal\Console\Command\Shared\ConfirmationTrait;
@@ -59,18 +59,18 @@ class PluginConditionCommand extends Command
     /**
      * PluginConditionCommand constructor.
      *
-     * @param Manager                  $extensionManager
-     * @param PluginConditionGenerator $generator
-     * @param ChainQueue               $chainQueue
-     * @param EntityTypeRepository     $entitytyperepository
-     * @param StringConverter          $stringConverter
-     * @param Validator                $validator
+     * @param Manager                       $extensionManager
+     * @param PluginConditionGenerator      $generator
+     * @param ChainQueue                    $chainQueue
+     * @param EntityTypeRepositoryInterface $entitytyperepository
+     * @param StringConverter               $stringConverter
+     * @param Validator                     $validator
      */
     public function __construct(
         Manager $extensionManager,
         PluginConditionGenerator $generator,
         ChainQueue $chainQueue,
-        EntityTypeRepository $entitytyperepository,
+        EntityTypeRepositoryInterface $entitytyperepository,
         StringConverter $stringConverter,
         Validator $validator
     ) {
@@ -144,7 +144,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
             return 1;
         }
 
-        $module = $input->getOption('module');
+        $module = $this->validateModule($input->getOption('module'));
         $class_name = $this->validator->validateClassName($input->getOption('class'));
         $label = $input->getOption('label');
         $plugin_id = $input->getOption('plugin-id');
diff --git a/vendor/drupal/console/src/Command/Generate/PluginDerivativeCommand.php b/vendor/drupal/console/src/Command/Generate/PluginDerivativeCommand.php
new file mode 100644
index 0000000000000000000000000000000000000000..537c54fcbc33311c7a685280efe0a27a8a951f72
--- /dev/null
+++ b/vendor/drupal/console/src/Command/Generate/PluginDerivativeCommand.php
@@ -0,0 +1,221 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Console\Command\Generate\PluginDerivativeCommand.
+ */
+
+namespace Drupal\Console\Command\Generate;
+
+use Drupal\Console\Command\Shared\ArrayInputTrait;
+use Drupal\Console\Command\Shared\FormTrait;
+use Drupal\Console\Command\Shared\ConfirmationTrait;
+use Drupal\Console\Command\Shared\ModuleTrait;
+use Drupal\Console\Command\Shared\ServicesTrait;
+use Drupal\Console\Core\Command\ContainerAwareCommand;
+use Drupal\Console\Core\Utils\StringConverter;
+use Drupal\Console\Core\Utils\ChainQueue;
+use Drupal\Console\Extension\Manager;
+use Drupal\Console\Utils\Validator;
+use Drupal\Core\Config\ConfigFactory;
+use Drupal\Core\Render\ElementInfoManagerInterface;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Output\OutputInterface;
+use Drupal\Console\Generator\PluginDerivativeGenerator;
+
+class PluginDerivativeCommand extends ContainerAwareCommand
+{
+    use ArrayInputTrait;
+    use ServicesTrait;
+    use ModuleTrait;
+    use FormTrait;
+    use ConfirmationTrait;
+
+    /**
+     * @var ConfigFactory
+     */
+    protected $configFactory;
+
+    /**
+     * @var ChainQueue
+     */
+    protected $chainQueue;
+
+    /**
+     * @var PluginDerivativeGenerator
+     */
+    protected $generator;
+
+    /**
+     * @var Manager
+     */
+    protected $extensionManager;
+
+    /**
+     * @var Validator
+     */
+    protected $validator;
+
+    /**
+     * @var StringConverter
+     */
+    protected $stringConverter;
+
+    /**
+     * @var ElementInfoManagerInterface
+     */
+    protected $elementInfoManager;
+
+    /**
+     * BlockTypeCommand constructor.
+     *
+     * @param ConfigFactory               $configFactory
+     * @param ChainQueue                  $chainQueue
+     * @param PluginDerivativeGenerator   $generator
+     * @param Manager                     $extensionManager
+     * @param Validator                   $validator
+     * @param StringConverter             $stringConverter
+     * @param ElementInfoManagerInterface $elementInfoManager
+     */
+    public function __construct(
+        ConfigFactory $configFactory,
+        ChainQueue $chainQueue,
+        PluginDerivativeGenerator $generator,
+        Manager $extensionManager,
+        Validator $validator,
+        StringConverter $stringConverter
+    ) {
+        $this->configFactory    = $configFactory;
+        $this->chainQueue       = $chainQueue;
+        $this->generator        = $generator;
+        $this->extensionManager = $extensionManager;
+        $this->validator        = $validator;
+        $this->stringConverter  = $stringConverter;
+        parent::__construct();
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function configure()
+    {
+        $this
+            ->setName('generate:plugin:derivative')
+            ->setDescription($this->trans('commands.generate.derivative.description'))
+            ->setHelp($this->trans('commands.generate.plugin.derivative.help'))
+            ->addOption(
+                'module',
+                null,
+                InputOption::VALUE_REQUIRED,
+                $this->trans('commands.common.options.module')
+            )
+            ->addOption(
+                'class',
+                null,
+                InputOption::VALUE_OPTIONAL,
+                $this->trans('commands.generate.plugin.derivative.options.class')
+            )
+            ->addOption(
+                'block_label',
+                null,
+                InputOption::VALUE_OPTIONAL,
+                $this->trans('commands.generate.plugin.derivative.options.block_label')
+            )
+            ->addOption(
+                'block_description',
+                null,
+                InputOption::VALUE_OPTIONAL,
+                $this->trans('commands.generate.plugin.derivative.options.block_description')
+            )
+            ->addOption(
+                'block_id',
+                null,
+                InputOption::VALUE_OPTIONAL,
+                $this->trans('commands.generate.plugin.derivative.options.block_id')
+            )
+            ->setAliases(['gpd']);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function execute(InputInterface $input, OutputInterface $output)
+    {
+        // @see use Drupal\Console\Command\Shared\ConfirmationTrait::confirmOperation
+        if (!$this->confirmOperation()) {
+            return 1;
+        }
+
+        $module = $this->validateModule($input->getOption('module'));
+        $class_name = $this->validator->validateClassName($input->getOption('class'));
+        $block_label = $input->getOption('block_label');
+        $block_description = $input->getOption('block_description');
+        $block_id = $input->getOption('block_id');
+        
+        $theme_region = true;
+        
+        $this->generator->generate(
+            [
+            'module' => $module,
+            'class' => $class_name,
+            'block_label' => $block_label,
+            'block_description' => $block_description,
+            'block_id' => $block_id,
+            ]
+        );
+        
+        $this->chainQueue->addCommand('cache:rebuild', ['cache' => 'discovery']);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function interact(InputInterface $input, OutputInterface $output)
+    {
+        // --module option
+        $this->getModuleOption();
+
+        // --class option
+        $class = $input->getOption('class');
+        if (!$class) {
+            $class = $this->getIo()->ask(
+                $this->trans('commands.generate.plugin.derivative.questions.class'),
+                $this->trans('commands.generate.plugin.derivative.suggestions.class'),
+                function ($class) {
+                    return $this->validator->validateClassName($class);
+                }
+            );
+            $input->setOption('class', $class);
+        }
+
+        // --block_label option
+        $block_label = $input->getOption('block_label');
+        if (!$block_label) {
+            $block_label = $this->getIo()->ask(
+                $this->trans('commands.generate.plugin.derivative.questions.block_label'),
+                $this->trans('commands.generate.plugin.derivative.suggestions.block_label')
+            );
+            $input->setOption('block_label', $block_label);
+        }
+
+        // --block_id option
+        $blockId = $input->getOption('block_id');
+        if (!$blockId) {
+            $blockId = $this->getIo()->ask(
+                $this->trans('commands.generate.plugin.derivative.questions.block_id'),
+                $this->stringConverter->camelCaseToUnderscore($blockId)
+            );
+            $input->setOption('block_id', $blockId);
+        }
+        // --block_description option
+        $blockDesc = $input->getOption('block_description');
+        if (!$blockDesc) {
+            $blockDesc = $this->getIo()->ask(
+                $this->trans('commands.generate.plugin.derivative.questions.block_description'),
+                $this->trans('commands.generate.plugin.derivative.suggestions.block_description')
+            );
+            $input->setOption('block_description', $blockDesc);
+        }
+    }
+}
diff --git a/vendor/drupal/console/src/Command/Generate/PluginFieldCommand.php b/vendor/drupal/console/src/Command/Generate/PluginFieldCommand.php
index e6979177b85b76b639f2180e75f049bfd1b2467a..fae14c6f13cbc7fbd6a99558b86b224307716bad 100644
--- a/vendor/drupal/console/src/Command/Generate/PluginFieldCommand.php
+++ b/vendor/drupal/console/src/Command/Generate/PluginFieldCommand.php
@@ -168,10 +168,11 @@ protected function execute(InputInterface $input, OutputInterface $output)
             return 1;
         }
 
+        $module = $this->validateModule($input->getOption('module'));
         $this->chainQueue
             ->addCommand(
                 'generate:plugin:fieldtype', [
-                '--module' => $input->getOption('module'),
+                '--module' => $module,
                 '--class' => $this->validator->validateClassName($input->getOption('type-class')),
                 '--label' => $input->getOption('type-label'),
                 '--plugin-id' => $input->getOption('type-plugin-id'),
@@ -185,7 +186,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
         $this->chainQueue
             ->addCommand(
                 'generate:plugin:fieldwidget', [
-                '--module' => $input->getOption('module'),
+                '--module' => $module,
                 '--class' => $this->validator->validateClassName($input->getOption('widget-class')),
                 '--label' => $input->getOption('widget-label'),
                 '--plugin-id' => $input->getOption('widget-plugin-id'),
@@ -196,7 +197,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
         $this->chainQueue
             ->addCommand(
                 'generate:plugin:fieldformatter', [
-                '--module' => $input->getOption('module'),
+                '--module' => $module,
                 '--class' => $this->validator->validateClassName($input->getOption('formatter-class')),
                 '--label' => $input->getOption('formatter-label'),
                 '--plugin-id' => $input->getOption('formatter-plugin-id'),
diff --git a/vendor/drupal/console/src/Command/Generate/PluginFieldFormatterCommand.php b/vendor/drupal/console/src/Command/Generate/PluginFieldFormatterCommand.php
index 4c07a4c16e3a7b3f6e923760669f917fdffef18c..cb47db08c2987a145fc11282d17578d617026bb1 100644
--- a/vendor/drupal/console/src/Command/Generate/PluginFieldFormatterCommand.php
+++ b/vendor/drupal/console/src/Command/Generate/PluginFieldFormatterCommand.php
@@ -137,7 +137,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
             return 1;
         }
 
-        $module = $input->getOption('module');
+        $module = $this->validateModule($input->getOption('module'));
         $class_name = $this->validator->validateClassName($input->getOption('class'));
         $label = $input->getOption('label');
         $plugin_id = $input->getOption('plugin-id');
diff --git a/vendor/drupal/console/src/Command/Generate/PluginFieldTypeCommand.php b/vendor/drupal/console/src/Command/Generate/PluginFieldTypeCommand.php
index 6cd79bc45b032384d996157e22dcbb70225b0c24..ce5cd5a483de889cbd560b88fcde05f1b6dc46a0 100644
--- a/vendor/drupal/console/src/Command/Generate/PluginFieldTypeCommand.php
+++ b/vendor/drupal/console/src/Command/Generate/PluginFieldTypeCommand.php
@@ -141,7 +141,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
             return 1;
         }
 
-        $module = $input->getOption('module');
+        $module = $this->validateModule($input->getOption('module'));
         $class_name = $this->validator->validateClassName($input->getOption('class'));
         $label = $input->getOption('label');
         $plugin_id = $input->getOption('plugin-id');
diff --git a/vendor/drupal/console/src/Command/Generate/PluginFieldWidgetCommand.php b/vendor/drupal/console/src/Command/Generate/PluginFieldWidgetCommand.php
index d057d9df7ba42ca633c820aec80c9d666beb56cd..b272e83acc24fc1260133455458829035b0f4ab5 100644
--- a/vendor/drupal/console/src/Command/Generate/PluginFieldWidgetCommand.php
+++ b/vendor/drupal/console/src/Command/Generate/PluginFieldWidgetCommand.php
@@ -137,7 +137,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
             return 1;
         }
 
-        $module = $input->getOption('module');
+        $module = $this->validateModule($input->getOption('module'));
         $class_name = $this->validator->validateClassName($input->getOption('class'));
         $label = $input->getOption('label');
         $plugin_id = $input->getOption('plugin-id');
diff --git a/vendor/drupal/console/src/Command/Generate/PluginImageEffectCommand.php b/vendor/drupal/console/src/Command/Generate/PluginImageEffectCommand.php
index 50c8282d39a94832f4cd08ee724953e0c0914c6b..460169ac52749a17967c10c14b7404b09178f974 100644
--- a/vendor/drupal/console/src/Command/Generate/PluginImageEffectCommand.php
+++ b/vendor/drupal/console/src/Command/Generate/PluginImageEffectCommand.php
@@ -128,7 +128,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
             return 1;
         }
 
-        $module = $input->getOption('module');
+        $module = $this->validateModule($input->getOption('module'));
         $class_name = $this->validator->validateClassName($input->getOption('class'));
         $label = $input->getOption('label');
         $plugin_id = $input->getOption('plugin-id');
diff --git a/vendor/drupal/console/src/Command/Generate/PluginImageFormatterCommand.php b/vendor/drupal/console/src/Command/Generate/PluginImageFormatterCommand.php
index 9d2b741b13bf5fb5994c973b77b9127e9e31ae15..de0f2e75f113434cceeeff4e667f1147e3781a60 100644
--- a/vendor/drupal/console/src/Command/Generate/PluginImageFormatterCommand.php
+++ b/vendor/drupal/console/src/Command/Generate/PluginImageFormatterCommand.php
@@ -117,7 +117,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
             return 1;
         }
 
-        $module = $input->getOption('module');
+        $module = $this->validateModule($input->getOption('module'));
         $class_name = $this->validator->validateClassName($input->getOption('class'));
         $label = $input->getOption('label');
         $plugin_id = $input->getOption('plugin-id');
diff --git a/vendor/drupal/console/src/Command/Generate/PluginMailCommand.php b/vendor/drupal/console/src/Command/Generate/PluginMailCommand.php
index 98a0dda18713c17cb9889f2e0b5178ada43af2bd..53a80a28663fcf396522d8407c7cd693a710edda 100644
--- a/vendor/drupal/console/src/Command/Generate/PluginMailCommand.php
+++ b/vendor/drupal/console/src/Command/Generate/PluginMailCommand.php
@@ -7,18 +7,18 @@
 
 namespace Drupal\Console\Command\Generate;
 
-use Symfony\Component\Console\Input\InputInterface;
-use Symfony\Component\Console\Input\InputOption;
-use Symfony\Component\Console\Output\OutputInterface;
-use Drupal\Console\Command\Shared\ServicesTrait;
-use Drupal\Console\Command\Shared\ModuleTrait;
 use Drupal\Console\Command\Shared\ConfirmationTrait;
+use Drupal\Console\Command\Shared\ModuleTrait;
+use Drupal\Console\Command\Shared\ServicesTrait;
 use Drupal\Console\Generator\PluginMailGenerator;
 use Drupal\Console\Core\Command\ContainerAwareCommand;
-use Drupal\Console\Extension\Manager;
 use Drupal\Console\Core\Utils\StringConverter;
-use Drupal\Console\Utils\Validator;
 use Drupal\Console\Core\Utils\ChainQueue;
+use Drupal\Console\Extension\Manager;
+use Drupal\Console\Utils\Validator;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Output\OutputInterface;
 
 /**
  * Class PluginMailCommand
@@ -129,7 +129,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
             return 1;
         }
 
-        $module = $input->getOption('module');
+        $module = $this->validateModule($input->getOption('module'));
         $class_name = $this->validator->validateClassName($input->getOption('class'));
         $label = $input->getOption('label');
         $plugin_id = $input->getOption('plugin-id');
diff --git a/vendor/drupal/console/src/Command/Generate/PluginMigrateDataParserCommand.php b/vendor/drupal/console/src/Command/Generate/PluginMigrateDataParserCommand.php
new file mode 100644
index 0000000000000000000000000000000000000000..05f08a460d223b5c4b2b180e028cf45b162db93c
--- /dev/null
+++ b/vendor/drupal/console/src/Command/Generate/PluginMigrateDataParserCommand.php
@@ -0,0 +1,174 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Console\Command\Generate\PluginMigrateDataParserCommand.
+ */
+
+namespace Drupal\Console\Command\Generate;
+
+use Drupal\Console\Command\Shared\ModuleTrait;
+use Drupal\Console\Command\Shared\ConfirmationTrait;
+use Drupal\Console\Core\Command\Command;
+use Drupal\Console\Core\Utils\ChainQueue;
+use Drupal\Console\Core\Utils\StringConverter;
+use Drupal\Console\Extension\Manager;
+use Drupal\Console\Generator\PluginMigrateDataParserGenerator;
+use Drupal\Console\Utils\Validator;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Output\OutputInterface;
+
+class PluginMigrateDataParserCommand extends Command
+{
+    use ModuleTrait;
+    use ConfirmationTrait;
+
+    /**
+     * @var PluginMigrateProcessGenerator
+     */
+    protected $generator;
+
+    /**
+     * @var ChainQueue
+     */
+    protected $chainQueue;
+
+    /**
+     * @var Manager
+     */
+    protected $extensionManager;
+
+    /**
+     * @var StringConverter
+     */
+    protected $stringConverter;
+
+    /**
+     * @var Validator
+     */
+    protected $validator;
+
+    /**
+     * PluginMigrateDataParserGenerator constructor.
+     *
+     * @param PluginMigrateDataParserGenerator $generator
+     * @param ChainQueue                       $chainQueue
+     * @param Manager                          $extensionManager
+     * @param StringConverter                  $stringConverter
+     * @param Validator                        $validator
+     */
+    public function __construct(
+      PluginMigrateDataParserGenerator $generator,
+      ChainQueue $chainQueue,
+      Manager $extensionManager,
+      StringConverter $stringConverter,
+      Validator $validator
+    ) {
+        $this->generator = $generator;
+        $this->chainQueue = $chainQueue;
+        $this->extensionManager = $extensionManager;
+        $this->stringConverter = $stringConverter;
+        $this->validator = $validator;
+        parent::__construct();
+    }
+
+    protected function configure()
+    {
+        $this
+            ->setName('generate:plugin:migrate:dataparser')
+            ->setDescription($this->trans('commands.generate.plugin.migrate.dataparser.description'))
+            ->setHelp($this->trans('commands.generate.plugin.migrate.dataparser.help'))
+            ->addOption(
+                'module',
+                null,
+                InputOption::VALUE_REQUIRED,
+                $this->trans('commands.common.options.module')
+            )
+            ->addOption(
+                'class',
+                null,
+                InputOption::VALUE_OPTIONAL,
+                $this->trans('commands.generate.plugin.migrate.dataparser.options.class')
+            )
+            ->addOption(
+                'plugin-id',
+                null,
+                InputOption::VALUE_OPTIONAL,
+                $this->trans('commands.generate.plugin.migrate.dataparser.options.plugin-id')
+            )
+            ->addOption(
+                'plugin-title',
+                null,
+                InputOption::VALUE_OPTIONAL,
+                $this->trans('commands.generate.plugin.migrate.dataparser.options.plugin-title')
+            )->setAliases(['gpmdp']);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function execute(InputInterface $input, OutputInterface $output)
+    {
+        // @see use Drupal\Console\Command\Shared\ConfirmationTrait::confirmOperation
+        if (!$this->confirmOperation()) {
+            return 1;
+        }
+
+        $module = $input->getOption('module');
+        $class_name = $this->validator->validateClassName($input->getOption('class'));
+        $plugin_id = $input->getOption('plugin-id');
+        $plugin_title = $input->getOption('plugin-title');
+
+        $this->generator->generate([
+          'module' => $module,
+          'class_name' => $class_name,
+          'plugin_id' => $plugin_id,
+          'plugin_title' => $plugin_title,
+        ]);
+
+        $this->chainQueue->addCommand('cache:rebuild', ['cache' => 'discovery']);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function interact(InputInterface $input, OutputInterface $output)
+    {
+        // 'module-name' option.
+        $module = $this->getModuleOption();
+
+        // 'class-name' option
+        $class = $input->getOption('class');
+        if (!$class) {
+            $class = $this->getIo()->ask(
+                $this->trans('commands.generate.plugin.migrate.dataparser.questions.class'),
+                ucfirst($this->stringConverter->underscoreToCamelCase($module)),
+                function ($class) {
+                    return $this->validator->validateClassName($class);
+                }
+            );
+            $input->setOption('class', $class);
+        }
+
+        // 'plugin-id' option.
+        $pluginId = $input->getOption('plugin-id');
+        if (!$pluginId) {
+            $pluginId = $this->getIo()->ask(
+                $this->trans('commands.generate.plugin.migrate.dataparser.questions.plugin-id'),
+                $this->stringConverter->camelCaseToUnderscore($class)
+            );
+            $input->setOption('plugin-id', $pluginId);
+        }
+
+        // 'plugin-title' option.
+        $pluginTitle = $input->getOption('plugin-title');
+        if (!$pluginTitle) {
+          $pluginTitle = $this->getIo()->ask(
+            $this->trans('commands.generate.plugin.migrate.dataparser.questions.plugin-title'),
+            $this->stringConverter->camelCaseToUnderscore($class)
+          );
+          $input->setOption('plugin-title', $pluginTitle);
+        }
+    }
+}
diff --git a/vendor/drupal/console/src/Command/Generate/PluginMigrateProcessCommand.php b/vendor/drupal/console/src/Command/Generate/PluginMigrateProcessCommand.php
index 8a1585b5690d08db38fb883c443a9b2ca78e7a31..48b0595c04606acca0dfcfc070625997528f95a0 100644
--- a/vendor/drupal/console/src/Command/Generate/PluginMigrateProcessCommand.php
+++ b/vendor/drupal/console/src/Command/Generate/PluginMigrateProcessCommand.php
@@ -7,19 +7,19 @@
 
 namespace Drupal\Console\Command\Generate;
 
-use Drupal\Console\Utils\Validator;
-use Symfony\Component\Console\Input\InputInterface;
-use Symfony\Component\Console\Input\InputOption;
-use Symfony\Component\Console\Output\OutputInterface;
-use Drupal\Console\Core\Command\ContainerAwareCommand;
+use Drupal\Console\Core\Command\Command;
 use Drupal\Console\Generator\PluginMigrateProcessGenerator;
-use Drupal\Console\Command\Shared\ModuleTrait;
+use Drupal\Console\Utils\Validator;
 use Drupal\Console\Command\Shared\ConfirmationTrait;
+use Drupal\Console\Command\Shared\ModuleTrait;
 use Drupal\Console\Extension\Manager;
-use Drupal\Console\Core\Utils\StringConverter;
 use Drupal\Console\Core\Utils\ChainQueue;
+use Drupal\Console\Core\Utils\StringConverter;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Output\OutputInterface;
 
-class PluginMigrateProcessCommand extends ContainerAwareCommand
+class PluginMigrateProcessCommand extends Command
 {
     use ModuleTrait;
     use ConfirmationTrait;
@@ -109,7 +109,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
             return 1;
         }
 
-        $module = $input->getOption('module');
+        $module = $this->validateModule($input->getOption('module'));
         $class_name = $this->validator->validateClassName($input->getOption('class'));
         $plugin_id = $input->getOption('plugin-id');
 
diff --git a/vendor/drupal/console/src/Command/Generate/PluginMigrateSourceCommand.php b/vendor/drupal/console/src/Command/Generate/PluginMigrateSourceCommand.php
index 8476a1e0698df3afab6ce638bfeec0d801f10984..d8739eaaed1d12014134181afe46f134d4c76f58 100644
--- a/vendor/drupal/console/src/Command/Generate/PluginMigrateSourceCommand.php
+++ b/vendor/drupal/console/src/Command/Generate/PluginMigrateSourceCommand.php
@@ -2,30 +2,33 @@
 
 /**
  * @file
- * Contains \Drupal\Console\Command\Generate\PluginBlockCommand.
+ * Contains \Drupal\Console\Command\Generate\PluginMigrateSourceCommand.
  */
 
 namespace Drupal\Console\Command\Generate;
 
-use Symfony\Component\Console\Input\InputInterface;
-use Symfony\Component\Console\Input\InputOption;
-use Symfony\Component\Console\Output\OutputInterface;
-use Drupal\Console\Core\Command\ContainerAwareCommand;
-use Drupal\Console\Generator\PluginMigrateSourceGenerator;
+
+use Drupal\Console\Core\Command\Command;
+use Drupal\Console\Core\Utils\StringConverter;
+use Drupal\Console\Core\Utils\ChainQueue;
+use Drupal\Console\Command\Shared\ArrayInputTrait;
 use Drupal\Console\Command\Shared\ModuleTrait;
 use Drupal\Console\Command\Shared\ConfirmationTrait;
 use Drupal\Console\Extension\Manager;
+use Drupal\Console\Generator\PluginMigrateSourceGenerator;
 use Drupal\Console\Utils\Validator;
-use Drupal\Console\Core\Utils\StringConverter;
-use Drupal\Console\Core\Utils\ChainQueue;
 use Drupal\Core\Config\ConfigFactory;
 use Drupal\Core\Entity\EntityTypeManagerInterface;
 use Drupal\Core\Render\ElementInfoManagerInterface;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Output\OutputInterface;
 
-class PluginMigrateSourceCommand extends ContainerAwareCommand
+class PluginMigrateSourceCommand extends Command
 {
-    use ModuleTrait;
+    use ArrayInputTrait;
     use ConfirmationTrait;
+    use ModuleTrait;
 
     /**
      * @var ConfigFactory
@@ -68,7 +71,7 @@ class PluginMigrateSourceCommand extends ContainerAwareCommand
     protected $elementInfoManager;
 
     /**
-     * PluginBlockCommand constructor.
+     * PluginMigrateSourceCommand constructor.
      *
      * @param ConfigFactory               $configFactory
      * @param ChainQueue                  $chainQueue
@@ -160,13 +163,18 @@ protected function execute(InputInterface $input, OutputInterface $output)
             return 1;
         }
 
-        $module = $input->getOption('module');
+        $module = $this->validateModule($input->getOption('module'));
         $class_name = $this->validator->validateClassName($input->getOption('class'));
         $plugin_id = $input->getOption('plugin-id');
         $table = $input->getOption('table');
         $alias = $input->getOption('alias');
         $group_by = $input->getOption('group-by');
         $fields = $input->getOption('fields');
+        $no_interaction = $input->getOption('no-interaction');
+        // Parse nested data.
+        if ($no_interaction) {
+            $fields = $this->explodeInlineArray($fields);
+        }
 
         $this->generator->generate([
           'module' => $module,
diff --git a/vendor/drupal/console/src/Command/Generate/PluginQueueWorkerCommand.php b/vendor/drupal/console/src/Command/Generate/PluginQueueWorkerCommand.php
new file mode 100644
index 0000000000000000000000000000000000000000..698154c04c47c6038e5fca61cea6826ef382f927
--- /dev/null
+++ b/vendor/drupal/console/src/Command/Generate/PluginQueueWorkerCommand.php
@@ -0,0 +1,212 @@
+<?php
+
+namespace Drupal\Console\Command\Generate;
+
+use Drupal\Console\Core\Command\Command;
+use Drupal\Console\Core\Utils\ChainQueue;
+use Drupal\Console\Extension\Manager;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+use Drupal\Console\Core\Generator\GeneratorInterface;
+use Drupal\Console\Command\Shared\ModuleTrait;
+use Drupal\Console\Command\Shared\ConfirmationTrait;
+use Symfony\Component\Console\Input\InputOption;
+use Drupal\Console\Utils\Validator;
+use Drupal\Console\Core\Utils\StringConverter;
+
+/**
+ * Class PluginQueueWorkerCommand.
+ *
+ * @package Drupal\Console\Command\Generate
+ */
+class PluginQueueWorkerCommand extends Command {
+
+  use ModuleTrait;
+  use ConfirmationTrait;
+
+  /**
+   * @var Manager
+   */
+  protected $extensionManager;
+
+  /**
+   * Drupal\Console\Core\Generator\GeneratorInterface definition.
+   *
+   * @var \Drupal\Console\Core\Generator\GeneratorInterface
+   */
+  protected $generator;
+
+  /**
+   * Validator.
+   *
+   * @var \Drupal\Console\Utils\Validator
+   */
+  protected $validator;
+
+  /**
+   * String converter.
+   *
+   * @var \Drupal\Console\Core\Utils\StringConverter
+   */
+  protected $stringConverter;
+
+  /**
+   * Chain queue.
+   *
+   * @var \Drupal\Console\Core\Utils\ChainQueue
+   */
+  protected $chainQueue;
+
+
+  /**
+   * PluginQueueWorkerCommand constructor.
+   *
+   * @param Manager $extensionManager
+   *   Extension Manager.
+   * @param \Drupal\Console\Core\Generator\GeneratorInterface $queue_generator
+   *   Queue Generator.
+   * @param \Drupal\Console\Utils\Validator $validator
+   *   Validator.
+   * @param \Drupal\Console\Core\Utils\StringConverter $stringConverter
+   *   String Converter.
+   * @param \Drupal\Console\Core\Utils\ChainQueue $chainQueue
+   *   Chain queue.
+   */
+  public function __construct(
+    Manager $extensionManager,
+    GeneratorInterface $queue_generator,
+    Validator $validator,
+    StringConverter $stringConverter,
+    ChainQueue $chainQueue
+  ) {
+    $this->extensionManager = $extensionManager;
+    $this->generator = $queue_generator;
+    $this->validator = $validator;
+    $this->stringConverter = $stringConverter;
+    $this->chainQueue = $chainQueue;
+    parent::__construct();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function configure() {
+    $this
+      ->setName('generate:plugin:queue')
+      ->setDescription($this->trans('commands.generate.plugin.queue.description'))
+      ->setHelp($this->trans('commands.generate.plugin.queue.help'))
+      ->addOption(
+          'module',
+          NULL,
+          InputOption::VALUE_REQUIRED,
+          $this->trans('commands.generate.plugin.queue.options.module')
+      )
+      ->addOption(
+          'class',
+          NULL,
+          InputOption::VALUE_REQUIRED,
+          $this->trans('commands.generate.plugin.queue.options.class')
+      )
+      ->addOption(
+          'plugin-id',
+          NULL,
+          InputOption::VALUE_REQUIRED,
+          $this->trans('commands.generate.plugin.queue.options.plugin-id')
+      )
+      ->addOption(
+          'cron-time',
+          NULL,
+          InputOption::VALUE_REQUIRED,
+          $this->trans('commands.generate.plugin.queue.options.cron-time')
+      )
+      ->addOption(
+          'label',
+          NULL,
+          InputOption::VALUE_REQUIRED,
+          $this->trans('commands.generate.plugin.queue.options.label')
+      )
+      ->setAliases(['gpqueue']);
+  }
+
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function interact(InputInterface $input, OutputInterface $output) {
+    // --module option.
+    $this->getModuleOption();
+
+    // --class option.
+    $queue_class = $input->getOption('class');
+    if (!$queue_class) {
+      $queue_class = $this->getIo()->ask(
+            $this->trans('commands.generate.plugin.queue.questions.class'),
+            'ExampleQueue',
+            function ($queue_class) {
+              return $this->validator->validateClassName($queue_class);
+            }
+        );
+      $input->setOption('class', $queue_class);
+    }
+
+    // --plugin-id option.
+    $plugin_id = $input->getOption('plugin-id');
+    if (!$plugin_id) {
+      $plugin_id = $this->getIo()->ask(
+          $this->trans('commands.generate.plugin.queue.questions.plugin-id'),
+          'example_plugin_id',
+          function ($plugin_id) {
+            return $this->stringConverter->camelCaseToUnderscore($plugin_id);
+          }
+      );
+      $input->setOption('plugin-id', $plugin_id);
+    }
+
+    // --cron-time option.
+    $cron_time = $input->getOption('cron-time');
+    if (!$cron_time) {
+      $cron_time = $this->getIo()->ask(
+          $this->trans('commands.generate.plugin.queue.questions.cron-time'),
+          30
+      );
+      $input->setOption('cron-time', $cron_time);
+    }
+
+    // --label option.
+    $label = $input->getOption('label');
+    if (!$label) {
+      $label = $this->getIo()->ask(
+          $this->trans('commands.generate.plugin.queue.questions.label'),
+          'Queue description.'
+      );
+      $input->setOption('label', $label);
+    }
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function execute(InputInterface $input, OutputInterface $output) {
+    // @see use Drupal\Console\Command\Shared\ConfirmationTrait::confirmOperation
+    if (!$this->confirmOperation()) {
+      return 1;
+    }
+    $module = $input->getOption('module');
+    $queue_class = $input->getOption('class');
+    $plugin_id = $input->getOption('plugin-id');
+    $cron_time = $input->getOption('cron-time');
+    $label = $input->getOption('label');
+    $this->generator->generate([
+      'module' => $module,
+      'class_name' => $queue_class,
+      'plugin_id' => $plugin_id,
+      'cron_time' => $cron_time,
+      'label' => $label,
+    ]);
+
+    $this->chainQueue->addCommand('cache:rebuild', ['cache' => 'discovery']);
+
+    return 0;
+  }
+
+}
diff --git a/vendor/drupal/console/src/Command/Generate/PluginRestResourceCommand.php b/vendor/drupal/console/src/Command/Generate/PluginRestResourceCommand.php
index e275c2e53deb21462036a428bd23cee0489c5223..bbcf2d575e56c19f9316d3454b697a0a8ce77015 100644
--- a/vendor/drupal/console/src/Command/Generate/PluginRestResourceCommand.php
+++ b/vendor/drupal/console/src/Command/Generate/PluginRestResourceCommand.php
@@ -19,6 +19,7 @@
 use Drupal\Console\Extension\Manager;
 use Drupal\Console\Core\Utils\StringConverter;
 use Drupal\Console\Core\Utils\ChainQueue;
+use Webmozart\PathUtil\Path;
 
 /**
  * Class PluginRestResourceCommand
@@ -137,7 +138,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
         }
 
         $http_methods = $this->getHttpMethods();
-        $module = $input->getOption('module');
+        $module = $this->validateModule($input->getOption('module'));
         $class_name = $this->validator->validateClassName($input->getOption('class'));
         $plugin_id = $input->getOption('plugin-id');
         $plugin_label = $input->getOption('plugin-label');
@@ -149,14 +150,16 @@ protected function execute(InputInterface $input, OutputInterface $output)
             $prepared_plugin[$plugin_state] = $http_methods[$plugin_state];
         }
 
-        $this->generator->generate([
-            'module_name' => $module,
-            'class_name' => $class_name,
-            'plugin_label' => $plugin_label,
-            'plugin_id' => $plugin_id,
-            'plugin_url' => $plugin_url,
-            'plugin_states' => $prepared_plugin,
-        ]);
+        $this->generator->generate(
+            [
+                'module_name' => $module,
+                'class_name' => $class_name,
+                'plugin_label' => $plugin_label,
+                'plugin_id' => $plugin_id,
+                'plugin_url' => $plugin_url,
+                'plugin_states' => $prepared_plugin,
+            ]
+        );
 
         $this->chainQueue->addCommand('cache:rebuild', ['cache' => 'discovery']);
 
@@ -205,8 +208,13 @@ function ($class) {
         $plugin_url = $input->getOption('plugin-url');
         if (!$plugin_url) {
             $plugin_url = $this->getIo()->ask(
-                $this->trans('commands.generate.plugin.rest.resource.questions.plugin-url')
+                $this->trans('commands.generate.plugin.rest.resource.questions.plugin-url'),
+                null,
+                function ($plugin_url) {
+                    return Path::isAbsolute($plugin_url) ? $plugin_url : '/'.$plugin_url;
+                }
             );
+
             $input->setOption('plugin-url', $plugin_url);
         }
 
@@ -236,32 +244,39 @@ protected function getHttpMethods()
     {
         return [
             'GET' => [
-              'http_code' => 200,
-              'response_class' => 'ResourceResponse',
+                'http_code' => 200,
+                'response_class' => 'ResourceResponse',
+                'uri_paths' => 'canonical',
             ],
             'PUT' => [
-              'http_code' => 201,
-              'response_class' => 'ModifiedResourceResponse',
+                'http_code' => 201,
+                'response_class' => 'ModifiedResourceResponse',
+                'uri_paths' => 'canonical',
             ],
             'POST' => [
-              'http_code' => 200,
-              'response_class' => 'ModifiedResourceResponse',
+                'http_code' => 200,
+                'response_class' => 'ModifiedResourceResponse',
+                'uri_paths' => 'create',
             ],
             'PATCH' => [
-              'http_code' => 204,
-              'response_class' => 'ModifiedResourceResponse',
+                'http_code' => 204,
+                'response_class' => 'ModifiedResourceResponse',
+                'uri_paths' => 'canonical',
             ],
             'DELETE' => [
-              'http_code' => 204,
-              'response_class' => 'ModifiedResourceResponse',
+                'http_code' => 204,
+                'response_class' => 'ModifiedResourceResponse',
+                'uri_type' => 'canonical',
             ],
             'HEAD' => [
-              'http_code' => 200,
-              'response_class' => 'ResourceResponse',
+                'http_code' => 200,
+                'response_class' => 'ResourceResponse',
+                'uri_type' => 'canonical',
             ],
             'OPTIONS' => [
-              'http_code' => 200,
-              'response_class' => 'ResourceResponse',
+                'http_code' => 200,
+                'response_class' => 'ResourceResponse',
+                'uri_type' => 'canonical',
             ],
         ];
     }
diff --git a/vendor/drupal/console/src/Command/Generate/PluginRulesActionCommand.php b/vendor/drupal/console/src/Command/Generate/PluginRulesActionCommand.php
index 473eb2ff10ec3d178a3842b22a28f1ca1f16a460..6a4e4158781b5d3b8b498e114c6d7eb3ac6af9ce 100644
--- a/vendor/drupal/console/src/Command/Generate/PluginRulesActionCommand.php
+++ b/vendor/drupal/console/src/Command/Generate/PluginRulesActionCommand.php
@@ -7,18 +7,18 @@
 
 namespace Drupal\Console\Command\Generate;
 
+use Drupal\Console\Command\Shared\ArrayInputTrait;
+use Drupal\Console\Command\Shared\ConfirmationTrait;
+use Drupal\Console\Command\Shared\ModuleTrait;
+use Drupal\Console\Core\Command\Command;
+use Drupal\Console\Core\Utils\StringConverter;
+use Drupal\Console\Core\Utils\ChainQueue;
+use Drupal\Console\Extension\Manager;
 use Drupal\Console\Generator\PluginRulesActionGenerator;
 use Drupal\Console\Utils\Validator;
 use Symfony\Component\Console\Input\InputInterface;
 use Symfony\Component\Console\Input\InputOption;
 use Symfony\Component\Console\Output\OutputInterface;
-use Drupal\Console\Command\Shared\ServicesTrait;
-use Drupal\Console\Command\Shared\ModuleTrait;
-use Drupal\Console\Command\Shared\ConfirmationTrait;
-use Drupal\Console\Core\Command\Command;
-use Drupal\Console\Extension\Manager;
-use Drupal\Console\Core\Utils\StringConverter;
-use Drupal\Console\Core\Utils\ChainQueue;
 
 /**
  * Class PluginRulesActionCommand
@@ -27,18 +27,19 @@
  */
 class PluginRulesActionCommand extends Command
 {
-    use ServicesTrait;
-    use ModuleTrait;
+
+    use ArrayInputTrait;
     use ConfirmationTrait;
+    use ModuleTrait;
 
     /**
- * @var Manager
-*/
+     * @var Manager
+     */
     protected $extensionManager;
 
     /**
- * @var PluginRulesActionGenerator
-*/
+     * @var PluginRulesActionGenerator
+     */
     protected $generator;
 
     /**
@@ -60,18 +61,18 @@ class PluginRulesActionCommand extends Command
     /**
      * PluginRulesActionCommand constructor.
      *
-     * @param Manager                    $extensionManager
+     * @param Manager $extensionManager
      * @param PluginRulesActionGenerator $generator
-     * @param StringConverter            $stringConverter
-     * @param Validator                  $validator
-     * @param ChainQueue                 $chainQueue
+     * @param StringConverter $stringConverter
+     * @param Validator $validator
+     * @param ChainQueue $chainQueue
      */
     public function __construct(
-        Manager $extensionManager,
-        PluginRulesActionGenerator $generator,
-        StringConverter $stringConverter,
-        Validator $validator,
-        ChainQueue $chainQueue
+      Manager $extensionManager,
+      PluginRulesActionGenerator $generator,
+      StringConverter $stringConverter,
+      Validator $validator,
+      ChainQueue $chainQueue
     ) {
         $this->extensionManager = $extensionManager;
         $this->generator = $generator;
@@ -84,47 +85,46 @@ public function __construct(
     protected function configure()
     {
         $this
-            ->setName('generate:plugin:rulesaction')
-            ->setDescription($this->trans('commands.generate.plugin.rulesaction.description'))
-            ->setHelp($this->trans('commands.generate.plugin.rulesaction.help'))
-            ->addOption(
-                'module',
-                null,
-                InputOption::VALUE_REQUIRED,
-                $this->trans('commands.common.options.module')
-            )
-            ->addOption(
-                'class',
-                null,
-                InputOption::VALUE_OPTIONAL,
-                $this->trans('commands.generate.plugin.rulesaction.options.class')
-            )
-            ->addOption(
-                'label',
-                null,
-                InputOption::VALUE_OPTIONAL,
-                $this->trans('commands.generate.plugin.rulesaction.options.label')
-            )
-            ->addOption(
-                'plugin-id',
-                null,
-                InputOption::VALUE_OPTIONAL,
-                $this->trans('commands.generate.plugin.rulesaction.options.plugin-id')
-            )
-            ->addOption('type', null, InputOption::VALUE_REQUIRED, $this->trans('commands.generate.plugin.rulesaction.options.type'))
-            ->addOption(
-                'category',
-                null,
-                InputOption::VALUE_OPTIONAL | InputOption::VALUE_IS_ARRAY,
-                $this->trans('commands.generate.plugin.rulesaction.options.category')
-            )
-            ->addOption(
-                'context',
-                null,
-                InputOption::VALUE_OPTIONAL,
-                $this->trans('commands.generate.plugin.rulesaction.options.context')
-            )
-            ->setAliases(['gpra']);
+          ->setName('generate:plugin:rules:action')
+          ->setDescription($this->trans('commands.generate.plugin.rules.action.description'))
+          ->setHelp($this->trans('commands.generate.plugin.rules.action.help'))
+          ->addOption(
+            'module',
+            null,
+            InputOption::VALUE_REQUIRED,
+            $this->trans('commands.common.options.module')
+          )
+          ->addOption(
+            'class',
+            null,
+            InputOption::VALUE_OPTIONAL,
+            $this->trans('commands.generate.plugin.rules.action.options.class')
+          )
+          ->addOption(
+            'label',
+            null,
+            InputOption::VALUE_OPTIONAL,
+            $this->trans('commands.generate.plugin.rules.action.options.label')
+          )
+          ->addOption(
+            'plugin-id',
+            null,
+            InputOption::VALUE_OPTIONAL,
+            $this->trans('commands.generate.plugin.rules.action.options.plugin-id')
+          )
+          ->addOption(
+            'category',
+            null,
+            InputOption::VALUE_OPTIONAL,
+            $this->trans('commands.generate.plugin.rules.action.options.category')
+          )
+          ->addOption(
+            'context',
+            null,
+            InputOption::VALUE_OPTIONAL | InputOption::VALUE_IS_ARRAY,
+            $this->trans('commands.generate.plugin.rules.action.options.context')
+          )
+          ->setAliases(['gpra']);
     }
 
     /**
@@ -137,25 +137,30 @@ protected function execute(InputInterface $input, OutputInterface $output)
             return 1;
         }
 
-        $module = $input->getOption('module');
+        $module = $this->validateModule($input->getOption('module'));
         $class_name = $this->validator->validateClassName($input->getOption('class'));
         $label = $input->getOption('label');
         $plugin_id = $input->getOption('plugin-id');
-        $type = $input->getOption('type');
         $category = $input->getOption('category');
         $context = $input->getOption('context');
+        $noInteraction = $input->getOption('no-interaction');
+
+        // Parse nested data.
+        if ($noInteraction) {
+            $context = $this->explodeInlineArray($context);
+        }
 
         $this->generator->generate([
-            'module' => $module,
-            'class_name' => $class_name,
-            'label' => $label,
-            'plugin_id' => $plugin_id,
-            'category' => $category,
-            'context' => $context,
-            'type' => $type,
+          'module' => $module,
+          'class_name' => $class_name,
+          'label' => $label,
+          'plugin_id' => $plugin_id,
+          'category' => $category,
+          'context' => $context,
         ]);
 
-        $this->chainQueue->addCommand('cache:rebuild', ['cache' => 'discovery']);
+        $this->chainQueue->addCommand('cache:rebuild',
+          ['cache' => 'discovery']);
 
         return 0;
     }
@@ -169,11 +174,11 @@ protected function interact(InputInterface $input, OutputInterface $output)
         $class_name = $input->getOption('class');
         if (!$class_name) {
             $class_name = $this->getIo()->ask(
-                $this->trans('commands.generate.plugin.rulesaction.options.class'),
-                'DefaultAction',
-                function ($class_name) {
-                    return $this->validator->validateClassName($class_name);
-                }
+              $this->trans('commands.generate.plugin.rules.action.options.class'),
+              'DefaultAction',
+              function ($class_name) {
+                  return $this->validator->validateClassName($class_name);
+              }
             );
             $input->setOption('class', $class_name);
         }
@@ -182,8 +187,8 @@ function ($class_name) {
         $label = $input->getOption('label');
         if (!$label) {
             $label = $this->getIo()->ask(
-                $this->trans('commands.generate.plugin.rulesaction.options.label'),
-                $this->stringConverter->camelCaseToHuman($class_name)
+              $this->trans('commands.generate.plugin.rules.action.options.label'),
+              $this->stringConverter->camelCaseToHuman($class_name)
             );
             $input->setOption('label', $label);
         }
@@ -192,40 +197,73 @@ function ($class_name) {
         $plugin_id = $input->getOption('plugin-id');
         if (!$plugin_id) {
             $plugin_id = $this->getIo()->ask(
-                $this->trans('commands.generate.plugin.rulesaction.options.plugin-id'),
-                $this->stringConverter->camelCaseToUnderscore($class_name)
+              $this->trans('commands.generate.plugin.rules.action.options.plugin-id'),
+              $this->stringConverter->camelCaseToUnderscore($class_name)
             );
             $input->setOption('plugin-id', $plugin_id);
         }
 
-        // --type option
-        $type = $input->getOption('type');
-        if (!$type) {
-            $type = $this->getIo()->ask(
-                $this->trans('commands.generate.plugin.rulesaction.options.type'),
-                'user'
-            );
-            $input->setOption('type', $type);
-        }
-
         // --category option
         $category = $input->getOption('category');
         if (!$category) {
             $category = $this->getIo()->ask(
-                $this->trans('commands.generate.plugin.rulesaction.options.category'),
-                $this->stringConverter->camelCaseToUnderscore($class_name)
+              $this->trans('commands.generate.plugin.rules.action.options.category'),
+              $this->stringConverter->camelCaseToUnderscore($class_name)
             );
             $input->setOption('category', $category);
         }
 
         // --context option
         $context = $input->getOption('context');
-        if (!$context) {
-            $context = $this->getIo()->ask(
-                $this->trans('commands.generate.plugin.rulesaction.options.context'),
-                $this->stringConverter->camelCaseToUnderscore($class_name)
-            );
-            $input->setOption('context', $context);
+        if (empty($context)) {
+
+            $context = [];
+            if ($this->getIo()->confirm(
+              $this->trans('commands.generate.plugin.rules.action.questions.context'),
+              true
+            )) {
+                while (true) {
+                    $this->getIo()->newLine();
+
+                    $input_name = $this->getIo()->ask(
+                      $this->trans('commands.generate.plugin.rules.action.questions.context-name')
+                    );
+
+                    $input_type = $this->getIo()->ask(
+                      $this->trans('commands.generate.plugin.rules.action.questions.context-type')
+                    );
+
+                    $input_label = $this->getIo()->ask(
+                      $this->trans('commands.generate.plugin.rules.action.questions.context-label')
+                    );
+
+                    $input_description = $this->getIo()->ask(
+                      $this->trans('commands.generate.plugin.rules.action.questions.context-description')
+                    );
+
+                    array_push(
+                      $context,
+                      [
+                        'name' => $input_name,
+                        'type' => $input_type,
+                        'label' => $input_label,
+                        'description' => $input_description,
+                      ]
+                    );
+
+                    $this->getIo()->newLine();
+                    if (!$this->getIo()->confirm(
+                      $this->trans('commands.generate.plugin.rules.action.questions.another-context'),
+                      true
+                    )) {
+                        break;
+                    }
+                }
+            }
+        } else {
+            $context = $this->explodeInlineArray($context);
         }
+
+        $input->setOption('context', $context);
     }
 }
diff --git a/vendor/drupal/console/src/Command/Generate/PluginRulesConditionCommand.php b/vendor/drupal/console/src/Command/Generate/PluginRulesConditionCommand.php
new file mode 100644
index 0000000000000000000000000000000000000000..c0ecb2360ed36e6415dde0570f12d4c8640a5b32
--- /dev/null
+++ b/vendor/drupal/console/src/Command/Generate/PluginRulesConditionCommand.php
@@ -0,0 +1,269 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Console\Command\Generate\PluginRulesActionCommand.
+ */
+
+namespace Drupal\Console\Command\Generate;
+
+use Drupal\Console\Command\Shared\ArrayInputTrait;
+use Drupal\Console\Command\Shared\ConfirmationTrait;
+use Drupal\Console\Command\Shared\ModuleTrait;
+use Drupal\Console\Core\Command\Command;
+use Drupal\Console\Core\Utils\StringConverter;
+use Drupal\Console\Core\Utils\ChainQueue;
+use Drupal\Console\Extension\Manager;
+use Drupal\Console\Generator\PluginRulesConditionGenerator;
+use Drupal\Console\Utils\Validator;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Output\OutputInterface;
+
+/**
+ * Class PluginRulesConditionCommand
+ *
+ * @package Drupal\Console\Command\Generate
+ */
+class PluginRulesConditionCommand extends Command
+{
+
+    use ArrayInputTrait;
+    use ConfirmationTrait;
+    use ModuleTrait;
+
+    /**
+     * @var Manager
+     */
+    protected $extensionManager;
+
+    /**
+     * @var PluginRulesConditionGenerator
+     */
+    protected $generator;
+
+    /**
+     * @var StringConverter
+     */
+    protected $stringConverter;
+
+    /**
+     * @var Validator
+     */
+    protected $validator;
+
+    /**
+     * @var ChainQueue
+     */
+    protected $chainQueue;
+
+
+    /**
+     * PluginRulesConditionCommand constructor.
+     *
+     * @param Manager $extensionManager
+     * @param PluginRulesConditionGenerator $generator
+     * @param StringConverter $stringConverter
+     * @param Validator $validator
+     * @param ChainQueue $chainQueue
+     */
+    public function __construct(
+      Manager $extensionManager,
+      PluginRulesConditionGenerator $generator,
+      StringConverter $stringConverter,
+      Validator $validator,
+      ChainQueue $chainQueue
+    ) {
+        $this->extensionManager = $extensionManager;
+        $this->generator = $generator;
+        $this->stringConverter = $stringConverter;
+        $this->validator = $validator;
+        $this->chainQueue = $chainQueue;
+        parent::__construct();
+    }
+
+    protected function configure()
+    {
+        $this
+          ->setName('generate:plugin:rules:condition')
+          ->setDescription($this->trans('commands.generate.plugin.rules.condition.description'))
+          ->setHelp($this->trans('commands.generate.plugin.rules.condition.help'))
+          ->addOption(
+            'module',
+            null,
+            InputOption::VALUE_REQUIRED,
+            $this->trans('commands.common.options.module')
+          )
+          ->addOption(
+            'class',
+            null,
+            InputOption::VALUE_OPTIONAL,
+            $this->trans('commands.generate.plugin.rules.condition.options.class')
+          )
+          ->addOption(
+            'label',
+            null,
+            InputOption::VALUE_OPTIONAL,
+            $this->trans('commands.generate.plugin.rules.condition.options.label')
+          )
+          ->addOption(
+            'plugin-id',
+            null,
+            InputOption::VALUE_OPTIONAL,
+            $this->trans('commands.generate.plugin.rules.condition.options.plugin-id')
+          )
+          ->addOption(
+            'category',
+            null,
+            InputOption::VALUE_OPTIONAL,
+            $this->trans('commands.generate.plugin.rules.condition.options.category')
+          )
+          ->addOption(
+            'context',
+            null,
+            InputOption::VALUE_OPTIONAL | InputOption::VALUE_IS_ARRAY,
+            $this->trans('commands.generate.plugin.rules.condition.options.context')
+          )
+          ->setAliases(['gprc']);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function execute(InputInterface $input, OutputInterface $output)
+    {
+        // @see use Drupal\Console\Command\Shared\ConfirmationTrait::confirmOperation
+        if (!$this->confirmOperation()) {
+            return 1;
+        }
+
+        $module = $input->getOption('module');
+        $class_name = $this->validator->validateClassName($input->getOption('class'));
+        $label = $input->getOption('label');
+        $plugin_id = $input->getOption('plugin-id');
+        $category = $input->getOption('category');
+        $context = $input->getOption('context');
+        $noInteraction = $input->getOption('no-interaction');
+
+        // Parse nested data.
+        if ($noInteraction) {
+            $context = $this->explodeInlineArray($context);
+        }
+
+        $this->generator->generate([
+          'module' => $module,
+          'class_name' => $class_name,
+          'label' => $label,
+          'plugin_id' => $plugin_id,
+          'category' => $category,
+          'context' => $context,
+        ]);
+
+        $this->chainQueue->addCommand('cache:rebuild',
+          ['cache' => 'discovery']);
+
+        return 0;
+    }
+
+    protected function interact(InputInterface $input, OutputInterface $output)
+    {
+        // --module option
+        $this->getModuleOption();
+
+        // --class option
+        $class_name = $input->getOption('class');
+        if (!$class_name) {
+            $class_name = $this->getIo()->ask(
+              $this->trans('commands.generate.plugin.rules.condition.options.class'),
+              'DefaultCondition',
+              function ($class_name) {
+                  return $this->validator->validateClassName($class_name);
+              }
+            );
+            $input->setOption('class', $class_name);
+        }
+
+        // --label option
+        $label = $input->getOption('label');
+        if (!$label) {
+            $label = $this->getIo()->ask(
+              $this->trans('commands.generate.plugin.rules.condition.options.label'),
+              $this->stringConverter->camelCaseToHuman($class_name)
+            );
+            $input->setOption('label', $label);
+        }
+
+        // --plugin-id option
+        $plugin_id = $input->getOption('plugin-id');
+        if (!$plugin_id) {
+            $plugin_id = $this->getIo()->ask(
+              $this->trans('commands.generate.plugin.rules.condition.options.plugin-id'),
+              $this->stringConverter->camelCaseToUnderscore($class_name)
+            );
+            $input->setOption('plugin-id', $plugin_id);
+        }
+
+        // --category option
+        $category = $input->getOption('category');
+        if (!$category) {
+            $category = $this->getIo()->ask(
+              $this->trans('commands.generate.plugin.rules.condition.options.category'),
+              $this->stringConverter->camelCaseToUnderscore($class_name)
+            );
+            $input->setOption('category', $category);
+        }
+
+        // --context option
+        $context = $input->getOption('context');
+        if (empty($context)) {
+
+            $context = [];
+            if ($this->getIo()->confirm(
+              $this->trans('commands.generate.plugin.rules.condition.questions.context'),
+              true
+            )) {
+                while (true) {
+                    $this->getIo()->newLine();
+
+                    $input_name = $this->getIo()->ask(
+                      $this->trans('commands.generate.plugin.rules.condition.questions.context-name')
+                    );
+
+                    $input_type = $this->getIo()->ask(
+                      $this->trans('commands.generate.plugin.rules.condition.questions.context-type')
+                    );
+
+                    $input_label = $this->getIo()->ask(
+                      $this->trans('commands.generate.plugin.rules.condition.questions.context-label')
+                    );
+
+                    $input_description = $this->getIo()->ask(
+                      $this->trans('commands.generate.plugin.rules.condition.questions.context-description')
+                    );
+
+                    array_push(
+                      $context,
+                      [
+                        'name' => $input_name,
+                        'type' => $input_type,
+                        'label' => $input_label,
+                        'description' => $input_description,
+                      ]
+                    );
+
+                    $this->getIo()->newLine();
+                    if (!$this->getIo()->confirm(
+                      $this->trans('commands.generate.plugin.rules.condition.questions.another-context'),
+                      true
+                    )) {
+                        break;
+                    }
+                }
+            }
+        } else {
+            $context = $this->explodeInlineArray($context);
+        }
+
+        $input->setOption('context', $context);
+    }
+}
diff --git a/vendor/drupal/console/src/Command/Generate/PluginRulesDataprocessorCommand.php b/vendor/drupal/console/src/Command/Generate/PluginRulesDataprocessorCommand.php
new file mode 100644
index 0000000000000000000000000000000000000000..7a67addb503352357a6c940ffe14896ce5db565e
--- /dev/null
+++ b/vendor/drupal/console/src/Command/Generate/PluginRulesDataprocessorCommand.php
@@ -0,0 +1,182 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Console\Command\Generate\PluginRulesActionCommand.
+ */
+
+namespace Drupal\Console\Command\Generate;
+
+use Drupal\Console\Command\Shared\ConfirmationTrait;
+use Drupal\Console\Command\Shared\ModuleTrait;
+use Drupal\Console\Core\Command\Command;
+use Drupal\Console\Core\Utils\StringConverter;
+use Drupal\Console\Core\Utils\ChainQueue;
+use Drupal\Console\Extension\Manager;
+use Drupal\Console\Generator\PluginRulesDataprocessorGenerator;
+use Drupal\Console\Utils\Validator;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Output\OutputInterface;
+
+/**
+ * Class PluginRulesDataprocessorCommand
+ *
+ * @package Drupal\Console\Command\Generate
+ */
+class PluginRulesDataprocessorCommand extends Command
+{
+
+    use ConfirmationTrait;
+    use ModuleTrait;
+
+    /**
+     * @var Manager
+     */
+    protected $extensionManager;
+
+    /**
+     * @var PluginRulesDataprocessorGenerator
+     */
+    protected $generator;
+
+    /**
+     * @var StringConverter
+     */
+    protected $stringConverter;
+
+    /**
+     * @var Validator
+     */
+    protected $validator;
+
+    /**
+     * @var ChainQueue
+     */
+    protected $chainQueue;
+
+
+    /**
+     * PluginRulesDataprocessorCommand constructor.
+     *
+     * @param Manager $extensionManager
+     * @param PluginRulesDataprocessorGenerator $generator
+     * @param StringConverter $stringConverter
+     * @param Validator $validator
+     * @param ChainQueue $chainQueue
+     */
+    public function __construct(
+      Manager $extensionManager,
+      PluginRulesDataprocessorGenerator $generator,
+      StringConverter $stringConverter,
+      Validator $validator,
+      ChainQueue $chainQueue
+    ) {
+        $this->extensionManager = $extensionManager;
+        $this->generator = $generator;
+        $this->stringConverter = $stringConverter;
+        $this->validator = $validator;
+        $this->chainQueue = $chainQueue;
+        parent::__construct();
+    }
+
+    protected function configure()
+    {
+        $this
+          ->setName('generate:plugin:rules:dataprocessor')
+          ->setDescription($this->trans('commands.generate.plugin.rules.dataprocessor.description'))
+          ->setHelp($this->trans('commands.generate.plugin.rules.dataprocessor.help'))
+          ->addOption(
+            'module',
+            null,
+            InputOption::VALUE_REQUIRED,
+            $this->trans('commands.common.options.module')
+          )
+          ->addOption(
+            'class',
+            null,
+            InputOption::VALUE_OPTIONAL,
+            $this->trans('commands.generate.plugin.rules.dataprocessor.options.class')
+          )
+          ->addOption(
+            'label',
+            null,
+            InputOption::VALUE_OPTIONAL,
+            $this->trans('commands.generate.plugin.rules.dataprocessor.options.label')
+          )
+          ->addOption(
+            'plugin-id',
+            null,
+            InputOption::VALUE_OPTIONAL,
+            $this->trans('commands.generate.plugin.rules.dataprocessor.options.plugin-id')
+          )
+          ->setAliases(['gprd']);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function execute(InputInterface $input, OutputInterface $output)
+    {
+        // @see use Drupal\Console\Command\Shared\ConfirmationTrait::confirmOperation
+        if (!$this->confirmOperation()) {
+            return 1;
+        }
+
+        $module = $input->getOption('module');
+        $class_name = $this->validator->validateClassName($input->getOption('class'));
+        $label = $input->getOption('label');
+        $plugin_id = $input->getOption('plugin-id');
+
+        $this->generator->generate([
+          'module' => $module,
+          'class_name' => $class_name,
+          'label' => $label,
+          'plugin_id' => $plugin_id,
+        ]);
+
+        $this->chainQueue->addCommand('cache:rebuild',
+          ['cache' => 'discovery']);
+
+        return 0;
+    }
+
+    protected function interact(InputInterface $input, OutputInterface $output)
+    {
+        // --module option
+        $this->getModuleOption();
+
+        // --class option
+        $class_name = $input->getOption('class');
+        if (!$class_name) {
+            $class_name = $this->getIo()->ask(
+              $this->trans('commands.generate.plugin.rules.dataprocessor.options.class'),
+              'DefaultDataprocessor',
+              function ($class_name) {
+                  return $this->validator->validateClassName($class_name);
+              }
+            );
+            $input->setOption('class', $class_name);
+        }
+
+        // --label option
+        $label = $input->getOption('label');
+        if (!$label) {
+            $label = $this->getIo()->ask(
+              $this->trans('commands.generate.plugin.rules.dataprocessor.options.label'),
+              $this->stringConverter->camelCaseToHuman($class_name)
+            );
+            $input->setOption('label', $label);
+        }
+
+        // --plugin-id option
+        $plugin_id = $input->getOption('plugin-id');
+        if (!$plugin_id) {
+            $plugin_id = $this->getIo()->ask(
+              $this->trans('commands.generate.plugin.rules.dataprocessor.options.plugin-id'),
+              $this->stringConverter->camelCaseToUnderscore($class_name)
+            );
+            $input->setOption('plugin-id', $plugin_id);
+        }
+    }
+}
\ No newline at end of file
diff --git a/vendor/drupal/console/src/Command/Generate/PluginSkeletonCommand.php b/vendor/drupal/console/src/Command/Generate/PluginSkeletonCommand.php
index 30f84b631d0b53339cbb6cb55a37bfcac5f35f6c..2a77ca0bf6b13e19d48fb6965ee907ef1edbcc2b 100644
--- a/vendor/drupal/console/src/Command/Generate/PluginSkeletonCommand.php
+++ b/vendor/drupal/console/src/Command/Generate/PluginSkeletonCommand.php
@@ -7,18 +7,18 @@
 
 namespace Drupal\Console\Command\Generate;
 
-use Drupal\Console\Generator\PluginSkeletonGenerator;
-use Symfony\Component\Console\Input\InputInterface;
-use Symfony\Component\Console\Input\InputOption;
-use Symfony\Component\Console\Output\OutputInterface;
-use Drupal\Console\Core\Command\ContainerAwareCommand;
 use Drupal\Console\Command\Shared\ModuleTrait;
 use Drupal\Console\Command\Shared\ConfirmationTrait;
 use Drupal\Console\Command\Shared\ServicesTrait;
-use Drupal\Console\Extension\Manager;
+use Drupal\Console\Core\Command\ContainerAwareCommand;
 use Drupal\Console\Core\Utils\StringConverter;
 use Drupal\Console\Core\Utils\ChainQueue;
+use Drupal\Console\Extension\Manager;
+use Drupal\Console\Generator\PluginSkeletonGenerator;
 use Drupal\Console\Utils\Validator;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Output\OutputInterface;
 
 /**
  * Class PluginSkeletonCommand
@@ -133,7 +133,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
             return 1;
         }
 
-        $module = $input->getOption('module');
+        $module = $this->validateModule($input->getOption('module'));
 
         $pluginId = $input->getOption('plugin-id');
         $plugin = ucfirst($this->stringConverter->underscoreToCamelCase($pluginId));
@@ -174,6 +174,8 @@ protected function execute(InputInterface $input, OutputInterface $output)
             'class_name' => $className,
             'services' => $buildServices,
             'plugin_metadata' => $pluginMetaData,
+            'id' => $this->stringConverter->camelCaseToUnderscore($className),
+            'label' => $this->stringConverter->camelCaseToHuman($className)
         ]);
 
         $this->chainQueue->addCommand('cache:rebuild', ['cache' => 'discovery']);
diff --git a/vendor/drupal/console/src/Command/Generate/PluginTypeAnnotationCommand.php b/vendor/drupal/console/src/Command/Generate/PluginTypeAnnotationCommand.php
index 1aa16041c513cc4423bc278ab69bfc9ae194caed..cd582cc69eaabaea222d5bb4312341e2e8fffe3e 100644
--- a/vendor/drupal/console/src/Command/Generate/PluginTypeAnnotationCommand.php
+++ b/vendor/drupal/console/src/Command/Generate/PluginTypeAnnotationCommand.php
@@ -12,7 +12,6 @@
 use Symfony\Component\Console\Input\InputInterface;
 use Symfony\Component\Console\Input\InputOption;
 use Symfony\Component\Console\Output\OutputInterface;
-use Drupal\Console\Command\Shared\ServicesTrait;
 use Drupal\Console\Command\Shared\ModuleTrait;
 use Drupal\Console\Core\Command\Command;
 use Drupal\Console\Extension\Manager;
@@ -25,7 +24,6 @@
  */
 class PluginTypeAnnotationCommand extends Command
 {
-    use ServicesTrait;
     use ModuleTrait;
 
     /**
@@ -107,7 +105,7 @@ protected function configure()
      */
     protected function execute(InputInterface $input, OutputInterface $output)
     {
-        $module = $input->getOption('module');
+        $module = $this->validateModule($input->getOption('module'));
         $class_name = $this->validator->validateClassName($input->getOption('class'));
         $machine_name = $input->getOption('machine-name');
         $label = $input->getOption('label');
diff --git a/vendor/drupal/console/src/Command/Generate/PluginTypeYamlCommand.php b/vendor/drupal/console/src/Command/Generate/PluginTypeYamlCommand.php
index a7ef0a067c4d74c5e30a41486e94b6db243aeffd..41fdf992e8e9e0fa054b8fe0ced1a876ae9372dc 100644
--- a/vendor/drupal/console/src/Command/Generate/PluginTypeYamlCommand.php
+++ b/vendor/drupal/console/src/Command/Generate/PluginTypeYamlCommand.php
@@ -12,7 +12,6 @@
 use Symfony\Component\Console\Input\InputInterface;
 use Symfony\Component\Console\Input\InputOption;
 use Symfony\Component\Console\Output\OutputInterface;
-use Drupal\Console\Command\Shared\ServicesTrait;
 use Drupal\Console\Command\Shared\ModuleTrait;
 use Drupal\Console\Core\Command\Command;
 use Drupal\Console\Extension\Manager;
@@ -25,7 +24,6 @@
  */
 class PluginTypeYamlCommand extends Command
 {
-    use ServicesTrait;
     use ModuleTrait;
 
     /**
@@ -107,7 +105,7 @@ protected function configure()
      */
     protected function execute(InputInterface $input, OutputInterface $output)
     {
-        $module = $input->getOption('module');
+        $module = $this->validateModule($input->getOption('module'));
         $class_name = $this->validator->validateClassName($input->getOption('class'));
         $plugin_name = $input->getOption('plugin-name');
         $plugin_file_name = $input->getOption('plugin-file-name');
diff --git a/vendor/drupal/console/src/Command/Generate/PluginValidationConstraintCommand.php b/vendor/drupal/console/src/Command/Generate/PluginValidationConstraintCommand.php
new file mode 100644
index 0000000000000000000000000000000000000000..63df5fc10ae66f7aa592121c3eef593a74733d83
--- /dev/null
+++ b/vendor/drupal/console/src/Command/Generate/PluginValidationConstraintCommand.php
@@ -0,0 +1,221 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Console\Command\Generate\PluginValidationConstraintCommand.
+ */
+
+namespace Drupal\Console\Command\Generate;
+
+use Drupal\Console\Utils\Validator;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Output\OutputInterface;
+use Drupal\Console\Generator\PluginValidationConstraintGenerator;
+use Drupal\Console\Command\Shared\ModuleTrait;
+use Drupal\Console\Command\Shared\ConfirmationTrait;
+use Drupal\Console\Core\Command\Command;
+use Drupal\Console\Extension\Manager;
+use Drupal\Console\Core\Utils\StringConverter;
+use Drupal\Console\Core\Utils\ChainQueue;
+
+/**
+ * Class PluginValidationConstraintCommand
+ *
+ * @package Drupal\Console\Command\Generate
+ */
+class PluginValidationConstraintCommand extends Command
+{
+    use ModuleTrait;
+    use ConfirmationTrait;
+
+    /**
+     * @var Manager
+     */
+    protected $extensionManager;
+
+    /**
+     * @var PluginValidationConstraintGenerator
+     */
+    protected $generator;
+
+    /**
+     * @var StringConverter
+     */
+    protected $stringConverter;
+
+    /**
+     * @var Validator
+     */
+    protected $validator;
+
+    /**
+     * @var ChainQueue
+     */
+    protected $chainQueue;
+
+
+    /**
+     * PluginValidationConstraintCommand constructor.
+     *
+     * @param Manager                             $extensionManager
+     * @param PluginValidationConstraintGenerator $generator
+     * @param StringConverter                     $stringConverter
+     * @param Validator                           $validator
+     * @param ChainQueue                          $chainQueue
+     */
+    public function __construct(
+        Manager $extensionManager,
+        PluginValidationConstraintGenerator $generator,
+        StringConverter $stringConverter,
+        Validator $validator,
+        ChainQueue $chainQueue
+    ) {
+        $this->extensionManager = $extensionManager;
+        $this->generator = $generator;
+        $this->stringConverter = $stringConverter;
+        $this->validator = $validator;
+        $this->chainQueue = $chainQueue;
+        parent::__construct();
+    }
+
+    protected function configure()
+    {
+        $this
+            ->setName('generate:plugin:validationconstraint')
+            ->setDescription($this->trans('commands.generate.plugin.validationconstraint.description'))
+            ->setHelp($this->trans('commands.generate.plugin.validationconstraint.help'))
+            ->addOption(
+                'module',
+                null,
+                InputOption::VALUE_REQUIRED,
+                $this->trans('commands.common.options.module')
+            )
+            ->addOption(
+                'class',
+                null,
+                InputOption::VALUE_REQUIRED,
+                $this->trans('commands.generate.plugin.validationconstraint.options.class')
+            )
+            ->addOption(
+                'label',
+                null,
+                InputOption::VALUE_OPTIONAL,
+                $this->trans('commands.generate.plugin.validationconstraint.options.label')
+            )
+            ->addOption(
+                'plugin-id',
+                null,
+                InputOption::VALUE_OPTIONAL,
+                $this->trans('commands.generate.plugin.validationconstraint.options.plugin-id')
+            )
+            ->addOption(
+                'hook',
+                null,
+                InputOption::VALUE_OPTIONAL,
+                $this->trans('commands.generate.plugin.validationconstraint.options.hook')
+            )
+            ->addOption(
+                'field-id',
+                null,
+                InputOption::VALUE_OPTIONAL,
+                $this->trans('commands.generate.plugin.validationconstraint.options.field-id')
+            )
+            ->addOption(
+                'bundle',
+                null,
+                InputOption::VALUE_OPTIONAL,
+                $this->trans('commands.generate.plugin.validationconstraint.options.bundle')
+            )
+            ->setAliases(['gpvc']);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function execute(InputInterface $input, OutputInterface $output)
+    {
+        // @see use Drupal\Console\Command\Shared\ConfirmationTrait::confirmOperation
+        if (!$this->confirmOperation()) {
+            return 1;
+        }
+
+        $module = $input->getOption('module');
+        $className = $this->validator->validateClassName($input->getOption('class'));
+        $label = $input->getOption('label');
+        $pluginId = $input->getOption('plugin-id');
+        $hook = $input->getOption('hook');
+        $fieldId = $input->getOption('field-id');
+        $bundle = $input->getOption('bundle');
+
+        $this->generator->generate([
+            'module' => $module,
+            'class_name' => $className,
+            'label' => $label,
+            'plugin_id' => $pluginId,
+            'field_id' => $fieldId,
+            'hook' => $hook,
+            'bundle' => $bundle,
+        ]);
+
+        $this->chainQueue->addCommand('cache:rebuild', ['cache' => 'discovery']);
+
+        return 0;
+    }
+
+    protected function interact(InputInterface $input, OutputInterface $output)
+    {
+        // --module option
+        $this->getModuleOption();
+
+        // --class option
+        $className = $input->getOption('class');
+        if (!$className) {
+            $className = $this->getIo()->ask(
+                $this->trans('commands.generate.plugin.validationconstraint.questions.class'),
+                'ExampleConstraint',
+                function ($className) {
+                    return $this->validator->validateClassName($className);
+                }
+            );
+            $input->setOption('class', $className);
+        }
+
+        // --plugin label option
+        $label = $input->getOption('label');
+        if (!$label) {
+            $label = $this->getIo()->ask(
+                $this->trans('commands.generate.plugin.validationconstraint.questions.label'),
+                $this->stringConverter->camelCaseToHuman($className)
+            );
+            $input->setOption('label', $label);
+        }
+
+        // --plugin-id option
+        $pluginId = $input->getOption('plugin-id');
+        if (!$pluginId) {
+            $pluginId = $this->getIo()->ask(
+                $this->trans('commands.generate.plugin.validationconstraint.questions.plugin-id'),
+                $this->stringConverter->camelCaseToUnderscore($className)
+            );
+            $input->setOption('plugin-id', $pluginId);
+        }
+
+        $hook = $this->getIo()->confirm(
+          $this->trans('commands.generate.plugin.validationconstraint.questions.hook'),
+          false
+        );
+        if (!empty($hook)) {
+            $fieldId = $this->getIo()->ask(
+              $this->trans('commands.generate.plugin.validationconstraint.questions.field-id')
+            );
+            $input->setOption('field-id', $fieldId);
+
+            $bundle = $this->getIo()->ask(
+              $this->trans('commands.generate.plugin.validationconstraint.questions.bundle')
+            );
+            $input->setOption('bundle', $bundle);
+        }
+        $input->setOption('hook', $hook);
+    }
+}
diff --git a/vendor/drupal/console/src/Command/Generate/PluginViewsFieldCommand.php b/vendor/drupal/console/src/Command/Generate/PluginViewsFieldCommand.php
index 7fdadeb60edd6a1c8d9cab965c84e36af9ccd287..1af19256abd0c8c05b78824e9287345e08cec75d 100644
--- a/vendor/drupal/console/src/Command/Generate/PluginViewsFieldCommand.php
+++ b/vendor/drupal/console/src/Command/Generate/PluginViewsFieldCommand.php
@@ -7,18 +7,19 @@
 
 namespace Drupal\Console\Command\Generate;
 
-use Drupal\Console\Utils\Validator;
-use Symfony\Component\Console\Input\InputInterface;
-use Symfony\Component\Console\Input\InputOption;
-use Symfony\Component\Console\Output\OutputInterface;
-use Drupal\Console\Generator\PluginViewsFieldGenerator;
+use Drupal\Console\Core\Command\Command;
+use Drupal\Console\Core\Utils\StringConverter;
+use Drupal\Console\Core\Utils\ChainQueue;
+use Drupal\Console\Command\Shared\ArrayInputTrait;
 use Drupal\Console\Command\Shared\ModuleTrait;
 use Drupal\Console\Command\Shared\ConfirmationTrait;
-use Drupal\Console\Core\Command\Command;
+use Drupal\Console\Generator\PluginViewsFieldGenerator;
 use Drupal\Console\Extension\Manager;
-use Drupal\Console\Core\Utils\ChainQueue;
 use Drupal\Console\Utils\Site;
-use Drupal\Console\Core\Utils\StringConverter;
+use Drupal\Console\Utils\Validator;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Output\OutputInterface;
 
 /**
  * Class PluginViewsFieldCommand
@@ -27,8 +28,9 @@
  */
 class PluginViewsFieldCommand extends Command
 {
-    use ModuleTrait;
+    use ArrayInputTrait;
     use ConfirmationTrait;
+    use ModuleTrait;
 
     /**
      * @var Manager
@@ -63,12 +65,12 @@ class PluginViewsFieldCommand extends Command
     /**
      * PluginViewsFieldCommand constructor.
      *
-     * @param Manager                   $extensionManager
+     * @param Manager $extensionManager
      * @param PluginViewsFieldGenerator $generator
-     * @param Site                      $site
-     * @param StringConverter           $stringConverter
-     * @param Validator                 $validator
-     * @param ChainQueue                $chainQueue
+     * @param Site $site
+     * @param StringConverter $stringConverter
+     * @param Validator $validator
+     * @param ChainQueue $chainQueue
      */
     public function __construct(
         Manager $extensionManager,
@@ -100,22 +102,10 @@ protected function configure()
                 $this->trans('commands.common.options.module')
             )
             ->addOption(
-                'class',
+                'fields',
                 null,
-                InputOption::VALUE_REQUIRED,
-                $this->trans('commands.generate.plugin.views.field.options.class')
-            )
-            ->addOption(
-                'title',
-                null,
-                InputOption::VALUE_OPTIONAL,
-                $this->trans('commands.generate.plugin.views.field.options.title')
-            )
-            ->addOption(
-                'description',
-                null,
-                InputOption::VALUE_OPTIONAL,
-                $this->trans('commands.generate.plugin.views.field.options.description')
+                InputOption::VALUE_OPTIONAL | InputOption::VALUE_IS_ARRAY,
+                $this->trans('commands.generate.plugin.views.field.options.fields')
             )
             ->setAliases(['gpvf']);
     }
@@ -130,18 +120,29 @@ protected function execute(InputInterface $input, OutputInterface $output)
             return 1;
         }
 
-        $module = $input->getOption('module');
-        $class_name = $this->validator->validateClassName($input->getOption('class'));
-        $class_machine_name = $this->stringConverter->camelCaseToUnderscore($class_name);
-        $title = $input->getOption('title');
-        $description = $input->getOption('description');
+        $module = $this->validateModule($input->getOption('module'));
+        $fields = $input->getOption('fields');
+        $noInteraction = $input->getOption('no-interaction');
+
+        // Parse nested data.
+        if ($noInteraction) {
+            $fields = $this->explodeInlineArray($fields);
+        }
+
+        $function = $module . '_views_data';
+        $viewsFile = $module . '.views.inc';
+        if ($this->extensionManager->validateModuleFunctionExist($module, $function, $viewsFile)) {
+            $this->getIo()->warning(
+                sprintf(
+                    $this->trans('commands.generate.plugin.views.field.messages.views-data-already-implemented'),
+                    $module
+                )
+            );
+        }
 
         $this->generator->generate([
             'module' => $module,
-            'class_machine_name' => $class_machine_name,
-            'class_name' => $class_name,
-            'title' => $title,
-            'description' => $description,
+            'fields' => $fields,
         ]);
 
         $this->chainQueue->addCommand('cache:rebuild', ['cache' => 'discovery']);
@@ -154,37 +155,52 @@ protected function interact(InputInterface $input, OutputInterface $output)
         // --module option
         $this->getModuleOption();
 
-        // --class option
-        $class_name = $input->getOption('class');
-        if (!$class_name) {
-            $class_name = $this->getIo()->ask(
-                $this->trans('commands.generate.plugin.views.field.questions.class'),
-                'CustomViewsField',
-                function ($class_name) {
-                    return $this->validator->validateClassName($class_name);
+        // --fields option
+        $fields = $input->getOption('fields');
+        if (empty($fields)) {
+            while (true) {
+                // --class option
+                $class_name = $this->getIo()->ask(
+                    $this->trans('commands.generate.plugin.views.field.questions.class'),
+                    'CustomViewsField',
+                    function ($class_name) {
+                        return $this->validator->validateClassName($class_name);
+                    }
+                );
+
+                // --title option
+                $title = $this->getIo()->ask(
+                    $this->trans('commands.generate.plugin.views.field.questions.title'),
+                    $this->stringConverter->camelCaseToHuman($class_name)
+                );
+
+                // --description option
+                $description = $this->getIo()->ask(
+                    $this->trans('commands.generate.plugin.views.field.questions.description'),
+                    $this->trans('commands.generate.plugin.views.field.questions.description_default')
+                );
+
+                array_push(
+                    $fields,
+                    [
+                        'title' => $title,
+                        'description' => $description,
+                        'class_name' => $class_name,
+                        'class_machine_name' => $this->stringConverter->camelCaseToUnderscore($class_name),
+                    ]
+                );
+
+                if (!$this->getIo()->confirm(
+                    $this->trans('commands.generate.plugin.views.field.questions.field-add'),
+                    true
+                )
+                ) {
+                    break;
                 }
-            );
-        }
-        $input->setOption('class', $class_name);
-
-        // --title option
-        $title = $input->getOption('title');
-        if (!$title) {
-            $title = $this->getIo()->ask(
-                $this->trans('commands.generate.plugin.views.field.questions.title'),
-                $this->stringConverter->camelCaseToHuman($class_name)
-            );
-            $input->setOption('title', $title);
-        }
-
-        // --description option
-        $description = $input->getOption('description');
-        if (!$description) {
-            $description = $this->getIo()->ask(
-                $this->trans('commands.generate.plugin.views.field.questions.description'),
-                $this->trans('commands.generate.plugin.views.field.questions.description_default')
-            );
-            $input->setOption('description', $description);
+            }
+        } else {
+            $fields = $this->explodeInlineArray($fields);
         }
+        $input->setOption('fields', $fields);
     }
 }
diff --git a/vendor/drupal/console/src/Command/Generate/PostUpdateCommand.php b/vendor/drupal/console/src/Command/Generate/PostUpdateCommand.php
index c58e970216d4eb53a06cce516b5578b43934049f..98a57db97c2ab3a501846777b93213f962f227e3 100644
--- a/vendor/drupal/console/src/Command/Generate/PostUpdateCommand.php
+++ b/vendor/drupal/console/src/Command/Generate/PostUpdateCommand.php
@@ -108,7 +108,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
             return 1;
         }
 
-        $module = $input->getOption('module');
+        $module = $this->validateModule($input->getOption('module'));
         $postUpdateName = $input->getOption('post-update-name');
 
         $this->validatePostUpdateName($module, $postUpdateName);
diff --git a/vendor/drupal/console/src/Command/Generate/RouteSubscriberCommand.php b/vendor/drupal/console/src/Command/Generate/RouteSubscriberCommand.php
index 1ca175b11c1c6c3feaa935bfaf11cf2a1dd5a4c9..2d17d25aaf8529adefbc986ab062736cebbf8157 100644
--- a/vendor/drupal/console/src/Command/Generate/RouteSubscriberCommand.php
+++ b/vendor/drupal/console/src/Command/Generate/RouteSubscriberCommand.php
@@ -108,7 +108,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
             return 1;
         }
 
-        $module = $input->getOption('module');
+        $module = $this->validateModule($input->getOption('module'));
         $name = $input->getOption('name');
         $class = $this->validator->validateClassName($input->getOption('class'));
 
diff --git a/vendor/drupal/console/src/Command/Generate/ServiceCommand.php b/vendor/drupal/console/src/Command/Generate/ServiceCommand.php
index 3e387da35c74aeb637daf7beef9670480eccf7c3..1b614803b265ca1a78bb9d8a549739380ce8fd4a 100644
--- a/vendor/drupal/console/src/Command/Generate/ServiceCommand.php
+++ b/vendor/drupal/console/src/Command/Generate/ServiceCommand.php
@@ -120,6 +120,12 @@ protected function configure()
                 InputOption::VALUE_OPTIONAL,
                 $this->trans('commands.generate.service.options.interface-name')
             )
+            ->addOption(
+                'logger-channel',
+                null,
+                InputOption::VALUE_NONE,
+                $this->trans('commands.generate.service.options.logger-channel')
+            )
             ->addOption(
                 'services',
                 null,
@@ -145,11 +151,12 @@ protected function execute(InputInterface $input, OutputInterface $output)
             return 1;
         }
 
-        $module = $input->getOption('module');
+        $module = $this->validateModule($input->getOption('module'));
         $name = $input->getOption('name');
         $class = $this->validator->validateClassName($input->getOption('class'));
         $interface = $input->getOption('interface');
         $interface_name = $input->getOption('interface-name');
+        $logger_channel = $input->getOption('logger-channel');
         $services = $input->getOption('services');
         $path_service = $input->getOption('path-service');
 
@@ -171,6 +178,8 @@ protected function execute(InputInterface $input, OutputInterface $output)
             'name' => $name,
             'class' => $class,
             'interface' => $interface,
+            'interface_name' => $interface_name,
+            'logger_channel' => $logger_channel,
             'services' => $build_services,
             'path_service' => $path_service,
         ]);
@@ -230,6 +239,16 @@ function ($class) {
             $input->setOption('interface-name', $interface_name);
         }
 
+        // --logger-channel option
+        $logger_channel = $input->getOption('logger-channel');
+        if (!$logger_channel) {
+          $logger_channel = $this->getIo()->confirm(
+            $this->trans('commands.generate.service.questions.logger-channel'),
+            true
+          );
+          $input->setOption('logger-channel', $logger_channel);
+        }
+
         // --services option
         $services = $input->getOption('services');
         if (!$services) {
diff --git a/vendor/drupal/console/src/Command/Generate/ThemeCommand.php b/vendor/drupal/console/src/Command/Generate/ThemeCommand.php
index e6fc77b4034ac1d7df12acabce8f44abae83b1f3..3d003550dd56eeee4f13d30bb781ac8ba6402d58 100644
--- a/vendor/drupal/console/src/Command/Generate/ThemeCommand.php
+++ b/vendor/drupal/console/src/Command/Generate/ThemeCommand.php
@@ -159,6 +159,12 @@ protected function configure()
                 InputOption::VALUE_OPTIONAL,
                 $this->trans('commands.generate.theme.options.base-theme')
             )
+            ->addOption(
+                'base-theme-regions',
+                null,
+                InputOption::VALUE_NONE,
+                $this->trans('commands.generate.theme.options.base-theme-regions')
+            )
             ->addOption(
                 'regions',
                 null,
@@ -188,15 +194,23 @@ protected function execute(InputInterface $input, OutputInterface $output)
         // Get the profile path and define a profile path if it is null
         // Check that it is an absolute path or otherwise create an absolute path using appRoot
         $theme_path = $input->getOption('theme-path');
-        $theme_path = $theme_path == null ? 'themes/custom' : $theme_path;
+        if(is_null($theme_path)) {
+            $uri = $this->site->getMultisiteName($input);
+            $defaultThemePath = 'themes/custom';
+            $theme_path = $this->site->multisiteMode($uri)? 'sites/'.$this->site->getMultisiteDir($uri).'/'.$defaultThemePath : $defaultThemePath;
+        }
         $theme_path = Path::isAbsolute($theme_path) ? $theme_path : Path::makeAbsolute($theme_path, $this->appRoot);
         $theme_path = $this->validator->validateModulePath($theme_path, true);
 
-        $machine_name = $this->validator->validateMachineName($input->getOption('machine-name'));
+        $machine_name = $input->getOption('machine-name') ?
+            $this->validator->validateMachineName($input->getOption('machine-name'))
+            :$this->stringConverter->createMachineName($theme);
+
         $description = $input->getOption('description');
         $core = $input->getOption('core');
         $package = $input->getOption('package');
         $base_theme = $input->getOption('base-theme');
+        $base_theme_regions = $input->getOption('base-theme-regions');
         $global_library = $input->getOption('global-library');
         $libraries = $input->getOption('libraries');
         $regions = $input->getOption('regions');
@@ -210,6 +224,8 @@ protected function execute(InputInterface $input, OutputInterface $output)
             $breakpoints = $this->explodeInlineArray($breakpoints);
         }
 
+        $base_theme_path = $this->extensionManager->getTheme($base_theme);
+
         $this->generator->generate([
             'theme' => $theme,
             'machine_name' => $machine_name,
@@ -218,6 +234,8 @@ protected function execute(InputInterface $input, OutputInterface $output)
             'description' => $description,
             'package' => $package,
             'base_theme' => $base_theme,
+            'base_theme_path' => is_null($base_theme_path) ? false : $base_theme_path->getRealPath(),
+            'base_theme_regions' => $base_theme_regions,
             'global_library' => $global_library,
             'libraries' => $libraries,
             'regions' => $regions,
@@ -242,12 +260,11 @@ protected function interact(InputInterface $input, OutputInterface $output)
         }
 
         if (!$theme) {
-            $validators = $this->validator;
             $theme = $this->getIo()->ask(
                 $this->trans('commands.generate.theme.questions.theme'),
                 '',
-                function ($theme) use ($validators) {
-                    return $validators->validateModuleName($theme);
+                function ($theme) {
+                    return $this->validator->validateModuleName($theme);
                 }
             );
             $input->setOption('theme', $theme);
@@ -265,8 +282,8 @@ function ($theme) use ($validators) {
             $machine_name = $this->getIo()->ask(
                 $this->trans('commands.generate.theme.questions.machine-name'),
                 $this->stringConverter->createMachineName($theme),
-                function ($machine_name) use ($validators) {
-                    return $validators->validateMachineName($machine_name);
+                function ($machine_name) {
+                    return $this->validator->validateMachineName($machine_name);
                 }
             );
             $input->setOption('machine-name', $machine_name);
@@ -274,10 +291,12 @@ function ($machine_name) use ($validators) {
 
         $theme_path = $input->getOption('theme-path');
         if (!$theme_path) {
+            $uri = $this->site->getMultisiteName($input);
+            $defaultThemePath = 'themes/custom';
             $theme_path = $this->getIo()->ask(
                 $this->trans('commands.generate.theme.questions.theme-path'),
-                'themes/custom',
-                function ($theme_path) use ($machine_name) {
+                $this->site->multisiteMode($uri)? 'sites/'.$this->site->getMultisiteDir($uri).'/'.$defaultThemePath : $defaultThemePath,
+                 function ($theme_path) use ($machine_name) {
                     $fullPath = Path::isAbsolute($theme_path) ? $theme_path : Path::makeAbsolute($theme_path, $this->appRoot);
                     $fullPath = $fullPath.'/'.$machine_name;
                     if (file_exists($fullPath)) {
diff --git a/vendor/drupal/console/src/Command/Generate/ThemeSettingCommand.php b/vendor/drupal/console/src/Command/Generate/ThemeSettingCommand.php
new file mode 100644
index 0000000000000000000000000000000000000000..0cd4957cc4ffb6d5ebb95df57babd2c5c3b48b98
--- /dev/null
+++ b/vendor/drupal/console/src/Command/Generate/ThemeSettingCommand.php
@@ -0,0 +1,312 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Console\Command\Generate\ThemeSettingCommand.
+ */
+
+namespace Drupal\Console\Command\Generate;
+
+use Drupal\Console\Command\Shared\ArrayInputTrait;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Output\OutputInterface;
+use Drupal\Console\Generator\ThemeSettingGenerator;
+use Drupal\Console\Command\Shared\ConfirmationTrait;
+use Drupal\Console\Core\Command\Command;
+use Drupal\Console\Extension\Manager;
+use Drupal\Console\Utils\Site;
+use Drupal\Console\Core\Utils\StringConverter;
+use Drupal\Console\Utils\Validator;
+use Drupal\Core\Extension\ThemeHandler;
+use Webmozart\PathUtil\Path;
+use Drupal\Console\Command\Shared\ThemeTrait;
+use Symfony\Component\Filesystem\Filesystem;
+use Drupal\Console\Core\Style\DrupalStyle;
+
+
+/**
+ * Class ThemeSettingCommand
+ *
+ * @package Drupal\Console\Command\Generate
+ */
+class ThemeSettingCommand extends Command
+{
+    use ConfirmationTrait;
+    use ArrayInputTrait;
+    use ThemeTrait;
+
+    /**
+     * @var Manager
+    */
+    protected $extensionManager;
+
+    /**
+     * @var ThemeSettingGenerator
+    */
+    protected $generator;
+
+    /**
+    * @var Validator
+    */
+    protected $validator;
+
+    /**
+     * @var string
+     */
+    protected $appRoot;
+
+    /**
+     * @var ThemeHandler
+     */
+    protected $themeHandler;
+
+    /**
+     * @var Site
+     */
+    protected $site;
+
+    /**
+     * @var StringConverter
+     */
+    protected $stringConverter;
+
+    /**
+     * ThemeSettingCommand constructor.
+     *
+     * @param Manager                $extensionManager
+     * @param ThemeSettingGenerator         $generator
+     * @param Validator              $validator
+     * @param $appRoot
+     * @param ThemeHandler           $themeHandler
+     * @param Site                   $site
+     * @param StringConverter        $stringConverter
+     */
+    public function __construct(
+        Manager $extensionManager,
+        ThemeSettingGenerator $generator,
+        Validator $validator,
+        $appRoot,
+        ThemeHandler $themeHandler,
+        Site $site,
+        StringConverter $stringConverter
+    ) {
+        $this->extensionManager = $extensionManager;
+        $this->generator = $generator;
+        $this->validator = $validator;
+        $this->appRoot = $appRoot;
+        $this->themeHandler = $themeHandler;
+        $this->site = $site;
+        $this->stringConverter = $stringConverter;
+        parent::__construct();
+    }
+
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function configure()
+    {
+        $this
+            ->setName('generate:theme:setting')
+            ->setDescription($this->trans('commands.generate.theme.setting.description'))
+            ->setHelp($this->trans('commands.generate.theme.setting.help'))
+            ->addOption(
+                'theme',
+                null,
+                InputOption::VALUE_REQUIRED,
+                $this->trans('commands.generate.theme.setting.options.theme')
+            )
+            ->addOption(
+                'theme-path',
+                null,
+                InputOption::VALUE_REQUIRED,
+                $this->trans('commands.generate.theme.setting.options.theme-path')
+            )
+            ->addOption(
+                'favicon',
+                null,
+                InputOption::VALUE_OPTIONAL,
+                $this->trans('commands.generate.theme.setting.options.favicon')
+            )
+            ->addOption(
+                'comment-user-picture',
+                null,
+                InputOption::VALUE_OPTIONAL,
+                $this->trans('commands.generate.theme.setting.options.comment-user-picture')
+            )
+            ->addOption(
+                'comment-user-verification',
+                null,
+                InputOption::VALUE_OPTIONAL,
+                $this->trans('commands.generate.theme.setting.options.comment-user-verification')
+            )
+            ->addOption(
+                'node-user-picture',
+                null,
+                InputOption::VALUE_OPTIONAL,
+                $this->trans('commands.generate.theme.setting.options.node-user-picture')
+            )
+            ->addOption(
+                'logo',
+                null,
+                InputOption::VALUE_OPTIONAL,
+                $this->trans('commands.generate.theme.setting.options.logo')
+            )
+            ->addOption(
+                'merge-existing-file',
+                null,
+                InputOption::VALUE_OPTIONAL,
+                $this->trans('commands.generate.theme.setting.options.merge-existing-file')
+            )
+            ->setAliases(['gts']);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function execute(InputInterface $input, OutputInterface $output)
+    {
+        $theme = $this->validator->validateModuleName($input->getOption('theme'));
+        $theme_path = $input->getOption('theme-path');
+        if (is_null($theme_path)) {
+            $uri = $this->site->getMultisiteName($input);
+            $defaultThemePath = 'themes/custom';
+            $theme_path = $this->site->multisiteMode($uri)? 'sites/'.$this->site->getMultisiteDir($uri).'/'.$defaultThemePath : $defaultThemePath;
+        }
+        $theme_path = Path::isAbsolute($theme_path) ? $theme_path : Path::makeAbsolute($theme_path, $this->appRoot);
+        $theme_path = $this->validator->validateModulePath($theme_path, true);
+
+        $favicon = $input->getOption('favicon');
+        $commentUserPicture = $input->getOption('comment-user-picture');
+        $commentUserVerification = $input->getOption('comment-user-verification');
+        $nodeUserPicture = $input->getOption('node-user-picture');
+        $logo = $input->getOption('logo');
+        $mergeExistingFile = $input->getOption('merge-existing-file');
+        $this->generator->setIo($this->getIo());
+        return $this->generator->generate( 
+            [
+            'theme' => $theme,
+            'theme_path' => $theme_path,
+            'favicon' => $favicon,
+            'commentUserPicture' => $commentUserPicture,
+            'commentUserVerification' => $commentUserVerification,
+            'nodeUserPicture' => $nodeUserPicture,
+            'logo' => $logo,
+            'merge-existing-file' => (bool)$mergeExistingFile
+            ]
+        );
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function interact(InputInterface $input, OutputInterface $output)
+    {
+        // --theme option
+        try {
+            $theme = $input->getOption('theme') ? $this->validator->validateModuleName($input->getOption('theme')) : null;
+        } catch (\Exception $error) {
+            $this->getIo()->error($error->getMessage());
+            return 1;   
+        }
+        if (!$theme) {
+            // @see Drupal\Console\Command\Shared\ThemeTrait::themeQuestion
+            $theme = $this->themeQuestion();
+            $theme_list = $this->extensionManager->discoverThemes()
+            ->showInstalled()
+            ->showNoCore()
+            ->getList();
+            $input->setOption('theme', $theme);
+            
+        }
+
+        // --theme-path option
+        $theme_path = $input->getOption('theme-path');
+        if (!$theme_path) {
+            $theme_path = $this->appRoot.'/'.$theme_list[$theme]->getPath();
+            $input->setOption('theme-path', $theme_path);
+        }
+
+        // --favicon option
+        $favicon = $input->getOption('favicon');
+        if (!$favicon) {
+            $favicon = $this->getIo()->choice(
+                $this->trans('commands.generate.theme.setting.questions.favicon'),
+                ['true', 'false'],
+                'true'
+            );
+            $input->setOption('favicon', $favicon);
+        }
+
+        // --comment-user-picture option
+        $commentUserPicture = $input->getOption('comment-user-picture');
+        if (!$commentUserPicture) {
+            $commentUserPicture = $this->getIo()->choice(
+                $this->trans('commands.generate.theme.setting.questions.comment-user-picture'),
+                ['true', 'false'],
+                'true'
+            );
+            $input->setOption('comment-user-picture', $commentUserPicture);
+        }
+
+        // --comment-user-verification option
+        $commentUserVerification = $input->getOption('comment-user-verification');
+        if (!$commentUserVerification) {
+            $commentUserVerification = $this->getIo()->choice(
+                $this->trans('commands.generate.theme.setting.questions.comment-user-verification'),
+                ['true', 'false'],
+                'true'
+            );
+            $input->setOption('comment-user-verification', $commentUserVerification);
+        }
+
+        // --node-user-picture option
+        $nodeUserPicture = $input->getOption('node-user-picture');
+        if (!$nodeUserPicture) {
+            $nodeUserPicture = $this->getIo()->choice(
+                $this->trans('commands.generate.theme.setting.questions.node-user-picture'),
+                ['true', 'false'],
+                'true'
+            );
+            $input->setOption('node-user-picture', $nodeUserPicture);
+        }
+
+        // --logo option
+        $logo = $input->getOption('logo');
+        if (!$logo) {
+            $logo = $this->getIo()->choice(
+                $this->trans('commands.generate.theme.setting.questions.logo'),
+                ['true', 'false'],
+                'true'
+            );
+            $input->setOption('logo', $logo);
+        }
+
+        // --merge-existing-file
+        $mergeExistingFile = $input->getOption('merge-existing-file');
+        if (!$mergeExistingFile) {
+            $file_path = $theme_path.'/config/install/'.$theme.'.settings.yml';
+            $filesystem = new Filesystem();
+            if ($filesystem->exists($file_path)) {
+                $data_cont = file_get_contents($file_path);
+                if (strlen($data_cont)>0) {
+                    $mergeExistingFile = $this->getIo()->choice(
+                        $this->trans('commands.generate.theme.setting.questions.merge-existing-file'),
+                        ['true', 'false'],
+                        'true'
+                    );
+                    $input->setOption('merge-existing-file', $mergeExistingFile);
+                } else {
+                    $input->setOption('merge-existing-file', 'false');
+                }
+            } else {
+                $input->setOption('merge-existing-file', 'false');
+            }
+        } else {
+            $input->setOption('merge-existing-file', 'false');
+        }
+        $io = new DrupalStyle($input, $output);
+        
+    }
+}
diff --git a/vendor/drupal/console/src/Command/Generate/TwigExtensionCommand.php b/vendor/drupal/console/src/Command/Generate/TwigExtensionCommand.php
index eb147859e80858cbd7efb235650e421e317c1ca4..024309bd94bd41949e9a889503b2576615f12766 100644
--- a/vendor/drupal/console/src/Command/Generate/TwigExtensionCommand.php
+++ b/vendor/drupal/console/src/Command/Generate/TwigExtensionCommand.php
@@ -6,19 +6,19 @@
 
 namespace Drupal\Console\Command\Generate;
 
-use Drupal\Console\Core\Command\ContainerAwareCommand;
 use Drupal\Console\Command\Shared\ConfirmationTrait;
 use Drupal\Console\Command\Shared\ModuleTrait;
 use Drupal\Console\Command\Shared\ServicesTrait;
+use Drupal\Console\Core\Command\ContainerAwareCommand;
+use Drupal\Console\Core\Utils\ChainQueue;
+use Drupal\Console\Core\Utils\StringConverter;
+use Drupal\Console\Extension\Manager;
 use Drupal\Console\Generator\TwigExtensionGenerator;
+use Drupal\Console\Utils\Site;
 use Drupal\Console\Utils\Validator;
 use Symfony\Component\Console\Input\InputInterface;
 use Symfony\Component\Console\Input\InputOption;
 use Symfony\Component\Console\Output\OutputInterface;
-use Drupal\Console\Extension\Manager;
-use Drupal\Console\Core\Utils\ChainQueue;
-use Drupal\Console\Utils\Site;
-use Drupal\Console\Core\Utils\StringConverter;
 
 /**
  * Class TwigExtensionCommand
@@ -133,7 +133,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
             return 1;
         }
 
-        $module = $input->getOption('module');
+        $module = $this->validateModule($input->getOption('module'));
         $name = $input->getOption('name');
         $class = $this->validator->validateClassName($input->getOption('class'));
         $services = $input->getOption('services');
diff --git a/vendor/drupal/console/src/Command/Generate/UpdateCommand.php b/vendor/drupal/console/src/Command/Generate/UpdateCommand.php
index 15328006675a281a80dc60272db1e56c99586870..b91ea122cc48597de72e9fa9be9e1e6eed021d98 100644
--- a/vendor/drupal/console/src/Command/Generate/UpdateCommand.php
+++ b/vendor/drupal/console/src/Command/Generate/UpdateCommand.php
@@ -107,7 +107,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
             return 1;
         }
 
-        $module = $input->getOption('module');
+        $module = $this->validateModule($input->getOption('module'));
         $updateNumber = $input->getOption('update-n');
 
         $lastUpdateSchema = $this->getLastUpdate($module);
diff --git a/vendor/drupal/console/src/Command/Module/DownloadCommand.php b/vendor/drupal/console/src/Command/Module/DownloadCommand.php
index 3e8200ff4388a453a0c61fe2e9ca1d55d4a43181..27beb0b319b03a82a396ab13e4923b2d06c2ee88 100644
--- a/vendor/drupal/console/src/Command/Module/DownloadCommand.php
+++ b/vendor/drupal/console/src/Command/Module/DownloadCommand.php
@@ -7,6 +7,7 @@
 
 namespace Drupal\Console\Command\Module;
 
+use GuzzleHttp\Client;
 use Symfony\Component\Console\Input\InputArgument;
 use Symfony\Component\Console\Input\InputOption;
 use Symfony\Component\Console\Input\InputInterface;
@@ -14,25 +15,22 @@
 use Drupal\Console\Core\Command\Command;
 use Drupal\Console\Command\Shared\ProjectDownloadTrait;
 use Drupal\Console\Utils\DrupalApi;
-use GuzzleHttp\Client;
 use Drupal\Console\Extension\Manager;
 use Drupal\Console\Utils\Validator;
 use Drupal\Console\Utils\Site;
-use Drupal\Console\Core\Utils\ConfigurationManager;
-use Drupal\Console\Core\Utils\ShellProcess;
 
 class DownloadCommand extends Command
 {
     use ProjectDownloadTrait;
 
     /**
- * @var DrupalApi
-*/
+     * @var DrupalApi
+     */
     protected $drupalApi;
 
     /**
- * @var Client
-*/
+     * @var Client
+     */
     protected $httpClient;
 
     /**
@@ -41,29 +39,19 @@ class DownloadCommand extends Command
     protected $appRoot;
 
     /**
- * @var Manager
-*/
+     * @var Manager
+     */
     protected $extensionManager;
 
     /**
- * @var Validator
-*/
+     * @var Validator
+     */
     protected $validator;
 
     /**
- * @var ConfigurationManager
-*/
-    protected $configurationManager;
-
-    /**
- * @var ShellProcess
-*/
-    protected $shellProcess;
-
-    /**
-     * @var string
+     * @var Site
      */
-    protected $root;
+    protected $site;
 
     /**
      * DownloadCommand constructor.
@@ -74,9 +62,6 @@ class DownloadCommand extends Command
      * @param Manager              $extensionManager
      * @param Validator            $validator
      * @param Site                 $site
-     * @param ConfigurationManager $configurationManager
-     * @param ShellProcess         $shellProcess
-     * @param $root
      */
     public function __construct(
         DrupalApi $drupalApi,
@@ -84,10 +69,7 @@ public function __construct(
         $appRoot,
         Manager $extensionManager,
         Validator $validator,
-        Site $site,
-        ConfigurationManager $configurationManager,
-        ShellProcess $shellProcess,
-        $root
+        Site $site
     ) {
         $this->drupalApi = $drupalApi;
         $this->httpClient = $httpClient;
@@ -95,9 +77,6 @@ public function __construct(
         $this->extensionManager = $extensionManager;
         $this->validator = $validator;
         $this->site = $site;
-        $this->configurationManager = $configurationManager;
-        $this->shellProcess = $shellProcess;
-        $this->root = $root;
         parent::__construct();
     }
 
@@ -123,18 +102,6 @@ protected function configure()
                 InputOption::VALUE_NONE,
                 $this->trans('commands.module.download.options.latest')
             )
-            ->addOption(
-                'composer',
-                null,
-                InputOption::VALUE_NONE,
-                $this->trans('commands.module.install.options.composer')
-            )
-            ->addOption(
-                'unstable',
-                null,
-                InputOption::VALUE_NONE,
-                $this->trans('commands.module.download.options.unstable')
-            )
             ->setAliases(['mod']);
     }
 
@@ -143,7 +110,6 @@ protected function configure()
      */
     protected function interact(InputInterface $input, OutputInterface $output)
     {
-        $composer = $input->getOption('composer');
         $module = $input->getArgument('module');
 
         if (!$module) {
@@ -151,15 +117,13 @@ protected function interact(InputInterface $input, OutputInterface $output)
             $input->setArgument('module', $module);
         }
 
-        if (!$composer) {
-            $path = $input->getOption('path');
-            if (!$path) {
-                $path = $this->getIo()->ask(
-                    $this->trans('commands.module.download.questions.path'),
-                    'modules/contrib'
-                );
-                $input->setOption('path', $path);
-            }
+        $path = $input->getOption('path');
+        if (!$path) {
+            $path = $this->getIo()->ask(
+                $this->trans('commands.module.download.questions.path'),
+                'modules/contrib'
+            );
+            $input->setOption('path', $path);
         }
     }
 
@@ -171,82 +135,9 @@ protected function execute(InputInterface $input, OutputInterface $output)
         $modules = $input->getArgument('module');
         $latest = $input->getOption('latest');
         $path = $input->getOption('path');
-        $composer = $input->getOption('composer');
-        $unstable = true;
-
-        if ($composer) {
-            foreach ($modules as $module) {
-                if (!$latest) {
-                    $versions = $this->drupalApi
-                        ->getPackagistModuleReleases($module, 10, $unstable);
-
-                    if (!$versions) {
-                        $this->getIo()->error(
-                            sprintf(
-                                $this->trans(
-                                    'commands.module.download.messages.no-releases'
-                                ),
-                                $module
-                            )
-                        );
-
-                        return 1;
-                    } else {
-                        $version = $this->getIo()->choice(
-                            sprintf(
-                                $this->trans(
-                                    'commands.site.new.questions.composer-release'
-                                ),
-                                $module
-                            ),
-                            $versions
-                        );
-                    }
-                } else {
-                    $versions = $this->drupalApi
-                        ->getPackagistModuleReleases($module, 10, $unstable);
-
-                    if (!$versions) {
-                        $this->getIo()->error(
-                            sprintf(
-                                $this->trans(
-                                    'commands.module.download.messages.no-releases'
-                                ),
-                                $module
-                            )
-                        );
-                        return 1;
-                    } else {
-                        $version = current(
-                            $this->drupalApi
-                                ->getPackagistModuleReleases($module, 1, $unstable)
-                        );
-                    }
-                }
-
-                // Register composer repository
-                $command = "composer config repositories.drupal composer https://packages.drupal.org/8";
-                $this->shellProcess->exec($command, $this->root);
-
-                $command = sprintf(
-                    'composer require drupal/%s:%s --prefer-dist --optimize-autoloader --sort-packages --update-no-dev',
-                    $module,
-                    $version
-                );
-
-                if ($this->shellProcess->exec($command, $this->root)) {
-                    $this->getIo()->success(
-                        sprintf(
-                            $this->trans('commands.module.download.messages.composer'),
-                            $module
-                        )
-                    );
-                }
-            }
-        } else {
-            $this->downloadModules($modules, $latest, $path);
-        }
 
-        return true;
+        $this->downloadModules($modules, $latest, $path);
+
+        return 1;
     }
 }
diff --git a/vendor/drupal/console/src/Command/Module/InstallCommand.php b/vendor/drupal/console/src/Command/Module/InstallCommand.php
index 5e164e6465b76ca58018cab6cbd643b436bbb6d4..7383bbb28cc87298a0a233aabbb5cfaa8e85a17d 100644
--- a/vendor/drupal/console/src/Command/Module/InstallCommand.php
+++ b/vendor/drupal/console/src/Command/Module/InstallCommand.php
@@ -120,7 +120,7 @@ protected function configure()
                 'composer',
                 null,
                 InputOption::VALUE_NONE,
-                $this->trans('commands.module.uninstall.options.composer')
+                $this->trans('commands.module.install.options.composer')
             )
             ->setAliases(['moi']);
     }
@@ -148,67 +148,100 @@ protected function execute(InputInterface $input, OutputInterface $output)
 
         $this->site->loadLegacyFile('/core/includes/bootstrap.inc');
 
-        // check module's requirements
-        $this->moduleRequirement($module);
-
+        // When --composer is specified, build a command to Composer require
+        // all the needed modules in one go. This will just download the
+        // modules from the composer endpoint, not do any 'installation', in
+        // Drupal terminology.
         if ($composer) {
-            foreach ($module as $moduleItem) {
-                $command = sprintf(
-                    'composer show drupal/%s ',
-                    $moduleItem
-                );
-
-                $processBuilder = new ProcessBuilder([]);
-                $processBuilder->setWorkingDirectory($this->appRoot);
-                $processBuilder->setArguments(explode(" ", $command));
-                $process = $processBuilder->getProcess();
-                $process->setTty('true');
-                $process->run();
-
-                if ($process->isSuccessful()) {
-                    $this->getIo()->info(
-                        sprintf(
-                            $this->trans('commands.module.install.messages.download-with-composer'),
-                            $moduleItem
-                        )
-                    );
+            $composer_package_list = [];
+            $module_list = [];
+            foreach ($module as $item) {
+                // Decompose each module item passed on the command line into
+                // Composer-ready elements.
+                $temp = explode('/', $item);
+                if (count($temp) === 1) {
+                    $package_namespace = 'drupal';
+                    $package = $temp[0];
                 } else {
-                    $this->getIo()->error(
-                        sprintf(
-                            $this->trans('commands.module.install.messages.not-installed-with-composer'),
-                            $moduleItem
-                        )
-                    );
-                    throw new \RuntimeException($process->getErrorOutput());
+                    $package_namespace = $temp[0];
+                    $package = $temp[1];
                 }
-            }
+                $temp = explode(':', $package);
+                if (count($temp) === 1) {
+                    $package_constraint = null;
+                } else {
+                    $package = $temp[0];
+                    $package_constraint = $temp[1];
+                }
+
+                // Add the Composer argument.
+                $temp = "$package_namespace/$package";
+                if (isset($package_constraint)) {
+                    $temp .= ':' . $package_constraint;
+                }
+                $composer_package_list[] = $temp;
 
-            $unInstalledModules = $module;
-        } else {
-            $resultList = $this->downloadModules($module, $latest);
-
-            $invalidModules = $resultList['invalid'];
-            $unInstalledModules = $resultList['uninstalled'];
-
-            if ($invalidModules) {
-                foreach ($invalidModules as $invalidModule) {
-                    unset($module[array_search($invalidModule, $module)]);
-                    $this->getIo()->error(
-                        sprintf(
-                            $this->trans('commands.module.install.messages.invalid-name'),
-                            $invalidModule
-                        )
-                    );
+                // Add the module to the list of those to be Drupal-installed.
+                if ($package_namespace === 'drupal') {
+                    $module_list[] = $package;
                 }
             }
+            $module = $module_list;
 
-            if (!$unInstalledModules) {
-                $this->getIo()->warning($this->trans('commands.module.install.messages.nothing'));
+            // Run the Composer require command.
+            $command = array_merge(['composer', 'require'], $composer_package_list);
+            $this->getIo()->info('Executing... ' . implode(' ', $command));
+            $processBuilder = new ProcessBuilder([]);
+            $processBuilder->setWorkingDirectory($this->appRoot);
+            $processBuilder->setArguments($command);
+            $processBuilder->inheritEnvironmentVariables();
+            $process = $processBuilder->getProcess();
+            $process->setTty(true);
+            $process->run();
 
-                return 0;
+            if ($process->isSuccessful()) {
+                $this->getIo()->info(
+                    sprintf(
+                        $this->trans('commands.module.install.messages.download-with-composer'),
+                        implode(', ', $composer_package_list)
+                    )
+                );
+            } else {
+                $this->getIo()->error(
+                    sprintf(
+                        $this->trans('commands.module.install.messages.not-installed-with-composer'),
+                        implode(', ', $composer_package_list)
+                    )
+                );
+                throw new \RuntimeException($process->getErrorOutput());
+            }
+        }
+
+        // Build the list of modules to be installed, skipping those that are
+        // installed already.
+        $resultList = $this->downloadModules($module, $latest);
+        $invalidModules = $resultList['invalid'];
+        $unInstalledModules = $resultList['uninstalled'];
+
+        if ($invalidModules) {
+            foreach ($invalidModules as $invalidModule) {
+                unset($module[array_search($invalidModule, $module)]);
+                $this->getIo()->error(
+                    sprintf(
+                        $this->trans('commands.module.install.messages.invalid-name'),
+                        $invalidModule
+                    )
+                );
             }
         }
 
+        // If no modules need to be installed, warn and exit.
+        if (!$unInstalledModules) {
+            $this->getIo()->warning($this->trans('commands.module.install.messages.nothing'));
+            return 0;
+        }
+
+        // Install the needed modules.
         try {
             $this->getIo()->comment(
                 sprintf(
diff --git a/vendor/drupal/console/src/Command/Module/UninstallCommand.php b/vendor/drupal/console/src/Command/Module/UninstallCommand.php
old mode 100644
new mode 100755
index 5fc466bcfc743cd53b866f28c11631479e703f93..51014ce6c9a7a33840ef6d4e2b1199e24bd9f77a
--- a/vendor/drupal/console/src/Command/Module/UninstallCommand.php
+++ b/vendor/drupal/console/src/Command/Module/UninstallCommand.php
@@ -7,19 +7,19 @@
 
 namespace Drupal\Console\Command\Module;
 
+use Drupal\Console\Core\Command\ContainerAwareCommand;
+use Drupal\Console\Core\Utils\ChainQueue;
+use Drupal\Console\Command\Shared\ProjectDownloadTrait;
 use Drupal\Console\Extension\Manager;
+use Drupal\Console\Utils\Site;
+use Drupal\Core\Config\ConfigFactoryInterface;
+use Drupal\Core\Extension\ModuleInstallerInterface;
 use Symfony\Component\Console\Input\InputArgument;
 use Symfony\Component\Console\Input\InputInterface;
 use Symfony\Component\Console\Input\InputOption;
 use Symfony\Component\Console\Output\OutputInterface;
-use Drupal\Console\Core\Command\Command;
-use Drupal\Console\Command\Shared\ProjectDownloadTrait;
-use Drupal\Console\Utils\Site;
-use Drupal\Core\Extension\ModuleInstallerInterface;
-use Drupal\Console\Core\Utils\ChainQueue;
-use Drupal\Core\Config\ConfigFactoryInterface;
 
-class UninstallCommand extends Command
+class UninstallCommand extends ContainerAwareCommand
 {
     use ProjectDownloadTrait;
 
@@ -83,7 +83,7 @@ protected function configure()
             ->addArgument(
                 'module',
                 InputArgument::IS_ARRAY,
-                $this->trans('commands.module.uninstall.questions.module')
+                $this->trans('commands.module.uninstall.arguments.module')
             )
             ->addOption(
                 'force',
@@ -179,7 +179,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
             }
 
             $dependencies = [];
-            while (list($module) = each($moduleList)) {
+            foreach ($moduleList as $module => $value ) {
                 foreach (array_keys($moduleData[$module]->required_by) as $dependency) {
                     if (isset($installedModules[$dependency]) && !isset($moduleList[$dependency]) && (!array_key_exists($dependency, $profiles))) {
                         $dependencies[] = $dependency;
diff --git a/vendor/drupal/console/src/Command/Module/UpdateCommand.php b/vendor/drupal/console/src/Command/Module/UpdateCommand.php
index 45b04a57a33107e552dcbe6e49cd613a7c80a315..84a28231908d98b1354371fea59c0cf5f76c9672 100644
--- a/vendor/drupal/console/src/Command/Module/UpdateCommand.php
+++ b/vendor/drupal/console/src/Command/Module/UpdateCommand.php
@@ -112,20 +112,20 @@ protected function execute(InputInterface $input, OutputInterface $output)
         }
 
         if (count($modules) > 1) {
-            $modules = " drupal/" . implode(" drupal/", $modules);
+            $modules = ' drupal/' . implode(' drupal/', $modules);
         } else {
-            $modules = " drupal/" . current($modules);
+            $modules = ' drupal/' . current($modules);
         }
 
         if ($composer) {
             // Register composer repository
-            $command = "composer config repositories.drupal composer https://packages.drupal.org/8";
+            $command = 'composer config repositories.drupal composer https://packages.drupal.org/8';
             $this->shellProcess->exec($command, $this->root);
 
             $command = 'composer update ' . $modules . ' --optimize-autoloader --prefer-dist --no-dev --root-reqs ';
 
             if ($simulate) {
-                $command .= " --dry-run";
+                $command .= ' --dry-run';
             }
 
             if ($this->shellProcess->exec($command, $this->root)) {
diff --git a/vendor/drupal/console/src/Command/Multisite/NewCommand.php b/vendor/drupal/console/src/Command/Multisite/NewCommand.php
index d7d053499dec06bf95cafc4c68ed7f54a4f31828..c70eb616dfbe93414cd125be3e89c0fdef9235a8 100644
--- a/vendor/drupal/console/src/Command/Multisite/NewCommand.php
+++ b/vendor/drupal/console/src/Command/Multisite/NewCommand.php
@@ -8,6 +8,7 @@
 namespace Drupal\Console\Command\Multisite;
 
 use Drupal\Console\Core\Command\Command;
+use Drupal\Console\Utils\Validator;
 use Symfony\Component\Console\Input\InputArgument;
 use Symfony\Component\Console\Input\InputInterface;
 use Symfony\Component\Console\Input\InputOption;
@@ -25,14 +26,21 @@ class NewCommand extends Command
 {
     protected $appRoot;
 
+    /**
+     * @var Validator
+     */
+    protected $validator;
+
     /**
      * DebugCommand constructor.
      *
      * @param $appRoot
+     * @param Validator $validator
      */
-    public function __construct($appRoot)
+    public function __construct($appRoot, Validator $validator)
     {
         $this->appRoot = $appRoot;
+        $this->validator = $validator;
         parent::__construct();
     }
 
@@ -80,6 +88,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
     {
         $this->fs = new Filesystem();
         $this->directory = $input->getArgument('directory');
+        $uri = $this->validator->validateUriName($input->getArgument('uri'));
 
         if (!$this->directory) {
             $this->getIo()->error($this->trans('commands.multisite.new.errors.subdir-empty'));
@@ -117,7 +126,6 @@ protected function execute(InputInterface $input, OutputInterface $output)
             return 1;
         }
 
-        $uri = $input->getArgument('uri');
         try {
             $this->addToSitesFile($uri);
         } catch (\Exception $e) {
@@ -154,7 +162,7 @@ protected function addToSitesFile($uri)
             throw new FileNotFoundException($this->trans('commands.multisite.new.errors.sites-missing'));
         }
 
-        $sites_file_contents .= "\n\$sites['$this->directory'] = '$this->directory';";
+        $sites_file_contents .= "\n\$sites['$uri'] = '$this->directory';";
 
         try {
             $this->fs->dumpFile($this->appRoot . '/sites/sites.php', $sites_file_contents);
diff --git a/vendor/drupal/console/src/Command/Multisite/UpdateCommand.php b/vendor/drupal/console/src/Command/Multisite/UpdateCommand.php
index 44b4af025e9c12682a823b7831644f7ae0dc5b1a..e7313d7aefe87527edeb30d51caebd69a497f7f8 100644
--- a/vendor/drupal/console/src/Command/Multisite/UpdateCommand.php
+++ b/vendor/drupal/console/src/Command/Multisite/UpdateCommand.php
@@ -8,6 +8,7 @@
 namespace Drupal\Console\Command\Multisite;
 
 use Drupal\Console\Core\Command\Command;
+use Drupal\Console\Utils\Site;
 use Symfony\Component\Console\Input\InputInterface;
 use Symfony\Component\Console\Input\InputOption;
 use Symfony\Component\Console\Output\OutputInterface;
@@ -23,14 +24,21 @@ class UpdateCommand extends Command
 {
     protected $appRoot;
 
+    /**
+    * @var Site
+    */
+    protected $site;
+
     /**
      * DebugCommand constructor.
      *
      * @param $appRoot
+     * @param Site $site
      */
-    public function __construct($appRoot)
+    public function __construct($appRoot, Site $site)
     {
         $this->appRoot = $appRoot;
+        $this->site = $site;
         parent::__construct();
     }
 
@@ -81,7 +89,7 @@ public function configure()
      */
     protected function interact(InputInterface $input, OutputInterface $output)
     {
-        $this->uri = parse_url($input->getParameterOption(['--uri', '-l'], 'default'), PHP_URL_HOST);
+        $this->uri = $this->site->getMultisiteName($input);
 
         $sites = $this->getMultisite($this->uri);
         if ($this->uri == "default") {
@@ -113,7 +121,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
         $this->fs = new Filesystem();
 
         if (empty($this->uri)) {
-            $uri =  parse_url($input->getParameterOption(['--uri', '-l'], 'default'), PHP_URL_HOST);
+            $uri =  $this->site->getMultisiteName($input);
             $sites = $this->getMultisite($uri);
             $this->uri = $sites[$uri];
         }
diff --git a/vendor/drupal/console/src/Command/Rest/DisableCommand.php b/vendor/drupal/console/src/Command/Rest/DisableCommand.php
index 8044367df66c63b165dd15c62c8497efff53d8b9..5fabbd6b3f6b34351ff229c39d968af16e90ad1c 100644
--- a/vendor/drupal/console/src/Command/Rest/DisableCommand.php
+++ b/vendor/drupal/console/src/Command/Rest/DisableCommand.php
@@ -13,8 +13,8 @@
 use Drupal\Console\Core\Command\Command;
 use Drupal\Console\Annotations\DrupalCommand;
 use Drupal\Console\Command\Shared\RestTrait;
-use Drupal\Core\Config\ConfigFactory;
 use Drupal\rest\Plugin\Type\ResourcePluginManager;
+use Drupal\Core\Entity\EntityTypeManagerInterface;
 
 /**
  * @DrupalCommand(
@@ -27,9 +27,9 @@ class DisableCommand extends Command
     use RestTrait;
 
     /**
-     * @var ConfigFactory
+     * @var EntityTypeManagerInterface
      */
-    protected $configFactory;
+    protected $entityTypeManager;
 
     /**
      * @var ResourcePluginManager
@@ -39,14 +39,14 @@ class DisableCommand extends Command
     /**
      * DisableCommand constructor.
      *
-     * @param ConfigFactory         $configFactory
-     * @param ResourcePluginManager $pluginManagerRest
+     * @param EntityTypeManagerInterface $entityTypeManager
+     * @param ResourcePluginManager      $pluginManagerRest
      */
     public function __construct(
-        ConfigFactory $configFactory,
+        EntityTypeManagerInterface $entityTypeManager,
         ResourcePluginManager $pluginManagerRest
     ) {
-        $this->configFactory = $configFactory;
+        $this->entityTypeManager = $entityTypeManager;
         $this->pluginManagerRest = $pluginManagerRest;
         parent::__construct();
     }
@@ -68,10 +68,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
     {
         $resource_id = $input->getArgument('resource-id');
         $rest_resources = $this->getRestResources();
-        $rest_resources_ids = array_merge(
-            array_keys($rest_resources['enabled']),
-            array_keys($rest_resources['disabled'])
-        );
+        $rest_resources_ids = array_keys($rest_resources['enabled']);
 
         if (!$resource_id) {
             $resource_id = $this->getIo()->choice(
diff --git a/vendor/drupal/console/src/Command/Rest/EnableCommand.php b/vendor/drupal/console/src/Command/Rest/EnableCommand.php
index 93af9a64b9d6d3bd29c70340c3293194c0a53773..b4829759f5a1e9a4c932244a9ac944246403afcf 100644
--- a/vendor/drupal/console/src/Command/Rest/EnableCommand.php
+++ b/vendor/drupal/console/src/Command/Rest/EnableCommand.php
@@ -16,8 +16,7 @@
 use Drupal\Console\Command\Shared\RestTrait;
 use Drupal\rest\Plugin\Type\ResourcePluginManager;
 use Drupal\Core\Authentication\AuthenticationCollector;
-use Drupal\Core\Config\ConfigFactory;
-use Drupal\Core\Entity\EntityManager;
+use Drupal\Core\Entity\EntityTypeManagerInterface;
 
 /**
  * @DrupalCommand(
@@ -29,6 +28,11 @@ class EnableCommand extends ContainerAwareCommand
 {
     use RestTrait;
 
+    /**
+     * @var EntityTypeManagerInterface
+     */
+    protected $entityTypeManager;
+
     /**
      * @var ResourcePluginManager $pluginManagerRest
      */
@@ -39,37 +43,21 @@ class EnableCommand extends ContainerAwareCommand
      */
     protected $authenticationCollector;
 
-    /**
-     * @var ConfigFactory
-     */
-    protected $configFactory;
-
-    /**
-     * The entity manager.
-     *
-     * @var EntityManager
-     */
-    protected $entityManager;
-
     /**
      * EnableCommand constructor.
      *
-     * @param ResourcePluginManager   $pluginManagerRest
-     * @param AuthenticationCollector $authenticationCollector
-     * @param ConfigFactory           $configFactory
-     * @param EntityManager           $entity_manager
-     *   The entity manager.
+     * @param EntityTypeManagerInterface $entityTypeManager
+     * @param ResourcePluginManager      $pluginManagerRest
+     * @param AuthenticationCollector    $authenticationCollector
      */
     public function __construct(
+        EntityTypeManagerInterface $entityTypeManager,
         ResourcePluginManager $pluginManagerRest,
-        AuthenticationCollector $authenticationCollector,
-        ConfigFactory $configFactory,
-        EntityManager $entity_manager
+        AuthenticationCollector $authenticationCollector
     ) {
+        $this->entityTypeManager = $entityTypeManager;
         $this->pluginManagerRest = $pluginManagerRest;
         $this->authenticationCollector = $authenticationCollector;
-        $this->configFactory = $configFactory;
-        $this->entityManager = $entity_manager;
         parent::__construct();
     }
 
@@ -82,7 +70,7 @@ protected function configure()
             ->addArgument(
                 'resource-id',
                 InputArgument::OPTIONAL,
-                $this->trans('commands.rest.debug.arguments.resource-id')
+                $this->trans('commands.rest.enable.arguments.resource-id')
             )
             ->setAliases(['ree']);
     }
@@ -91,10 +79,8 @@ protected function execute(InputInterface $input, OutputInterface $output)
     {
         $resource_id = $input->getArgument('resource-id');
         $rest_resources = $this->getRestResources();
-        $rest_resources_ids = array_merge(
-            array_keys($rest_resources['enabled']),
-            array_keys($rest_resources['disabled'])
-        );
+        $rest_resources_ids = array_keys($rest_resources['disabled']);
+
         if (!$resource_id) {
             $resource_id = $this->getIo()->choiceNoList(
                 $this->trans('commands.rest.enable.arguments.resource-id'),
@@ -114,7 +100,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
 
         $methods = $plugin->availableMethods();
         $method = $this->getIo()->choice(
-            $this->trans('commands.rest.enable.arguments.methods'),
+            $this->trans('commands.rest.enable.messages.methods'),
             $methods
         );
         $this->getIo()->writeln(
@@ -122,12 +108,12 @@ protected function execute(InputInterface $input, OutputInterface $output)
         );
 
         $format = $this->getIo()->choice(
-            $this->trans('commands.rest.enable.arguments.formats'),
+            $this->trans('commands.rest.enable.messages.formats'),
             $this->container->getParameter('serializer.formats')
         );
 
         $this->getIo()->writeln(
-            $this->trans('commands.rest.enable.messages.selected-format') . ' ' . $format
+            $this->trans('commands.rest.enable.messages.selected-formats') . ' ' . $format
         );
 
         // Get Authentication Provider and generate the question
@@ -148,9 +134,9 @@ protected function execute(InputInterface $input, OutputInterface $output)
         );
 
         $format_resource_id = str_replace(':', '.', $resource_id);
-        $config = $this->entityManager->getStorage('rest_resource_config')->load($format_resource_id);
+        $config = $this->entityTypeManager->getStorage('rest_resource_config')->load($format_resource_id);
         if (!$config) {
-            $config = $this->entityManager->getStorage('rest_resource_config')->create(
+            $config = $this->entityTypeManager->getStorage('rest_resource_config')->create(
                 [
                 'id' => $format_resource_id,
                 'granularity' => RestResourceConfigInterface::METHOD_GRANULARITY,
diff --git a/vendor/drupal/console/src/Command/Router/RebuildCommand.php b/vendor/drupal/console/src/Command/Router/RebuildCommand.php
index 8fd4a197c1f7121ad046263081b42ea3b4204d4f..d1fda0f0dfba25ab8d2718221e820eed567bc14f 100644
--- a/vendor/drupal/console/src/Command/Router/RebuildCommand.php
+++ b/vendor/drupal/console/src/Command/Router/RebuildCommand.php
@@ -45,7 +45,12 @@ protected function execute(InputInterface $input, OutputInterface $output)
             $this->trans('commands.router.rebuild.messages.rebuilding')
         );
 
-        $this->routerBuilder->rebuild();
+        if(!$this->routerBuilder->rebuild()) {
+            $this->getIo()->error(
+                $this->trans('commands.router.rebuild.messages.error-rebuild')
+            );
+            return 1;
+        }
 
         $this->getIo()->success(
             $this->trans('commands.router.rebuild.messages.completed')
diff --git a/vendor/drupal/console/src/Command/Service/OverrideCommand.php b/vendor/drupal/console/src/Command/Service/OverrideCommand.php
new file mode 100644
index 0000000000000000000000000000000000000000..bde6ff603bfd3f550715a30b7203b2e69781617b
--- /dev/null
+++ b/vendor/drupal/console/src/Command/Service/OverrideCommand.php
@@ -0,0 +1,247 @@
+<?php
+/**
+ * @file
+ * Contains \Drupal\Console\Command\Service\OverrideCommand.
+ */
+namespace Drupal\Console\Command\Service;
+use Symfony\Component\Console\Input\InputArgument;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Output\OutputInterface;
+use Drupal\Component\Serialization\Yaml;
+use Drupal\Console\Core\Command\ContainerAwareCommand;
+use Drupal\Console\Core\Utils\ChainQueue;
+
+class OverrideCommand extends ContainerAwareCommand
+{
+    /**
+     * @var string
+     */
+    protected $appRoot;
+
+    /**
+     * @var ChainQueue
+     */
+    protected $chainQueue;
+
+    /**
+     * @var Directory
+     */
+    private $directory;
+
+    /**
+     * @var ServiceFile
+     */
+    private $serviceFile = '/services.yml';
+
+    /**
+     * OverrideCommand constructor.
+     *
+     * @param $appRoot,
+     * @param ChainQueue $chainQueue,
+     */
+    public function __construct(
+        $appRoot,
+        ChainQueue $chainQueue
+    ) {
+        $this->appRoot = $appRoot;
+        $this->chainQueue = $chainQueue;
+
+        $this->directory = sprintf(
+            '%s/%s',
+            $appRoot,
+            \Drupal::service('site.path')
+        );
+
+        parent::__construct();
+    }
+
+    protected function configure()
+    {
+        $this
+            ->setName('service:override')
+            ->setDescription($this->trans('commands.service.override.description'))
+            ->addArgument(
+                'name',
+                InputArgument::REQUIRED,
+                $this->trans('commands.service.override.arguments.name')
+            )
+            ->addOption(
+                'key',
+                null,
+                InputOption::VALUE_REQUIRED | InputOption::VALUE_IS_ARRAY,
+                $this->trans('commands.service.override.options.key')
+            )
+            ->addOption(
+                'value',
+                null,
+                InputOption::VALUE_REQUIRED | InputOption::VALUE_IS_ARRAY,
+                $this->trans('commands.service.override.options.value')
+            )
+            ->setAliases(['so']);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function interact(InputInterface $input, OutputInterface $output)
+    {
+        $name = $input->getArgument('name');
+        $services = $this->getServiceFileAsParameters();
+
+        if ($name) {
+            if (!in_array($name, array_keys($services['parameters']))) {
+                $this->getIo()->warning(
+                    sprintf(
+                        $this->trans('commands.service.override.messages.invalid-name'),
+                        $name
+                    )
+                );
+                $name = null;
+            }
+        } else {
+            $name = $this->getIo()->choiceNoList(
+                $this->trans('commands.service.override.questions.name'),
+                array_keys($services['parameters'])
+            );
+            $input->setArgument('name', $name);
+        }
+
+        $key = $input->getOption('key');
+        if (!$key) {
+            if (!$services['parameters'][$name]) {
+                $this->getIo()->newLine();
+                $this->getIo()->errorLite($this->trans('commands.config.override.messages.invalid-config-file'));
+                $this->getIo()->newLine();
+                return 0;
+            }
+
+            $service = $services['parameters'][$name];
+            $input->setOption('key', $this->getKeysFromServices($service));
+        }
+
+        $value = $input->getOption('value');
+        if (!$value) {
+            foreach ($input->getOption('key') as $name) {
+                $value[] = $this->getIo()->ask(
+                    sprintf(
+                        $this->trans('commands.config.override.questions.value'),
+                        $name
+                    )
+                );
+            }
+            $input->setOption('value', $value);
+        }
+    }
+
+    protected function execute(InputInterface $input, OutputInterface $output)
+    {
+        $serviceName = $input->getArgument('name');
+        $keys = $input->getOption('key');
+        $values = $input->getOption('value');
+
+
+        $serviceOverrideResult = [];
+        foreach ($keys as $index => $key) {
+            $result = $this->processServicesFile(
+                $serviceName,
+                $key,
+                $values[$index]
+            );
+            $serviceOverrideResult = array_merge($serviceOverrideResult, $result);
+        }
+        $this->getIo()->info($this->trans('commands.service.override.messages.service-name'), false);
+        $this->getIo()->comment($serviceName);
+
+        $tableHeader = [
+            $this->trans('commands.service.override.messages.service-key'),
+            $this->trans('commands.service.override.messages.original'),
+            $this->trans('commands.service.override.messages.updated'),
+        ];
+        $tableRows = $serviceOverrideResult;
+        $this->getIo()->table($tableHeader, $tableRows);
+
+        $this->chainQueue->addCommand('cache:rebuild', ['cache' => 'all']);
+    }
+
+    protected function processServicesFile($serviceName, $key, $value)
+    {
+        $services = $this->getServiceFileAsParameters();
+        $serviceFileName = $this->directory . $this->serviceFile;
+
+        if (is_bool($value)) {
+            $value = $value ? 'true' : 'false';
+        }
+
+        $defaultValue = $services['parameters'][$serviceName][$key];
+        if (is_bool($defaultValue)) {
+            $defaultValue = $defaultValue ? 'true' : 'false';
+        }
+
+        $result[] = [
+            'service-key' => $key,
+            'original' => $defaultValue,
+            'updated' => $value,
+        ];
+
+        $services['parameters'][$serviceName][$key] = $value;
+
+        if (!file_put_contents($serviceFileName, Yaml::encode($services))) {
+            $this->getIo()->error(
+                sprintf(
+                    '%s : %s/services.yml',
+                    $this->trans('commands.service.override.messages.error-writing-file'),
+                    $this->directory
+                )
+            );
+            return 1;
+        }
+
+        return $result;
+    }
+
+    private function getServiceFileAsParameters() {
+
+        $serviceFileName = $this->directory . $this->serviceFile;
+        if (!file_exists($serviceFileName)) {
+            // Copying default services
+            $defaultServicesFile = $this->appRoot . '/sites/default/default.services.yml';
+            if (!copy($defaultServicesFile, $serviceFileName)) {
+                $this->getIo()->error(
+                    sprintf(
+                        '%s: %s/services.yml',
+                        $this->trans('commands.service.override.messages.error-copying-file'),
+                        $this->directory
+                    )
+                );
+                return 1;
+            }
+        }
+
+        return Yaml::decode(file_get_contents($serviceFileName));
+    }
+
+    /**
+     * Allow to search a specific key to override.
+     *
+     * @param $service
+     * @param null $key
+     *
+     * @return array
+     */
+    private function getKeysFromServices($service, $key = null)
+    {
+        $choiceKey = $this->getIo()->choiceNoList(
+            $this->trans('commands.service.override.questions.key'),
+            array_keys($service)
+        );
+
+        $key = is_null($key) ? $choiceKey:$key.'.'.$choiceKey;
+
+        if(is_array($service[$choiceKey])){
+            return $this->getKeysFromConfig($service[$choiceKey], $key);
+        }
+
+        return [$key];
+    }
+}
diff --git a/vendor/drupal/console/src/Command/Shared/ArrayInputTrait.php b/vendor/drupal/console/src/Command/Shared/ArrayInputTrait.php
index a6a016170ee5af0f9dfc4a44c5b8b129c897f451..c4615304a917c521546b53166917c4db45f9853b 100644
--- a/vendor/drupal/console/src/Command/Shared/ArrayInputTrait.php
+++ b/vendor/drupal/console/src/Command/Shared/ArrayInputTrait.php
@@ -30,7 +30,7 @@ public function explodeInlineArray($inlineInputs)
             $parameters = [];
             foreach ($explodeInput as $inlineParameter) {
                 $inlineParameter = trim($inlineParameter);
-                list($key, $value) = explode(':', $inlineParameter);
+                list($key, $value) = explode('":"', $inlineParameter);
                 $key = rtrim(ltrim($key, '"'), '"');
                 $value = rtrim(ltrim($value, '"'), '"');
                 if (!empty($value)) {
diff --git a/vendor/drupal/console/src/Command/Shared/ConnectTrait.php b/vendor/drupal/console/src/Command/Shared/ConnectTrait.php
index c4eff2153b3f332b7faf6fc75c47c35e9e6bc46d..1b2e93f4760d095385bcd117fa624ede677ce7d0 100644
--- a/vendor/drupal/console/src/Command/Shared/ConnectTrait.php
+++ b/vendor/drupal/console/src/Command/Shared/ConnectTrait.php
@@ -11,36 +11,26 @@
 
 trait ConnectTrait
 {
-    protected $supportedDrivers = ['mysql','pgsql'];
+    protected $supportedDrivers = ['mysql', 'pgsql', 'sqlite'];
 
-    public function resolveConnection($database = 'default')
+    public function resolveConnection($key = 'default', $target = 'default')
     {
-        $connectionInfo = Database::getConnectionInfo();
-
-        if (!$connectionInfo || !isset($connectionInfo[$database])) {
-            $this->getIo()->error(
-                sprintf(
-                    $this->trans('commands.database.connect.messages.database-not-found'),
-                    $database
-                )
-            );
-
-            return null;
+        $connectionInfo = Database::getConnectionInfo($key);
+        if (empty($connectionInfo[$target])) {
+            throw new \Exception(sprintf(
+                $this->trans('commands.database.connect.messages.database-not-found'),
+                $key,
+                $target
+            ));
         }
-
-        $databaseConnection = $connectionInfo[$database];
-        if (!in_array($databaseConnection['driver'], $this->supportedDrivers)) {
-            $this->getIo()->error(
-                sprintf(
-                    $this->trans('commands.database.connect.messages.database-not-supported'),
-                    $databaseConnection['driver']
-                )
-            );
-
-            return null;
+        else if (!in_array($connectionInfo[$target]['driver'], $this->supportedDrivers)) {
+            throw new \Exception(sprintf(
+                $this->trans('commands.database.connect.messages.database-not-supported'),
+                $connectionInfo[$target]['driver']
+            ));
         }
 
-        return $databaseConnection;
+        return $connectionInfo[$target];
     }
 
     public function getRedBeanConnection($database = 'default')
@@ -66,4 +56,28 @@ public function getRedBeanConnection($database = 'default')
 
         return null;
     }
-}
+
+    public function getConnectionString($databaseConnection) {
+        return sprintf(
+          '%s -A --database=%s --user=%s --password=%s --host=%s --port=%s',
+          $databaseConnection['driver'],
+          $databaseConnection['database'],
+          $databaseConnection['username'],
+          $databaseConnection['password'],
+          $databaseConnection['host'],
+          $databaseConnection['port']
+        );
+    }
+
+    public function escapeConnection($databaseConnection) {
+        $settings = [
+          'driver', 'database', 'username', 'password', 'host', 'port'
+        ];
+
+        foreach ($settings as $setting) {
+            $databaseConnection[$setting] = $databaseConnection[$setting];
+        }
+
+        return $databaseConnection;
+    }
+}
\ No newline at end of file
diff --git a/vendor/drupal/console/src/Command/Shared/EventsTrait.php b/vendor/drupal/console/src/Command/Shared/EventsTrait.php
index bb8ce10ea0db2c37762e37aee7f04d6d84a90239..fee9c205f79f9e6fc5a51c8164c6dde1e88c5954 100644
--- a/vendor/drupal/console/src/Command/Shared/EventsTrait.php
+++ b/vendor/drupal/console/src/Command/Shared/EventsTrait.php
@@ -37,9 +37,10 @@ public function eventsQuestion()
             }
 
             $callbackSuggestion = str_replace('.', '_', $event);
+
             $callback = $this->getIo()->ask(
                 $this->trans('commands.generate.event.subscriber.questions.callback-name'),
-                $callbackSuggestion
+                $this->stringConverter->underscoreToCamelCase($callbackSuggestion)
             );
 
             $eventCollection[$event] = $callback;
diff --git a/vendor/drupal/console/src/Command/Shared/ExportTrait.php b/vendor/drupal/console/src/Command/Shared/ExportTrait.php
index 78e6faf6bcff13d880fa23220adbebabf3a2273b..e8abf4b060c74976a7dcbf4bd0e29735ab4747fa 100644
--- a/vendor/drupal/console/src/Command/Shared/ExportTrait.php
+++ b/vendor/drupal/console/src/Command/Shared/ExportTrait.php
@@ -44,8 +44,8 @@ protected function getConfiguration($configName, $uuid = false, $hash = false, $
     }
 
     /**
-     * @param string      $directory
-     * @param string      $message
+     * @param string $directory
+     * @param string $message
      */
     protected function exportConfig($directory, $message)
     {
@@ -61,7 +61,7 @@ protected function exportConfig($directory, $message)
                 $fileName
             );
 
-            $this->getIo()->writeln('- ' . $configFile);
+            $this->getIo()->writeln("- $configFile");
 
             // Create directory if doesn't exist
             if (!file_exists($directory)) {
@@ -76,8 +76,8 @@ protected function exportConfig($directory, $message)
     }
 
     /**
-     * @param string      $moduleName
-     * @param string      $message
+     * @param string $moduleName
+     * @param string $message
      */
     protected function exportConfigToModule($moduleName, $message)
     {
@@ -104,7 +104,7 @@ protected function exportConfigToModule($moduleName, $message)
                 $fileName
             );
 
-            $this->getIo()->info('- ' . $configFile);
+            $this->getIo()->writeln("- $configFile");
 
             // Create directory if doesn't exist
             if (!file_exists($configDirectory)) {
@@ -116,6 +116,8 @@ protected function exportConfigToModule($moduleName, $message)
                 $yamlConfig
             );
         }
+
+        $this->configExport = [];
     }
 
     protected function fetchDependencies($config, $type = 'config')
@@ -127,13 +129,17 @@ protected function fetchDependencies($config, $type = 'config')
         return null;
     }
 
-    protected function resolveDependencies($dependencies, $optional = false)
+    protected function resolveDependencies($dependencies, $optional = false, $uuid = false, $hash = false)
     {
         foreach ($dependencies as $dependency) {
             if (!array_key_exists($dependency, $this->configExport)) {
-                $this->configExport[$dependency] = ['data' => $this->getConfiguration($dependency), 'optional' => $optional];
+                $this->configExport[$dependency] = [
+                    'data' => $this->getConfiguration($dependency, $uuid, $hash),
+                    'optional' => $optional
+                ];
+
                 if ($dependencies = $this->fetchDependencies($this->configExport[$dependency], 'config')) {
-                    $this->resolveDependencies($dependencies, $optional);
+                    $this->resolveDependencies($dependencies, $optional, $uuid, $hash);
                 }
             }
         }
@@ -142,7 +148,7 @@ protected function resolveDependencies($dependencies, $optional = false)
     protected function exportModuleDependencies($module, $dependencies)
     {
         $module = $this->extensionManager->getModule($module);
-        $info_yaml = $module->info;
+        $info_yaml = Yaml::decode(file_get_contents($module->getPathname(), true));
 
         if (empty($info_yaml['dependencies'])) {
             $info_yaml['dependencies'] = $dependencies;
@@ -161,13 +167,136 @@ protected function exportModuleDependencies($module, $dependencies)
 
             foreach ($dependencies as $dependency) {
                 $this->getIo()->info(
-                    '   [-] ' . $dependency
+                    "   [-] $dependency"
                 );
             }
         } else {
-            $this->getIo()->error($this->trans('commands.site.mode.messages.error-writing-file') . ': ' . $this->getApplication()->getSite()->getModuleInfoFile($module));
+            $this->getIo()->error("{$this->trans('commands.site.mode.messages.error-writing-file')}: {$this->getApplication()->getSite()->getModuleInfoFile($module)}");
 
             return [];
         }
     }
+
+    protected function getFields(
+        $bundle,
+        $optional = false,
+        $removeUuid = false,
+        $removeHash = false
+    ) {
+
+        $fields_definition = $this->entityTypeManager->getDefinition('field_config');
+
+        $fields_storage = $this->entityTypeManager->getStorage('field_config');
+        foreach ($fields_storage->loadMultiple() as $field) {
+            $field_name = "{$fields_definition->getConfigPrefix()}.{$field->id()}";
+            $field_name_config = $this->getConfiguration($field_name, $removeUuid,
+                $removeHash);
+            // Only select fields related with content type
+            if ($field_name_config['bundle'] == $bundle) {
+                $this->configExport[$field_name] = [
+                    'data' => $field_name_config,
+                    'optional' => $optional,
+                ];
+                // Include dependencies in export files
+                if ($dependencies = $this->fetchDependencies($field_name_config,
+                    'config')) {
+                    $this->resolveDependencies($dependencies, $optional, $removeUuid, $removeHash);
+                }
+            }
+        }
+    }
+
+    protected function getBasefieldOverrideFields(
+        $bundle = null,
+        $optional = false,
+        $removeUuid = false,
+        $removeHash = false,
+        $collection = ''
+    ) {
+        $collection_storage = $this->storage->createCollection($collection);
+        foreach ($collection_storage->listAll() as $name) {
+            if(strpos($name, "core.base_field_override.node") !== false) {
+                $configData = $collection_storage->read($name);
+                if ($removeUuid) {
+                    unset($configData['uuid']);
+                }
+                if ($removeHash) {
+                    unset($configData['_core']['default_config_hash']);
+                    if (empty($configData['_core'])) {
+                        unset($configData['_core']);
+                    }
+                }
+
+                if ($configData['bundle'] == $bundle) {
+                    $this->configExport["$name.yml"] = [
+                        'data' => $configData,
+                        'optional' => $optional,
+                    ];
+                    // Include dependencies in export files
+                    if ($dependencies = $this->fetchDependencies($configData,
+                        'config')) {
+                        $this->resolveDependencies($dependencies, $optional, $removeUuid, $removeHash);
+                    }
+                }
+            }
+        }
+    }
+
+    protected function getFormDisplays(
+        $bundle,
+        $optional = false,
+        $removeUuid = false,
+        $removeHash = false
+    ) {
+        $arr = [];
+
+        $form_display_definition = $this->entityTypeManager->getDefinition('entity_form_display');
+        $form_display_storage = $this->entityTypeManager->getStorage('entity_form_display');
+        foreach ($form_display_storage->loadMultiple() as $form_display) {
+            $form_display_name = "{$form_display_definition->getConfigPrefix()}.{$form_display->id()}";
+            $form_display_name_config = $this->getConfiguration($form_display_name,
+                $removeUuid, $removeHash);
+
+            $arr[$form_display_name_config['bundle']] = $form_display_name_config['bundle'];
+            // Only select fields related with content type
+            if ($form_display_name_config['bundle'] == $bundle) {
+                $this->configExport[$form_display_name] = [
+                    'data' => $form_display_name_config,
+                    'optional' => $optional,
+                ];
+                // Include dependencies in export files
+                if ($dependencies = $this->fetchDependencies($form_display_name_config,
+                    'config')) {
+                    $this->resolveDependencies($dependencies, $optional, $removeUuid, $removeHash);
+                }
+            }
+        }
+    }
+
+    protected function getViewDisplays(
+        $bundle,
+        $optional = false,
+        $removeUuid = false,
+        $removeHash = false
+    ) {
+        $view_display_definition = $this->entityTypeManager->getDefinition('entity_view_display');
+        $view_display_storage = $this->entityTypeManager->getStorage('entity_view_display');
+        foreach ($view_display_storage->loadMultiple() as $view_display) {
+            $view_display_name = "{$view_display_definition->getConfigPrefix()}.{$view_display->id()}";
+            $view_display_name_config = $this->getConfiguration($view_display_name,
+                $removeUuid, $removeHash);
+            // Only select fields related with content type
+            if ($view_display_name_config['bundle'] == $bundle) {
+                $this->configExport[$view_display_name] = [
+                    'data' => $view_display_name_config,
+                    'optional' => $optional,
+                ];
+                // Include dependencies in export files
+                if ($dependencies = $this->fetchDependencies($view_display_name_config,
+                    'config')) {
+                    $this->resolveDependencies($dependencies, $optional, $removeUuid, $removeHash);
+                }
+            }
+        }
+    }
 }
diff --git a/vendor/drupal/console/src/Command/Shared/MigrationTrait.php b/vendor/drupal/console/src/Command/Shared/MigrationTrait.php
index 2edd6a7d95f2c1662fb845a12cbecafe07327b77..f3c97ef51ae84f31ad1afcf4b90c435dbc85d0e1 100644
--- a/vendor/drupal/console/src/Command/Shared/MigrationTrait.php
+++ b/vendor/drupal/console/src/Command/Shared/MigrationTrait.php
@@ -9,7 +9,6 @@
 
 use Drupal\Core\Database\Connection;
 use Drupal\Core\Database\Database;
-use Symfony\Component\Console\Input\InputInterface;
 
 /**
  * Class MigrationTrait
diff --git a/vendor/drupal/console/src/Command/Shared/ModuleTrait.php b/vendor/drupal/console/src/Command/Shared/ModuleTrait.php
index a85db71ef21e6627bab0e18e558dcfdc32001230..8bc1edef5e90a03a61c7c10eed04e4d2acec3a47 100644
--- a/vendor/drupal/console/src/Command/Shared/ModuleTrait.php
+++ b/vendor/drupal/console/src/Command/Shared/ModuleTrait.php
@@ -51,43 +51,12 @@ public function moduleQuestion($showProfile = true)
         return $module;
     }
 
-    /**
-     * Verify that install requirements for a list of modules are met.
-     *
-     * @param string[]    $module
-     *   List of modules to verify.
-     *
-     * @throws \Exception
-     *   When one or more requirements are not met.
-     */
-    public function moduleRequirement(array $module)
-    {
-        // TODO: Module dependencies should also be checked
-        // for unmet requirements recursively.
-        $fail = false;
-        foreach ($module as $module_name) {
-            module_load_install($module_name);
-            if ($requirements = \Drupal::moduleHandler()->invoke($module_name, 'requirements', ['install'])) {
-                foreach ($requirements as $requirement) {
-                    if (isset($requirement['severity']) && $requirement['severity'] == REQUIREMENT_ERROR) {
-                        $this->getIo()->info("Module '{$module_name}' cannot be installed: " . $requirement['title'] . ' | ' . $requirement['value']);
-                        $fail = true;
-                    }
-                }
-            }
-        }
-        if ($fail) {
-            throw new \Exception("Some module install requirements are not met.");
-        }
-    }
-
     /**
      * Get module name from user.
      *
      * @return mixed|string
      *   Module name.
-     * @throws \Exception
-     *   When module is not found.
+
      */
     public function getModuleOption()
     {
@@ -98,19 +67,35 @@ public function getModuleOption()
             $module = $this->moduleQuestion();
             $input->setOption('module', $module);
         } else {
-            $missing_modules = $this->validator->getMissingModules([$module]);
-            if ($missing_modules) {
-                throw new \Exception(
-                    sprintf(
-                        $this->trans(
-                            'commands.module.download.messages.no-releases'
-                        ),
-                        $module
-                    )
-                );
-            }
+            $this->validateModule($module);
         }
 
         return $module;
     }
+
+    /**
+     * Validate module.
+     *
+     * @param string $module
+     *   Module name.
+     * @return string
+     *   Module name.
+     *
+     * @throws \Exception
+     *   When module is not found.
+     */
+    public function validateModule($module) {
+        $missing_modules = $this->validator->getMissingModules([$module]);
+        if ($missing_modules) {
+            throw new \Exception(
+                sprintf(
+                    $this->trans(
+                        'commands.module.download.messages.no-releases'
+                    ),
+                    $module
+                )
+            );
+        }
+        return $module;
+    }
 }
diff --git a/vendor/drupal/console/src/Command/Shared/ProjectDownloadTrait.php b/vendor/drupal/console/src/Command/Shared/ProjectDownloadTrait.php
index 88b5cff6e82632af8ef9f3130f9bdce62a744fbb..c0eb841afe45f9b77d6c9e3e8d88920d4a25f020 100644
--- a/vendor/drupal/console/src/Command/Shared/ProjectDownloadTrait.php
+++ b/vendor/drupal/console/src/Command/Shared/ProjectDownloadTrait.php
@@ -37,7 +37,7 @@ public function modulesQuestion()
                 true
             );
 
-            if (empty($moduleName) && is_numeric($moduleName)) {
+            if (empty($moduleName) || is_numeric($moduleName)) {
                 break;
             }
 
@@ -69,7 +69,7 @@ public function modulesUninstallQuestion()
                 true
             );
 
-            if (empty($moduleName) || is_numeric($modules)) {
+            if (empty($moduleName) || is_numeric($moduleName)) {
                 break;
             }
 
@@ -128,6 +128,49 @@ private function downloadModules($modules, $latest, $path = null, $resultList =
 
         return $this->downloadModules($dependencies, $latest, $path, $resultList);
     }
+    
+    private function downloadThemes($themes, $latest, $path = null, $resultList = [])
+    {
+        if (!$resultList) {
+            $resultList = [
+              'invalid' => [],
+              'uninstalled' => [],
+              'dependencies' => []
+            ];
+        }
+        drupal_static_reset('system_rebuild_module_data');
+
+        $missingThemes = $this->validator->getMissingThemes($themes);
+
+        $invalidModules = [];
+        if ($missingThemes) {
+            $this->getIo()->info(
+                sprintf(
+                    $this->trans('commands.theme.install.messages.theme-missing'),
+                    implode(', ', $missingThemes)
+                )
+            );
+            foreach ($missingThemes as $missingTheme) {
+                $version = $this->releasesQuestion($missingTheme, $latest);
+                if ($version) {
+                    $this->downloadProject($missingTheme, $version, 'theme', $path);
+                } else {
+                    $invalidModules[] = $missingTheme;
+                    unset($themes[array_search($missingTheme, $themes)]);
+                }
+                $this->extensionManager->discoverModules();
+            }
+        }
+        $this->themeHandler->install($themes);
+
+        $unInstalledThemes = $this->validator->getUninstalledThemes($themes);
+        
+        if (!$unInstalledThemes) {
+            return 0;
+        }else{
+            return $this->setInfoMessage('commands.theme.install.messages.theme-success', $missingThemes);
+        }
+    }
 
     protected function calculateDependencies($modules)
     {
@@ -166,7 +209,7 @@ public function downloadProject($project, $version, $type, $path = null)
 
         $this->getIo()->comment(
             sprintf(
-                $this->trans('commands.'.$commandKey.'.messages.downloading'),
+                $this->trans('commands.' . $commandKey . '.messages.downloading'),
                 $project,
                 $version
             )
@@ -201,7 +244,7 @@ public function downloadProject($project, $version, $type, $path = null)
             }
 
             $zippy = Zippy::load();
-            if (PHP_OS === "WIN32" || PHP_OS === "WINNT") {
+            if (PHP_OS === 'WIN32' || PHP_OS === 'WINNT') {
                 $container = AdapterContainer::load();
                 $container['Drupal\\Console\\Zippy\\Adapter\\TarGzGNUTarForWindowsAdapter'] = function ($container) {
                     return TarGzGNUTarForWindowsAdapter::newInstance(
@@ -263,17 +306,17 @@ public function releasesQuestion($project, $latest = false, $stable = false)
 
         $this->getIo()->comment(
             sprintf(
-                $this->trans('commands.'.$commandKey.'.messages.getting-releases'),
+                $this->trans('commands.' . $commandKey . '.messages.getting-releases'),
                 implode(',', [$project])
             )
         );
 
-        $releases = $this->drupalApi->getProjectReleases($project, $latest?1:15, $stable);
+        $releases = $this->drupalApi->getProjectReleases($project, $latest? 1 : 15, $stable);
 
         if (!$releases) {
             $this->getIo()->error(
                 sprintf(
-                    $this->trans('commands.'.$commandKey.'.messages.no-releases'),
+                    $this->trans('commands.' . $commandKey . '.messages.no-releases'),
                     implode(',', [$project])
                 )
             );
@@ -286,7 +329,7 @@ public function releasesQuestion($project, $latest = false, $stable = false)
         }
 
         $version = $this->getIo()->choice(
-            $this->trans('commands.'.$commandKey.'.messages.select-release'),
+            $this->trans('commands.' . $commandKey . '.messages.select-release'),
             $releases
         );
 
@@ -303,7 +346,7 @@ private function getExtractPath($type)
         case 'module':
             return 'modules/contrib';
         case 'theme':
-            return 'themes';
+            return 'themes/contrib';
         case 'profile':
             return 'profiles';
         case 'core':
diff --git a/vendor/drupal/console/src/Command/Shared/RestTrait.php b/vendor/drupal/console/src/Command/Shared/RestTrait.php
index a174d028cf91c61a9208edea1f5004270bc185d7..4470c25b52b8b06b4ed11024ba3fcac1d553803c 100644
--- a/vendor/drupal/console/src/Command/Shared/RestTrait.php
+++ b/vendor/drupal/console/src/Command/Shared/RestTrait.php
@@ -49,8 +49,8 @@ public function getRestResources($rest_status = false)
 
     public function getRestDrupalConfig()
     {
-        if ($this->configFactory) {
-            return $this->configFactory->get('rest.settings')->get('resources') ?: [];
+        if ($this->entityTypeManager) {
+            return $this->entityTypeManager->getStorage('rest_resource_config')->loadMultiple() ?: [];
         }
 
         return null;
diff --git a/vendor/drupal/console/src/Command/Shared/ThemeTrait.php b/vendor/drupal/console/src/Command/Shared/ThemeTrait.php
new file mode 100644
index 0000000000000000000000000000000000000000..83ef6a83d589b7146b23c5f9f01cdab730210094
--- /dev/null
+++ b/vendor/drupal/console/src/Command/Shared/ThemeTrait.php
@@ -0,0 +1,88 @@
+<?php
+
+namespace Drupal\Console\Command\Shared;
+
+/**
+ * Class ThemeTrait
+ *
+ * @package Drupal\Console\Command
+ */
+trait ThemeTrait
+{
+    /**
+     * Ask the user to choose a theme.
+     * 
+     * @throws \Exception
+     *   When no modules are found.
+     *
+     * @return string
+     */
+    public function themeQuestion()
+    {
+        $themes = $this->extensionManager->discoverThemes()
+            ->showInstalled()
+            ->showNoCore()
+            ->getList(true);
+
+        if (empty($themes)) {
+            throw new \Exception('No themes installed available');
+        }
+
+        $theme = $this->getIo()->choiceNoList(
+            $this->trans('commands.common.questions.theme'),
+            $themes
+        );
+
+        return $theme;
+    }
+
+    /**
+     * Get theme name from user.
+     *
+     * @return mixed|string
+     *   Theme name.
+
+     */
+    public function getThemeOption()
+    {
+        $input = $this->getIo()->getInput();
+        $theme = $input->getOption('theme');
+        if (!$theme) {
+            // @see Drupal\Console\Command\Shared\ThemeTrait::themeQuestion
+            $theme = $this->themeQuestion();
+            $input->setOption('theme', $theme);
+        } else {
+            $this->validatetheme($theme);
+        }
+
+        return $theme;
+    }
+
+    /**
+     * Validate theme.
+     *
+     * @param string $theme
+     *   Theme name.
+     * @return string
+     *   Theme name.
+     *
+     * @throws \Exception
+     *   When theme is not found.
+     */
+    public function validateTheme($theme)
+    {
+        $missing_themes = $this->validator->getMissingThemes([$theme]);
+        if ($missing_themes) {
+            throw new \Exception(
+                sprintf(
+                    $this->trans(
+                        'commands.common.messages.theme'
+                    ),
+                    $theme
+                )
+            );
+        }
+        return $theme;
+    }
+
+}
diff --git a/vendor/drupal/console/src/Command/Shared/UpdateTrait.php b/vendor/drupal/console/src/Command/Shared/UpdateTrait.php
new file mode 100644
index 0000000000000000000000000000000000000000..37a3d0926ac3d8154a675cd98a67917f40cae809
--- /dev/null
+++ b/vendor/drupal/console/src/Command/Shared/UpdateTrait.php
@@ -0,0 +1,111 @@
+<?php
+
+/**
+ * @file
+ * Contains Drupal\Console\Command\Shared\ThemeRegionTrait.
+ */
+
+namespace Drupal\Console\Command\Shared;
+
+trait UpdateTrait
+{
+    /**
+     * @param array $updates
+     * @param string $messageKey
+     * @return mixed
+     */
+    public function showUpdateTable($updates, $messageKey)
+    {
+        if(!$updates) {
+            return 1;
+        }
+
+        $this->getIo()->info($messageKey);
+        $tableHeader = [
+            $this->trans('commands.debug.update.messages.module'),
+            $this->trans('commands.debug.update.messages.update-n'),
+            $this->trans('commands.debug.update.messages.description')
+        ];
+        $tableRows = [];
+        foreach ($updates as $module => $module_updates) {
+            foreach ($module_updates['pending'] as $update_n => $update) {
+                list(, $description) = explode($update_n . " - ", $update);
+                $tableRows[] = [
+                    $module,
+                    $update_n,
+                    trim($description),
+                ];
+            }
+        }
+        $this->getIo()->table($tableHeader, $tableRows);
+    }
+
+    /**
+     * @param array $postUpdates
+     * @param string $messageKey
+     * @return mixed
+     */
+    public function showPostUpdateTable($postUpdates, $messageKey)
+    {
+        if(!$postUpdates) {
+            return 1;
+        }
+
+        $this->getIo()->info($messageKey);
+        $tableHeader = [
+            $this->trans('commands.debug.update.messages.module'),
+            $this->trans('commands.debug.update.messages.post-update'),
+            $this->trans('commands.debug.update.messages.description')
+        ];
+
+        $tableRows = [];
+        foreach ($postUpdates as $module => $module_updates) {
+            foreach ($module_updates['pending'] as $postUpdateFunction => $message) {
+                $tableRows[] = [
+                    $module,
+                    $postUpdateFunction,
+                    $message,
+                ];
+            }
+        }
+        $this->getIo()->table($tableHeader, $tableRows);
+    }
+
+    /**
+     * @param array $composerUpdates
+     * @param boolean $onlyDrupal
+     * @param string $messageKey
+     * @return mixed
+     */
+    public function showComposerUpdateTable($composerUpdates, $onlyDrupal, $messageKey)
+    {
+        if(!$composerUpdates) {
+            return 1;
+        }
+
+        $this->getIo()->info($messageKey);
+        $tableHeader = [
+            $this->trans('commands.debug.update.composer.messages.name'),
+            $this->trans('commands.debug.update.composer.messages.current-version'),
+            $this->trans('commands.debug.update.composer.messages.latest-version'),
+            $this->trans('commands.debug.update.composer.messages.description')
+        ];
+
+        $tableRows = [];
+        foreach ($composerUpdates as $key => $values) {
+            if($onlyDrupal){
+                if(strpos($values->name, 'drupal/') === false ){
+                    continue;
+                }
+            }
+
+            $tableRows[] = [
+                $values->name,
+                $values->version,
+                $values->latest,
+                $values->description,
+            ];
+        }
+        $this->getIo()->table($tableHeader, $tableRows);
+    }
+}
diff --git a/vendor/drupal/console/src/Command/Site/InstallCommand.php b/vendor/drupal/console/src/Command/Site/InstallCommand.php
index 0a5254079e574459ac6b1c67e9c2f3707296bf71..996dea0496f4545565b0a1c63c610482a8607d11 100644
--- a/vendor/drupal/console/src/Command/Site/InstallCommand.php
+++ b/vendor/drupal/console/src/Command/Site/InstallCommand.php
@@ -7,7 +7,6 @@
 
 namespace Drupal\Console\Command\Site;
 
-use Symfony\Component\Filesystem\Filesystem;
 use Symfony\Component\Config\Definition\Exception\Exception;
 use Symfony\Component\Console\Input\InputArgument;
 use Symfony\Component\Console\Input\InputOption;
@@ -78,6 +77,11 @@ protected function configure()
                 InputArgument::OPTIONAL,
                 $this->trans('commands.site.install.arguments.profile')
             )
+            ->addArgument(
+                'db-url',
+                InputArgument::OPTIONAL,
+                $this->trans('commands.site.install.arguments.db-url')
+            )
             ->addOption(
                 'langcode',
                 null,
@@ -176,6 +180,14 @@ protected function configure()
      */
     protected function interact(InputInterface $input, OutputInterface $output)
     {
+        // If Drupal is already installed, and --force is not set, there's no
+        // point to continue.
+        $database = Database::getConnectionInfo();
+        if (!empty($database['default'])  && Database::isActiveConnection() && !$input->getOption('force')) {
+            $this->getIo()->error($this->trans('commands.site.install.messages.already-installed'));
+            exit(1);
+        }
+
         // --profile option
         $profile = $input->getArgument('profile');
         if (!$profile) {
@@ -219,9 +231,42 @@ function ($profile) {
             $input->setOption('langcode', $langcode);
         }
 
-        // Use default database setting if is available
-        $database = Database::getConnectionInfo();
-        if (empty($database['default'])) {
+        $is_database_info_set = false;
+
+        // Use default database setting if they are available.
+        if (!empty($database['default'])) {
+            $this->getIo()->info(
+                sprintf(
+                    $this->trans('commands.site.install.messages.using-current-database'),
+                    $database['default']['driver'],
+                    $database['default']['database'],
+                    $database['default']['username']
+                )
+            );
+            $is_database_info_set = true;
+        }
+
+        // Use the db-url argument if it is entered and valid.
+        if (!$is_database_info_set && !empty($input->getArgument('db-url'))) {
+            try {
+                $database = Database::convertDbUrlToConnectionInfo($input->getArgument('db-url'), $this->appRoot);
+                $this->getIo()->info(
+                    sprintf(
+                        $this->trans('commands.site.install.messages.using-current-database'),
+                        $database['driver'],
+                        $database['database'],
+                        $database['username']
+                    )
+                );
+                $is_database_info_set = true;
+            } catch (\Exception $e) {
+                $this->getIo()->warning('Invalid db-url argument: ' . $e->getMessage());
+            }
+        }
+
+        // Interact if database info is still not available
+        if (!$is_database_info_set) {
+
             // --db-type option
             $dbType = $input->getOption('db-type');
             if (!$dbType) {
@@ -236,79 +281,51 @@ function ($profile) {
                         $dbType = $dbIndex;
                     }
                 }
-
                 $input->setOption('db-type', $dbType);
             }
 
             if ($dbType === 'sqlite') {
                 // --db-file option
-                $dbFile = $input->getOption('db-file');
-                if (!$dbFile) {
+                if (!$input->getOption('db-file')) {
+                    $uri = $this->site->getMultisiteName($input);
+                    $uriPath = $this->site->multisiteMode($uri) ? $this->site->getMultisiteDir($uri) : 'default';
                     $dbFile = $this->getIo()->ask(
                         $this->trans('commands.migrate.execute.questions.db-file'),
-                        'sites/default/files/.ht.sqlite'
+                        'sites/'.$uriPath.'/files/.ht.sqlite'
                     );
                     $input->setOption('db-file', $dbFile);
                 }
             } else {
                 // --db-host option
-                $dbHost = $input->getOption('db-host');
-                if (!$dbHost) {
-                    $dbHost = $this->dbHostQuestion();
-                    $input->setOption('db-host', $dbHost);
+                if (!$input->getOption('db-host')) {
+                    $input->setOption('db-host', $this->dbHostQuestion());
                 }
 
                 // --db-name option
-                $dbName = $input->getOption('db-name');
-                if (!$dbName) {
-                    $dbName = $this->dbNameQuestion();
-                    $input->setOption('db-name', $dbName);
+                if (!$input->getOption('db-name')) {
+                    $input->setOption('db-name', $this->dbNameQuestion());
                 }
 
                 // --db-user option
-                $dbUser = $input->getOption('db-user');
-                if (!$dbUser) {
-                    $dbUser = $this->dbUserQuestion();
-                    $input->setOption('db-user', $dbUser);
+                if (!$input->getOption('db-user')) {
+                    $input->setOption('db-user', $this->dbUserQuestion());
                 }
 
                 // --db-pass option
-                $dbPass = $input->getOption('db-pass');
-                if (!$dbPass) {
-                    $dbPass = $this->dbPassQuestion();
-                    $input->setOption('db-pass', $dbPass);
+                if (!$input->getOption('db-pass')) {
+                    $input->setOption('db-pass', $this->dbPassQuestion());
                 }
 
-                // --db-port prefix
-                $dbPort = $input->getOption('db-port');
-                if (!$dbPort) {
-                    $dbPort = $this->dbPortQuestion();
-                    $input->setOption('db-port', $dbPort);
+                // --db-port option
+                if (!$input->getOption('db-port')) {
+                    $input->setOption('db-port', $this->dbPortQuestion());
                 }
             }
 
-            // --db-prefix
-            $dbPrefix = $input->getOption('db-prefix');
-            if (!$dbPrefix) {
-                $dbPrefix = $this->dbPrefixQuestion();
-                $input->setOption('db-prefix', $dbPrefix);
+            // --db-prefix option
+            if ($input->getOption('db-prefix') === null) {
+                $input->setOption('db-prefix', $this->dbPrefixQuestion());
             }
-        } else {
-            $input->setOption('db-type', $database['default']['driver']);
-            $input->setOption('db-host', $database['default']['host']);
-            $input->setOption('db-name', $database['default']['database']);
-            $input->setOption('db-user', $database['default']['username']);
-            $input->setOption('db-pass', $database['default']['password']);
-            $input->setOption('db-port', $database['default']['port']);
-            $input->setOption('db-prefix', $database['default']['prefix']['default']);
-            $this->getIo()->info(
-                sprintf(
-                    $this->trans('commands.site.install.messages.using-current-database'),
-                    $database['default']['driver'],
-                    $database['default']['database'],
-                    $database['default']['username']
-                )
-            );
         }
 
         // --site-name option
@@ -366,7 +383,7 @@ function ($profile) {
      */
     protected function execute(InputInterface $input, OutputInterface $output)
     {
-        $uri = parse_url($input->getParameterOption(['--uri', '-l'], 'default'), PHP_URL_HOST);
+        $uri = $this->site->getMultisiteName($input);
 
         if ($this->site->multisiteMode($uri)) {
             if (!$this->site->validMultisite($uri)) {
@@ -381,45 +398,61 @@ protected function execute(InputInterface $input, OutputInterface $output)
             $_SERVER['HTTP_HOST'] = $uri;
         }
 
-        // Database options
-        $dbType = $input->getOption('db-type')?:'mysql';
-        $dbFile = $input->getOption('db-file');
-        $dbHost = $input->getOption('db-host')?:'127.0.0.1';
-        $dbName = $input->getOption('db-name')?:'drupal_'.time();
-        $dbUser = $input->getOption('db-user')?:'root';
-        $dbPass = $input->getOption('db-pass');
-        $dbPrefix = $input->getOption('db-prefix');
-        $dbPort = $input->getOption('db-port')?:'3306';
-        $force = $input->getOption('force');
-
-        $databases = $this->site->getDatabaseTypes();
-
-        if ($dbType === 'sqlite') {
-            $database = [
-              'database' => $dbFile,
-              'prefix' => $dbPrefix,
-              'namespace' => $databases[$dbType]['namespace'],
-              'driver' => $dbType,
-            ];
+        $database_install = null;
 
-            if ($force) {
-                $fs = new Filesystem();
-                $fs->remove($dbFile);
+        // If a database connection is already defined we must use that.
+        $database = Database::getConnectionInfo();
+        if (!empty($database['default'])) {
+            $database_install = $database['default'];
+        }
+
+        // Use the db-url argument if it is entered and valid
+        if (!$database_install && !empty($input->getArgument('db-url'))) {
+            try {
+                $database_install = Database::convertDbUrlToConnectionInfo($input->getArgument('db-url'), $this->appRoot);
+            } catch (\Exception $e) {
+                $this->getIo()->error('Invalid db-url argument: ' . $e->getMessage());
+                return 1;
             }
-        } else {
-            $database = [
-              'database' => $dbName,
-              'username' => $dbUser,
-              'password' => $dbPass,
-              'prefix' => $dbPrefix,
-              'port' => $dbPort,
-              'host' => $dbHost,
-              'namespace' => $databases[$dbType]['namespace'],
-              'driver' => $dbType,
+        }
+
+        // Go for the options passed in if still not defined
+        if (!$database_install) {
+            $database_install = [
+                'database' => $input->getOption('db-name')?:'drupal_'.time(),
+                'username' => $input->getOption('db-user')?:'root',
+                'password' => $input->getOption('db-pass'),
+                'prefix' => $input->getOption('db-prefix'),
+                'port' => $input->getOption('db-port')?:'3306',
+                'host' => $input->getOption('db-host')?:'127.0.0.1',
+                'driver' => $input->getOption('db-type')?:'mysql',
             ];
 
-            if ($force && Database::isActiveConnection()) {
-                $schema = Database::getConnection()->schema();
+            if ($database_install['driver'] === 'sqlite') {
+                $uriPath = $this->site->multisiteMode($uri) ? $this->site->getMultisiteDir($uri) : 'default';
+                $dbFile = $input->getOption('db-file')?:'sites/'.$uriPath.'/files/.ht.sqlite';
+
+                $database_install['database'] = $dbFile;
+                unset(
+                    $database_install['username'],
+                    $database_install['password'],
+                    $database_install['port'],
+                    $database_install['host']
+                );
+            }
+        }
+
+        // Cleanup an installed database.
+        if ($input->getOption('force') && Database::isActiveConnection()) {
+            $connection = Database::getConnection();
+            if ($connection->driver() === 'sqlite') {
+                $tables = $connection->query('SELECT name FROM sqlite_master WHERE type = "table" AND name NOT LIKE "sqlite_%";')
+                    ->fetchAllAssoc('name');
+                foreach (array_keys($tables) as $table) {
+                    $connection->schema()->dropTable($table);
+                }
+            } else {
+                $schema = $connection->schema();
                 $tables = $schema->findTables('%');
                 foreach ($tables as $table) {
                     $schema->dropTable($table);
@@ -430,7 +463,9 @@ protected function execute(InputInterface $input, OutputInterface $output)
         try {
             $drupalFinder = new DrupalFinder();
             $drupalFinder->locateRoot(getcwd());
-            $this->runInstaller($database, $uri);
+            if (($exitCode = $this->runInstaller($database_install, $uri)) !== 0) {
+                return $exitCode;
+            }
 
             $autoload = $this->container->get('class_loader');
             $drupal = new Drupal(
@@ -493,6 +528,12 @@ protected function restoreSitesFile()
     }
 
     protected function runInstaller($database, $uri) {
+
+        if(!Database::isActiveConnection() && !is_null(Database::getConnectionInfo())) {
+            $this->getIo()->error($this->trans('commands.site.install.messages.connection-failed'));
+            return 1;
+        }
+
         $input = $this->getIo()->getInput();
         $this->site->loadLegacyFile('/core/includes/install.core.inc');
 
@@ -544,7 +585,7 @@ protected function runInstaller($database, $uri) {
             $this->getIo()->error($this->trans('commands.site.install.messages.already-installed'));
             return 1;
         } catch (\Exception $e) {
-            $this->getIo()->error($e->getMessage());
+            $this->getIo()->error(html_entity_decode(strip_tags($e->getMessage()), ENT_QUOTES));
             return 1;
         }
 
@@ -556,4 +597,5 @@ protected function runInstaller($database, $uri) {
 
         return 0;
     }
+
 }
diff --git a/vendor/drupal/console/src/Command/Site/MaintenanceCommand.php b/vendor/drupal/console/src/Command/Site/MaintenanceCommand.php
index c94368a5e5a3a5cc8966eb972872d68b3ac9488b..3e189418986b3a6f03b2894c1261bc6ba3a9a2dc 100644
--- a/vendor/drupal/console/src/Command/Site/MaintenanceCommand.php
+++ b/vendor/drupal/console/src/Command/Site/MaintenanceCommand.php
@@ -7,14 +7,14 @@
 
 namespace Drupal\Console\Command\Site;
 
+use Drupal\Console\Core\Command\Command;
+use Drupal\Console\Core\Utils\ChainQueue;
+use Drupal\Core\State\StateInterface;
 use Symfony\Component\Console\Input\InputArgument;
 use Symfony\Component\Console\Input\InputInterface;
 use Symfony\Component\Console\Output\OutputInterface;
-use Drupal\Console\Core\Command\ContainerAwareCommand;
-use Drupal\Core\State\StateInterface;
-use Drupal\Console\Core\Utils\ChainQueue;
 
-class MaintenanceCommand extends ContainerAwareCommand
+class MaintenanceCommand extends Command
 {
     /**
      * @var StateInterface
@@ -66,7 +66,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
             $this->state->set($stateName, true);
             $modeMessage = 'commands.site.maintenance.messages.maintenance-on';
         }
-        if ('OFF' === strtoupper($mode)) {
+        else if ('OFF' === strtoupper($mode)) {
             $this->state->set($stateName, false);
             $modeMessage = 'commands.site.maintenance.messages.maintenance-off';
         }
diff --git a/vendor/drupal/console/src/Command/Site/ModeCommand.php b/vendor/drupal/console/src/Command/Site/ModeCommand.php
index b91d4944009860343dc95b8ca99487c2863bdf15..2c765b92e2bc803c104a940cc2ed44bc1e86434e 100644
--- a/vendor/drupal/console/src/Command/Site/ModeCommand.php
+++ b/vendor/drupal/console/src/Command/Site/ModeCommand.php
@@ -7,16 +7,16 @@
 
 namespace Drupal\Console\Command\Site;
 
+use Drupal\Console\Core\Command\Command;
+use Drupal\Console\Core\Utils\ChainQueue;
+use Drupal\Console\Core\Utils\ConfigurationManager;
+use Drupal\Core\Config\ConfigFactory;
 use Symfony\Component\Console\Input\InputArgument;
 use Symfony\Component\Console\Input\InputInterface;
 use Symfony\Component\Console\Output\OutputInterface;
 use Symfony\Component\Yaml\Yaml;
-use Drupal\Console\Core\Command\ContainerAwareCommand;
-use Drupal\Console\Core\Utils\ConfigurationManager;
-use Drupal\Core\Config\ConfigFactory;
-use Drupal\Console\Core\Utils\ChainQueue;
 
-class ModeCommand extends ContainerAwareCommand
+class ModeCommand extends Command
 {
     /**
      * @var ConfigFactory
diff --git a/vendor/drupal/console/src/Command/Site/StatisticsCommand.php b/vendor/drupal/console/src/Command/Site/StatisticsCommand.php
index 04880b3181c9cdc3daf0ed82a1a823589e9b8951..5174c30fa30621fd9c2ca28195206f3a7bc4a0ea 100644
--- a/vendor/drupal/console/src/Command/Site/StatisticsCommand.php
+++ b/vendor/drupal/console/src/Command/Site/StatisticsCommand.php
@@ -7,31 +7,26 @@
 
 namespace Drupal\Console\Command\Site;
 
-use Symfony\Component\Console\Input\InputInterface;
-use Symfony\Component\Console\Output\OutputInterface;
-use Drupal\Console\Core\Command\ContainerAwareCommand;
-use Drupal\Console\Utils\DrupalApi;
-use Drupal\Core\Entity\Query\QueryFactory;
+use Drupal\Console\Core\Command\Command;
 use Drupal\Console\Extension\Manager;
+use Drupal\Console\Utils\DrupalApi;
 use Drupal\Core\Extension\ModuleHandlerInterface;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+use Drupal\Core\Entity\EntityTypeManagerInterface;
 
 /**
  * Class StatisticsCommand
  *
  * @package Drupal\Console\Command\Site
  */
-class StatisticsCommand extends ContainerAwareCommand
+class StatisticsCommand extends Command
 {
     /**
      * @var DrupalApi
      */
     protected $drupalApi;
 
-    /**
-     * @var QueryFactory
-     */
-    protected $entityQuery;
-
     /**
      * @var Manager
      */
@@ -42,22 +37,26 @@ class StatisticsCommand extends ContainerAwareCommand
      */
     protected $moduleHandler;
 
+    /**
+     * @var EntityTypeManagerInterface
+     */
+    protected $entityTypeManager;
+
     /**
      * StatisticsCommand constructor.
      *
-     * @param DrupalApi              $drupalApi
-     * @param QueryFactory           $entityQuery;
-     * @param Manager                $extensionManager
+     * @param DrupalApi $drupalApi
+     * @param Manager $extensionManager
      * @param ModuleHandlerInterface $moduleHandler
      */
     public function __construct(
         DrupalApi $drupalApi,
-        QueryFactory $entityQuery,
+        EntityTypeManagerInterface $entityTypeManager,
         Manager $extensionManager,
         ModuleHandlerInterface $moduleHandler
     ) {
         $this->drupalApi = $drupalApi;
-        $this->entityQuery = $entityQuery;
+        $this->entityTypeManager = $entityTypeManager;
         $this->extensionManager = $extensionManager;
         $this->moduleHandler = $moduleHandler;
         parent::__construct();
@@ -73,7 +72,6 @@ public function configure()
             ->setDescription($this->trans('commands.site.statistics.description'))
             ->setHelp($this->trans('commands.site.statistics.help'))
             ->setAliases(['sst']);
-        ;
     }
 
     /**
@@ -81,98 +79,63 @@ public function configure()
      */
     protected function execute(InputInterface $input, OutputInterface $output)
     {
-        $bundles = $this->drupalApi->getBundles();
-        foreach ($bundles as $bundleType => $bundleName) {
-            $key = sprintf(
-                $this->trans('commands.site.statistics.messages.node-type'),
-                $bundleName
-            );
-            $statistics[$key] = $this->getNodeTypeCount($bundleType);
+        $statistics = [];
+        if ($this->moduleHandler->moduleExists('node')) {
+            $bundles = $this->drupalApi->getBundles();
+            foreach ($bundles as $bundleType => $bundleName) {
+                $key = sprintf(
+                    $this->trans('commands.site.statistics.messages.node-type'),
+                    $bundleName
+                );
+                $statistics[$key] = $this->getEntitiesCount('node', [
+                    'name' => 'type',
+                    'value' => $bundleType,
+                    'condition' => '=',
+                ]);
+            }
         }
-        $statistics[$this->trans('commands.site.statistics.messages.comments')] = $this->getCommentCount();
-        $statistics[$this->trans('commands.site.statistics.messages.vocabulary')] = $this->getTaxonomyVocabularyCount();
-        $statistics[$this->trans('commands.site.statistics.messages.taxonomy-terms')] = $this->getTaxonomyTermCount();
-        $statistics[$this->trans('commands.site.statistics.messages.files')] = $this->getFileCount();
-        $statistics[$this->trans('commands.site.statistics.messages.users')] = $this->getUserCount();
-        $statistics[$this->trans('commands.site.statistics.messages.views')] = $this->getViewCount();
-        $statistics[$this->trans('commands.site.statistics.messages.modules-enabled')] = $this->getModuleCount(true);
-        $statistics[$this->trans('commands.site.statistics.messages.modules-disabled')] = $this->getModuleCount(false);
-        $statistics[$this->trans('commands.site.statistics.messages.themes-enabled')] = $this->getThemeCount(true);
-        $statistics[$this->trans('commands.site.statistics.messages.themes-disabled')] = $this->getThemeCount(false);
 
-        $this->statisticsList($statistics);
-    }
-
-
-    /**
-     * @param $nodeType
-     * @return mixed
-     */
-    private function getNodeTypeCount($nodeType)
-    {
-        $nodesPerType = $this->entityQuery->get('node')->condition('type', $nodeType)->count();
-        $nodes = $nodesPerType->execute();
-
-        return $nodes;
-    }
-
-    /**
-     * @return mixed
-     */
-    private function getCommentCount()
-    {
-        if (!$this->moduleHandler->moduleExists('comment')) {
-            return 0;
+        if ($this->moduleHandler->moduleExists('comment')) {
+            $statistics[$this->trans('commands.site.statistics.messages.comments')] = $this->getEntitiesCount('comment');
         }
-        
-        $entityQuery = $this->entityQuery->get('comment')->count();
-        $comments = $entityQuery->execute();
-
-        return $comments;
-    }
 
-    /**
-     * @return mixed
-     */
-    private function getTaxonomyVocabularyCount()
-    {
-        $entityQuery = $this->entityQuery->get('taxonomy_vocabulary')->count();
-        $vocabularies = $entityQuery->execute();
+        if ($this->moduleHandler->moduleExists('taxonomy')) {
+            $statistics[$this->trans('commands.site.statistics.messages.vocabulary')] = $this->getEntitiesCount('taxonomy_vocabulary');
+            $statistics[$this->trans('commands.site.statistics.messages.taxonomy-terms')] = $this->getEntitiesCount('taxonomy_term');
+        }
 
-        return $vocabularies;
-    }
+        if ($this->moduleHandler->moduleExists('file')) {
+            $statistics[$this->trans('commands.site.statistics.messages.files')] = $this->getEntitiesCount('file');
+        }
 
-    /**
-     * @return mixed
-     */
-    private function getTaxonomyTermCount()
-    {
-        $entityQuery = $this->entityQuery->get('taxonomy_term')->count();
-        $terms = $entityQuery->execute();
+        if ($this->moduleHandler->moduleExists('user')) {
+            $statistics[$this->trans('commands.site.statistics.messages.users')] = $this->getEntitiesCount('user');
+        }
 
-        return $terms;
-    }
+        if ($this->moduleHandler->moduleExists('views')) {
+            $statistics[$this->trans('commands.site.statistics.messages.views')] = $this->getEntitiesCount('view', [
+                'name' => 'tag',
+                'value' => 'default',
+                'condition' => '<>',
+            ]);
+        }
 
-    /**
-     * @return mixed
-     */
-    private function getFileCount()
-    {
-        $entityQuery = $this->entityQuery->get('file')->count();
-        $files = $entityQuery->execute();
+        $statistics[$this->trans('commands.site.statistics.messages.modules-enabled')] = $this->getModuleCount(true);
+        $statistics[$this->trans('commands.site.statistics.messages.modules-disabled')] = $this->getModuleCount(false);
+        $statistics[$this->trans('commands.site.statistics.messages.themes-enabled')] = $this->getThemeCount(true);
+        $statistics[$this->trans('commands.site.statistics.messages.themes-disabled')] = $this->getThemeCount(false);
 
-        return $files;
+        $this->statisticsList($statistics);
     }
 
-    /**
-     * @return mixed
-     */
-    private function getUserCount()
+    private function getEntitiesCount($entity_type, $condition = [])
     {
-        $entityQuery = $this->entityQuery->get('user')->count();
-        $users = $entityQuery->execute();
+        $entityQuery = $this->entityTypeManager->getStorage($entity_type)->getQuery()->count();
+        if (!empty($condition)) {
+            $entityQuery->condition($condition['name'], $condition['value'], $condition['condition']);
+        }
 
-        return $users;
+        return $entityQuery->execute();
     }
 
     /**
@@ -181,11 +144,8 @@ private function getUserCount()
      */
     private function getModuleCount($status = true)
     {
-        if ($status) {
-            return count($this->extensionManager->discoverModules()->showCore()->showNoCore()->showInstalled()->getList());
-        }
-
-        return count($this->extensionManager->discoverModules()->showCore()->showNoCore()->showUninstalled()->getList());
+        $this->extensionManager->discoverModules();
+        return $this->getExtensionCount($status);
     }
 
     /**
@@ -194,30 +154,28 @@ private function getModuleCount($status = true)
      */
     private function getThemeCount($status = true)
     {
-        if ($status) {
-            return count($this->extensionManager->discoverThemes()->showCore()->showNoCore()->showInstalled()->getList());
-        }
-
-        return count($this->extensionManager->discoverThemes()->showCore()->showNoCore()->showUninstalled()->getList());
+        $this->extensionManager->discoverThemes();
+        return $this->getExtensionCount($status);
     }
 
-    /**
-     * @return mixed
-     */
-    private function getViewCount($status = true, $tag = 'default')
+    private function getExtensionCount($status = true)
     {
-        $entityQuery = $this->entityQuery->get('view')->condition('tag', 'default', '<>')->count();
-        $views = $entityQuery->execute();
+        $this->extensionManager->showCore()->showNoCore();
+        if ($status) {
+            $this->extensionManager->showInstalled();
+        } else {
+            $this->extensionManager->showUninstalled();
+        }
 
-        return $views;
+        return count($this->extensionManager->getList());
     }
 
     /**
-     * @param mixed       $statistics
+     * @param mixed $statistics
      */
     private function statisticsList($statistics)
     {
-        $tableHeader =[
+        $tableHeader = [
             $this->trans('commands.site.statistics.messages.stat-name'),
             $this->trans('commands.site.statistics.messages.stat-quantity'),
         ];
@@ -225,8 +183,8 @@ private function statisticsList($statistics)
         $tableRows = [];
         foreach ($statistics as $type => $amount) {
             $tableRows[] = [
-              $type,
-              $amount
+                $type,
+                $amount
             ];
         }
 
diff --git a/vendor/drupal/console/src/Command/Site/StatusCommand.php b/vendor/drupal/console/src/Command/Site/StatusCommand.php
index be38be1aa2120b3fbacb6b78cb8a10f0a085f107..5c1939f46ae8ac7be034e4ba4d4559571b031074 100644
--- a/vendor/drupal/console/src/Command/Site/StatusCommand.php
+++ b/vendor/drupal/console/src/Command/Site/StatusCommand.php
@@ -16,6 +16,8 @@
 use Drupal\Core\Site\Settings;
 use Drupal\Core\Config\ConfigFactory;
 use Drupal\Core\Extension\ThemeHandler;
+use Drupal\Core\Render\RendererInterface;
+use Drupal\Core\StringTranslation\TranslatableMarkup;
 
 /**
  *  This command provides a report of the current drupal installation.
@@ -41,6 +43,20 @@ class StatusCommand extends ContainerAwareCommand
       'directory',
     ];
 
+    /**
+     * A list of system requirements to be skipped from output.
+     *
+     * @var array
+     */
+    protected $systemDataSkipList = [
+      // The PHP memory limit in CLI is different from the one available to the
+      // web server. Skip to avoid confusion.
+      'php_memory_limit',
+      // The web server cannot be determined in CLI since Drupal takes it from
+      // the $_SERVER variable in HTTP requests.
+      'webserver',
+    ];
+
     /**
      * @var SystemManager
      */
@@ -66,27 +82,35 @@ class StatusCommand extends ContainerAwareCommand
      */
     protected $appRoot;
 
+    /**
+     * @var RendererInterface
+     */
+    protected $renderer;
+
     /**
      * DebugCommand constructor.
      *
-     * @param SystemManager $systemManager
-     * @param Settings      $settings
-     * @param ConfigFactory $configFactory
-     * @param ThemeHandler  $themeHandler
+     * @param SystemManager     $systemManager
+     * @param Settings          $settings
+     * @param ConfigFactory     $configFactory
+     * @param ThemeHandler      $themeHandler
      * @param $appRoot
+     * @param RendererInterface $renderer
      */
     public function __construct(
         SystemManager $systemManager = null,
         Settings $settings,
         ConfigFactory $configFactory,
         ThemeHandler $themeHandler,
-        $appRoot
+        $appRoot,
+        RendererInterface $renderer
     ) {
         $this->systemManager = $systemManager;
         $this->settings = $settings;
         $this->configFactory = $configFactory;
         $this->themeHandler = $themeHandler;
         $this->appRoot = $appRoot;
+        $this->renderer = $renderer;
         parent::__construct();
     }
 
@@ -149,15 +173,45 @@ protected function getSystemData()
         $systemData = [];
 
         foreach ($requirements as $key => $requirement) {
-            if ($requirement['title'] instanceof \Drupal\Core\StringTranslation\TranslatableMarkup) {
+            if (in_array($key, $this->systemDataSkipList)) {
+                continue;
+            }
+
+            if ($requirement['title'] instanceof TranslatableMarkup) {
                 $title = $requirement['title']->render();
             } else {
                 $title = $requirement['title'];
             }
 
-            $systemData['system'][$title] = strip_tags($requirement['value']);
+            $value = !empty($requirement['value']) ? strip_tags($requirement['value']) : '';
+            if (isset($requirement['severity'])) {
+                switch ($requirement['severity']) {
+                    case SystemManager::REQUIREMENT_ERROR:
+                        $value = "<error>$value</error>";
+                        break;
+
+                    case SystemManager::REQUIREMENT_WARNING:
+                        $value = "<comment>$value</comment>";
+                        break;
+
+                }
+            }
+
+            if ($this->getIo()->isVerbose()) {
+                $description = !empty($requirement['description']) ? $requirement['description'] : null;
+                if ($description instanceof TranslatableMarkup) {
+                    $description = $description->render();
+                }
+                if (is_array($description)) {
+                    $description = $this->renderer->renderPlain($description);
+                }
+                $value .= $description ? ' (' . strip_tags($description) . ')' : '';
+            }
+
+            $systemData['system'][strip_tags($title)] = $value;
         }
 
+
         if ($this->settings) {
             try {
                 $hashSalt = $this->settings->getHashSalt();
@@ -174,26 +228,24 @@ protected function getSystemData()
     protected function getConnectionData()
     {
         $connectionInfo = Database::getConnectionInfo();
+        $has_password = FALSE;
 
         $connectionData = [];
         foreach ($this->connectionInfoKeys as $connectionInfoKey) {
-            if ("password" == $connectionInfoKey) {
+            if ('password' == $connectionInfoKey) {
+                $has_password = TRUE;
                 continue;
             }
 
-            $connectionKey = $this->trans('commands.site.status.messages.'.$connectionInfoKey);
-            $connectionData['database'][$connectionKey] = $connectionInfo['default'][$connectionInfoKey];
+            if (!empty($connectionInfo['default'][$connectionInfoKey])) {
+                $connectionKey = $this->trans('commands.site.status.messages.' . $connectionInfoKey);
+                $connectionData['database'][$connectionKey] = $connectionInfo['default'][$connectionInfoKey];
+            }
         }
 
-        $connectionData['database'][$this->trans('commands.site.status.messages.connection')] = sprintf(
-            '%s//%s:%s@%s%s/%s',
-            $connectionInfo['default']['driver'],
-            $connectionInfo['default']['username'],
-            $connectionInfo['default']['password'],
-            $connectionInfo['default']['host'],
-            $connectionInfo['default']['port'] ? ':'.$connectionInfo['default']['port'] : '',
-            $connectionInfo['default']['database']
-        );
+        $connection_url = Database::getConnectionInfoAsUrl();
+        $displayable_url = $has_password ? preg_replace('/(?<=:)([^@:]+)(?=@[^@]+$)/', '********', $connection_url, 1) : $connection_url;
+        $connectionData['database'][$this->trans('commands.site.status.messages.connection')] = $displayable_url;
 
         return $connectionData;
     }
@@ -204,8 +256,8 @@ protected function getThemeData()
 
         return [
           'theme' => [
-            $this->trans('commands.site.status.messages.theme_default') => $config->get('default'),
-            $this->trans('commands.site.status.messages.theme_admin') => $config->get('admin'),
+            $this->trans('commands.site.status.messages.theme-default') => $config->get('default'),
+            $this->trans('commands.site.status.messages.theme-admin') => $config->get('admin'),
           ],
         ];
     }
diff --git a/vendor/drupal/console/src/Command/Theme/DownloadCommand.php b/vendor/drupal/console/src/Command/Theme/DownloadCommand.php
index 9e77211e99492473f54c283256741952c6720b62..ddb5c488222821aabf2a95da6c19aae00899f8d4 100644
--- a/vendor/drupal/console/src/Command/Theme/DownloadCommand.php
+++ b/vendor/drupal/console/src/Command/Theme/DownloadCommand.php
@@ -7,16 +7,16 @@
 
 namespace Drupal\Console\Command\Theme;
 
+use Drupal\Console\Command\Shared\ProjectDownloadTrait;
+use Drupal\Console\Core\Command\ContainerAwareCommand;
+use Drupal\Console\Utils\DrupalApi;
+use GuzzleHttp\Client;
 use Symfony\Component\Console\Input\InputArgument;
 use Symfony\Component\Console\Input\InputOption;
 use Symfony\Component\Console\Input\InputInterface;
 use Symfony\Component\Console\Output\OutputInterface;
-use Drupal\Console\Core\Command\Command;
-use Drupal\Console\Command\Shared\ProjectDownloadTrait;
-use Drupal\Console\Utils\DrupalApi;
-use GuzzleHttp\Client;
 
-class DownloadCommand extends Command
+class DownloadCommand extends ContainerAwareCommand
 {
     use ProjectDownloadTrait;
 
@@ -73,12 +73,7 @@ protected function configure()
                 InputArgument::OPTIONAL,
                 $this->trans('commands.theme.download.arguments.version')
             )
-            ->addOption(
-                'composer',
-                null,
-                InputOption::VALUE_NONE,
-                $this->trans('commands.theme.download.options.composer')
-            )->setAliases(['thd']);
+            ->setAliases(['thd']);
     }
 
     /**
@@ -88,24 +83,14 @@ protected function execute(InputInterface $input, OutputInterface $output)
     {
         $theme = $input->getArgument('theme');
         $version = $input->getArgument('version');
-        $composer = $input->getOption('composer');
-
-        if ($composer) {
-            if (!is_array($theme)) {
-                $theme = [$theme];
-            }
-            $this->get('chain_queue')->addCommand(
-                'module:download',
-                [
-                'module' => $theme,
-                '--composer' => true
-                ],
-                true,
-                true
-            );
-        } else {
-            $this->downloadProject($theme, $version, 'theme');
+
+        if(!$version) {
+            return 1;
         }
+
+        $this->downloadProject($theme, $version, 'theme');
+
+        return 1;
     }
 
     /**
@@ -115,9 +100,8 @@ protected function interact(InputInterface $input, OutputInterface $output)
     {
         $theme = $input->getArgument('theme');
         $version = $input->getArgument('version');
-        $composer = $input->getOption('composer');
 
-        if (!$version && !$composer) {
+        if (!$version) {
             $version = $this->releasesQuestion($theme);
             $input->setArgument('version', $version);
         }
diff --git a/vendor/drupal/console/src/Command/Theme/InstallCommand.php b/vendor/drupal/console/src/Command/Theme/InstallCommand.php
index a63acc79f54c03bd6aafa80ef415c62c2002c0c2..aa6888a7a59cea601b2303e136553bbde5195ac8 100644
--- a/vendor/drupal/console/src/Command/Theme/InstallCommand.php
+++ b/vendor/drupal/console/src/Command/Theme/InstallCommand.php
@@ -12,9 +12,23 @@
 use Symfony\Component\Console\Input\InputInterface;
 use Symfony\Component\Console\Output\OutputInterface;
 use Drupal\Core\Config\UnmetDependenciesException;
+use Drupal\Console\Command\Shared\ProjectDownloadTrait;
+use Drupal\Console\Core\Command\Command;
+use Drupal\Console\Command\Shared\ModuleTrait;
+use Drupal\Console\Utils\Site;
+use Drupal\Console\Utils\Validator;
+use Drupal\Core\Extension\ModuleInstallerInterface;
+use Drupal\Console\Utils\DrupalApi;
+use Drupal\Console\Extension\Manager;
+use Drupal\Console\Core\Utils\ChainQueue;
 
 class InstallCommand extends ThemeBaseCommand
 {
+    use ProjectDownloadTrait;
+    use ModuleTrait;
+    /**
+     * {@inheritdoc}
+     */
     protected function configure()
     {
         $this
@@ -88,7 +102,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
             if (count($this->getUnavailableThemes()) > 1) {
                 $this->setErrorMessage('commands.theme.install.messages.themes-missing', $this->getUnavailableThemes());
             } else {
-                $this->setErrorMessage('commands.theme.install.messages.themes-missing', $this->getUnavailableThemes());
+                $resultList = $this->downloadThemes($theme, $default);
             }
         }
 
diff --git a/vendor/drupal/console/src/Command/Theme/ThemeBaseCommand.php b/vendor/drupal/console/src/Command/Theme/ThemeBaseCommand.php
index eb3c1e976001836511b48001c9ff8dc037683c13..d83f1915056d3ee85555e8755a993840ebebb139 100644
--- a/vendor/drupal/console/src/Command/Theme/ThemeBaseCommand.php
+++ b/vendor/drupal/console/src/Command/Theme/ThemeBaseCommand.php
@@ -12,7 +12,11 @@
 use Drupal\Core\Config\UnmetDependenciesException;
 use Drupal\Core\Extension\ThemeHandlerInterface;
 use Drupal\Console\Core\Utils\ChainQueue;
-
+use Drupal\Console\Utils\Site;
+use Drupal\Console\Utils\Validator;
+use Drupal\Core\Extension\ModuleInstallerInterface;
+use Drupal\Console\Utils\DrupalApi;
+use Drupal\Console\Extension\Manager;
 /**
  * Class ThemeBaseCommand
  *
@@ -34,12 +38,34 @@ class ThemeBaseCommand extends Command
      * @var ChainQueue
      */
     protected $chainQueue;
-
+    /**
+     * @var Site
+     */
+    protected $site;
+    /**
+     * @var Validator
+     */
+    protected $validator;
+     /**
+     * @var ModuleInstaller
+     */
+    protected $moduleInstaller;
+    /**
+     * @var DrupalApi
+     */
+    protected $drupalApi;
+    /**
+     * @var Manager
+     */
+    protected $extensionManager;
+    /**
+     * @var string
+     */
+    protected $appRoot;
     /**
      * @var array
      */
     protected $themes;
-
     /**
      * @var array
      */
@@ -61,15 +87,32 @@ class ThemeBaseCommand extends Command
      * @param ConfigFactory $configFactory
      * @param ThemeHandler  $themeHandler
      * @param ChainQueue    $chainQueue
+     * @param Site          $site
+     * @param Validator     $validator
+     * @param ModuleInstaller $moduleInstaller
+     * @param DrupalApi       $drupalApi
+     * @param Manager         $extensionManager
+     * @param $appRoot
      */
     public function __construct(
         ConfigFactoryInterface $configFactory,
         ThemeHandlerInterface $themeHandler,
-        ChainQueue $chainQueue
+        ChainQueue $chainQueue,
+        Site $site,
+        Validator $validator,
+        ModuleInstallerInterface $moduleInstaller,
+        DrupalApi $drupalApi,
+        Manager $extensionManager, $appRoot
     ) {
         $this->configFactory = $configFactory;
         $this->themeHandler = $themeHandler;
         $this->chainQueue = $chainQueue;
+        $this->site = $site;
+        $this->validator = $validator;
+        $this->moduleInstaller = $moduleInstaller;
+        $this->drupalApi = $drupalApi;
+        $this->extensionManager = $extensionManager;
+        $this->appRoot = $appRoot;
         $this->themes = $this->themeHandler->rebuildThemeData();
         parent::__construct();
     }
diff --git a/vendor/drupal/console/src/Command/Update/EntitiesCommand.php b/vendor/drupal/console/src/Command/Update/EntitiesCommand.php
index f77fbad134dafbac144afd79dbc2eba7e1d777e8..9d8fa0e540d38ee583998714174d30216513bcef 100644
--- a/vendor/drupal/console/src/Command/Update/EntitiesCommand.php
+++ b/vendor/drupal/console/src/Command/Update/EntitiesCommand.php
@@ -64,8 +64,8 @@ protected function configure()
         $this
             ->setName('update:entities')
             ->setDescription($this->trans('commands.update.entities.description'))
+            ->enableMaintenance()
             ->setAliases(['upe']);
-        ;
     }
 
     /**
@@ -73,11 +73,6 @@ protected function configure()
      */
     protected function execute(InputInterface $input, OutputInterface $output)
     {
-        //$state = $this->getDrupalService('state');
-        $this->getIo()->info($this->trans('commands.site.maintenance.messages.maintenance-on'));
-        $this->getIo()->info($this->trans('commands.update.entities.messages.start'));
-        $this->state->set('system.maintenance_mode', true);
-
         try {
             $this->entityDefinitionUpdateManager->applyUpdates();
             /* @var EntityStorageException $e */
@@ -88,9 +83,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
             $this->getIo()->error(strtr('%type: @message in %function (line %line of %file).', $variables));
         }
 
-        $this->state->set('system.maintenance_mode', false);
         $this->getIo()->info($this->trans('commands.update.entities.messages.end'));
         $this->chainQueue->addCommand('cache:rebuild', ['cache' => 'all']);
-        $this->getIo()->info($this->trans('commands.site.maintenance.messages.maintenance-off'));
     }
 }
diff --git a/vendor/drupal/console/src/Command/Update/ExecuteCommand.php b/vendor/drupal/console/src/Command/Update/ExecuteCommand.php
index 90a91072d55ac0634bede4672403e475a25d64e1..7d652f671f0367d0ece77f478bfd3059bcd9eda8 100644
--- a/vendor/drupal/console/src/Command/Update/ExecuteCommand.php
+++ b/vendor/drupal/console/src/Command/Update/ExecuteCommand.php
@@ -7,6 +7,7 @@
 
 namespace Drupal\Console\Command\Update;
 
+use Drupal\Console\Command\Shared\UpdateTrait;
 use Symfony\Component\Console\Input\InputInterface;
 use Symfony\Component\Console\Input\InputArgument;
 use Symfony\Component\Console\Output\OutputInterface;
@@ -20,6 +21,8 @@
 
 class ExecuteCommand extends Command
 {
+    use UpdateTrait;
+
     /**
      * @var Site
      */
@@ -108,7 +111,8 @@ protected function configure()
                 $this->trans('commands.update.execute.options.update-n'),
                 '9000'
             )
-            ->setAliases(['upex']);
+            ->setAliases(['upex'])
+            ->enableMaintenance();
     }
 
     /**
@@ -127,14 +131,12 @@ protected function execute(InputInterface $input, OutputInterface $output)
 
         $start = $this->getUpdates($this->module!=='all'?$this->module:null);
         $updates = update_resolve_dependencies($start);
-        $dependencyMap = [];
-        foreach ($updates as $function => $update) {
-            $dependencyMap[$function] = !empty($update['reverse_paths']) ? array_keys($update['reverse_paths']) : [];
-        }
+        $allowUpdate = false;
+        $assumeYes = $input->getOption('yes');
 
         if (!$this->checkUpdates($start, $updates)) {
             if ($this->module === 'all') {
-                $this->getIo()->warning(
+                $this->getIo()->info(
                     sprintf(
                         $this->trans(
                             'commands.update.execute.messages.no-pending-updates'
@@ -142,7 +144,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
                     )
                 );
             } else {
-                $this->getIo()->warning(
+                $this->getIo()->info(
                     sprintf(
                         $this->trans(
                             'commands.update.execute.messages.no-module-updates'
@@ -151,43 +153,51 @@ protected function execute(InputInterface $input, OutputInterface $output)
                     )
                 );
             }
-
-            return 0;
-        }
-
-        $maintenanceMode = $this->state->get('system.maintenance_mode', false);
-
-        if (!$maintenanceMode) {
-            $this->getIo()->info($this->trans('commands.site.maintenance.description'));
-            $this->state->set('system.maintenance_mode', true);
+            $this->getIo()->info('');
+        } else {
+            $updateList = update_get_update_list();
+            $this->showUpdateTable($this->module === 'all' ?  $updateList: $updateList[$this->module], $this->trans('commands.update.execute.messages.pending-updates'));
+
+            $allowUpdate = $assumeYes || $this->getIo()->confirm(
+                $this->trans('commands.update.execute.questions.update'),
+                true
+            );
         }
 
-        try {
-            $this->runUpdates(
-                $updates
+        // Handle Post update to execute
+        $allowPostUpdate = false;
+        if(!$postUpdates = $this->postUpdateRegistry->getPendingUpdateInformation()) {
+            $this->getIo()->info(
+                $this->trans('commands.update.execute.messages.no-pending-post-updates')
+            );
+        } else {
+            $this->showPostUpdateTable($postUpdates, $this->trans('commands.update.execute.messages.pending-post-updates'));
+            $allowPostUpdate = $assumeYes || $this->getIo()->confirm(
+                $this->trans('commands.update.execute.questions.post-update'),
+                true
             );
+        }
 
-            // Post Updates are only safe to run after all schemas have been updated.
-            if (!$this->getUpdates()) {
-                $this->runPostUpdates();
+        if($allowUpdate) {
+            try {
+                $this->runUpdates(
+                    $updates
+                );
+            } catch (\Exception $e) {
+                watchdog_exception('update', $e);
+                $this->getIo()->error($e->getMessage());
+                return 1;
             }
-        } catch (\Exception $e) {
-            watchdog_exception('update', $e);
-            $this->getIo()->error($e->getMessage());
-            return 1;
         }
 
-        if (!$maintenanceMode) {
-            $this->state->set('system.maintenance_mode', false);
-            $this->getIo()->info($this->trans('commands.site.maintenance.messages.maintenance-off'));
+        if($allowPostUpdate) {
+            $this->runPostUpdates($postUpdates);
         }
 
-        if (!$this->getUpdates()) {
-            $this->chainQueue->addCommand('update:entities');
+        if($allowPostUpdate || $allowUpdate) {
+            $this->chainQueue->addCommand('cache:rebuild', ['cache' => 'all']);
         }
 
-        $this->chainQueue->addCommand('cache:rebuild', ['cache' => 'all']);
-
         return 0;
     }
 
@@ -269,16 +279,20 @@ private function runUpdates(
     }
 
     /**
+     * @param array $postUpdates
      * @return bool
      */
-    private function runPostUpdates()
+    private function runPostUpdates($postUpdates)
     {
-        $postUpdates = $this->postUpdateRegistry->getPendingUpdateInformation();
+        if(!$postUpdates) {
+            return 0;
+        }
+
         foreach ($postUpdates as $module => $updates) {
             foreach ($updates['pending'] as $updateName => $update) {
                 $this->getIo()->info(
                     sprintf(
-                        $this->trans('commands.update.execute.messages.executing-update'),
+                        $this->trans('commands.update.execute.messages.executing-post-update'),
                         $updateName,
                         $module
                     )
@@ -298,7 +312,9 @@ private function runPostUpdates()
             }
         }
 
-        return true;
+        $this->chainQueue->addCommand('update:entities');
+
+        return 1;
     }
 
     protected function getUpdates($module = null)
@@ -331,13 +347,24 @@ protected function getUpdateList()
 
     private function executeUpdate($function, &$context)
     {
-        if (!$context || !array_key_exists('sandbox', $context)) {
-            $context['sandbox'] = [];
-        }
+        $context['sandbox'] = [];
+        do {
+            if (function_exists($function)) {
+                $return = $function($context['sandbox']);
+
+                if (is_string($return)) {
+                    $this->getIo()->info(
+                        "  ".$return
+                    );
+                }
 
-        if (function_exists($function)) {
-            $function($context['sandbox']);
-        }
+                if (isset($context['sandbox']['#finished']) && ($context['sandbox']['#finished'] < 1)) {
+                    $this->getIo()->info(
+                        '  Processed '.number_format($context['sandbox']['#finished'] * 100, 2).'%'
+                    );
+                }
+            }
+        } while (isset($context['sandbox']['#finished']) && ($context['sandbox']['#finished'] < 1));
 
         return true;
     }
diff --git a/vendor/drupal/console/src/Command/User/CreateCommand.php b/vendor/drupal/console/src/Command/User/CreateCommand.php
index 10e47cadf58bb9e0fd6bb105a47e75e023079a1c..6a14e7b427b0a19085ee9f3b6b6145721a106a0b 100644
--- a/vendor/drupal/console/src/Command/User/CreateCommand.php
+++ b/vendor/drupal/console/src/Command/User/CreateCommand.php
@@ -108,6 +108,9 @@ protected function execute(InputInterface $input, OutputInterface $output)
         $username = $input->getArgument('username');
         $password = $input->getArgument('password');
         $roles = $input->getOption('roles');
+        if (is_string($roles)) {
+            $roles = explode(',', $roles);
+        }
         $email = $input->getOption('email');
         $status = $input->getOption('status');
 
@@ -184,7 +187,7 @@ protected function interact(InputInterface $input, OutputInterface $output)
 
         $roles = $input->getOption('roles');
         if (!$roles) {
-            $systemRoles = $this->drupalApi->getRoles(false, false, false);
+            $systemRoles = $this->drupalApi->getRoles(true, true, false);
             $roles = $this->getIo()->choice(
                 $this->trans('commands.user.create.questions.roles'),
                 array_values($systemRoles),
diff --git a/vendor/drupal/console/src/Command/User/DeleteCommand.php b/vendor/drupal/console/src/Command/User/DeleteCommand.php
index 15f39158731215cecbf036759fda86929fe79739..a00d8e360c18e1917c669bf83caece7fd6b2da32 100644
--- a/vendor/drupal/console/src/Command/User/DeleteCommand.php
+++ b/vendor/drupal/console/src/Command/User/DeleteCommand.php
@@ -11,7 +11,6 @@
 use Symfony\Component\Console\Input\InputInterface;
 use Symfony\Component\Console\Output\OutputInterface;
 use Drupal\Core\Entity\EntityTypeManagerInterface;
-use Drupal\Core\Entity\Query\QueryFactory;
 use Drupal\Console\Utils\DrupalApi;
 
 /**
@@ -21,11 +20,6 @@
  */
 class DeleteCommand extends UserBase
 {
-    /**
-     * @var QueryFactory
-     */
-    protected $entityQuery;
-
     /**
      * @var DrupalApi
      */
@@ -35,15 +29,12 @@ class DeleteCommand extends UserBase
      * DeleteCommand constructor.
      *
      * @param EntityTypeManagerInterface $entityTypeManager
-     * @param QueryFactory               $entityQuery
      * @param DrupalApi                  $drupalApi
      */
     public function __construct(
         EntityTypeManagerInterface $entityTypeManager,
-        QueryFactory $entityQuery,
         DrupalApi $drupalApi
     ) {
-        $this->entityQuery = $entityQuery;
         $this->drupalApi = $drupalApi;
         parent::__construct($entityTypeManager);
     }
@@ -152,9 +143,8 @@ protected function execute(InputInterface $input, OutputInterface $output)
         if ($roles) {
             $roles = is_array($roles)?$roles:[$roles];
 
-            $query = $this->entityQuery
-                ->get('user')
-                ->condition('roles', array_values($roles), 'IN')
+            $query = $this->entityTypeManager->getStorage('user')->getQuery();
+            $query->condition('roles', array_values($roles), 'IN')
                 ->condition('uid', 1, '>');
             $results = $query->execute();
 
diff --git a/vendor/drupal/console/src/Command/User/LoginUrlCommand.php b/vendor/drupal/console/src/Command/User/LoginUrlCommand.php
index f67eb84ee920826da678b3c49bef4fac2b7ab28c..8906b1a0aa526e36eb772696845669b522e84e7b 100644
--- a/vendor/drupal/console/src/Command/User/LoginUrlCommand.php
+++ b/vendor/drupal/console/src/Command/User/LoginUrlCommand.php
@@ -11,6 +11,7 @@
 use Symfony\Component\Console\Input\InputArgument;
 use Symfony\Component\Console\Output\OutputInterface;
 use Drupal\Core\Entity\EntityTypeManagerInterface;
+use Drupal\Core\Url;
 
 /**
  * Class UserLoginCommand.
@@ -59,6 +60,7 @@ protected function interact(InputInterface $input, OutputInterface $output)
      */
     protected function execute(InputInterface $input, OutputInterface $output)
     {
+
         $user = $input->getArgument('user');
         $userEntity = $this->getUserEntity($user);
 
@@ -73,7 +75,31 @@ protected function execute(InputInterface $input, OutputInterface $output)
             return 1;
         }
 
-        $url = user_pass_reset_url($userEntity) . '/login';
+        if($input->hasOption('uri')){
+          //validate if https is on uri
+          $regx = '/^https:.*/s';
+          if(preg_match($regx, $input->getOption('uri'))){
+              $timestamp = REQUEST_TIME;
+              $langcode = $userEntity->getPreferredLangcode();
+              $url = Url::fromRoute('user.reset',
+                  [
+                  'uid' => $userEntity->id(),
+                  'timestamp' => $timestamp,
+                  'hash' => user_pass_rehash($userEntity, $timestamp),
+                  ],
+                  [
+                  'absolute' => TRUE,
+                  'language' => \Drupal::languageManager()->getLanguage($langcode),
+                  'https' => TRUE,
+                  ]
+              )->toString();
+
+            } else{
+              $url = user_pass_reset_url($userEntity) . '/login';
+            }
+        } else{
+          $url = user_pass_reset_url($userEntity) . '/login';
+        }
         $this->getIo()->success(
             sprintf(
                 $this->trans('commands.user.login.url.messages.url'),
diff --git a/vendor/drupal/console/src/Command/User/UnblockCommand.php b/vendor/drupal/console/src/Command/User/UnblockCommand.php
new file mode 100644
index 0000000000000000000000000000000000000000..63d95b1acc74f68edbb9ca06e24370fe850fe046
--- /dev/null
+++ b/vendor/drupal/console/src/Command/User/UnblockCommand.php
@@ -0,0 +1,102 @@
+<?php
+/**
+ * @file
+ * Contains \Drupal\Console\Command\User\UnblockCommand.
+ */
+
+namespace Drupal\Console\Command\User;
+
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputArgument;
+use Symfony\Component\Console\Output\OutputInterface;
+use Drupal\Core\Entity\EntityTypeManagerInterface;
+
+class UnblockCommand extends UserBase
+{
+    /**
+     * UnblockCommand constructor.
+     *
+     * @param EntityTypeManagerInterface $entityTypeManager
+     */
+    public function __construct(
+        EntityTypeManagerInterface $entityTypeManager
+    ) {
+        parent::__construct($entityTypeManager);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function configure()
+    {
+        $this
+            ->setName('user:unblock')
+            ->setDescription($this->trans('commands.user.unblock.description'))
+            ->setHelp($this->trans('commands.user.unblock.help'))
+            ->addArgument(
+                'user',
+                InputArgument::REQUIRED,
+                $this->trans('commands.user.unblock.options.user')
+            )
+            ->setAliases(['uu']);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function interact(InputInterface $input, OutputInterface $output)
+    {
+        $this->getUserArgument();
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function execute(InputInterface $input, OutputInterface $output)
+    {
+        $user = $input->getArgument('user');
+
+        $userEntity = $this->getUserEntity($user);
+
+        if (!$userEntity) {
+            $this->getIo()->error(
+                sprintf(
+                    $this->trans('commands.user.unblock.errors.invalid-user'),
+                    $user
+                )
+            );
+
+            return 1;
+        }
+
+        if (!$userEntity->isBlocked()) {
+          $this->getIo()->warning(
+            sprintf(
+              $this->trans('commands.user.unblock.warnings.unblocked-user'),
+              $user
+            )
+          );
+
+          return 1;
+        }
+
+        try {
+            $userEntity->activate();
+
+            $userEntity->save();
+
+            $this->getIo()->success(
+              sprintf(
+                $this->trans('commands.user.unblock.messages.unblock-successful'),
+                $user
+              )
+            );
+
+            return 0;
+        } catch (\Exception $e) {
+            $this->getIo()->error($e->getMessage());
+
+            return 1;
+        }
+    }
+}
diff --git a/vendor/drupal/console/src/Command/User/UserBase.php b/vendor/drupal/console/src/Command/User/UserBase.php
index 6239347177efa240cb901016f649093231ee1861..ccb9cae84ed427fc7399c047da9fd54f008488cb 100644
--- a/vendor/drupal/console/src/Command/User/UserBase.php
+++ b/vendor/drupal/console/src/Command/User/UserBase.php
@@ -42,11 +42,10 @@ public function getUserEntity($user)
                 ->getStorage('user')
                 ->load($user);
         } else {
-            $userEntity = reset(
-                $this->entityTypeManager
-                    ->getStorage('user')
-                    ->loadByProperties(['name' => $user])
-            );
+            $userEntities = $this->entityTypeManager
+                ->getStorage('user')
+                ->loadByProperties(['name' => $user]);
+            $userEntity = reset($userEntities);
         }
 
         return $userEntity;
diff --git a/vendor/drupal/console/src/Command/Views/DisableCommand.php b/vendor/drupal/console/src/Command/Views/DisableCommand.php
index dbee8f139c27fd239be886fda0a2f55c800a4203..5f24a2d8b86d8098e0d5c84a5381f4316f3467cd 100644
--- a/vendor/drupal/console/src/Command/Views/DisableCommand.php
+++ b/vendor/drupal/console/src/Command/Views/DisableCommand.php
@@ -12,7 +12,6 @@
 use Symfony\Component\Console\Output\OutputInterface;
 use Drupal\Console\Core\Command\Command;
 use Drupal\Core\Entity\EntityTypeManagerInterface;
-use Drupal\Core\Entity\Query\QueryFactory;
 
 /**
  * Class DisableCommand
@@ -26,23 +25,15 @@ class DisableCommand extends Command
      */
     protected $entityTypeManager;
 
-    /**
-     * @var QueryFactory
-     */
-    protected $entityQuery;
-
     /**
      * DisableCommand constructor.
      *
      * @param EntityTypeManagerInterface $entityTypeManager
-     * @param QueryFactory               $entityQuery
      */
     public function __construct(
-        EntityTypeManagerInterface $entityTypeManager,
-        QueryFactory $entityQuery
+        EntityTypeManagerInterface $entityTypeManager
     ) {
         $this->entityTypeManager = $entityTypeManager;
-        $this->entityQuery = $entityQuery;
         parent::__construct();
     }
 
@@ -69,10 +60,9 @@ protected function interact(InputInterface $input, OutputInterface $output)
     {
         $viewId = $input->getArgument('view-id');
         if (!$viewId) {
-            $views = $this->entityQuery
-                ->get('view')
-                ->condition('status', 1)
-                ->execute();
+            $query = $this->entityTypeManager->getStorage('view')->getQuery();
+            $views = $query->condition('status', 1)->execute();
+
             $viewId = $this->getIo()->choiceNoList(
                 $this->trans('commands.debug.views.arguments.view-id'),
                 $views
@@ -87,12 +77,10 @@ protected function interact(InputInterface $input, OutputInterface $output)
     protected function execute(InputInterface $input, OutputInterface $output)
     {
         $viewId = $input->getArgument('view-id');
-
         $view = $this->entityTypeManager->getStorage('view')->load($viewId);
 
         if (empty($view)) {
             $this->getIo()->error(sprintf($this->trans('commands.debug.views.messages.not-found'), $viewId));
-
             return 1;
         }
 
diff --git a/vendor/drupal/console/src/Command/Views/EnableCommand.php b/vendor/drupal/console/src/Command/Views/EnableCommand.php
index 5102bbf682c0b38317af6145257199065492aacc..8eed396c4f3f84f3d0aadd55c87721aa18f217c2 100644
--- a/vendor/drupal/console/src/Command/Views/EnableCommand.php
+++ b/vendor/drupal/console/src/Command/Views/EnableCommand.php
@@ -13,7 +13,6 @@
 use Symfony\Component\Config\Definition\Exception\Exception;
 use Drupal\Console\Core\Command\Command;
 use Drupal\Core\Entity\EntityTypeManagerInterface;
-use Drupal\Core\Entity\Query\QueryFactory;
 
 /**
  * Class EnableCommand
@@ -27,23 +26,15 @@ class EnableCommand extends Command
      */
     protected $entityTypeManager;
 
-    /**
-     * @var QueryFactory
-     */
-    protected $entityQuery;
-
     /**
      * EnableCommand constructor.
      *
      * @param EntityTypeManagerInterface $entityTypeManager
-     * @param QueryFactory               $entityQuery
      */
     public function __construct(
-        EntityTypeManagerInterface $entityTypeManager,
-        QueryFactory $entityQuery
+        EntityTypeManagerInterface $entityTypeManager
     ) {
         $this->entityTypeManager = $entityTypeManager;
-        $this->entityQuery = $entityQuery;
         parent::__construct();
     }
 
@@ -70,10 +61,9 @@ protected function interact(InputInterface $input, OutputInterface $output)
     {
         $viewId = $input->getArgument('view-id');
         if (!$viewId) {
-            $views = $this->entityQuery
-                ->get('view')
-                ->condition('status', 0)
-                ->execute();
+            $query = $this->entityTypeManager->getStorage('view')->getQuery();
+            $views = $query->condition('status', 0)->execute();
+
             $viewId = $this->getIo()->choiceNoList(
                 $this->trans('commands.debug.views.arguments.view-id'),
                 $views
@@ -88,7 +78,6 @@ protected function interact(InputInterface $input, OutputInterface $output)
     protected function execute(InputInterface $input, OutputInterface $output)
     {
         $viewId = $input->getArgument('view-id');
-
         $view = $this->entityTypeManager->getStorage('view')->load($viewId);
 
         if (empty($view)) {
diff --git a/vendor/drupal/console/src/Extension/Extension.php b/vendor/drupal/console/src/Extension/Extension.php
index f664d1435401e3c29ed096afdd8d1a92beeaa3cc..a34a230b7610cecf3560ca1f5987a3e8ed39128a 100644
--- a/vendor/drupal/console/src/Extension/Extension.php
+++ b/vendor/drupal/console/src/Extension/Extension.php
@@ -134,12 +134,13 @@ public function getTemplatePath($fullPath = false)
     }
 
     /**
+     * @param string $testType
      * @param bool $fullPath
      * @return string
      */
-    public function getTestsPath($fullPath = false)
+    public function getTestsPath($testType, $fullPath = false)
     {
-        return $this->getPath($fullPath) . '/tests';
+        return $this->getPath($fullPath) . '/tests/' . $testType;
     }
 
     /**
@@ -159,4 +160,24 @@ public function getJsTestsPath($fullPath = false)
     {
         return $this->getTestsSourcePath($fullPath) . '/FunctionalJavascript';
     }
+
+    /**
+     * @param BaseExtension $extension
+     */
+    function loadFromParentObj(BaseExtension $extension)
+    {
+        $objValues = get_object_vars($extension);
+        foreach($objValues AS $key => $value)
+        {
+            $this->$key = $value;
+        }
+    }
+
+    /**
+     * @param $root
+     */
+    function setRoot($root) {
+        $this->root = $root;
+    }
+
 }
diff --git a/vendor/drupal/console/src/Extension/Manager.php b/vendor/drupal/console/src/Extension/Manager.php
index 8ad30488754481d76a496bead43f546ce90bba56..f06f008ed35d0d29ba92e0a9845467de2676891f 100644
--- a/vendor/drupal/console/src/Extension/Manager.php
+++ b/vendor/drupal/console/src/Extension/Manager.php
@@ -5,6 +5,7 @@
 use Drupal\Console\Utils\Site;
 use GuzzleHttp\Client;
 use GuzzleHttp\Exception\ClientException;
+use  Drupal\Core\Extension\ModuleExtensionList;
 
 /**
  * Class ExtensionManager
@@ -43,21 +44,29 @@ class Manager
      */
     private $extension = null;
 
+    /**
+     * @var Drupal\Core\Extension\ModuleExtensionList
+     */
+    private $extensionList;
+
     /**
      * ExtensionManager constructor.
      *
      * @param Site   $site
      * @param Client $httpClient
      * @param string $appRoot
+     * @param ModuleExtensionList $extensionList
      */
     public function __construct(
         Site $site,
         Client $httpClient,
-        $appRoot
+        $appRoot,
+        ModuleExtensionList $extensionList
     ) {
         $this->site = $site;
         $this->httpClient = $httpClient;
         $this->appRoot = $appRoot;
+        $this->extensionList = $extensionList;
         $this->initialize();
     }
 
@@ -223,7 +232,7 @@ private function discoverExtensions($type)
     {
         if ($type === 'module') {
             $this->site->loadLegacyFile('/core/modules/system/system.module');
-            system_rebuild_module_data();
+            $this->extensionList->reset()->getList();
         }
 
         if ($type === 'theme') {
@@ -311,7 +320,9 @@ private function createExtension($extension)
             $extension->getPathname(),
             $extension->getExtensionFilename()
         );
-        $consoleExtension->unserialize($extension->serialize());
+
+        $consoleExtension->loadFromParentObj($extension);
+        $consoleExtension->setRoot($this->appRoot);
 
         return $consoleExtension;
     }
diff --git a/vendor/drupal/console/src/Generator/BlockTypeGenerator.php b/vendor/drupal/console/src/Generator/BlockTypeGenerator.php
new file mode 100644
index 0000000000000000000000000000000000000000..be22c4bc3990a47b7566bb258f1022578bc7cd1a
--- /dev/null
+++ b/vendor/drupal/console/src/Generator/BlockTypeGenerator.php
@@ -0,0 +1,50 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Console\Generator\BlockTypeGenerator.
+ */
+
+namespace Drupal\Console\Generator;
+
+use Drupal\Console\Core\Generator\Generator;
+use Drupal\Console\Extension\Manager;
+
+class BlockTypeGenerator extends Generator
+{
+    /**
+     * @var Manager
+     */
+    protected $extensionManager;
+
+    /**
+     * PermissionGenerator constructor.
+     *
+     * @param Manager $extensionManager
+     */
+    public function __construct(
+        Manager $extensionManager
+    ) {
+        $this->extensionManager = $extensionManager;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function generate(array $parameters)
+    {
+
+        $module = $parameters['module'];
+        $class_name = $parameters['class_name'];
+        $blockId = $parameters['block_id'];
+        $description = $parameters['block_description'];
+        $parameters['machine_name'] = $blockId;
+
+        $this->renderFile(
+            'module/src/Plugin/Block/blocktype.php.twig',
+            $this->extensionManager->getPluginPath($module, 'Block') . '/' . $class_name . '.php',
+            $parameters
+        );
+
+    }
+}
diff --git a/vendor/drupal/console/src/Generator/CacheContextGenerator.php b/vendor/drupal/console/src/Generator/CacheContextGenerator.php
index 4c936ab6bb78659cc96aec7a246f9e0fdb3eeb42..f611161e51dc2411fea82420b240e8bf96a7ea69 100644
--- a/vendor/drupal/console/src/Generator/CacheContextGenerator.php
+++ b/vendor/drupal/console/src/Generator/CacheContextGenerator.php
@@ -34,7 +34,7 @@ public function __construct(
     public function generate(array $parameters)
     {
         $module = $parameters['module'];
-        $cache_context = $parameters['ache_context'];
+        $cache_context = $parameters['cache_context'];
         $class = $parameters['class'];
 
         $moduleInstance = $this->extensionManager->getModule($module);
diff --git a/vendor/drupal/console/src/Generator/ComposerGenerator.php b/vendor/drupal/console/src/Generator/ComposerGenerator.php
new file mode 100644
index 0000000000000000000000000000000000000000..ff834e23a92fe7ba9d0d4c24095c503800a5ac30
--- /dev/null
+++ b/vendor/drupal/console/src/Generator/ComposerGenerator.php
@@ -0,0 +1,51 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Console\Generator\ComposerGenerator.
+ */
+
+namespace Drupal\Console\Generator;
+
+use Drupal\Console\Core\Generator\Generator;
+use Drupal\Console\Extension\Manager;
+
+/**
+ * Class ComposerGenerator
+ *
+ * @package Drupal\Console\Generator
+ */
+class ComposerGenerator extends Generator
+{
+
+    /**
+     * @var Manager
+     */
+    protected $extensionManager;
+
+    /**
+     * AjaxCommandGenerator constructor.
+     *
+     * @param Manager $extensionManager
+     */
+    public function __construct(
+      Manager $extensionManager
+    ) {
+        $this->extensionManager = $extensionManager;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function generate(array $parameters)
+    {
+        $machineName = $parameters['machine_name'];
+        $this->renderFile(
+          'module/composer.json.twig',
+          $this->extensionManager->getModule($machineName)
+            ->getPath() . '/composer.json',
+          $parameters
+        );
+    }
+
+}
diff --git a/vendor/drupal/console/src/Generator/ControllerGenerator.php b/vendor/drupal/console/src/Generator/ControllerGenerator.php
index 49d51e510eff5dd76f997f1702dea953d03f91fa..1a392e49915f72c9ddb0ee7a38188d9ab87edd6f 100644
--- a/vendor/drupal/console/src/Generator/ControllerGenerator.php
+++ b/vendor/drupal/console/src/Generator/ControllerGenerator.php
@@ -54,7 +54,7 @@ public function generate(array $parameters)
         if ($test) {
             $this->renderFile(
                 'module/Tests/Controller/controller.php.twig',
-                $moduleInstance->getTestPath('Controller') . '/' . $class . 'Test.php',
+                $moduleInstance->getTestsPath('Controller') . '/' . $class . 'Test.php',
                 $parameters
             );
         }
diff --git a/vendor/drupal/console/src/Generator/DatabaseSettingsGenerator.php b/vendor/drupal/console/src/Generator/DatabaseSettingsGenerator.php
index 46673fbc280b8643a579b40d21fa67350053c818..08ac1a0369d367026b183cd676677f4db819a90f 100644
--- a/vendor/drupal/console/src/Generator/DatabaseSettingsGenerator.php
+++ b/vendor/drupal/console/src/Generator/DatabaseSettingsGenerator.php
@@ -8,37 +8,30 @@
 namespace Drupal\Console\Generator;
 
 use Drupal\Console\Core\Generator\Generator;
-use Drupal\Core\DrupalKernelInterface;
 
 class DatabaseSettingsGenerator extends Generator
 {
-    /**
-     * @var DrupalKernelInterface
-     */
-    protected $kernel;
-
     /**
      * DatabaseSettingsGenerator constructor.
-     *
-     * @param DrupalKernelInterface $kernel
      */
-    public function __construct(
-        DrupalKernelInterface $kernel
-    ) {
-        $this->kernel = $kernel;
-    }
+    public function __construct() {}
 
     /**
      * {@inheritdoc}
      */
     public function generate(array $parameters)
     {
-        $settingsFile = $this->kernel->getSitePath() . '/settings.php';
+        $uri = parse_url($parameters['uri'], PHP_URL_HOST);
+        $settingsFile = 'sites/'.$uri.'/settings.php';
         if (!is_writable($settingsFile)) {
             return false;
         }
+        $template = 'database/add.php.twig';
+        if ($parameters['default']) {
+            $template = 'database/add-default.php.twig';
+        }
         return $this->renderFile(
-            'database/add.php.twig',
+            $template,
             $settingsFile,
             $parameters,
             FILE_APPEND
diff --git a/vendor/drupal/console/src/Generator/EntityContentGenerator.php b/vendor/drupal/console/src/Generator/EntityContentGenerator.php
index 158c0895fe86f274983665be13f237f3f68f8d1f..0862c8a0bc52e508c432df49a7126a67d39e3acb 100644
--- a/vendor/drupal/console/src/Generator/EntityContentGenerator.php
+++ b/vendor/drupal/console/src/Generator/EntityContentGenerator.php
@@ -64,6 +64,8 @@ public function generate(array $parameters)
         $bundle_entity_type = $parameters['bundle_entity_type'];
         $is_translatable = $parameters['is_translatable'];
         $revisionable = $parameters['revisionable'];
+        $has_forms = $parameters['has_forms'];
+        $has_bundle_permissions = $parameters['has_bundle_permissions'];
 
         $moduleInstance = $this->extensionManager->getModule($module);
         $moduleDir = $moduleInstance->getPath();
@@ -81,27 +83,6 @@ public function generate(array $parameters)
             FILE_APPEND
         );
 
-        $this->renderFile(
-            'module/links.menu-entity-content.yml.twig',
-            $modulePath . '.links.menu.yml',
-            $parameters,
-            FILE_APPEND
-        );
-
-        $this->renderFile(
-            'module/links.task-entity-content.yml.twig',
-            $modulePath . '.links.task.yml',
-            $parameters,
-            FILE_APPEND
-        );
-
-        $this->renderFile(
-            'module/links.action-entity-content.yml.twig',
-            $modulePath . '.links.action.yml',
-            $parameters,
-            FILE_APPEND
-        );
-
         $this->renderFile(
             'module/src/accesscontrolhandler-entity-content.php.twig',
             $moduleSourcePath . 'AccessControlHandler.php',
@@ -128,12 +109,6 @@ public function generate(array $parameters)
             $parameters
         );
 
-        $this->renderFile(
-            'module/src/entity-content-route-provider.php.twig',
-            $moduleSourcePath . 'HtmlRouteProvider.php',
-            $parameters
-        );
-
         $this->renderFile(
             'module/src/Entity/entity-content-views-data.php.twig',
             $moduleEntityPath . 'ViewsData.php',
@@ -146,52 +121,96 @@ public function generate(array $parameters)
             $parameters
         );
 
-        $this->renderFile(
-            'module/src/Entity/Form/entity-settings.php.twig',
-            $moduleFormPath . 'SettingsForm.php',
-            $parameters
-        );
+        if($has_forms) {
+            $this->renderFile(
+                'module/src/entity-content-route-provider.php.twig',
+                $moduleSourcePath . 'HtmlRouteProvider.php',
+                $parameters
+            );
 
-        $this->renderFile(
-            'module/src/Entity/Form/entity-content.php.twig',
-            $moduleFormPath . 'Form.php',
-            $parameters
-        );
+            $this->renderFile(
+                'module/links.menu-entity-content.yml.twig',
+                $modulePath . '.links.menu.yml',
+                $parameters,
+                FILE_APPEND
+            );
 
-        $this->renderFile(
-            'module/src/Entity/Form/entity-content-delete.php.twig',
-            $moduleFormPath . 'DeleteForm.php',
-            $parameters
-        );
+            $this->renderFile(
+                'module/links.task-entity-content.yml.twig',
+                $modulePath . '.links.task.yml',
+                $parameters,
+                FILE_APPEND
+            );
 
-        $this->renderFile(
-            'module/entity-content-page.php.twig',
-            $moduleDir . '/' . $entity_name . '.page.inc',
-            $parameters
-        );
+            $this->renderFile(
+                'module/links.action-entity-content.yml.twig',
+                $modulePath . '.links.action.yml',
+                $parameters,
+                FILE_APPEND
+            );
 
-        $this->renderFile(
-            'module/templates/entity-html.twig',
-            $moduleTemplatePath . $entity_name . '.html.twig',
-            $parameters
-        );
+            $this->renderFile(
+                'module/src/Entity/Form/entity-settings.php.twig',
+                $moduleFormPath . 'SettingsForm.php',
+                $parameters
+            );
 
-        if ($revisionable) {
             $this->renderFile(
-                'module/src/Entity/Form/entity-content-revision-delete.php.twig',
-                $moduleFormPath . 'RevisionDeleteForm.php',
+                'module/src/Entity/Form/entity-content.php.twig',
+                $moduleFormPath . 'Form.php',
                 $parameters
             );
+
+
             $this->renderFile(
-                'module/src/Entity/Form/entity-content-revision-revert-translation.php.twig',
-                $moduleFormPath . 'RevisionRevertTranslationForm.php',
+                'module/src/Entity/Form/entity-content-delete.php.twig',
+                $moduleFormPath . 'DeleteForm.php',
                 $parameters
             );
+
             $this->renderFile(
-                'module/src/Entity/Form/entity-content-revision-revert.php.twig',
-                $moduleFormPath . 'RevisionRevertForm.php',
+                'module/templates/entity-html.twig',
+                $moduleTemplatePath . $entity_name . '.html.twig',
                 $parameters
             );
+
+            $this->renderFile(
+                'module/entity-content-page.php.twig',
+                $moduleDir . '/' . $entity_name . '.page.inc',
+                $parameters
+            );
+        }
+
+
+        if ($revisionable) {
+            if ($has_forms) {
+                if ($is_translatable) {
+                    $this->renderFile(
+                        'module/src/Entity/Form/entity-content-revision-revert-translation.php.twig',
+                        $moduleFormPath . 'RevisionRevertTranslationForm.php',
+                        $parameters
+                    );
+                }
+
+                $this->renderFile(
+                    'module/src/Entity/Form/entity-content-revision-delete.php.twig',
+                    $moduleFormPath . 'RevisionDeleteForm.php',
+                    $parameters
+                );
+
+                $this->renderFile(
+                    'module/src/Entity/Form/entity-content-revision-revert.php.twig',
+                    $moduleFormPath . 'RevisionRevertForm.php',
+                    $parameters
+                );
+
+                $this->renderFile(
+                    'module/src/Controller/entity-controller.php.twig',
+                    $moduleInstance->getControllerPath()  . '/' . $entity_class . 'Controller.php',
+                    $parameters
+                );
+            }
+
             $this->renderFile(
                 'module/src/entity-storage.php.twig',
                 $moduleSourcePath . 'Storage.php',
@@ -202,20 +221,24 @@ public function generate(array $parameters)
                 $moduleSourcePath . 'StorageInterface.php',
                 $parameters
             );
-            $this->renderFile(
-                'module/src/Controller/entity-controller.php.twig',
-                $moduleInstance->getControllerPath()  . '/' . $entity_class . 'Controller.php',
-                $parameters
-            );
         }
 
         if ($bundle_entity_type) {
+
             $this->renderFile(
                 'module/templates/entity-with-bundle-content-add-list-html.twig',
                 $moduleTemplatePath . '/' . str_replace('_', '-', $entity_name) . '-content-add-list.html.twig',
                 $parameters
             );
 
+            if ($has_bundle_permissions) {
+                $this->renderFile(
+                'module/src/entity-content-bundle-permissions.php.twig',
+                $moduleSourcePath . 'Permissions.php',
+                $parameters
+              );
+            }
+
             // Check for hook_theme() in module file and warn ...
             // Check if the module file exists.
             if (!file_exists($moduleFileName)) {
diff --git a/vendor/drupal/console/src/Generator/FormAlterGenerator.php b/vendor/drupal/console/src/Generator/FormAlterGenerator.php
index 47d91533cbc0c25be84f9ef0df171aae696ecba4..3b2a42a768718f0437d4e75618b5b9de639941ce 100644
--- a/vendor/drupal/console/src/Generator/FormAlterGenerator.php
+++ b/vendor/drupal/console/src/Generator/FormAlterGenerator.php
@@ -35,6 +35,11 @@ public function generate(array $parameters)
     {
         $module = $parameters['module'];
         $module_path =  $this->extensionManager->getModule($module)->getPath();
+        $moduleFilePath =  $this->extensionManager->getModule($module)->getPath() . '/' . $module . '.module';
+
+        $parameters = array_merge($parameters, [
+            'file_exists' => file_exists($moduleFilePath),
+        ]);
 
         $this->renderFile(
             'module/src/Form/form-alter.php.twig',
diff --git a/vendor/drupal/console/src/Generator/FormGenerator.php b/vendor/drupal/console/src/Generator/FormGenerator.php
index 957c6bb4fc901839494157c13fe3f78fcb60096c..71325c57f51cf7e8f87c02ca0ab7a4641634a738 100644
--- a/vendor/drupal/console/src/Generator/FormGenerator.php
+++ b/vendor/drupal/console/src/Generator/FormGenerator.php
@@ -80,7 +80,7 @@ public function generate(array $parameters)
             $moduleInstance->getFormPath() . '/' . $class_name . '.php',
             $parameters
         );
-        
+
         // Render defaults YML file.
         if ($config_file == true) {
             $this->renderFile(
diff --git a/vendor/drupal/console/src/Generator/ModuleGenerator.php b/vendor/drupal/console/src/Generator/ModuleGenerator.php
index 04ea950961a212c59489a42114881f017f8e8948..60aa99ee907557bacd73d776fdb192320256cd34 100644
--- a/vendor/drupal/console/src/Generator/ModuleGenerator.php
+++ b/vendor/drupal/console/src/Generator/ModuleGenerator.php
@@ -26,7 +26,6 @@ public function generate(array $parameters)
         $modulePath = $parameters['module_path'];
         $moduleFile = $parameters['module_file'];
         $featuresBundle = $parameters['features_bundle'];
-        $composer = $parameters['composer'];
         $test = $parameters['test'];
         $twigTemplate = $parameters['twig_template'];
 
@@ -61,6 +60,11 @@ public function generate(array $parameters)
 
         $parameters['type'] = 'module';
 
+        // Escape single quotes in long parameter strings.
+        foreach(['description', 'module'] as $param) {
+            $parameters[$param] = str_replace("'", "''", $parameters[$param]);
+        }
+
         $this->renderFile(
             'module/info.yml.twig',
             $moduleDirectory . '/' . $machineName . '.info.yml',
@@ -81,14 +85,6 @@ public function generate(array $parameters)
             $this->createModuleFile($moduleDirectory, $parameters);
         }
 
-        if ($composer) {
-            $this->renderFile(
-                'module/composer.json.twig',
-                $moduleDirectory . '/' . 'composer.json',
-                $parameters
-            );
-        }
-
         if ($test) {
             $this->renderFile(
                 'module/src/Tests/load-test.php.twig',
diff --git a/vendor/drupal/console/src/Generator/PluginBlockGenerator.php b/vendor/drupal/console/src/Generator/PluginBlockGenerator.php
index b8271391bbe13150e5e37bd69456627772caf0e8..574471304536b9a032ccdc5c8eba4b2035e4e8a0 100644
--- a/vendor/drupal/console/src/Generator/PluginBlockGenerator.php
+++ b/vendor/drupal/console/src/Generator/PluginBlockGenerator.php
@@ -36,6 +36,10 @@ public function generate(array $parameters)
         $inputs = $parameters['inputs'];
         $module = $parameters['module'];
         $class_name = $parameters['class_name'];
+        $twigTemplate = $parameters['twig_template'];
+        $pluginId = $parameters['plugin_id'];
+        $parameters['twig_template_name'] = str_replace('_', '-', $pluginId);
+        $parameters['machine_name'] = $pluginId;
 
         // Consider the type when determining a default value. Figure out what
         // the code looks like for the default value tht we need to generate.
@@ -74,5 +78,43 @@ public function generate(array $parameters)
             $this->extensionManager->getPluginPath($module, 'Block') . '/' . $class_name . '.php',
             $parameters
         );
+
+        if ($twigTemplate) {
+            $moduleDirectory = $this->extensionManager->getModule($module)->getPath();
+            $moduleFilePath = $moduleDirectory . '/' . $module . '.module';
+
+            $parameters['file_exist'] = file_exists($moduleFilePath);
+
+            $this->renderFile(
+                'module/module-block-twig-template-append.twig',
+                $moduleFilePath,
+                $parameters,
+                FILE_APPEND
+            );
+            $moduleDirectory .= '/templates/';
+            if (file_exists($moduleDirectory)) {
+                if (!is_dir($moduleDirectory)) {
+                    throw new \RuntimeException(
+                        sprintf(
+                            'Unable to generate the templates directory as the target directory "%s" exists but is a file.',
+                            realpath($moduleDirectory)
+                        )
+                    );
+                }
+                if (!is_writable($moduleDirectory)) {
+                    throw new \RuntimeException(
+                        sprintf(
+                            'Unable to generate the templates directory as the target directory "%s" is not writable.',
+                            realpath($moduleDirectory)
+                        )
+                    );
+                }
+            }
+            $this->renderFile(
+                'module/templates/plugin-block-html.twig',
+                $moduleDirectory . $parameters['twig_template_name'] . '.html.twig',
+                $parameters
+            );
+        }
     }
 }
diff --git a/vendor/drupal/console/src/Generator/PluginCKEditorButtonGenerator.php b/vendor/drupal/console/src/Generator/PluginCKEditorButtonGenerator.php
index 782080d06b32c2b099aa70b19b1c28d7b517c7f5..4cb40d9f051763ff40ae2c806cdf1b917f23cf67 100644
--- a/vendor/drupal/console/src/Generator/PluginCKEditorButtonGenerator.php
+++ b/vendor/drupal/console/src/Generator/PluginCKEditorButtonGenerator.php
@@ -35,11 +35,17 @@ public function generate(array $parameters)
     {
         $class_name = $parameters['class_name'];
         $module = $parameters['module'];
-
+        $plugin_id = $parameters['plugin_id'];
+        
         $this->renderFile(
             'module/src/Plugin/CKEditorPlugin/ckeditorbutton.php.twig',
             $this->extensionManager->getPluginPath($module, 'CKEditorPlugin') . '/' . $class_name . '.php',
             $parameters
         );
+        $this->renderFile(
+            'module/src/Plugin/CKEditorPlugin/plugin.php.twig',
+             drupal_get_path('module', $module) . '/js/Plugin/'. $plugin_id .'/plugin.js',
+             $parameters
+        );
     }
 }
diff --git a/vendor/drupal/console/src/Generator/PluginDerivativeGenerator.php b/vendor/drupal/console/src/Generator/PluginDerivativeGenerator.php
new file mode 100644
index 0000000000000000000000000000000000000000..65f3a94c9ea8597c85f6a0cb988517855da4c1f3
--- /dev/null
+++ b/vendor/drupal/console/src/Generator/PluginDerivativeGenerator.php
@@ -0,0 +1,57 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Console\Generator\PluginDerivativeGenerator.
+ */
+
+namespace Drupal\Console\Generator;
+
+use Drupal\Console\Core\Generator\Generator;
+use Drupal\Console\Extension\Manager;
+
+class PluginDerivativeGenerator extends Generator
+{
+    /**
+     * @var Manager
+     */
+    protected $extensionManager;
+
+    /**
+     * PermissionGenerator constructor.
+     *
+     * @param Manager $extensionManager
+     */
+    public function __construct(
+        Manager $extensionManager
+    ) {
+        $this->extensionManager = $extensionManager;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function generate(array $parameters)
+    {
+        $module = $parameters['module'];
+        $class_name = $parameters['class'];
+        $blockLabel = $parameters['block_label'];
+        $blockDescription = $parameters['block_description'];
+        $blockId = $parameters['block_id'];
+        
+        //block_derivative.php.twig
+        $this->renderFile(
+            'module/src/Plugin/Block/block_derivative.php.twig',
+            $this->extensionManager->getPluginPath($module, 'Block') . '/' . $class_name . '.php',
+            $parameters
+        );
+
+        //derivative_block_derivative.php.twig
+        $this->renderFile(
+            'module/src/Plugin/Derivative/derivative_block_derivative.php.twig',
+            $this->extensionManager->getPluginPath($module, 'Derivative') . '/' . $class_name . '.php',
+            $parameters
+        );
+        
+    }
+}
diff --git a/vendor/drupal/console/src/Generator/PluginFieldWidgetGenerator.php b/vendor/drupal/console/src/Generator/PluginFieldWidgetGenerator.php
index 909239282290f662f54a2ded5939fbc51180ecc0..2bb0d0e081fd4792015635750bfdc9a1a89fec42 100644
--- a/vendor/drupal/console/src/Generator/PluginFieldWidgetGenerator.php
+++ b/vendor/drupal/console/src/Generator/PluginFieldWidgetGenerator.php
@@ -37,10 +37,19 @@ public function generate(array $parameters)
         $module = $parameters['module'];
         $class_name = $parameters['class_name'];
 
+        $moduleInstance = $this->extensionManager->getModule($module);
+
         $this->renderFile(
             'module/src/Plugin/Field/FieldWidget/fieldwidget.php.twig',
             $this->extensionManager->getPluginPath($module, 'Field/FieldWidget') . '/' . $class_name . '.php',
             $parameters
         );
+
+        $this->renderFile(
+            'module/schema.yml.twig',
+            $moduleInstance->getPath() . '/' . $module . '.schema.yml',
+            $parameters,
+            FILE_APPEND
+        );
     }
 }
diff --git a/vendor/drupal/console/src/Generator/PluginMigrateDataParserGenerator.php b/vendor/drupal/console/src/Generator/PluginMigrateDataParserGenerator.php
new file mode 100644
index 0000000000000000000000000000000000000000..28aae0f6cb1b36895a3c7c68a954eecb27ec20b8
--- /dev/null
+++ b/vendor/drupal/console/src/Generator/PluginMigrateDataParserGenerator.php
@@ -0,0 +1,45 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Console\Generator\PluginMigrateDataParserGenerator.
+ */
+
+namespace Drupal\Console\Generator;
+
+use Drupal\Console\Core\Generator\Generator;
+use Drupal\Console\Extension\Manager;
+
+class PluginMigrateDataParserGenerator extends Generator
+{
+    /**
+     * @var Manager
+     */
+    protected $extensionManager;
+
+    /**
+     * PluginMigrateDataParserGenerator constructor.
+     *
+     * @param Manager $extensionManager
+     */
+    public function __construct(
+        Manager $extensionManager
+    ) {
+        $this->extensionManager = $extensionManager;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function generate(array $parameters)
+    {
+        $module = $parameters['module'];
+        $class_name = $parameters['class_name'];
+
+        $this->renderFile(
+            'module/src/Plugin/migrate_plus/data_parser/data_parser.php.twig',
+            $this->extensionManager->getPluginPath($module, 'migrate_plus') . '/data_parser/' . $class_name . '.php',
+            $parameters
+        );
+    }
+}
diff --git a/vendor/drupal/console/src/Generator/PluginQueueWorkerGenerator.php b/vendor/drupal/console/src/Generator/PluginQueueWorkerGenerator.php
new file mode 100644
index 0000000000000000000000000000000000000000..1262ea03e6d0a3a87d65f4b81ec86cd6db639863
--- /dev/null
+++ b/vendor/drupal/console/src/Generator/PluginQueueWorkerGenerator.php
@@ -0,0 +1,50 @@
+<?php
+
+namespace Drupal\Console\Generator;
+
+use Drupal\Console\Core\Generator\Generator;
+use Drupal\Console\Extension\Manager;
+use Drupal\Console\Core\Generator\GeneratorInterface;
+
+/**
+ * Class PluginQueueWorkerGenerator.
+ *
+ * @package Drupal\Console\Generator
+ */
+class PluginQueueWorkerGenerator extends Generator implements GeneratorInterface {
+
+  /**
+   * Extension Manager.
+   *
+   * @var \Drupal\Console\Extension\Manager
+   */
+  protected $extensionManager;
+
+  /**
+   * PluginQueueWorker constructor.
+   *
+   * @param \Drupal\Console\Extension\Manager $extensionManager
+   *   Extension manager.
+   */
+  public function __construct(
+       Manager $extensionManager
+   ) {
+    $this->extensionManager = $extensionManager;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function generate(array $parameters) {
+    $module = $parameters['module'];
+    $queue_class = $parameters['class_name'];
+
+    $this->renderer->addSkeletonDir(__DIR__ . '/../../console/templates');
+    $this->renderFile(
+      'module/src/Plugin/QueueWorker/queue_worker.php.twig',
+      $this->extensionManager->getPluginPath($module, 'QueueWorker') . '/' . $queue_class . '.php',
+      $parameters
+    );
+  }
+
+}
diff --git a/vendor/drupal/console/src/Generator/PluginRulesActionGenerator.php b/vendor/drupal/console/src/Generator/PluginRulesActionGenerator.php
index 9a4f5592df0d7cb4fe142273493e84ebbfa4849e..9deade9ad399ea06b44c4e5258acb1cf5da723b1 100644
--- a/vendor/drupal/console/src/Generator/PluginRulesActionGenerator.php
+++ b/vendor/drupal/console/src/Generator/PluginRulesActionGenerator.php
@@ -35,17 +35,10 @@ public function generate(array $parameters)
     {
         $module = $parameters['module'];
         $class_name = $parameters['class_name'];
-        $plugin_id = $parameters['plugin_id'];
 
         $this->renderFile(
-            'module/src/Plugin/Action/rulesaction.php.twig',
-            $this->extensionManager->getPluginPath($module, 'Action') . '/' . $class_name . '.php',
-            $parameters
-        );
-
-        $this->renderFile(
-            'module/system.action.action.yml.twig',
-            $this->extensionManager->getModule($module)->getPath() . '/config/install/system.action.' . $plugin_id . '.yml',
+            'module/src/Plugin/RulesAction/rulesaction.php.twig',
+            $this->extensionManager->getPluginPath($module, 'RulesAction') . '/' . $class_name . '.php',
             $parameters
         );
     }
diff --git a/vendor/drupal/console/src/Generator/PluginRulesConditionGenerator.php b/vendor/drupal/console/src/Generator/PluginRulesConditionGenerator.php
new file mode 100644
index 0000000000000000000000000000000000000000..97453f6e0a10eae8c9aeb5522074cbdbcf2ab3cf
--- /dev/null
+++ b/vendor/drupal/console/src/Generator/PluginRulesConditionGenerator.php
@@ -0,0 +1,45 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Console\Generator\PluginBlockGenerator.
+ */
+
+namespace Drupal\Console\Generator;
+
+use Drupal\Console\Core\Generator\Generator;
+use Drupal\Console\Extension\Manager;
+
+class PluginRulesConditionGenerator extends Generator
+{
+    /**
+     * @var Manager
+     */
+    protected $extensionManager;
+
+    /**
+     * PluginRulesConditionGenerator constructor.
+     *
+     * @param Manager $extensionManager
+     */
+    public function __construct(
+        Manager $extensionManager
+    ) {
+        $this->extensionManager = $extensionManager;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function generate(array $parameters)
+    {
+        $module = $parameters['module'];
+        $class_name = $parameters['class_name'];
+
+        $this->renderFile(
+            'module/src/Plugin/Condition/rulescondition.php.twig',
+            $this->extensionManager->getPluginPath($module, 'Condition') . '/' . $class_name . '.php',
+            $parameters
+        );
+    }
+}
diff --git a/vendor/drupal/console/src/Generator/PluginRulesDataprocessorGenerator.php b/vendor/drupal/console/src/Generator/PluginRulesDataprocessorGenerator.php
new file mode 100644
index 0000000000000000000000000000000000000000..5049ddaec75ae5cb1dfd31aa3bf5df44bc4bb919
--- /dev/null
+++ b/vendor/drupal/console/src/Generator/PluginRulesDataprocessorGenerator.php
@@ -0,0 +1,45 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Console\Generator\PluginBlockGenerator.
+ */
+
+namespace Drupal\Console\Generator;
+
+use Drupal\Console\Core\Generator\Generator;
+use Drupal\Console\Extension\Manager;
+
+class PluginRulesDataprocessorGenerator extends Generator
+{
+    /**
+     * @var Manager
+     */
+    protected $extensionManager;
+
+    /**
+     * PluginRulesDataprocessorGenerator constructor.
+     *
+     * @param Manager $extensionManager
+     */
+    public function __construct(
+      Manager $extensionManager
+    ) {
+        $this->extensionManager = $extensionManager;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function generate(array $parameters)
+    {
+        $module = $parameters['module'];
+        $class_name = $parameters['class_name'];
+
+        $this->renderFile(
+          'module/src/Plugin/RulesDataProcessor/rulesdataprocessor.php.twig',
+          $this->extensionManager->getPluginPath($module, 'RulesDataProcessor') . '/' . $class_name . '.php',
+          $parameters
+        );
+    }
+}
diff --git a/vendor/drupal/console/src/Generator/PluginSkeletonGenerator.php b/vendor/drupal/console/src/Generator/PluginSkeletonGenerator.php
index ce118a75531b44bb0d80d40d96511cca24ae00da..f9b31ed9f52d13eb94f7fef01af4d30bb738cc21 100644
--- a/vendor/drupal/console/src/Generator/PluginSkeletonGenerator.php
+++ b/vendor/drupal/console/src/Generator/PluginSkeletonGenerator.php
@@ -39,6 +39,7 @@ public function generate(array $parameters)
 
         $parameters['plugin_annotation'] = array_pop(explode('\\', $pluginMetaData['pluginAnnotation']));
         $parameters['plugin_interface'] = array_pop(explode('\\', $pluginMetaData['pluginInterface']));
+        $parameters['namespace'] =  str_replace('/', '\\', $pluginMetaData['subdir']);
 
         $this->renderFile(
             'module/src/Plugin/skeleton.php.twig',
diff --git a/vendor/drupal/console/src/Generator/PluginValidationConstraintGenerator.php b/vendor/drupal/console/src/Generator/PluginValidationConstraintGenerator.php
new file mode 100644
index 0000000000000000000000000000000000000000..1c42f7805e3d331b33caf45dc345b6d874ffaa10
--- /dev/null
+++ b/vendor/drupal/console/src/Generator/PluginValidationConstraintGenerator.php
@@ -0,0 +1,63 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Console\Generator\PluginValidationConstraintGenerator.
+ */
+
+namespace Drupal\Console\Generator;
+
+use Drupal\Console\Core\Generator\Generator;
+use Drupal\Console\Extension\Manager;
+
+class PluginValidationConstraintGenerator extends Generator
+{
+
+    /**
+     * @var Manager
+     */
+    protected $extensionManager;
+
+    /**
+     * PluginValidationConstraintGenerator constructor.
+     *
+     * @param Manager $extensionManager
+     */
+    public function __construct(Manager $extensionManager) {
+        $this->extensionManager = $extensionManager;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function generate(array $parameters)
+    {
+        $module = $parameters['module'];
+        $className = $parameters['class_name'];
+        $hook = $parameters['hook'];
+        $pluginPath = $this->extensionManager->getPluginPath($module, 'Validation/Constraint') . '/' . $className;
+
+        // Generates Contraint class.
+        $this->renderFile(
+            'module/src/Plugin/Validation/Constraint/constraint.php.twig',
+            $pluginPath . '.php',
+            $parameters
+        );
+
+        // Generates Validator class.
+        $this->renderFile(
+            'module/src/Plugin/Validation/Constraint/validator.php.twig',
+            $pluginPath . 'Validator.php',
+            $parameters
+        );
+
+        if (!empty($hook)) {
+            $this->renderFile(
+                'module/src/Entity/Bundle/entity-bundle-field-info-alter.php.twig',
+                $this->extensionManager->getModule($module)->getPath() . '/' . $module . '.module',
+                $parameters,
+                FILE_APPEND
+            );
+        }
+    }
+}
diff --git a/vendor/drupal/console/src/Generator/PluginViewsFieldGenerator.php b/vendor/drupal/console/src/Generator/PluginViewsFieldGenerator.php
index 997162e69564858512b379bf4a2a076df36fb243..b2bf4bafe9e8153d568e6dbda6203b98bd58e65e 100644
--- a/vendor/drupal/console/src/Generator/PluginViewsFieldGenerator.php
+++ b/vendor/drupal/console/src/Generator/PluginViewsFieldGenerator.php
@@ -34,18 +34,22 @@ public function __construct(
     public function generate(array $parameters)
     {
         $module = $parameters['module'];
-        $class_name = $parameters['class_name'];
+        $fields = $parameters['fields'];
 
         $this->renderFile(
             'module/module.views.inc.twig',
             $this->extensionManager->getModule($module)->getPath() . '/' . $module . '.views.inc',
-            $parameters
+            $parameters,
+            FILE_APPEND
         );
 
-        $this->renderFile(
-            'module/src/Plugin/Views/field/field.php.twig',
-            $this->extensionManager->getPluginPath($module, 'views/field') . '/' . $class_name . '.php',
-            $parameters
-        );
+        foreach ($fields as $field) {
+            $field['module'] = $module;
+            $this->renderFile(
+                'module/src/Plugin/Views/field/field.php.twig',
+                $this->extensionManager->getPluginPath($module, 'views/field') . '/' . $field['class_name'] . '.php',
+                $field
+            );
+        }
     }
 }
diff --git a/vendor/drupal/console/src/Generator/ThemeGenerator.php b/vendor/drupal/console/src/Generator/ThemeGenerator.php
index 5ae64db2ada26819c895eeb26d7fa16da6a63342..25a3a5ee2ff1bd9064ba4bc1a46cd3f84eb9ecdf 100644
--- a/vendor/drupal/console/src/Generator/ThemeGenerator.php
+++ b/vendor/drupal/console/src/Generator/ThemeGenerator.php
@@ -9,6 +9,7 @@
 
 use Drupal\Console\Core\Generator\Generator;
 use Drupal\Console\Extension\Manager;
+use Drupal\Component\Serialization\Yaml;
 
 /**
  *
@@ -71,6 +72,12 @@ public function generate(array $parameters)
             }
         }
 
+        if($parameters['base_theme_regions'] && $parameters['base_theme']) {
+            $defaultRegions = Yaml::decode(file_get_contents($parameters['base_theme_path']));
+            $parameters['base_theme_regions'] = $defaultRegions['regions'];
+            $parameters['base_theme_regions_hidden'] = $defaultRegions['regions_hidden'];
+        }
+
         $themePath = $dir . '/' . $machine_name;
 
         $this->renderFile(
diff --git a/vendor/drupal/console/src/Generator/ThemeSettingGenerator.php b/vendor/drupal/console/src/Generator/ThemeSettingGenerator.php
new file mode 100644
index 0000000000000000000000000000000000000000..bf6c8ac91ee81fd8115acf431ae0e6cfb2fcfd0f
--- /dev/null
+++ b/vendor/drupal/console/src/Generator/ThemeSettingGenerator.php
@@ -0,0 +1,154 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Console\Generator\ThemeSettingGenerator.
+ */
+
+namespace Drupal\Console\Generator;
+
+use Drupal\Console\Core\Generator\Generator;
+use Drupal\Console\Extension\Manager;
+use Drupal\Component\Serialization\Yaml;
+use Symfony\Component\Filesystem\Filesystem;
+use Symfony\Component\Filesystem\Exception\IOExceptionInterface;
+use Symfony\Component\Yaml\Dumper;
+use Symfony\Component\Yaml\Parser;
+use Drupal\Console\Core\Style\DrupalStyle;
+
+/**
+ *
+ */
+class ThemeSettingGenerator extends Generator
+{
+    /**
+     * @var Manager
+     */
+    protected $extensionManager;
+
+    /**
+     * AuthenticationProviderGenerator constructor.
+     *
+     * @param Manager $extensionManager
+     */
+    public function __construct(
+        Manager $extensionManager
+    ) {
+        $this->extensionManager = $extensionManager;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function generate(array $parameters)
+    {
+        $dir = $parameters['theme_path'];
+        $theme = $parameters['theme'];
+        $ymlFile = new Parser();
+        $filesystem = new Filesystem();
+        $file_path = $dir.'/config/install/'.$theme.'.settings.yml';
+        $yaml = new Parser();
+        $data_yml = $this->arrData($parameters);
+        if ($filesystem->exists($dir)) {
+            if ($filesystem->exists($file_path)) {
+                $yaml_parsed = $yaml->parse(file_get_contents($file_path));
+                if (!empty($yaml_parsed) && $parameters['merge-existing-file']) {
+                    $file_yaml = array();
+                    $file_yaml = array_replace_recursive($yaml_parsed, $data_yml);
+                    $this->saveData($filesystem, $file_path, $file_yaml);
+                } elseif (empty($yaml_parsed)) {
+                    $this->saveData($filesystem, $file_path, $data_yml);
+                }
+                return 0;
+            } else {
+                $this->saveData($filesystem, $file_path, $data_yml);
+                return 0;    
+            }
+        } else {
+            return 1;
+        }
+    }
+
+    
+    /**
+     * {@inheritdoc}
+     */
+    public function createFolders($dir)
+    {
+        try {
+            $filesystem = new Filesystem();
+            $filesystem->mkdir($dir.'/config');
+            $filesystem->mkdir($dir.'/config/install');
+        } catch (IOExceptionInterface $e) {
+            $this->getIo()->error('An error occurred while creating your directory at: "%s"', ' '.$e->getPath());
+            return 1;
+        }
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function arrData($parameters)
+    {
+        return [
+            'favicon' => [
+                'mimetype' => 'image/vnd.microsoft.icon',
+                'path' => '',
+                'url' => '',
+                'use_default' => $parameters['favicon'], 
+            ],
+            'features' => [
+                'comment_user_picture' => $parameters['commentUserPicture'],
+                'comment_user_verification' => $parameters['commentUserVerification'],
+                'favicon' => $parameters['favicon'],
+                'node_user_picture' => $parameters['nodeUserPicture'],
+            ],
+            'logo' => [
+                'path' => '',
+                'url' => '',
+                'use_default' => $parameters['logo'],
+            ],
+        ];   
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function saveData($filesystem, $file_path, $data_yml)
+    {
+        $yaml = new Parser();
+        $dumper = new Dumper();
+        try {
+            $yaml = $dumper->dump($data_yml, 10);
+        } catch (\Exception $e) {
+            $this->getIo()->error(
+                sprintf(
+                    '%s: %s',
+                    'Error on yml',
+                    $e->getMessage()
+                )
+            );
+            return;
+        }
+        try {
+            file_put_contents($file_path, $yaml);
+        } catch (\Exception $e) {
+            $this->getIo()->error(
+                sprintf(
+                    '%s: %s',
+                    'Error saving the file',
+                    $e->getMessage()
+                )
+            );
+            return;
+        }
+
+        $this->getIo()->success(
+            sprintf(
+                'The file is on: %s',
+                $file_path
+            )
+        );
+    }
+
+}
diff --git a/vendor/drupal/console/src/Utils/Create/NodeData.php b/vendor/drupal/console/src/Utils/Create/NodeData.php
index f4d1f41feadd9dc95bdf1731b84cda41644bb91d..4d1e98dccdc80c6e0662cdca4396db670bee4d00 100644
--- a/vendor/drupal/console/src/Utils/Create/NodeData.php
+++ b/vendor/drupal/console/src/Utils/Create/NodeData.php
@@ -24,6 +24,7 @@ class NodeData extends Base
      * @param $limit
      * @param $titleWords
      * @param $timeRange
+     * @param $revision
      *
      * @return array
      */
@@ -32,6 +33,7 @@ public function create(
         $limit,
         $titleWords,
         $timeRange,
+        $revision,
         $language = LanguageInterface::LANGCODE_NOT_SPECIFIED
     ) {
         $nodes = [];
@@ -55,6 +57,13 @@ public function create(
 
                 $this->generateFieldSampleData($node);
                 $node->save();
+
+                if($revision) {
+                    for ($a = 0; $a < 3; $a++) {
+                        $this->addRevision($node, $a);
+                    }
+                }
+
                 $nodes['success'][] = [
                     'nid' => $node->id(),
                     'node_type' => $bundles[$contentType],
@@ -72,4 +81,16 @@ public function create(
 
         return $nodes;
     }
+
+    /**
+     * @param $node
+     * @param $count
+     */
+    private function addRevision($node, $count) {
+        $node->setTitle($this->getRandom()->sentences(mt_rand(1, 5), true));
+        $node->setNewRevision(TRUE);
+        $node->revision_log = "Revision number $count was created";
+        $node->setRevisionCreationTime(REQUEST_TIME);
+        $node->save();
+    }
 }
diff --git a/vendor/drupal/console/src/Utils/DrupalApi.php b/vendor/drupal/console/src/Utils/DrupalApi.php
index 64a740585c5d7f6d74f5cc3aa6350c7187fbfddc..57a97d1a53216d6ae71ab2811bc3230375d0eecb 100644
--- a/vendor/drupal/console/src/Utils/DrupalApi.php
+++ b/vendor/drupal/console/src/Utils/DrupalApi.php
@@ -131,7 +131,7 @@ public function getVocabularies()
      *
      * @return array
      */
-    public function getRoles($reset=false, $authenticated=false, $anonymous=false)
+    public function getRoles($reset = false, $authenticated = false, $anonymous = false)
     {
         if ($reset || !$this->roles) {
             $roles = $this->entityTypeManager->getStorage('user_role')->loadMultiple();
@@ -232,86 +232,6 @@ public function downloadFile($url, $destination)
         return file_exists($destination);
     }
 
-    /**
-     * Gets Drupal modules releases from Packagist API.
-     *
-     * @param string $module
-     * @param int    $limit
-     * @param bool   $unstable
-     *
-     * @return array
-     */
-    public function getPackagistModuleReleases($module, $limit = 10, $unstable = true)
-    {
-        if (!trim($module)) {
-            return [];
-        }
-
-        return $this->getComposerReleases(
-            sprintf(
-                'http://packagist.drupal-composer.org/packages/drupal/%s.json',
-                trim($module)
-            ),
-            $limit,
-            $unstable
-        );
-    }
-
-    /**
-     * Gets Drupal releases from Packagist API.
-     *
-     * @param string $url
-     * @param int    $limit
-     * @param bool   $unstable
-     *
-     * @return array
-     */
-    private function getComposerReleases($url, $limit = 10, $unstable = false)
-    {
-        if (!$url) {
-            return [];
-        }
-
-        $packagistResponse = $this->httpClient->getUrlAsString($url);
-
-        if ($packagistResponse->getStatusCode() != 200) {
-            throw new \Exception('Invalid path.');
-        }
-
-        try {
-            $packagistJson = json_decode(
-                $packagistResponse->getBody()->getContents()
-            );
-        } catch (\Exception $e) {
-            return [];
-        }
-
-        $versions = array_keys((array)$packagistJson->package->versions);
-
-        // Remove Drupal 7 versions
-        $i = 0;
-        foreach ($versions as $version) {
-            if (0 === strpos($version, "7.") || 0 === strpos($version, "dev-7.")) {
-                unset($versions[$i]);
-            }
-            $i++;
-        }
-
-        if (!$unstable) {
-            foreach ($versions as $key => $version) {
-                if (strpos($version, "-")) {
-                    unset($versions[$key]);
-                }
-            }
-        }
-
-        if (is_array($versions)) {
-            return array_slice($versions, 0, $limit);
-        }
-
-        return [];
-    }
-
     /**
      * @Todo: Remove when issue https://www.drupal.org/node/2556025 get resolved
      *
diff --git a/vendor/drupal/console/src/Utils/Site.php b/vendor/drupal/console/src/Utils/Site.php
index f3baffc058a16ad5cd222d72b794593835238126..2bb0b222ebc94d9e977006b6c425473eed7b0793 100644
--- a/vendor/drupal/console/src/Utils/Site.php
+++ b/vendor/drupal/console/src/Utils/Site.php
@@ -2,6 +2,9 @@
 
 namespace Drupal\Console\Utils;
 
+use Drupal\Console\Core\Style\DrupalStyle;
+use Symfony\Component\Console\Input\ArrayInput;
+use Symfony\Component\Console\Output\ConsoleOutput;
 use Symfony\Component\DependencyInjection\Reference;
 use Symfony\Component\Finder\Finder;
 use Drupal\Core\DependencyInjection\ContainerBuilder;
@@ -28,6 +31,11 @@ class Site
      */
     protected $cacheServicesFile;
 
+    /**
+     * @var DrupalStyle
+     */
+    protected $io;
+
     /**
      * Site constructor.
      *
@@ -40,6 +48,10 @@ public function __construct(
     ) {
         $this->appRoot = $appRoot;
         $this->configurationManager = $configurationManager;
+
+        $output = new ConsoleOutput();
+        $input = new ArrayInput([]);
+        $this->io = new DrupalStyle($input, $output);
     }
 
     public function loadLegacyFile($legacyFile, $relative = true)
@@ -167,6 +179,21 @@ public function getAutoload()
         return include $autoLoadFile;
     }
 
+    /**
+    * @param InputInterface $input
+    * @return string
+    */
+    public function getMultisiteName($input)
+    {
+        $uri = $input->getParameterOption(['--uri', '-l'], 'default');
+
+        if ($uri && !preg_match('/^(http|https):\/\//', $uri)) {
+            $uri = sprintf('http://%s', $uri);
+        }
+
+        return  parse_url($uri, PHP_URL_HOST);
+    }
+
     /**
      * @return boolean
      */
@@ -180,9 +207,41 @@ public function multisiteMode($uri)
     }
 
     /**
+     * @param string $uri
+     *
      * @return boolean
      */
     public function validMultisite($uri)
+    {
+        $sites = $this->getAllMultisites();
+
+        if (isset($sites[$uri]) && is_dir($this->appRoot . "/sites/" . $sites[$uri])) {
+            return true;
+        }
+
+        return false;
+    }
+
+    /**
+     * @param string $uri
+     *
+     * @return string
+     */
+    public function getMultisiteDir($uri)
+    {
+        if(!$this->validMultisite($uri)) {
+            $this->io->error('Invalid multisite, please debug multisite using command drupal debug:mulltisite and choose one');
+            exit();
+        }
+
+        return $this->getAllMultisites()[$uri];
+
+    }
+
+    /**
+     * @return mixed
+     */
+    private function getAllMultisites()
     {
         $multiSiteFile = sprintf(
             '%s/sites/sites.php',
@@ -191,15 +250,11 @@ public function validMultisite($uri)
 
         if (file_exists($multiSiteFile)) {
             include $multiSiteFile;
-        } else {
-            return false;
-        }
 
-        if (isset($sites[$uri]) && is_dir($this->appRoot . "/sites/" . $sites[$uri])) {
-            return true;
+            return $sites;
+        } else {
+            return null;
         }
-
-        return false;
     }
 
     public function getCachedServicesFile()
diff --git a/vendor/drupal/console/src/Utils/Validator.php b/vendor/drupal/console/src/Utils/Validator.php
index b70b93aee90761d09b4ca920ef2b80043c203179..738589268447fad6c7c0810f73638ba8276efef3 100644
--- a/vendor/drupal/console/src/Utils/Validator.php
+++ b/vendor/drupal/console/src/Utils/Validator.php
@@ -15,9 +15,13 @@ class Validator
     const REGEX_CLASS_NAME = '/^[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]+$/';
     const REGEX_COMMAND_CLASS_NAME = '/^[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]+Command$/';
     const REGEX_CONTROLLER_CLASS_NAME = '/^[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]+Controller$/';
-    const REGEX_MACHINE_NAME = '/^[a-z0-9_]+$/';
+    const REGEX_MACHINE_NAME = '/^[a-z][a-z\d_]+$/';
+    const REGEX_DEPENDENCY_NAME = '/^[a-z0-9_:]+$/';
+    const REGEX_URI_NAME = '/^[a-z0-9_.]+$/';
     // This REGEX remove spaces between words
     const REGEX_REMOVE_SPACES = '/[\\s+]/';
+    // Max length to 32
+    const MAX_MACHINE_NAME = 32;
 
     protected $appRoot;
 
@@ -63,6 +67,20 @@ public function validateClassName($class_name)
         }
     }
 
+    public function validateUriName($uri_name)
+    {
+        if (preg_match(self::REGEX_URI_NAME, $uri_name)) {
+            return $uri_name;
+        } else {
+            throw new \InvalidArgumentException(
+                sprintf(
+                    'Uri name "%s" is invalid, it must starts with a letter, followed by any number of letters, numbers, or underscores.',
+                    $uri_name
+                )
+            );
+        }
+    }
+
     public function validateBundleTitle($bundle_title)
     {
         if (!empty($bundle_title)) {
@@ -116,7 +134,21 @@ public function validateControllerName($class_name)
 
     public function validateMachineName($machine_name)
     {
-        if (preg_match(self::REGEX_MACHINE_NAME, $machine_name)) {
+        // @see https://www.drupal.org/docs/8/creating-custom-modules/naming-and-placing-your-drupal-8-module
+        $reserved_words = [
+            'src', 'lib', 'vendor', 'assets', 'css', 'files', 'images', 'js', 'misc', 'templates', 'includes',
+            'fixtures', 'Drupal',
+        ];
+        if (preg_match(self::REGEX_MACHINE_NAME, $machine_name) && !in_array($machine_name, $reserved_words)) {
+            if (strlen($machine_name) > self::MAX_MACHINE_NAME) {
+                throw new \InvalidArgumentException(
+                    sprintf(
+                        'Machine name "%s" is longer than %s symbols.',
+                        $machine_name,
+                        self::MAX_MACHINE_NAME
+                    )
+                );
+            }
             return $machine_name;
         } else {
             throw new \InvalidArgumentException(
@@ -166,7 +198,7 @@ public function validateMachineNameList($list)
         $list = explode(',', $this->removeSpaces($list));
         foreach ($list as $key => $module) {
             if (!empty($module)) {
-                if (preg_match(self::REGEX_MACHINE_NAME, $module)) {
+                if (preg_match(self::REGEX_DEPENDENCY_NAME, $module)) {
                     $list_checked['success'][] = $module;
                 } else {
                     $list_checked['fail'][] = $module;
@@ -282,7 +314,7 @@ public function getMissingModules($moduleList)
 
         return array_diff($moduleList, $modules);
     }
-
+    
     /**
      * @param $moduleList
      * @return array
@@ -405,4 +437,18 @@ public function validateRoleExistence($role, $roles) {
     public function validateRoleNotExistence($role, $roles) {
         return $this->validateRole($role, $roles, false);
     }
+
+    /**
+     * @param $themeList
+     * @return array
+     */
+    public function getMissingThemes($themeList)
+    {
+        $themes = $this->extensionManager->discoverThemes()
+            ->showInstalled()
+            ->showNoCore()
+            ->getList(true);
+
+        return array_diff($themeList, $themes);
+    }
 }
diff --git a/vendor/drupal/console/templates/base/class.php.twig b/vendor/drupal/console/templates/base/class.php.twig
index e8275a15822dfe2d0b207753efb6b959867641bf..7bca23cf965b0d622be9d9cf5409449412b63cd6 100644
--- a/vendor/drupal/console/templates/base/class.php.twig
+++ b/vendor/drupal/console/templates/base/class.php.twig
@@ -23,6 +23,7 @@ use {{ service.class }};
    * @var \{{ service.class }}
    */
   protected ${{service.camel_case_name}};
+
 {% endfor %}
 {% endif %}
 {% endblock %}
diff --git a/vendor/drupal/console/templates/database/add-default.php.twig b/vendor/drupal/console/templates/database/add-default.php.twig
new file mode 100644
index 0000000000000000000000000000000000000000..175c133d4892e5cf3477890f220c909083c75a23
--- /dev/null
+++ b/vendor/drupal/console/templates/database/add-default.php.twig
@@ -0,0 +1,10 @@
+
+$databases['default']['default'] = [
+  'database' => '{{ database }}',
+  'username' => '{{ username }}',
+  'password' => '{{ password }}',
+  'host' => '{{ host }}',
+  'port' => '{{ port }}',
+  'driver' => '{{ driver }}',
+  'prefix' => '{{ prefix }}',
+];
diff --git a/vendor/drupal/console/templates/module/composer.json.twig b/vendor/drupal/console/templates/module/composer.json.twig
index 232f89d3eaa95333d3812816c14a8967aeefe32b..32c8035a0f1d08d8c84ba74743fefb682437dcdf 100644
--- a/vendor/drupal/console/templates/module/composer.json.twig
+++ b/vendor/drupal/console/templates/module/composer.json.twig
@@ -1,14 +1,56 @@
 {
-  "name": "drupal/{{ machine_name }}",
-  "type": "drupal-{{ type }}",
-  "description": "{{ description }}",
-  "keywords": ["Drupal"],
-  "license": "GPL-2.0+",
-  "homepage": "https://www.drupal.org/project/{{ machine_name }}",
-  "minimum-stability": "dev",
-  "support": {
-    "issues": "https://www.drupal.org/project/issues/{{ machine_name }}",
-    "source": "http://cgit.drupalcode.org/{{ machine_name }}"
-  },
-  "require": { }
+    "name": "{{ machine_name }}",
+    "type": "{{ type }}",
+    "description": "{{ description }}",
+{% if keywords is defined and keywords is not empty %}
+    "keywords": [
+{% for keyword in keywords %}
+        "{{ keyword }}"{% if not loop.last %},{% endif %}
+
+{% endfor %}
+    ],
+{% endif %}
+{% if lincense is defined and lincense is not empty %}
+    "license": "{{ license }}",
+{% endif %}
+{% if homepage is defined and homepage is not empty %}
+    "homepage": "{{ homepage }}",
+{% endif %}
+{% if minimum_stability is defined and minimum_stability is not empty %}
+    "minimum-stability": "{{ minimum_stability }}",
+{% endif %}
+{% if authors is defined and authors is not empty %}
+    "authors": [
+{% for author in authors %}
+        {
+{% if author.name is defined and author.name is not empty %}
+            "name" : "{{ author.name }}",
+{% endif %}
+{% if author.email is defined and author.email is not empty %}
+            "email" : "{{ author.email }}",
+{% endif %}
+{% if author.homepage is defined and author.homepage is not empty %}
+            "homepage" : "{{ author.homepage }}",
+{% endif %}
+{% if author.role is defined and author.role is not empty %}
+            "role" : "{{ author.role }}"
+{% endif %}
+        }{% if not loop.last %},{% endif %}
+{% endfor %}
+    ],
+{% endif %}
+{% if support_items is defined and support_items is not empty %}
+    "support": {
+{% for support in support_items %}
+        "{{ support.channel }}": "{{ support.url }}",
+{% endfor %}
+    },
+{% endif %}
+{% if required_items is defined and required_items is not empty %}
+    "require": {
+{% for required_item in required_items %}
+        "{{ required_item.name }}": "{{ required_item.version }}",
+{% endfor %}
+    }
+{% endif %}
 }
diff --git a/vendor/drupal/console/templates/module/help.php.twig b/vendor/drupal/console/templates/module/help.php.twig
index 28248c1e5022b93ac5173f690b0e159e0d299685..7a4ceb8cf121cbd53f3ccb8a996ca65b4ab63925 100644
--- a/vendor/drupal/console/templates/module/help.php.twig
+++ b/vendor/drupal/console/templates/module/help.php.twig
@@ -1,8 +1,15 @@
 {% block file_methods %}
 {% if not file_exists %}
 {% include 'module/php_tag.php.twig' %}
+
+/**
+ * @file
+ * Main module help for the {{ machine_name }} module.
+ */
+
 {% endif %}
 use Drupal\Core\Routing\RouteMatchInterface;
+
 /**
  * Implements hook_help().
  */
@@ -18,5 +25,4 @@ function {{machine_name}}_help($route_name, RouteMatchInterface $route_match) {
     default:
   }
 }
-
 {% endblock %}
diff --git a/vendor/drupal/console/templates/module/js/commands.php.twig b/vendor/drupal/console/templates/module/js/commands.php.twig
index 1c37459dc8f148ab7566644ee0c902b617377dd1..db4db4b4ee7333f012b1a8278d7027f69dbd771e 100644
--- a/vendor/drupal/console/templates/module/js/commands.php.twig
+++ b/vendor/drupal/console/templates/module/js/commands.php.twig
@@ -1,5 +1,10 @@
+/**
+* @file
+*/
+
 (function ($, Drupal) {
 Drupal.AjaxCommands.prototype.{{ method }} = function (ajax, response, status) {
   console.log(response.message);
 }
-})(jQuery, Drupal);
\ No newline at end of file
+
+})(jQuery, Drupal);
diff --git a/vendor/drupal/console/templates/module/links.action-entity.yml.twig b/vendor/drupal/console/templates/module/links.action-entity.yml.twig
index 2be50635cd2da685a74ad8dd996fd7ba1db9d45d..ae3baa6f8f2b10f322a14dc92dd262c68394f483 100644
--- a/vendor/drupal/console/templates/module/links.action-entity.yml.twig
+++ b/vendor/drupal/console/templates/module/links.action-entity.yml.twig
@@ -3,4 +3,3 @@ entity.{{ entity_name }}.add_form:
   title: 'Add {{ label }}'
   appears_on:
     - entity.{{ entity_name }}.collection
-
diff --git a/vendor/drupal/console/templates/module/links.menu-entity-config.yml.twig b/vendor/drupal/console/templates/module/links.menu-entity-config.yml.twig
index 0afe1feeb439b9a3915a63792993d095b9d6881a..150f4106ea47eba3f70fc4e89cda29215291f1e4 100644
--- a/vendor/drupal/console/templates/module/links.menu-entity-config.yml.twig
+++ b/vendor/drupal/console/templates/module/links.menu-entity-config.yml.twig
@@ -7,4 +7,3 @@ entity.{{ entity_name }}.collection:
   description: 'List {{ label }} (bundles)'
   parent: system.admin_structure
   weight: 99
-
diff --git a/vendor/drupal/console/templates/module/links.menu.yml.twig b/vendor/drupal/console/templates/module/links.menu.yml.twig
index 0842ba6a05ce918dbcb028422b2c74516f4c895c..9f5f08867d1c266eead779d172bbcd009508275f 100644
--- a/vendor/drupal/console/templates/module/links.menu.yml.twig
+++ b/vendor/drupal/console/templates/module/links.menu.yml.twig
@@ -4,4 +4,3 @@
   description: '{{ menu_link_desc }}'
   parent: {{ menu_parent }}
   weight: 99
-
diff --git a/vendor/drupal/console/templates/module/links.task-entity-content.yml.twig b/vendor/drupal/console/templates/module/links.task-entity-content.yml.twig
index 206389c77aa4a29b21803f4aec3af52af9fe2510..94dc2ccecc59f832de93eb52d58d48904cda9ef0 100644
--- a/vendor/drupal/console/templates/module/links.task-entity-content.yml.twig
+++ b/vendor/drupal/console/templates/module/links.task-entity-content.yml.twig
@@ -29,4 +29,3 @@ entity.{{ entity_name }}.delete_form:
   base_route:  entity.{{ entity_name }}.canonical
   title: Delete
   weight: 10
-
diff --git a/vendor/drupal/console/templates/module/module-block-twig-template-append.twig b/vendor/drupal/console/templates/module/module-block-twig-template-append.twig
new file mode 100644
index 0000000000000000000000000000000000000000..050d6e7e4700e73dace5f30652c85eae936be0a2
--- /dev/null
+++ b/vendor/drupal/console/templates/module/module-block-twig-template-append.twig
@@ -0,0 +1,22 @@
+{% if file_exist == false %}
+<?php
+
+/**
+ * @file
+ * module file.
+ */
+{% endif %}
+
+/**
+ * Implements hook_theme().
+ */
+function {{module}}_theme() {
+  return [
+    '{{machine_name}}' => [
+      'variables' => [
+        'content' => NULL
+      ],
+      'render element' => 'children',
+    ],
+  ];
+}
diff --git a/vendor/drupal/console/templates/module/module-file.twig b/vendor/drupal/console/templates/module/module-file.twig
index 9dc8767de0e760242630aac2c41f843089f3de21..f78c5fbfa08846014e91c8c2aa2005c78a085514 100644
--- a/vendor/drupal/console/templates/module/module-file.twig
+++ b/vendor/drupal/console/templates/module/module-file.twig
@@ -1,5 +1,6 @@
-{% extends "base/file.php.twig" %}
-
-{% block file_path %}{{machine_name}}.module.{% endblock %}
-
+{% include 'module/php_tag.php.twig' %}
 
+/**
+ * @file
+ * Contains {{machine_name}}.module.
+ */
diff --git a/vendor/drupal/console/templates/module/module.twig b/vendor/drupal/console/templates/module/module.twig
index 53540372f57786d83aed6b308f628b5900481a5d..4ff21d17ad01f8ee1ca592ed509ee1e1f3ae79e9 100644
--- a/vendor/drupal/console/templates/module/module.twig
+++ b/vendor/drupal/console/templates/module/module.twig
@@ -16,7 +16,9 @@ function {{machine_name}}_help($route_name, RouteMatchInterface $route_match) {
     case 'help.page.{{ machine_name }}':
       $output = '';
       $output .= '<h3>' . t('About') . '</h3>';
+{% if description %}
       $output .= '<p>' . t('{{ description|escape }}') . '</p>';
+{% endif %}
       return $output;
 
     default:
diff --git a/vendor/drupal/console/templates/module/module.views.inc.twig b/vendor/drupal/console/templates/module/module.views.inc.twig
index 98e755c135f3b83576b9cea9fe7d1a6723798fb3..31844fa45e39e0a93032ff5256f5ad352b7be45e 100644
--- a/vendor/drupal/console/templates/module/module.views.inc.twig
+++ b/vendor/drupal/console/templates/module/module.views.inc.twig
@@ -4,16 +4,6 @@
 
 {% block extra_info %} * Provide a custom views field data that isn't tied to any other module.{% endblock %}
 
-{% block use_class %}
-use Drupal\Component\Utility\NestedArray;
-use Drupal\Core\Entity\EntityStorageInterface;
-use Drupal\Core\Entity\Sql\SqlContentEntityStorage;
-use Drupal\Core\Render\Markup;
-use Drupal\field\FieldConfigInterface;
-use Drupal\field\FieldStorageConfigInterface;
-use Drupal\system\ActionConfigEntityInterface;
-{% endblock %}
-
 {% block file_methods %}
 /**
 * Implements hook_views_data().
@@ -26,15 +16,15 @@ function {{module}}_views_data() {
       '#global' => [],
     ];
 
-
-    $data['views']['{{ class_machine_name }}'] = [
-        'title' => t('{{ title }}'),
-        'help' => t('{{ description }}'),
+{% for field in fields %}
+    $data['views']['{{ field.class_machine_name }}'] = [
+        'title' => t('{{ field.title }}'),
+        'help' => t('{{ field.description }}'),
         'field' => [
-            'id' => '{{ class_machine_name }}',
+            'id' => '{{ field.class_machine_name }}',
         ],
     ];
-
+{% endfor %}
     return $data;
 }
 {% endblock %}
diff --git a/vendor/drupal/console/templates/module/permission.yml.twig b/vendor/drupal/console/templates/module/permission.yml.twig
index 423e5ee2791926d3a63253afb1bdf77fd00902b9..b97f973ca1d4cbfb9e31d99c7f0635fa6b0b09cc 100644
--- a/vendor/drupal/console/templates/module/permission.yml.twig
+++ b/vendor/drupal/console/templates/module/permission.yml.twig
@@ -1,5 +1,4 @@
 {% if permissions|length %}
-
 {% for permission in permissions %}
 {{ permission.permission }}:
   title: '{{ permission.title }}'
diff --git a/vendor/drupal/console/templates/module/permissions-entity-content.yml.twig b/vendor/drupal/console/templates/module/permissions-entity-content.yml.twig
index 73e8b6804b6e1c89b4639dbbacad3b684de8479b..beabca8336af37efd517f7429ce2959c5a177401 100644
--- a/vendor/drupal/console/templates/module/permissions-entity-content.yml.twig
+++ b/vendor/drupal/console/templates/module/permissions-entity-content.yml.twig
@@ -30,3 +30,8 @@ delete all {{ label|lower }} revisions:
   title: 'Delete all revisions'
   description: 'Role requires permission to <em>view {{ label }} revisions</em> and <em>delete rights</em> for {{ label|lower }} entities in question or <em>administer {{ label|lower }} entities</em>.'
 {% endif %}
+
+{% if has_bundle_permissions %}
+permission_callbacks:
+  - \Drupal\{{ module }}\{{ entity_class}}Permissions::generatePermissions
+{% endif %}
diff --git a/vendor/drupal/console/templates/module/post-update.php.twig b/vendor/drupal/console/templates/module/post-update.php.twig
index 0b729e3e2c39ac1327cfec6e7fafc3fe9e149841..3334f4c67f80e5f230380492fdeeb8413ff5ee9d 100644
--- a/vendor/drupal/console/templates/module/post-update.php.twig
+++ b/vendor/drupal/console/templates/module/post-update.php.twig
@@ -6,7 +6,7 @@
  * Implements hook_post_update_NAME() on Module {{ module }} Post Update {{ post_update_name }}.
  */
 function {{ module }}_post_update_{{ post_update_name }}(&$sandbox) {
-    drupal_set_message('Module {{ module }} Post Update # {{ post_update_name }} () was executed successfully.');
+    \Drupal::messenger()->addMessage('Module {{ module }} Post Update # {{ post_update_name }} () was executed successfully.');
 }
 
 {% endblock %}
diff --git a/vendor/drupal/console/templates/module/routing-form.yml.twig b/vendor/drupal/console/templates/module/routing-form.yml.twig
index f387bc05897782f848961f637656ed17231e9113..4a0f6231551b3787e43469ec90087244538f8909 100644
--- a/vendor/drupal/console/templates/module/routing-form.yml.twig
+++ b/vendor/drupal/console/templates/module/routing-form.yml.twig
@@ -1,5 +1,4 @@
 {% if class_name is defined %}
-
 {{ module_name }}.{{form_id}}:
   path: '{{ path }}'
   defaults:
@@ -13,6 +12,5 @@
 {% else %}
   requirements:
     _access: 'TRUE'
-  {% endif %}
 {% endif %}
-
+{% endif %}
diff --git a/vendor/drupal/console/templates/module/schema.yml.twig b/vendor/drupal/console/templates/module/schema.yml.twig
new file mode 100644
index 0000000000000000000000000000000000000000..8ec814be8b542988c925b11643595ff9ef3ba412
--- /dev/null
+++ b/vendor/drupal/console/templates/module/schema.yml.twig
@@ -0,0 +1,10 @@
+field.widget.settings.{{ plugin_id }}:
+  type: mapping
+  label: '{{ label }} widget settings'
+  mapping:
+    size:
+      type: integer
+      label: 'Size'
+    placeholder:
+      type: textfield
+      label: 'Placeholder'
diff --git a/vendor/drupal/console/templates/module/services.yml.twig b/vendor/drupal/console/templates/module/services.yml.twig
index 11dfefc62883942f9500e61aeb0227c112870396..77df2fadd0d85ef406350d31fa392c9a820010f1 100644
--- a/vendor/drupal/console/templates/module/services.yml.twig
+++ b/vendor/drupal/console/templates/module/services.yml.twig
@@ -1,7 +1,12 @@
-{% if name is defined %}
 {% if not file_exists %}
 services:
 {% endif %}
+{% if logger_channel is defined %}
+  logger.channel.{{ module }}:
+    parent: logger.channel_base
+    arguments: ['{{ module }}']
+{% endif %}
+{% if name is defined %}
   {{ name | lower }}:
     class: {{ class_path }}
 {% if services is defined %}
diff --git a/vendor/drupal/console/templates/module/src/Command/command.php.twig b/vendor/drupal/console/templates/module/src/Command/command.php.twig
index 0b16f4f5d244c09ddf46e8ea4c1c09ccccd0d179..647d6d660f08e9d3467bd543d9715624be00c791 100644
--- a/vendor/drupal/console/templates/module/src/Command/command.php.twig
+++ b/vendor/drupal/console/templates/module/src/Command/command.php.twig
@@ -16,14 +16,13 @@ use Drupal\Console\Core\Command\ContainerAwareCommand;
 {% else %}
 use Drupal\Console\Core\Command\Command;
 {% endif %}
-use Drupal\Console\Annotations\DrupalCommand;
 {% endblock %}
 
 {% block class_declaration %}
 /**
  * Class {{ class_name }}.
  *
- * @DrupalCommand (
+ * Drupal\Console\Annotations\DrupalCommand (
  *     extension="{{extension}}",
  *     extensionType="{{ extension_type }}"
  * )
@@ -39,6 +38,7 @@ class {{ class_name }} extends {% if container_aware %}ContainerAwareCommand{% e
 {{ serviceClassInitialization(services) }}
     parent::__construct();
   }
+
 {% endif %}
 {% endblock %}
 
@@ -53,9 +53,9 @@ class {{ class_name }} extends {% if container_aware %}ContainerAwareCommand{% e
   }
 
 {% if initialize %}
- /**
-  * {@inheritdoc}
-  */
+  /**
+   * {@inheritdoc}
+   */
   protected function initialize(InputInterface $input, OutputInterface $output) {
     parent::initialize($input, $output);
     $this->getIo()->info('initialize');
@@ -63,9 +63,9 @@ class {{ class_name }} extends {% if container_aware %}ContainerAwareCommand{% e
 
 {% endif %}
 {% if interact %}
- /**
-  * {@inheritdoc}
-  */
+  /**
+   * {@inheritdoc}
+   */
   protected function interact(InputInterface $input, OutputInterface $output) {
     $this->getIo()->info('interact');
   }
@@ -81,5 +81,4 @@ class {{ class_name }} extends {% if container_aware %}ContainerAwareCommand{% e
     $this->generator->generate([]);
 {% endif %}
   }
-
-{%- endblock -%}
+{% endblock %}
diff --git a/vendor/drupal/console/templates/module/src/Command/console/translations/en/command.yml.twig b/vendor/drupal/console/templates/module/src/Command/console/translations/en/command.yml.twig
index 203b8932727451384839c4d35823b4416c775241..15b3958b6753176531a8127d96823dcc48411458 100644
--- a/vendor/drupal/console/templates/module/src/Command/console/translations/en/command.yml.twig
+++ b/vendor/drupal/console/templates/module/src/Command/console/translations/en/command.yml.twig
@@ -2,4 +2,4 @@ description: 'Drupal Console generated command.'
 options: {}
 arguments: {}
 messages:
-    success: 'I am a new generated command.'
\ No newline at end of file
+    success: 'I am a new generated command.'
diff --git a/vendor/drupal/console/templates/module/src/Controller/controller.php.twig b/vendor/drupal/console/templates/module/src/Controller/controller.php.twig
index 568f3b450fb637c0601dac41834c6057fce4bf41..0743ee5e755cb79b86b546700f6281d6cd24ec85 100644
--- a/vendor/drupal/console/templates/module/src/Controller/controller.php.twig
+++ b/vendor/drupal/console/templates/module/src/Controller/controller.php.twig
@@ -14,32 +14,25 @@ use Drupal\Core\Controller\ControllerBase;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 {% endif %}
 {% endblock %}
+
+{% block use_class_services %}
+{% endblock %}
+
 {% block class_declaration %}
 /**
  * Class {{ class_name }}.
  */
 class {{ class_name }} extends ControllerBase {% endblock %}
-{% block class_construct %}
-{% if services is not empty %}
 
-  /**
-   * Constructs a new {{ class_name }} object.
-   */
-  public function __construct({{ servicesAsParameters(services)|join(', ') }}) {
-{{ serviceClassInitialization(services) }}
-  }
-{% endif %}
-{% endblock %}
 {% block class_create %}
 {% if services is not empty %}
-
   /**
    * {@inheritdoc}
    */
   public static function create(ContainerInterface $container) {
-    return new static(
-{{ serviceClassInjection(services) }}
-    );
+    $instance = parent::create($container);
+{{ serviceClassInjectionNoOverride(services) }}
+    return $instance;
   }
 
 {% endif %}
diff --git a/vendor/drupal/console/templates/module/src/Controller/entity-controller.php.twig b/vendor/drupal/console/templates/module/src/Controller/entity-controller.php.twig
index 7e340e0e3b8446b7043e51c732eb3fdcbab5021e..e948bf932924cc7e9a982c173b013c11518cc244 100644
--- a/vendor/drupal/console/templates/module/src/Controller/entity-controller.php.twig
+++ b/vendor/drupal/console/templates/module/src/Controller/entity-controller.php.twig
@@ -14,6 +14,7 @@ use Drupal\Core\Controller\ControllerBase;
 use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
 use Drupal\Core\Url;
 use Drupal\{{ module }}\Entity\{{ entity_class }}Interface;
+use Symfony\Component\DependencyInjection\ContainerInterface;
 {% endblock %}
 {% block class_declaration %}
 /**
@@ -22,58 +23,90 @@ use Drupal\{{ module }}\Entity\{{ entity_class }}Interface;
  *  Returns responses for {{ label }} routes.
  */
 class {{ entity_class }}Controller extends ControllerBase implements ContainerInjectionInterface {% endblock %}
-
 {% block class_methods %}
   /**
-   * Displays a {{ label }}  revision.
+   * The date formatter.
+   *
+   * @var \Drupal\Core\Datetime\DateFormatter
+   */
+  protected $dateFormatter;
+
+  /**
+   * The renderer.
+   *
+   * @var \Drupal\Core\Render\Renderer
+   */
+  protected $renderer;
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container) {
+    $instance = parent::create($container);
+    $instance->dateFormatter = $container->get('date.formatter');
+    $instance->renderer = $container->get('renderer');
+    return $instance;
+  }
+
+  /**
+   * Displays a {{ label }} revision.
    *
    * @param int ${{ entity_name }}_revision
-   *   The {{ label }}  revision ID.
+   *   The {{ label }} revision ID.
    *
    * @return array
    *   An array suitable for drupal_render().
    */
   public function revisionShow(${{ entity_name }}_revision) {
-    ${{ entity_name }} = $this->entityManager()->getStorage('{{ entity_name }}')->loadRevision(${{ entity_name }}_revision);
-    $view_builder = $this->entityManager()->getViewBuilder('{{ entity_name }}');
+    ${{ entity_name }} = $this->entityTypeManager()->getStorage('{{ entity_name }}')
+      ->loadRevision(${{ entity_name }}_revision);
+    $view_builder = $this->entityTypeManager()->getViewBuilder('{{ entity_name }}');
 
     return $view_builder->view(${{ entity_name }});
   }
 
   /**
-   * Page title callback for a {{ label }}  revision.
+   * Page title callback for a {{ label }} revision.
    *
    * @param int ${{ entity_name }}_revision
-   *   The {{ label }}  revision ID.
+   *   The {{ label }} revision ID.
    *
    * @return string
    *   The page title.
    */
   public function revisionPageTitle(${{ entity_name }}_revision) {
-    ${{ entity_name }} = $this->entityManager()->getStorage('{{ entity_name }}')->loadRevision(${{ entity_name }}_revision);
-    return $this->t('Revision of %title from %date', ['%title' => ${{ entity_name }}->label(), '%date' => format_date(${{ entity_name }}->getRevisionCreationTime())]);
+    ${{ entity_name }} = $this->entityTypeManager()->getStorage('{{ entity_name }}')
+      ->loadRevision(${{ entity_name }}_revision);
+    return $this->t('Revision of %title from %date', [
+      '%title' => ${{ entity_name }}->label(),
+      '%date' => $this->dateFormatter->format(${{ entity_name }}->getRevisionCreationTime()),
+    ]);
   }
 
   /**
-   * Generates an overview table of older revisions of a {{ label }} .
+   * Generates an overview table of older revisions of a {{ label }}.
    *
    * @param \Drupal\{{ module }}\Entity\{{ entity_class }}Interface ${{ entity_name }}
-   *   A {{ label }}  object.
+   *   A {{ label }} object.
    *
    * @return array
    *   An array as expected by drupal_render().
    */
   public function revisionOverview({{ entity_class }}Interface ${{ entity_name }}) {
     $account = $this->currentUser();
+    ${{ entity_name }}_storage = $this->entityTypeManager()->getStorage('{{ entity_name }}');
+
+{% if is_translatable %}
     $langcode = ${{ entity_name }}->language()->getId();
     $langname = ${{ entity_name }}->language()->getName();
     $languages = ${{ entity_name }}->getTranslationLanguages();
     $has_translations = (count($languages) > 1);
-    ${{ entity_name }}_storage = $this->entityManager()->getStorage('{{ entity_name }}');
-
     $build['#title'] = $has_translations ? $this->t('@langname revisions for %title', ['@langname' => $langname, '%title' => ${{ entity_name }}->label()]) : $this->t('Revisions for %title', ['%title' => ${{ entity_name }}->label()]);
-    $header = [$this->t('Revision'), $this->t('Operations')];
+{% else %}
+    $build['#title'] = $this->t('Revisions for %title', ['%title' => ${{ entity_name }}->label()]);
+{% endif %}
 
+    $header = [$this->t('Revision'), $this->t('Operations')];
     $revert_permission = (($account->hasPermission("revert all {{ label|lower }} revisions") || $account->hasPermission('administer {{ label|lower }} entities')));
     $delete_permission = (($account->hasPermission("delete all {{ label|lower }} revisions") || $account->hasPermission('administer {{ label|lower }} entities')));
 
@@ -86,18 +119,23 @@ class {{ entity_class }}Controller extends ControllerBase implements ContainerIn
     foreach (array_reverse($vids) as $vid) {
       /** @var \Drupal\{{ module }}\{{ entity_class }}Interface $revision */
       $revision = ${{ entity_name }}_storage->loadRevision($vid);
+{% if is_translatable %}
       // Only show revisions that are affected by the language that is being
       // displayed.
       if ($revision->hasTranslation($langcode) && $revision->getTranslation($langcode)->isRevisionTranslationAffected()) {
+{% endif %}
         $username = [
           '#theme' => 'username',
           '#account' => $revision->getRevisionUser(),
         ];
 
         // Use revision link to link to revisions that are not active.
-        $date = \Drupal::service('date.formatter')->format($revision->getRevisionCreationTime(), 'short');
+        $date = $this->dateFormatter->format($revision->getRevisionCreationTime(), 'short');
         if ($vid != ${{ entity_name }}->getRevisionId()) {
-          $link = $this->l($date, new Url('entity.{{ entity_name }}.revision', ['{{ entity_name }}' => ${{ entity_name }}->id(), '{{ entity_name }}_revision' => $vid]));
+          $link = $this->l($date, new Url('entity.{{ entity_name }}.revision', [
+            '{{ entity_name }}' => ${{ entity_name }}->id(),
+            '{{ entity_name }}_revision' => $vid,
+          ]));
         }
         else {
           $link = ${{ entity_name }}->link($date);
@@ -110,8 +148,11 @@ class {{ entity_class }}Controller extends ControllerBase implements ContainerIn
             '#template' => '{{  '{% trans %}{{ date }} by {{ username }}{% endtrans %}{% if message %}<p class="revision-log">{{ message }}</p>{% endif %}' }}',
             '#context' => [
               'date' => $link,
-              'username' => \Drupal::service('renderer')->renderPlain($username),
-              'message' => ['#markup' => $revision->getRevisionLogMessage(), '#allowed_tags' => Xss::getHtmlTagList()],
+              'username' => $this->renderer->renderPlain($username),
+              'message' => [
+                '#markup' => $revision->getRevisionLogMessage(),
+                '#allowed_tags' => Xss::getHtmlTagList(),
+              ],
             ],
           ],
         ];
@@ -137,10 +178,20 @@ class {{ entity_class }}Controller extends ControllerBase implements ContainerIn
               'title' => $this->t('Revert'),
 {% if is_translatable %}
               'url' => $has_translations ?
-              Url::fromRoute('entity.{{ entity_name }}.translation_revert', ['{{ entity_name }}' => ${{ entity_name }}->id(), '{{ entity_name }}_revision' => $vid, 'langcode' => $langcode]) :
-              Url::fromRoute('entity.{{ entity_name }}.revision_revert', ['{{ entity_name }}' => ${{ entity_name }}->id(), '{{ entity_name }}_revision' => $vid]),
+              Url::fromRoute('entity.{{ entity_name }}.translation_revert', [
+                '{{ entity_name }}' => ${{ entity_name }}->id(),
+                '{{ entity_name }}_revision' => $vid,
+                'langcode' => $langcode,
+              ]) :
+              Url::fromRoute('entity.{{ entity_name }}.revision_revert', [
+                '{{ entity_name }}' => ${{ entity_name }}->id(),
+                '{{ entity_name }}_revision' => $vid,
+              ]),
 {%  else %}
-              'url' => Url::fromRoute('entity.{{ entity_name }}.revision_revert', ['{{ entity_name }}' => ${{ entity_name }}->id(), '{{ entity_name }}_revision' => $vid]),
+              'url' => Url::fromRoute('entity.{{ entity_name }}.revision_revert', [
+                '{{ entity_name }}' => ${{ entity_name }}->id(),
+                '{{ entity_name }}_revision' => $vid,
+              ]),
 {% endif %}
             ];
           }
@@ -148,7 +199,10 @@ class {{ entity_class }}Controller extends ControllerBase implements ContainerIn
           if ($delete_permission) {
             $links['delete'] = [
               'title' => $this->t('Delete'),
-              'url' => Url::fromRoute('entity.{{ entity_name }}.revision_delete', ['{{ entity_name }}' => ${{ entity_name }}->id(), '{{ entity_name }}_revision' => $vid]),
+              'url' => Url::fromRoute('entity.{{ entity_name }}.revision_delete', [
+                '{{ entity_name }}' => ${{ entity_name }}->id(),
+                '{{ entity_name }}_revision' => $vid,
+              ]),
             ];
           }
 
@@ -161,7 +215,9 @@ class {{ entity_class }}Controller extends ControllerBase implements ContainerIn
         }
 
         $rows[] = $row;
+{% if is_translatable %}
       }
+{% endif %}
     }
 
     $build['{{ entity_name }}_revisions_table'] = [
diff --git a/vendor/drupal/console/templates/module/src/Entity/Bundle/entity-bundle-field-info-alter.php.twig b/vendor/drupal/console/templates/module/src/Entity/Bundle/entity-bundle-field-info-alter.php.twig
new file mode 100644
index 0000000000000000000000000000000000000000..03e5358cf35130dd34e1a86d7eae5e43d0efbdf3
--- /dev/null
+++ b/vendor/drupal/console/templates/module/src/Entity/Bundle/entity-bundle-field-info-alter.php.twig
@@ -0,0 +1,20 @@
+
+{% block use_class %}
+use Drupal\Core\Entity\EntityTypeInterface;
+{% endblock %}
+
+/**
+ * Implements hook_entity_bundle_field_info_alter().
+ */
+function {{module}}_entity_bundle_field_info_alter(&$fields, EntityTypeInterface $entity_type, $bundle) {
+{% if bundle %}
+  if ($bundle === '{{ bundle }}') {
+{% endif %}
+    if (isset($fields['{{ field_id }}'])) {
+      // Use the ID as defined in the annotation of the constraint definition.
+      $fields['{{ field_id }}']->addConstraint('{{ plugin_id }}', []);
+    }
+{% if bundle %}
+  }
+{% endif %}
+}
\ No newline at end of file
diff --git a/vendor/drupal/console/templates/module/src/Entity/Form/entity-content-revision-delete.php.twig b/vendor/drupal/console/templates/module/src/Entity/Form/entity-content-revision-delete.php.twig
index 02674ac116f3a9b7e99764e9ca5edf6308554704..20352b2dcd00fcea9e0f5035b85df72e77d3eb9c 100644
--- a/vendor/drupal/console/templates/module/src/Entity/Form/entity-content-revision-delete.php.twig
+++ b/vendor/drupal/console/templates/module/src/Entity/Form/entity-content-revision-delete.php.twig
@@ -9,8 +9,6 @@ namespace Drupal\{{module}}\Form;
 {% endblock %}
 
 {% block use_class %}
-use Drupal\Core\Database\Connection;
-use Drupal\Core\Entity\EntityStorageInterface;
 use Drupal\Core\Form\ConfirmFormBase;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\Url;
@@ -25,7 +23,6 @@ use Symfony\Component\DependencyInjection\ContainerInterface;
  */
 class {{ entity_class }}RevisionDeleteForm extends ConfirmFormBase {% endblock %}
 {% block class_methods %}
-
   /**
    * The {{ label }} revision.
    *
@@ -38,7 +35,7 @@ class {{ entity_class }}RevisionDeleteForm extends ConfirmFormBase {% endblock %
    *
    * @var \Drupal\Core\Entity\EntityStorageInterface
    */
-  protected ${{ entity_class }}Storage;
+  protected ${{ entity_class[:1]|lower ~ entity_class[1:] }}Storage;
 
   /**
    * The database connection.
@@ -47,28 +44,14 @@ class {{ entity_class }}RevisionDeleteForm extends ConfirmFormBase {% endblock %
    */
   protected $connection;
 
-  /**
-   * Constructs a new {{ entity_class }}RevisionDeleteForm.
-   *
-   * @param \Drupal\Core\Entity\EntityStorageInterface $entity_storage
-   *   The entity storage.
-   * @param \Drupal\Core\Database\Connection $connection
-   *   The database connection.
-   */
-  public function __construct(EntityStorageInterface $entity_storage, Connection $connection) {
-    $this->{{ entity_class }}Storage = $entity_storage;
-    $this->connection = $connection;
-  }
-
   /**
    * {@inheritdoc}
    */
   public static function create(ContainerInterface $container) {
-    $entity_manager = $container->get('entity.manager');
-    return new static(
-      $entity_manager->getStorage('{{ entity_name }}'),
-      $container->get('database')
-    );
+    $instance = parent::create($container);
+    $instance->{{ entity_class[:1]|lower ~ entity_class[1:] }}Storage = $container->get('entity_type.manager')->getStorage('{{ entity_name }}');
+    $instance->connection = $container->get('database');
+    return $instance;
   }
 
   /**
@@ -82,7 +65,9 @@ class {{ entity_class }}RevisionDeleteForm extends ConfirmFormBase {% endblock %
    * {@inheritdoc}
    */
   public function getQuestion() {
-    return t('Are you sure you want to delete the revision from %revision-date?', ['%revision-date' => format_date($this->revision->getRevisionCreationTime())]);
+    return $this->t('Are you sure you want to delete the revision from %revision-date?', [
+      '%revision-date' => format_date($this->revision->getRevisionCreationTime()),
+    ]);
   }
 
   /**
@@ -96,7 +81,7 @@ class {{ entity_class }}RevisionDeleteForm extends ConfirmFormBase {% endblock %
    * {@inheritdoc}
    */
   public function getConfirmText() {
-    return t('Delete');
+    return $this->t('Delete');
   }
 
   /**
@@ -116,7 +101,7 @@ class {{ entity_class }}RevisionDeleteForm extends ConfirmFormBase {% endblock %
     $this->{{ entity_class }}Storage->deleteRevision($this->revision->getRevisionId());
 
     $this->logger('content')->notice('{{ label }}: deleted %title revision %revision.', ['%title' => $this->revision->label(), '%revision' => $this->revision->getRevisionId()]);
-    drupal_set_message(t('Revision from %revision-date of {{ label }} %title has been deleted.', ['%revision-date' => format_date($this->revision->getRevisionCreationTime()), '%title' => $this->revision->label()]));
+    $this->messenger()->addMessage(t('Revision from %revision-date of {{ label }} %title has been deleted.', ['%revision-date' => format_date($this->revision->getRevisionCreationTime()), '%title' => $this->revision->label()]));
     $form_state->setRedirect(
       'entity.{{ entity_name }}.canonical',
        ['{{ entity_name }}' => $this->revision->id()]
diff --git a/vendor/drupal/console/templates/module/src/Entity/Form/entity-content-revision-revert-translation.php.twig b/vendor/drupal/console/templates/module/src/Entity/Form/entity-content-revision-revert-translation.php.twig
index 0c38ba5b35a11eae2a2c89e506416048611bc682..b31d29eff55091ab3deea4cd3d7aa7eb5e7f11bf 100644
--- a/vendor/drupal/console/templates/module/src/Entity/Form/entity-content-revision-revert-translation.php.twig
+++ b/vendor/drupal/console/templates/module/src/Entity/Form/entity-content-revision-revert-translation.php.twig
@@ -9,23 +9,19 @@ namespace Drupal\{{module}}\Form;
 {% endblock %}
 
 {% block use_class %}
-use Drupal\Core\Datetime\DateFormatterInterface;
-use Drupal\Core\Entity\EntityStorageInterface;
 use Drupal\Core\Form\FormStateInterface;
-use Drupal\Core\Language\LanguageManagerInterface;
 use Drupal\{{module}}\Entity\{{ entity_class }}Interface;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 {% endblock %}
 
 {% block class_declaration %}
 /**
- * Provides a form for reverting a {{ label }} revision for a single translation.
+ * Provides a form for reverting a {{ label }} revision for a single trans.
  *
  * @ingroup {{module}}
  */
 class {{ entity_class }}RevisionRevertTranslationForm extends {{ entity_class }}RevisionRevertForm {% endblock %}
 {% block class_methods %}
-
   /**
    * The language to be reverted.
    *
@@ -40,30 +36,13 @@ class {{ entity_class }}RevisionRevertTranslationForm extends {{ entity_class }}
    */
   protected $languageManager;
 
-  /**
-   * Constructs a new {{ entity_class }}RevisionRevertTranslationForm.
-   *
-   * @param \Drupal\Core\Entity\EntityStorageInterface $entity_storage
-   *   The {{ label }} storage.
-   * @param \Drupal\Core\Datetime\DateFormatterInterface $date_formatter
-   *   The date formatter service.
-   * @param \Drupal\Core\Language\LanguageManagerInterface $language_manager
-   *   The language manager.
-   */
-  public function __construct(EntityStorageInterface $entity_storage, DateFormatterInterface $date_formatter, LanguageManagerInterface $language_manager) {
-    parent::__construct($entity_storage, $date_formatter);
-    $this->languageManager = $language_manager;
-  }
-
   /**
    * {@inheritdoc}
    */
   public static function create(ContainerInterface $container) {
-    return new static(
-      $container->get('entity.manager')->getStorage('{{ entity_name }}'),
-      $container->get('date.formatter'),
-      $container->get('language_manager')
-    );
+    $instance = parent::create($container);
+    $instance->languageManager = $container->get('language_manager');
+    return $instance;
   }
 
   /**
@@ -77,7 +56,10 @@ class {{ entity_class }}RevisionRevertTranslationForm extends {{ entity_class }}
    * {@inheritdoc}
    */
   public function getQuestion() {
-    return t('Are you sure you want to revert @language translation to the revision from %revision-date?', ['@language' => $this->languageManager->getLanguageName($this->langcode), '%revision-date' => $this->dateFormatter->format($this->revision->getRevisionCreationTime())]);
+    return $this->t('Are you sure you want to revert @language translation to the revision from %revision-date?', [
+      '@language' => $this->languageManager->getLanguageName($this->langcode),
+      '%revision-date' => $this->dateFormatter->format($this->revision->getRevisionCreationTime()),
+    ]);
   }
 
   /**
diff --git a/vendor/drupal/console/templates/module/src/Entity/Form/entity-content-revision-revert.php.twig b/vendor/drupal/console/templates/module/src/Entity/Form/entity-content-revision-revert.php.twig
index 4077d94177661cbc2eea104f8030dc8b8b6d1eb1..53ceef0b89b53b8be55c8ffa9dec717d752047f7 100644
--- a/vendor/drupal/console/templates/module/src/Entity/Form/entity-content-revision-revert.php.twig
+++ b/vendor/drupal/console/templates/module/src/Entity/Form/entity-content-revision-revert.php.twig
@@ -9,8 +9,6 @@ namespace Drupal\{{module}}\Form;
 {% endblock %}
 
 {% block use_class %}
-use Drupal\Core\Datetime\DateFormatterInterface;
-use Drupal\Core\Entity\EntityStorageInterface;
 use Drupal\Core\Form\ConfirmFormBase;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\Url;
@@ -26,7 +24,6 @@ use Symfony\Component\DependencyInjection\ContainerInterface;
  */
 class {{ entity_class }}RevisionRevertForm extends ConfirmFormBase {% endblock %}
 {% block class_methods %}
-
   /**
    * The {{ label }} revision.
    *
@@ -39,7 +36,7 @@ class {{ entity_class }}RevisionRevertForm extends ConfirmFormBase {% endblock %
    *
    * @var \Drupal\Core\Entity\EntityStorageInterface
    */
-  protected ${{ entity_class }}Storage;
+  protected ${{ entity_class[:1]|lower ~ entity_class[1:] }}Storage;
 
   /**
    * The date formatter service.
@@ -48,27 +45,14 @@ class {{ entity_class }}RevisionRevertForm extends ConfirmFormBase {% endblock %
    */
   protected $dateFormatter;
 
-  /**
-   * Constructs a new {{ entity_class }}RevisionRevertForm.
-   *
-   * @param \Drupal\Core\Entity\EntityStorageInterface $entity_storage
-   *   The {{ label }} storage.
-   * @param \Drupal\Core\Datetime\DateFormatterInterface $date_formatter
-   *   The date formatter service.
-   */
-  public function __construct(EntityStorageInterface $entity_storage, DateFormatterInterface $date_formatter) {
-    $this->{{ entity_class }}Storage = $entity_storage;
-    $this->dateFormatter = $date_formatter;
-  }
-
   /**
    * {@inheritdoc}
    */
   public static function create(ContainerInterface $container) {
-    return new static(
-      $container->get('entity.manager')->getStorage('{{ entity_name }}'),
-      $container->get('date.formatter')
-    );
+    $instance = parent::create($container);
+    $instance->{{ entity_class[:1]|lower ~ entity_class[1:] }}Storage = $container->get('entity_type.manager')->getStorage('{{ entity_name }}');
+    $instance->dateFormatter = $container->get('date.formatter');
+    return $instance;
   }
 
   /**
@@ -82,7 +66,9 @@ class {{ entity_class }}RevisionRevertForm extends ConfirmFormBase {% endblock %
    * {@inheritdoc}
    */
   public function getQuestion() {
-    return t('Are you sure you want to revert to the revision from %revision-date?', ['%revision-date' => $this->dateFormatter->format($this->revision->getRevisionCreationTime())]);
+    return $this->t('Are you sure you want to revert to the revision from %revision-date?', [
+      '%revision-date' => $this->dateFormatter->format($this->revision->getRevisionCreationTime()),
+    ]);
   }
 
   /**
@@ -96,7 +82,7 @@ class {{ entity_class }}RevisionRevertForm extends ConfirmFormBase {% endblock %
    * {@inheritdoc}
    */
   public function getConfirmText() {
-    return t('Revert');
+    return $this->t('Revert');
   }
 
   /**
@@ -125,11 +111,13 @@ class {{ entity_class }}RevisionRevertForm extends ConfirmFormBase {% endblock %
     $original_revision_timestamp = $this->revision->getRevisionCreationTime();
 
     $this->revision = $this->prepareRevertedRevision($this->revision, $form_state);
-    $this->revision->revision_log = t('Copy of the revision from %date.', ['%date' => $this->dateFormatter->format($original_revision_timestamp)]);
+    $this->revision->revision_log = $this->t('Copy of the revision from %date.', [
+      '%date' => $this->dateFormatter->format($original_revision_timestamp),
+    ]);
     $this->revision->save();
 
     $this->logger('content')->notice('{{ label }}: reverted %title revision %revision.', ['%title' => $this->revision->label(), '%revision' => $this->revision->getRevisionId()]);
-    drupal_set_message(t('{{ label }} %title has been reverted to the revision from %revision-date.', ['%title' => $this->revision->label(), '%revision-date' => $this->dateFormatter->format($original_revision_timestamp)]));
+    $this->messenger()->addMessage(t('{{ label }} %title has been reverted to the revision from %revision-date.', ['%title' => $this->revision->label(), '%revision-date' => $this->dateFormatter->format($original_revision_timestamp)]));
     $form_state->setRedirect(
       'entity.{{ entity_name }}.version_history',
       ['{{ entity_name }}' => $this->revision->id()]
diff --git a/vendor/drupal/console/templates/module/src/Entity/Form/entity-content.php.twig b/vendor/drupal/console/templates/module/src/Entity/Form/entity-content.php.twig
index e21dc749962a335e22fba1c917c5d1e80f70d3f5..7d7ad33919cecffa84b0da9da762776093824bd2 100644
--- a/vendor/drupal/console/templates/module/src/Entity/Form/entity-content.php.twig
+++ b/vendor/drupal/console/templates/module/src/Entity/Form/entity-content.php.twig
@@ -11,6 +11,7 @@ namespace Drupal\{{module}}\Form;
 {% block use_class %}
 use Drupal\Core\Entity\ContentEntityForm;
 use Drupal\Core\Form\FormStateInterface;
+use Symfony\Component\DependencyInjection\ContainerInterface;
 {% endblock %}
 
 {% block class_declaration %}
@@ -21,11 +22,28 @@ use Drupal\Core\Form\FormStateInterface;
  */
 class {{ entity_class }}Form extends ContentEntityForm {% endblock %}
 {% block class_methods %}
+  /**
+   * The current user account.
+   *
+   * @var \Drupal\Core\Session\AccountProxyInterface
+   */
+  protected $account;
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container) {
+    // Instantiates this form class.
+    $instance = parent::create($container);
+    $instance->account = $container->get('current_user');
+    return $instance;
+  }
+
   /**
    * {@inheritdoc}
    */
   public function buildForm(array $form, FormStateInterface $form_state) {
-    /* @var $entity \Drupal\{{module}}\Entity\{{ entity_class }} */
+    /* @var \Drupal\{{module}}\Entity\{{ entity_class }} $entity */
     $form = parent::buildForm($form, $form_state);
 {% if revisionable %}
 
@@ -39,8 +57,6 @@ class {{ entity_class }}Form extends ContentEntityForm {% endblock %}
     }
 {% endif %}
 
-    $entity = $this->entity;
-
     return $form;
   }
 
@@ -56,8 +72,8 @@ class {{ entity_class }}Form extends ContentEntityForm {% endblock %}
       $entity->setNewRevision();
 
       // If a new revision is created, save the current user as revision author.
-      $entity->setRevisionCreationTime(REQUEST_TIME);
-      $entity->setRevisionUserId(\Drupal::currentUser()->id());
+      $entity->setRevisionCreationTime($this->time->getRequestTime());
+      $entity->setRevisionUserId($this->account->id());
     }
     else {
       $entity->setNewRevision(FALSE);
@@ -68,13 +84,13 @@ class {{ entity_class }}Form extends ContentEntityForm {% endblock %}
 
     switch ($status) {
       case SAVED_NEW:
-        drupal_set_message($this->t('Created the %label {{ label }}.', [
+        $this->messenger()->addMessage($this->t('Created the %label {{ label }}.', [
           '%label' => $entity->label(),
         ]));
         break;
 
       default:
-        drupal_set_message($this->t('Saved the %label {{ label }}.', [
+        $this->messenger()->addMessage($this->t('Saved the %label {{ label }}.', [
           '%label' => $entity->label(),
         ]));
     }
diff --git a/vendor/drupal/console/templates/module/src/Entity/entity-content-views-data.php.twig b/vendor/drupal/console/templates/module/src/Entity/entity-content-views-data.php.twig
index c8ee2645b6580f4125bc0c88abbbdf71ca3a7fa5..eeb97705b968da875692f02ffa9214efb9f0713c 100644
--- a/vendor/drupal/console/templates/module/src/Entity/entity-content-views-data.php.twig
+++ b/vendor/drupal/console/templates/module/src/Entity/entity-content-views-data.php.twig
@@ -26,7 +26,6 @@ class {{ entity_class }}ViewsData extends EntityViewsData {% endblock %}
 
     // Additional information for Views integration, such as table joins, can be
     // put here.
-
     return $data;
   }
 {% endblock %}
diff --git a/vendor/drupal/console/templates/module/src/Entity/entity-content-with-bundle.theme_hook_suggestions.php.twig b/vendor/drupal/console/templates/module/src/Entity/entity-content-with-bundle.theme_hook_suggestions.php.twig
index 77ea4dfbb11509f0cf7e94632f4f09dbf6ff320b..b95afecd42805c52d44b1f5319f3999e6b6c31b3 100644
--- a/vendor/drupal/console/templates/module/src/Entity/entity-content-with-bundle.theme_hook_suggestions.php.twig
+++ b/vendor/drupal/console/templates/module/src/Entity/entity-content-with-bundle.theme_hook_suggestions.php.twig
@@ -1,8 +1,8 @@
 {% block hook_theme_suggestions_hook %}
 
 /**
-* Implements hook_theme_suggestions_HOOK().
-*/
+ * Implements hook_theme_suggestions_HOOK().
+ */
 function {{ module }}_theme_suggestions_{{ entity_name }}(array $variables) {
   $suggestions = [];
   $entity = $variables['elements']['#{{ entity_name }}'];
diff --git a/vendor/drupal/console/templates/module/src/Entity/entity-content.php.twig b/vendor/drupal/console/templates/module/src/Entity/entity-content.php.twig
index 2925ac6297e4ed95e0dae382b7017d5221200b60..fd59692d0eb821e26ba54d96962a63d93f8202af 100644
--- a/vendor/drupal/console/templates/module/src/Entity/entity-content.php.twig
+++ b/vendor/drupal/console/templates/module/src/Entity/entity-content.php.twig
@@ -9,17 +9,22 @@ namespace Drupal\{{ module }}\Entity;
 {% endblock %}
 
 {% block use_class %}
+{% if has_owner or revisionable%}
 use Drupal\Core\Entity\EntityStorageInterface;
+{% endif %}
 use Drupal\Core\Field\BaseFieldDefinition;
 {% if revisionable %}
-use Drupal\Core\Entity\RevisionableContentEntityBase;
+use Drupal\Core\Entity\EditorialContentEntityBase;
 use Drupal\Core\Entity\RevisionableInterface;
 {% else %}
 use Drupal\Core\Entity\ContentEntityBase;
 {% endif %}
 use Drupal\Core\Entity\EntityChangedTrait;
+use Drupal\Core\Entity\EntityPublishedTrait;
 use Drupal\Core\Entity\EntityTypeInterface;
+{% if has_owner %}
 use Drupal\user\UserInterface;
+{% endif %}
 {% endblock %}
 
 {% block class_declaration %}
@@ -45,16 +50,18 @@ use Drupal\user\UserInterface;
  *     "translation" = "Drupal\{{ module }}\{{ entity_class }}TranslationHandler",
 {% endif %}
  *
+{% if has_forms %}
  *     "form" = {
  *       "default" = "Drupal\{{ module }}\Form\{{ entity_class }}Form",
  *       "add" = "Drupal\{{ module }}\Form\{{ entity_class }}Form",
  *       "edit" = "Drupal\{{ module }}\Form\{{ entity_class }}Form",
  *       "delete" = "Drupal\{{ module }}\Form\{{ entity_class }}DeleteForm",
  *     },
- *     "access" = "Drupal\{{ module }}\{{ entity_class }}AccessControlHandler",
  *     "route_provider" = {
  *       "html" = "Drupal\{{ module }}\{{ entity_class }}HtmlRouteProvider",
  *     },
+{% endif %}
+ *     "access" = "Drupal\{{ module }}\{{ entity_class }}AccessControlHandler",
  *   },
  *   base_table = "{{ entity_name }}",
 {% if is_translatable %}
@@ -64,8 +71,9 @@ use Drupal\user\UserInterface;
  *   revision_table = "{{ entity_name }}_revision",
  *   revision_data_table = "{{ entity_name }}_field_revision",
 {% endif %}
-{% if is_translatable %}
- *   translatable = TRUE,
+ *   translatable = {{ is_translatable ? 'TRUE' : 'FALSE' }},
+{% if has_bundle_permissions %}
+ *   permission_granularity = "bundle",
 {% endif %}
  *   admin_permission = "administer {{ label|lower }} entities",
  *   entity_keys = {
@@ -78,10 +86,13 @@ use Drupal\user\UserInterface;
 {% endif %}
  *     "label" = "name",
  *     "uuid" = "uuid",
+{% if has_owner %}
  *     "uid" = "user_id",
+{% endif %}
  *     "langcode" = "langcode",
- *     "status" = "status",
+ *     "published" = "status",
  *   },
+{% if has_forms %}
  *   links = {
  *     "canonical" = "{{ base_path }}/{{ entity_name }}/{{ '{'~entity_name~'}' }}",
 {% if bundle_entity_type %}
@@ -103,21 +114,26 @@ use Drupal\user\UserInterface;
 {% endif %}
  *     "collection" = "{{ base_path }}/{{ entity_name }}",
  *   },
+{% endif %}
 {% if bundle_entity_type %}
  *   bundle_entity_type = "{{ bundle_entity_type }}",
  *   field_ui_base_route = "entity.{{ bundle_entity_type }}.edit_form"
 {% else %}
+{% if has_forms %}
  *   field_ui_base_route = "{{ entity_name }}.settings"
+{% endif %}
 {% endif %}
  * )
  */
-class {{ entity_class }} extends {% if revisionable %}RevisionableContentEntityBase{% else %}ContentEntityBase{% endif %} implements {{ entity_class }}Interface {% endblock %}
+class {{ entity_class }} extends {% if revisionable %}EditorialContentEntityBase{% else %}ContentEntityBase{% endif %} implements {{ entity_class }}Interface {% endblock %}
 
 {% block use_trait %}
   use EntityChangedTrait;
+  use EntityPublishedTrait;
 {% endblock %}
 
 {% block class_methods %}
+{% if has_owner %}
 
   /**
    * {@inheritdoc}
@@ -128,6 +144,7 @@ class {{ entity_class }} extends {% if revisionable %}RevisionableContentEntityB
       'user_id' => \Drupal::currentUser()->id(),
     ];
   }
+{% endif %}
 {% if revisionable %}
 
   /**
@@ -151,6 +168,7 @@ class {{ entity_class }} extends {% if revisionable %}RevisionableContentEntityB
    */
   public function preSave(EntityStorageInterface $storage) {
     parent::preSave($storage);
+{% if is_translatable %}
 
     foreach (array_keys($this->getTranslationLanguages()) as $langcode) {
       $translation = $this->getTranslation($langcode);
@@ -160,9 +178,10 @@ class {{ entity_class }} extends {% if revisionable %}RevisionableContentEntityB
         $translation->setOwnerId(0);
       }
     }
+{% endif %}
 
-    // If no revision author has been set explicitly, make the {{ entity_name }} owner the
-    // revision author.
+    // If no revision author has been set explicitly,
+    // make the {{ entity_name }} owner the revision author.
     if (!$this->getRevisionUser()) {
       $this->setRevisionUserId($this->getOwnerId());
     }
@@ -198,6 +217,7 @@ class {{ entity_class }} extends {% if revisionable %}RevisionableContentEntityB
     $this->set('created', $timestamp);
     return $this;
   }
+{% if has_owner %}
 
   /**
    * {@inheritdoc}
@@ -228,21 +248,7 @@ class {{ entity_class }} extends {% if revisionable %}RevisionableContentEntityB
     $this->set('user_id', $account->id());
     return $this;
   }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function isPublished() {
-    return (bool) $this->getEntityKey('status');
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function setPublished($published) {
-    $this->set('status', $published ? TRUE : FALSE);
-    return $this;
-  }
+{% endif %}
 
   /**
    * {@inheritdoc}
@@ -250,13 +256,19 @@ class {{ entity_class }} extends {% if revisionable %}RevisionableContentEntityB
   public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
     $fields = parent::baseFieldDefinitions($entity_type);
 
+    // Add the published field.
+    $fields += static::publishedBaseFieldDefinitions($entity_type);
+{% if has_owner %}
+
     $fields['user_id'] = BaseFieldDefinition::create('entity_reference')
       ->setLabel(t('Authored by'))
       ->setDescription(t('The user ID of author of the {{ label }} entity.'))
       ->setRevisionable(TRUE)
       ->setSetting('target_type', 'user')
       ->setSetting('handler', 'default')
+{% if is_translatable %}
       ->setTranslatable(TRUE)
+{% endif %}
       ->setDisplayOptions('view', [
         'label' => 'hidden',
         'type' => 'author',
@@ -274,6 +286,7 @@ class {{ entity_class }} extends {% if revisionable %}RevisionableContentEntityB
       ])
       ->setDisplayConfigurable('form', TRUE)
       ->setDisplayConfigurable('view', TRUE);
+{% endif %}
 
     $fields['name'] = BaseFieldDefinition::create('string')
       ->setLabel(t('Name'))
@@ -299,13 +312,7 @@ class {{ entity_class }} extends {% if revisionable %}RevisionableContentEntityB
       ->setDisplayConfigurable('view', TRUE)
       ->setRequired(TRUE);
 
-    $fields['status'] = BaseFieldDefinition::create('boolean')
-      ->setLabel(t('Publishing status'))
-      ->setDescription(t('A boolean indicating whether the {{ label }} is published.'))
-{% if revisionable %}
-      ->setRevisionable(TRUE)
-{% endif %}
-      ->setDefaultValue(TRUE)
+    $fields['status']->setDescription(t('A boolean indicating whether the {{ label }} is published.'))
       ->setDisplayOptions('form', [
         'type' => 'boolean_checkbox',
         'weight' => -3,
diff --git a/vendor/drupal/console/templates/module/src/Entity/interface-entity-content.php.twig b/vendor/drupal/console/templates/module/src/Entity/interface-entity-content.php.twig
index e1d7dfdcaa76f294af7328234decf48750e8dc3b..e333975788a21bd168c65030cd48a57d7f674867 100644
--- a/vendor/drupal/console/templates/module/src/Entity/interface-entity-content.php.twig
+++ b/vendor/drupal/console/templates/module/src/Entity/interface-entity-content.php.twig
@@ -14,7 +14,10 @@ use Drupal\Core\Entity\ContentEntityInterface;
 use Drupal\Core\Entity\RevisionLogInterface;
 {% endif %}
 use Drupal\Core\Entity\EntityChangedInterface;
+use Drupal\Core\Entity\EntityPublishedInterface;
+{% if has_owner %}
 use Drupal\user\EntityOwnerInterface;
+{% endif %}
 {% endblock %}
 
 {% block class_declaration %}
@@ -23,9 +26,11 @@ use Drupal\user\EntityOwnerInterface;
  *
  * @ingroup {{module}}
  */
-interface {{ entity_class }}Interface extends ContentEntityInterface{% if revisionable %}, RevisionLogInterface{% endif %}, EntityChangedInterface, EntityOwnerInterface {% endblock %}
+interface {{ entity_class }}Interface extends ContentEntityInterface{% if revisionable %}, RevisionLogInterface{% endif %}, EntityChangedInterface, EntityPublishedInterface{% if has_owner %}, EntityOwnerInterface{% endif %} {% endblock %}
 {% block class_methods %}
-  // Add get/set methods for your configuration properties here.
+  /**
+   * Add get/set methods for your configuration properties here.
+   */
 
   /**
    * Gets the {{ label }} name.
@@ -64,27 +69,6 @@ interface {{ entity_class }}Interface extends ContentEntityInterface{% if revisi
    *   The called {{ label }} entity.
    */
   public function setCreatedTime($timestamp);
-
-  /**
-   * Returns the {{ label }} published status indicator.
-   *
-   * Unpublished {{ label }} are only visible to restricted users.
-   *
-   * @return bool
-   *   TRUE if the {{ label }} is published.
-   */
-  public function isPublished();
-
-  /**
-   * Sets the published status of a {{ label }}.
-   *
-   * @param bool $published
-   *   TRUE to set this {{ label }} to published, FALSE to set it to unpublished.
-   *
-   * @return \Drupal\{{ module }}\Entity\{{ entity_class }}Interface
-   *   The called {{ label }} entity.
-   */
-  public function setPublished($published);
 {% if revisionable %}
 
   /**
diff --git a/vendor/drupal/console/templates/module/src/Form/entity-delete.php.twig b/vendor/drupal/console/templates/module/src/Form/entity-delete.php.twig
index be3afd8d532a242928679d1843fef1cc0bf27bf6..cde34514cdecadfce68771bf9aba8f3d31a0a316 100644
--- a/vendor/drupal/console/templates/module/src/Form/entity-delete.php.twig
+++ b/vendor/drupal/console/templates/module/src/Form/entity-delete.php.twig
@@ -47,13 +47,11 @@ class {{ entity_class }}DeleteForm extends EntityConfirmFormBase {% endblock %}
   public function submitForm(array &$form, FormStateInterface $form_state) {
     $this->entity->delete();
 
-    drupal_set_message(
-      $this->t('content @type: deleted @label.',
-        [
-          '@type' => $this->entity->bundle(),
-          '@label' => $this->entity->label(),
-        ]
-        )
+    $this->messenger()->addMessage(
+      $this->t('content @type: deleted @label.', [
+        '@type' => $this->entity->bundle(),
+        '@label' => $this->entity->label(),
+      ])
     );
 
     $form_state->setRedirectUrl($this->getCancelUrl());
diff --git a/vendor/drupal/console/templates/module/src/Form/entity.php.twig b/vendor/drupal/console/templates/module/src/Form/entity.php.twig
index 0ce40406ac77c16c4a2a52ec9a3466f8db62fe1f..1c8a54c268768babcd791e52cd1f2242505c5354 100644
--- a/vendor/drupal/console/templates/module/src/Form/entity.php.twig
+++ b/vendor/drupal/console/templates/module/src/Form/entity.php.twig
@@ -58,13 +58,13 @@ class {{ entity_class }}Form extends EntityForm {% endblock %}
 
     switch ($status) {
       case SAVED_NEW:
-        drupal_set_message($this->t('Created the %label {{ label }}.', [
+        $this->messenger()->addMessage($this->t('Created the %label {{ label }}.', [
           '%label' => ${{ entity_name | machine_name }}->label(),
         ]));
         break;
 
       default:
-        drupal_set_message($this->t('Saved the %label {{ label }}.', [
+        $this->messenger()->addMessage($this->t('Saved the %label {{ label }}.', [
           '%label' => ${{ entity_name | machine_name }}->label(),
         ]));
     }
diff --git a/vendor/drupal/console/templates/module/src/Form/form-alter.php.twig b/vendor/drupal/console/templates/module/src/Form/form-alter.php.twig
index f4bf25b18c49b3acc313ca451acfe406bf748263..41c37bff2241490b29ab00ff0778e7970809b3d9 100644
--- a/vendor/drupal/console/templates/module/src/Form/form-alter.php.twig
+++ b/vendor/drupal/console/templates/module/src/Form/form-alter.php.twig
@@ -1,3 +1,11 @@
+{% if not file_exists %}
+{% include 'module/php_tag.php.twig' %}
+
+/**
+ * @file
+ * Contains {{ module }} form alter.
+ */
+{% endif %}
 
 {% block use_class %}
 use Drupal\Core\Form\FormStateInterface;
@@ -12,52 +20,52 @@ use Drupal\Core\Form\FormStateInterface;
 {% endif %}
  */
 function {{ module }}_form_{{ form_id }}_alter(&$form, FormStateInterface $form_state) {
-    drupal_set_message('{{ module }}_form_{{ form_id }}_alter() executed.');
+    \Drupal::messenger()->addMessage('{{ module }}_form_{{ form_id }}_alter() executed.');
 {% else %}
 /**
- * Implements hook_form_alter() on behalf of {{ module }}.module.
+ * Implements hook_form_alter().
  */
 function {{ module }}_form_alter(&$form, FormStateInterface $form_state, $form_id) {
-    // Change form id here
-    if ($form_id == 'form_test_alter_form') {
-        drupal_set_message('form_test_form_alter() executed.');
+  // Change form id here.
+  if ($form_id == 'form_test_alter_form') {
+    \Drupal::messenger()->addMessage('form_test_form_alter() executed.');
 {% endif %}
 
 {%- if metadata.unset -%}
 {% for field in metadata.unset %}
-        $form['{{ field }}']['#access'] = FALSE;
+    $form['{{ field }}']['#access'] = FALSE;
 {% endfor %}
 {% endif %}
 
 {% if inputs %}
 {% for input in inputs %}
-        $form['{{ input.name }}'] = [
-            '#type' => '{{ input.type }}',
-            '#title' => t('{{ input.label|e }}'),
-    {%- if input.description is defined and input.description is defined -%}
-            '#description' => t('{{ input.description|e }}'),
-    {% endif %}
-    {%- if input.options is defined and input.options|length -%}
-            '#options' => {{ input.options }},
-    {% endif %}
-    {%- if input.maxlength is defined and input.maxlength|length -%}
-            '#maxlength' => {{ input.maxlength }},
-    {% endif %}
-    {%- if input.size is defined and input.size|length -%}
-            '#size' => {{ input.size }},
-    {% endif %}
-    {%- if input.default_value is defined and input.default_value|length -%}
-            '#default_value' => '{{ input.default_value }}',
-    {% endif %}
-    {%- if input.weight is defined and input.weight|length -%}
-            '#weight' => '{{ input.weight }}',
-    {% endif %}
-        ];
+    $form['{{ input.name }}'] = [
+      '#type' => '{{ input.type }}',
+      '#title' => t('{{ input.label|e }}'),
+{% if input.description is defined and input.description is not empty %}
+      '#description' => t('{{ input.description|e }}'),
+{% endif %}
+{% if input.options is defined and input.options|length %}
+      '#options' => {{ input.options }},
+{% endif %}
+{% if input.maxlength is defined and input.maxlength|length %}
+      '#maxlength' => {{ input.maxlength }},
+{% endif %}
+{% if input.size is defined and input.size|length %}
+      '#size' => {{ input.size }},
+{% endif %}
+{% if input.default_value is defined and input.default_value|length %}
+      '#default_value' => '{{ input.default_value }}',
+{% endif %}
+{% if input.weight is defined and input.weight is not empty%}
+      '#weight' => '{{ input.weight }}',
+{% endif %}
+    ];
 
 {% endfor %}
 {% endif %}
 {% if form_id is empty %}
-    }
+  }
 {% endif %}
 }
 {% endblock %}
diff --git a/vendor/drupal/console/templates/module/src/Form/form-config.php.twig b/vendor/drupal/console/templates/module/src/Form/form-config.php.twig
index 1dc6e75f24b5c7ee13058d9e1853ab93485c7300..ebea625f3a0ce2c1a982db585532c7e2ca65202e 100644
--- a/vendor/drupal/console/templates/module/src/Form/form-config.php.twig
+++ b/vendor/drupal/console/templates/module/src/Form/form-config.php.twig
@@ -1,7 +1,7 @@
 {% extends "base/class.php.twig" %}
 
 {% block file_path %}
-Drupal\{{module_name}}\Form\{{ class_name }}.
+\Drupal\{{module_name}}\Form\{{ class_name }}.
 {% endblock %}
 
 {% block namespace_class %}
@@ -12,39 +12,28 @@ namespace Drupal\{{module_name}}\Form;
 use Drupal\Core\Form\ConfigFormBase;
 use Drupal\Core\Form\FormStateInterface;
 {% if services is not empty %}
-use Drupal\Core\Config\ConfigFactoryInterface;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 {% endif %}
 {% endblock %}
 
+{% block use_class_services %}
+{% endblock %}
+
 {% block class_declaration %}
 /**
  * Class {{ class_name }}.
  */
 class {{ class_name }} extends ConfigFormBase {% endblock %}
-{% block class_construct %}
-{% if services is not empty %}
-  /**
-   * Constructs a new {{ class_name }} object.
-   */
-  public function __construct(
-    ConfigFactoryInterface $config_factory,
-      {{ servicesAsParameters(services)|join(',\n    ') }}
-    ) {
-    parent::__construct($config_factory);
-    {{ serviceClassInitialization(services) }}
-  }
-
-{% endif %}
-{% endblock %}
 
 {% block class_create %}
 {% if services is not empty %}
+  /**
+   * {@inheritdoc}
+   */
   public static function create(ContainerInterface $container) {
-    return new static(
-      $container->get('config.factory'),
-      {{ serviceClassInjection(services) }}
-    );
+    $instance = parent::create($container);
+{{ serviceClassInjectionNoOverride(services) }}
+    return $instance;
   }
 
 {% endif %}
@@ -100,13 +89,6 @@ class {{ class_name }} extends ConfigFormBase {% endblock %}
     return parent::buildForm($form, $form_state);
   }
 
-  /**
-   * {@inheritdoc}
-   */
-  public function validateForm(array &$form, FormStateInterface $form_state) {
-    parent::validateForm($form, $form_state);
-  }
-
   /**
    * {@inheritdoc}
    */
@@ -115,7 +97,7 @@ class {{ class_name }} extends ConfigFormBase {% endblock %}
 
     $this->config('{{module_name}}.{{class_name_short}}')
 {% for input in inputs %}
-      ->set('{{ input.name }}', $form_state->getValue('{{ input.name }}'))
+      ->set('{{ input.name }}', $form_state->getValue('{{ input.name }}'){% if input.type == 'text_format' %}['value']{% endif %})
 {% endfor %}
       ->save();
   }
diff --git a/vendor/drupal/console/templates/module/src/Form/form.php.twig b/vendor/drupal/console/templates/module/src/Form/form.php.twig
index c2bd37c801e7a35cfdb984d11671a3ed1bbc7b5f..4b990626ba5becb86ce9e833e33952183acf2f1e 100644
--- a/vendor/drupal/console/templates/module/src/Form/form.php.twig
+++ b/vendor/drupal/console/templates/module/src/Form/form.php.twig
@@ -16,38 +16,30 @@ use Symfony\Component\DependencyInjection\ContainerInterface;
 {% endif %}
 {% endblock %}
 
+{% block use_class_services %}
+{% endblock %}
+
 {% block class_declaration %}
 /**
  * Class {{ class_name }}.
  */
 class {{ class_name }} extends FormBase {% endblock %}
-{% block class_construct %}
-{% if services is not empty %}
-  /**
-   * Constructs a new {{ class_name }} object.
-   */
-  public function __construct(
-    {{ servicesAsParameters(services)|join(',\n    ') }}
-  ) {
-{{ serviceClassInitialization(services) }}
-  }
-
-{% endif %}
-{% endblock %}
 
 {% block class_create %}
 {% if services is not empty %}
+  /**
+   * {@inheritdoc}
+   */
   public static function create(ContainerInterface $container) {
-    return new static(
-{{ serviceClassInjection(services) }}
-    );
+    $instance = parent::create($container);
+{{ serviceClassInjectionNoOverride(services) }}
+    return $instance;
   }
 
 {% endif %}
 {% endblock %}
 
 {% block class_methods %}
-
   /**
    * {@inheritdoc}
    */
@@ -80,7 +72,7 @@ class {{ class_name }} extends FormBase {% endblock %}
       '#size' => {{ input.size }},
 {% endif %}
 {% if input.default_value is defined and input.default_value|length %}
-      '#default_value' => {{ input.default_value }},
+      '#default_value' => '{{ input.default_value }}',
 {% endif %}
 {% if input.weight is defined and input.weight|length %}
       '#weight' => '{{ input.weight }}',
@@ -99,6 +91,9 @@ class {{ class_name }} extends FormBase {% endblock %}
    * {@inheritdoc}
    */
   public function validateForm(array &$form, FormStateInterface $form_state) {
+    foreach ($form_state->getValues() as $key => $value) {
+      // @TODO: Validate fields.
+    }
     parent::validateForm($form, $form_state);
   }
 
@@ -108,8 +103,11 @@ class {{ class_name }} extends FormBase {% endblock %}
   public function submitForm(array &$form, FormStateInterface $form_state) {
     // Display result.
     foreach ($form_state->getValues() as $key => $value) {
-      drupal_set_message($key . ': ' . $value);
+{% if 'messenger' in services|keys %}
+      $this->messenger->addMessage($key . ': ' . ($key === 'text_format'?$value['value']:$value));
+{% else %}
+      \Drupal::messenger()->addMessage($key . ': ' . ($key === 'text_format'?$value['value']:$value));
+{% endif %}
     }
-
   }
 {% endblock %}
diff --git a/vendor/drupal/console/templates/module/src/Generator/generator.php.twig b/vendor/drupal/console/templates/module/src/Generator/generator.php.twig
index 00f7496682db32ccef3e84ffc45875ed60960777..e7a0a8c2b587330f8130f139e9272dfd849b455a 100644
--- a/vendor/drupal/console/templates/module/src/Generator/generator.php.twig
+++ b/vendor/drupal/console/templates/module/src/Generator/generator.php.twig
@@ -15,24 +15,22 @@ use Drupal\Console\Core\Generator\GeneratorInterface;
 
 {% block class_declaration %}
 /**
- * Class {{ class_name }}
+ * Class {{ class_name }}.
  *
  * @package Drupal\Console\Generator
  */
-class {{ class_name }} extends Generator implements GeneratorInterface
-{% endblock %}
+class {{ class_name }} extends Generator implements GeneratorInterface {% endblock %}
 
 {% block class_methods %}
   /**
    * {@inheritdoc}
    */
-  public function generate(array $parameters)
-  {
-//    Example how to render a twig template using the renderFile method
-//    $this->renderFile(
-//      'path/to/file.php.twig',
-//      'path/to/file.php',
-//      $parameters
-//    );
+  public function generate(array $parameters) {
+    // Example how to render a twig template using the renderFile method
+    // $this->renderFile(
+    // 'path/to/file.php.twig',
+    // 'path/to/file.php',
+    // $parameters
+    // );.
   }
 {% endblock %}
diff --git a/vendor/drupal/console/templates/module/src/Plugin/Action/rulesaction.php.twig b/vendor/drupal/console/templates/module/src/Plugin/Action/rulesaction.php.twig
deleted file mode 100644
index fb0812528a2758230bbe45506b740a4defadad70..0000000000000000000000000000000000000000
--- a/vendor/drupal/console/templates/module/src/Plugin/Action/rulesaction.php.twig
+++ /dev/null
@@ -1,44 +0,0 @@
-{% extends "base/class.php.twig" %}
-
-{% block file_path %}
-\Drupal\{{module}}\Plugin\Action\{{class_name}}.
-{% endblock %}
-
-{% block namespace_class %}
-namespace Drupal\{{module}}\Plugin\Action;
-{% endblock %}
-
-{% block use_class %}
-use Drupal\Core\Action\ActionBase;
-use Drupal\Core\Session\AccountInterface;
-{% endblock %}
-
-{% block class_declaration %}
-/**
- * Provides a '{{class_name}}' action.
- *
- * @Action(
- *  id = "{{plugin_id}}",
- *  label = @Translation("{{label}}"),
- *  type = "{{type}}",
- * )
- */
-class {{class_name}} extends ActionBase {% endblock %}
-{% block class_methods %}
-  /**
-   * {@inheritdoc}
-   */
-  public function execute($object = NULL) {
-    // Insert code here.
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function access($object, AccountInterface $account = NULL, $return_as_object = FALSE) {
-    $access = $object->status->access('edit', $account, TRUE)
-      ->andIf($object->access('update', $account, TRUE));
-
-    return $return_as_object ? $access : $access->isAllowed();
-  }
-{% endblock %}
diff --git a/vendor/drupal/console/templates/module/src/Plugin/Block/block.php.twig b/vendor/drupal/console/templates/module/src/Plugin/Block/block.php.twig
index 7bc5cf477ab935e8a3c4b07e57971e29c76d05bf..e6ee2bb24c2a8b58e24ac47610b1eabe0f4c8b64 100644
--- a/vendor/drupal/console/templates/module/src/Plugin/Block/block.php.twig
+++ b/vendor/drupal/console/templates/module/src/Plugin/Block/block.php.twig
@@ -19,6 +19,9 @@ use Symfony\Component\DependencyInjection\ContainerInterface;
 {% endif %}
 {% endblock %}
 
+{% block use_class_services %}
+{% endblock %}
+
 {% block class_declaration %}
 /**
  * Provides a '{{class_name}}' block.
@@ -29,42 +32,18 @@ use Symfony\Component\DependencyInjection\ContainerInterface;
  * )
  */
 class {{class_name}} extends BlockBase {% if services is not empty %}implements ContainerFactoryPluginInterface {% endif %}{% endblock %}
-{% block class_construct %}
-{% if services is not empty %}
-  /**
-   * Constructs a new {{class_name}} 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 string $plugin_definition
-   *   The plugin implementation definition.
-   */
-  public function __construct(
-    array $configuration,
-    $plugin_id,
-    $plugin_definition,
-    {{ servicesAsParameters(services)|join(', \n\t') }}
-  ) {
-    parent::__construct($configuration, $plugin_id, $plugin_definition);
-{{ serviceClassInitialization(services) }}
-  }
-{% endif %}
-{% endblock %}
+
 {% block class_create %}
 {% if services is not empty %}
   /**
    * {@inheritdoc}
    */
   public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
-    return new static(
-      $configuration,
-      $plugin_id,
-      $plugin_definition,
-{{ serviceClassInjection(services) }}
-    );
+    $instance = new static($configuration, $plugin_id, $plugin_definition);
+{{ serviceClassInjectionNoOverride(services) }}
+    return $instance;
   }
+
 {% endif %}
 {% endblock %}
 {% block class_methods %}
@@ -75,9 +54,9 @@ class {{class_name}} extends BlockBase {% if services is not empty %}implements
   public function defaultConfiguration() {
     return [
 {% for input in inputs %}
-      {% if input.default_value is defined and input.default_value|length %}
+{% if input.default_value is defined and input.default_value|length %}
       '{{ input.name }}' => {{ input.default_value }},
-      {% endif %}
+{% endif %}
 {% endfor %}
     ] + parent::defaultConfiguration();
   }
@@ -91,7 +70,7 @@ class {{class_name}} extends BlockBase {% if services is not empty %}implements
       '#type' => '{{ input.type }}',
       '#title' => $this->t('{{ input.label|escape }}'),
 {% if input.description is defined and input.description is not empty %}
-    '#description' => $this->t('{{ input.description|e }}'),
+      '#description' => $this->t('{{ input.description|e }}'),
 {% endif %}
 {% if input.options is defined and input.options|length %}
       '#options' => {{ input.options }},
@@ -117,7 +96,7 @@ class {{class_name}} extends BlockBase {% if services is not empty %}implements
    */
   public function blockSubmit($form, FormStateInterface $form_state) {
 {% for input in inputs %}
-    $this->configuration['{{ input.name }}'] = $form_state->getValue('{{ input.name }}');
+    $this->configuration['{{ input.name }}'] = $form_state->getValue('{{ input.name }}'){% if input.type == 'text_format' %}['value']{% endif %};
 {% endfor %}
   }
 
@@ -127,10 +106,17 @@ class {{class_name}} extends BlockBase {% if services is not empty %}implements
    */
   public function build() {
     $build = [];
+{% if twig_template is defined %}
+    $build['#theme'] = '{{ plugin_id }}';
+{% endif %}
 {% for input in inputs %}
+{% if twig_template is defined %}
+    $build['#conten'][] = $this->configuration['{{ input.name }}'];
+{% else %}
     $build['{{plugin_id}}_{{ input.name }}']['#markup'] = '<p>' . $this->configuration['{{ input.name }}'] . '</p>';
+{% endif %}
 {% else %}
-    $build['{{plugin_id}}']['#markup'] = 'Implement {{class_name}}.';
+     $build['{{plugin_id}}']['#markup'] = 'Implement {{class_name}}.';
 {% endfor %}
 
     return $build;
diff --git a/vendor/drupal/console/templates/module/src/Plugin/Block/block_derivative.php.twig b/vendor/drupal/console/templates/module/src/Plugin/Block/block_derivative.php.twig
new file mode 100644
index 0000000000000000000000000000000000000000..afa0917cda6086969140e7daadf6f000242d4795
--- /dev/null
+++ b/vendor/drupal/console/templates/module/src/Plugin/Block/block_derivative.php.twig
@@ -0,0 +1,93 @@
+{% extends "base/class.php.twig" %}
+
+{% block file_path %}
+\Drupal\{{module}}\Plugin\Block\{{class}}.
+{% endblock %}
+
+{% block namespace_class %}
+namespace Drupal\{{module}}\Plugin\Block;
+{% endblock %}
+
+{% block use_class %}
+use Drupal\block\BlockBase;
+use Drupal\Core\Entity\EntityManagerInterface;
+use Drupal\Core\Entity\EntityViewBuilderInterface;
+use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
+use Drupal\Core\Session\AccountInterface;
+use Drupal\node\NodeInterface;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+{% endblock %}
+
+{% block class_declaration %}
+/**
+ * Provides a '{{class}}' block.
+ *
+ * @Block(
+ *   id = "{{block_id}}",
+ *   admin_label = @Translation("{{block_label}}"),
+ *   category = @Translation("{{block_description}}"),
+ *   deriver = "Drupal\{{module}}\Plugin\Derivative\{{class}}"
+ * )
+ */
+
+class {{class}} extends BlockBase
+{% endblock %}
+  {% block class_properties %}
+  /**
+   * @var EntityViewBuilderInterface.
+   */
+  private $_viewBuilder;
+
+  /**
+   * @var NodeInterface.
+   */
+  private $_node;
+{% endblock %}
+{% block class_construct %}
+
+  /**
+   * Creates a {{class}} instance.
+   *
+   * @param array $configuration
+   * @param string $plugin_id
+   * @param mixed $plugin_definition
+   * @param EntityManagerInterface $entity_manager
+   */
+  public function __construct(array $configuration, $plugin_id, $plugin_definition, EntityManagerInterface $entity_manager)
+  {
+    parent::__construct($configuration, $plugin_id, $plugin_definition);
+    $this->viewBuilder = $entity_manager->getViewBuilder('node');
+    $this->nodeStorage = $entity_manager->getStorage('node');
+    $this->node = $entity_manager->getStorage('node')->load($this->getDerivativeId());
+  }
+{% endblock %}
+{% block class_create %}
+
+  /**
+   * {@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')
+    );
+  }
+
+{% endblock %}
+{% block class_methods %}
+  /**
+   * {@inheritdoc}
+   */
+
+  public function build()
+  {
+    if (!$this->node instanceof NodeInterface) {
+      return;
+    }
+    $build = $this->viewBuilder->view($this->node, 'full');
+    return $build;
+  }
+{% endblock %}
\ No newline at end of file
diff --git a/vendor/drupal/console/templates/module/src/Plugin/Block/blocktype.php.twig b/vendor/drupal/console/templates/module/src/Plugin/Block/blocktype.php.twig
new file mode 100644
index 0000000000000000000000000000000000000000..edf4b2236226ca45f9ffc123c142c24e177c83ed
--- /dev/null
+++ b/vendor/drupal/console/templates/module/src/Plugin/Block/blocktype.php.twig
@@ -0,0 +1,25 @@
+{% extends "base/class.php.twig" %}
+
+{% block file_path %}
+\Drupal\{{module}}\Plugin\Block\{{class_name}}.
+{% endblock %}
+
+{% block namespace_class %}
+namespace Drupal\{{module}}\Plugin\Block;
+{% endblock %}
+
+{% block use_class %}
+use Drupal\Core\Block\BlockBase;
+{% endblock %}
+
+{% block class_declaration %}
+
+  /**
+   * {@inheritdoc}
+   */
+  public function build() {
+    $build = [];
+    $build['{{block_id}}']['#markup'] = 'Implement {{class_name}}.';
+    return $build;
+  }
+{% endblock %}
diff --git a/vendor/drupal/console/templates/module/src/Plugin/CKEditorPlugin/ckeditorbutton.php.twig b/vendor/drupal/console/templates/module/src/Plugin/CKEditorPlugin/ckeditorbutton.php.twig
index 0e16747fb8bfb1a4af095624e7a3accab74c110e..44337bb382429d0e357bdcfff952145456678279 100644
--- a/vendor/drupal/console/templates/module/src/Plugin/CKEditorPlugin/ckeditorbutton.php.twig
+++ b/vendor/drupal/console/templates/module/src/Plugin/CKEditorPlugin/ckeditorbutton.php.twig
@@ -23,7 +23,8 @@ use Drupal\editor\Entity\Editor;
  *
  * @CKEditorPlugin(
  *   id = "{{ plugin_id }}",
- *   label = @Translation("{{ label }}")
+ *   label = @Translation("{{ label }}"),
+ *   module = "{{ module }}"
  * )
  */
 class {{ class_name }} extends CKEditorPluginBase {% endblock %}
@@ -40,12 +41,19 @@ class {{ class_name }} extends CKEditorPluginBase {% endblock %}
     // Make sure that the path to the image matches the file structure of
     // the CKEditor plugin you are implementing.
     return [
-      '{{ button_name }}' => [
-        'label' => t('{{ label }}'),
-        'image' => '{{ button_icon_path }}',
+{% for button in buttons %}
+      '{{ button.name }}' => [
+        'label' => t('{{ button.label }}'),
+        'image' => '{{ button.icon }}',
       ],
+{% endfor %}
     ];
   }
+  /**
+   * {@inheritdoc}
+   */
+  public function isEnabled(Editor $editor) {
+  }
 
   /**
    * {@inheritdoc}
@@ -53,7 +61,7 @@ class {{ class_name }} extends CKEditorPluginBase {% endblock %}
   public function getFile() {
     // Make sure that the path to the plugin.js matches the file structure of
     // the CKEditor plugin you are implementing.
-    return drupal_get_path('module', '{{ module }}') . '/js/plugins/{{ plugin_id }}/plugin.js';
+    return drupal_get_path('module', '{{ module }}') . '/js/Plugin/{{ plugin_id }}/plugin.js';
   }
 
   /**
diff --git a/vendor/drupal/console/templates/module/src/Plugin/CKEditorPlugin/plugin.php.twig b/vendor/drupal/console/templates/module/src/Plugin/CKEditorPlugin/plugin.php.twig
new file mode 100644
index 0000000000000000000000000000000000000000..ef332747b6645d11d9b061aed2b5ec333f816954
--- /dev/null
+++ b/vendor/drupal/console/templates/module/src/Plugin/CKEditorPlugin/plugin.php.twig
@@ -0,0 +1,20 @@
+/**
+* DO NOT EDIT THIS FILE.
+* See the following change record for more information,
+* https://www.drupal.org/node/2815083
+* @preserve
+**/
+{% for button in buttons %}
+CKEDITOR.plugins.add('{{ pligins_id }}', {
+    init: function( editor ) {
+        if ( editor.ui.addButton ) {
+            editor.ui.addButton( '{{ button.name }}', {
+                label: 'default ckeditor button',
+                id: '{{ button.name }}',
+                command: '',
+                toolbar: '{{ button.name }},10',
+            } );
+        }
+    }
+} );
+{% endfor %}
\ No newline at end of file
diff --git a/vendor/drupal/console/templates/module/src/Plugin/Condition/condition.php.twig b/vendor/drupal/console/templates/module/src/Plugin/Condition/condition.php.twig
index c782c90f55997cc2733293cd32d1d96e7e2fcc83..be455a4444ee99b43db8847a62abab4dbe3fcd55 100644
--- a/vendor/drupal/console/templates/module/src/Plugin/Condition/condition.php.twig
+++ b/vendor/drupal/console/templates/module/src/Plugin/Condition/condition.php.twig
@@ -16,114 +16,92 @@ use Drupal\Core\Plugin\Context\ContextDefinition;
 
 {% block class_declaration %}
 /**
-* Provides a '{{ label }}' condition to enable a condition based in module selected status.
-*
-* @Condition(
-*   id = "{{ plugin_id }}",
-*   label = @Translation("{{ label }}"),
-*   context = {
-*     "{{ context_id }}" = @ContextDefinition("{{ context_definition_id }}", required = {{ context_definition_required }} , label = @Translation("{{ context_definition_label }}"))
-*   }
-* )
-*
-*/
-class {{ class_name }} extends ConditionPluginBase {% endblock %}
-{% block class_methods %}
-/**
-* {@inheritdoc}
-*/
-public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition)
-{
-    return new static(
-    $configuration,
-    $plugin_id,
-    $plugin_definition
-    );
-}
-
-/**
- * Creates a new {{ class_name }} object.
+ * Provides a '{{ label }}' condition to enable a condition based in module selected status.
+ *
+ * @Condition(
+ *   id = "{{ plugin_id }}",
+ *   label = @Translation("{{ label }}"),
+ *   context = {
+ *     "{{ context_id }}" = @ContextDefinition("{{ context_definition_id }}", required = {{ context_definition_required }} , label = @Translation("{{ context_definition_label }}"))
+ *   }
+ * )
  *
- * @param array $configuration
- *   The plugin configuration, i.e. an array with configuration values keyed
- *   by configuration option name. The special key 'context' may be used to
- *   initialize the defined contexts by setting it to an array of context
- *   values keyed by context names.
- * @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);
- }
+class {{ class_name }} extends ConditionPluginBase {% endblock %}
+{% block class_methods %}
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
+    $instance = parent::create($container, $configuration, $plugin_id, $plugin_definition);
+    return $instance;
+  }
 
- /**
+  /**
    * {@inheritdoc}
    */
- public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
-     // Sort all modules by their names.
-     $modules = system_rebuild_module_data();
-     uasort($modules, 'system_sort_modules_by_info_name');
-
-     $options = [NULL => t('Select a module')];
-     foreach($modules as $module_id => $module) {
-         $options[$module_id] = $module->info['name'];
-     }
-
-     $form['module'] = [
-         '#type' => 'select',
-         '#title' => $this->t('Select a module to validate'),
-         '#default_value' => $this->configuration['module'],
-         '#options' => $options,
-         '#description' => $this->t('Module selected status will be use to evaluate condition.'),
-     ];
-
-     return parent::buildConfigurationForm($form, $form_state);
- }
+  public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
+    // Sort all modules by their names.
+    $modules = system_rebuild_module_data();
+    uasort($modules, 'system_sort_modules_by_info_name');
+
+    $options = [NULL => t('Select a module')];
+    foreach ($modules as $module_id => $module) {
+      $options[$module_id] = $module->info['name'];
+    }
+
+    $form['module'] = [
+      '#type' => 'select',
+      '#title' => $this->t('Select a module to validate'),
+      '#default_value' => $this->configuration['module'],
+      '#options' => $options,
+      '#description' => $this->t('Module selected status will be use to evaluate condition.'),
+    ];
+
+    return parent::buildConfigurationForm($form, $form_state);
+  }
 
-/**
- * {@inheritdoc}
- */
- public function submitConfigurationForm(array &$form, FormStateInterface $form_state) {
-     $this->configuration['module'] = $form_state->getValue('module');
-     parent::submitConfigurationForm($form, $form_state);
- }
+  /**
+   * {@inheritdoc}
+   */
+  public function submitConfigurationForm(array &$form, FormStateInterface $form_state) {
+    $this->configuration['module'] = $form_state->getValue('module');
+    parent::submitConfigurationForm($form, $form_state);
+  }
 
-/**
- * {@inheritdoc}
- */
- public function defaultConfiguration() {
+  /**
+   * {@inheritdoc}
+   */
+  public function defaultConfiguration() {
     return ['module' => ''] + parent::defaultConfiguration();
- }
+  }
 
-/**
-  * Evaluates the condition and returns TRUE or FALSE accordingly.
-  *
-  * @return bool
-  *   TRUE if the condition has been met, FALSE otherwise.
-  */
+  /**
+   * Evaluates the condition and returns TRUE or FALSE accordingly.
+   *
+   * @return bool
+   *   TRUE if the condition has been met, FALSE otherwise.
+   */
   public function evaluate() {
-      if (empty($this->configuration['module']) && !$this->isNegated()) {
-          return TRUE;
-      }
+    if (empty($this->configuration['module']) && !$this->isNegated()){
+        return TRUE;
+    }
 
-      $module = $this->configuration['module'];
-      $modules = system_rebuild_module_data();
+    $module = $this->configuration['module'];
+    $modules = system_rebuild_module_data();
 
-      return $modules[$module]->status;
+    return $modules[$module]->status;
   }
 
-/**
- * Provides a human readable summary of the condition's configuration.
- */
- public function summary()
- {
-     $module = $this->getContextValue('module');
-     $modules = system_rebuild_module_data();
+  /**
+   * Provides a human readable summary of the condition's configuration.
+   */
+  public function summary() {
+    $module = $this->getContextValue('module');
+    $modules = system_rebuild_module_data();
 
-     $status = ($modules[$module]->status)?t('enabled'):t('disabled');
+    $status = ($modules[$module]->status)?t('enabled'):t('disabled');
 
-     return t('The module @module is @status.', ['@module' => $module, '@status' => $status]);
- }
+    return t('The module @module is @status.', ['@module' => $module, '@status' => $status]);
+  }
 {% endblock %}
diff --git a/vendor/drupal/console/templates/module/src/Plugin/Condition/rulescondition.php.twig b/vendor/drupal/console/templates/module/src/Plugin/Condition/rulescondition.php.twig
new file mode 100644
index 0000000000000000000000000000000000000000..8b925752d3c4e9c87ebca05f8765f11669d96a04
--- /dev/null
+++ b/vendor/drupal/console/templates/module/src/Plugin/Condition/rulescondition.php.twig
@@ -0,0 +1,43 @@
+{% extends "base/class.php.twig" %}
+
+{% block file_path %}
+\Drupal\{{module}}\Plugin\Condition\{{class_name}}.
+{% endblock %}
+
+{% block namespace_class %}
+namespace Drupal\{{module}}\Plugin\Condition;
+{% endblock %}
+
+{% block use_class %}
+use Drupal\rules\Core\RulesConditionBase;
+{% endblock %}
+
+{% block class_declaration %}
+/**
+ * Provides a '{{class_name}}' condition.
+ *
+ * @Condition(
+ *  id = "{{plugin_id}}",
+ *  label = @Translation("{{label}}"),
+ *  category = @Translation("{{category}}"),
+{% if context %}
+ *  context = {
+{% for item in context %}
+ *     "{{ item.name }}" = @ContextDefinition("{{ item.type }}",
+ *       label = @Translation("{{ item.label }}"),
+ *       description = @Translation("{{ item.description }}")
+ *     ),
+{% endfor %}
+ *  }
+{% endif %}
+ * )
+ */
+class {{class_name}} extends RulesConditionBase {% endblock %}
+{% block class_methods %}
+  /**
+   * {@inheritdoc}
+   */
+  public function doEvaluate($object = NULL) {
+    // Insert code here.
+  }
+{% endblock %}
\ No newline at end of file
diff --git a/vendor/drupal/console/templates/module/src/Plugin/Derivative/derivative_block_derivative.php.twig b/vendor/drupal/console/templates/module/src/Plugin/Derivative/derivative_block_derivative.php.twig
new file mode 100644
index 0000000000000000000000000000000000000000..5ef3a38705faed05778a88f8b4fcf0e6f2e260b1
--- /dev/null
+++ b/vendor/drupal/console/templates/module/src/Plugin/Derivative/derivative_block_derivative.php.twig
@@ -0,0 +1,75 @@
+{% extends "base/class.php.twig" %}
+
+{% block file_path %}
+\Drupal\{{module}}\Plugin\Block\{{class}}.
+{% endblock %}
+
+{% block namespace_class %}
+/** 
+ * @file
+ * Contains \Drupal\{{module}}\Plugin\Derivative\{{class}}.php.
+ */
+namespace Drupal\{{module}}\Plugin\Derivative;
+{% endblock %}
+
+{% block use_class %}
+use Drupal\Component\Plugin\Derivative\DeriverBase;
+use Drupal\Core\Entity\EntityStorageInterface;
+use Drupal\Core\Plugin\Discovery\ContainerDeriverInterface;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+{% endblock %}
+
+{% block class_declaration %}
+/**
+ * Provides block plugin definitions.
+ *
+ * @see \Drupal\{{module}}\Plugin\Block\{{class}}
+ */
+class {{class}} extends DeriverBase implements ContainerDeriverInterface
+{% endblock %}
+{% block class_properties %}
+  /**
+   * The node storage.
+   *
+   * @var \Drupal\Core\Entity\EntityStorageInterface
+   */
+  protected $nodeStorage;  
+{% endblock %}
+{% block class_construct %}
+  /**
+   * Creates a new NodeBlock.
+   *
+   * @param \Drupal\Core\Entity\EntityStorageInterface $node_storage
+   *   The node storage.
+   */
+  public function __construct(EntityStorageInterface $node_storage) 
+  {
+    $this->nodeStorage = $node_storage;
+  }
+
+{% endblock %}
+{% block class_create %}
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container, $base_plugin_id) 
+  {
+    return new static(
+      $container->get('entity.manager')->getStorage('node')
+    );
+  }
+{% endblock %}
+{% block class_methods %}
+  /**
+   * {@inheritdoc}
+   */
+  public function getDerivativeDefinitions($base_plugin_definition) 
+  {
+    $nodes = $this->nodeStorage->loadByProperties(['type' => 'article']);
+    foreach ($nodes as $node) {
+      $this->derivatives[$node->id()] = $base_plugin_definition;
+      $this->derivatives[$node->id()]['admin_label'] = t('Node block: ') . $node->label();
+    }
+    return $this->derivatives;
+  }
+{% endblock %}
\ No newline at end of file
diff --git a/vendor/drupal/console/templates/module/src/Plugin/Field/FieldFormatter/imageformatter.php.twig b/vendor/drupal/console/templates/module/src/Plugin/Field/FieldFormatter/imageformatter.php.twig
index 92059a4d42af176879c0970c7335182f95d29262..3dd9f52d9a19e6c126ae0cf035324b3a976ce25a 100644
--- a/vendor/drupal/console/templates/module/src/Plugin/Field/FieldFormatter/imageformatter.php.twig
+++ b/vendor/drupal/console/templates/module/src/Plugin/Field/FieldFormatter/imageformatter.php.twig
@@ -10,13 +10,9 @@ namespace Drupal\{{ module }}\Plugin\Field\FieldFormatter;
 
 {% block use_class %}
 use Drupal\image\Plugin\Field\FieldFormatter\ImageFormatterBase;
-use Drupal\Core\Entity\EntityStorageInterface;
 use Drupal\Core\Field\FieldItemListInterface;
-use Drupal\Core\Field\FieldDefinitionInterface;
 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
-use Drupal\Core\Session\AccountInterface;
 use Drupal\Core\Url;
-use Drupal\Core\Utility\LinkGeneratorInterface;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\Cache\Cache;
@@ -36,76 +32,38 @@ use Drupal\Core\Cache\Cache;
  */
 class {{ class_name }} extends ImageFormatterBase implements ContainerFactoryPluginInterface {% endblock %}
 {% block class_methods %}
-/**
- * The current user.
- *
- * @var \Drupal\Core\Session\AccountInterface
- */
- protected $currentUser;
-
-/**
- * The link generator.
- *
- * @var \Drupal\Core\Utility\LinkGeneratorInterface
- */
- protected $linkGenerator;
-
-/**
- * The image style entity storage.
- *
- * @var \Drupal\Core\Entity\EntityStorageInterface
- */
- protected $imageStyleStorage;
-
-/**
- * Constructs a new {{ class_name }} object.
- *
- * @param string $plugin_id
- *   The plugin_id for the formatter.
- * @param mixed $plugin_definition
- *   The plugin implementation definition.
- * @param \Drupal\Core\Field\FieldDefinitionInterface $field_definition
- *   The definition of the field to which the formatter is associated.
- * @param array $settings
- *   The formatter settings.
- * @param string $label
- *   The formatter label display setting.
- * @param string $view_mode
- *   The view mode.
- * @param array $third_party_settings
- *   Any third party settings settings.
- * @param \Drupal\Core\Session\AccountInterface $current_user
- *   The current user.
- * @param \Drupal\Core\Utility\LinkGeneratorInterface $link_generator
- *   The link generator service.
- * @param \Drupal\Core\Entity\EntityStorageInterface $image_style_storage
- *   The entity storage for the image.
- */
- public function __construct($plugin_id, $plugin_definition, FieldDefinitionInterface $field_definition, array $settings, $label, $view_mode, array $third_party_settings, AccountInterface $current_user, LinkGeneratorInterface $link_generator, EntityStorageInterface $image_style_storage) {
-    parent::__construct($plugin_id, $plugin_definition, $field_definition, $settings, $label, $view_mode, $third_party_settings);
-    $this->currentUser = $current_user;
-    $this->linkGenerator = $link_generator;
-    $this->imageStyleStorage = $image_style_storage;
+  /**
+   * The current user.
+   *
+   * @var \Drupal\Core\Session\AccountInterface
+   */
+  protected $currentUser;
+
+  /**
+   * The link generator.
+   *
+   * @var \Drupal\Core\Utility\LinkGeneratorInterface
+   */
+  protected $linkGenerator;
+
+  /**
+   * The image style entity storage.
+   *
+   * @var \Drupal\Core\Entity\EntityStorageInterface
+   */
+  protected $imageStyleStorage;
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
+    $instance = new static($configuration, $plugin_id, $plugin_definition);
+    $instance->currentUser = $container->get('current_user');
+    $instance->linkGenerator = $container->get('link_generator');
+    $instance->imageStyleStorage = $container->get('entity_type.manager')->getStorage('image_style');
+    return $instance;
   }
 
-/**
- * {@inheritdoc}
- */
- public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
-   return new static(
-     $plugin_id,
-     $plugin_definition,
-     $configuration['field_definition'],
-     $configuration['settings'],
-     $configuration['label'],
-     $configuration['view_mode'],
-     $configuration['third_party_settings'],
-     $container->get('current_user'),
-     $container->get('link_generator'),
-     $container->get('entity_type.manager')->getStorage('image_style')
-   );
- }
-
 /**
  * {@inheritdoc}
  */
diff --git a/vendor/drupal/console/templates/module/src/Plugin/Field/FieldWidget/fieldwidget.php.twig b/vendor/drupal/console/templates/module/src/Plugin/Field/FieldWidget/fieldwidget.php.twig
index 86e88fc908b171a0fdef22f99da5d40fa8236162..61b54ff711722c17e8033730c94437314f359a4d 100644
--- a/vendor/drupal/console/templates/module/src/Plugin/Field/FieldWidget/fieldwidget.php.twig
+++ b/vendor/drupal/console/templates/module/src/Plugin/Field/FieldWidget/fieldwidget.php.twig
@@ -20,6 +20,7 @@ use Drupal\Core\Form\FormStateInterface;
  *
  * @FieldWidget(
  *   id = "{{ plugin_id }}",
+ *   module = "{{ module }}",
  *   label = @Translation("{{ label }}"){% if field_type %},
  *   field_types = {
  *     "{{ field_type }}"
diff --git a/vendor/drupal/console/templates/module/src/Plugin/Mail/mail.php.twig b/vendor/drupal/console/templates/module/src/Plugin/Mail/mail.php.twig
index 878b3eea248035a41cbd14b5d264bb06ddb05f62..1c9c7d3a6b565df89f3f047bc5550d80b645e513 100644
--- a/vendor/drupal/console/templates/module/src/Plugin/Mail/mail.php.twig
+++ b/vendor/drupal/console/templates/module/src/Plugin/Mail/mail.php.twig
@@ -16,6 +16,9 @@ use Symfony\Component\DependencyInjection\ContainerInterface;
 {% endif %}
 {% endblock %}
 
+{% block use_class_services %}
+{% endblock %}
+
 {% block class_declaration %}
 /**
  * Provides a '{{class_name}}' mail plugin.
@@ -28,43 +31,15 @@ use Symfony\Component\DependencyInjection\ContainerInterface;
 class {{class_name}} extends PhpMail {% if services is not empty %}implements ContainerFactoryPluginInterface {% endif %}
 {% endblock %}
 
-{% block class_construct %}
-{% if services is not empty %}
-  /**
-   * Constructs a new {{class_name}} 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 string $plugin_definition
-   *   The plugin implementation definition.
-   */
-  public function __construct(
-        array $configuration,
-        $plugin_id,
-        $plugin_definition,
-        {{ servicesAsParameters(services)|join(', \n\t') }}
-  ) {
-    parent::__construct($configuration, $plugin_id, $plugin_definition);
-{{ serviceClassInitialization(services) }}
-  }
-
-{% endif %}
-{% endblock %}
-
 {% block class_create %}
 {% if services is not empty %}
   /**
    * {@inheritdoc}
    */
   public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
-    return new static(
-      $configuration,
-      $plugin_id,
-      $plugin_definition,
-{{ serviceClassInjection(services) }}
-    );
+    $instance = new static($configuration, $plugin_id, $plugin_definition);
+{{ serviceClassInjectionNoOverride(services) }}
+    return $instance;
   }
 {% endif %}
 {% endblock %}
diff --git a/vendor/drupal/console/templates/module/src/Plugin/QueueWorker/queue_worker.php.twig b/vendor/drupal/console/templates/module/src/Plugin/QueueWorker/queue_worker.php.twig
new file mode 100644
index 0000000000000000000000000000000000000000..5b200c9613225d507b16170a041b2c61894a870f
--- /dev/null
+++ b/vendor/drupal/console/templates/module/src/Plugin/QueueWorker/queue_worker.php.twig
@@ -0,0 +1,29 @@
+{% extends "base/class.php.twig" %}
+
+{% block namespace_class %}
+namespace Drupal\{{ module }}\Plugin\QueueWorker;
+{% endblock %}
+
+{% block use_class %}
+use Drupal\Core\Queue\QueueWorkerBase;
+{% endblock %}
+
+{% block class_declaration %}
+/**
+ * Plugin implementation of the {{ plugin_id }} queueworker.
+ *
+ * @QueueWorker (
+ *   id = "{{ plugin_id }}",
+ *   title = @Translation("{{ label }}"),
+ *   cron = {"time" = {{ cron_time }}}
+ * )
+ */
+class {{ class_name }} extends QueueWorkerBase {% endblock %}
+{% block class_methods %}
+  /**
+   * {@inheritdoc}
+   */
+  public function processItem($data) {
+    // Process item operations.
+  }
+{% endblock %}
diff --git a/vendor/drupal/console/templates/module/src/Plugin/Rest/Resource/rest.php.twig b/vendor/drupal/console/templates/module/src/Plugin/Rest/Resource/rest.php.twig
index e2a620d958cb0d1a6ef12e02b60bcde38ae9c191..1fba836c742ab0e6bd7625c7cceb3052fc3a09f9 100644
--- a/vendor/drupal/console/templates/module/src/Plugin/Rest/Resource/rest.php.twig
+++ b/vendor/drupal/console/templates/module/src/Plugin/Rest/Resource/rest.php.twig
@@ -9,11 +9,9 @@ namespace Drupal\{{module_name}}\Plugin\rest\resource;
 {% endblock %}
 
 {% block use_class %}
-use Drupal\Core\Session\AccountProxyInterface;
 use Drupal\rest\ModifiedResourceResponse;
 use Drupal\rest\Plugin\ResourceBase;
 use Drupal\rest\ResourceResponse;
-use Psr\Log\LoggerInterface;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
 {% endblock %}
@@ -26,7 +24,9 @@ use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
  *   id = "{{ plugin_id }}",
  *   label = @Translation("{{ plugin_label }}"),
  *   uri_paths = {
- *     "canonical" = "/{{ plugin_url }}"
+{% for state_settings in plugin_states %}
+ *     "{{ state_settings.uri_paths }}" = "{{ plugin_url }}"
+{% endfor %}
  *   }
  * )
  */
@@ -41,78 +41,42 @@ class {{ class_name }} extends ResourceBase {% endblock %}
   protected $currentUser;
 {% endblock %}
 
-{% block class_construct %}
-
-  /**
-   * Constructs a new {{ class_name }} 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 array $serializer_formats
-   *   The available serialization formats.
-   * @param \Psr\Log\LoggerInterface $logger
-   *   A logger instance.
-   * @param \Drupal\Core\Session\AccountProxyInterface $current_user
-   *   A current user instance.
-   */
-  public function __construct(
-    array $configuration,
-    $plugin_id,
-    $plugin_definition,
-    array $serializer_formats,
-    LoggerInterface $logger,
-    AccountProxyInterface $current_user) {
-    parent::__construct($configuration, $plugin_id, $plugin_definition, $serializer_formats, $logger);
-
-    $this->currentUser = $current_user;
-  }
-{% endblock %}
-
 {% block class_create %}
 
   /**
    * {@inheritdoc}
    */
   public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
-    return new static(
-      $configuration,
-      $plugin_id,
-      $plugin_definition,
-      $container->getParameter('serializer.formats'),
-      $container->get('logger.factory')->get('{{module_name}}'),
-      $container->get('current_user')
-    );
+    $instance = parent::create($container, $configuration, $plugin_id, $plugin_definition);
+    $instance->logger = $container->get('logger.factory')->get('{{module_name}}');
+    $instance->currentUser = $container->get('current_user');
+    return $instance;
   }
 {% endblock %}
 
 {% block class_methods %}
 {% for state, state_settings in plugin_states %}
 
-  /**
-   * Responds to {{ state }} requests.
-   *
-   * @param \Drupal\Core\Entity\EntityInterface $entity
-   *   The entity object.
-   *
-   * @return \Drupal\rest\{{ state_settings.response_class }}
-   *   The HTTP response object.
-   *
-   * @throws \Symfony\Component\HttpKernel\Exception\HttpException
-   *   Throws exception expected.
-   */
-  public function {{ state|lower }}(EntityInterface $entity) {
+    /**
+     * Responds to {{ state }} requests.
+     *
+     * @param string $payload
+     *
+     * @return \Drupal\rest\{{ state_settings.response_class }}
+     *   The HTTP response object.
+     *
+     * @throws \Symfony\Component\HttpKernel\Exception\HttpException
+     *   Throws exception expected.
+     */
+    public function {{ state|lower }}($payload) {
 
-    // You must to implement the logic of your REST Resource here.
-    // Use current user after pass authentication to validate access.
-    if (!$this->currentUser->hasPermission('access content')) {
-      throw new AccessDeniedHttpException();
-    }
+        // You must to implement the logic of your REST Resource here.
+        // Use current user after pass authentication to validate access.
+        if (!$this->currentUser->hasPermission('access content')) {
+            throw new AccessDeniedHttpException();
+        }
 
-    return new {{ state_settings.response_class }}({{ (state == 'DELETE') ? 'NULL' : '$entity' }}, {{ state_settings.http_code }});
-  }
+        return new {{ state_settings.response_class }}({{ (state == 'DELETE') ? 'NULL' : '$payload' }}, {{ state_settings.http_code }});
+    }
 {% endfor %}
 {% endblock %}
diff --git a/vendor/drupal/console/templates/module/src/Plugin/RulesAction/rulesaction.php.twig b/vendor/drupal/console/templates/module/src/Plugin/RulesAction/rulesaction.php.twig
new file mode 100644
index 0000000000000000000000000000000000000000..95509bc429c289acc50e500b81ffcb4b1c4591f3
--- /dev/null
+++ b/vendor/drupal/console/templates/module/src/Plugin/RulesAction/rulesaction.php.twig
@@ -0,0 +1,51 @@
+{% extends "base/class.php.twig" %}
+
+{% block file_path %}
+\Drupal\{{module}}\Plugin\RulesAction\{{class_name}}.
+{% endblock %}
+
+{% block namespace_class %}
+namespace Drupal\{{module}}\Plugin\RulesAction;
+{% endblock %}
+
+{% block use_class %}
+use Drupal\rules\Core\RulesActionBase;
+{% endblock %}
+
+{% block class_declaration %}
+/**
+ * Provides a '{{class_name}}' action.
+ *
+ * @RulesAction(
+ *  id = "{{plugin_id}}",
+ *  label = @Translation("{{label}}"),
+ *  category = @Translation("{{category}}"),
+{% if context %}
+ *  context = {
+{% for item in context %}
+ *     "{{ item.name }}" = @ContextDefinition("{{ item.type }}",
+ *       label = @Translation("{{ item.label }}"),
+ *       description = @Translation("{{ item.description }}")
+ *     ),
+{% endfor %}
+ *  }
+{% endif %}
+ * )
+ */
+class {{class_name}} extends RulesActionBase {% endblock %}
+{% block class_methods %}
+  /**
+   * {@inheritdoc}
+   */
+  public function doExecute($object = NULL) {
+    // Insert code here.
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function autoSaveContext() {
+      // Insert code here.
+      return [];
+  }
+{% endblock %}
diff --git a/vendor/drupal/console/templates/module/src/Plugin/RulesDataProcessor/rulesdataprocessor.php.twig b/vendor/drupal/console/templates/module/src/Plugin/RulesDataProcessor/rulesdataprocessor.php.twig
new file mode 100644
index 0000000000000000000000000000000000000000..223345f6b8ba68073333a455cbc1131d6dd775d3
--- /dev/null
+++ b/vendor/drupal/console/templates/module/src/Plugin/RulesDataProcessor/rulesdataprocessor.php.twig
@@ -0,0 +1,34 @@
+{% extends "base/class.php.twig" %}
+
+{% block file_path %}
+Drupal\{{module}}\Plugin\RulesDataProcessor\{{class_name}}.
+{% endblock %}
+
+{% block namespace_class %}
+namespace Drupal\{{module}}\Plugin\RulesDataProcessor;
+{% endblock %}
+
+{% block use_class %}
+use Drupal\Core\Plugin\PluginBase;
+use Drupal\rules\Context\DataProcessorInterface;
+use Drupal\rules\Engine\ExecutionStateInterface;
+{% endblock %}
+
+{% block class_declaration %}
+/**
+ * Provides a '{{class_name}}' action.
+ *
+ * @RulesDataProcessor(
+ *   id = "{{plugin_id}}",
+ *   label = @Translation("{{label}}")
+ * )
+ */
+class {{class_name}} extends PluginBase implements DataProcessorInterface {% endblock %}
+{% block class_methods %}
+  /**
+    * {@inheritdoc}
+    */
+  public function process($value, ExecutionStateInterface $rules_state) {
+     // Insert code here.
+  }
+{% endblock %}
\ No newline at end of file
diff --git a/vendor/drupal/console/templates/module/src/Plugin/Validation/Constraint/constraint.php.twig b/vendor/drupal/console/templates/module/src/Plugin/Validation/Constraint/constraint.php.twig
new file mode 100644
index 0000000000000000000000000000000000000000..2de228846558440331e1bfe78c5934eea37674f4
--- /dev/null
+++ b/vendor/drupal/console/templates/module/src/Plugin/Validation/Constraint/constraint.php.twig
@@ -0,0 +1,34 @@
+{% extends "base/class.php.twig" %}
+
+{% block file_path %}
+\Drupal\{{ module }}\Plugin\Validation\Constraint\{{ class_name }}.
+{% endblock %}
+
+{% block namespace_class %}
+namespace Drupal\{{ module }}\Plugin\Validation\Constraint;
+{% endblock %}
+
+{% block use_class %}
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\ConstraintValidator;
+{% endblock %}
+
+{% block class_declaration %}
+/**
+ * Plugin implementation of the '{{ plugin_id }}'.
+ *
+ * @Constraint(
+ *   id = "{{ plugin_id }}",
+ *   label = @Translation("{{ label }}", context = "Validation"),
+ * )
+ */
+class {{ class_name }} extends Constraint
+{% endblock %}
+
+{% block class_properties %}
+    // The message that will be shown if the value is empty.
+    public $isEmpty = '%value is empty';
+
+    // The message that will be shown if the value is not unique.
+    public $notUnique = '%value is not unique';
+{% endblock %}
diff --git a/vendor/drupal/console/templates/module/src/Plugin/Validation/Constraint/validator.php.twig b/vendor/drupal/console/templates/module/src/Plugin/Validation/Constraint/validator.php.twig
new file mode 100644
index 0000000000000000000000000000000000000000..fe7145067e6f41b9d348490e6726ec9eb5bbc293
--- /dev/null
+++ b/vendor/drupal/console/templates/module/src/Plugin/Validation/Constraint/validator.php.twig
@@ -0,0 +1,47 @@
+{% extends "base/class.php.twig" %}
+
+{% block file_path %}
+\Drupal\{{ module }}\Plugin\Validation\Constraint\{{ class_name }}.
+{% endblock %}
+
+{% block namespace_class %}
+namespace Drupal\{{ module }}\Plugin\Validation\Constraint;
+{% endblock %}
+
+{% block use_class %}
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\ConstraintValidator;
+{% endblock %}
+
+{% block class_declaration %}
+/**
+ * Validates the UniqueInteger constraint.
+ */
+class {{ class_name }}Validator extends ConstraintValidator
+{% endblock %}
+
+{% block class_methods %}
+    /**
+     * {@inheritdoc}
+     */
+    public function validate($items, Constraint $constraint) {
+        foreach ($items as $item) {
+            // First check if the value is not empty.
+            if (empty($item->value)) {
+                // The value is empty, so a violation, aka error, is applied.
+                // The type of violation applied comes from the constraint description
+                // in step 1.
+                $this->context->addViolation($constraint->isEmpty, ['%value' => $item->value]);
+            }
+
+            // Next check if the value is unique.
+            if (!$this->isUnique($item->value)) {
+                $this->context->addViolation($constraint->notUnique, ['%value' => $item->value]);
+            }
+        }
+    }
+
+    private function isUnique($value) {
+        // Here is where the check for a unique value would happen.
+    }
+{% endblock %}
diff --git a/vendor/drupal/console/templates/module/src/Plugin/migrate/source/source.php.twig b/vendor/drupal/console/templates/module/src/Plugin/migrate/source/source.php.twig
index 1f8ee6e23f8ddeadf414921343e068957802ea4b..7ecf8844b14ecd7c725c3cc95cc9afbf0e581a17 100644
--- a/vendor/drupal/console/templates/module/src/Plugin/migrate/source/source.php.twig
+++ b/vendor/drupal/console/templates/module/src/Plugin/migrate/source/source.php.twig
@@ -17,7 +17,8 @@ use Drupal\migrate\Plugin\migrate\source\SqlBase;
  * Provides a '{{class_name}}' migrate source.
  *
  * @MigrateSource(
- *  id = "{{plugin_id}}"
+ *  id = "{{plugin_id}}",
+ *  source_module = "{{module}}"
  * )
  */
 class {{class_name}} extends SqlBase {% endblock %}
@@ -26,11 +27,11 @@ class {{class_name}} extends SqlBase {% endblock %}
    * {@inheritdoc}
    */
   public function query() {
-
     return $this->select('{{table}}', '{{alias}}')
-      ->fields('{{alias}}'){% if group_by %}
+      ->fields('{{alias}}')
+{% if group_by %}
       ->groupBy('{{alias}}.{{group_by}}')
-      {% endif %};
+{% endif %};
   }
 
   /**
@@ -38,10 +39,10 @@ class {{class_name}} extends SqlBase {% endblock %}
    */
   public function fields() {
     $fields = [
-    {% for field in fields %}
-  '{{field.id}}' => $this->t('{{field.description}}'),
-    {% endfor %}
-];
+{% for field in fields %}
+      '{{field.id}}' => $this->t('{{field.description}}'),
+{% endfor %}
+    ];
     return $fields;
   }
 
@@ -49,7 +50,6 @@ class {{class_name}} extends SqlBase {% endblock %}
    * {@inheritdoc}
    */
   public function getIds() {
-    return [
-    ];
+    return [];
   }
 {% endblock %}
diff --git a/vendor/drupal/console/templates/module/src/Plugin/migrate_plus/data_parser/data_parser.php.twig b/vendor/drupal/console/templates/module/src/Plugin/migrate_plus/data_parser/data_parser.php.twig
new file mode 100644
index 0000000000000000000000000000000000000000..9028dc710fd036dd5435f7bd70e488dcf15e9e57
--- /dev/null
+++ b/vendor/drupal/console/templates/module/src/Plugin/migrate_plus/data_parser/data_parser.php.twig
@@ -0,0 +1,39 @@
+{% extends "base/class.php.twig" %}
+
+{% block file_path %}
+\Drupal\{{module}}\Plugin\migrate_plus\data_parser\{{class_name}}.
+{% endblock %}
+
+{% block namespace_class %}
+namespace Drupal\{{module}}\Plugin\migrate_plus\data_parser;
+{% endblock %}
+
+{% block use_class %}
+use Drupal\migrate_plus\DataParserPluginBase;
+{% endblock %}
+
+{% block class_declaration %}
+/**
+* Provides a '{{class_name}}' data parser plugin.
+*
+* @DataParser(
+*  id = "{{plugin_id}}"
+*  title = @Translation("{{plugin_title}}")
+* )
+*/
+class {{class_name}} extends DataParserPluginBase {% endblock %}
+{% block class_methods %}
+  /**
+   * {@inheritdoc}
+   */
+  protected function openSourceUrl($url) {
+    // Plugin logic goes here.
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function fetchNextRow() {
+    // Plugin logic goes here.
+  }
+{% endblock %}
diff --git a/vendor/drupal/console/templates/module/src/Plugin/skeleton.php.twig b/vendor/drupal/console/templates/module/src/Plugin/skeleton.php.twig
index 5bce614ab9d852481cd82afb496aaaa2b0dd9d89..d8333f6dfd568d3b6843c62f73d0ff10ea0956ff 100644
--- a/vendor/drupal/console/templates/module/src/Plugin/skeleton.php.twig
+++ b/vendor/drupal/console/templates/module/src/Plugin/skeleton.php.twig
@@ -5,7 +5,7 @@
 {% endblock %}
 
 {% block namespace_class %}
-namespace Drupal\{{module}}\Plugin\{{ plugin }};
+namespace Drupal\{{module}}\{{ namespace }};
 {% endblock %}
 
 {% block use_class %}
@@ -19,15 +19,18 @@ use Symfony\Component\DependencyInjection\ContainerInterface;
 {% endif %}
 {% endblock %}
 
+{% block use_class_services %}
+{% endblock %}
+
 {% block class_declaration %}
 {% if pluginAnnotation is not empty %}
 /**
  * @{{ plugin_annotation }}(
 {% for property in pluginAnnotationProperties %}
 {% if property.name == 'id' %}
- *  id = "{{- plugin_id }}",
+ *  id = "{{- id }}",
 {% elseif property.type == "\\Drupal\\Core\\Annotation\\Translation" %}
- *  {{ property.name }} = @Translation("{{property.description}}"),
+ *  {{ property.name }} = @Translation("{{label}}"),
 {% else %}
  *  {{ property.name }} = "{{ property.type }}",
 {% endif %}
@@ -35,50 +38,26 @@ use Symfony\Component\DependencyInjection\ContainerInterface;
  * )
  */
 {% endif %}
-class {{class_name}} implements {% if plugin_interface is not empty %} {{ plugin_interface }} {% endif %}{% if services is not empty %}, ContainerFactoryPluginInterface {% endif %}{% endblock %}
-{% block class_construct %}
-{% if services is not empty %}
-  /**
-   * Constructs a new {{class_name}} 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 string $plugin_definition
-   *   The plugin implementation definition.
-   */
-  public function __construct(
-        array $configuration,
-        $plugin_id,
-        $plugin_definition,
-        {{ servicesAsParameters(services)|join(', \n\t') }}
-  ) {
-    parent::__construct($configuration, $plugin_id, $plugin_definition);
-{{ serviceClassInitialization(services) }}
-  }
-{% endif %}
-{% endblock %}
+class {{class_name}} implements {% if plugin_interface is not empty %}{{ plugin_interface }}{% endif %}{% if services is not empty %}, ContainerFactoryPluginInterface {% endif %}{% endblock %}
+
 {% block class_create %}
 {% if services is not empty %}
   /**
    * {@inheritdoc}
    */
   public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
-    return new static(
-      $configuration,
-      $plugin_id,
-      $plugin_definition,
-{{ serviceClassInjection(services) }}
-    );
+    $instance = new static($configuration, $plugin_id, $plugin_definition);
+{{ serviceClassInjectionNoOverride(services) }}
+    return $instance;
   }
 {% endif %}
 {% endblock %}
+
 {% block class_methods %}
 
     /**
-    * {@inheritdoc}
-    */
+     * {@inheritdoc}
+     */
     public function build() {
     $build = [];
 
@@ -86,13 +65,13 @@ class {{class_name}} implements {% if plugin_interface is not empty %} {{ plugin
 
     return $build;
     }
-
   {% for method in pluginInterfaceMethods %}
+
     /**
-      * {@inheritdoc}
-      */
-      {{ method.declaration }} {
-        // {{ method.description }}
-      }
+     * {@inheritdoc}
+     */
+    {{ method.declaration }} {
+
+    }
   {% endfor %}
 {% endblock %}
diff --git a/vendor/drupal/console/templates/module/src/accesscontrolhandler-entity-content.php.twig b/vendor/drupal/console/templates/module/src/accesscontrolhandler-entity-content.php.twig
index 728a276ee8ae08d169d7bab559a7009a4240b56e..7aaa3c53b402b5f51fbd0898911162b5080e5c9f 100644
--- a/vendor/drupal/console/templates/module/src/accesscontrolhandler-entity-content.php.twig
+++ b/vendor/drupal/console/templates/module/src/accesscontrolhandler-entity-content.php.twig
@@ -28,17 +28,49 @@ class {{ entity_class }}AccessControlHandler extends EntityAccessControlHandler
    */
   protected function checkAccess(EntityInterface $entity, $operation, AccountInterface $account) {
     /** @var \Drupal\{{ module }}\Entity\{{ entity_class }}Interface $entity */
+
     switch ($operation) {
+
       case 'view':
+
         if (!$entity->isPublished()) {
+{% if has_bundle_permissions %}
+          $permission = $this->checkOwn($entity, 'view unpublished', $account);
+          if (!empty($permission)) {
+            return AccessResult::allowed();
+          }
+
+{%  endif %}
           return AccessResult::allowedIfHasPermission($account, 'view unpublished {{ label|lower }} entities');
         }
+
+{% if has_bundle_permissions %}
+        $permission = $this->checkOwn($entity, $operation, $account);
+        if (!empty($permission)) {
+          return AccessResult::allowed();
+        }
+{%  endif %}
+
         return AccessResult::allowedIfHasPermission($account, 'view published {{ label|lower }} entities');
 
       case 'update':
+
+{% if has_bundle_permissions %}
+        $permission = $this->checkOwn($entity, $operation, $account);
+        if (!empty($permission)) {
+          return AccessResult::allowed();
+        }
+{%  endif %}
         return AccessResult::allowedIfHasPermission($account, 'edit {{ label|lower }} entities');
 
       case 'delete':
+
+{% if has_bundle_permissions %}
+        $permission = $this->checkOwn($entity, $operation, $account);
+        if (!empty($permission)) {
+          return AccessResult::allowed();
+        }
+{%  endif %}
         return AccessResult::allowedIfHasPermission($account, 'delete {{ label|lower }} entities');
     }
 
@@ -52,4 +84,51 @@ class {{ entity_class }}AccessControlHandler extends EntityAccessControlHandler
   protected function checkCreateAccess(AccountInterface $account, array $context, $entity_bundle = NULL) {
     return AccessResult::allowedIfHasPermission($account, 'add {{ label|lower }} entities');
   }
+
+{% if has_bundle_permissions %}
+  /**
+   * Test for given 'own' permission.
+   *
+   * @param \Drupal\Core\Entity\EntityInterface $entity
+   * @param $operation
+   * @param \Drupal\Core\Session\AccountInterface $account
+   *
+   * @return string|null
+   *   The permission string indicating it's allowed.
+   */
+  protected function checkOwn(EntityInterface $entity, $operation, AccountInterface $account) {
+    $status = $entity->isPublished();
+    $uid = $entity->getOwnerId();
+
+    $is_own = $account->isAuthenticated() && $account->id() == $uid;
+    if (!$is_own) {
+      return;
+    }
+
+    $bundle = $entity->bundle();
+
+    $ops = [
+      'create' => '%bundle add own %bundle entities',
+      'view unpublished' => '%bundle view own unpublished %bundle entities',
+      'view' => '%bundle view own entities',
+      'update' => '%bundle edit own entities',
+      'delete' => '%bundle delete own entities',
+    ];
+    $permission = strtr($ops[$operation], ['%bundle' => $bundle]);
+
+    if ($operation === 'view unpublished') {
+      if (!$status && $account->hasPermission($permission)) {
+        return $permission;
+      }
+      else {
+        return NULL;
+      }
+    }
+    if ($account->hasPermission($permission)) {
+      return $permission;
+    }
+
+    return NULL;
+  }
+{% endif %}
 {% endblock %}
diff --git a/vendor/drupal/console/templates/module/src/cache-context.php.twig b/vendor/drupal/console/templates/module/src/cache-context.php.twig
index 87a7b4c1978b6c46ce0709cdb0d462490f8fdd08..096a5c02ccbef22853b6ee892c65a85d839f0c7c 100644
--- a/vendor/drupal/console/templates/module/src/cache-context.php.twig
+++ b/vendor/drupal/console/templates/module/src/cache-context.php.twig
@@ -15,8 +15,8 @@ use Drupal\Core\Cache\Context\CacheContextInterface;
 
 {% block class_declaration %}
 /**
-* Class {{ class }}.
-*/
+ * Class {{ class }}.
+ */
 class {{ class }} implements CacheContextInterface {% endblock %}
 
 {% block class_construct %}
@@ -25,29 +25,29 @@ class {{ class }} implements CacheContextInterface {% endblock %}
    * Constructs a new {{ class }} object.
    */
   public function __construct({{ servicesAsParameters(services)|join(', ') }}) {
-  {{ serviceClassInitialization(services) }}
+{{ serviceClassInitialization(services) }}
   }
 
 {% endblock %}
 
 {% block class_methods %}
   /**
-  * {@inheritdoc}
-  */
+   * {@inheritdoc}
+   */
   public static function getLabel() {
-    drupal_set_message('Lable of cache context');
+    \Drupal::messenger()->addMessage('Lable of cache context');
   }
 
   /**
-  * {@inheritdoc}
-  */
+   * {@inheritdoc}
+   */
   public function getContext() {
     // Actual logic of context variation will lie here.
   }
 
   /**
-  * {@inheritdoc}
-  */
+   * {@inheritdoc}
+   */
   public function getCacheableMetadata() {
     return new CacheableMetadata();
   }
diff --git a/vendor/drupal/console/templates/module/src/entity-content-bundle-permissions.php.twig b/vendor/drupal/console/templates/module/src/entity-content-bundle-permissions.php.twig
new file mode 100644
index 0000000000000000000000000000000000000000..5c00b2250661ffca44e3d5c667b2254c1b6518c9
--- /dev/null
+++ b/vendor/drupal/console/templates/module/src/entity-content-bundle-permissions.php.twig
@@ -0,0 +1,92 @@
+
+{% extends "base/class.php.twig" %}
+
+{% block file_path %}
+  \Drupal\{{ module }}\Entity\{{ entity_class }}.
+{% endblock %}
+
+{% block namespace_class %}
+namespace Drupal\{{ module }};
+{% endblock %}
+
+{% block use_class %}
+use Drupal\Core\StringTranslation\StringTranslationTrait;
+use Drupal\{{ module }}\Entity\{{ entity_class }};
+
+{% endblock %}
+
+{% block class_declaration %}
+/**
+ * Provides dynamic permissions for {{ label }} of different types.
+ *
+ * @ingroup {{ module }}
+ *
+ */
+class {{ entity_class }}Permissions{% endblock %}
+
+{% block class_methods %}
+  use StringTranslationTrait;
+
+  /**
+   * Returns an array of node type permissions.
+   *
+   * @return array
+   *   The {{ entity_class }} by bundle permissions.
+   *   @see \Drupal\user\PermissionHandlerInterface::getPermissions()
+   */
+  public function generatePermissions() {
+    $perms = [];
+
+    foreach ({{ entity_class }}::loadMultiple() as $type) {
+      $perms += $this->buildPermissions($type);
+    }
+
+    return $perms;
+  }
+
+  /**
+   * Returns a list of node permissions for a given node type.
+   *
+   * @param \Drupal\{{ module }}\Entity\{{ entity_class }} $type
+   *   The {{ entity_class }} type.
+   *
+   * @return array
+   *   An associative array of permission names and descriptions.
+   */
+  protected function buildPermissions({{ entity_class}} $type) {
+    $type_id = $type->id();
+    $type_params = ['%type_name' => $type->label()];
+
+    return [
+      "$type_id create entities" => [
+        'title' => $this->t('Create new %type_name entities', $type_params),
+      ],
+      "$type_id edit own entities" => [
+        'title' => $this->t('Edit own %type_name entities', $type_params),
+      ],
+      "$type_id edit any entities" => [
+        'title' => $this->t('Edit any %type_name entities', $type_params),
+      ],
+      "$type_id delete own entities" => [
+        'title' => $this->t('Delete own %type_name entities', $type_params),
+      ],
+      "$type_id delete any entities" => [
+        'title' => $this->t('Delete any %type_name entities', $type_params),
+      ],
+{% if revisionable %}
+      "$type_id view revisions" => [
+        'title' => $this->t('View %type_name revisions', $type_params),
+        'description' => t('To view a revision, you also need permission to view the entity item.'),
+      ],
+      "$type_id revert revisions" => [
+        'title' => $this->t('Revert %type_name revisions', $type_params),
+        'description' => t('To revert a revision, you also need permission to edit the entity item.'),
+      ],
+      "$type_id delete revisions" => [
+        'title' => $this->t('Delete %type_name revisions', $type_params),
+        'description' => $this->t('To delete a revision, you also need permission to delete the entity item.'),
+      ],
+{% endif %}
+    ];
+  }
+{% endblock %}
diff --git a/vendor/drupal/console/templates/module/src/entity-content-route-provider.php.twig b/vendor/drupal/console/templates/module/src/entity-content-route-provider.php.twig
index afaa8908a998c91ef60edbf86897bab76337a06e..6ed15308af246d3da2b975700577950bd707a58e 100644
--- a/vendor/drupal/console/templates/module/src/entity-content-route-provider.php.twig
+++ b/vendor/drupal/console/templates/module/src/entity-content-route-provider.php.twig
@@ -80,7 +80,7 @@ class {{ entity_class }}HtmlRouteProvider extends AdminHtmlRouteProvider {% endb
           '_title' => "{$entity_type->getLabel()} revisions",
           '_controller' => '\Drupal\{{ module }}\Controller\{{ entity_class }}Controller::revisionOverview',
         ])
-        ->setRequirement('_permission', 'access {{ label|lower }} revisions')
+        ->setRequirement('_permission', 'view all {{ label|lower }} revisions')
         ->setOption('_admin_route', TRUE);
 
       return $route;
@@ -104,7 +104,7 @@ class {{ entity_class }}HtmlRouteProvider extends AdminHtmlRouteProvider {% endb
           '_controller' => '\Drupal\{{ module }}\Controller\{{ entity_class }}Controller::revisionShow',
           '_title_callback' => '\Drupal\{{ module }}\Controller\{{ entity_class }}Controller::revisionPageTitle',
         ])
-        ->setRequirement('_permission', 'access {{ label|lower }} revisions')
+        ->setRequirement('_permission', 'view all {{ label|lower }} revisions')
         ->setOption('_admin_route', TRUE);
 
       return $route;
@@ -209,4 +209,4 @@ class {{ entity_class }}HtmlRouteProvider extends AdminHtmlRouteProvider {% endb
       return $route;
     }
   }
-{% endblock %}
+{% endblock %}
\ No newline at end of file
diff --git a/vendor/drupal/console/templates/module/src/entity-route-provider.php.twig b/vendor/drupal/console/templates/module/src/entity-route-provider.php.twig
index 860d7b3074192728a5d30be80b182addc3e87c91..c7b33fdf4fc1b8645a858c200919993e3f7f6888 100644
--- a/vendor/drupal/console/templates/module/src/entity-route-provider.php.twig
+++ b/vendor/drupal/console/templates/module/src/entity-route-provider.php.twig
@@ -11,7 +11,6 @@ namespace Drupal\{{ module }};
 {% block use_class %}
 use Drupal\Core\Entity\EntityTypeInterface;
 use Drupal\Core\Entity\Routing\AdminHtmlRouteProvider;
-use Symfony\Component\Routing\Route;
 {% endblock %}
 
 {% block class_declaration %}
@@ -30,7 +29,6 @@ class {{ entity_class }}HtmlRouteProvider extends AdminHtmlRouteProvider {% endb
     $collection = parent::getRoutes($entity_type);
 
     // Provide your custom entity routes here.
-
     return $collection;
   }
 {% endblock %}
diff --git a/vendor/drupal/console/templates/module/src/entity-storage.php.twig b/vendor/drupal/console/templates/module/src/entity-storage.php.twig
index 01aec1cc462560ac91bafc664724fc4ce1a00c1d..629e1a7d626552a23876fc3c4ace39f62690e0b1 100644
--- a/vendor/drupal/console/templates/module/src/entity-storage.php.twig
+++ b/vendor/drupal/console/templates/module/src/entity-storage.php.twig
@@ -11,7 +11,9 @@ namespace Drupal\{{ module }};
 {% block use_class %}
 use Drupal\Core\Entity\Sql\SqlContentEntityStorage;
 use Drupal\Core\Session\AccountInterface;
+{% if is_translatable %}
 use Drupal\Core\Language\LanguageInterface;
+{% endif %}
 use Drupal\{{ module }}\Entity\{{ entity_class }}Interface;
 {% endblock %}
 
@@ -46,6 +48,7 @@ class {{ entity_class }}Storage extends SqlContentEntityStorage implements {{ en
       [':uid' => $account->id()]
     )->fetchCol();
   }
+{% if is_translatable %}
 
   /**
    * {@inheritdoc}
@@ -64,4 +67,5 @@ class {{ entity_class }}Storage extends SqlContentEntityStorage implements {{ en
       ->condition('langcode', $language->getId())
       ->execute();
   }
+{% endif %}
 {% endblock %}
diff --git a/vendor/drupal/console/templates/module/src/entity-translation-handler.php.twig b/vendor/drupal/console/templates/module/src/entity-translation-handler.php.twig
index 4ca6378ec21c93096556a7a8f9c707e71b353690..39e4661b0e44c717af16d2b38346e5a6c8967a51 100644
--- a/vendor/drupal/console/templates/module/src/entity-translation-handler.php.twig
+++ b/vendor/drupal/console/templates/module/src/entity-translation-handler.php.twig
@@ -15,4 +15,4 @@ use Drupal\content_translation\ContentTranslationHandler;
 class {{ entity_class }}TranslationHandler extends ContentTranslationHandler {% endblock %}
 {% block class_methods %}
   // Override here the needed methods from ContentTranslationHandler.
-{% endblock %}
+{%- endblock -%}
\ No newline at end of file
diff --git a/vendor/drupal/console/templates/module/src/event-subscriber.php.twig b/vendor/drupal/console/templates/module/src/event-subscriber.php.twig
index e79389234e2f4aa588b8828b42d117d60472b2c6..b3f54c9e369facc07bd59ab9b4b846df273dfce2 100644
--- a/vendor/drupal/console/templates/module/src/event-subscriber.php.twig
+++ b/vendor/drupal/console/templates/module/src/event-subscriber.php.twig
@@ -20,7 +20,6 @@ use Symfony\Component\EventDispatcher\Event;
 class {{ class }} implements EventSubscriberInterface {% endblock %}
 
 {% block class_construct %}
-
   /**
    * Constructs a new {{ class }} object.
    */
@@ -34,23 +33,23 @@ class {{ class }} implements EventSubscriberInterface {% endblock %}
   /**
    * {@inheritdoc}
    */
-  static function getSubscribedEvents() {
+  public static function getSubscribedEvents() {
 {% for event_name, callback in events %}
     $events['{{ event_name }}'] = ['{{ callback }}'];
 {% endfor %}
 
     return $events;
   }
-
 {% for event_name, callback in events %}
+
   /**
-   * This method is called whenever the {{ event_name }} event is
-   * dispatched.
+   * This method is called when the {{ event_name }} is dispatched.
    *
-   * @param GetResponseEvent $event
+   * @param \Symfony\Component\EventDispatcher\Event $event
+   *   The dispatched event.
    */
   public function {{ callback }}(Event $event) {
-    drupal_set_message('Event {{ event_name }} thrown by Subscriber in module {{ module }}.', 'status', TRUE);
+    \Drupal::messenger()->addMessage('Event {{ event_name }} thrown by Subscriber in module {{ module }}.', 'status', TRUE);
   }
 {% endfor %}
 {% endblock %}
diff --git a/vendor/drupal/console/templates/module/src/interface-entity-storage.php.twig b/vendor/drupal/console/templates/module/src/interface-entity-storage.php.twig
index 050b28708b10d8bfcee4537e08ba60012a869a14..d3abdd4bcf073ec4181c41bb0a809a4ff12921fd 100644
--- a/vendor/drupal/console/templates/module/src/interface-entity-storage.php.twig
+++ b/vendor/drupal/console/templates/module/src/interface-entity-storage.php.twig
@@ -11,7 +11,9 @@ namespace Drupal\{{ module }};
 {% block use_class %}
 use Drupal\Core\Entity\ContentEntityStorageInterface;
 use Drupal\Core\Session\AccountInterface;
+{% if is_translatable %}
 use Drupal\Core\Language\LanguageInterface;
+{% endif %}
 use Drupal\{{ module }}\Entity\{{ entity_class }}Interface;
 {% endblock %}
 
@@ -48,6 +50,7 @@ interface {{ entity_class }}StorageInterface extends ContentEntityStorageInterfa
    *   {{ label }} revision IDs (in ascending order).
    */
   public function userRevisionIds(AccountInterface $account);
+{% if is_translatable %}
 
   /**
    * Counts the number of revisions in the default language.
@@ -67,4 +70,5 @@ interface {{ entity_class }}StorageInterface extends ContentEntityStorageInterfa
    *   The language object.
    */
   public function clearRevisionsLanguage(LanguageInterface $language);
+{% endif %}
 {% endblock %}
diff --git a/vendor/drupal/console/templates/module/src/listbuilder-entity-content.php.twig b/vendor/drupal/console/templates/module/src/listbuilder-entity-content.php.twig
index 46af6648cf76568578b10d6eb4fbb9fc2b1d81af..f089408166ec5496bb8ae787724de00ad15a1b97 100644
--- a/vendor/drupal/console/templates/module/src/listbuilder-entity-content.php.twig
+++ b/vendor/drupal/console/templates/module/src/listbuilder-entity-content.php.twig
@@ -21,8 +21,8 @@ use Drupal\Core\Link;
  * @ingroup {{ module }}
  */
 class {{ entity_class }}ListBuilder extends EntityListBuilder {% endblock %}
-{% block class_methods %}
 
+{% block class_methods %}
   /**
    * {@inheritdoc}
    */
@@ -36,7 +36,7 @@ class {{ entity_class }}ListBuilder extends EntityListBuilder {% endblock %}
    * {@inheritdoc}
    */
   public function buildRow(EntityInterface $entity) {
-    /* @var $entity \Drupal\{{module}}\Entity\{{ entity_class }} */
+    /* @var \Drupal\{{module}}\Entity\{{ entity_class }} $entity */
     $row['id'] = $entity->id();
     $row['name'] = Link::createFromRoute(
       $entity->label(),
diff --git a/vendor/drupal/console/templates/module/system.action.action.yml.twig b/vendor/drupal/console/templates/module/system.action.action.yml.twig
deleted file mode 100644
index 28aec159597dc9e243f1abfadaae5b43376a5974..0000000000000000000000000000000000000000
--- a/vendor/drupal/console/templates/module/system.action.action.yml.twig
+++ /dev/null
@@ -1,11 +0,0 @@
-id: {{ plugin_id }}
-label: '{{ label }}'
-status: true
-langcode: en
-type: {{ type }}
-plugin: {{ plugin_id }}
-dependencies:
-  module:
-    - {{ type }}
-    - {{ module }}
-
diff --git a/vendor/drupal/console/templates/module/templates/plugin-block-html.twig b/vendor/drupal/console/templates/module/templates/plugin-block-html.twig
new file mode 100644
index 0000000000000000000000000000000000000000..0b8088ab0aca7fc7a9f655641f5047c9006dc196
--- /dev/null
+++ b/vendor/drupal/console/templates/module/templates/plugin-block-html.twig
@@ -0,0 +1,18 @@
+{{ '{#' }}
+/**
+* @file
+* Default theme implementation to display a block.
+*
+* @see template_preprocess_block()
+*
+* @ingroup themeable
+*/
+{{ '#}' }}
+{{ "{% set classes = [
+    'clear-both',
+] %}" }}
+<div{{ '{{' }} attributes.addClass(classes) {{ '}}' }}>
+    {{ '{% for value in content %}' }}
+        {{ '<p>{{value}}</p>' }}
+    {{ '{% endfor %}' }}
+</div>
diff --git a/vendor/drupal/console/templates/module/twig-template-file.twig b/vendor/drupal/console/templates/module/twig-template-file.twig
index 91e43c8f8098915c42ca8660b3de3088d4475a61..95722bd3448c7867e539e4757a0a777f6fa13f4d 100644
--- a/vendor/drupal/console/templates/module/twig-template-file.twig
+++ b/vendor/drupal/console/templates/module/twig-template-file.twig
@@ -1 +1 @@
-<!-- Add you custom twig html here -->
\ No newline at end of file
+<!-- Add you custom twig html here -->
diff --git a/vendor/drupal/console/templates/module/update.php.twig b/vendor/drupal/console/templates/module/update.php.twig
index 2f8d005f1a5a0d03993b410eeb913f56c58149e5..e220e12a4d38c9f79248a0f4613426f8aec44dc5 100644
--- a/vendor/drupal/console/templates/module/update.php.twig
+++ b/vendor/drupal/console/templates/module/update.php.twig
@@ -6,7 +6,7 @@
  * Implements hook_update_N() on Module {{ module }} Update # {{ update_number }}.
  */
 function {{ module }}_update_{{ update_number }}(&$sandbox) {
-    drupal_set_message('Module {{ module }} Update # {{ update_number }} () was executed successfully.');
+    \Drupal::messenger()->addMessage('Module {{ module }} Update # {{ update_number }} () was executed successfully.');
 }
 
 {% endblock %}
diff --git a/vendor/drupal/console/templates/theme/info.yml.twig b/vendor/drupal/console/templates/theme/info.yml.twig
index fca5fb2714b79f908da9dca7552c84cc0bd4eeea..348a4ecf198f03c6d36cd71042f3e4fd6ba546f1 100644
--- a/vendor/drupal/console/templates/theme/info.yml.twig
+++ b/vendor/drupal/console/templates/theme/info.yml.twig
@@ -14,10 +14,22 @@ base theme: {{ base_theme }}
 {% if base_theme == 'classy' %}
 #Using Classy as a base theme https://www.drupal.org/theme-guide/8/classy
 {% endif %}
+{% if regions or base_theme_regions is iterable %}
 
-{% if regions %}
 regions:
+{% if base_theme_regions is iterable %}
+{% for key, default_regions in base_theme_regions %}
+  {{ key }}: {{ default_regions }}
+{% endfor %}
+{% endif %}
 {% for region in regions %}
   {{ region.region_machine_name }}: {{ region.region_name }}
 {% endfor %}
 {% endif %}
+{% if base_theme_regions_hidden is defined and base_theme_regions_hidden is not null %}
+
+regions_hidden:
+{% for default_regions_hidden in base_theme_regions_hidden %}
+  - {{ default_regions_hidden }}
+{% endfor %}
+{% endif %}
\ No newline at end of file
diff --git a/vendor/drupal/console/templates/theme/libraries.yml.twig b/vendor/drupal/console/templates/theme/libraries.yml.twig
index 8d2379ea6a846b5b99cd60f628a04b9b74915282..0c399a019f0437da239a0f67c8b07ebacc0b6bf5 100644
--- a/vendor/drupal/console/templates/theme/libraries.yml.twig
+++ b/vendor/drupal/console/templates/theme/libraries.yml.twig
@@ -7,10 +7,10 @@
      #js/your_js.js : {}
 {% for library in libraries %}
 {{ library.library_name }}:
-  version: {{ library.library_version }}
+   version: {{ library.library_version }}
    css:
     theme:
       #js/your_js.js : {}
    js:
      #js/your_js.js : {}
-{% endfor %}
\ No newline at end of file
+{% endfor %}
diff --git a/vendor/drupal/console/uninstall.services.yml b/vendor/drupal/console/uninstall.services.yml
index 51c6ea63cd81611c876e58e78cd93bbc662ea450..3f4a5a10e5d0aca1c0c573e9c71c994c7045574b 100644
--- a/vendor/drupal/console/uninstall.services.yml
+++ b/vendor/drupal/console/uninstall.services.yml
@@ -4,28 +4,40 @@ services:
     arguments: ['@app.root', '@console.configuration_manager']
   console.extension_manager:
     class: Drupal\Console\Extension\Manager
-    arguments: ['@console.site', '@http_client', '@app.root']
+    arguments: ['@console.site', '@http_client', '@app.root', '@extension.list.module']
   # Commands
   console.server:
     class: Drupal\Console\Command\ServerCommand
     arguments: ['@app.root', '@console.configuration_manager']
     tags:
       - { name: drupal.command }
-  console.site_install:
-    class: Drupal\Console\Command\Site\InstallCommand
-    arguments: ['@console.extension_manager', '@console.site', '@console.configuration_manager', '@app.root']
+  console.database_client:
+    class: Drupal\Console\Command\Database\ClientCommand
     tags:
       - { name: drupal.command }
-  console.multisite_new:
-    class: Drupal\Console\Command\Multisite\NewCommand
-    arguments: ['@app.root']
+  console.database_add:
+    class: Drupal\Console\Command\Database\AddCommand
+    arguments: ['@console.database_settings_generator']
     tags:
       - { name: drupal.command }
-  console.multisite_update:
-    class: Drupal\Console\Command\Multisite\UpdateCommand
+  console.database_query:
+    class: Drupal\Console\Command\Database\QueryCommand
+    tags:
+      - { name: drupal.command }
+  console.database_connect:
+    class: Drupal\Console\Command\Database\ConnectCommand
+    tags:
+      - { name: drupal.command }
+  console.database_restore:
+    class: Drupal\Console\Command\Database\RestoreCommand
     arguments: ['@app.root']
     tags:
       - { name: drupal.command }
+  console.site_install:
+    class: Drupal\Console\Command\Site\InstallCommand
+    arguments: ['@console.extension_manager', '@console.site', '@console.configuration_manager', '@app.root']
+    tags:
+      - { name: drupal.command }
   console.dotenv_init:
     class: \Drupal\Console\Command\DotenvInitCommand
     arguments: ['@console.dotenv_init_generator']
@@ -41,6 +53,11 @@ services:
     arguments: ['@console.docker_init_generator']
     tags:
       - { name: drupal.command }
+  console.composer_update_debug:
+    class: Drupal\Console\Command\Debug\UpdateComposerCommand
+    arguments: ['@console.drupal_finder']
+    tags:
+      - { name: drupal.command }
   # Generators
   console.dotenv_init_generator:
     class: Drupal\Console\Generator\DotenvInitGenerator
@@ -50,6 +67,10 @@ services:
     class: Drupal\Console\Generator\DockerInitGenerator
     tags:
       - { name: drupal.generator }
+  console.database_settings_generator:
+    class: Drupal\Console\Generator\DatabaseSettingsGenerator
+    tags:
+      - { name: drupal.generator }
   # Drupal services
   http_client:
     class: GuzzleHttp\Client
diff --git a/vendor/drupal/core-composer-scaffold/AllowedPackages.php b/vendor/drupal/core-composer-scaffold/AllowedPackages.php
new file mode 100644
index 0000000000000000000000000000000000000000..481492f009ab62871d1844649087879c03068564
--- /dev/null
+++ b/vendor/drupal/core-composer-scaffold/AllowedPackages.php
@@ -0,0 +1,217 @@
+<?php
+
+namespace Drupal\Composer\Plugin\Scaffold;
+
+use Composer\Composer;
+use Composer\DependencyResolver\Operation\OperationInterface;
+use Composer\Installer\PackageEvent;
+use Composer\IO\IOInterface;
+use Composer\Package\PackageInterface;
+
+/**
+ * Determine recursively which packages have been allowed to scaffold files.
+ *
+ * If the root-level composer.json allows drupal/core, and drupal/core allows
+ * drupal/assets, then the later package will also implicitly be allowed.
+ *
+ * @internal
+ */
+class AllowedPackages implements PostPackageEventListenerInterface {
+
+  /**
+   * The Composer service.
+   *
+   * @var \Composer\Composer
+   */
+  protected $composer;
+
+  /**
+   * Composer's I/O service.
+   *
+   * @var \Composer\IO\IOInterface
+   */
+  protected $io;
+
+  /**
+   * Manager of the options in the top-level composer.json's 'extra' section.
+   *
+   * @var \Drupal\Composer\Plugin\Scaffold\ManageOptions
+   */
+  protected $manageOptions;
+
+  /**
+   * The list of new packages added by this Composer command.
+   *
+   * @var array
+   */
+  protected $newPackages = [];
+
+  /**
+   * AllowedPackages constructor.
+   *
+   * @param \Composer\Composer $composer
+   *   The composer object.
+   * @param \Composer\IO\IOInterface $io
+   *   IOInterface to write to.
+   * @param \Drupal\Composer\Plugin\Scaffold\ManageOptions $manage_options
+   *   Manager of the options in the top-level composer.json's 'extra' section.
+   */
+  public function __construct(Composer $composer, IOInterface $io, ManageOptions $manage_options) {
+    $this->composer = $composer;
+    $this->io = $io;
+    $this->manageOptions = $manage_options;
+  }
+
+  /**
+   * Gets a list of all packages that are allowed to copy scaffold files.
+   *
+   * We will implicitly allow the projects 'drupal/legacy-scaffold-assets'
+   * and 'drupal/core' to scaffold files, if they are present. Any other
+   * project must be explicitly whitelisted in the top-level composer.json
+   * file in order to be allowed to override scaffold files.
+   * Configuration for packages specified later will override configuration
+   * specified by packages listed earlier. In other words, the last listed
+   * package has the highest priority. The root package will always be returned
+   * at the end of the list.
+   *
+   * @return \Composer\Package\PackageInterface[]
+   *   An array of allowed Composer packages.
+   */
+  public function getAllowedPackages() {
+    $top_level_packages = $this->getTopLevelAllowedPackages();
+    $allowed_packages = $this->recursiveGetAllowedPackages($top_level_packages);
+    // If the root package defines any file mappings, then implicitly add it
+    // to the list of allowed packages. Add it at the end so that it overrides
+    // all the preceding packages.
+    if ($this->manageOptions->getOptions()->hasFileMapping()) {
+      $root_package = $this->composer->getPackage();
+      unset($allowed_packages[$root_package->getName()]);
+      $allowed_packages[$root_package->getName()] = $root_package;
+    }
+    // Handle any newly-added packages that are not already allowed.
+    return $this->evaluateNewPackages($allowed_packages);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function event(PackageEvent $event) {
+    $operation = $event->getOperation();
+    // Determine the package. Later, in evaluateNewPackages(), we will report
+    // which of the newly-installed packages have scaffold operations, and
+    // whether or not they are allowed to scaffold by the allowed-packages
+    // option in the root-level composer.json file.
+    $operationType = $this->getOperationType($operation);
+    $package = $operationType === 'update' ? $operation->getTargetPackage() : $operation->getPackage();
+    if (ScaffoldOptions::hasOptions($package->getExtra())) {
+      $this->newPackages[$package->getName()] = $package;
+    }
+  }
+
+  /**
+   * Gets all packages that are allowed in the top-level composer.json.
+   *
+   * We will implicitly allow the projects 'drupal/legacy-scaffold-assets'
+   * and 'drupal/core' to scaffold files, if they are present. Any other
+   * project must be explicitly whitelisted in the top-level composer.json
+   * file in order to be allowed to override scaffold files.
+   *
+   * @return array
+   *   An array of allowed Composer package names.
+   */
+  protected function getTopLevelAllowedPackages() {
+    $implicit_packages = [
+      'drupal/legacy-scaffold-assets',
+      'drupal/core',
+    ];
+    $top_level_packages = $this->manageOptions->getOptions()->allowedPackages();
+    return array_merge($implicit_packages, $top_level_packages);
+  }
+
+  /**
+   * Builds a name-to-package mapping from a list of package names.
+   *
+   * @param string[] $packages_to_allow
+   *   List of package names to allow.
+   * @param array $allowed_packages
+   *   Mapping of package names to PackageInterface of packages already
+   *   accumulated.
+   *
+   * @return \Composer\Package\PackageInterface[]
+   *   Mapping of package names to PackageInterface in priority order.
+   */
+  protected function recursiveGetAllowedPackages(array $packages_to_allow, array $allowed_packages = []) {
+    foreach ($packages_to_allow as $name) {
+      $package = $this->getPackage($name);
+      if ($package instanceof PackageInterface && !isset($allowed_packages[$name])) {
+        $allowed_packages[$name] = $package;
+        $package_options = $this->manageOptions->packageOptions($package);
+        $allowed_packages = $this->recursiveGetAllowedPackages($package_options->allowedPackages(), $allowed_packages);
+      }
+    }
+    return $allowed_packages;
+  }
+
+  /**
+   * Evaluates newly-added packages and see if they are already allowed.
+   *
+   * For now we will only emit warnings if they are not.
+   *
+   * @param array $allowed_packages
+   *   Mapping of package names to PackageInterface of packages already
+   *   accumulated.
+   *
+   * @return \Composer\Package\PackageInterface[]
+   *   Mapping of package names to PackageInterface in priority order.
+   */
+  protected function evaluateNewPackages(array $allowed_packages) {
+    foreach ($this->newPackages as $name => $newPackage) {
+      if (!array_key_exists($name, $allowed_packages)) {
+        $this->io->write("Not scaffolding files for <comment>{$name}</comment>, because it is not listed in the element 'extra.drupal-scaffold.allowed-packages' in the root-level composer.json file.");
+      }
+      else {
+        $this->io->write("Package <comment>{$name}</comment> has scaffold operations, and is already allowed in the root-level composer.json file.");
+      }
+    }
+    // @todo We could prompt the user and ask if they wish to allow a
+    // newly-added package. This might be useful if, for example, the user
+    // might wish to require an installation profile that contains scaffolded
+    // assets. For more information, see:
+    // https://www.drupal.org/project/drupal/issues/3064990
+    return $allowed_packages;
+  }
+
+  /**
+   * Determine the type of the provided operation.
+   *
+   * Adjusts API used for Composer 1 or Composer 2.
+   *
+   * @param \Composer\DependencyResolver\Operation\OperationInterface $operation
+   *   The operation object.
+   *
+   * @return string
+   *   The operation type.
+   */
+  protected function getOperationType(OperationInterface $operation) {
+    // Use Composer 2 method.
+    if (method_exists($operation, 'getOperationType')) {
+      return $operation->getOperationType();
+    }
+    // Fallback to Composer 1 method.
+    return $operation->getJobType();
+  }
+
+  /**
+   * Retrieves a package from the current composer process.
+   *
+   * @param string $name
+   *   Name of the package to get from the current composer installation.
+   *
+   * @return \Composer\Package\PackageInterface|null
+   *   The Composer package.
+   */
+  protected function getPackage($name) {
+    return $this->composer->getRepositoryManager()->getLocalRepository()->findPackage($name, '*');
+  }
+
+}
diff --git a/vendor/drupal-composer/drupal-scaffold/src/CommandProvider.php b/vendor/drupal/core-composer-scaffold/CommandProvider.php
similarity index 72%
rename from vendor/drupal-composer/drupal-scaffold/src/CommandProvider.php
rename to vendor/drupal/core-composer-scaffold/CommandProvider.php
index 327a7f229ea0757c0944b46be22136d15955fb62..6597039399bb93cc80ea908caf692aa4c8ec06a2 100644
--- a/vendor/drupal-composer/drupal-scaffold/src/CommandProvider.php
+++ b/vendor/drupal/core-composer-scaffold/CommandProvider.php
@@ -1,11 +1,13 @@
 <?php
 
-namespace DrupalComposer\DrupalScaffold;
+namespace Drupal\Composer\Plugin\Scaffold;
 
 use Composer\Plugin\Capability\CommandProvider as CommandProviderCapability;
 
 /**
  * List of all commands provided by this package.
+ *
+ * @internal
  */
 class CommandProvider implements CommandProviderCapability {
 
@@ -13,9 +15,7 @@ class CommandProvider implements CommandProviderCapability {
    * {@inheritdoc}
    */
   public function getCommands() {
-    return [
-      new DrupalScaffoldCommand(),
-    ];
+    return [new ComposerScaffoldCommand()];
   }
 
 }
diff --git a/vendor/drupal/core-composer-scaffold/ComposerScaffoldCommand.php b/vendor/drupal/core-composer-scaffold/ComposerScaffoldCommand.php
new file mode 100644
index 0000000000000000000000000000000000000000..6de8aa4bf8fc7743f43368ee28783835b5c75843
--- /dev/null
+++ b/vendor/drupal/core-composer-scaffold/ComposerScaffoldCommand.php
@@ -0,0 +1,56 @@
+<?php
+
+namespace Drupal\Composer\Plugin\Scaffold;
+
+use Composer\Command\BaseCommand;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+
+/**
+ * The "drupal:scaffold" command class.
+ *
+ * Manually run the scaffold operation that normally happens after
+ * 'composer install'.
+ *
+ * @internal
+ */
+class ComposerScaffoldCommand extends BaseCommand {
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function configure() {
+    $this
+      ->setName('drupal:scaffold')
+      ->setAliases(['scaffold'])
+      ->setDescription('Update the Drupal scaffold files.')
+      ->setHelp(
+        <<<EOT
+The <info>drupal:scaffold</info> command places the scaffold files in their
+respective locations according to the layout stipulated in the composer.json
+file.
+
+<info>php composer.phar drupal:scaffold</info>
+
+It is usually not necessary to call <info>drupal:scaffold</info> manually,
+because it is called automatically as needed, e.g. after an <info>install</info>
+or <info>update</info> command. Note, though, that only packages explicitly
+allowed to scaffold in the top-level composer.json will be processed by this
+command.
+
+For more information, see https://www.drupal.org/docs/develop/using-composer/using-drupals-composer-scaffold.
+EOT
+            );
+
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function execute(InputInterface $input, OutputInterface $output) {
+    $handler = new Handler($this->getComposer(), $this->getIO());
+    $handler->scaffold();
+    return 0;
+  }
+
+}
diff --git a/vendor/drupal/core-composer-scaffold/GenerateAutoloadReferenceFile.php b/vendor/drupal/core-composer-scaffold/GenerateAutoloadReferenceFile.php
new file mode 100644
index 0000000000000000000000000000000000000000..4a576388262cdd7077c2743855ab6904986c51d9
--- /dev/null
+++ b/vendor/drupal/core-composer-scaffold/GenerateAutoloadReferenceFile.php
@@ -0,0 +1,124 @@
+<?php
+
+namespace Drupal\Composer\Plugin\Scaffold;
+
+use Composer\IO\IOInterface;
+use Composer\Util\Filesystem;
+use Drupal\Composer\Plugin\Scaffold\Operations\ScaffoldResult;
+
+/**
+ * Generates an 'autoload.php' that includes the autoloader created by Composer.
+ *
+ * @internal
+ */
+final class GenerateAutoloadReferenceFile {
+
+  /**
+   * This class provides only static methods.
+   */
+  private function __construct() {
+  }
+
+  /**
+   * Generates the autoload file at the specified location.
+   *
+   * This only writes a bit of PHP that includes the autoload file that
+   * Composer generated. Drupal does this so that it can guarantee that there
+   * will always be an `autoload.php` file in a well-known location.
+   *
+   * @param \Composer\IO\IOInterface $io
+   *   IOInterface to write to.
+   * @param string $package_name
+   *   The name of the package defining the autoload file (the root package).
+   * @param string $web_root
+   *   The path to the web root.
+   * @param string $vendor
+   *   The path to the vendor directory.
+   *
+   * @return \Drupal\Composer\Plugin\Scaffold\Operations\ScaffoldResult
+   *   The result of the autoload file generation.
+   */
+  public static function generateAutoload(IOInterface $io, $package_name, $web_root, $vendor) {
+    $autoload_path = static::autoloadPath($package_name, $web_root);
+    // Calculate the relative path from the webroot (location of the project
+    // autoload.php) to the vendor directory.
+    $fs = new Filesystem();
+    $relative_autoload_path = $fs->findShortestPath($autoload_path->fullPath(), "$vendor/autoload.php");
+    file_put_contents($autoload_path->fullPath(), static::autoLoadContents($relative_autoload_path));
+    return new ScaffoldResult($autoload_path, TRUE);
+  }
+
+  /**
+   * Determines whether or not the autoload file has been committed.
+   *
+   * @param \Composer\IO\IOInterface $io
+   *   IOInterface to write to.
+   * @param string $package_name
+   *   The name of the package defining the autoload file (the root package).
+   * @param string $web_root
+   *   The path to the web root.
+   *
+   * @return bool
+   *   True if autoload.php file exists and has been committed to the repository
+   */
+  public static function autoloadFileCommitted(IOInterface $io, $package_name, $web_root) {
+    $autoload_path = static::autoloadPath($package_name, $web_root);
+    $autoload_file = $autoload_path->fullPath();
+    $location = dirname($autoload_file);
+    if (!file_exists($autoload_file)) {
+      return FALSE;
+    }
+    return Git::checkTracked($io, $autoload_file, $location);
+  }
+
+  /**
+   * Generates a scaffold file path object for the autoload file.
+   *
+   * @param string $package_name
+   *   The name of the package defining the autoload file (the root package).
+   * @param string $web_root
+   *   The path to the web root.
+   *
+   * @return \Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath
+   *   Object wrapping the relative and absolute path to the destination file.
+   */
+  protected static function autoloadPath($package_name, $web_root) {
+    $rel_path = 'autoload.php';
+    $dest_rel_path = '[web-root]/' . $rel_path;
+    $dest_full_path = $web_root . '/' . $rel_path;
+    return new ScaffoldFilePath('autoload', $package_name, $dest_rel_path, $dest_full_path);
+  }
+
+  /**
+   * Builds the contents of the autoload file.
+   *
+   * @param string $relative_autoload_path
+   *   The relative path to the autoloader in vendor.
+   *
+   * @return string
+   *   Return the contents for the autoload.php.
+   */
+  protected static function autoLoadContents($relative_autoload_path) {
+    $relative_autoload_path = preg_replace('#^\./#', '', $relative_autoload_path);
+    return <<<EOF
+<?php
+
+/**
+ * @file
+ * Includes the autoloader created by Composer.
+ *
+ * This file was generated by drupal-scaffold.
+ *
+ * @see composer.json
+ * @see index.php
+ * @see core/install.php
+ * @see core/rebuild.php
+ * @see core/modules/statistics/statistics.php
+ */
+
+return require __DIR__ . '/{$relative_autoload_path}';
+
+EOF;
+  }
+
+}
diff --git a/vendor/drupal/core-composer-scaffold/Git.php b/vendor/drupal/core-composer-scaffold/Git.php
new file mode 100644
index 0000000000000000000000000000000000000000..015e472eb2448393f06fe19c5213d1fc04dfd207
--- /dev/null
+++ b/vendor/drupal/core-composer-scaffold/Git.php
@@ -0,0 +1,72 @@
+<?php
+
+namespace Drupal\Composer\Plugin\Scaffold;
+
+use Composer\IO\IOInterface;
+use Composer\Util\ProcessExecutor;
+
+/**
+ * Provide some Git utility operations
+ *
+ * @internal
+ */
+class Git {
+
+  /**
+   * This class provides only static methods.
+   */
+  private function __construct() {
+  }
+
+  /**
+   * Determines whether the specified scaffold file is already ignored.
+   *
+   * @param string $path
+   *   Path to scaffold file to check.
+   * @param string $dir
+   *   Base directory for git process.
+   *
+   * @return bool
+   *   Whether the specified file is already ignored or not (TRUE if ignored).
+   */
+  public static function checkIgnore(IOInterface $io, $path, $dir = NULL) {
+    $process = new ProcessExecutor($io);
+    $output = '';
+    $exitCode = $process->execute('git check-ignore ' . $process->escape($path), $output, $dir);
+    return $exitCode == 0;
+  }
+
+  /**
+   * Determines whether the specified scaffold file is tracked by git.
+   *
+   * @param string $path
+   *   Path to scaffold file to check.
+   * @param string $dir
+   *   Base directory for git process.
+   *
+   * @return bool
+   *   Whether the specified file is already tracked or not (TRUE if tracked).
+   */
+  public static function checkTracked(IOInterface $io, $path, $dir = NULL) {
+    $process = new ProcessExecutor($io);
+    $output = '';
+    $exitCode = $process->execute('git ls-files --error-unmatch ' . $process->escape($path), $output, $dir);
+    return $exitCode == 0;
+  }
+
+  /**
+   * Checks to see if the project root dir is in a git repository.
+   *
+   * @param string $dir
+   *   Base directory for git process.
+   * @return bool
+   *   True if this is a repository.
+   */
+  public static function isRepository(IOInterface $io, $dir = NULL) {
+    $process = new ProcessExecutor($io);
+    $output = '';
+    $exitCode = $process->execute('git rev-parse --show-toplevel', $output, $dir);
+    return $exitCode == 0;
+  }
+
+}
diff --git a/vendor/drupal/core-composer-scaffold/Handler.php b/vendor/drupal/core-composer-scaffold/Handler.php
new file mode 100644
index 0000000000000000000000000000000000000000..3e51f909a335238ffcf9d4054b511f486e206da5
--- /dev/null
+++ b/vendor/drupal/core-composer-scaffold/Handler.php
@@ -0,0 +1,249 @@
+<?php
+
+namespace Drupal\Composer\Plugin\Scaffold;
+
+use Composer\Composer;
+use Composer\EventDispatcher\EventDispatcher;
+use Composer\Installer\PackageEvent;
+use Composer\IO\IOInterface;
+use Composer\Package\PackageInterface;
+use Composer\Util\Filesystem;
+use Drupal\Composer\Plugin\Scaffold\Operations\OperationData;
+use Drupal\Composer\Plugin\Scaffold\Operations\OperationFactory;
+use Drupal\Composer\Plugin\Scaffold\Operations\ScaffoldFileCollection;
+
+/**
+ * Core class of the plugin.
+ *
+ * Contains the primary logic which determines the files to be fetched and
+ * processed.
+ *
+ * @internal
+ */
+class Handler {
+
+  /**
+   * Composer hook called before scaffolding begins.
+   */
+  const PRE_DRUPAL_SCAFFOLD_CMD = 'pre-drupal-scaffold-cmd';
+
+  /**
+   * Composer hook called after scaffolding completes.
+   */
+  const POST_DRUPAL_SCAFFOLD_CMD = 'post-drupal-scaffold-cmd';
+
+  /**
+   * The Composer service.
+   *
+   * @var \Composer\Composer
+   */
+  protected $composer;
+
+  /**
+   * Composer's I/O service.
+   *
+   * @var \Composer\IO\IOInterface
+   */
+  protected $io;
+
+  /**
+   * The scaffold options in the top-level composer.json's 'extra' section.
+   *
+   * @var \Drupal\Composer\Plugin\Scaffold\ManageOptions
+   */
+  protected $manageOptions;
+
+  /**
+   * The manager that keeps track of which packages are allowed to scaffold.
+   *
+   * @var \Drupal\Composer\Plugin\Scaffold\AllowedPackages
+   */
+  protected $manageAllowedPackages;
+
+  /**
+   * The list of listeners that are notified after a package event.
+   *
+   * @var \Drupal\Composer\Plugin\Scaffold\PostPackageEventListenerInterface[]
+   */
+  protected $postPackageListeners = [];
+
+  /**
+   * Handler constructor.
+   *
+   * @param \Composer\Composer $composer
+   *   The Composer service.
+   * @param \Composer\IO\IOInterface $io
+   *   The Composer I/O service.
+   */
+  public function __construct(Composer $composer, IOInterface $io) {
+    $this->composer = $composer;
+    $this->io = $io;
+    $this->manageOptions = new ManageOptions($composer);
+    $this->manageAllowedPackages = new AllowedPackages($composer, $io, $this->manageOptions);
+  }
+
+  /**
+   * Registers post-package events if the 'require' command was called.
+   */
+  public function requireWasCalled() {
+    // In order to differentiate between post-package events called after
+    // 'composer require' vs. the same events called at other times, we will
+    // only install our handler when a 'require' event is detected.
+    $this->postPackageListeners[] = $this->manageAllowedPackages;
+  }
+
+  /**
+   * Posts package command event.
+   *
+   * We want to detect packages 'require'd that have scaffold files, but are not
+   * yet allowed in the top-level composer.json file.
+   *
+   * @param \Composer\Installer\PackageEvent $event
+   *   Composer package event sent on install/update/remove.
+   */
+  public function onPostPackageEvent(PackageEvent $event) {
+    foreach ($this->postPackageListeners as $listener) {
+      $listener->event($event);
+    }
+  }
+
+  /**
+   * Creates scaffold operation objects for all items in the file mappings.
+   *
+   * @param \Composer\Package\PackageInterface $package
+   *   The package that relative paths will be relative from.
+   * @param array $package_file_mappings
+   *   The package file mappings array keyed by destination path and the values
+   *   are operation metadata arrays.
+   *
+   * @return \Drupal\Composer\Plugin\Scaffold\Operations\OperationInterface[]
+   *   A list of scaffolding operation objects
+   */
+  protected function createScaffoldOperations(PackageInterface $package, array $package_file_mappings) {
+    $scaffold_op_factory = new OperationFactory($this->composer);
+    $scaffold_ops = [];
+    foreach ($package_file_mappings as $dest_rel_path => $data) {
+      $operation_data = new OperationData($dest_rel_path, $data);
+      $scaffold_ops[$dest_rel_path] = $scaffold_op_factory->create($package, $operation_data);
+    }
+    return $scaffold_ops;
+  }
+
+  /**
+   * Copies all scaffold files from source to destination.
+   */
+  public function scaffold() {
+    // Recursively get the list of allowed packages. Only allowed packages
+    // may declare scaffold files. Note that the top-level composer.json file
+    // is implicitly allowed.
+    $allowed_packages = $this->manageAllowedPackages->getAllowedPackages();
+    if (empty($allowed_packages)) {
+      $this->io->write("Nothing scaffolded because no packages are allowed in the top-level composer.json file.");
+      return;
+    }
+
+    // Call any pre-scaffold scripts that may be defined.
+    $dispatcher = new EventDispatcher($this->composer, $this->io);
+    $dispatcher->dispatch(self::PRE_DRUPAL_SCAFFOLD_CMD);
+
+    // Fetch the list of file mappings from each allowed package and normalize
+    // them.
+    $file_mappings = $this->getFileMappingsFromPackages($allowed_packages);
+
+    $location_replacements = $this->manageOptions->getLocationReplacements();
+    $scaffold_options = $this->manageOptions->getOptions();
+
+    // Create a collection of scaffolded files to process. This determines which
+    // take priority and which are combined.
+    $scaffold_files = new ScaffoldFileCollection($file_mappings, $location_replacements);
+
+    // Get the scaffold files whose contents on disk match what we are about to
+    // write. We can remove these from consideration, as rewriting would be a
+    // no-op.
+    $unchanged = $scaffold_files->checkUnchanged();
+    $scaffold_files->filterFiles($unchanged);
+
+    // Process the list of scaffolded files.
+    $scaffold_results = $scaffold_files->processScaffoldFiles($this->io, $scaffold_options);
+
+    // Generate an autoload file in the document root that includes the
+    // autoload.php file in the vendor directory, wherever that is. Drupal
+    // requires this in order to easily locate relocated vendor dirs.
+    $web_root = $this->manageOptions->getOptions()->getLocation('web-root');
+    if (!GenerateAutoloadReferenceFile::autoloadFileCommitted($this->io, $this->rootPackageName(), $web_root)) {
+      $scaffold_results[] = GenerateAutoloadReferenceFile::generateAutoload($this->io, $this->rootPackageName(), $web_root, $this->getVendorPath());
+    }
+
+    // Add the managed scaffold files to .gitignore if applicable.
+    $gitIgnoreManager = new ManageGitIgnore($this->io, getcwd());
+    $gitIgnoreManager->manageIgnored($scaffold_results, $scaffold_options);
+
+    // Call post-scaffold scripts.
+    $dispatcher->dispatch(self::POST_DRUPAL_SCAFFOLD_CMD);
+  }
+
+  /**
+   * Gets the path to the 'vendor' directory.
+   *
+   * @return string
+   *   The file path of the vendor directory.
+   */
+  protected function getVendorPath() {
+    $vendor_dir = $this->composer->getConfig()->get('vendor-dir');
+    $filesystem = new Filesystem();
+    return $filesystem->normalizePath(realpath($vendor_dir));
+  }
+
+  /**
+   * Gets a consolidated list of file mappings from all allowed packages.
+   *
+   * @param \Composer\Package\Package[] $allowed_packages
+   *   A multidimensional array of file mappings, as returned by
+   *   self::getAllowedPackages().
+   *
+   * @return \Drupal\Composer\Plugin\Scaffold\Operations\OperationInterface[][]
+   *   An array of destination paths => scaffold operation objects.
+   */
+  protected function getFileMappingsFromPackages(array $allowed_packages) {
+    $file_mappings = [];
+    foreach ($allowed_packages as $package_name => $package) {
+      $file_mappings[$package_name] = $this->getPackageFileMappings($package);
+    }
+    return $file_mappings;
+  }
+
+  /**
+   * Gets the array of file mappings provided by a given package.
+   *
+   * @param \Composer\Package\PackageInterface $package
+   *   The Composer package from which to get the file mappings.
+   *
+   * @return \Drupal\Composer\Plugin\Scaffold\Operations\OperationInterface[]
+   *   An array of destination paths => scaffold operation objects.
+   */
+  protected function getPackageFileMappings(PackageInterface $package) {
+    $options = $this->manageOptions->packageOptions($package);
+    if ($options->hasFileMapping()) {
+      return $this->createScaffoldOperations($package, $options->fileMapping());
+    }
+    // Warn the user if they allow a package that does not have any scaffold
+    // files. We will ignore drupal/core, though, as it is implicitly allowed,
+    // but might not have scaffold files (version 8.7.x and earlier).
+    if (!$options->hasAllowedPackages() && ($package->getName() != 'drupal/core')) {
+      $this->io->writeError("The allowed package {$package->getName()} does not provide a file mapping for Composer Scaffold.");
+    }
+    return [];
+  }
+
+  /**
+   * Gets the root package name.
+   *
+   * @return string
+   *   The package name of the root project
+   */
+  protected function rootPackageName() {
+    $root_package = $this->composer->getPackage();
+    return $root_package->getName();
+  }
+
+}
diff --git a/vendor/drupal/core-composer-scaffold/Interpolator.php b/vendor/drupal/core-composer-scaffold/Interpolator.php
new file mode 100644
index 0000000000000000000000000000000000000000..c9f6a4fedb571ec1f084dfe2ca9a05132a2ae6a8
--- /dev/null
+++ b/vendor/drupal/core-composer-scaffold/Interpolator.php
@@ -0,0 +1,157 @@
+<?php
+
+namespace Drupal\Composer\Plugin\Scaffold;
+
+/**
+ * Injects config values from an associative array into a string.
+ *
+ * @internal
+ */
+class Interpolator {
+
+  /**
+   * The character sequence that identifies the start of a token.
+   *
+   * @var string
+   */
+  protected $startToken;
+
+  /**
+   * The character sequence that identifies the end of a token.
+   *
+   * @var string
+   */
+  protected $endToken;
+
+  /**
+   * The associative array of replacements.
+   *
+   * @var array
+   */
+  protected $data = [];
+
+  /**
+   * Interpolator constructor.
+   *
+   * @param string $start_token
+   *   The start marker for a token, e.g. '['.
+   * @param string $end_token
+   *   The end marker for a token, e.g. ']'.
+   */
+  public function __construct($start_token = '\\[', $end_token = '\\]') {
+    $this->startToken = $start_token;
+    $this->endToken = $end_token;
+  }
+
+  /**
+   * Sets the data set to use when interpolating.
+   *
+   * @param array $data
+   *   The key:value pairs to use when interpolating.
+   *
+   * @return $this
+   */
+  public function setData(array $data) {
+    $this->data = $data;
+    return $this;
+  }
+
+  /**
+   * Adds to the data set to use when interpolating.
+   *
+   * @param array $data
+   *   The key:value pairs to use when interpolating.
+   *
+   * @return $this
+   */
+  public function addData(array $data) {
+    $this->data = array_merge($this->data, $data);
+    return $this;
+  }
+
+  /**
+   * Replaces tokens in a string with values from an associative array.
+   *
+   * Tokens are surrounded by delimiters, e.g. square brackets "[key]". The
+   * characters that surround the key may be defined when the Interpolator is
+   * constructed.
+   *
+   * Example:
+   * If the message is 'Hello, [user.name]', then the value of the user.name
+   * item is fetched from the array, and the token [user.name] is replaced with
+   * the result.
+   *
+   * @param string $message
+   *   Message containing tokens to be replaced.
+   * @param array $extra
+   *   Data to use for interpolation in addition to whatever was provided to
+   *   self::setData().
+   * @param string|bool $default
+   *   (optional) The value to substitute for tokens that are not found in the
+   *   data. If FALSE, then missing tokens are not replaced. Defaults to an
+   *   empty string.
+   *
+   * @return string
+   *   The message after replacements have been made.
+   */
+  public function interpolate($message, array $extra = [], $default = '') {
+    $data = $extra + $this->data;
+    $replacements = $this->replacements($message, $data, $default);
+    return strtr($message, $replacements);
+  }
+
+  /**
+   * Finds the tokens that exist in a message and builds a replacement array.
+   *
+   * All of the replacements in the data array are looked up given the token
+   * keys from the provided message. Keys that do not exist in the configuration
+   * are replaced with the default value.
+   *
+   * @param string $message
+   *   String with tokens.
+   * @param array $data
+   *   Data to use for interpolation.
+   * @param string $default
+   *   (optional) The value to substitute for tokens that are not found in the
+   *   data. If FALSE, then missing tokens are not replaced. Defaults to an
+   *   empty string.
+   *
+   * @return string[]
+   *   An array of replacements to make. Keyed by tokens and the replacements
+   *   are the values.
+   */
+  protected function replacements($message, array $data, $default = '') {
+    $tokens = $this->findTokens($message);
+    $replacements = [];
+    foreach ($tokens as $sourceText => $key) {
+      $replacement_text = array_key_exists($key, $data) ? $data[$key] : $default;
+      if ($replacement_text !== FALSE) {
+        $replacements[$sourceText] = $replacement_text;
+      }
+    }
+    return $replacements;
+  }
+
+  /**
+   * Finds all of the tokens in the provided message.
+   *
+   * @param string $message
+   *   String with tokens.
+   *
+   * @return string[]
+   *   map of token to key, e.g. {{key}} => key
+   */
+  protected function findTokens($message) {
+    $reg_ex = '#' . $this->startToken . '([a-zA-Z0-9._-]+)' . $this->endToken . '#';
+    if (!preg_match_all($reg_ex, $message, $matches, PREG_SET_ORDER)) {
+      return [];
+    }
+    $tokens = [];
+    foreach ($matches as $matchSet) {
+      list($sourceText, $key) = $matchSet;
+      $tokens[$sourceText] = $key;
+    }
+    return $tokens;
+  }
+
+}
diff --git a/vendor/drupal/core-composer-scaffold/LICENSE.txt b/vendor/drupal/core-composer-scaffold/LICENSE.txt
new file mode 100644
index 0000000000000000000000000000000000000000..94fb84639c4b6ff359e47a124d8fb4a3aba7a386
--- /dev/null
+++ b/vendor/drupal/core-composer-scaffold/LICENSE.txt
@@ -0,0 +1,339 @@
+        GNU GENERAL PUBLIC LICENSE
+           Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+          Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+        GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+          NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+         END OF TERMS AND CONDITIONS
+
+      How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.
diff --git a/vendor/drupal/core-composer-scaffold/ManageGitIgnore.php b/vendor/drupal/core-composer-scaffold/ManageGitIgnore.php
new file mode 100644
index 0000000000000000000000000000000000000000..524cb2ff60537e200c833fe7211ff4635ee645e9
--- /dev/null
+++ b/vendor/drupal/core-composer-scaffold/ManageGitIgnore.php
@@ -0,0 +1,125 @@
+<?php
+
+namespace Drupal\Composer\Plugin\Scaffold;
+
+use Composer\IO\IOInterface;
+
+/**
+ * Manage the .gitignore file.
+ *
+ * @internal
+ */
+class ManageGitIgnore {
+
+  /**
+   * Composer's I/O service.
+   *
+   * @var \Composer\IO\IOInterface
+   */
+  protected $io;
+
+  /**
+   * The directory where the project is located.
+   *
+   * @var string
+   */
+  protected $dir;
+
+  /**
+   * ManageGitIgnore constructor.
+   *
+   * @param string $dir
+   *   The directory where the project is located.
+   */
+  public function __construct(IOInterface $io, $dir) {
+    $this->io = $io;
+    $this->dir = $dir;
+  }
+
+  /**
+   * Manages gitignore files.
+   *
+   * @param \Drupal\Composer\Plugin\Scaffold\Operations\ScaffoldResult[] $files
+   *   A list of scaffold results, each of which holds a path and whether
+   *   or not that file is managed.
+   * @param \Drupal\Composer\Plugin\Scaffold\ScaffoldOptions $options
+   *   Configuration options from the composer.json extras section.
+   */
+  public function manageIgnored(array $files, ScaffoldOptions $options) {
+    if (!$this->managementOfGitIgnoreEnabled($options)) {
+      return;
+    }
+
+    // Accumulate entries to add to .gitignore, sorted into buckets based on the
+    // location of the .gitignore file the entry should be added to.
+    $add_to_git_ignore = [];
+    foreach ($files as $scaffoldResult) {
+      $path = $scaffoldResult->destination()->fullPath();
+      $is_ignored = Git::checkIgnore($this->io, $path, $this->dir);
+      if (!$is_ignored) {
+        $is_tracked = Git::checkTracked($this->io, $path, $this->dir);
+        if (!$is_tracked && $scaffoldResult->isManaged()) {
+          $dir = realpath(dirname($path));
+          $name = basename($path);
+          $add_to_git_ignore[$dir][] = '/' . $name;
+        }
+      }
+    }
+    // Write out the .gitignore files one at a time.
+    foreach ($add_to_git_ignore as $dir => $entries) {
+      $this->addToGitIgnore($dir, $entries);
+    }
+  }
+
+  /**
+   * Determines whether we should manage gitignore files.
+   *
+   * @param \Drupal\Composer\Plugin\Scaffold\ScaffoldOptions $options
+   *   Configuration options from the composer.json extras section.
+   *
+   * @return bool
+   *   Whether or not gitignore files should be managed.
+   */
+  protected function managementOfGitIgnoreEnabled(ScaffoldOptions $options) {
+    // If the composer.json stipulates whether gitignore is managed or not, then
+    // follow its recommendation.
+    if ($options->hasGitIgnore()) {
+      return $options->gitIgnore();
+    }
+
+    // Do not manage .gitignore if there is no repository here.
+    if (!Git::isRepository($this->io, $this->dir)) {
+      return FALSE;
+    }
+
+    // If the composer.json did not specify whether or not .gitignore files
+    // should be managed, then manage them if the vendor directory is ignored.
+    return Git::checkIgnore($this->io, 'vendor', $this->dir);
+  }
+
+  /**
+   * Adds a set of entries to the specified .gitignore file.
+   *
+   * @param string $dir
+   *   Path to directory where gitignore should be written.
+   * @param string[] $entries
+   *   Entries to write to .gitignore file.
+   */
+  protected function addToGitIgnore($dir, array $entries) {
+    sort($entries);
+    $git_ignore_path = $dir . '/.gitignore';
+    $contents = '';
+
+    // Appending to existing .gitignore files.
+    if (file_exists($git_ignore_path)) {
+      $contents = file_get_contents($git_ignore_path);
+      if (!empty($contents) && substr($contents, -1) != "\n") {
+        $contents .= "\n";
+      }
+    }
+
+    $contents .= implode("\n", $entries);
+    file_put_contents($git_ignore_path, $contents);
+  }
+
+}
diff --git a/vendor/drupal/core-composer-scaffold/ManageOptions.php b/vendor/drupal/core-composer-scaffold/ManageOptions.php
new file mode 100644
index 0000000000000000000000000000000000000000..56cb1a0a1a487743e8a0d8d82c88805aa3cfaa71
--- /dev/null
+++ b/vendor/drupal/core-composer-scaffold/ManageOptions.php
@@ -0,0 +1,92 @@
+<?php
+
+namespace Drupal\Composer\Plugin\Scaffold;
+
+use Composer\Composer;
+use Composer\Package\PackageInterface;
+use Composer\Util\Filesystem;
+
+/**
+ * Per-project options from the 'extras' section of the composer.json file.
+ *
+ * Projects that describe scaffold files do so via their scaffold options.
+ * This data is pulled from the 'drupal-scaffold' portion of the extras
+ * section of the project data.
+ *
+ * @internal
+ */
+class ManageOptions {
+
+  /**
+   * The Composer service.
+   *
+   * @var \Composer\Composer
+   */
+  protected $composer;
+
+  /**
+   * ManageOptions constructor.
+   *
+   * @param \Composer\Composer $composer
+   *   The Composer service.
+   */
+  public function __construct(Composer $composer) {
+    $this->composer = $composer;
+  }
+
+  /**
+   * Gets the root-level scaffold options for this project.
+   *
+   * @return \Drupal\Composer\Plugin\Scaffold\ScaffoldOptions
+   *   The scaffold options object.
+   */
+  public function getOptions() {
+    return $this->packageOptions($this->composer->getPackage());
+  }
+
+  /**
+   * Gets the scaffold options for the stipulated project.
+   *
+   * @param \Composer\Package\PackageInterface $package
+   *   The package to fetch the scaffold options from.
+   *
+   * @return \Drupal\Composer\Plugin\Scaffold\ScaffoldOptions
+   *   The scaffold options object.
+   */
+  public function packageOptions(PackageInterface $package) {
+    return ScaffoldOptions::create($package->getExtra());
+  }
+
+  /**
+   * Creates an interpolator for the 'locations' element.
+   *
+   * The interpolator returned will replace a path string with the tokens
+   * defined in the 'locations' element.
+   *
+   * Note that only the root package may define locations.
+   *
+   * @return \Drupal\Composer\Plugin\Scaffold\Interpolator
+   *   Interpolator that will do replacements in a string using tokens in
+   *   'locations' element.
+   */
+  public function getLocationReplacements() {
+    return (new Interpolator())->setData($this->ensureLocations());
+  }
+
+  /**
+   * Ensures that all of the locations defined in the scaffold files exist.
+   *
+   * Create them on the filesystem if they do not.
+   */
+  protected function ensureLocations() {
+    $fs = new Filesystem();
+    $locations = $this->getOptions()->locations() + ['web_root' => './'];
+    $locations = array_map(function ($location) use ($fs) {
+      $fs->ensureDirectoryExists($location);
+      $location = realpath($location);
+      return $location;
+    }, $locations);
+    return $locations;
+  }
+
+}
diff --git a/vendor/drupal/core-composer-scaffold/Operations/AbstractOperation.php b/vendor/drupal/core-composer-scaffold/Operations/AbstractOperation.php
new file mode 100644
index 0000000000000000000000000000000000000000..a2a994532816e9cd38393da28fba4af2b0c8c08b
--- /dev/null
+++ b/vendor/drupal/core-composer-scaffold/Operations/AbstractOperation.php
@@ -0,0 +1,53 @@
+<?php
+
+namespace Drupal\Composer\Plugin\Scaffold\Operations;
+
+use Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath;
+
+/**
+ * Provides default behaviors for operations.
+ *
+ * @internal
+ */
+abstract class AbstractOperation implements OperationInterface {
+
+  /**
+   * Cached contents of scaffold file to be written to disk.
+   *
+   * @var string
+   */
+  protected $contents;
+
+  /**
+   * {@inheritdoc}
+   */
+  final public function contents() {
+    if (!isset($this->contents)) {
+      $this->contents = $this->generateContents();
+    }
+    return $this->contents;
+  }
+
+  /**
+   * Load the scaffold contents or otherwise generate what is needed.
+   *
+   * @return string
+   *   The contents of the scaffold file.
+   */
+  abstract protected function generateContents();
+
+  /**
+   * {@inheritdoc}
+   */
+  public function scaffoldOverExistingTarget(OperationInterface $existing_target) {
+    return $this;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function scaffoldAtNewLocation(ScaffoldFilePath $destination) {
+    return $this;
+  }
+
+}
diff --git a/vendor/drupal/core-composer-scaffold/Operations/AppendOp.php b/vendor/drupal/core-composer-scaffold/Operations/AppendOp.php
new file mode 100644
index 0000000000000000000000000000000000000000..0e5b51023a69745c3b71b7f9ff52ce087bf23154
--- /dev/null
+++ b/vendor/drupal/core-composer-scaffold/Operations/AppendOp.php
@@ -0,0 +1,206 @@
+<?php
+
+namespace Drupal\Composer\Plugin\Scaffold\Operations;
+
+use Composer\IO\IOInterface;
+use Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath;
+use Drupal\Composer\Plugin\Scaffold\ScaffoldOptions;
+
+/**
+ * Scaffold operation to add to the beginning and/or end of a scaffold file.
+ *
+ * @internal
+ */
+class AppendOp extends AbstractOperation {
+
+  /**
+   * Identifies Append operations.
+   */
+  const ID = 'append';
+
+  /**
+   * Path to the source file to prepend, if any.
+   *
+   * @var \Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath
+   */
+  protected $prepend;
+
+  /**
+   * Path to the source file to append, if any.
+   *
+   * @var \Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath
+   */
+  protected $append;
+
+  /**
+   * Path to the default data to use when appending to an empty file.
+   *
+   * @var \Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath
+   */
+  protected $default;
+
+  /**
+   * An indicator of whether the file we are appending to is managed or not.
+   */
+  protected $managed;
+
+  /**
+   * An indicator of whether we are allowed to append to a non-scaffolded file.
+   */
+  protected $forceAppend;
+
+  /**
+   * The contents from the file that we are prepending / appending to.
+   *
+   * @var string
+   */
+  protected $originalContents;
+
+  /**
+   * Constructs an AppendOp.
+   *
+   * @param \Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath $prepend_path
+   *   The relative path to the prepend file.
+   * @param \Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath $append_path
+   *   The relative path to the append file.
+   * @param bool $force_append
+   *   TRUE if is okay to append to a file that was not scaffolded.
+   * @param \Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath $default_path
+   *   The relative path to the default data.
+   */
+  public function __construct(ScaffoldFilePath $prepend_path = NULL, ScaffoldFilePath $append_path = NULL, $force_append = FALSE, ScaffoldFilePath $default_path = NULL) {
+    $this->forceAppend = $force_append;
+    $this->prepend = $prepend_path;
+    $this->append = $append_path;
+    $this->default = $default_path;
+    $this->managed = TRUE;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function generateContents() {
+    // Fetch the prepend contents, if provided.
+    $prepend_contents = '';
+    if (!empty($this->prepend)) {
+      $prepend_contents = file_get_contents($this->prepend->fullPath()) . "\n";
+    }
+    // Fetch the append contents, if provided.
+    $append_contents = '';
+    if (!empty($this->append)) {
+      $append_contents = "\n" . file_get_contents($this->append->fullPath());
+    }
+
+    // Get the original contents, or the default data if the original is empty.
+    $original_contents = $this->originalContents;
+    if (empty($original_contents) && !empty($this->default)) {
+      $original_contents = file_get_contents($this->default->fullPath());
+    }
+
+    // Attach it all together.
+    return $prepend_contents . $original_contents . $append_contents;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function process(ScaffoldFilePath $destination, IOInterface $io, ScaffoldOptions $options) {
+    $destination_path = $destination->fullPath();
+    $interpolator = $destination->getInterpolator();
+
+    // Be extra-noisy of creating a new file or appending to a non-scaffold
+    // file. Note that if the file already has the append contents, then the
+    // OperationFactory will make a SkipOp instead, and we will not get here.
+    if (!$this->managed) {
+      $message = '  - <info>NOTICE</info> Modifying existing file at <info>[dest-rel-path]</info>.';
+      if (!file_exists($destination_path)) {
+        $message = '  - <info>NOTICE</info> Creating a new file at <info>[dest-rel-path]</info>.';
+      }
+      $message .= ' Examine the contents and ensure that it came out correctly.';
+      $io->write($interpolator->interpolate($message));
+    }
+
+    // Notify that we are prepending, if there is prepend data.
+    if (!empty($this->prepend)) {
+      $this->prepend->addInterpolationData($interpolator, 'prepend');
+      $io->write($interpolator->interpolate("  - Prepend to <info>[dest-rel-path]</info> from <info>[prepend-rel-path]</info>"));
+    }
+    // Notify that we are appending, if there is append data.
+    $append_contents = '';
+    if (!empty($this->append)) {
+      $this->append->addInterpolationData($interpolator, 'append');
+      $io->write($interpolator->interpolate("  - Append to <info>[dest-rel-path]</info> from <info>[append-rel-path]</info>"));
+    }
+
+    // Write the resulting data
+    file_put_contents($destination_path, $this->contents());
+
+    // Return a ScaffoldResult with knowledge of whether this file is managed.
+    return new ScaffoldResult($destination, $this->managed);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function scaffoldOverExistingTarget(OperationInterface $existing_target) {
+    $this->originalContents = $existing_target->contents();
+    return $this;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function scaffoldAtNewLocation(ScaffoldFilePath $destination) {
+    // If there is no existing scaffold file at the target location, then any
+    // append we do will be to an unmanaged file.
+    $this->managed = FALSE;
+
+    // Default: do not allow an append over a file that was not scaffolded.
+    if (!$this->forceAppend) {
+      $message = "  - Skip <info>[dest-rel-path]</info>: cannot append to a path that was not scaffolded unless 'force-append' property is set.";
+      return new SkipOp($message);
+    }
+
+    // If the target file does not exist, then we will allow the append to
+    // happen if we have default data to provide for it.
+    if (!file_exists($destination->fullPath())) {
+      if (!empty($this->default)) {
+        return $this;
+      }
+      $message = "  - Skip <info>[dest-rel-path]</info>: no file exists at the target path, and no default data provided.";
+      return new SkipOp($message);
+    }
+
+    // If the target file DOES exist, and it already contains the append/prepend
+    // data, then we will skip the operation.
+    $existingData = file_get_contents($destination->fullPath());
+    if ($this->existingFileHasData($existingData, $this->append) || $this->existingFileHasData($existingData, $this->prepend)) {
+      $message = "  - Skip <info>[dest-rel-path]</info>: the file already has the append/prepend data.";
+      return new SkipOp($message);
+    }
+
+    // Cache the original data to use during append.
+    $this->originalContents = $existingData;
+
+    return $this;
+  }
+
+  /**
+   * Check to see if the append/prepend data has already been applied.
+   * @param string $contents
+   *   The contents of the target file.
+   * @param \Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath $data_path
+   *   The path to the data to append or prepend
+   * @return bool
+   *   'TRUE' if the append/prepend data already exists in contents.
+   */
+  protected function existingFileHasData($contents, $data_path) {
+    if (empty($data_path)) {
+      return FALSE;
+    }
+    $data = file_get_contents($data_path->fullPath());
+
+    return strpos($contents, $data) !== FALSE;
+  }
+
+}
diff --git a/vendor/drupal/core-composer-scaffold/Operations/OperationData.php b/vendor/drupal/core-composer-scaffold/Operations/OperationData.php
new file mode 100644
index 0000000000000000000000000000000000000000..9aa73611c06874f1928e6b3e8ad41b5979b8eb20
--- /dev/null
+++ b/vendor/drupal/core-composer-scaffold/Operations/OperationData.php
@@ -0,0 +1,227 @@
+<?php
+
+namespace Drupal\Composer\Plugin\Scaffold\Operations;
+
+/**
+ * Holds parameter data for operation objects during operation creation only.
+ *
+ * @internal
+ */
+class OperationData {
+
+  const MODE = 'mode';
+  const PATH = 'path';
+  const OVERWRITE = 'overwrite';
+  const PREPEND = 'prepend';
+  const APPEND = 'append';
+  const DEFAULT = 'default';
+  const FORCE_APPEND = 'force-append';
+
+  /**
+   * The parameter data.
+   *
+   * @var array
+   */
+  protected $data;
+
+  /**
+   * The destination path
+   *
+   * @var string
+   */
+  protected $destination;
+
+  /**
+   * OperationData constructor.
+   *
+   * @param mixed $data
+   *   The raw data array to wrap.
+   */
+  public function __construct($destination, $data) {
+    $this->destination = $destination;
+    $this->data = $this->normalizeScaffoldMetadata($destination, $data);
+  }
+
+  /**
+   * Gets the destination path that this operation data is associated with.
+   *
+   * @return string
+   *   The destination path for the scaffold result.
+   */
+  public function destination() {
+    return $this->destination;
+  }
+
+  /**
+   * Gets operation mode
+   *
+   * @return string
+   *   Operation mode.
+   */
+  public function mode() {
+    return $this->data[self::MODE];
+  }
+
+  /**
+   * Checks if path exists
+   *
+   * @return bool
+   *   Returns true if path exists
+   */
+  public function hasPath() {
+    return isset($this->data[self::PATH]);
+  }
+
+  /**
+   * Gets path
+   *
+   * @return string
+   *   The path.
+   */
+  public function path() {
+    return $this->data[self::PATH];
+  }
+
+  /**
+   * Determines overwrite.
+   *
+   * @return bool
+   *   Returns true if overwrite mode was selected.
+   */
+  public function overwrite() {
+    return !empty($this->data[self::OVERWRITE]);
+  }
+
+  /**
+   * Determines whether 'force-append' has been set.
+   *
+   * @return bool
+   *   Returns true if 'force-append' mode was selected.
+   */
+  public function forceAppend() {
+    if ($this->hasDefault()) {
+      return TRUE;
+    }
+    return !empty($this->data[self::FORCE_APPEND]);
+  }
+
+  /**
+   * Checks if prepend path exists.
+   *
+   * @return bool
+   *   Returns true if prepend exists.
+   */
+  public function hasPrepend() {
+    return isset($this->data[self::PREPEND]);
+  }
+
+  /**
+   * Gets prepend path.
+   *
+   * @return string
+   *   Path to prepend data
+   */
+  public function prepend() {
+    return $this->data[self::PREPEND];
+  }
+
+  /**
+   * Checks if append path exists.
+   *
+   * @return bool
+   *   Returns true if prepend exists.
+   */
+  public function hasAppend() {
+    return isset($this->data[self::APPEND]);
+  }
+
+  /**
+   * Gets append path.
+   *
+   * @return string
+   *   Path to append data
+   */
+  public function append() {
+    return $this->data[self::APPEND];
+  }
+
+  /**
+   * Checks if default path exists.
+   *
+   * @return bool
+   *   Returns true if there is default data available.
+   */
+  public function hasDefault() {
+    return isset($this->data[self::DEFAULT]);
+  }
+
+  /**
+   * Gets default path.
+   *
+   * @return string
+   *   Path to default data
+   */
+  public function default() {
+    return $this->data[self::DEFAULT];
+  }
+
+  /**
+   * Normalizes metadata by converting literal values into arrays.
+   *
+   * Conversions performed include:
+   *   - Boolean 'false' means "skip".
+   *   - A string means "replace", with the string value becoming the path.
+   *
+   * @param string $destination
+   *   The destination path for the scaffold file.
+   * @param mixed $value
+   *   The metadata for this operation object, which varies by operation type.
+   *
+   * @return array
+   *   Normalized scaffold metadata with default values.
+   */
+  protected function normalizeScaffoldMetadata($destination, $value) {
+    $defaultScaffoldMetadata = [
+      self::MODE => ReplaceOp::ID,
+      self::PREPEND => NULL,
+      self::APPEND => NULL,
+      self::DEFAULT => NULL,
+      self::OVERWRITE => TRUE,
+    ];
+
+    return $this->convertScaffoldMetadata($destination, $value) + $defaultScaffoldMetadata;
+  }
+
+  /**
+   * Performs the conversion-to-array step in normalizeScaffoldMetadata.
+   *
+   * @param string $destination
+   *   The destination path for the scaffold file.
+   * @param mixed $value
+   *   The metadata for this operation object, which varies by operation type.
+   *
+   * @return array
+   *   Normalized scaffold metadata.
+   */
+  protected function convertScaffoldMetadata($destination, $value) {
+    if (is_bool($value)) {
+      if (!$value) {
+        return [self::MODE => SkipOp::ID];
+      }
+      throw new \RuntimeException("File mapping {$destination} cannot be given the value 'true'.");
+    }
+    if (empty($value)) {
+      throw new \RuntimeException("File mapping {$destination} cannot be empty.");
+    }
+    if (is_string($value)) {
+      $value = [self::PATH => $value];
+    }
+    // If there is no 'mode', but there is an 'append' or a 'prepend' path,
+    // then the mode is 'append' (append + prepend).
+    if (!isset($value[self::MODE]) && (isset($value[self::APPEND]) || isset($value[self::PREPEND]))) {
+      $value[self::MODE] = AppendOp::ID;
+    }
+    return $value;
+  }
+
+}
diff --git a/vendor/drupal/core-composer-scaffold/Operations/OperationFactory.php b/vendor/drupal/core-composer-scaffold/Operations/OperationFactory.php
new file mode 100644
index 0000000000000000000000000000000000000000..b256e0e15fbaafd5883807181af28827e0b9b805
--- /dev/null
+++ b/vendor/drupal/core-composer-scaffold/Operations/OperationFactory.php
@@ -0,0 +1,161 @@
+<?php
+
+namespace Drupal\Composer\Plugin\Scaffold\Operations;
+
+use Composer\Composer;
+use Composer\Package\PackageInterface;
+use Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath;
+
+/**
+ * Create Scaffold operation objects based on provided metadata.
+ *
+ * @internal
+ */
+class OperationFactory {
+
+  /**
+   * The Composer service.
+   *
+   * @var \Composer\Composer
+   */
+  protected $composer;
+
+  /**
+   * OperationFactory constructor.
+   *
+   * @param \Composer\Composer $composer
+   *   Reference to the 'Composer' object, since the Scaffold Operation Factory
+   *   is also responsible for evaluating relative package paths as it creates
+   *   scaffold operations.
+   */
+  public function __construct(Composer $composer) {
+    $this->composer = $composer;
+  }
+
+  /**
+   * Creates a scaffolding operation object as determined by the metadata.
+   *
+   * @param \Composer\Package\PackageInterface $package
+   *   The package that relative paths will be relative from.
+   * @param OperationData $operation_data
+   *   The parameter data for this operation object; varies by operation type.
+   *
+   * @return \Drupal\Composer\Plugin\Scaffold\Operations\OperationInterface
+   *   The scaffolding operation object (skip, replace, etc.)
+   *
+   * @throws \RuntimeException
+   *   Exception thrown when parameter data does not identify a known scaffol
+   *   operation.
+   */
+  public function create(PackageInterface $package, OperationData $operation_data) {
+    switch ($operation_data->mode()) {
+      case SkipOp::ID:
+        return new SkipOp();
+
+      case ReplaceOp::ID:
+        return $this->createReplaceOp($package, $operation_data);
+
+      case AppendOp::ID:
+        return $this->createAppendOp($package, $operation_data);
+    }
+    throw new \RuntimeException("Unknown scaffold operation mode <comment>{$operation_data->mode()}</comment>.");
+  }
+
+  /**
+   * Creates a 'replace' scaffold op.
+   *
+   * Replace ops may copy or symlink, depending on settings.
+   *
+   * @param \Composer\Package\PackageInterface $package
+   *   The package that relative paths will be relative from.
+   * @param OperationData $operation_data
+   *   The parameter data for this operation object, i.e. the relative 'path'.
+   *
+   * @return \Drupal\Composer\Plugin\Scaffold\Operations\OperationInterface
+   *   A scaffold replace operation object.
+   */
+  protected function createReplaceOp(PackageInterface $package, OperationData $operation_data) {
+    if (!$operation_data->hasPath()) {
+      throw new \RuntimeException("'path' component required for 'replace' operations.");
+    }
+    $package_name = $package->getName();
+    $package_path = $this->getPackagePath($package);
+    $source = ScaffoldFilePath::sourcePath($package_name, $package_path, $operation_data->destination(), $operation_data->path());
+    $op = new ReplaceOp($source, $operation_data->overwrite());
+    return $op;
+  }
+
+  /**
+   * Creates an 'append' (or 'prepend') scaffold op.
+   *
+   * @param \Composer\Package\PackageInterface $package
+   *   The package that relative paths will be relative from.
+   * @param OperationData $operation_data
+   *   The parameter data for this operation object, i.e. the relative 'path'.
+   *
+   * @return \Drupal\Composer\Plugin\Scaffold\Operations\OperationInterface
+   *   A scaffold replace operation object.
+   */
+  protected function createAppendOp(PackageInterface $package, OperationData $operation_data) {
+    $package_name = $package->getName();
+    $package_path = $this->getPackagePath($package);
+    $prepend_source_file = NULL;
+    $append_source_file = NULL;
+    $default_data_file = NULL;
+    if ($operation_data->hasPrepend()) {
+      $prepend_source_file = ScaffoldFilePath::sourcePath($package_name, $package_path, $operation_data->destination(), $operation_data->prepend());
+    }
+    if ($operation_data->hasAppend()) {
+      $append_source_file = ScaffoldFilePath::sourcePath($package_name, $package_path, $operation_data->destination(), $operation_data->append());
+    }
+    if ($operation_data->hasDefault()) {
+      $default_data_file = ScaffoldFilePath::sourcePath($package_name, $package_path, $operation_data->destination(), $operation_data->default());
+    }
+    if (!$this->hasContent($prepend_source_file) && !$this->hasContent($append_source_file)) {
+      $message = '  - Keep <info>[dest-rel-path]</info> unchanged: no content to prepend / append was provided.';
+      return new SkipOp($message);
+    }
+
+    return new AppendOp($prepend_source_file, $append_source_file, $operation_data->forceAppend(), $default_data_file);
+  }
+
+  /**
+   * Checks to see if the specified scaffold file exists and has content.
+   *
+   * @param Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath $file
+   *   Scaffold file to check.
+   * @return bool
+   *   True if the file exists and has content.
+   */
+  protected function hasContent(ScaffoldFilePath $file = NULL) {
+    if (!$file) {
+      return FALSE;
+    }
+    $path = $file->fullPath();
+    return is_file($path) && (filesize($path) > 0);
+  }
+
+  /**
+   * Gets the file path of a package.
+   *
+   * Note that if we call getInstallPath on the root package, we get the
+   * wrong answer (the installation manager thinks our package is in
+   * vendor). We therefore add special checking for this case.
+   *
+   * @param \Composer\Package\PackageInterface $package
+   *   The package.
+   *
+   * @return string
+   *   The file path.
+   */
+  protected function getPackagePath(PackageInterface $package) {
+    if ($package->getName() == $this->composer->getPackage()->getName()) {
+      // This will respect the --working-dir option if Composer is invoked with
+      // it. There is no API or method to determine the filesystem path of
+      // a package's composer.json file.
+      return getcwd();
+    }
+    return $this->composer->getInstallationManager()->getInstallPath($package);
+  }
+
+}
diff --git a/vendor/drupal/core-composer-scaffold/Operations/OperationInterface.php b/vendor/drupal/core-composer-scaffold/Operations/OperationInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..9dc20e0fc922332975af8a6665784b2ab31d3972
--- /dev/null
+++ b/vendor/drupal/core-composer-scaffold/Operations/OperationInterface.php
@@ -0,0 +1,69 @@
+<?php
+
+namespace Drupal\Composer\Plugin\Scaffold\Operations;
+
+use Composer\IO\IOInterface;
+use Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath;
+use Drupal\Composer\Plugin\Scaffold\ScaffoldOptions;
+
+/**
+ * Interface for scaffold operation objects.
+ *
+ * @internal
+ */
+interface OperationInterface {
+
+  /**
+   * Returns the exact data that will be written to the scaffold files.
+   *
+   * @return string
+   *   Data to be written to the scaffold location.
+   */
+  public function contents();
+
+  /**
+   * Process this scaffold operation.
+   *
+   * @param \Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath $destination
+   *   Scaffold file's destination path.
+   * @param \Composer\IO\IOInterface $io
+   *   IOInterface to write to.
+   * @param \Drupal\Composer\Plugin\Scaffold\ScaffoldOptions $options
+   *   Various options that may alter the behavior of the operation.
+   *
+   * @return \Drupal\Composer\Plugin\Scaffold\Operations\ScaffoldResult
+   *   Result of the scaffolding operation.
+   */
+  public function process(ScaffoldFilePath $destination, IOInterface $io, ScaffoldOptions $options);
+
+  /**
+   * Determines what to do if operation is used at same path as a previous op.
+   *
+   * Default behavior is to scaffold this operation at the specified
+   * destination, ignoring whatever was there before.
+   *
+   * @param OperationInterface $existing_target
+   *   Existing file at the destination path that we should combine with.
+   *
+   * @return OperationInterface
+   *   The op to use at this destination.
+   */
+  public function scaffoldOverExistingTarget(OperationInterface $existing_target);
+
+  /**
+   * Determines what to do if operation is used without a previous operation.
+   *
+   * Default behavior is to scaffold this operation at the specified
+   * destination. Most operations overwrite rather than modify existing files,
+   * and therefore do not need to do anything special when there is no existing
+   * file.
+   *
+   * @param \Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath $destination
+   *   Scaffold file's destination path.
+   *
+   * @return OperationInterface
+   *   The op to use at this destination.
+   */
+  public function scaffoldAtNewLocation(ScaffoldFilePath $destination);
+
+}
diff --git a/vendor/drupal/core-composer-scaffold/Operations/ReplaceOp.php b/vendor/drupal/core-composer-scaffold/Operations/ReplaceOp.php
new file mode 100644
index 0000000000000000000000000000000000000000..66f8ea35b34c091975170602175920fa1185bdef
--- /dev/null
+++ b/vendor/drupal/core-composer-scaffold/Operations/ReplaceOp.php
@@ -0,0 +1,127 @@
+<?php
+
+namespace Drupal\Composer\Plugin\Scaffold\Operations;
+
+use Composer\IO\IOInterface;
+use Composer\Util\Filesystem;
+use Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath;
+use Drupal\Composer\Plugin\Scaffold\ScaffoldOptions;
+
+/**
+ * Scaffold operation to copy or symlink from source to destination.
+ *
+ * @internal
+ */
+class ReplaceOp extends AbstractOperation {
+
+  /**
+   * Identifies Replace operations.
+   */
+  const ID = 'replace';
+
+  /**
+   * The relative path to the source file.
+   *
+   * @var \Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath
+   */
+  protected $source;
+
+  /**
+   * Whether to overwrite existing files.
+   *
+   * @var bool
+   */
+  protected $overwrite;
+
+  /**
+   * Constructs a ReplaceOp.
+   *
+   * @param \Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath $sourcePath
+   *   The relative path to the source file.
+   * @param bool $overwrite
+   *   Whether to allow this scaffold file to overwrite files already at
+   *   the destination. Defaults to TRUE.
+   */
+  public function __construct(ScaffoldFilePath $sourcePath, $overwrite = TRUE) {
+    $this->source = $sourcePath;
+    $this->overwrite = $overwrite;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function generateContents() {
+    return file_get_contents($this->source->fullPath());
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function process(ScaffoldFilePath $destination, IOInterface $io, ScaffoldOptions $options) {
+    $fs = new Filesystem();
+    $destination_path = $destination->fullPath();
+    // Do nothing if overwrite is 'false' and a file already exists at the
+    // destination.
+    if ($this->overwrite === FALSE && file_exists($destination_path)) {
+      $interpolator = $destination->getInterpolator();
+      $io->write($interpolator->interpolate("  - Skip <info>[dest-rel-path]</info> because it already exists and overwrite is <comment>false</comment>."));
+      return new ScaffoldResult($destination, FALSE);
+    }
+
+    // Get rid of the destination if it exists, and make sure that
+    // the directory where it's going to be placed exists.
+    $fs->remove($destination_path);
+    $fs->ensureDirectoryExists(dirname($destination_path));
+    if ($options->symlink()) {
+      return $this->symlinkScaffold($destination, $io);
+    }
+    return $this->copyScaffold($destination, $io);
+  }
+
+  /**
+   * Copies the scaffold file.
+   *
+   * @param \Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath $destination
+   *   Scaffold file to process.
+   * @param \Composer\IO\IOInterface $io
+   *   IOInterface to writing to.
+   *
+   * @return \Drupal\Composer\Plugin\Scaffold\Operations\ScaffoldResult
+   *   The scaffold result.
+   */
+  protected function copyScaffold(ScaffoldFilePath $destination, IOInterface $io) {
+    $interpolator = $destination->getInterpolator();
+    $this->source->addInterpolationData($interpolator);
+    $success = file_put_contents($destination->fullPath(), $this->contents());
+    if (!$success) {
+      throw new \RuntimeException($interpolator->interpolate("Could not copy source file <info>[src-rel-path]</info> to <info>[dest-rel-path]</info>!"));
+    }
+    $io->write($interpolator->interpolate("  - Copy <info>[dest-rel-path]</info> from <info>[src-rel-path]</info>"));
+    return new ScaffoldResult($destination, $this->overwrite);
+  }
+
+  /**
+   * Symlinks the scaffold file.
+   *
+   * @param \Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath $destination
+   *   Scaffold file to process.
+   * @param \Composer\IO\IOInterface $io
+   *   IOInterface to writing to.
+   *
+   * @return \Drupal\Composer\Plugin\Scaffold\Operations\ScaffoldResult
+   *   The scaffold result.
+   */
+  protected function symlinkScaffold(ScaffoldFilePath $destination, IOInterface $io) {
+    $interpolator = $destination->getInterpolator();
+    try {
+      $fs = new Filesystem();
+      $fs->relativeSymlink($this->source->fullPath(), $destination->fullPath());
+    }
+    catch (\Exception $e) {
+      throw new \RuntimeException($interpolator->interpolate("Could not symlink source file <info>[src-rel-path]</info> to <info>[dest-rel-path]</info>!"), [], $e);
+    }
+    $io->write($interpolator->interpolate("  - Link <info>[dest-rel-path]</info> from <info>[src-rel-path]</info>"));
+    return new ScaffoldResult($destination, $this->overwrite);
+  }
+
+}
diff --git a/vendor/drupal/core-composer-scaffold/Operations/ScaffoldFileCollection.php b/vendor/drupal/core-composer-scaffold/Operations/ScaffoldFileCollection.php
new file mode 100644
index 0000000000000000000000000000000000000000..3551b80aea5cd273add301e30c572c1143aa0199
--- /dev/null
+++ b/vendor/drupal/core-composer-scaffold/Operations/ScaffoldFileCollection.php
@@ -0,0 +1,198 @@
+<?php
+
+namespace Drupal\Composer\Plugin\Scaffold\Operations;
+
+use Composer\IO\IOInterface;
+use Drupal\Composer\Plugin\Scaffold\Interpolator;
+use Drupal\Composer\Plugin\Scaffold\ScaffoldFileInfo;
+use Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath;
+use Drupal\Composer\Plugin\Scaffold\ScaffoldOptions;
+
+/**
+ * Collection of scaffold files.
+ *
+ * @internal
+ */
+class ScaffoldFileCollection implements \IteratorAggregate {
+
+  /**
+   * Nested list of all scaffold files.
+   *
+   * The top level array maps from the package name to the collection of
+   * scaffold files provided by that package. Each collection of scaffold files
+   * is keyed by destination path.
+   *
+   * @var \Drupal\Composer\Plugin\Scaffold\ScaffoldFileInfo[][]
+   */
+  protected $scaffoldFilesByProject = [];
+
+  /**
+   * ScaffoldFileCollection constructor.
+   *
+   * @param \Drupal\Composer\Plugin\Scaffold\Operations\OperationInterface[][] $file_mappings
+   *   A multidimensional array of file mappings.
+   * @param \Drupal\Composer\Plugin\Scaffold\Interpolator $location_replacements
+   *   An object with the location mappings (e.g. [web-root]).
+   */
+  public function __construct(array $file_mappings, Interpolator $location_replacements) {
+    // Collection of all destination paths to be scaffolded. Used to determine
+    // when two projects scaffold the same file and we have to either replace or
+    // combine them together.
+    // @see OperationInterface::scaffoldOverExistingTarget().
+    $scaffoldFiles = [];
+
+    // Build the list of ScaffoldFileInfo objects by project.
+    foreach ($file_mappings as $package_name => $package_file_mappings) {
+      foreach ($package_file_mappings as $destination_rel_path => $op) {
+        $destination = ScaffoldFilePath::destinationPath($package_name, $destination_rel_path, $location_replacements);
+
+        // If there was already a scaffolding operation happening at this path,
+        // allow the new operation to decide how to handle the override.
+        // Usually, the new operation will replace whatever was there before.
+        if (isset($scaffoldFiles[$destination_rel_path])) {
+          $previous_scaffold_file = $scaffoldFiles[$destination_rel_path];
+          $op = $op->scaffoldOverExistingTarget($previous_scaffold_file->op());
+
+          // Remove the previous op so we only touch the destination once.
+          $message = "  - Skip <info>[dest-rel-path]</info>: overridden in <comment>{$package_name}</comment>";
+          $this->scaffoldFilesByProject[$previous_scaffold_file->packageName()][$destination_rel_path] = new ScaffoldFileInfo($destination, new SkipOp($message));
+        }
+        // If there is NOT already a scaffolding operation happening at this
+        // path, notify the scaffold operation of this fact.
+        else {
+          $op = $op->scaffoldAtNewLocation($destination);
+        }
+
+        // Combine the scaffold operation with the destination and record it.
+        $scaffold_file = new ScaffoldFileInfo($destination, $op);
+        $scaffoldFiles[$destination_rel_path] = $scaffold_file;
+        $this->scaffoldFilesByProject[$package_name][$destination_rel_path] = $scaffold_file;
+      }
+    }
+  }
+
+  /**
+   * Removes any item that has a path matching any path in the provided list.
+   *
+   * Matching is done via destination path.
+   *
+   * @param string[] $files_to_filter
+   *   List of destination paths
+   */
+  public function filterFiles(array $files_to_filter) {
+    foreach ($this->scaffoldFilesByProject as $project_name => $scaffold_files) {
+      foreach ($scaffold_files as $destination_rel_path => $scaffold_file) {
+        if (in_array($destination_rel_path, $files_to_filter, TRUE)) {
+          unset($scaffold_files[$destination_rel_path]);
+        }
+      }
+      $this->scaffoldFilesByProject[$project_name] = $scaffold_files;
+      if (!$this->checkListHasItemWithContent($scaffold_files)) {
+        unset($this->scaffoldFilesByProject[$project_name]);
+      }
+    }
+  }
+
+  /**
+   * Scans through a list of scaffold files and determines if any has contents.
+   *
+   * @param Drupal\Composer\Plugin\Scaffold\ScaffoldFileInfo[] $scaffold_files
+   *   List of scaffold files, path: ScaffoldFileInfo
+   *
+   * @return bool
+   *   TRUE if at least one item in the list has content
+   */
+  protected function checkListHasItemWithContent(array $scaffold_files) {
+    foreach ($scaffold_files as $destination_rel_path => $scaffold_file) {
+      $contents = $scaffold_file->op()->contents();
+      if (!empty($contents)) {
+        return TRUE;
+      }
+    }
+    return FALSE;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getIterator() {
+    return new \ArrayIterator($this->scaffoldFilesByProject);
+  }
+
+  /**
+   * Processes the files in our collection.
+   *
+   * @param \Composer\IO\IOInterface $io
+   *   The Composer IO object.
+   * @param \Drupal\Composer\Plugin\Scaffold\ScaffoldOptions $scaffold_options
+   *   The scaffold options.
+   *
+   * @return \Drupal\Composer\Plugin\Scaffold\Operations\ScaffoldResult[]
+   *   The results array.
+   */
+  public function processScaffoldFiles(IOInterface $io, ScaffoldOptions $scaffold_options) {
+    $results = [];
+    foreach ($this as $project_name => $scaffold_files) {
+      $io->write("Scaffolding files for <comment>{$project_name}</comment>:");
+      foreach ($scaffold_files as $scaffold_file) {
+        $results[$scaffold_file->destination()->relativePath()] = $scaffold_file->process($io, $scaffold_options);
+      }
+    }
+    return $results;
+  }
+
+  /**
+   * Processes the iterator created by ScaffoldFileCollection::create().
+   *
+   * @param \Drupal\Composer\Plugin\Scaffold\Operations\ScaffoldFileCollection $collection
+   *   The iterator to process.
+   * @param \Composer\IO\IOInterface $io
+   *   The Composer IO object.
+   * @param \Drupal\Composer\Plugin\Scaffold\ScaffoldOptions $scaffold_options
+   *   The scaffold options.
+   *
+   * @return \Drupal\Composer\Plugin\Scaffold\Operations\ScaffoldResult[]
+   *   The results array.
+   *
+   * @deprecated. Called when upgrading from the Core Composer Scaffold plugin
+   *   version 8.8.x due to a bug in the plugin and handler classes. Do not use
+   *   in 8.9.x or 9.x, and remove in Drupal 10.x.
+   */
+  public static function process(ScaffoldFileCollection $collection, IOInterface $io, ScaffoldOptions $scaffold_options) {
+    $results = [];
+    foreach ($collection as $project_name => $scaffold_files) {
+      $io->write("Scaffolding files for <comment>{$project_name}</comment>:");
+      foreach ($scaffold_files as $scaffold_file) {
+        $results[$scaffold_file->destination()->relativePath()] = $scaffold_file->process($io, $scaffold_options);
+      }
+    }
+    return $results;
+  }
+
+  /**
+   * Returns the list of files that have not changed since they were scaffolded.
+   *
+   * Note that there are two reasons a file may have changed:
+   *   - The user modified it after it was scaffolded.
+   *   - The package the file came to was updated, and the file is different in
+   *     the new version.
+   *
+   * With the current scaffold code, we cannot tell the difference between the
+   * two. @see https://www.drupal.org/project/drupal/issues/3092563
+   *
+   * @return string[]
+   *   List of relative paths to unchanged files on disk.
+   */
+  public function checkUnchanged() {
+    $results = [];
+    foreach ($this as $project_name => $scaffold_files) {
+      foreach ($scaffold_files as $scaffold_file) {
+        if (!$scaffold_file->hasChanged()) {
+          $results[] = $scaffold_file->destination()->relativePath();
+        }
+      }
+    }
+    return $results;
+  }
+
+}
diff --git a/vendor/drupal/core-composer-scaffold/Operations/ScaffoldResult.php b/vendor/drupal/core-composer-scaffold/Operations/ScaffoldResult.php
new file mode 100644
index 0000000000000000000000000000000000000000..3445b5307ff5f6f048592b5ebba454899d52b71b
--- /dev/null
+++ b/vendor/drupal/core-composer-scaffold/Operations/ScaffoldResult.php
@@ -0,0 +1,61 @@
+<?php
+
+namespace Drupal\Composer\Plugin\Scaffold\Operations;
+
+use Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath;
+
+/**
+ * Record the result of a scaffold operation.
+ *
+ * @internal
+ */
+class ScaffoldResult {
+
+  /**
+   * The path to the scaffold file that was processed.
+   *
+   * @var \Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath
+   */
+  protected $destination;
+
+  /**
+   * Indicates if this scaffold file is managed by the scaffold command.
+   *
+   * @var bool
+   */
+  protected $managed;
+
+  /**
+   * ScaffoldResult constructor.
+   *
+   * @param \Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath $destination
+   *   The path to the scaffold file that was processed.
+   * @param bool $isManaged
+   *   (optional) Whether this result is managed. Defaults to FALSE.
+   */
+  public function __construct(ScaffoldFilePath $destination, $isManaged = FALSE) {
+    $this->destination = $destination;
+    $this->managed = $isManaged;
+  }
+
+  /**
+   * Determines whether this scaffold file is managed.
+   *
+   * @return bool
+   *   TRUE if this scaffold file is managed, FALSE if not.
+   */
+  public function isManaged() {
+    return $this->managed;
+  }
+
+  /**
+   * Gets the destination scaffold file that this result refers to.
+   *
+   * @return \Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath
+   *   The destination path for the scaffold result.
+   */
+  public function destination() {
+    return $this->destination;
+  }
+
+}
diff --git a/vendor/drupal/core-composer-scaffold/Operations/SkipOp.php b/vendor/drupal/core-composer-scaffold/Operations/SkipOp.php
new file mode 100644
index 0000000000000000000000000000000000000000..4180bd8683486f7440206ccf77b708fda917ef6b
--- /dev/null
+++ b/vendor/drupal/core-composer-scaffold/Operations/SkipOp.php
@@ -0,0 +1,54 @@
+<?php
+
+namespace Drupal\Composer\Plugin\Scaffold\Operations;
+
+use Composer\IO\IOInterface;
+use Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath;
+use Drupal\Composer\Plugin\Scaffold\ScaffoldOptions;
+
+/**
+ * Scaffold operation to skip a scaffold file (do nothing).
+ *
+ * @internal
+ */
+class SkipOp extends AbstractOperation {
+
+  /**
+   * Identifies Skip operations.
+   */
+  const ID = 'skip';
+
+  /**
+   * The message to output while processing.
+   *
+   * @var string
+   */
+  protected $message;
+
+  /**
+   * SkipOp constructor.
+   *
+   * @param string $message
+   *   (optional) A custom message to output while skipping.
+   */
+  public function __construct($message = "  - Skip <info>[dest-rel-path]</info>: disabled") {
+    $this->message = $message;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function generateContents() {
+    return '';
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function process(ScaffoldFilePath $destination, IOInterface $io, ScaffoldOptions $options) {
+    $interpolator = $destination->getInterpolator();
+    $io->write($interpolator->interpolate($this->message));
+    return new ScaffoldResult($destination, FALSE);
+  }
+
+}
diff --git a/vendor/drupal/core-composer-scaffold/Plugin.php b/vendor/drupal/core-composer-scaffold/Plugin.php
new file mode 100644
index 0000000000000000000000000000000000000000..2f5214fb225f0ea73e9eac0a6305673c2278a53d
--- /dev/null
+++ b/vendor/drupal/core-composer-scaffold/Plugin.php
@@ -0,0 +1,147 @@
+<?php
+
+namespace Drupal\Composer\Plugin\Scaffold;
+
+use Composer\Composer;
+use Composer\EventDispatcher\EventSubscriberInterface;
+use Composer\IO\IOInterface;
+use Composer\Installer\PackageEvent;
+use Composer\Installer\PackageEvents;
+use Composer\Plugin\Capability\CommandProvider;
+use Composer\Plugin\Capable;
+use Composer\Plugin\CommandEvent;
+use Composer\Plugin\PluginEvents;
+use Composer\Plugin\PluginInterface;
+use Composer\Script\Event;
+use Composer\Script\ScriptEvents;
+use Drupal\Composer\Plugin\Scaffold\CommandProvider as ScaffoldCommandProvider;
+
+/**
+ * Composer plugin for handling drupal scaffold.
+ *
+ * @internal
+ */
+class Plugin implements PluginInterface, EventSubscriberInterface, Capable {
+
+  /**
+   * The Composer service.
+   *
+   * @var \Composer\Composer
+   */
+  protected $composer;
+
+  /**
+   * Composer's I/O service.
+   *
+   * @var \Composer\IO\IOInterface
+   */
+  protected $io;
+
+  /**
+   * The Composer Scaffold handler.
+   *
+   * @var \Drupal\Composer\Plugin\Scaffold\Handler
+   */
+  protected $handler;
+
+  /**
+   * Record whether the 'require' command was called.
+   *
+   * @param bool
+   */
+  protected $requireWasCalled;
+
+  /**
+   * {@inheritdoc}
+   */
+  public function activate(Composer $composer, IOInterface $io) {
+    $this->composer = $composer;
+    $this->io = $io;
+    $this->requireWasCalled = FALSE;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function deactivate(Composer $composer, IOInterface $io) {
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function uninstall(Composer $composer, IOInterface $io) {
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getCapabilities() {
+    return [CommandProvider::class => ScaffoldCommandProvider::class];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function getSubscribedEvents() {
+    // Important note: We only instantiate our handler on "post" events.
+    return [
+      ScriptEvents::POST_UPDATE_CMD => 'postCmd',
+      ScriptEvents::POST_INSTALL_CMD => 'postCmd',
+      PackageEvents::POST_PACKAGE_INSTALL => 'postPackage',
+      PluginEvents::COMMAND => 'onCommand',
+    ];
+  }
+
+  /**
+   * Post command event callback.
+   *
+   * @param \Composer\Script\Event $event
+   *   The Composer event.
+   */
+  public function postCmd(Event $event) {
+    $this->handler()->scaffold();
+  }
+
+  /**
+   * Post package event behavior.
+   *
+   * @param \Composer\Installer\PackageEvent $event
+   *   Composer package event sent on install/update/remove.
+   */
+  public function postPackage(PackageEvent $event) {
+    $this->handler()->onPostPackageEvent($event);
+  }
+
+  /**
+   * Pre command event callback.
+   *
+   * @param \Composer\Plugin\CommandEvent $event
+   *   The Composer command event.
+   */
+  public function onCommand(CommandEvent $event) {
+    if ($event->getCommandName() == 'require') {
+      if ($this->handler) {
+        throw new \Error('Core Scaffold Plugin handler instantiated too early. See https://www.drupal.org/project/drupal/issues/3104922');
+      }
+      $this->requireWasCalled = TRUE;
+    }
+  }
+
+  /**
+   * Lazy-instantiate the handler object. It is dangerous to update a Composer
+   * plugin if it loads any classes prior to the `composer update` operation,
+   * and later tries to use them in a post-update hook.
+   */
+  protected function handler() {
+    if (!$this->handler) {
+      $this->handler = new Handler($this->composer, $this->io);
+      // On instantiation of our handler, notify it if the 'require' command
+      // was executed.
+      if ($this->requireWasCalled) {
+        $this->handler->requireWasCalled();
+      }
+    }
+    return $this->handler;
+  }
+
+}
diff --git a/vendor/drupal/core-composer-scaffold/PostPackageEventListenerInterface.php b/vendor/drupal/core-composer-scaffold/PostPackageEventListenerInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..61356b145cf59e6ec2916895fa37f3d4402857d6
--- /dev/null
+++ b/vendor/drupal/core-composer-scaffold/PostPackageEventListenerInterface.php
@@ -0,0 +1,24 @@
+<?php
+
+namespace Drupal\Composer\Plugin\Scaffold;
+
+use Composer\Installer\PackageEvent;
+
+/**
+ * Interface for post package event listeners.
+ *
+ * @see \Drupal\Composer\Plugin\Scaffold\Handler::onPostPackageEvent
+ *
+ * @internal
+ */
+interface PostPackageEventListenerInterface {
+
+  /**
+   * Handles package events during a 'composer require' operation.
+   *
+   * @param \Composer\Installer\PackageEvent $event
+   *   Composer package event sent on install/update/remove.
+   */
+  public function event(PackageEvent $event);
+
+}
diff --git a/vendor/drupal/core-composer-scaffold/README.md b/vendor/drupal/core-composer-scaffold/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..2830e5565e547db1fedd01b9c7fddbcf05d4a5f4
--- /dev/null
+++ b/vendor/drupal/core-composer-scaffold/README.md
@@ -0,0 +1,519 @@
+# Drupal Composer Scaffold
+
+This project provides a composer plugin for placing scaffold files (like
+`index.php`, `update.php`, …) from the `drupal/core` project into their desired
+location inside the web root. Only individual files may be scaffolded with this
+plugin.
+
+The purpose of scaffolding files is to allow Drupal sites to be fully managed by
+Composer, and still allow individual asset files to be placed in arbitrary
+locations. The goal of doing this is to enable a properly configured composer
+template to produce a file layout that exactly matches the file layout of a
+Drupal 8.7.x and earlier tarball distribution. Other file layouts will also be
+possible; for example, a project layout very similar to the current
+[drupal-composer/drupal-project](https://github.com/drupal-composer/drupal-scaffold)
+template will also be provided. When one of these projects is used, the user
+should be able to use `composer require` and `composer update` on a Drupal site
+immediately after untarring the downloaded archive.
+
+Note that the dependencies of a Drupal site are only able to scaffold files if
+explicitly granted that right in the top-level composer.json file. See
+[allowed packages](#allowed-packages), below.
+
+## Usage
+
+Drupal Composer Scaffold is used by requiring `drupal/core-composer-scaffold` in your
+project, and providing configuration settings in the `extra` section of your
+project's composer.json file. Additional configuration from the composer.json
+file of your project's dependencies is also consulted in order to scaffold the
+files a project needs. Additional information may be added to the beginning or
+end of scaffold files, as is commonly done to `.htaccess` and `robots.txt`
+files. See [altering scaffold files](#altering-scaffold-files) for more
+information.
+
+Typically, the scaffold operations run automatically as needed, e.g. after
+`composer install`, so it is usually not necessary to do anything different
+to scaffold a project once the configuration is set up in the project
+composer.json file, as described below. To scaffold files directly, run:
+```
+composer drupal:scaffold
+```
+
+### Allowed Packages
+
+Scaffold files are stored inside of projects that are required from the main
+project's composer.json file as usual. The scaffolding operation happens after
+`composer install`, and involves copying or symlinking the desired assets to
+their destination location. In order to prevent arbitrary dependencies from
+copying files via the scaffold mechanism, only those projects that are
+specifically permitted by the top-level project will be used to scaffold files.
+
+Example: Permit scaffolding from the project `drupal/core`
+```
+  "name": "my/project",
+  ...
+  "extra": {
+    "drupal-scaffold": {
+      "allowed-packages": [
+        "drupal/core"
+      ],
+      ...
+    }
+  }
+```
+Allowing a package to scaffold files also permits it to delegate permission to
+scaffold to any project that it requires itself. This allows a package to
+organize its scaffold assets as it sees fit. For example, the project
+`drupal/core` may choose to store its assets in a subproject `drupal/assets`.
+
+It is possible for a project to obtain scaffold files from multiple projects.
+For example, a Drupal project using a distribution, and installing on a specific
+web hosting service provider might take its scaffold files from:
+
+- Drupal core
+- Its distribution
+- A project provided by the hosting provider
+- The project itself
+
+Each project allowed to scaffold by the top-level project will be used in turn,
+with projects declared later in the `allowed-packages` list taking precedence
+over the projects named before. `drupal/core` is implicitly allowed and will be
+placed at the top of the list. The top-level composer.json itself is also
+implicitly allowed to scaffold files, and its scaffold files have highest
+priority.
+
+### Defining Project Locations
+
+The top-level project in turn must define where the web root is located. It does
+so via the `locations` mapping, as shown below:
+```
+  "name": "my/project",
+  ...
+  "extra": {
+    "drupal-scaffold": {
+      "locations": {
+        "web-root": "./docroot"
+      },
+      ...
+    }
+  }
+```
+This makes it possible to configure a project with different file layouts; for
+example, either the `drupal/drupal` file layout or the
+`drupal-composer/drupal-project` file layout could be used to set up a project.
+
+If a web-root is not explicitly defined, then it will default to `./`.
+
+### Altering Scaffold Files
+
+Sometimes, a project might wish to use a scaffold file provided by a dependency,
+but alter it in some way. Two forms of alteration are supported: appending and
+patching.
+
+The example below shows a project that appends additional entries onto the end
+of the `robots.txt` file provided by `drupal/core`:
+```
+  "name": "my/project",
+  ...
+  "extra": {
+    "drupal-scaffold": {
+      "file-mapping": {
+        "[web-root]/robots.txt": {
+          "append": "assets/my-robots-additions.txt",
+        }
+      }
+    }
+  }
+```
+It is also possible to prepend to a scaffold file instead of, or in addition to
+appending by including a "prepend" entry that provides the relative path to the
+file to prepend to the scaffold file.
+
+The example below demonstrates the use of the `post-drupal-scaffold-cmd` hook
+to patch the `.htaccess` file using a patch.
+```
+  "name": "my/project",
+  ...
+  "scripts": {
+    "post-drupal-scaffold-cmd": [
+      "cd docroot && patch -p1 <../patches/htaccess-ssl.patch"
+    ]
+  }
+```
+
+### Defining Scaffold Files
+
+The placement of scaffold assets is under the control of the project that
+provides them, but the location is always relative to some directory defined by
+the root project -- usually the web root. For example, the scaffold file
+`robots.txt` is copied from its source location, `assets/robots.txt` into the
+web root in the snippet below.
+```
+{
+  "name": "drupal/assets",
+  ...
+  "extra": {
+    "drupal-scaffold": {
+      "file-mapping": {
+        "[web-root]/robots.txt": "assets/robots.txt",
+        ...
+      }
+    }
+  }
+}
+```
+
+### Excluding Scaffold Files
+
+Sometimes, a project might prefer to entirely replace a scaffold file provided
+by a dependency, and receive no further updates for it. This can be done by
+setting the value for the scaffold file to exclude to `false`:
+```
+  "name": "my/project",
+  ...
+  "extra": {
+    "drupal-scaffold": {
+      "file-mapping": {
+        "[web-root]/robots.txt": false
+      }
+    }
+  }
+```
+If possible, use the `append` and `prepend` directives as explained in [altering
+scaffold files](#altering-scaffold-files), above. Excluding a file means that
+your project will not get any bug fixes or other updates to files that are
+modified locally.
+
+### Overwrite
+
+By default, scaffold files overwrite whatever content exists at the target
+location. Sometimes a project may wish to provide the initial contents for a
+file that will not be changed in subsequent updates. This can be done by setting
+the `overwrite` flag to `false`, as shown in the example below:
+```
+{
+  "name": "service-provider/d8-scaffold-files",
+  "extra": {
+    "drupal-scaffold": {
+      "file-mapping": {
+        "[web-root]/sites/default/settings.php": {
+          "mode": "replace",
+          "path": "assets/sites/default/settings.php",
+          "overwrite": false
+        }
+      }
+    }
+  }
+}
+```
+Note that the `overwrite` directive is intended to be used by starter kits,
+service providers, and so on. Individual Drupal sites should exclude the file
+by setting its value to false instead.
+
+### Autoload File
+
+The scaffold tool automatically creates the required `autoload.php` file at the
+Drupal root as part of the scaffolding operation. This file should not be
+modified or customized in any way. If it is committed to the repository, though,
+then the scaffold tool will stop managing it. If the location of the `vendor`
+directory is changed for any reason, and the `autoload.php` file has been
+committed to the repository, manually delete it and then run `composer install`
+to update it.
+
+## Specifications
+
+Reference section for the configuration directives for the "drupal-scaffold"
+section of the "extra" section of a `composer.json` file appear below.
+
+### allowed-packages
+
+The `allowed-packages` configuration setting contains an ordered list of package
+names that will be used during the scaffolding phase.
+```
+"allowed-packages": [
+  "example/assets",
+],
+```
+### file-mapping
+
+The `file-mapping` configuration setting consists of a map from the destination
+path of the file to scaffold to a set of properties that control how the file
+should be scaffolded.
+
+The available properties are as follows:
+
+- mode: One of "replace", "append" or "skip".
+- path: The path to the source file to write over the destination file.
+- prepend: The path to the source file to prepend to the destination file, which
+  must always be a scaffold file provided by some other project.
+- append: Like `prepend`, but appends content rather than prepends.
+- overwrite: If `false`, prevents a `replace` from happening if the destination
+  already exists.
+
+The mode may be inferred from the other properties. If the mode is not
+specified, then the following defaults will be supplied:
+
+- replace: Selected if a `path` property is present, or if the entry's value is
+  a string rather than a property set.
+- append: Selected if a `prepend` or `append` property is present.
+- skip: Selected if the entry's value is a boolean `false`.
+
+Examples:
+```
+"file-mapping": {
+  "[web-root]/sites/default/default.settings.php": {
+    "mode": "replace",
+    "path": "assets/sites/default/default.settings.php",
+    "overwrite": true
+  },
+  "[web-root]/sites/default/settings.php": {
+    "mode": "replace",
+    "path": "assets/sites/default/settings.php",
+    "overwrite": false
+  },
+  "[web-root]/robots.txt": {
+    "mode": "append",
+    "prepend": "assets/robots-prequel.txt",
+    "append": "assets/robots-append.txt"
+  },
+  "[web-root]/.htaccess": {
+    "mode": "skip",
+  }
+}
+```
+The short-form of the above example would be:
+```
+"file-mapping": {
+  "[web-root]/sites/default/default.settings.php": "assets/sites/default/default.settings.php",
+  "[web-root]/sites/default/settings.php": {
+    "path": "assets/sites/default/settings.php",
+    "overwrite": false
+  },
+  "[web-root]/robots.txt": {
+    "prepend": "assets/robots-prequel.txt",
+    "append": "assets/robots-append.txt"
+  },
+  "[web-root]/.htaccess": false
+}
+```
+Note that there is no distinct "prepend" mode; "append" mode is used to both
+append and prepend to scaffold files. The reason for this is that scaffold file
+entries are identified in the file-mapping section keyed by their destination
+path, and it is not possible for multiple entries to have the same key. If
+"prepend" were a separate mode, then it would not be possible to both prepend
+and append to the same file.
+
+By default, append operations may only be applied to files that were scaffolded
+by a previously evaluated project. If the `force-append` attribute is added to
+an `append` operation, though, then the append will be made to non-scaffolded
+files if and only if the append text does not already appear in the file. When
+using this mode, it is also possible to provide default contents to use in the
+event that the destination file is entirely missing.
+
+The example below demonstrates scaffolding a settings-custom.php file, and
+including it from the existing `settings.php` file.
+
+```
+"file-mapping": {
+  "[web-root]/sites/default/settings-custom.php": "assets/settings-custom.php",
+  "[web-root]/sites/default/settings.php": {
+    "append": "assets/include-settings-custom.txt",
+    "force-append": true,
+    "default": "assets/initial-default-settings.txt"
+  }
+}
+```
+
+Note that the example above still works if used with a project that scaffolds
+the settings.php file.
+
+### gitignore
+
+The `gitignore` configuration setting controls whether or not this plugin will
+manage `.gitignore` files for files written during the scaffold operation.
+
+- true: `.gitignore` files will be updated when scaffold files are written.
+- false: `.gitignore` files will never be modified.
+- Not set: `.gitignore` files will be updated if the target directory is a local
+working copy of a git repository, and the `vendor` directory is ignored
+in that repository.
+
+### locations
+
+The `locations` configuration setting contains a list of named locations that
+may be used in placing scaffold files. The only required location is `web-root`.
+Other locations may also be defined if desired.
+```
+"locations": {
+  "web-root": "./docroot"
+},
+```
+### symlink
+
+The `symlink` property causes `replace` operations to make a symlink to the
+source file rather than copying it. This is useful when doing core development,
+as the symlink files themselves should not be edited. Note that `append`
+operations override the `symlink` option, to prevent the original scaffold
+assets from being altered.
+```
+"symlink": true,
+```
+## Managing Scaffold Files
+
+Scaffold files should be treated the same way that the `vendor` directory is
+handled. If you need to commit `vendor` (e.g. in order to deploy your site),
+then you should also commit your scaffold files. You should not commit your
+`vendor` directory or scaffold files unless it is necessary.
+
+If a dependency provides a scaffold file with `overwrite` set to `false`, that
+file should be committed to your repository.
+
+By default, `.gitignore` files will be automatically updated if needed when
+scaffold files are written. See the `gitignore` setting in the Specifications
+section above.
+
+## Examples
+
+Some full-length examples appear below.
+
+Sample composer.json for a project that relies on packages that use composer-scaffold:
+```
+{
+  "name": "my/project",
+  "require": {
+    "drupal/core-composer-scaffold": "*",
+    "composer/installers": "^1.2",
+    "cweagans/composer-patches": "^1.6.5",
+    "drupal/core": "^8.8.x-dev",
+    "service-provider/d8-scaffold-files": "^1"
+  },
+  "config": {
+    "optimize-autoloader": true,
+    "sort-packages": true
+  },
+  "extra": {
+    "drupal-scaffold": {
+      "allowed-packages": [
+        "drupal/core"
+      ],
+      "locations": {
+        "web-root": "./docroot"
+      },
+      "symlink": true,
+      "file-mapping": {
+        "[web-root]/.htaccess": false,
+        "[web-root]/robots.txt": "assets/robots-default.txt"
+      }
+    }
+  }
+}
+```
+
+Sample composer.json for drupal/core, with assets placed in a different project:
+
+```
+{
+  "name": "drupal/core",
+  "extra": {
+    "drupal-scaffold": {
+      "allowed-packages": [
+        "drupal/assets",
+      ]
+    }
+  }
+}
+```
+
+Sample composer.json for composer-scaffold files in drupal/assets:
+
+```
+{
+  "name": "drupal/assets",
+  "extra": {
+    "drupal-scaffold": {
+      "file-mapping": {
+        "[web-root]/.csslintrc": "assets/.csslintrc",
+        "[web-root]/.editorconfig": "assets/.editorconfig",
+        "[web-root]/.eslintignore": "assets/.eslintignore",
+        "[web-root]/.eslintrc.json": "assets/.eslintrc.json",
+        "[web-root]/.gitattributes": "assets/.gitattributes",
+        "[web-root]/.ht.router.php": "assets/.ht.router.php",
+        "[web-root]/.htaccess": "assets/.htaccess",
+        "[web-root]/sites/default/default.services.yml": "assets/default.services.yml",
+        "[web-root]/sites/default/default.settings.php": "assets/default.settings.php",
+        "[web-root]/sites/example.settings.local.php": "assets/example.settings.local.php",
+        "[web-root]/sites/example.sites.php": "assets/example.sites.php",
+        "[web-root]/index.php": "assets/index.php",
+        "[web-root]/robots.txt": "assets/robots.txt",
+        "[web-root]/update.php": "assets/update.php",
+        "[web-root]/web.config": "assets/web.config"
+      }
+    }
+  }
+}
+```
+
+Sample composer.json for a library that implements composer-scaffold:
+
+```
+{
+  "name": "service-provider/d8-scaffold-files",
+  "extra": {
+    "drupal-scaffold": {
+      "file-mapping": {
+        "[web-root]/sites/default/settings.php": "assets/sites/default/settings.php"
+      }
+    }
+  }
+}
+```
+
+Append to robots.txt:
+
+```
+{
+  "name": "service-provider/d8-scaffold-files",
+  "extra": {
+    "drupal-scaffold": {
+      "file-mapping": {
+        "[web-root]/robots.txt": {
+          "append": "assets/my-robots-additions.txt",
+        }
+      }
+    }
+  }
+}
+```
+
+Patch a file after it's copied:
+
+```
+"post-drupal-scaffold-cmd": [
+  "cd docroot && patch -p1 <../patches/htaccess-ssl.patch"
+]
+```
+
+## Related Plugins
+
+### drupal-composer/drupal-scaffold
+
+Previous versions of Drupal Composer Scaffold (see community project,
+[drupal-composer/drupal-scaffold](https://github.com/drupal-composer/drupal-project))
+downloaded each scaffold file directly from its distribution server (e.g.
+`https://git.drupalcode.org`) to the desired destination directory. This was
+necessary, because there was no subtree split of the scaffold files available.
+Copying the scaffold assets from projects already downloaded by Composer is more
+effective, as downloading and unpacking archive files is more efficient than
+downloading each scaffold file individually.
+
+### composer/installers
+
+The [composer/installers](https://github.com/composer/installers) plugin is
+similar to this plugin in that it allows dependencies to be installed in
+locations other than the `vendor` directory. However, Composer and the
+`composer/installers` plugin have a limitation that one project cannot be moved
+inside of another project. Therefore, if you use `composer/installers` to place
+Drupal modules inside the directory `web/modules/contrib`, then you cannot also
+use `composer/installers` to place files such as `index.php` and `robots.txt`
+into the `web` directory. The drupal-scaffold plugin was created to work around
+this limitation.
diff --git a/vendor/drupal/core-composer-scaffold/ScaffoldFileInfo.php b/vendor/drupal/core-composer-scaffold/ScaffoldFileInfo.php
new file mode 100644
index 0000000000000000000000000000000000000000..08ce59cfba58e9c185107fe397f7ece4c2a6fa26
--- /dev/null
+++ b/vendor/drupal/core-composer-scaffold/ScaffoldFileInfo.php
@@ -0,0 +1,139 @@
+<?php
+
+namespace Drupal\Composer\Plugin\Scaffold;
+
+use Composer\IO\IOInterface;
+use Drupal\Composer\Plugin\Scaffold\Operations\OperationInterface;
+
+/**
+ * Data object that keeps track of one scaffold file.
+ *
+ * Scaffold files are identified primarily by their destination path. Each
+ * scaffold file also has an 'operation' object that controls how the scaffold
+ * file will be placed (e.g. via copy or symlink, or maybe by appending multiple
+ * files together). The operation may have one or more source files.
+ *
+ * @internal
+ */
+class ScaffoldFileInfo {
+
+  /**
+   * The path to the destination.
+   *
+   * @var \Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath
+   */
+  protected $destination;
+
+  /**
+   * The operation used to create the destination.
+   *
+   * @var \Drupal\Composer\Plugin\Scaffold\Operations\OperationInterface
+   */
+  protected $op;
+
+  /**
+   * Constructs a ScaffoldFileInfo object.
+   *
+   * @param \Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath $destination
+   *   The full and relative paths to the destination file and the package
+   *   defining it.
+   * @param \Drupal\Composer\Plugin\Scaffold\Operations\OperationInterface $op
+   *   Operations object that will handle scaffolding operations.
+   */
+  public function __construct(ScaffoldFilePath $destination, OperationInterface $op) {
+    $this->destination = $destination;
+    $this->op = $op;
+  }
+
+  /**
+   * Gets the Scaffold operation.
+   *
+   * @return \Drupal\Composer\Plugin\Scaffold\Operations\OperationInterface
+   *   Operations object that handles scaffolding (copy, make symlink, etc).
+   */
+  public function op() {
+    return $this->op;
+  }
+
+  /**
+   * Gets the package name.
+   *
+   * @return string
+   *   The name of the package this scaffold file info was collected from.
+   */
+  public function packageName() {
+    return $this->destination->packageName();
+  }
+
+  /**
+   * Gets the destination.
+   *
+   * @return \Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath
+   *   The scaffold path to the destination file.
+   */
+  public function destination() {
+    return $this->destination;
+  }
+
+  /**
+   * Determines if this scaffold file has been overridden by another package.
+   *
+   * @param string $providing_package
+   *   The name of the package that provides the scaffold file at this location,
+   *   as returned by self::findProvidingPackage()
+   *
+   * @return bool
+   *   Whether this scaffold file if overridden or removed.
+   */
+  public function overridden($providing_package) {
+    return $this->packageName() !== $providing_package;
+  }
+
+  /**
+   * Replaces placeholders in a message.
+   *
+   * @param string $message
+   *   Message with placeholders to fill in.
+   * @param array $extra
+   *   Additional data to merge with the interpolator.
+   * @param mixed $default
+   *   Default value to use for missing placeholders, or FALSE to keep them.
+   *
+   * @return string
+   *   Interpolated string with placeholders replaced.
+   */
+  public function interpolate($message, array $extra = [], $default = FALSE) {
+    $interpolator = $this->destination->getInterpolator();
+    return $interpolator->interpolate($message, $extra, $default);
+  }
+
+  /**
+   * Moves a single scaffold file from source to destination.
+   *
+   * @param \Composer\IO\IOInterface $io
+   *   The scaffold file to be processed.
+   * @param \Drupal\Composer\Plugin\Scaffold\ScaffoldOptions $options
+   *   Assorted operational options, e.g. whether the destination should be a
+   *   symlink.
+   *
+   * @return \Drupal\Composer\Plugin\Scaffold\Operations\ScaffoldResult
+   *   The scaffold result.
+   */
+  public function process(IOInterface $io, ScaffoldOptions $options) {
+    return $this->op()->process($this->destination, $io, $options);
+  }
+
+  /**
+   * Returns TRUE if the target does not exist or has changed.
+   *
+   * @return bool
+   */
+  final public function hasChanged() {
+    $path = $this->destination()->fullPath();
+    if (!file_exists($path)) {
+      return TRUE;
+    }
+    return $this->op()->contents() !== file_get_contents($path);
+  }
+
+}
diff --git a/vendor/drupal/core-composer-scaffold/ScaffoldFilePath.php b/vendor/drupal/core-composer-scaffold/ScaffoldFilePath.php
new file mode 100644
index 0000000000000000000000000000000000000000..5fb5af41d0acf1962b2ce8ee91c383cd32e96563
--- /dev/null
+++ b/vendor/drupal/core-composer-scaffold/ScaffoldFilePath.php
@@ -0,0 +1,202 @@
+<?php
+
+namespace Drupal\Composer\Plugin\Scaffold;
+
+use Composer\Util\Filesystem;
+
+/**
+ * Manage the path to a file to scaffold.
+ *
+ * Both the relative and full path to the file is maintained so that the shorter
+ * name may be used in progress and error messages, as needed. The name of the
+ * package that provided the file path is also recorded for the same reason.
+ *
+ * ScaffoldFilePaths may be used to represent destination scaffold files, or the
+ * source files used to create them. Static factory methods named
+ * destinationPath and sourcePath, respectively, are provided to create
+ * ScaffoldFilePath objects.
+ *
+ * @internal
+ */
+class ScaffoldFilePath {
+
+  /**
+   * The type of scaffold file this is, 'src' or 'dest'.
+   *
+   * @var string
+   */
+  protected $type;
+
+  /**
+   * The name of the package containing the file.
+   *
+   * @var string
+   */
+  protected $packageName;
+
+  /**
+   * The relative path to the file.
+   *
+   * @var string
+   */
+  protected $relativePath;
+
+  /**
+   * The full path to the file.
+   *
+   * @var string
+   */
+  protected $fullPath;
+
+  /**
+   * ScaffoldFilePath constructor.
+   *
+   * @param string $path_type
+   *   The type of scaffold file this is, 'src' or 'dest'.
+   * @param string $package_name
+   *   The name of the package containing the file.
+   * @param string $rel_path
+   *   The relative path to the file.
+   * @param string $full_path
+   *   The full path to the file.
+   */
+  public function __construct($path_type, $package_name, $rel_path, $full_path) {
+    $this->type = $path_type;
+    $this->packageName = $package_name;
+    $this->relativePath = $rel_path;
+    $this->fullPath = $full_path;
+
+    // Ensure that the full path really is a full path. We do not use
+    // 'realpath' here because the file specified by the full path might
+    // not exist yet.
+    $fs = new Filesystem();
+    if (!$fs->isAbsolutePath($this->fullPath)) {
+      $this->fullPath = getcwd() . '/' . $this->fullPath;
+    }
+  }
+
+  /**
+   * Gets the name of the package this source file was pulled from.
+   *
+   * @return string
+   *   Name of package.
+   */
+  public function packageName() {
+    return $this->packageName;
+  }
+
+  /**
+   * Gets the relative path to the source file (best to use in messages).
+   *
+   * @return string
+   *   Relative path to file.
+   */
+  public function relativePath() {
+    return $this->relativePath;
+  }
+
+  /**
+   * Gets the full path to the source file.
+   *
+   * @return string
+   *   Full path to file.
+   */
+  public function fullPath() {
+    return $this->fullPath;
+  }
+
+  /**
+   * Converts the relative source path into an absolute path.
+   *
+   * The path returned will be relative to the package installation location.
+   *
+   * @param string $package_name
+   *   The name of the package containing the source file. Only used for error
+   *   messages.
+   * @param string $package_path
+   *   The installation path of the package containing the source file.
+   * @param string $destination
+   *   Destination location provided as a relative path. Only used for error
+   *   messages.
+   * @param string $source
+   *   Source location provided as a relative path.
+   *
+   * @return self
+   *   Object wrapping the relative and absolute path to the source file.
+   */
+  public static function sourcePath($package_name, $package_path, $destination, $source) {
+    // Complain if there is no source path.
+    if (empty($source)) {
+      throw new \RuntimeException("No scaffold file path given for {$destination} in package {$package_name}.");
+    }
+    // Calculate the full path to the source scaffold file.
+    $source_full_path = $package_path . '/' . $source;
+    if (!file_exists($source_full_path)) {
+      throw new \RuntimeException("Scaffold file {$source} not found in package {$package_name}.");
+    }
+    if (is_dir($source_full_path)) {
+      throw new \RuntimeException("Scaffold file {$source} in package {$package_name} is a directory; only files may be scaffolded.");
+    }
+    return new self('src', $package_name, $source, $source_full_path);
+  }
+
+  /**
+   * Converts the relative destination path into an absolute path.
+   *
+   * Any placeholders in the destination path, e.g. '[web-root]', will be
+   * replaced using the provided location replacements interpolator.
+   *
+   * @param string $package_name
+   *   The name of the package defining the destination path.
+   * @param string $destination
+   *   The relative path to the destination file being scaffolded.
+   * @param \Drupal\Composer\Plugin\Scaffold\Interpolator $location_replacements
+   *   Interpolator that includes the [web-root] and any other available
+   *   placeholder replacements.
+   *
+   * @return self
+   *   Object wrapping the relative and absolute path to the destination file.
+   */
+  public static function destinationPath($package_name, $destination, Interpolator $location_replacements) {
+    $dest_full_path = $location_replacements->interpolate($destination);
+    return new self('dest', $package_name, $destination, $dest_full_path);
+  }
+
+  /**
+   * Adds data about the relative and full path to the provided interpolator.
+   *
+   * @param \Drupal\Composer\Plugin\Scaffold\Interpolator $interpolator
+   *   Interpolator to add data to.
+   * @param string $name_prefix
+   *   (optional) Prefix to add before -rel-path and -full-path item names.
+   *   Defaults to path type provided when constructing this object.
+   */
+  public function addInterpolationData(Interpolator $interpolator, $name_prefix = '') {
+    if (empty($name_prefix)) {
+      $name_prefix = $this->type;
+    }
+    $data = [
+      'package-name' => $this->packageName(),
+      "{$name_prefix}-rel-path" => $this->relativePath(),
+      "{$name_prefix}-full-path" => $this->fullPath(),
+    ];
+    $interpolator->addData($data);
+  }
+
+  /**
+   * Interpolate a string using the data from this scaffold file info.
+   *
+   * @param string $name_prefix
+   *   (optional) Prefix to add before -rel-path and -full-path item names.
+   *   Defaults to path type provided when constructing this object.
+   *
+   * @return \Drupal\Composer\Plugin\Scaffold\Interpolator
+   *   An interpolator for making string replacements.
+   */
+  public function getInterpolator($name_prefix = '') {
+    $interpolator = new Interpolator();
+    $this->addInterpolationData($interpolator, $name_prefix);
+    return $interpolator;
+  }
+
+}
diff --git a/vendor/drupal/core-composer-scaffold/ScaffoldOptions.php b/vendor/drupal/core-composer-scaffold/ScaffoldOptions.php
new file mode 100644
index 0000000000000000000000000000000000000000..05cd864245de570c088624e7e0a19c3cf441944b
--- /dev/null
+++ b/vendor/drupal/core-composer-scaffold/ScaffoldOptions.php
@@ -0,0 +1,203 @@
+<?php
+
+namespace Drupal\Composer\Plugin\Scaffold;
+
+/**
+ * Per-project options from the 'extras' section of the composer.json file.
+ *
+ * Projects that describe scaffold files do so via their scaffold options. This
+ * data is pulled from the 'drupal-scaffold' portion of the extras section of
+ * the project data.
+ *
+ * @internal
+ */
+class ScaffoldOptions {
+
+  /**
+   * The raw data from the 'extras' section of the top-level composer.json file.
+   *
+   * @var array
+   */
+  protected $options = [];
+
+  /**
+   * ScaffoldOptions constructor.
+   *
+   * @param array $options
+   *   The scaffold options taken from the 'drupal-scaffold' section.
+   */
+  protected function __construct(array $options) {
+    $this->options = $options + [
+      "allowed-packages" => [],
+      "locations" => [],
+      "symlink" => FALSE,
+      "file-mapping" => [],
+    ];
+
+    // Define any default locations.
+    $this->options['locations'] += [
+      'project-root' => '.',
+      'web-root' => '.',
+    ];
+  }
+
+  /**
+   * Determines if the provided 'extras' section has scaffold options.
+   *
+   * @param array $extras
+   *   The contents of the 'extras' section.
+   *
+   * @return bool
+   *   True if scaffold options have been declared
+   */
+  public static function hasOptions(array $extras) {
+    return array_key_exists('drupal-scaffold', $extras);
+  }
+
+  /**
+   * Creates a scaffold options object.
+   *
+   * @param array $extras
+   *   The contents of the 'extras' section.
+   *
+   * @return self
+   *   The scaffold options object representing the provided scaffold options
+   */
+  public static function create(array $extras) {
+    $options = static::hasOptions($extras) ? $extras['drupal-scaffold'] : [];
+    return new self($options);
+  }
+
+  /**
+   * Creates a new scaffold options object with some values overridden.
+   *
+   * @param array $options
+   *   Override values.
+   *
+   * @return self
+   *   The scaffold options object representing the provided scaffold options
+   */
+  protected function override(array $options) {
+    return new self($options + $this->options);
+  }
+
+  /**
+   * Creates a new scaffold options object with an overridden 'symlink' value.
+   *
+   * @param bool $symlink
+   *   Whether symlinking should be enabled or not.
+   *
+   * @return self
+   *   The scaffold options object representing the provided scaffold options
+   */
+  public function overrideSymlink($symlink) {
+    return $this->override(['symlink' => $symlink]);
+  }
+
+  /**
+   * Determines whether any allowed packages were defined.
+   *
+   * @return bool
+   *   Whether there are allowed packages
+   */
+  public function hasAllowedPackages() {
+    return !empty($this->allowedPackages());
+  }
+
+  /**
+   * Gets allowed packages from these options.
+   *
+   * @return array
+   *   The list of allowed packages
+   */
+  public function allowedPackages() {
+    return $this->options['allowed-packages'];
+  }
+
+  /**
+   * Gets the location mapping table, e.g. 'webroot' => './'.
+   *
+   * @return array
+   *   A map of name : location values
+   */
+  public function locations() {
+    return $this->options['locations'];
+  }
+
+  /**
+   * Determines whether a given named location is defined.
+   *
+   * @param string $name
+   *   The location name to search for.
+   *
+   * @return bool
+   *   True if the specified named location exist.
+   */
+  protected function hasLocation($name) {
+    return array_key_exists($name, $this->locations());
+  }
+
+  /**
+   * Gets a specific named location.
+   *
+   * @param string $name
+   *   The name of the location to fetch.
+   *
+   * @return string
+   *   The value of the provided named location
+   */
+  public function getLocation($name) {
+    return $this->hasLocation($name) ? $this->locations()[$name] : FALSE;
+  }
+
+  /**
+   * Determines if symlink mode is set.
+   *
+   * @return bool
+   *   Whether or not 'symlink' mode
+   */
+  public function symlink() {
+    return $this->options['symlink'];
+  }
+
+  /**
+   * Determines if there are file mappings.
+   *
+   * @return bool
+   *   Whether or not the scaffold options contain any file mappings
+   */
+  public function hasFileMapping() {
+    return !empty($this->fileMapping());
+  }
+
+  /**
+   * Returns the actual file mappings.
+   *
+   * @return array
+   *   File mappings for just this config type.
+   */
+  public function fileMapping() {
+    return $this->options['file-mapping'];
+  }
+
+  /**
+   * Determines if there is defined a value for the 'gitignore' option.
+   *
+   * @return bool
+   *   Whether or not there is a 'gitignore' option setting
+   */
+  public function hasGitIgnore() {
+    return isset($this->options['gitignore']);
+  }
+
+  /**
+   * Gets the value of the 'gitignore' option.
+   *
+   * @return bool
+   *   The 'gitignore' option, or TRUE if undefined.
+   */
+  public function gitIgnore() {
+    return $this->hasGitIgnore() ? $this->options['gitignore'] : TRUE;
+  }
+
+}
diff --git a/vendor/drupal/core-composer-scaffold/TESTING.txt b/vendor/drupal/core-composer-scaffold/TESTING.txt
new file mode 100644
index 0000000000000000000000000000000000000000..429c3f7a4514e63d70c8d656c32eb6f2dcd0a151
--- /dev/null
+++ b/vendor/drupal/core-composer-scaffold/TESTING.txt
@@ -0,0 +1,18 @@
+HOW-TO: Test this Drupal composer plugin
+
+In order to test this plugin, you'll need to get the entire Drupal repo and
+run the tests there.
+
+You'll find the tests under core/tests/Drupal/Tests/Composer/Plugin.
+
+You can get the full Drupal repo here:
+https://www.drupal.org/project/drupal/git-instructions
+
+You can find more information about running PHPUnit tests with Drupal here:
+https://www.drupal.org/node/2116263
+
+Each component in the Drupal\Composer\Plugin namespace has its own annotated test
+group. You can use this group to run only the tests for this component. Like
+this:
+
+$ ./vendor/bin/phpunit -c core --group Scaffold
diff --git a/vendor/drupal/core-composer-scaffold/composer.json b/vendor/drupal/core-composer-scaffold/composer.json
new file mode 100644
index 0000000000000000000000000000000000000000..ca9d6d7b48d2e1ad6f70fa833468769376d00d94
--- /dev/null
+++ b/vendor/drupal/core-composer-scaffold/composer.json
@@ -0,0 +1,32 @@
+{
+  "name": "drupal/core-composer-scaffold",
+  "description": "A flexible Composer project scaffold builder.",
+  "type": "composer-plugin",
+  "keywords": ["drupal"],
+  "homepage": "https://www.drupal.org/project/drupal",
+  "license": "GPL-2.0-or-later",
+  "require": {
+    "composer-plugin-api": "^1 || ^2",
+    "php": ">=7.3.0"
+  },
+  "conflict": {
+    "drupal-composer/drupal-scaffold": "*"
+  },
+  "autoload": {
+    "psr-4": {
+      "Drupal\\Composer\\Plugin\\Scaffold\\": ""
+    }
+  },
+  "extra": {
+    "class": "Drupal\\Composer\\Plugin\\Scaffold\\Plugin",
+    "branch-alias": {
+      "dev-master": "1.0.x-dev"
+    }
+  },
+  "config": {
+    "sort-packages": true
+  },
+  "require-dev": {
+    "composer/composer": "^1.8@stable"
+  }
+}
diff --git a/vendor/drush/drush/.scenarios.lock/php5/composer.json b/vendor/drush/drush/.scenarios.lock/php5/composer.json
index 65c4379781ef98cda364466c749bee1a51922278..a72af60b86c9feab7ffb42e14890ff4014198792 100644
--- a/vendor/drush/drush/.scenarios.lock/php5/composer.json
+++ b/vendor/drush/drush/.scenarios.lock/php5/composer.json
@@ -70,7 +70,7 @@
         "psr/log": "~1.0",
         "psy/psysh": "~0.6",
         "symfony/console": "^3.4",
-        "symfony/event-dispatcher": "^3.4",
+        "symfony/event-dispatcher": "^3.4 || ^4.0",
         "symfony/finder": "^3.4 || ^4.0",
         "symfony/process": "^3.4",
         "symfony/var-dumper": "^3.4 || ^4.0",
diff --git a/vendor/drush/drush/.scenarios.lock/php5/composer.lock b/vendor/drush/drush/.scenarios.lock/php5/composer.lock
index 7d9fd0058858133dd4bda46f91dcb400012326c7..c375fa418e7781f9e9d7cbb240bbf49991b044b0 100644
--- a/vendor/drush/drush/.scenarios.lock/php5/composer.lock
+++ b/vendor/drush/drush/.scenarios.lock/php5/composer.lock
@@ -4,20 +4,20 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "This file is @generated automatically"
     ],
-    "content-hash": "8266db40dd17b66e6932589b0401b424",
+    "content-hash": "591724784b2d04a184cc2b0de5e83fd2",
     "packages": [
         {
             "name": "chi-teck/drupal-code-generator",
-            "version": "1.29.2",
+            "version": "1.30.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/Chi-teck/drupal-code-generator.git",
-                "reference": "0d2cb5299e5b1361bab6c8b9ee6531e95d68df95"
+                "reference": "1da9f06843b6bf2b0e7d28fea4b6c1d79aead197"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/Chi-teck/drupal-code-generator/zipball/0d2cb5299e5b1361bab6c8b9ee6531e95d68df95",
-                "reference": "0d2cb5299e5b1361bab6c8b9ee6531e95d68df95",
+                "url": "https://api.github.com/repos/Chi-teck/drupal-code-generator/zipball/1da9f06843b6bf2b0e7d28fea4b6c1d79aead197",
+                "reference": "1da9f06843b6bf2b0e7d28fea4b6c1d79aead197",
                 "shasum": ""
             },
             "require": {
@@ -25,7 +25,7 @@
                 "php": ">=5.5.9",
                 "symfony/console": "^3.4 || ^4.0",
                 "symfony/filesystem": "^2.7 || ^3.4 || ^4.0",
-                "twig/twig": "^1.35"
+                "twig/twig": "^1.38.2 || ^2.10"
             },
             "bin": [
                 "bin/dcg"
@@ -49,7 +49,7 @@
                 "GPL-2.0-or-later"
             ],
             "description": "Drupal code generator",
-            "time": "2019-06-02T07:36:18+00:00"
+            "time": "2019-06-29T10:29:45+00:00"
         },
         {
             "name": "composer/semver",
@@ -550,16 +550,16 @@
         },
         {
             "name": "consolidation/robo",
-            "version": "1.4.9",
+            "version": "1.4.10",
             "source": {
                 "type": "git",
                 "url": "https://github.com/consolidation/Robo.git",
-                "reference": "5c6b3840a45afda1cbffbb3bb1f94dd5f9f83345"
+                "reference": "e5a6ca64cf1324151873672e484aceb21f365681"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/consolidation/Robo/zipball/5c6b3840a45afda1cbffbb3bb1f94dd5f9f83345",
-                "reference": "5c6b3840a45afda1cbffbb3bb1f94dd5f9f83345",
+                "url": "https://api.github.com/repos/consolidation/Robo/zipball/e5a6ca64cf1324151873672e484aceb21f365681",
+                "reference": "e5a6ca64cf1324151873672e484aceb21f365681",
                 "shasum": ""
             },
             "require": {
@@ -654,7 +654,7 @@
                 }
             ],
             "description": "Modern task runner",
-            "time": "2019-03-19T18:07:19+00:00"
+            "time": "2019-07-29T15:40:50+00:00"
         },
         {
             "name": "consolidation/self-update",
@@ -780,16 +780,16 @@
         },
         {
             "name": "consolidation/site-process",
-            "version": "2.0.3",
+            "version": "2.0.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/consolidation/site-process.git",
-                "reference": "e25265f4a48c13284ebb6f9e0906ecd415d451df"
+                "reference": "e159f849abce696c2f5081c149a1f8ec8717dd97"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/consolidation/site-process/zipball/e25265f4a48c13284ebb6f9e0906ecd415d451df",
-                "reference": "e25265f4a48c13284ebb6f9e0906ecd415d451df",
+                "url": "https://api.github.com/repos/consolidation/site-process/zipball/e159f849abce696c2f5081c149a1f8ec8717dd97",
+                "reference": "e159f849abce696c2f5081c149a1f8ec8717dd97",
                 "shasum": ""
             },
             "require": {
@@ -838,17 +838,17 @@
                 "MIT"
             ],
             "authors": [
-                {
-                    "name": "Moshe Weitzman",
-                    "email": "weitzman@tejasa.com"
-                },
                 {
                     "name": "Greg Anderson",
                     "email": "greg.1.anderson@greenknowe.org"
+                },
+                {
+                    "name": "Moshe Weitzman",
+                    "email": "weitzman@tejasa.com"
                 }
             ],
             "description": "A thin wrapper around the Symfony Process Component that allows applications to use the Site Alias library to specify the target for a remote call.",
-            "time": "2019-06-04T22:23:52+00:00"
+            "time": "2019-08-12T23:10:26+00:00"
         },
         {
             "name": "container-interop/container-interop",
@@ -1632,16 +1632,16 @@
         },
         {
             "name": "symfony/filesystem",
-            "version": "v3.4.28",
+            "version": "v3.4.30",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/filesystem.git",
-                "reference": "acf99758b1df8e9295e6b85aa69f294565c9fedb"
+                "reference": "70adda061ef83bb7def63a17953dc41f203308a7"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/filesystem/zipball/acf99758b1df8e9295e6b85aa69f294565c9fedb",
-                "reference": "acf99758b1df8e9295e6b85aa69f294565c9fedb",
+                "url": "https://api.github.com/repos/symfony/filesystem/zipball/70adda061ef83bb7def63a17953dc41f203308a7",
+                "reference": "70adda061ef83bb7def63a17953dc41f203308a7",
                 "shasum": ""
             },
             "require": {
@@ -1678,20 +1678,20 @@
             ],
             "description": "Symfony Filesystem Component",
             "homepage": "https://symfony.com",
-            "time": "2019-02-04T21:34:32+00:00"
+            "time": "2019-06-23T09:29:17+00:00"
         },
         {
             "name": "symfony/finder",
-            "version": "v3.4.28",
+            "version": "v3.4.30",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/finder.git",
-                "reference": "fa5d962a71f2169dfe1cbae217fa5a2799859f6c"
+                "reference": "1e762fdf73ace6ceb42ba5a6ca280be86082364a"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/finder/zipball/fa5d962a71f2169dfe1cbae217fa5a2799859f6c",
-                "reference": "fa5d962a71f2169dfe1cbae217fa5a2799859f6c",
+                "url": "https://api.github.com/repos/symfony/finder/zipball/1e762fdf73ace6ceb42ba5a6ca280be86082364a",
+                "reference": "1e762fdf73ace6ceb42ba5a6ca280be86082364a",
                 "shasum": ""
             },
             "require": {
@@ -1727,7 +1727,7 @@
             ],
             "description": "Symfony Finder Component",
             "homepage": "https://symfony.com",
-            "time": "2019-05-24T12:25:55+00:00"
+            "time": "2019-06-28T08:02:59+00:00"
         },
         {
             "name": "symfony/polyfill-ctype",
@@ -1897,16 +1897,16 @@
         },
         {
             "name": "symfony/var-dumper",
-            "version": "v3.4.28",
+            "version": "v3.4.30",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/var-dumper.git",
-                "reference": "ca5fef348a0440411bbca0f9ec14e9a11625bd6a"
+                "reference": "b6a45abfe961183a4c26fad98a6112c487e983bf"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/var-dumper/zipball/ca5fef348a0440411bbca0f9ec14e9a11625bd6a",
-                "reference": "ca5fef348a0440411bbca0f9ec14e9a11625bd6a",
+                "url": "https://api.github.com/repos/symfony/var-dumper/zipball/b6a45abfe961183a4c26fad98a6112c487e983bf",
+                "reference": "b6a45abfe961183a4c26fad98a6112c487e983bf",
                 "shasum": ""
             },
             "require": {
@@ -1962,7 +1962,7 @@
                 "debug",
                 "dump"
             ],
-            "time": "2019-05-01T09:52:10+00:00"
+            "time": "2019-07-26T11:29:23+00:00"
         },
         {
             "name": "symfony/yaml",
@@ -2067,19 +2067,19 @@
             "authors": [
                 {
                     "name": "Fabien Potencier",
+                    "role": "Lead Developer",
                     "email": "fabien@symfony.com",
-                    "homepage": "http://fabien.potencier.org",
-                    "role": "Lead Developer"
+                    "homepage": "http://fabien.potencier.org"
                 },
                 {
                     "name": "Armin Ronacher",
-                    "email": "armin.ronacher@active-4.com",
-                    "role": "Project Founder"
+                    "role": "Project Founder",
+                    "email": "armin.ronacher@active-4.com"
                 },
                 {
                     "name": "Twig Team",
-                    "homepage": "https://twig.symfony.com/contributors",
-                    "role": "Contributors"
+                    "role": "Contributors",
+                    "homepage": "https://twig.symfony.com/contributors"
                 }
             ],
             "description": "Twig, the flexible, fast, and secure template language for PHP",
@@ -2091,18 +2091,21 @@
         },
         {
             "name": "webflo/drupal-finder",
-            "version": "1.1.0",
+            "version": "1.2.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/webflo/drupal-finder.git",
-                "reference": "8a7886c575d6eaa67a425dceccc84e735c0b9637"
+                "reference": "123e248e14ee8dd3fbe89fb5a733a6cf91f5820e"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/webflo/drupal-finder/zipball/8a7886c575d6eaa67a425dceccc84e735c0b9637",
-                "reference": "8a7886c575d6eaa67a425dceccc84e735c0b9637",
+                "url": "https://api.github.com/repos/webflo/drupal-finder/zipball/123e248e14ee8dd3fbe89fb5a733a6cf91f5820e",
+                "reference": "123e248e14ee8dd3fbe89fb5a733a6cf91f5820e",
                 "shasum": ""
             },
+            "require": {
+                "ext-json": "*"
+            },
             "require-dev": {
                 "mikey179/vfsstream": "^1.6",
                 "phpunit/phpunit": "^4.8"
@@ -2124,7 +2127,7 @@
                 }
             ],
             "description": "Helper class to locate a Drupal installation from a given path.",
-            "time": "2017-10-24T08:12:11+00:00"
+            "time": "2019-08-02T08:06:18+00:00"
         },
         {
             "name": "webmozart/assert",
@@ -2283,12 +2286,12 @@
             "source": {
                 "type": "git",
                 "url": "https://github.com/minkphp/Mink.git",
-                "reference": "6d637f7af4816c26ad8a943da2e3f7eef1231bea"
+                "reference": "a534fe7dac9525e8e10ca68e737c3d7e5058ec83"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/minkphp/Mink/zipball/6d637f7af4816c26ad8a943da2e3f7eef1231bea",
-                "reference": "6d637f7af4816c26ad8a943da2e3f7eef1231bea",
+                "url": "https://api.github.com/repos/minkphp/Mink/zipball/a534fe7dac9525e8e10ca68e737c3d7e5058ec83",
+                "reference": "a534fe7dac9525e8e10ca68e737c3d7e5058ec83",
                 "shasum": ""
             },
             "require": {
@@ -2296,7 +2299,7 @@
                 "symfony/css-selector": "^2.7|^3.0|^4.0"
             },
             "require-dev": {
-                "symfony/phpunit-bridge": "^3.3|^4.0"
+                "symfony/phpunit-bridge": "^4.2"
             },
             "suggest": {
                 "behat/mink-browserkit-driver": "extremely fast headless driver for Symfony\\Kernel-based apps (Sf2, Silex)",
@@ -2334,7 +2337,7 @@
                 "testing",
                 "web"
             ],
-            "time": "2019-05-14T09:56:49+00:00"
+            "time": "2019-07-15T12:45:29+00:00"
         },
         {
             "name": "behat/mink-browserkit-driver",
@@ -3238,11 +3241,11 @@
         },
         {
             "name": "drupal/coder",
-            "version": "8.3.5",
+            "version": "8.3.6",
             "source": {
                 "type": "git",
-                "url": "https://git.drupal.org/project/coder.git",
-                "reference": "35277fc8675b6a2cbb194f8880145a9c85c845c4"
+                "url": "https://git.drupalcode.org/project/coder.git",
+                "reference": "4337ddf58d28dbdee4e1367bf71ee13393ab9820"
             },
             "require": {
                 "ext-mbstring": "*",
@@ -3271,7 +3274,7 @@
                 "phpcs",
                 "standards"
             ],
-            "time": "2019-06-14T15:06:06+00:00"
+            "time": "2019-08-09T09:27:26+00:00"
         },
         {
             "name": "drupal/core",
@@ -4329,24 +4332,24 @@
             "time": "2017-09-04T12:26:28+00:00"
         },
         {
-            "name": "mikey179/vfsStream",
-            "version": "v1.6.6",
+            "name": "mikey179/vfsstream",
+            "version": "v1.6.7",
             "source": {
                 "type": "git",
                 "url": "https://github.com/bovigo/vfsStream.git",
-                "reference": "095238a0711c974ae5b4ebf4c4534a23f3f6c99d"
+                "reference": "2b544ac3a21bcc4dde5d90c4ae8d06f4319055fb"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/bovigo/vfsStream/zipball/095238a0711c974ae5b4ebf4c4534a23f3f6c99d",
-                "reference": "095238a0711c974ae5b4ebf4c4534a23f3f6c99d",
+                "url": "https://api.github.com/repos/bovigo/vfsStream/zipball/2b544ac3a21bcc4dde5d90c4ae8d06f4319055fb",
+                "reference": "2b544ac3a21bcc4dde5d90c4ae8d06f4319055fb",
                 "shasum": ""
             },
             "require": {
                 "php": ">=5.3.0"
             },
             "require-dev": {
-                "phpunit/phpunit": "~4.5"
+                "phpunit/phpunit": "^4.5|^5.0"
             },
             "type": "library",
             "extra": {
@@ -4366,13 +4369,13 @@
             "authors": [
                 {
                     "name": "Frank Kleine",
-                    "homepage": "http://frankkleine.de/",
-                    "role": "Developer"
+                    "role": "Developer",
+                    "homepage": "http://frankkleine.de/"
                 }
             ],
             "description": "Virtual file system to mock the real file system in unit tests.",
             "homepage": "http://vfs.bovigo.org/",
-            "time": "2019-04-08T13:54:32+00:00"
+            "time": "2019-08-01T01:38:37+00:00"
         },
         {
             "name": "paragonie/random_compat",
@@ -4681,8 +4684,8 @@
             "authors": [
                 {
                     "name": "Sebastian Bergmann",
-                    "email": "sb@sebastian-bergmann.de",
-                    "role": "lead"
+                    "role": "lead",
+                    "email": "sb@sebastian-bergmann.de"
                 }
             ],
             "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
@@ -4939,8 +4942,8 @@
             "authors": [
                 {
                     "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de",
-                    "role": "lead"
+                    "role": "lead",
+                    "email": "sebastian@phpunit.de"
                 }
             ],
             "description": "The PHP Unit Testing framework.",
@@ -5423,8 +5426,8 @@
             "authors": [
                 {
                     "name": "Sebastian Bergmann",
-                    "email": "sebastian@phpunit.de",
-                    "role": "lead"
+                    "role": "lead",
+                    "email": "sebastian@phpunit.de"
                 }
             ],
             "description": "Library that helps with managing the version number of Git-hosted PHP projects",
@@ -5592,16 +5595,16 @@
         },
         {
             "name": "symfony/browser-kit",
-            "version": "v3.4.28",
+            "version": "v3.4.30",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/browser-kit.git",
-                "reference": "7f2b0843d5045468225f9a9b27a0cb171ae81828"
+                "reference": "53266c9a1536e2dc673eb1efb6a6142ef84c6282"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/browser-kit/zipball/7f2b0843d5045468225f9a9b27a0cb171ae81828",
-                "reference": "7f2b0843d5045468225f9a9b27a0cb171ae81828",
+                "url": "https://api.github.com/repos/symfony/browser-kit/zipball/53266c9a1536e2dc673eb1efb6a6142ef84c6282",
+                "reference": "53266c9a1536e2dc673eb1efb6a6142ef84c6282",
                 "shasum": ""
             },
             "require": {
@@ -5645,7 +5648,7 @@
             ],
             "description": "Symfony BrowserKit Component",
             "homepage": "https://symfony.com",
-            "time": "2019-04-06T19:33:58+00:00"
+            "time": "2019-06-09T14:27:26+00:00"
         },
         {
             "name": "symfony/class-loader",
@@ -5705,7 +5708,7 @@
         },
         {
             "name": "symfony/css-selector",
-            "version": "v3.4.28",
+            "version": "v3.4.30",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/css-selector.git",
@@ -5739,14 +5742,14 @@
                 "MIT"
             ],
             "authors": [
-                {
-                    "name": "Jean-François Simon",
-                    "email": "jeanfrancois.simon@sensiolabs.com"
-                },
                 {
                     "name": "Fabien Potencier",
                     "email": "fabien@symfony.com"
                 },
+                {
+                    "name": "Jean-François Simon",
+                    "email": "jeanfrancois.simon@sensiolabs.com"
+                },
                 {
                     "name": "Symfony Community",
                     "homepage": "https://symfony.com/contributors"
@@ -5829,16 +5832,16 @@
         },
         {
             "name": "symfony/dom-crawler",
-            "version": "v3.4.28",
+            "version": "v3.4.30",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/dom-crawler.git",
-                "reference": "d40023c057393fb25f7ca80af2a56ed948c45a09"
+                "reference": "adb96e63af6fb0cc721cc69861001d60d0133d0c"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/d40023c057393fb25f7ca80af2a56ed948c45a09",
-                "reference": "d40023c057393fb25f7ca80af2a56ed948c45a09",
+                "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/adb96e63af6fb0cc721cc69861001d60d0133d0c",
+                "reference": "adb96e63af6fb0cc721cc69861001d60d0133d0c",
                 "shasum": ""
             },
             "require": {
@@ -5882,7 +5885,7 @@
             ],
             "description": "Symfony DomCrawler Component",
             "homepage": "https://symfony.com",
-            "time": "2019-02-23T15:06:07+00:00"
+            "time": "2019-05-30T15:47:52+00:00"
         },
         {
             "name": "symfony/http-foundation",
@@ -6029,16 +6032,16 @@
         },
         {
             "name": "symfony/phpunit-bridge",
-            "version": "v3.4.28",
+            "version": "v3.4.30",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/phpunit-bridge.git",
-                "reference": "a43a2f6c465a2d99635fea0addbebddc3864ad97"
+                "reference": "8f1f27c186496128b861810809c27d956d342417"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/a43a2f6c465a2d99635fea0addbebddc3864ad97",
-                "reference": "a43a2f6c465a2d99635fea0addbebddc3864ad97",
+                "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/8f1f27c186496128b861810809c27d956d342417",
+                "reference": "8f1f27c186496128b861810809c27d956d342417",
                 "shasum": ""
             },
             "require": {
@@ -6090,7 +6093,7 @@
             ],
             "description": "Symfony PHPUnit Bridge",
             "homepage": "https://symfony.com",
-            "time": "2019-04-16T09:03:16+00:00"
+            "time": "2019-07-05T06:33:19+00:00"
         },
         {
             "name": "symfony/polyfill-iconv",
diff --git a/vendor/drush/drush/.travis.yml b/vendor/drush/drush/.travis.yml
index 3b88416f577ea6a157f995394bf67c3f844b6c3b..0aa8df0a6bfbf446e618aa20861c52bab5851079 100644
--- a/vendor/drush/drush/.travis.yml
+++ b/vendor/drush/drush/.travis.yml
@@ -2,6 +2,7 @@
 branches:
   only:
     - master
+    - 9.x
     - 8.x
     - 7.x
     - 6.x
diff --git a/vendor/drush/drush/composer.json b/vendor/drush/drush/composer.json
index d560da1e54a51cdfe008de6bcf90aca890174df1..6762905e03c45ea0627522bdb40430244e89cf12 100644
--- a/vendor/drush/drush/composer.json
+++ b/vendor/drush/drush/composer.json
@@ -46,7 +46,7 @@
     "psr/log": "~1.0",
     "psy/psysh": "~0.6",
     "symfony/console": "^3.4",
-    "symfony/event-dispatcher": "^3.4",
+    "symfony/event-dispatcher": "^3.4 || ^4.0",
     "symfony/finder": "^3.4 || ^4.0",
     "symfony/process": "^3.4",
     "symfony/var-dumper": "^3.4 || ^4.0",
diff --git a/vendor/drush/drush/composer.lock b/vendor/drush/drush/composer.lock
index 45b1460fcae034c41c2a37c280e178100f1a9dbd..e7bf2d9540f2fe06fc20b05504ae07ad16b6ed64 100644
--- a/vendor/drush/drush/composer.lock
+++ b/vendor/drush/drush/composer.lock
@@ -4,7 +4,7 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "This file is @generated automatically"
     ],
-    "content-hash": "69702ffaac43e1fe89a91880704d07f6",
+    "content-hash": "a65aaf0ce53f8027c91fc0bc277d1b55",
     "packages": [
         {
             "name": "chi-teck/drupal-code-generator",
@@ -3244,7 +3244,7 @@
             "version": "8.3.3",
             "source": {
                 "type": "git",
-                "url": "https://git.drupal.org/project/coder.git",
+                "url": "https://git.drupalcode.org/project/coder.git",
                 "reference": "a33d3388fb2e1d94bd2aee36a8ff79186e9d8f43"
             },
             "require": {
@@ -4408,7 +4408,7 @@
             "time": "2017-09-04T12:26:28+00:00"
         },
         {
-            "name": "mikey179/vfsStream",
+            "name": "mikey179/vfsstream",
             "version": "v1.6.6",
             "source": {
                 "type": "git",
@@ -4445,8 +4445,8 @@
             "authors": [
                 {
                     "name": "Frank Kleine",
-                    "homepage": "http://frankkleine.de/",
-                    "role": "Developer"
+                    "role": "Developer",
+                    "homepage": "http://frankkleine.de/"
                 }
             ],
             "description": "Virtual file system to mock the real file system in unit tests.",
@@ -7263,8 +7263,8 @@
             "authors": [
                 {
                     "name": "Arne Blankerts",
-                    "email": "arne@blankerts.de",
-                    "role": "Developer"
+                    "role": "Developer",
+                    "email": "arne@blankerts.de"
                 }
             ],
             "description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
diff --git a/vendor/drush/drush/drush.info b/vendor/drush/drush/drush.info
index f5951dedb972afb72a9559eedad23fdd100a02ff..4c73b42b8a4c5fff0c6fd4fba6985424193d1b10 100644
--- a/vendor/drush/drush/drush.info
+++ b/vendor/drush/drush/drush.info
@@ -1 +1 @@
-drush_version=9.7.1
+drush_version=9.7.2
diff --git a/vendor/drush/drush/examples/Commands/SiteAliasAlterCommands.php b/vendor/drush/drush/examples/Commands/SiteAliasAlterCommands.php
index 28ebdcdc26481b958362cab728c8edaa0d4d1cfe..a0f0c7e96bd0db863be1df8ef94098da58782c96 100644
--- a/vendor/drush/drush/examples/Commands/SiteAliasAlterCommands.php
+++ b/vendor/drush/drush/examples/Commands/SiteAliasAlterCommands.php
@@ -34,6 +34,19 @@ public function alter(InputInterface $input, AnnotationData $annotationData)
 
             // Change the SSH user.
             $input->setOption('remote-user', 'mw2');
+
+            // Test to see if specific environment really exists in wildcard
+            // aliases, but only if the target is a specific host.
+            $host = $self->get('host');
+            if (preg_match('#\.myserver.com$#', $host)) {
+                $ip = gethostbyname($host);
+                // If the return value of gethostbyname equals its input parameter,
+                // that indicates failure.
+                if ($host == $ip) {
+                    $aliasName = $self->name();
+                    throw new \Exception("The alias $aliasName refers to an environment that does not exist.");
+                }
+            }
         }
     }
 }
diff --git a/vendor/drush/drush/examples/Commands/art/sandwich.txt b/vendor/drush/drush/examples/Commands/art/sandwich.txt
deleted file mode 100644
index dac8ca02e43e779dd39ab6ce52c77be4c45836a1..0000000000000000000000000000000000000000
--- a/vendor/drush/drush/examples/Commands/art/sandwich.txt
+++ /dev/null
@@ -1,24 +0,0 @@
- . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
- . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
- . . .  . . . . . . . .:8 ;t;;t;;;;:..:;%SX888@X%t;.. . . . 
- . .  .. . . . . . .%t%;%@%%%%%%%%%%X@8888XS%t;...:;ttt%X. .
- . . .  . . . . . .X:8%X%%%XS%%%%%%%XS%%%%%@%%%%X%%%@%S88 . 
- . . . . . .  .  . X@ @%%%X8X%%%88%%%8X%%%%%%%%%XXt@8@88@. .
- . . . . .  . . .t@tS;%%8XSX%@XSX%@XSS%8@@88X@888X8SS S;S.  
- . . . . . . .@%XS%%%%%S8@X%@8%XXSSXX%S@SSSX888.;@ 888@ . . 
- . . . . . :.8:S%%%XS8X@@X%S@SSSS8SXSXXX%X88X:;@8@:S  88S. .
- . . .  .8%S8%%%%%%8@SSSXXXSXSXSXSXSSS8S888 :@%:%XX:%8%:X:  
- . .  .:8 %%%%@%%8@S%%XXSXSSSS8S@X%XSXX88 ;@X;SX88X8;%X88t. 
- . . 88S%S%%%%8XSSXSX@@S@%XS8@SS%@S%888 88@S:8. .;.@%X:@8;. 
- . .  88.8888888@XX   888888%X%@XX 88SS8@@;S@8.%;8@S%%:8   .
- . .  S%:8 @SSSS8 @@8@8 8 88888888@%S:8:S8 @..%S SXX8888;. .
- . . %:8S8888@88SXS S S::X@.8.8 X%S%8X:X88..% @@.S.%% .;. . 
- .    .XX8@8;;%%t;;;;:@X@888888@888888.88S;8:8  ...    . . .
- . . 8.;;@8@8:%%%%%t.8@%ttX@8@@@S8%8 X8S;X:@; :... . . . . .
- . tS:8@;88.;:8888X8S:.tX88888X88  S8tStS88 :.. . . . . . . 
- .:X;;:t%;tt%888S@8XS888@8.:tt@;88.tXXX8:::... . . . . . . .
- .:X8St:8SXS XS8@X 8.8%888%X8@@X88tXS8t; . . . . . . .  . . 
- .    :8888.88888888X@@X @ X X%S%;88;8t .. . .  . . . . .  .
- ... ..: .    .@@888%St    @ @ 8SS 8:; . . . . . . . . . . .
-   .  .  .      ..::. ..:;;::::. ... . . . . . . . . . . . .
- .. . . .     . .. . .  .  .  .. . . . . . .  . . . . . . . 
diff --git a/vendor/drush/drush/examples/example.drush.yml b/vendor/drush/drush/examples/example.drush.yml
index 0138224fecb9e89f6059ff381fd998eb578da81e..26c1d19b716b137cbbf946e8bc1415d101b014b5 100644
--- a/vendor/drush/drush/examples/example.drush.yml
+++ b/vendor/drush/drush/examples/example.drush.yml
@@ -32,7 +32,7 @@
 
 # Environment variables
 #
-# Your Drush config file may reference environment variables using a syntax like ${env.home}.
+# Your Drush config file may reference environment variables using a syntax like ${env.HOME}.
 # For example see the drush.paths examples below.
 #
 # An alternative way to populate Drush configuration is to define environment variables that
@@ -46,7 +46,7 @@ drush:
     # Specify config files to load.
     config:
       # Load any personal config files. Is silently skipped if not found. Filename must be drush.yml
-      - ${env.home}/.drush/config/drush.yml
+      - ${env.HOME}/.drush/config/drush.yml
 
 
     # Specify folders to search for Drush command files.  These locations
@@ -63,7 +63,7 @@ drush:
     #  include:
     #    'Commands/example_drush_extension': '${env.PWD}'
     include:
-      - '${env.home}/.drush/commands'
+      - '${env.HOME}/.drush/commands'
       - /usr/share/drush/commands
 
     # Specify the folders to search for Drush alias files (*.site.yml). These
@@ -74,7 +74,7 @@ drush:
     # Drush 8 and earlier did a deep search in ~/.drush and /etc/drush when
     # loading alias files.
     alias-path:
-      - '${env.home}/.drush/sites'
+      - '${env.HOME}/.drush/sites'
       - /etc/drush/sites
 
     # Specify a folder where Drush should store its file based caches. If unspecified, defaults to $HOME/.drush.
diff --git a/vendor/drush/drush/examples/example.site.yml b/vendor/drush/drush/examples/example.site.yml
index f759fe76b247d8968c9b85832622331e6e3a16db..aa536ad49e0f07063e2a34846bbd6faee4875ef6 100644
--- a/vendor/drush/drush/examples/example.site.yml
+++ b/vendor/drush/drush/examples/example.site.yml
@@ -78,7 +78,7 @@
 # drush:
 #   paths:
 #     alias-path:
-#       - '${env.home}/.drush/sites'
+#       - '${env.HOME}/.drush/sites'
 #       - /etc/drush/sites
 # @endcode
 #
@@ -194,14 +194,14 @@
 # There are a number of service providers that manage Drupal sites as a
 # service. Drush allows service providers to create collections of site alias
 # files to reference all of the sites available to a single user. In order
-# to so this, a new location must be defined in your Drush configuration
+# to do this, a new location must be defined in your Drush configuration
 # file:
 #
 # @code
 # drush:
 #   paths:
 #     alias-path:
-#       - '${env.home}/.drush/sites/provider-name'
+#       - '${env.HOME}/.drush/sites/provider-name'
 # @endcode
 #
 # Site aliases stored in this directory may then be referenced by its
@@ -222,6 +222,35 @@
 # Add the option `--format=list` to show only the names of each site and
 # environment without also showing the values in each alias record.
 
+# Wildcard Aliases for Service Providers
+#
+# Some service providers that manage Drupal sites allow customers to create
+# multiple "environments" for a site. It is common for these providers to
+# also have a feature to automatically create Drush aliases for all of a
+# user's sites. Rather than write one record for every environment in that
+# site, it is also possible to write a single "wildcard" alias that represents
+# all possible environments. This is possible if the contents of each
+# environment alias are identical save for the name of the environment in
+# one or more values. The variable `${env-name}` will be substituted with the
+# environment name wherever it appears.
+#
+# Example wildcard record:
+#
+# @code
+# # File: remote-example.site.yml
+# '*':
+#   host: ${env-name}.server.domain.com
+#   user: www-admin
+#   root: /path/to/${env-name}
+#   uri: http://${env-name}.remote-example.com
+# @endcode
+#
+# With a wildcard record, any environment name may be used, and will always
+# match. This is not desirable in instances where the specified environment
+# does not exist (e.g. if the user made a typo). An alias alter hook in a
+# policy file may be used to catch these mistakes and report an error.
+# @see SiteAliasAlterCommands for an example on how to do this.
+
 # Developer Information
 #
 # See https://github.com/consolidation/site-alias for more developer
diff --git a/vendor/drush/drush/includes/drush.inc b/vendor/drush/drush/includes/drush.inc
index 1e7f59cf433369c85b8d64e25b1036ca90d7b56e..a8f356ff8d4aeda57745f79105c7eeaa6a8c55fc 100644
--- a/vendor/drush/drush/includes/drush.inc
+++ b/vendor/drush/drush/includes/drush.inc
@@ -696,7 +696,7 @@ function drush_errors_on($errors = null) {
 function drush_memory_limit() {
   $value = trim(ini_get('memory_limit'));
   $last = strtolower($value[strlen($value)-1]);
-  $size = (int) substr($value, 0, -1);
+  $size = (int) rtrim($value, 'GgMmKk');
   switch ($last) {
     case 'g':
       $size *= DRUSH_KILOBYTE;
diff --git a/vendor/drush/drush/src/Boot/DrupalBoot8.php b/vendor/drush/drush/src/Boot/DrupalBoot8.php
index 472ed86ebada10a9166219ed1b2a5fe5ee13fb7c..d2b6ef541ee379042f1cb3d76f3a57da1759ea99 100644
--- a/vendor/drush/drush/src/Boot/DrupalBoot8.php
+++ b/vendor/drush/drush/src/Boot/DrupalBoot8.php
@@ -235,7 +235,7 @@ public function bootstrapDrupalFull(BootstrapManager $manager)
     {
         $this->logger->debug(dt('Start bootstrap of the Drupal Kernel.'));
         $this->kernel->boot();
-        $this->kernel->prepareLegacyRequest($this->getRequest());
+        $this->kernel->preHandle($this->getRequest());
         $this->logger->debug(dt('Finished bootstrap of the Drupal Kernel.'));
 
         parent::bootstrapDrupalFull($manager);
diff --git a/vendor/drush/drush/src/Commands/core/EditCommands.php b/vendor/drush/drush/src/Commands/core/EditCommands.php
index bb3be309529e67dee39e458a5fef04d0188d6dc5..fced23a9e9137163bcb049d3d1c55d205dabdbc5 100644
--- a/vendor/drush/drush/src/Commands/core/EditCommands.php
+++ b/vendor/drush/drush/src/Commands/core/EditCommands.php
@@ -132,7 +132,7 @@ public static function phpIniFiles()
         return $ini_files;
     }
 
-    public static function bashFiles()
+    public function bashFiles()
     {
         $bashFiles = [];
         $home = $this->getConfig()->home();
diff --git a/vendor/drush/drush/src/Commands/core/LoginCommands.php b/vendor/drush/drush/src/Commands/core/LoginCommands.php
index 98c7840d68d78a4292d26ae1fae5a859e59651d7..370732bd108f40c2a6ebccba337f621d59b16baa 100644
--- a/vendor/drush/drush/src/Commands/core/LoginCommands.php
+++ b/vendor/drush/drush/src/Commands/core/LoginCommands.php
@@ -7,6 +7,7 @@
 use Drush\Exec\ExecTrait;
 use Consolidation\SiteAlias\SiteAliasManagerAwareInterface;
 use Consolidation\SiteAlias\SiteAliasManagerAwareTrait;
+use Drupal\Core\Url;
 
 class LoginCommands extends DrushCommands implements SiteAliasManagerAwareInterface
 {
@@ -71,10 +72,20 @@ public function login($path = '', $options = ['name' => null, 'uid' => null, 'ma
                 $account = User::load(1);
             }
 
-            $link = user_pass_reset_url($account). '/login';
-            if ($path) {
-                $link .= '?destination=' . $path;
-            }
+            $timestamp = \Drupal::time()->getRequestTime();
+            $link = Url::fromRoute(
+                'user.reset.login',
+                [
+                  'uid' => $account->id(),
+                  'timestamp' => $timestamp,
+                  'hash' => user_pass_rehash($account, $timestamp),
+                ],
+                [
+                  'absolute' => true,
+                  'query' => $path ? ['destination' => $path] : [],
+                  'language' => \Drupal::languageManager()->getLanguage($account->getPreferredLangcode()),
+                ]
+            )->toString();
         }
         $port = $options['redirect-port'];
         $this->startBrowser($link, false, $port, $options['browser']);
diff --git a/vendor/drush/drush/src/Commands/core/RsyncCommands.php b/vendor/drush/drush/src/Commands/core/RsyncCommands.php
index e7bf12b1b7f24284695fb3555b06c41273d25578..5529fde729a5b93271e1b108e466bb30ca7b80ff 100644
--- a/vendor/drush/drush/src/Commands/core/RsyncCommands.php
+++ b/vendor/drush/drush/src/Commands/core/RsyncCommands.php
@@ -3,6 +3,7 @@
 
 use Consolidation\AnnotatedCommand\CommandData;
 use Consolidation\SiteProcess\ProcessBase;
+use Consolidation\SiteProcess\Util\Escape;
 use Drush\Commands\DrushCommands;
 use Drush\Drush;
 use Drush\Exceptions\UserAbortException;
@@ -62,15 +63,15 @@ public function rsync($source, $target, array $extra, $options = ['exclude-paths
         // Prompt for confirmation. This is destructive.
         if (!$this->getConfig()->simulate()) {
             $replacements = ['!source' => $this->sourceEvaluatedPath->fullyQualifiedPathPreservingTrailingSlash(), '!target' => $this->targetEvaluatedPath->fullyQualifiedPath()];
-            if (!$this->io()->confirm(dt("Replace files in !target with !source?", $replacements))) {
+            if (!$this->io()->confirm(dt("Copy new and override existing files at !target. The source is !source?", $replacements))) {
                 throw new UserAbortException();
             }
         }
 
         $rsync_options = $this->rsyncOptions($options);
         $parameters = array_merge([$rsync_options], $extra);
-        $parameters[] = $this->sourceEvaluatedPath->fullyQualifiedPathPreservingTrailingSlash();
-        $parameters[] = $this->targetEvaluatedPath->fullyQualifiedPath();
+        $parameters[] = Escape::shellArg($this->sourceEvaluatedPath->fullyQualifiedPathPreservingTrailingSlash());
+        $parameters[] = Escape::shellArg($this->targetEvaluatedPath->fullyQualifiedPath());
 
         $ssh_options = $this->getConfig()->get('ssh.options', '');
         $exec = "rsync -e 'ssh $ssh_options'". ' '. implode(' ', array_filter($parameters));
diff --git a/vendor/drush/drush/src/Commands/core/SiteInstallCommands.php b/vendor/drush/drush/src/Commands/core/SiteInstallCommands.php
index 3ddc7ce95e4e2b61e0385c9959e66f9bbdbb92f0..56c35dee4ec5e4924a0730d7d22d17d1da97ae40 100644
--- a/vendor/drush/drush/src/Commands/core/SiteInstallCommands.php
+++ b/vendor/drush/drush/src/Commands/core/SiteInstallCommands.php
@@ -390,7 +390,7 @@ protected function getSitesSubdirFromUri($root, $uri)
         if (file_exists($sites_file)) {
             include $sites_file;
             /** @var array $sites */
-            if (array_key_exists($uri, $sites)) {
+            if (isset($sites) && array_key_exists($uri, $sites)) {
                 return $sites[$uri];
             }
         }
diff --git a/vendor/drush/drush/src/Commands/core/SshCommands.php b/vendor/drush/drush/src/Commands/core/SshCommands.php
index c7036ab8e3d1af7a104903dfb546f2d6de66e4e5..2e8d012822611b53a26a1281cfa99b8c5babebc2 100644
--- a/vendor/drush/drush/src/Commands/core/SshCommands.php
+++ b/vendor/drush/drush/src/Commands/core/SshCommands.php
@@ -11,7 +11,8 @@ class SshCommands extends DrushCommands implements SiteAliasManagerAwareInterfac
     use SiteAliasManagerAwareTrait;
 
     /**
-     * Connect to a Drupal site's server via SSH.
+     * Connect to a Drupal site's server via SSH, and optionally run a shell
+     * command.
      *
      * @command site:ssh
      * @option cd Directory to change to. Defaults to Drupal root.
@@ -23,15 +24,14 @@ class SshCommands extends DrushCommands implements SiteAliasManagerAwareInterfac
      *   Run "ls /tmp" on @prod site.
      * @usage drush @prod ssh git pull
      *   Run "git pull" on the Drupal root directory on the @prod site.
+     * @usage drush ssh git pull
+     *   Run "git pull" on the local Drupal root directory.
      * @aliases ssh,site-ssh
      * @topics docs:aliases
      */
     public function ssh(array $args, $options = ['cd' => self::REQ, 'tty' => false])
     {
         $alias = $this->siteAliasManager()->getSelf();
-        if ($alias->isNone()) {
-            throw new \Exception('A site alias is required. The way you call ssh command has changed to `drush @alias ssh`.');
-        }
 
         if (empty($args)) {
             $args[] = 'bash';
diff --git a/vendor/drush/drush/src/Commands/sql/SqlSyncCommands.php b/vendor/drush/drush/src/Commands/sql/SqlSyncCommands.php
index 4c7e556519e549c9e90b304425749e70f26a00ca..24b3f40e3759e97af8ab94626c422b23a9b97aa5 100644
--- a/vendor/drush/drush/src/Commands/sql/SqlSyncCommands.php
+++ b/vendor/drush/drush/src/Commands/sql/SqlSyncCommands.php
@@ -37,8 +37,6 @@ class SqlSyncCommands extends DrushCommands implements SiteAliasManagerAwareInte
      *   Copy the database from the local site to the site with the alias 'target'.
      * @usage drush sql:sync #prod #dev
      *   Copy the database from the site in /sites/prod to the site in /sites/dev (multisite installation).
-     * @usage drush sql:sync @source @self --database=foo --strict=0
-     *   Copy a secondary database whose $databases key is named 'foo'. Additional options to sql:dump may also be passed.
      * @topics docs:aliases,docs:policy,docs:configuration,docs:example-sync-via-http
      * @throws \Exception
      */
@@ -221,7 +219,7 @@ public function rsync($options, SiteAlias $sourceRecord, SiteAlias $targetRecord
                 $runner = $targetRecord;
             }
             $this->logger()->notice(dt('Copying dump file from source to target.'));
-            $process = $this->processManager()->drush($runner, 'core-rsync', [$sourceRecord->name() . ":$source_dump_path", $targetRecord->name() . ":$target_dump_path"], [], $double_dash_options);
+            $process = $this->processManager()->drush($runner, 'core-rsync', [$sourceRecord->name() . ":$source_dump_path", $targetRecord->name() . ":$target_dump_path"], ['yes' => true], $double_dash_options);
             $process->mustRun($process->showRealtime());
         }
         return $target_dump_path;
diff --git a/vendor/drush/drush/src/Drupal/Commands/core/DrupalCommands.php b/vendor/drush/drush/src/Drupal/Commands/core/DrupalCommands.php
index e1a4486acd19d1e9f1fcfbdf4e56b69ca270e3dd..1c93d6bbb199921cd1665e84e324ed594594271d 100644
--- a/vendor/drush/drush/src/Drupal/Commands/core/DrupalCommands.php
+++ b/vendor/drush/drush/src/Drupal/Commands/core/DrupalCommands.php
@@ -56,10 +56,7 @@ public function __construct(CronInterface $cron, ModuleHandlerInterface $moduleH
      */
     public function cron()
     {
-        $result = $this->getCron()->run();
-        if (!$result) {
-            throw new \Exception(dt('Cron run failed.'));
-        }
+        $this->getCron()->run();
     }
 
     /**
diff --git a/vendor/drush/drush/src/Drupal/Commands/core/QueueCommands.php b/vendor/drush/drush/src/Drupal/Commands/core/QueueCommands.php
index 3bf4b514d29719969fe23fa98895a926c6b6790b..c63c8c58e6ea100d15b60b2f11b3c3333da92b4f 100644
--- a/vendor/drush/drush/src/Drupal/Commands/core/QueueCommands.php
+++ b/vendor/drush/drush/src/Drupal/Commands/core/QueueCommands.php
@@ -57,17 +57,19 @@ public function getQueueService()
      * @param string $name The name of the queue to run, as defined in either hook_queue_info or hook_cron_queue_info.
      * @validate-queue name
      * @option time-limit The maximum number of seconds allowed to run the queue
+     * @option items-limit The maximum number of items allowed to run the queue
      */
-    public function run($name, $options = ['time-limit' => self::REQ])
+    public function run($name, $options = ['time-limit' => self::REQ, 'items-limit' => self::OPT])
     {
         $time_limit = (int) $options['time-limit'];
+        $items_limit = (int) $options['items-limit'];
         $start = microtime(true);
         $worker = $this->getWorkerManager()->createInstance($name);
         $end = time() + $time_limit;
         $queue = $this->getQueue($name);
         $count = 0;
 
-        while ((!$time_limit || time() < $end) && ($item = $queue->claimItem())) {
+        while ((!$time_limit || time() < $end) && (!$items_limit || $count < $items_limit) && ($item = $queue->claimItem())) {
             try {
                 $this->logger()->info(dt('Processing item @id from @name queue.', ['@name' => $name, '@id' => $item->item_id]));
                 $worker->processItem($item->data);
diff --git a/vendor/drush/drush/src/Runtime/ShutdownHandler.php b/vendor/drush/drush/src/Runtime/ShutdownHandler.php
index feb1e17c8793665e3c1d991d23e083caa4b26102..1c40d2a765096d6a598197a05311cd7b7a3a5afe 100644
--- a/vendor/drush/drush/src/Runtime/ShutdownHandler.php
+++ b/vendor/drush/drush/src/Runtime/ShutdownHandler.php
@@ -42,7 +42,7 @@ public function shutdownHandler()
         }
 
         if (!Drush::config()->get(Runtime::DRUSH_RUNTIME_COMPLETED_NAMESPACE)) {
-            Drush::logger()->warning('Drush command terminated abnormally. Check for an exit() in your Drupal site.');
+            Drush::logger()->warning('Drush command terminated abnormally.');
             // Make sure that we will return an error code when we exit,
             // even if the code that got us here did not.
             if (!Runtime::exitCode()) {
diff --git a/vendor/enyo/dropzone/.gitignore b/vendor/enyo/dropzone/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..0a8439dca2ab84fd43eb9a301b85892b16652324
--- /dev/null
+++ b/vendor/enyo/dropzone/.gitignore
@@ -0,0 +1,7 @@
+build
+components
+node_modules
+.DS_Store
+.sass-cache
+_site
+_config.yaml
\ No newline at end of file
diff --git a/vendor/enyo/dropzone/.tagconfig b/vendor/enyo/dropzone/.tagconfig
new file mode 100644
index 0000000000000000000000000000000000000000..4e0cad936f57e70801a0baf03f294e2c18d994f7
--- /dev/null
+++ b/vendor/enyo/dropzone/.tagconfig
@@ -0,0 +1,52 @@
+{
+  "files": [
+    {
+      "name": "src/dropzone.coffee",
+      "regexs": [
+        "Dropzone.version = \"###\""
+      ]
+    },
+    {
+      "name": "dist/dropzone.js",
+      "regexs": [
+        "version = \"###\""
+      ]
+    },
+    {
+      "name": "dist/min/dropzone.min.js",
+      "regexs": [
+        "version=\"###\""
+      ]
+    },
+    {
+      "name": "dist/dropzone-amd-module.js",
+      "regexs": [
+        "version = \"###\""
+      ]
+    },
+    {
+      "name": "dist/min/dropzone-amd-module.min.js",
+      "regexs": [
+        "version=\"###\""
+      ]
+    },
+    {
+      "name": "package.json",
+      "regexs": [
+        "\"version\": \"###\""
+      ]
+    },
+    {
+      "name": "component.json",
+      "regexs": [
+        "\"version\": \"###\""
+      ]
+    },
+    {
+      "name": "bower.json",
+      "regexs": [
+        "\"version\": \"###\""
+      ]
+    }
+  ]
+}
diff --git a/vendor/enyo/dropzone/.travis.yml b/vendor/enyo/dropzone/.travis.yml
new file mode 100644
index 0000000000000000000000000000000000000000..d03586be7a165626e28d552f5829ed32d16da2ec
--- /dev/null
+++ b/vendor/enyo/dropzone/.travis.yml
@@ -0,0 +1,10 @@
+language: node_js
+node_js:
+  - 0.10
+before_install:
+  - npm install -g grunt-cli
+  - gem install sass
+install: npm install
+before_script:
+  - grunt
+script: ./test.sh compiled
\ No newline at end of file
diff --git a/vendor/enyo/dropzone/CONTRIBUTING.md b/vendor/enyo/dropzone/CONTRIBUTING.md
new file mode 100644
index 0000000000000000000000000000000000000000..98aebe02457de8a02db02f76d53a9a4b08f53e91
--- /dev/null
+++ b/vendor/enyo/dropzone/CONTRIBUTING.md
@@ -0,0 +1,6 @@
+Contribute
+==========
+
+DO NOT CREATE PULL REQUESTS ON GITHUB!
+
+I will simply close them. If you want to contribute, please use [gitlab.com](https://gitlab.com/meno/dropzone) instead.
\ No newline at end of file
diff --git a/vendor/enyo/dropzone/LICENSE b/vendor/enyo/dropzone/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..2ec3379e5c0439b2a00ebaf6226a4178d9e6b69a
--- /dev/null
+++ b/vendor/enyo/dropzone/LICENSE
@@ -0,0 +1,12 @@
+License
+
+(The MIT License)
+
+Copyright (c) 2012 Matias Meno <m@tias.me>
+Logo & Website Design (c) 2015 "1910" www.weare1910.com
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/vendor/enyo/dropzone/README.md b/vendor/enyo/dropzone/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..07ef5fa2e47f4db0bef12bad517fddc054d19cfb
--- /dev/null
+++ b/vendor/enyo/dropzone/README.md
@@ -0,0 +1,36 @@
+<img alt="Dropzone.js" src="http://www.dropzonejs.com/images/new-logo.svg" />
+
+Dropzone.js is a light weight JavaScript library that turns an HTML element into a dropzone.
+This means that a user can drag and drop a file onto it, and the file gets uploaded to the server via AJAX.
+
+* * *
+
+_If you want support, please use [stackoverflow](http://stackoverflow.com/) with the `dropzone.js` tag and not the
+GitHub issues tracker. Only post an issue here if you think you discovered a bug or have a feature request._
+
+* * *
+
+**Please read the [contributing guidelines](CONTRIBUTING.md) before you start working on Dropzone!**
+
+<br>
+<div align="center">
+  <a href="https://gitlab.com/meno/dropzone/builds/artifacts/master/download?job=release"><strong>&gt;&gt; Download &lt;&lt;</strong></a>
+</div>
+<br>
+<br>
+
+This is no longer the official repository for Dropzone. I have switched to [gitlab.com](https://gitlab.com/meno/dropzone)
+as the primary location to continue development.
+ 
+There are multiple reasons why I am switching from GitHub to GitLab, but one of the main reasons are the ridiculous
+issue tracker that GitHub is providing, *drowning* me in issues that I am unable to categorise or prioritize properly,
+the lack of proper continuous integration, and build files. I don't want the compiled `.js` files in my repository, and
+people regularly commit changes to the compiled files and create pull requests with them.
+
+I will write a blog post soon, that goes into detail about why I am doing the switch.
+
+This repository will still remain, and always host the most up to date versions of dropzone, but only the distribution
+files!
+
+MIT License
+-----------
diff --git a/vendor/enyo/dropzone/bower.json b/vendor/enyo/dropzone/bower.json
new file mode 100644
index 0000000000000000000000000000000000000000..e90dcd8cf05bd59cff0780140f307024ee6fc528
--- /dev/null
+++ b/vendor/enyo/dropzone/bower.json
@@ -0,0 +1,16 @@
+{
+  "name": "dropzone",
+  "location": "enyo/dropzone",
+  "version": "5.1.1",
+  "description": "Dropzone is an easy to use drag'n'drop library. It supports image previews and shows nice progress bars.",
+  "homepage": "http://www.dropzonejs.com",
+  "main": [
+    "dist/min/dropzone.min.css",
+    "dist/min/dropzone.min.js"
+  ],
+  "ignore": [
+    "*",
+    "!dist",
+    "!dist/**/*"
+  ]
+}
diff --git a/vendor/enyo/dropzone/component.json b/vendor/enyo/dropzone/component.json
new file mode 100644
index 0000000000000000000000000000000000000000..62271cd8cc1f32df51dffdb2a1cc930e30c91ec0
--- /dev/null
+++ b/vendor/enyo/dropzone/component.json
@@ -0,0 +1,10 @@
+{
+  "name": "dropzone",
+  "repo": "enyo/dropzone",
+  "version": "5.1.1",
+  "description": "Handles drag and drop of files for you.",
+  "scripts": [ "index.js", "dist/dropzone.js" ],
+  "styles": [ "dist/basic.css" ],
+  "dependencies": { },
+  "license": "MIT"
+}
diff --git a/vendor/enyo/dropzone/composer.json b/vendor/enyo/dropzone/composer.json
new file mode 100644
index 0000000000000000000000000000000000000000..6be638756151a80d8f50532c5e6eef3e4bda481a
--- /dev/null
+++ b/vendor/enyo/dropzone/composer.json
@@ -0,0 +1,18 @@
+{
+	"name": "enyo/dropzone",
+	"description": "Handles drag and drop of files for you.",
+	"homepage": "http://www.dropzonejs.com",
+	"keywords": [
+		"dragndrop",
+		"drag and drop",
+		"file upload",
+		"upload"
+	],
+	"authors": [{
+		"name": "Matias Meno",
+		"email": "m@tias.me",
+		"homepage": "http://www.matiasmeno.com"
+	}],
+	"license": "MIT",
+	"minimum-stability": "dev"
+}
diff --git a/vendor/enyo/dropzone/dist/basic.css b/vendor/enyo/dropzone/dist/basic.css
new file mode 100644
index 0000000000000000000000000000000000000000..b72d7deaaeb10f4e0777b55ec9cae8deb8d121a3
--- /dev/null
+++ b/vendor/enyo/dropzone/dist/basic.css
@@ -0,0 +1,39 @@
+/*
+ * The MIT License
+ * Copyright (c) 2012 Matias Meno <m@tias.me>
+ */
+.dropzone, .dropzone * {
+  box-sizing: border-box; }
+
+.dropzone {
+  position: relative; }
+  .dropzone .dz-preview {
+    position: relative;
+    display: inline-block;
+    width: 120px;
+    margin: 0.5em; }
+    .dropzone .dz-preview .dz-progress {
+      display: block;
+      height: 15px;
+      border: 1px solid #aaa; }
+      .dropzone .dz-preview .dz-progress .dz-upload {
+        display: block;
+        height: 100%;
+        width: 0;
+        background: green; }
+    .dropzone .dz-preview .dz-error-message {
+      color: red;
+      display: none; }
+    .dropzone .dz-preview.dz-error .dz-error-message, .dropzone .dz-preview.dz-error .dz-error-mark {
+      display: block; }
+    .dropzone .dz-preview.dz-success .dz-success-mark {
+      display: block; }
+    .dropzone .dz-preview .dz-error-mark, .dropzone .dz-preview .dz-success-mark {
+      position: absolute;
+      display: none;
+      left: 30px;
+      top: 30px;
+      width: 54px;
+      height: 58px;
+      left: 50%;
+      margin-left: -27px; }
diff --git a/vendor/enyo/dropzone/dist/dropzone-amd-module.js b/vendor/enyo/dropzone/dist/dropzone-amd-module.js
new file mode 100644
index 0000000000000000000000000000000000000000..d312c7d9dc73842411c7ab9d791d40cd67521a1b
--- /dev/null
+++ b/vendor/enyo/dropzone/dist/dropzone-amd-module.js
@@ -0,0 +1,2067 @@
+// Uses AMD or browser globals to create a jQuery plugin.
+(function (factory) {
+  if (typeof define === 'function' && define.amd) {
+      // AMD. Register as an anonymous module.
+      define(['jquery'], factory);
+  } else {
+      // Browser globals
+      factory(jQuery);
+  }
+} (function (jQuery) {
+    var module = { exports: { } }; // Fake component
+
+
+/*
+ *
+ * More info at [www.dropzonejs.com](http://www.dropzonejs.com)
+ *
+ * Copyright (c) 2012, Matias Meno
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ */
+
+(function() {
+  var Dropzone, Emitter, ExifRestore, camelize, contentLoaded, detectVerticalSquash, drawImageIOSFix, noop, without,
+    slice = [].slice,
+    extend1 = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
+    hasProp = {}.hasOwnProperty;
+
+  noop = function() {};
+
+  Emitter = (function() {
+    function Emitter() {}
+
+    Emitter.prototype.addEventListener = Emitter.prototype.on;
+
+    Emitter.prototype.on = function(event, fn) {
+      this._callbacks = this._callbacks || {};
+      if (!this._callbacks[event]) {
+        this._callbacks[event] = [];
+      }
+      this._callbacks[event].push(fn);
+      return this;
+    };
+
+    Emitter.prototype.emit = function() {
+      var args, callback, callbacks, event, j, len;
+      event = arguments[0], args = 2 <= arguments.length ? slice.call(arguments, 1) : [];
+      this._callbacks = this._callbacks || {};
+      callbacks = this._callbacks[event];
+      if (callbacks) {
+        for (j = 0, len = callbacks.length; j < len; j++) {
+          callback = callbacks[j];
+          callback.apply(this, args);
+        }
+      }
+      return this;
+    };
+
+    Emitter.prototype.removeListener = Emitter.prototype.off;
+
+    Emitter.prototype.removeAllListeners = Emitter.prototype.off;
+
+    Emitter.prototype.removeEventListener = Emitter.prototype.off;
+
+    Emitter.prototype.off = function(event, fn) {
+      var callback, callbacks, i, j, len;
+      if (!this._callbacks || arguments.length === 0) {
+        this._callbacks = {};
+        return this;
+      }
+      callbacks = this._callbacks[event];
+      if (!callbacks) {
+        return this;
+      }
+      if (arguments.length === 1) {
+        delete this._callbacks[event];
+        return this;
+      }
+      for (i = j = 0, len = callbacks.length; j < len; i = ++j) {
+        callback = callbacks[i];
+        if (callback === fn) {
+          callbacks.splice(i, 1);
+          break;
+        }
+      }
+      return this;
+    };
+
+    return Emitter;
+
+  })();
+
+  Dropzone = (function(superClass) {
+    var extend, resolveOption;
+
+    extend1(Dropzone, superClass);
+
+    Dropzone.prototype.Emitter = Emitter;
+
+
+    /*
+    This is a list of all available events you can register on a dropzone object.
+    
+    You can register an event handler like this:
+    
+        dropzone.on("dragEnter", function() { });
+     */
+
+    Dropzone.prototype.events = ["drop", "dragstart", "dragend", "dragenter", "dragover", "dragleave", "addedfile", "addedfiles", "removedfile", "thumbnail", "error", "errormultiple", "processing", "processingmultiple", "uploadprogress", "totaluploadprogress", "sending", "sendingmultiple", "success", "successmultiple", "canceled", "canceledmultiple", "complete", "completemultiple", "reset", "maxfilesexceeded", "maxfilesreached", "queuecomplete"];
+
+    Dropzone.prototype.defaultOptions = {
+      url: null,
+      method: "post",
+      withCredentials: false,
+      timeout: 30000,
+      parallelUploads: 2,
+      uploadMultiple: false,
+      maxFilesize: 256,
+      paramName: "file",
+      createImageThumbnails: true,
+      maxThumbnailFilesize: 10,
+      thumbnailWidth: 120,
+      thumbnailHeight: 120,
+      thumbnailMethod: 'crop',
+      resizeWidth: null,
+      resizeHeight: null,
+      resizeMimeType: null,
+      resizeQuality: 0.8,
+      resizeMethod: 'contain',
+      filesizeBase: 1000,
+      maxFiles: null,
+      params: {},
+      headers: null,
+      clickable: true,
+      ignoreHiddenFiles: true,
+      acceptedFiles: null,
+      acceptedMimeTypes: null,
+      autoProcessQueue: true,
+      autoQueue: true,
+      addRemoveLinks: false,
+      previewsContainer: null,
+      hiddenInputContainer: "body",
+      capture: null,
+      renameFilename: null,
+      renameFile: null,
+      forceFallback: false,
+      dictDefaultMessage: "Drop files here to upload",
+      dictFallbackMessage: "Your browser does not support drag'n'drop file uploads.",
+      dictFallbackText: "Please use the fallback form below to upload your files like in the olden days.",
+      dictFileTooBig: "File is too big ({{filesize}}MiB). Max filesize: {{maxFilesize}}MiB.",
+      dictInvalidFileType: "You can't upload files of this type.",
+      dictResponseError: "Server responded with {{statusCode}} code.",
+      dictCancelUpload: "Cancel upload",
+      dictCancelUploadConfirmation: "Are you sure you want to cancel this upload?",
+      dictRemoveFile: "Remove file",
+      dictRemoveFileConfirmation: null,
+      dictMaxFilesExceeded: "You can not upload any more files.",
+      dictFileSizeUnits: {
+        tb: "TB",
+        gb: "GB",
+        mb: "MB",
+        kb: "KB",
+        b: "b"
+      },
+      init: function() {
+        return noop;
+      },
+      accept: function(file, done) {
+        return done();
+      },
+      fallback: function() {
+        var child, j, len, messageElement, ref, span;
+        this.element.className = this.element.className + " dz-browser-not-supported";
+        ref = this.element.getElementsByTagName("div");
+        for (j = 0, len = ref.length; j < len; j++) {
+          child = ref[j];
+          if (/(^| )dz-message($| )/.test(child.className)) {
+            messageElement = child;
+            child.className = "dz-message";
+            continue;
+          }
+        }
+        if (!messageElement) {
+          messageElement = Dropzone.createElement("<div class=\"dz-message\"><span></span></div>");
+          this.element.appendChild(messageElement);
+        }
+        span = messageElement.getElementsByTagName("span")[0];
+        if (span) {
+          if (span.textContent != null) {
+            span.textContent = this.options.dictFallbackMessage;
+          } else if (span.innerText != null) {
+            span.innerText = this.options.dictFallbackMessage;
+          }
+        }
+        return this.element.appendChild(this.getFallbackForm());
+      },
+      resize: function(file, width, height, resizeMethod) {
+        var info, srcRatio, trgRatio;
+        info = {
+          srcX: 0,
+          srcY: 0,
+          srcWidth: file.width,
+          srcHeight: file.height
+        };
+        srcRatio = file.width / file.height;
+        if ((width == null) && (height == null)) {
+          width = info.srcWidth;
+          height = info.srcHeight;
+        } else if (width == null) {
+          width = height * srcRatio;
+        } else if (height == null) {
+          height = width / srcRatio;
+        }
+        width = Math.min(width, info.srcWidth);
+        height = Math.min(height, info.srcHeight);
+        trgRatio = width / height;
+        if (info.srcWidth > width || info.srcHeight > height) {
+          if (resizeMethod === 'crop') {
+            if (srcRatio > trgRatio) {
+              info.srcHeight = file.height;
+              info.srcWidth = info.srcHeight * trgRatio;
+            } else {
+              info.srcWidth = file.width;
+              info.srcHeight = info.srcWidth / trgRatio;
+            }
+          } else if (resizeMethod === 'contain') {
+            if (srcRatio > trgRatio) {
+              height = width / srcRatio;
+            } else {
+              width = height * srcRatio;
+            }
+          } else {
+            throw new Error("Unknown resizeMethod '" + resizeMethod + "'");
+          }
+        }
+        info.srcX = (file.width - info.srcWidth) / 2;
+        info.srcY = (file.height - info.srcHeight) / 2;
+        info.trgWidth = width;
+        info.trgHeight = height;
+        return info;
+      },
+      transformFile: function(file, done) {
+        if ((this.options.resizeWidth || this.options.resizeHeight) && file.type.match(/image.*/)) {
+          return this.resizeImage(file, this.options.resizeWidth, this.options.resizeHeight, this.options.resizeMethod, done);
+        } else {
+          return done(file);
+        }
+      },
+      previewTemplate: "<div class=\"dz-preview dz-file-preview\">\n  <div class=\"dz-image\"><img data-dz-thumbnail /></div>\n  <div class=\"dz-details\">\n    <div class=\"dz-size\"><span data-dz-size></span></div>\n    <div class=\"dz-filename\"><span data-dz-name></span></div>\n  </div>\n  <div class=\"dz-progress\"><span class=\"dz-upload\" data-dz-uploadprogress></span></div>\n  <div class=\"dz-error-message\"><span data-dz-errormessage></span></div>\n  <div class=\"dz-success-mark\">\n    <svg width=\"54px\" height=\"54px\" viewBox=\"0 0 54 54\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xmlns:sketch=\"http://www.bohemiancoding.com/sketch/ns\">\n      <title>Check</title>\n      <defs></defs>\n      <g id=\"Page-1\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" sketch:type=\"MSPage\">\n        <path d=\"M23.5,31.8431458 L17.5852419,25.9283877 C16.0248253,24.3679711 13.4910294,24.366835 11.9289322,25.9289322 C10.3700136,27.4878508 10.3665912,30.0234455 11.9283877,31.5852419 L20.4147581,40.0716123 C20.5133999,40.1702541 20.6159315,40.2626649 20.7218615,40.3488435 C22.2835669,41.8725651 24.794234,41.8626202 26.3461564,40.3106978 L43.3106978,23.3461564 C44.8771021,21.7797521 44.8758057,19.2483887 43.3137085,17.6862915 C41.7547899,16.1273729 39.2176035,16.1255422 37.6538436,17.6893022 L23.5,31.8431458 Z M27,53 C41.3594035,53 53,41.3594035 53,27 C53,12.6405965 41.3594035,1 27,1 C12.6405965,1 1,12.6405965 1,27 C1,41.3594035 12.6405965,53 27,53 Z\" id=\"Oval-2\" stroke-opacity=\"0.198794158\" stroke=\"#747474\" fill-opacity=\"0.816519475\" fill=\"#FFFFFF\" sketch:type=\"MSShapeGroup\"></path>\n      </g>\n    </svg>\n  </div>\n  <div class=\"dz-error-mark\">\n    <svg width=\"54px\" height=\"54px\" viewBox=\"0 0 54 54\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xmlns:sketch=\"http://www.bohemiancoding.com/sketch/ns\">\n      <title>Error</title>\n      <defs></defs>\n      <g id=\"Page-1\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" sketch:type=\"MSPage\">\n        <g id=\"Check-+-Oval-2\" sketch:type=\"MSLayerGroup\" stroke=\"#747474\" stroke-opacity=\"0.198794158\" fill=\"#FFFFFF\" fill-opacity=\"0.816519475\">\n          <path d=\"M32.6568542,29 L38.3106978,23.3461564 C39.8771021,21.7797521 39.8758057,19.2483887 38.3137085,17.6862915 C36.7547899,16.1273729 34.2176035,16.1255422 32.6538436,17.6893022 L27,23.3431458 L21.3461564,17.6893022 C19.7823965,16.1255422 17.2452101,16.1273729 15.6862915,17.6862915 C14.1241943,19.2483887 14.1228979,21.7797521 15.6893022,23.3461564 L21.3431458,29 L15.6893022,34.6538436 C14.1228979,36.2202479 14.1241943,38.7516113 15.6862915,40.3137085 C17.2452101,41.8726271 19.7823965,41.8744578 21.3461564,40.3106978 L27,34.6568542 L32.6538436,40.3106978 C34.2176035,41.8744578 36.7547899,41.8726271 38.3137085,40.3137085 C39.8758057,38.7516113 39.8771021,36.2202479 38.3106978,34.6538436 L32.6568542,29 Z M27,53 C41.3594035,53 53,41.3594035 53,27 C53,12.6405965 41.3594035,1 27,1 C12.6405965,1 1,12.6405965 1,27 C1,41.3594035 12.6405965,53 27,53 Z\" id=\"Oval-2\" sketch:type=\"MSShapeGroup\"></path>\n        </g>\n      </g>\n    </svg>\n  </div>\n</div>",
+
+      /*
+      Those functions register themselves to the events on init and handle all
+      the user interface specific stuff. Overwriting them won't break the upload
+      but can break the way it's displayed.
+      You can overwrite them if you don't like the default behavior. If you just
+      want to add an additional event handler, register it on the dropzone object
+      and don't overwrite those options.
+       */
+      drop: function(e) {
+        return this.element.classList.remove("dz-drag-hover");
+      },
+      dragstart: noop,
+      dragend: function(e) {
+        return this.element.classList.remove("dz-drag-hover");
+      },
+      dragenter: function(e) {
+        return this.element.classList.add("dz-drag-hover");
+      },
+      dragover: function(e) {
+        return this.element.classList.add("dz-drag-hover");
+      },
+      dragleave: function(e) {
+        return this.element.classList.remove("dz-drag-hover");
+      },
+      paste: noop,
+      reset: function() {
+        return this.element.classList.remove("dz-started");
+      },
+      addedfile: function(file) {
+        var j, k, l, len, len1, len2, node, ref, ref1, ref2, removeFileEvent, removeLink, results;
+        if (this.element === this.previewsContainer) {
+          this.element.classList.add("dz-started");
+        }
+        if (this.previewsContainer) {
+          file.previewElement = Dropzone.createElement(this.options.previewTemplate.trim());
+          file.previewTemplate = file.previewElement;
+          this.previewsContainer.appendChild(file.previewElement);
+          ref = file.previewElement.querySelectorAll("[data-dz-name]");
+          for (j = 0, len = ref.length; j < len; j++) {
+            node = ref[j];
+            node.textContent = file.name;
+          }
+          ref1 = file.previewElement.querySelectorAll("[data-dz-size]");
+          for (k = 0, len1 = ref1.length; k < len1; k++) {
+            node = ref1[k];
+            node.innerHTML = this.filesize(file.size);
+          }
+          if (this.options.addRemoveLinks) {
+            file._removeLink = Dropzone.createElement("<a class=\"dz-remove\" href=\"javascript:undefined;\" data-dz-remove>" + this.options.dictRemoveFile + "</a>");
+            file.previewElement.appendChild(file._removeLink);
+          }
+          removeFileEvent = (function(_this) {
+            return function(e) {
+              e.preventDefault();
+              e.stopPropagation();
+              if (file.status === Dropzone.UPLOADING) {
+                return Dropzone.confirm(_this.options.dictCancelUploadConfirmation, function() {
+                  return _this.removeFile(file);
+                });
+              } else {
+                if (_this.options.dictRemoveFileConfirmation) {
+                  return Dropzone.confirm(_this.options.dictRemoveFileConfirmation, function() {
+                    return _this.removeFile(file);
+                  });
+                } else {
+                  return _this.removeFile(file);
+                }
+              }
+            };
+          })(this);
+          ref2 = file.previewElement.querySelectorAll("[data-dz-remove]");
+          results = [];
+          for (l = 0, len2 = ref2.length; l < len2; l++) {
+            removeLink = ref2[l];
+            results.push(removeLink.addEventListener("click", removeFileEvent));
+          }
+          return results;
+        }
+      },
+      removedfile: function(file) {
+        var ref;
+        if (file.previewElement) {
+          if ((ref = file.previewElement) != null) {
+            ref.parentNode.removeChild(file.previewElement);
+          }
+        }
+        return this._updateMaxFilesReachedClass();
+      },
+      thumbnail: function(file, dataUrl) {
+        var j, len, ref, thumbnailElement;
+        if (file.previewElement) {
+          file.previewElement.classList.remove("dz-file-preview");
+          ref = file.previewElement.querySelectorAll("[data-dz-thumbnail]");
+          for (j = 0, len = ref.length; j < len; j++) {
+            thumbnailElement = ref[j];
+            thumbnailElement.alt = file.name;
+            thumbnailElement.src = dataUrl;
+          }
+          return setTimeout(((function(_this) {
+            return function() {
+              return file.previewElement.classList.add("dz-image-preview");
+            };
+          })(this)), 1);
+        }
+      },
+      error: function(file, message) {
+        var j, len, node, ref, results;
+        if (file.previewElement) {
+          file.previewElement.classList.add("dz-error");
+          if (typeof message !== "String" && message.error) {
+            message = message.error;
+          }
+          ref = file.previewElement.querySelectorAll("[data-dz-errormessage]");
+          results = [];
+          for (j = 0, len = ref.length; j < len; j++) {
+            node = ref[j];
+            results.push(node.textContent = message);
+          }
+          return results;
+        }
+      },
+      errormultiple: noop,
+      processing: function(file) {
+        if (file.previewElement) {
+          file.previewElement.classList.add("dz-processing");
+          if (file._removeLink) {
+            return file._removeLink.textContent = this.options.dictCancelUpload;
+          }
+        }
+      },
+      processingmultiple: noop,
+      uploadprogress: function(file, progress, bytesSent) {
+        var j, len, node, ref, results;
+        if (file.previewElement) {
+          ref = file.previewElement.querySelectorAll("[data-dz-uploadprogress]");
+          results = [];
+          for (j = 0, len = ref.length; j < len; j++) {
+            node = ref[j];
+            if (node.nodeName === 'PROGRESS') {
+              results.push(node.value = progress);
+            } else {
+              results.push(node.style.width = progress + "%");
+            }
+          }
+          return results;
+        }
+      },
+      totaluploadprogress: noop,
+      sending: noop,
+      sendingmultiple: noop,
+      success: function(file) {
+        if (file.previewElement) {
+          return file.previewElement.classList.add("dz-success");
+        }
+      },
+      successmultiple: noop,
+      canceled: function(file) {
+        return this.emit("error", file, "Upload canceled.");
+      },
+      canceledmultiple: noop,
+      complete: function(file) {
+        if (file._removeLink) {
+          file._removeLink.textContent = this.options.dictRemoveFile;
+        }
+        if (file.previewElement) {
+          return file.previewElement.classList.add("dz-complete");
+        }
+      },
+      completemultiple: noop,
+      maxfilesexceeded: noop,
+      maxfilesreached: noop,
+      queuecomplete: noop,
+      addedfiles: noop
+    };
+
+    extend = function() {
+      var j, key, len, object, objects, target, val;
+      target = arguments[0], objects = 2 <= arguments.length ? slice.call(arguments, 1) : [];
+      for (j = 0, len = objects.length; j < len; j++) {
+        object = objects[j];
+        for (key in object) {
+          val = object[key];
+          target[key] = val;
+        }
+      }
+      return target;
+    };
+
+    function Dropzone(element1, options) {
+      var elementOptions, fallback, ref;
+      this.element = element1;
+      this.version = Dropzone.version;
+      this.defaultOptions.previewTemplate = this.defaultOptions.previewTemplate.replace(/\n*/g, "");
+      this.clickableElements = [];
+      this.listeners = [];
+      this.files = [];
+      if (typeof this.element === "string") {
+        this.element = document.querySelector(this.element);
+      }
+      if (!(this.element && (this.element.nodeType != null))) {
+        throw new Error("Invalid dropzone element.");
+      }
+      if (this.element.dropzone) {
+        throw new Error("Dropzone already attached.");
+      }
+      Dropzone.instances.push(this);
+      this.element.dropzone = this;
+      elementOptions = (ref = Dropzone.optionsForElement(this.element)) != null ? ref : {};
+      this.options = extend({}, this.defaultOptions, elementOptions, options != null ? options : {});
+      if (this.options.forceFallback || !Dropzone.isBrowserSupported()) {
+        return this.options.fallback.call(this);
+      }
+      if (this.options.url == null) {
+        this.options.url = this.element.getAttribute("action");
+      }
+      if (!this.options.url) {
+        throw new Error("No URL provided.");
+      }
+      if (this.options.acceptedFiles && this.options.acceptedMimeTypes) {
+        throw new Error("You can't provide both 'acceptedFiles' and 'acceptedMimeTypes'. 'acceptedMimeTypes' is deprecated.");
+      }
+      if (this.options.acceptedMimeTypes) {
+        this.options.acceptedFiles = this.options.acceptedMimeTypes;
+        delete this.options.acceptedMimeTypes;
+      }
+      if (this.options.renameFilename != null) {
+        this.options.renameFile = (function(_this) {
+          return function(file) {
+            return _this.options.renameFilename.call(_this, file.name, file);
+          };
+        })(this);
+      }
+      this.options.method = this.options.method.toUpperCase();
+      if ((fallback = this.getExistingFallback()) && fallback.parentNode) {
+        fallback.parentNode.removeChild(fallback);
+      }
+      if (this.options.previewsContainer !== false) {
+        if (this.options.previewsContainer) {
+          this.previewsContainer = Dropzone.getElement(this.options.previewsContainer, "previewsContainer");
+        } else {
+          this.previewsContainer = this.element;
+        }
+      }
+      if (this.options.clickable) {
+        if (this.options.clickable === true) {
+          this.clickableElements = [this.element];
+        } else {
+          this.clickableElements = Dropzone.getElements(this.options.clickable, "clickable");
+        }
+      }
+      this.init();
+    }
+
+    Dropzone.prototype.getAcceptedFiles = function() {
+      var file, j, len, ref, results;
+      ref = this.files;
+      results = [];
+      for (j = 0, len = ref.length; j < len; j++) {
+        file = ref[j];
+        if (file.accepted) {
+          results.push(file);
+        }
+      }
+      return results;
+    };
+
+    Dropzone.prototype.getRejectedFiles = function() {
+      var file, j, len, ref, results;
+      ref = this.files;
+      results = [];
+      for (j = 0, len = ref.length; j < len; j++) {
+        file = ref[j];
+        if (!file.accepted) {
+          results.push(file);
+        }
+      }
+      return results;
+    };
+
+    Dropzone.prototype.getFilesWithStatus = function(status) {
+      var file, j, len, ref, results;
+      ref = this.files;
+      results = [];
+      for (j = 0, len = ref.length; j < len; j++) {
+        file = ref[j];
+        if (file.status === status) {
+          results.push(file);
+        }
+      }
+      return results;
+    };
+
+    Dropzone.prototype.getQueuedFiles = function() {
+      return this.getFilesWithStatus(Dropzone.QUEUED);
+    };
+
+    Dropzone.prototype.getUploadingFiles = function() {
+      return this.getFilesWithStatus(Dropzone.UPLOADING);
+    };
+
+    Dropzone.prototype.getAddedFiles = function() {
+      return this.getFilesWithStatus(Dropzone.ADDED);
+    };
+
+    Dropzone.prototype.getActiveFiles = function() {
+      var file, j, len, ref, results;
+      ref = this.files;
+      results = [];
+      for (j = 0, len = ref.length; j < len; j++) {
+        file = ref[j];
+        if (file.status === Dropzone.UPLOADING || file.status === Dropzone.QUEUED) {
+          results.push(file);
+        }
+      }
+      return results;
+    };
+
+    Dropzone.prototype.init = function() {
+      var eventName, j, len, noPropagation, ref, ref1, setupHiddenFileInput;
+      if (this.element.tagName === "form") {
+        this.element.setAttribute("enctype", "multipart/form-data");
+      }
+      if (this.element.classList.contains("dropzone") && !this.element.querySelector(".dz-message")) {
+        this.element.appendChild(Dropzone.createElement("<div class=\"dz-default dz-message\"><span>" + this.options.dictDefaultMessage + "</span></div>"));
+      }
+      if (this.clickableElements.length) {
+        setupHiddenFileInput = (function(_this) {
+          return function() {
+            if (_this.hiddenFileInput) {
+              _this.hiddenFileInput.parentNode.removeChild(_this.hiddenFileInput);
+            }
+            _this.hiddenFileInput = document.createElement("input");
+            _this.hiddenFileInput.setAttribute("type", "file");
+            if ((_this.options.maxFiles == null) || _this.options.maxFiles > 1) {
+              _this.hiddenFileInput.setAttribute("multiple", "multiple");
+            }
+            _this.hiddenFileInput.className = "dz-hidden-input";
+            if (_this.options.acceptedFiles != null) {
+              _this.hiddenFileInput.setAttribute("accept", _this.options.acceptedFiles);
+            }
+            if (_this.options.capture != null) {
+              _this.hiddenFileInput.setAttribute("capture", _this.options.capture);
+            }
+            _this.hiddenFileInput.style.visibility = "hidden";
+            _this.hiddenFileInput.style.position = "absolute";
+            _this.hiddenFileInput.style.top = "0";
+            _this.hiddenFileInput.style.left = "0";
+            _this.hiddenFileInput.style.height = "0";
+            _this.hiddenFileInput.style.width = "0";
+            document.querySelector(_this.options.hiddenInputContainer).appendChild(_this.hiddenFileInput);
+            return _this.hiddenFileInput.addEventListener("change", function() {
+              var file, files, j, len;
+              files = _this.hiddenFileInput.files;
+              if (files.length) {
+                for (j = 0, len = files.length; j < len; j++) {
+                  file = files[j];
+                  _this.addFile(file);
+                }
+              }
+              _this.emit("addedfiles", files);
+              return setupHiddenFileInput();
+            });
+          };
+        })(this);
+        setupHiddenFileInput();
+      }
+      this.URL = (ref = window.URL) != null ? ref : window.webkitURL;
+      ref1 = this.events;
+      for (j = 0, len = ref1.length; j < len; j++) {
+        eventName = ref1[j];
+        this.on(eventName, this.options[eventName]);
+      }
+      this.on("uploadprogress", (function(_this) {
+        return function() {
+          return _this.updateTotalUploadProgress();
+        };
+      })(this));
+      this.on("removedfile", (function(_this) {
+        return function() {
+          return _this.updateTotalUploadProgress();
+        };
+      })(this));
+      this.on("canceled", (function(_this) {
+        return function(file) {
+          return _this.emit("complete", file);
+        };
+      })(this));
+      this.on("complete", (function(_this) {
+        return function(file) {
+          if (_this.getAddedFiles().length === 0 && _this.getUploadingFiles().length === 0 && _this.getQueuedFiles().length === 0) {
+            return setTimeout((function() {
+              return _this.emit("queuecomplete");
+            }), 0);
+          }
+        };
+      })(this));
+      noPropagation = function(e) {
+        e.stopPropagation();
+        if (e.preventDefault) {
+          return e.preventDefault();
+        } else {
+          return e.returnValue = false;
+        }
+      };
+      this.listeners = [
+        {
+          element: this.element,
+          events: {
+            "dragstart": (function(_this) {
+              return function(e) {
+                return _this.emit("dragstart", e);
+              };
+            })(this),
+            "dragenter": (function(_this) {
+              return function(e) {
+                noPropagation(e);
+                return _this.emit("dragenter", e);
+              };
+            })(this),
+            "dragover": (function(_this) {
+              return function(e) {
+                var efct;
+                try {
+                  efct = e.dataTransfer.effectAllowed;
+                } catch (undefined) {}
+                e.dataTransfer.dropEffect = 'move' === efct || 'linkMove' === efct ? 'move' : 'copy';
+                noPropagation(e);
+                return _this.emit("dragover", e);
+              };
+            })(this),
+            "dragleave": (function(_this) {
+              return function(e) {
+                return _this.emit("dragleave", e);
+              };
+            })(this),
+            "drop": (function(_this) {
+              return function(e) {
+                noPropagation(e);
+                return _this.drop(e);
+              };
+            })(this),
+            "dragend": (function(_this) {
+              return function(e) {
+                return _this.emit("dragend", e);
+              };
+            })(this)
+          }
+        }
+      ];
+      this.clickableElements.forEach((function(_this) {
+        return function(clickableElement) {
+          return _this.listeners.push({
+            element: clickableElement,
+            events: {
+              "click": function(evt) {
+                if ((clickableElement !== _this.element) || (evt.target === _this.element || Dropzone.elementInside(evt.target, _this.element.querySelector(".dz-message")))) {
+                  _this.hiddenFileInput.click();
+                }
+                return true;
+              }
+            }
+          });
+        };
+      })(this));
+      this.enable();
+      return this.options.init.call(this);
+    };
+
+    Dropzone.prototype.destroy = function() {
+      var ref;
+      this.disable();
+      this.removeAllFiles(true);
+      if ((ref = this.hiddenFileInput) != null ? ref.parentNode : void 0) {
+        this.hiddenFileInput.parentNode.removeChild(this.hiddenFileInput);
+        this.hiddenFileInput = null;
+      }
+      delete this.element.dropzone;
+      return Dropzone.instances.splice(Dropzone.instances.indexOf(this), 1);
+    };
+
+    Dropzone.prototype.updateTotalUploadProgress = function() {
+      var activeFiles, file, j, len, ref, totalBytes, totalBytesSent, totalUploadProgress;
+      totalBytesSent = 0;
+      totalBytes = 0;
+      activeFiles = this.getActiveFiles();
+      if (activeFiles.length) {
+        ref = this.getActiveFiles();
+        for (j = 0, len = ref.length; j < len; j++) {
+          file = ref[j];
+          totalBytesSent += file.upload.bytesSent;
+          totalBytes += file.upload.total;
+        }
+        totalUploadProgress = 100 * totalBytesSent / totalBytes;
+      } else {
+        totalUploadProgress = 100;
+      }
+      return this.emit("totaluploadprogress", totalUploadProgress, totalBytes, totalBytesSent);
+    };
+
+    Dropzone.prototype._getParamName = function(n) {
+      if (typeof this.options.paramName === "function") {
+        return this.options.paramName(n);
+      } else {
+        return "" + this.options.paramName + (this.options.uploadMultiple ? "[" + n + "]" : "");
+      }
+    };
+
+    Dropzone.prototype._renameFile = function(file) {
+      if (typeof this.options.renameFile !== "function") {
+        return file.name;
+      }
+      return this.options.renameFile(file);
+    };
+
+    Dropzone.prototype.getFallbackForm = function() {
+      var existingFallback, fields, fieldsString, form;
+      if (existingFallback = this.getExistingFallback()) {
+        return existingFallback;
+      }
+      fieldsString = "<div class=\"dz-fallback\">";
+      if (this.options.dictFallbackText) {
+        fieldsString += "<p>" + this.options.dictFallbackText + "</p>";
+      }
+      fieldsString += "<input type=\"file\" name=\"" + (this._getParamName(0)) + "\" " + (this.options.uploadMultiple ? 'multiple="multiple"' : void 0) + " /><input type=\"submit\" value=\"Upload!\"></div>";
+      fields = Dropzone.createElement(fieldsString);
+      if (this.element.tagName !== "FORM") {
+        form = Dropzone.createElement("<form action=\"" + this.options.url + "\" enctype=\"multipart/form-data\" method=\"" + this.options.method + "\"></form>");
+        form.appendChild(fields);
+      } else {
+        this.element.setAttribute("enctype", "multipart/form-data");
+        this.element.setAttribute("method", this.options.method);
+      }
+      return form != null ? form : fields;
+    };
+
+    Dropzone.prototype.getExistingFallback = function() {
+      var fallback, getFallback, j, len, ref, tagName;
+      getFallback = function(elements) {
+        var el, j, len;
+        for (j = 0, len = elements.length; j < len; j++) {
+          el = elements[j];
+          if (/(^| )fallback($| )/.test(el.className)) {
+            return el;
+          }
+        }
+      };
+      ref = ["div", "form"];
+      for (j = 0, len = ref.length; j < len; j++) {
+        tagName = ref[j];
+        if (fallback = getFallback(this.element.getElementsByTagName(tagName))) {
+          return fallback;
+        }
+      }
+    };
+
+    Dropzone.prototype.setupEventListeners = function() {
+      var elementListeners, event, j, len, listener, ref, results;
+      ref = this.listeners;
+      results = [];
+      for (j = 0, len = ref.length; j < len; j++) {
+        elementListeners = ref[j];
+        results.push((function() {
+          var ref1, results1;
+          ref1 = elementListeners.events;
+          results1 = [];
+          for (event in ref1) {
+            listener = ref1[event];
+            results1.push(elementListeners.element.addEventListener(event, listener, false));
+          }
+          return results1;
+        })());
+      }
+      return results;
+    };
+
+    Dropzone.prototype.removeEventListeners = function() {
+      var elementListeners, event, j, len, listener, ref, results;
+      ref = this.listeners;
+      results = [];
+      for (j = 0, len = ref.length; j < len; j++) {
+        elementListeners = ref[j];
+        results.push((function() {
+          var ref1, results1;
+          ref1 = elementListeners.events;
+          results1 = [];
+          for (event in ref1) {
+            listener = ref1[event];
+            results1.push(elementListeners.element.removeEventListener(event, listener, false));
+          }
+          return results1;
+        })());
+      }
+      return results;
+    };
+
+    Dropzone.prototype.disable = function() {
+      var file, j, len, ref, results;
+      this.clickableElements.forEach(function(element) {
+        return element.classList.remove("dz-clickable");
+      });
+      this.removeEventListeners();
+      ref = this.files;
+      results = [];
+      for (j = 0, len = ref.length; j < len; j++) {
+        file = ref[j];
+        results.push(this.cancelUpload(file));
+      }
+      return results;
+    };
+
+    Dropzone.prototype.enable = function() {
+      this.clickableElements.forEach(function(element) {
+        return element.classList.add("dz-clickable");
+      });
+      return this.setupEventListeners();
+    };
+
+    Dropzone.prototype.filesize = function(size) {
+      var cutoff, i, j, len, selectedSize, selectedUnit, unit, units;
+      selectedSize = 0;
+      selectedUnit = "b";
+      if (size > 0) {
+        units = ['tb', 'gb', 'mb', 'kb', 'b'];
+        for (i = j = 0, len = units.length; j < len; i = ++j) {
+          unit = units[i];
+          cutoff = Math.pow(this.options.filesizeBase, 4 - i) / 10;
+          if (size >= cutoff) {
+            selectedSize = size / Math.pow(this.options.filesizeBase, 4 - i);
+            selectedUnit = unit;
+            break;
+          }
+        }
+        selectedSize = Math.round(10 * selectedSize) / 10;
+      }
+      return "<strong>" + selectedSize + "</strong> " + this.options.dictFileSizeUnits[selectedUnit];
+    };
+
+    Dropzone.prototype._updateMaxFilesReachedClass = function() {
+      if ((this.options.maxFiles != null) && this.getAcceptedFiles().length >= this.options.maxFiles) {
+        if (this.getAcceptedFiles().length === this.options.maxFiles) {
+          this.emit('maxfilesreached', this.files);
+        }
+        return this.element.classList.add("dz-max-files-reached");
+      } else {
+        return this.element.classList.remove("dz-max-files-reached");
+      }
+    };
+
+    Dropzone.prototype.drop = function(e) {
+      var files, items;
+      if (!e.dataTransfer) {
+        return;
+      }
+      this.emit("drop", e);
+      files = e.dataTransfer.files;
+      this.emit("addedfiles", files);
+      if (files.length) {
+        items = e.dataTransfer.items;
+        if (items && items.length && (items[0].webkitGetAsEntry != null)) {
+          this._addFilesFromItems(items);
+        } else {
+          this.handleFiles(files);
+        }
+      }
+    };
+
+    Dropzone.prototype.paste = function(e) {
+      var items, ref;
+      if ((e != null ? (ref = e.clipboardData) != null ? ref.items : void 0 : void 0) == null) {
+        return;
+      }
+      this.emit("paste", e);
+      items = e.clipboardData.items;
+      if (items.length) {
+        return this._addFilesFromItems(items);
+      }
+    };
+
+    Dropzone.prototype.handleFiles = function(files) {
+      var file, j, len, results;
+      results = [];
+      for (j = 0, len = files.length; j < len; j++) {
+        file = files[j];
+        results.push(this.addFile(file));
+      }
+      return results;
+    };
+
+    Dropzone.prototype._addFilesFromItems = function(items) {
+      var entry, item, j, len, results;
+      results = [];
+      for (j = 0, len = items.length; j < len; j++) {
+        item = items[j];
+        if ((item.webkitGetAsEntry != null) && (entry = item.webkitGetAsEntry())) {
+          if (entry.isFile) {
+            results.push(this.addFile(item.getAsFile()));
+          } else if (entry.isDirectory) {
+            results.push(this._addFilesFromDirectory(entry, entry.name));
+          } else {
+            results.push(void 0);
+          }
+        } else if (item.getAsFile != null) {
+          if ((item.kind == null) || item.kind === "file") {
+            results.push(this.addFile(item.getAsFile()));
+          } else {
+            results.push(void 0);
+          }
+        } else {
+          results.push(void 0);
+        }
+      }
+      return results;
+    };
+
+    Dropzone.prototype._addFilesFromDirectory = function(directory, path) {
+      var dirReader, errorHandler, readEntries;
+      dirReader = directory.createReader();
+      errorHandler = function(error) {
+        return typeof console !== "undefined" && console !== null ? typeof console.log === "function" ? console.log(error) : void 0 : void 0;
+      };
+      readEntries = (function(_this) {
+        return function() {
+          return dirReader.readEntries(function(entries) {
+            var entry, j, len;
+            if (entries.length > 0) {
+              for (j = 0, len = entries.length; j < len; j++) {
+                entry = entries[j];
+                if (entry.isFile) {
+                  entry.file(function(file) {
+                    if (_this.options.ignoreHiddenFiles && file.name.substring(0, 1) === '.') {
+                      return;
+                    }
+                    file.fullPath = path + "/" + file.name;
+                    return _this.addFile(file);
+                  });
+                } else if (entry.isDirectory) {
+                  _this._addFilesFromDirectory(entry, path + "/" + entry.name);
+                }
+              }
+              readEntries();
+            }
+            return null;
+          }, errorHandler);
+        };
+      })(this);
+      return readEntries();
+    };
+
+    Dropzone.prototype.accept = function(file, done) {
+      if (file.size > this.options.maxFilesize * 1024 * 1024) {
+        return done(this.options.dictFileTooBig.replace("{{filesize}}", Math.round(file.size / 1024 / 10.24) / 100).replace("{{maxFilesize}}", this.options.maxFilesize));
+      } else if (!Dropzone.isValidFile(file, this.options.acceptedFiles)) {
+        return done(this.options.dictInvalidFileType);
+      } else if ((this.options.maxFiles != null) && this.getAcceptedFiles().length >= this.options.maxFiles) {
+        done(this.options.dictMaxFilesExceeded.replace("{{maxFiles}}", this.options.maxFiles));
+        return this.emit("maxfilesexceeded", file);
+      } else {
+        return this.options.accept.call(this, file, done);
+      }
+    };
+
+    Dropzone.prototype.addFile = function(file) {
+      file.upload = {
+        progress: 0,
+        total: file.size,
+        bytesSent: 0,
+        filename: this._renameFile(file)
+      };
+      this.files.push(file);
+      file.status = Dropzone.ADDED;
+      this.emit("addedfile", file);
+      this._enqueueThumbnail(file);
+      return this.accept(file, (function(_this) {
+        return function(error) {
+          if (error) {
+            file.accepted = false;
+            _this._errorProcessing([file], error);
+          } else {
+            file.accepted = true;
+            if (_this.options.autoQueue) {
+              _this.enqueueFile(file);
+            }
+          }
+          return _this._updateMaxFilesReachedClass();
+        };
+      })(this));
+    };
+
+    Dropzone.prototype.enqueueFiles = function(files) {
+      var file, j, len;
+      for (j = 0, len = files.length; j < len; j++) {
+        file = files[j];
+        this.enqueueFile(file);
+      }
+      return null;
+    };
+
+    Dropzone.prototype.enqueueFile = function(file) {
+      if (file.status === Dropzone.ADDED && file.accepted === true) {
+        file.status = Dropzone.QUEUED;
+        if (this.options.autoProcessQueue) {
+          return setTimeout(((function(_this) {
+            return function() {
+              return _this.processQueue();
+            };
+          })(this)), 0);
+        }
+      } else {
+        throw new Error("This file can't be queued because it has already been processed or was rejected.");
+      }
+    };
+
+    Dropzone.prototype._thumbnailQueue = [];
+
+    Dropzone.prototype._processingThumbnail = false;
+
+    Dropzone.prototype._enqueueThumbnail = function(file) {
+      if (this.options.createImageThumbnails && file.type.match(/image.*/) && file.size <= this.options.maxThumbnailFilesize * 1024 * 1024) {
+        this._thumbnailQueue.push(file);
+        return setTimeout(((function(_this) {
+          return function() {
+            return _this._processThumbnailQueue();
+          };
+        })(this)), 0);
+      }
+    };
+
+    Dropzone.prototype._processThumbnailQueue = function() {
+      var file;
+      if (this._processingThumbnail || this._thumbnailQueue.length === 0) {
+        return;
+      }
+      this._processingThumbnail = true;
+      file = this._thumbnailQueue.shift();
+      return this.createThumbnail(file, this.options.thumbnailWidth, this.options.thumbnailHeight, this.options.thumbnailMethod, true, (function(_this) {
+        return function(dataUrl) {
+          _this.emit("thumbnail", file, dataUrl);
+          _this._processingThumbnail = false;
+          return _this._processThumbnailQueue();
+        };
+      })(this));
+    };
+
+    Dropzone.prototype.removeFile = function(file) {
+      if (file.status === Dropzone.UPLOADING) {
+        this.cancelUpload(file);
+      }
+      this.files = without(this.files, file);
+      this.emit("removedfile", file);
+      if (this.files.length === 0) {
+        return this.emit("reset");
+      }
+    };
+
+    Dropzone.prototype.removeAllFiles = function(cancelIfNecessary) {
+      var file, j, len, ref;
+      if (cancelIfNecessary == null) {
+        cancelIfNecessary = false;
+      }
+      ref = this.files.slice();
+      for (j = 0, len = ref.length; j < len; j++) {
+        file = ref[j];
+        if (file.status !== Dropzone.UPLOADING || cancelIfNecessary) {
+          this.removeFile(file);
+        }
+      }
+      return null;
+    };
+
+    Dropzone.prototype.resizeImage = function(file, width, height, resizeMethod, callback) {
+      return this.createThumbnail(file, width, height, resizeMethod, false, (function(_this) {
+        return function(dataUrl, canvas) {
+          var resizeMimeType, resizedDataURL;
+          if (canvas === null) {
+            return callback(file);
+          } else {
+            resizeMimeType = _this.options.resizeMimeType;
+            if (resizeMimeType == null) {
+              resizeMimeType = file.type;
+            }
+            resizedDataURL = canvas.toDataURL(resizeMimeType, _this.options.resizeQuality);
+            if (resizeMimeType === 'image/jpeg' || resizeMimeType === 'image/jpg') {
+              resizedDataURL = ExifRestore.restore(file.dataURL, resizedDataURL);
+            }
+            return callback(Dropzone.dataURItoBlob(resizedDataURL));
+          }
+        };
+      })(this));
+    };
+
+    Dropzone.prototype.createThumbnail = function(file, width, height, resizeMethod, fixOrientation, callback) {
+      var fileReader;
+      fileReader = new FileReader;
+      fileReader.onload = (function(_this) {
+        return function() {
+          file.dataURL = fileReader.result;
+          if (file.type === "image/svg+xml") {
+            if (callback != null) {
+              callback(fileReader.result);
+            }
+            return;
+          }
+          return _this.createThumbnailFromUrl(file, width, height, resizeMethod, fixOrientation, callback);
+        };
+      })(this);
+      return fileReader.readAsDataURL(file);
+    };
+
+    Dropzone.prototype.createThumbnailFromUrl = function(file, width, height, resizeMethod, fixOrientation, callback, crossOrigin) {
+      var img;
+      img = document.createElement("img");
+      if (crossOrigin) {
+        img.crossOrigin = crossOrigin;
+      }
+      img.onload = (function(_this) {
+        return function() {
+          var loadExif;
+          loadExif = function(callback) {
+            return callback(1);
+          };
+          if ((typeof EXIF !== "undefined" && EXIF !== null) && fixOrientation) {
+            loadExif = function(callback) {
+              return EXIF.getData(img, function() {
+                return callback(EXIF.getTag(this, 'Orientation'));
+              });
+            };
+          }
+          return loadExif(function(orientation) {
+            var canvas, ctx, ref, ref1, ref2, ref3, resizeInfo, thumbnail;
+            file.width = img.width;
+            file.height = img.height;
+            resizeInfo = _this.options.resize.call(_this, file, width, height, resizeMethod);
+            canvas = document.createElement("canvas");
+            ctx = canvas.getContext("2d");
+            canvas.width = resizeInfo.trgWidth;
+            canvas.height = resizeInfo.trgHeight;
+            if (orientation > 4) {
+              canvas.width = resizeInfo.trgHeight;
+              canvas.height = resizeInfo.trgWidth;
+            }
+            switch (orientation) {
+              case 2:
+                ctx.translate(canvas.width, 0);
+                ctx.scale(-1, 1);
+                break;
+              case 3:
+                ctx.translate(canvas.width, canvas.height);
+                ctx.rotate(Math.PI);
+                break;
+              case 4:
+                ctx.translate(0, canvas.height);
+                ctx.scale(1, -1);
+                break;
+              case 5:
+                ctx.rotate(0.5 * Math.PI);
+                ctx.scale(1, -1);
+                break;
+              case 6:
+                ctx.rotate(0.5 * Math.PI);
+                ctx.translate(0, -canvas.height);
+                break;
+              case 7:
+                ctx.rotate(0.5 * Math.PI);
+                ctx.translate(canvas.width, -canvas.height);
+                ctx.scale(-1, 1);
+                break;
+              case 8:
+                ctx.rotate(-0.5 * Math.PI);
+                ctx.translate(-canvas.width, 0);
+            }
+            drawImageIOSFix(ctx, img, (ref = resizeInfo.srcX) != null ? ref : 0, (ref1 = resizeInfo.srcY) != null ? ref1 : 0, resizeInfo.srcWidth, resizeInfo.srcHeight, (ref2 = resizeInfo.trgX) != null ? ref2 : 0, (ref3 = resizeInfo.trgY) != null ? ref3 : 0, resizeInfo.trgWidth, resizeInfo.trgHeight);
+            thumbnail = canvas.toDataURL("image/png");
+            if (callback != null) {
+              return callback(thumbnail, canvas);
+            }
+          });
+        };
+      })(this);
+      if (callback != null) {
+        img.onerror = callback;
+      }
+      return img.src = file.dataURL;
+    };
+
+    Dropzone.prototype.processQueue = function() {
+      var i, parallelUploads, processingLength, queuedFiles;
+      parallelUploads = this.options.parallelUploads;
+      processingLength = this.getUploadingFiles().length;
+      i = processingLength;
+      if (processingLength >= parallelUploads) {
+        return;
+      }
+      queuedFiles = this.getQueuedFiles();
+      if (!(queuedFiles.length > 0)) {
+        return;
+      }
+      if (this.options.uploadMultiple) {
+        return this.processFiles(queuedFiles.slice(0, parallelUploads - processingLength));
+      } else {
+        while (i < parallelUploads) {
+          if (!queuedFiles.length) {
+            return;
+          }
+          this.processFile(queuedFiles.shift());
+          i++;
+        }
+      }
+    };
+
+    Dropzone.prototype.processFile = function(file) {
+      return this.processFiles([file]);
+    };
+
+    Dropzone.prototype.processFiles = function(files) {
+      var file, j, len;
+      for (j = 0, len = files.length; j < len; j++) {
+        file = files[j];
+        file.processing = true;
+        file.status = Dropzone.UPLOADING;
+        this.emit("processing", file);
+      }
+      if (this.options.uploadMultiple) {
+        this.emit("processingmultiple", files);
+      }
+      return this.uploadFiles(files);
+    };
+
+    Dropzone.prototype._getFilesWithXhr = function(xhr) {
+      var file, files;
+      return files = (function() {
+        var j, len, ref, results;
+        ref = this.files;
+        results = [];
+        for (j = 0, len = ref.length; j < len; j++) {
+          file = ref[j];
+          if (file.xhr === xhr) {
+            results.push(file);
+          }
+        }
+        return results;
+      }).call(this);
+    };
+
+    Dropzone.prototype.cancelUpload = function(file) {
+      var groupedFile, groupedFiles, j, k, len, len1, ref;
+      if (file.status === Dropzone.UPLOADING) {
+        groupedFiles = this._getFilesWithXhr(file.xhr);
+        for (j = 0, len = groupedFiles.length; j < len; j++) {
+          groupedFile = groupedFiles[j];
+          groupedFile.status = Dropzone.CANCELED;
+        }
+        file.xhr.abort();
+        for (k = 0, len1 = groupedFiles.length; k < len1; k++) {
+          groupedFile = groupedFiles[k];
+          this.emit("canceled", groupedFile);
+        }
+        if (this.options.uploadMultiple) {
+          this.emit("canceledmultiple", groupedFiles);
+        }
+      } else if ((ref = file.status) === Dropzone.ADDED || ref === Dropzone.QUEUED) {
+        file.status = Dropzone.CANCELED;
+        this.emit("canceled", file);
+        if (this.options.uploadMultiple) {
+          this.emit("canceledmultiple", [file]);
+        }
+      }
+      if (this.options.autoProcessQueue) {
+        return this.processQueue();
+      }
+    };
+
+    resolveOption = function() {
+      var args, option;
+      option = arguments[0], args = 2 <= arguments.length ? slice.call(arguments, 1) : [];
+      if (typeof option === 'function') {
+        return option.apply(this, args);
+      }
+      return option;
+    };
+
+    Dropzone.prototype.uploadFile = function(file) {
+      return this.uploadFiles([file]);
+    };
+
+    Dropzone.prototype.uploadFiles = function(files) {
+      var doneCounter, doneFunction, file, formData, handleError, headerName, headerValue, headers, i, input, inputName, inputType, j, k, key, l, len, len1, len2, len3, m, method, o, option, progressObj, ref, ref1, ref2, ref3, ref4, ref5, response, results, updateProgress, url, value, xhr;
+      xhr = new XMLHttpRequest();
+      for (j = 0, len = files.length; j < len; j++) {
+        file = files[j];
+        file.xhr = xhr;
+      }
+      method = resolveOption(this.options.method, files);
+      url = resolveOption(this.options.url, files);
+      xhr.open(method, url, true);
+      xhr.timeout = resolveOption(this.options.timeout, files);
+      xhr.withCredentials = !!this.options.withCredentials;
+      response = null;
+      handleError = (function(_this) {
+        return function() {
+          var k, len1, results;
+          results = [];
+          for (k = 0, len1 = files.length; k < len1; k++) {
+            file = files[k];
+            results.push(_this._errorProcessing(files, response || _this.options.dictResponseError.replace("{{statusCode}}", xhr.status), xhr));
+          }
+          return results;
+        };
+      })(this);
+      updateProgress = (function(_this) {
+        return function(e) {
+          var allFilesFinished, k, l, len1, len2, len3, m, progress, results;
+          if (e != null) {
+            progress = 100 * e.loaded / e.total;
+            for (k = 0, len1 = files.length; k < len1; k++) {
+              file = files[k];
+              file.upload.progress = progress;
+              file.upload.total = e.total;
+              file.upload.bytesSent = e.loaded;
+            }
+          } else {
+            allFilesFinished = true;
+            progress = 100;
+            for (l = 0, len2 = files.length; l < len2; l++) {
+              file = files[l];
+              if (!(file.upload.progress === 100 && file.upload.bytesSent === file.upload.total)) {
+                allFilesFinished = false;
+              }
+              file.upload.progress = progress;
+              file.upload.bytesSent = file.upload.total;
+            }
+            if (allFilesFinished) {
+              return;
+            }
+          }
+          results = [];
+          for (m = 0, len3 = files.length; m < len3; m++) {
+            file = files[m];
+            results.push(_this.emit("uploadprogress", file, progress, file.upload.bytesSent));
+          }
+          return results;
+        };
+      })(this);
+      xhr.onload = (function(_this) {
+        return function(e) {
+          var error1, ref;
+          if (files[0].status === Dropzone.CANCELED) {
+            return;
+          }
+          if (xhr.readyState !== 4) {
+            return;
+          }
+          if (xhr.responseType !== 'arraybuffer' && xhr.responseType !== 'blob') {
+            response = xhr.responseText;
+            if (xhr.getResponseHeader("content-type") && ~xhr.getResponseHeader("content-type").indexOf("application/json")) {
+              try {
+                response = JSON.parse(response);
+              } catch (error1) {
+                e = error1;
+                response = "Invalid JSON response from server.";
+              }
+            }
+          }
+          updateProgress();
+          if (!((200 <= (ref = xhr.status) && ref < 300))) {
+            return handleError();
+          } else {
+            return _this._finished(files, response, e);
+          }
+        };
+      })(this);
+      xhr.onerror = (function(_this) {
+        return function() {
+          if (files[0].status === Dropzone.CANCELED) {
+            return;
+          }
+          return handleError();
+        };
+      })(this);
+      progressObj = (ref = xhr.upload) != null ? ref : xhr;
+      progressObj.onprogress = updateProgress;
+      headers = {
+        "Accept": "application/json",
+        "Cache-Control": "no-cache",
+        "X-Requested-With": "XMLHttpRequest"
+      };
+      if (this.options.headers) {
+        extend(headers, this.options.headers);
+      }
+      for (headerName in headers) {
+        headerValue = headers[headerName];
+        if (headerValue) {
+          xhr.setRequestHeader(headerName, headerValue);
+        }
+      }
+      formData = new FormData();
+      if (this.options.params) {
+        ref1 = this.options.params;
+        for (key in ref1) {
+          value = ref1[key];
+          formData.append(key, value);
+        }
+      }
+      for (k = 0, len1 = files.length; k < len1; k++) {
+        file = files[k];
+        this.emit("sending", file, xhr, formData);
+      }
+      if (this.options.uploadMultiple) {
+        this.emit("sendingmultiple", files, xhr, formData);
+      }
+      if (this.element.tagName === "FORM") {
+        ref2 = this.element.querySelectorAll("input, textarea, select, button");
+        for (l = 0, len2 = ref2.length; l < len2; l++) {
+          input = ref2[l];
+          inputName = input.getAttribute("name");
+          inputType = input.getAttribute("type");
+          if (input.tagName === "SELECT" && input.hasAttribute("multiple")) {
+            ref3 = input.options;
+            for (m = 0, len3 = ref3.length; m < len3; m++) {
+              option = ref3[m];
+              if (option.selected) {
+                formData.append(inputName, option.value);
+              }
+            }
+          } else if (!inputType || ((ref4 = inputType.toLowerCase()) !== "checkbox" && ref4 !== "radio") || input.checked) {
+            formData.append(inputName, input.value);
+          }
+        }
+      }
+      doneCounter = 0;
+      results = [];
+      for (i = o = 0, ref5 = files.length - 1; 0 <= ref5 ? o <= ref5 : o >= ref5; i = 0 <= ref5 ? ++o : --o) {
+        doneFunction = (function(_this) {
+          return function(file, paramName, fileName) {
+            return function(transformedFile) {
+              formData.append(paramName, transformedFile, fileName);
+              if (++doneCounter === files.length) {
+                return _this.submitRequest(xhr, formData, files);
+              }
+            };
+          };
+        })(this);
+        results.push(this.options.transformFile.call(this, files[i], doneFunction(files[i], this._getParamName(i), files[i].upload.filename)));
+      }
+      return results;
+    };
+
+    Dropzone.prototype.submitRequest = function(xhr, formData, files) {
+      return xhr.send(formData);
+    };
+
+    Dropzone.prototype._finished = function(files, responseText, e) {
+      var file, j, len;
+      for (j = 0, len = files.length; j < len; j++) {
+        file = files[j];
+        file.status = Dropzone.SUCCESS;
+        this.emit("success", file, responseText, e);
+        this.emit("complete", file);
+      }
+      if (this.options.uploadMultiple) {
+        this.emit("successmultiple", files, responseText, e);
+        this.emit("completemultiple", files);
+      }
+      if (this.options.autoProcessQueue) {
+        return this.processQueue();
+      }
+    };
+
+    Dropzone.prototype._errorProcessing = function(files, message, xhr) {
+      var file, j, len;
+      for (j = 0, len = files.length; j < len; j++) {
+        file = files[j];
+        file.status = Dropzone.ERROR;
+        this.emit("error", file, message, xhr);
+        this.emit("complete", file);
+      }
+      if (this.options.uploadMultiple) {
+        this.emit("errormultiple", files, message, xhr);
+        this.emit("completemultiple", files);
+      }
+      if (this.options.autoProcessQueue) {
+        return this.processQueue();
+      }
+    };
+
+    return Dropzone;
+
+  })(Emitter);
+
+  Dropzone.version = "5.1.1";
+
+  Dropzone.options = {};
+
+  Dropzone.optionsForElement = function(element) {
+    if (element.getAttribute("id")) {
+      return Dropzone.options[camelize(element.getAttribute("id"))];
+    } else {
+      return void 0;
+    }
+  };
+
+  Dropzone.instances = [];
+
+  Dropzone.forElement = function(element) {
+    if (typeof element === "string") {
+      element = document.querySelector(element);
+    }
+    if ((element != null ? element.dropzone : void 0) == null) {
+      throw new Error("No Dropzone found for given element. This is probably because you're trying to access it before Dropzone had the time to initialize. Use the `init` option to setup any additional observers on your Dropzone.");
+    }
+    return element.dropzone;
+  };
+
+  Dropzone.autoDiscover = true;
+
+  Dropzone.discover = function() {
+    var checkElements, dropzone, dropzones, j, len, results;
+    if (document.querySelectorAll) {
+      dropzones = document.querySelectorAll(".dropzone");
+    } else {
+      dropzones = [];
+      checkElements = function(elements) {
+        var el, j, len, results;
+        results = [];
+        for (j = 0, len = elements.length; j < len; j++) {
+          el = elements[j];
+          if (/(^| )dropzone($| )/.test(el.className)) {
+            results.push(dropzones.push(el));
+          } else {
+            results.push(void 0);
+          }
+        }
+        return results;
+      };
+      checkElements(document.getElementsByTagName("div"));
+      checkElements(document.getElementsByTagName("form"));
+    }
+    results = [];
+    for (j = 0, len = dropzones.length; j < len; j++) {
+      dropzone = dropzones[j];
+      if (Dropzone.optionsForElement(dropzone) !== false) {
+        results.push(new Dropzone(dropzone));
+      } else {
+        results.push(void 0);
+      }
+    }
+    return results;
+  };
+
+  Dropzone.blacklistedBrowsers = [/opera.*Macintosh.*version\/12/i];
+
+  Dropzone.isBrowserSupported = function() {
+    var capableBrowser, j, len, ref, regex;
+    capableBrowser = true;
+    if (window.File && window.FileReader && window.FileList && window.Blob && window.FormData && document.querySelector) {
+      if (!("classList" in document.createElement("a"))) {
+        capableBrowser = false;
+      } else {
+        ref = Dropzone.blacklistedBrowsers;
+        for (j = 0, len = ref.length; j < len; j++) {
+          regex = ref[j];
+          if (regex.test(navigator.userAgent)) {
+            capableBrowser = false;
+            continue;
+          }
+        }
+      }
+    } else {
+      capableBrowser = false;
+    }
+    return capableBrowser;
+  };
+
+  Dropzone.dataURItoBlob = function(dataURI) {
+    var ab, byteString, i, ia, j, mimeString, ref;
+    byteString = atob(dataURI.split(',')[1]);
+    mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];
+    ab = new ArrayBuffer(byteString.length);
+    ia = new Uint8Array(ab);
+    for (i = j = 0, ref = byteString.length; 0 <= ref ? j <= ref : j >= ref; i = 0 <= ref ? ++j : --j) {
+      ia[i] = byteString.charCodeAt(i);
+    }
+    return new Blob([ab], {
+      type: mimeString
+    });
+  };
+
+  without = function(list, rejectedItem) {
+    var item, j, len, results;
+    results = [];
+    for (j = 0, len = list.length; j < len; j++) {
+      item = list[j];
+      if (item !== rejectedItem) {
+        results.push(item);
+      }
+    }
+    return results;
+  };
+
+  camelize = function(str) {
+    return str.replace(/[\-_](\w)/g, function(match) {
+      return match.charAt(1).toUpperCase();
+    });
+  };
+
+  Dropzone.createElement = function(string) {
+    var div;
+    div = document.createElement("div");
+    div.innerHTML = string;
+    return div.childNodes[0];
+  };
+
+  Dropzone.elementInside = function(element, container) {
+    if (element === container) {
+      return true;
+    }
+    while (element = element.parentNode) {
+      if (element === container) {
+        return true;
+      }
+    }
+    return false;
+  };
+
+  Dropzone.getElement = function(el, name) {
+    var element;
+    if (typeof el === "string") {
+      element = document.querySelector(el);
+    } else if (el.nodeType != null) {
+      element = el;
+    }
+    if (element == null) {
+      throw new Error("Invalid `" + name + "` option provided. Please provide a CSS selector or a plain HTML element.");
+    }
+    return element;
+  };
+
+  Dropzone.getElements = function(els, name) {
+    var e, el, elements, error1, j, k, len, len1, ref;
+    if (els instanceof Array) {
+      elements = [];
+      try {
+        for (j = 0, len = els.length; j < len; j++) {
+          el = els[j];
+          elements.push(this.getElement(el, name));
+        }
+      } catch (error1) {
+        e = error1;
+        elements = null;
+      }
+    } else if (typeof els === "string") {
+      elements = [];
+      ref = document.querySelectorAll(els);
+      for (k = 0, len1 = ref.length; k < len1; k++) {
+        el = ref[k];
+        elements.push(el);
+      }
+    } else if (els.nodeType != null) {
+      elements = [els];
+    }
+    if (!((elements != null) && elements.length)) {
+      throw new Error("Invalid `" + name + "` option provided. Please provide a CSS selector, a plain HTML element or a list of those.");
+    }
+    return elements;
+  };
+
+  Dropzone.confirm = function(question, accepted, rejected) {
+    if (window.confirm(question)) {
+      return accepted();
+    } else if (rejected != null) {
+      return rejected();
+    }
+  };
+
+  Dropzone.isValidFile = function(file, acceptedFiles) {
+    var baseMimeType, j, len, mimeType, validType;
+    if (!acceptedFiles) {
+      return true;
+    }
+    acceptedFiles = acceptedFiles.split(",");
+    mimeType = file.type;
+    baseMimeType = mimeType.replace(/\/.*$/, "");
+    for (j = 0, len = acceptedFiles.length; j < len; j++) {
+      validType = acceptedFiles[j];
+      validType = validType.trim();
+      if (validType.charAt(0) === ".") {
+        if (file.name.toLowerCase().indexOf(validType.toLowerCase(), file.name.length - validType.length) !== -1) {
+          return true;
+        }
+      } else if (/\/\*$/.test(validType)) {
+        if (baseMimeType === validType.replace(/\/.*$/, "")) {
+          return true;
+        }
+      } else {
+        if (mimeType === validType) {
+          return true;
+        }
+      }
+    }
+    return false;
+  };
+
+  if (typeof jQuery !== "undefined" && jQuery !== null) {
+    jQuery.fn.dropzone = function(options) {
+      return this.each(function() {
+        return new Dropzone(this, options);
+      });
+    };
+  }
+
+  if (typeof module !== "undefined" && module !== null) {
+    module.exports = Dropzone;
+  } else {
+    window.Dropzone = Dropzone;
+  }
+
+  Dropzone.ADDED = "added";
+
+  Dropzone.QUEUED = "queued";
+
+  Dropzone.ACCEPTED = Dropzone.QUEUED;
+
+  Dropzone.UPLOADING = "uploading";
+
+  Dropzone.PROCESSING = Dropzone.UPLOADING;
+
+  Dropzone.CANCELED = "canceled";
+
+  Dropzone.ERROR = "error";
+
+  Dropzone.SUCCESS = "success";
+
+
+  /*
+  
+  Bugfix for iOS 6 and 7
+  Source: http://stackoverflow.com/questions/11929099/html5-canvas-drawimage-ratio-bug-ios
+  based on the work of https://github.com/stomita/ios-imagefile-megapixel
+   */
+
+  detectVerticalSquash = function(img) {
+    var alpha, canvas, ctx, data, ey, ih, iw, py, ratio, sy;
+    iw = img.naturalWidth;
+    ih = img.naturalHeight;
+    canvas = document.createElement("canvas");
+    canvas.width = 1;
+    canvas.height = ih;
+    ctx = canvas.getContext("2d");
+    ctx.drawImage(img, 0, 0);
+    data = ctx.getImageData(1, 0, 1, ih).data;
+    sy = 0;
+    ey = ih;
+    py = ih;
+    while (py > sy) {
+      alpha = data[(py - 1) * 4 + 3];
+      if (alpha === 0) {
+        ey = py;
+      } else {
+        sy = py;
+      }
+      py = (ey + sy) >> 1;
+    }
+    ratio = py / ih;
+    if (ratio === 0) {
+      return 1;
+    } else {
+      return ratio;
+    }
+  };
+
+  drawImageIOSFix = function(ctx, img, sx, sy, sw, sh, dx, dy, dw, dh) {
+    var vertSquashRatio;
+    vertSquashRatio = detectVerticalSquash(img);
+    return ctx.drawImage(img, sx, sy, sw, sh, dx, dy, dw, dh / vertSquashRatio);
+  };
+
+  ExifRestore = (function() {
+    function ExifRestore() {}
+
+    ExifRestore.KEY_STR = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
+
+    ExifRestore.encode64 = function(input) {
+      var chr1, chr2, chr3, enc1, enc2, enc3, enc4, i, output;
+      output = '';
+      chr1 = void 0;
+      chr2 = void 0;
+      chr3 = '';
+      enc1 = void 0;
+      enc2 = void 0;
+      enc3 = void 0;
+      enc4 = '';
+      i = 0;
+      while (true) {
+        chr1 = input[i++];
+        chr2 = input[i++];
+        chr3 = input[i++];
+        enc1 = chr1 >> 2;
+        enc2 = (chr1 & 3) << 4 | chr2 >> 4;
+        enc3 = (chr2 & 15) << 2 | chr3 >> 6;
+        enc4 = chr3 & 63;
+        if (isNaN(chr2)) {
+          enc3 = enc4 = 64;
+        } else if (isNaN(chr3)) {
+          enc4 = 64;
+        }
+        output = output + this.KEY_STR.charAt(enc1) + this.KEY_STR.charAt(enc2) + this.KEY_STR.charAt(enc3) + this.KEY_STR.charAt(enc4);
+        chr1 = chr2 = chr3 = '';
+        enc1 = enc2 = enc3 = enc4 = '';
+        if (!(i < input.length)) {
+          break;
+        }
+      }
+      return output;
+    };
+
+    ExifRestore.restore = function(origFileBase64, resizedFileBase64) {
+      var image, rawImage, segments;
+      if (!origFileBase64.match('data:image/jpeg;base64,')) {
+        return resizedFileBase64;
+      }
+      rawImage = this.decode64(origFileBase64.replace('data:image/jpeg;base64,', ''));
+      segments = this.slice2Segments(rawImage);
+      image = this.exifManipulation(resizedFileBase64, segments);
+      return 'data:image/jpeg;base64,' + this.encode64(image);
+    };
+
+    ExifRestore.exifManipulation = function(resizedFileBase64, segments) {
+      var aBuffer, exifArray, newImageArray;
+      exifArray = this.getExifArray(segments);
+      newImageArray = this.insertExif(resizedFileBase64, exifArray);
+      aBuffer = new Uint8Array(newImageArray);
+      return aBuffer;
+    };
+
+    ExifRestore.getExifArray = function(segments) {
+      var seg, x;
+      seg = void 0;
+      x = 0;
+      while (x < segments.length) {
+        seg = segments[x];
+        if (seg[0] === 255 & seg[1] === 225) {
+          return seg;
+        }
+        x++;
+      }
+      return [];
+    };
+
+    ExifRestore.insertExif = function(resizedFileBase64, exifArray) {
+      var array, ato, buf, imageData, mae, separatePoint;
+      imageData = resizedFileBase64.replace('data:image/jpeg;base64,', '');
+      buf = this.decode64(imageData);
+      separatePoint = buf.indexOf(255, 3);
+      mae = buf.slice(0, separatePoint);
+      ato = buf.slice(separatePoint);
+      array = mae;
+      array = array.concat(exifArray);
+      array = array.concat(ato);
+      return array;
+    };
+
+    ExifRestore.slice2Segments = function(rawImageArray) {
+      var endPoint, head, length, seg, segments;
+      head = 0;
+      segments = [];
+      while (true) {
+        if (rawImageArray[head] === 255 & rawImageArray[head + 1] === 218) {
+          break;
+        }
+        if (rawImageArray[head] === 255 & rawImageArray[head + 1] === 216) {
+          head += 2;
+        } else {
+          length = rawImageArray[head + 2] * 256 + rawImageArray[head + 3];
+          endPoint = head + length + 2;
+          seg = rawImageArray.slice(head, endPoint);
+          segments.push(seg);
+          head = endPoint;
+        }
+        if (head > rawImageArray.length) {
+          break;
+        }
+      }
+      return segments;
+    };
+
+    ExifRestore.decode64 = function(input) {
+      var base64test, buf, chr1, chr2, chr3, enc1, enc2, enc3, enc4, i, output;
+      output = '';
+      chr1 = void 0;
+      chr2 = void 0;
+      chr3 = '';
+      enc1 = void 0;
+      enc2 = void 0;
+      enc3 = void 0;
+      enc4 = '';
+      i = 0;
+      buf = [];
+      base64test = /[^A-Za-z0-9\+\/\=]/g;
+      if (base64test.exec(input)) {
+        console.warning('There were invalid base64 characters in the input text.\n' + 'Valid base64 characters are A-Z, a-z, 0-9, \'+\', \'/\',and \'=\'\n' + 'Expect errors in decoding.');
+      }
+      input = input.replace(/[^A-Za-z0-9\+\/\=]/g, '');
+      while (true) {
+        enc1 = this.KEY_STR.indexOf(input.charAt(i++));
+        enc2 = this.KEY_STR.indexOf(input.charAt(i++));
+        enc3 = this.KEY_STR.indexOf(input.charAt(i++));
+        enc4 = this.KEY_STR.indexOf(input.charAt(i++));
+        chr1 = enc1 << 2 | enc2 >> 4;
+        chr2 = (enc2 & 15) << 4 | enc3 >> 2;
+        chr3 = (enc3 & 3) << 6 | enc4;
+        buf.push(chr1);
+        if (enc3 !== 64) {
+          buf.push(chr2);
+        }
+        if (enc4 !== 64) {
+          buf.push(chr3);
+        }
+        chr1 = chr2 = chr3 = '';
+        enc1 = enc2 = enc3 = enc4 = '';
+        if (!(i < input.length)) {
+          break;
+        }
+      }
+      return buf;
+    };
+
+    return ExifRestore;
+
+  })();
+
+
+  /*
+   * contentloaded.js
+   *
+   * Author: Diego Perini (diego.perini at gmail.com)
+   * Summary: cross-browser wrapper for DOMContentLoaded
+   * Updated: 20101020
+   * License: MIT
+   * Version: 1.2
+   *
+   * URL:
+   * http://javascript.nwbox.com/ContentLoaded/
+   * http://javascript.nwbox.com/ContentLoaded/MIT-LICENSE
+   */
+
+  contentLoaded = function(win, fn) {
+    var add, doc, done, init, poll, pre, rem, root, top;
+    done = false;
+    top = true;
+    doc = win.document;
+    root = doc.documentElement;
+    add = (doc.addEventListener ? "addEventListener" : "attachEvent");
+    rem = (doc.addEventListener ? "removeEventListener" : "detachEvent");
+    pre = (doc.addEventListener ? "" : "on");
+    init = function(e) {
+      if (e.type === "readystatechange" && doc.readyState !== "complete") {
+        return;
+      }
+      (e.type === "load" ? win : doc)[rem](pre + e.type, init, false);
+      if (!done && (done = true)) {
+        return fn.call(win, e.type || e);
+      }
+    };
+    poll = function() {
+      var e, error1;
+      try {
+        root.doScroll("left");
+      } catch (error1) {
+        e = error1;
+        setTimeout(poll, 50);
+        return;
+      }
+      return init("poll");
+    };
+    if (doc.readyState !== "complete") {
+      if (doc.createEventObject && root.doScroll) {
+        try {
+          top = !win.frameElement;
+        } catch (undefined) {}
+        if (top) {
+          poll();
+        }
+      }
+      doc[add](pre + "DOMContentLoaded", init, false);
+      doc[add](pre + "readystatechange", init, false);
+      return win[add](pre + "load", init, false);
+    }
+  };
+
+  Dropzone._autoDiscoverFunction = function() {
+    if (Dropzone.autoDiscover) {
+      return Dropzone.discover();
+    }
+  };
+
+  contentLoaded(window, Dropzone._autoDiscoverFunction);
+
+}).call(this);
+
+    return module.exports;
+}));
\ No newline at end of file
diff --git a/vendor/enyo/dropzone/dist/dropzone.css b/vendor/enyo/dropzone/dist/dropzone.css
new file mode 100644
index 0000000000000000000000000000000000000000..0494d1ccf4461a6064a5ecf5daeeaae0f42f8b81
--- /dev/null
+++ b/vendor/enyo/dropzone/dist/dropzone.css
@@ -0,0 +1,388 @@
+/*
+ * The MIT License
+ * Copyright (c) 2012 Matias Meno <m@tias.me>
+ */
+@-webkit-keyframes passing-through {
+  0% {
+    opacity: 0;
+    -webkit-transform: translateY(40px);
+    -moz-transform: translateY(40px);
+    -ms-transform: translateY(40px);
+    -o-transform: translateY(40px);
+    transform: translateY(40px); }
+  30%, 70% {
+    opacity: 1;
+    -webkit-transform: translateY(0px);
+    -moz-transform: translateY(0px);
+    -ms-transform: translateY(0px);
+    -o-transform: translateY(0px);
+    transform: translateY(0px); }
+  100% {
+    opacity: 0;
+    -webkit-transform: translateY(-40px);
+    -moz-transform: translateY(-40px);
+    -ms-transform: translateY(-40px);
+    -o-transform: translateY(-40px);
+    transform: translateY(-40px); } }
+@-moz-keyframes passing-through {
+  0% {
+    opacity: 0;
+    -webkit-transform: translateY(40px);
+    -moz-transform: translateY(40px);
+    -ms-transform: translateY(40px);
+    -o-transform: translateY(40px);
+    transform: translateY(40px); }
+  30%, 70% {
+    opacity: 1;
+    -webkit-transform: translateY(0px);
+    -moz-transform: translateY(0px);
+    -ms-transform: translateY(0px);
+    -o-transform: translateY(0px);
+    transform: translateY(0px); }
+  100% {
+    opacity: 0;
+    -webkit-transform: translateY(-40px);
+    -moz-transform: translateY(-40px);
+    -ms-transform: translateY(-40px);
+    -o-transform: translateY(-40px);
+    transform: translateY(-40px); } }
+@keyframes passing-through {
+  0% {
+    opacity: 0;
+    -webkit-transform: translateY(40px);
+    -moz-transform: translateY(40px);
+    -ms-transform: translateY(40px);
+    -o-transform: translateY(40px);
+    transform: translateY(40px); }
+  30%, 70% {
+    opacity: 1;
+    -webkit-transform: translateY(0px);
+    -moz-transform: translateY(0px);
+    -ms-transform: translateY(0px);
+    -o-transform: translateY(0px);
+    transform: translateY(0px); }
+  100% {
+    opacity: 0;
+    -webkit-transform: translateY(-40px);
+    -moz-transform: translateY(-40px);
+    -ms-transform: translateY(-40px);
+    -o-transform: translateY(-40px);
+    transform: translateY(-40px); } }
+@-webkit-keyframes slide-in {
+  0% {
+    opacity: 0;
+    -webkit-transform: translateY(40px);
+    -moz-transform: translateY(40px);
+    -ms-transform: translateY(40px);
+    -o-transform: translateY(40px);
+    transform: translateY(40px); }
+  30% {
+    opacity: 1;
+    -webkit-transform: translateY(0px);
+    -moz-transform: translateY(0px);
+    -ms-transform: translateY(0px);
+    -o-transform: translateY(0px);
+    transform: translateY(0px); } }
+@-moz-keyframes slide-in {
+  0% {
+    opacity: 0;
+    -webkit-transform: translateY(40px);
+    -moz-transform: translateY(40px);
+    -ms-transform: translateY(40px);
+    -o-transform: translateY(40px);
+    transform: translateY(40px); }
+  30% {
+    opacity: 1;
+    -webkit-transform: translateY(0px);
+    -moz-transform: translateY(0px);
+    -ms-transform: translateY(0px);
+    -o-transform: translateY(0px);
+    transform: translateY(0px); } }
+@keyframes slide-in {
+  0% {
+    opacity: 0;
+    -webkit-transform: translateY(40px);
+    -moz-transform: translateY(40px);
+    -ms-transform: translateY(40px);
+    -o-transform: translateY(40px);
+    transform: translateY(40px); }
+  30% {
+    opacity: 1;
+    -webkit-transform: translateY(0px);
+    -moz-transform: translateY(0px);
+    -ms-transform: translateY(0px);
+    -o-transform: translateY(0px);
+    transform: translateY(0px); } }
+@-webkit-keyframes pulse {
+  0% {
+    -webkit-transform: scale(1);
+    -moz-transform: scale(1);
+    -ms-transform: scale(1);
+    -o-transform: scale(1);
+    transform: scale(1); }
+  10% {
+    -webkit-transform: scale(1.1);
+    -moz-transform: scale(1.1);
+    -ms-transform: scale(1.1);
+    -o-transform: scale(1.1);
+    transform: scale(1.1); }
+  20% {
+    -webkit-transform: scale(1);
+    -moz-transform: scale(1);
+    -ms-transform: scale(1);
+    -o-transform: scale(1);
+    transform: scale(1); } }
+@-moz-keyframes pulse {
+  0% {
+    -webkit-transform: scale(1);
+    -moz-transform: scale(1);
+    -ms-transform: scale(1);
+    -o-transform: scale(1);
+    transform: scale(1); }
+  10% {
+    -webkit-transform: scale(1.1);
+    -moz-transform: scale(1.1);
+    -ms-transform: scale(1.1);
+    -o-transform: scale(1.1);
+    transform: scale(1.1); }
+  20% {
+    -webkit-transform: scale(1);
+    -moz-transform: scale(1);
+    -ms-transform: scale(1);
+    -o-transform: scale(1);
+    transform: scale(1); } }
+@keyframes pulse {
+  0% {
+    -webkit-transform: scale(1);
+    -moz-transform: scale(1);
+    -ms-transform: scale(1);
+    -o-transform: scale(1);
+    transform: scale(1); }
+  10% {
+    -webkit-transform: scale(1.1);
+    -moz-transform: scale(1.1);
+    -ms-transform: scale(1.1);
+    -o-transform: scale(1.1);
+    transform: scale(1.1); }
+  20% {
+    -webkit-transform: scale(1);
+    -moz-transform: scale(1);
+    -ms-transform: scale(1);
+    -o-transform: scale(1);
+    transform: scale(1); } }
+.dropzone, .dropzone * {
+  box-sizing: border-box; }
+
+.dropzone {
+  min-height: 150px;
+  border: 2px solid rgba(0, 0, 0, 0.3);
+  background: white;
+  padding: 20px 20px; }
+  .dropzone.dz-clickable {
+    cursor: pointer; }
+    .dropzone.dz-clickable * {
+      cursor: default; }
+    .dropzone.dz-clickable .dz-message, .dropzone.dz-clickable .dz-message * {
+      cursor: pointer; }
+  .dropzone.dz-started .dz-message {
+    display: none; }
+  .dropzone.dz-drag-hover {
+    border-style: solid; }
+    .dropzone.dz-drag-hover .dz-message {
+      opacity: 0.5; }
+  .dropzone .dz-message {
+    text-align: center;
+    margin: 2em 0; }
+  .dropzone .dz-preview {
+    position: relative;
+    display: inline-block;
+    vertical-align: top;
+    margin: 16px;
+    min-height: 100px; }
+    .dropzone .dz-preview:hover {
+      z-index: 1000; }
+      .dropzone .dz-preview:hover .dz-details {
+        opacity: 1; }
+    .dropzone .dz-preview.dz-file-preview .dz-image {
+      border-radius: 20px;
+      background: #999;
+      background: linear-gradient(to bottom, #eee, #ddd); }
+    .dropzone .dz-preview.dz-file-preview .dz-details {
+      opacity: 1; }
+    .dropzone .dz-preview.dz-image-preview {
+      background: white; }
+      .dropzone .dz-preview.dz-image-preview .dz-details {
+        -webkit-transition: opacity 0.2s linear;
+        -moz-transition: opacity 0.2s linear;
+        -ms-transition: opacity 0.2s linear;
+        -o-transition: opacity 0.2s linear;
+        transition: opacity 0.2s linear; }
+    .dropzone .dz-preview .dz-remove {
+      font-size: 14px;
+      text-align: center;
+      display: block;
+      cursor: pointer;
+      border: none; }
+      .dropzone .dz-preview .dz-remove:hover {
+        text-decoration: underline; }
+    .dropzone .dz-preview:hover .dz-details {
+      opacity: 1; }
+    .dropzone .dz-preview .dz-details {
+      z-index: 20;
+      position: absolute;
+      top: 0;
+      left: 0;
+      opacity: 0;
+      font-size: 13px;
+      min-width: 100%;
+      max-width: 100%;
+      padding: 2em 1em;
+      text-align: center;
+      color: rgba(0, 0, 0, 0.9);
+      line-height: 150%; }
+      .dropzone .dz-preview .dz-details .dz-size {
+        margin-bottom: 1em;
+        font-size: 16px; }
+      .dropzone .dz-preview .dz-details .dz-filename {
+        white-space: nowrap; }
+        .dropzone .dz-preview .dz-details .dz-filename:hover span {
+          border: 1px solid rgba(200, 200, 200, 0.8);
+          background-color: rgba(255, 255, 255, 0.8); }
+        .dropzone .dz-preview .dz-details .dz-filename:not(:hover) {
+          overflow: hidden;
+          text-overflow: ellipsis; }
+          .dropzone .dz-preview .dz-details .dz-filename:not(:hover) span {
+            border: 1px solid transparent; }
+      .dropzone .dz-preview .dz-details .dz-filename span, .dropzone .dz-preview .dz-details .dz-size span {
+        background-color: rgba(255, 255, 255, 0.4);
+        padding: 0 0.4em;
+        border-radius: 3px; }
+    .dropzone .dz-preview:hover .dz-image img {
+      -webkit-transform: scale(1.05, 1.05);
+      -moz-transform: scale(1.05, 1.05);
+      -ms-transform: scale(1.05, 1.05);
+      -o-transform: scale(1.05, 1.05);
+      transform: scale(1.05, 1.05);
+      -webkit-filter: blur(8px);
+      filter: blur(8px); }
+    .dropzone .dz-preview .dz-image {
+      border-radius: 20px;
+      overflow: hidden;
+      width: 120px;
+      height: 120px;
+      position: relative;
+      display: block;
+      z-index: 10; }
+      .dropzone .dz-preview .dz-image img {
+        display: block; }
+    .dropzone .dz-preview.dz-success .dz-success-mark {
+      -webkit-animation: passing-through 3s cubic-bezier(0.77, 0, 0.175, 1);
+      -moz-animation: passing-through 3s cubic-bezier(0.77, 0, 0.175, 1);
+      -ms-animation: passing-through 3s cubic-bezier(0.77, 0, 0.175, 1);
+      -o-animation: passing-through 3s cubic-bezier(0.77, 0, 0.175, 1);
+      animation: passing-through 3s cubic-bezier(0.77, 0, 0.175, 1); }
+    .dropzone .dz-preview.dz-error .dz-error-mark {
+      opacity: 1;
+      -webkit-animation: slide-in 3s cubic-bezier(0.77, 0, 0.175, 1);
+      -moz-animation: slide-in 3s cubic-bezier(0.77, 0, 0.175, 1);
+      -ms-animation: slide-in 3s cubic-bezier(0.77, 0, 0.175, 1);
+      -o-animation: slide-in 3s cubic-bezier(0.77, 0, 0.175, 1);
+      animation: slide-in 3s cubic-bezier(0.77, 0, 0.175, 1); }
+    .dropzone .dz-preview .dz-success-mark, .dropzone .dz-preview .dz-error-mark {
+      pointer-events: none;
+      opacity: 0;
+      z-index: 500;
+      position: absolute;
+      display: block;
+      top: 50%;
+      left: 50%;
+      margin-left: -27px;
+      margin-top: -27px; }
+      .dropzone .dz-preview .dz-success-mark svg, .dropzone .dz-preview .dz-error-mark svg {
+        display: block;
+        width: 54px;
+        height: 54px; }
+    .dropzone .dz-preview.dz-processing .dz-progress {
+      opacity: 1;
+      -webkit-transition: all 0.2s linear;
+      -moz-transition: all 0.2s linear;
+      -ms-transition: all 0.2s linear;
+      -o-transition: all 0.2s linear;
+      transition: all 0.2s linear; }
+    .dropzone .dz-preview.dz-complete .dz-progress {
+      opacity: 0;
+      -webkit-transition: opacity 0.4s ease-in;
+      -moz-transition: opacity 0.4s ease-in;
+      -ms-transition: opacity 0.4s ease-in;
+      -o-transition: opacity 0.4s ease-in;
+      transition: opacity 0.4s ease-in; }
+    .dropzone .dz-preview:not(.dz-processing) .dz-progress {
+      -webkit-animation: pulse 6s ease infinite;
+      -moz-animation: pulse 6s ease infinite;
+      -ms-animation: pulse 6s ease infinite;
+      -o-animation: pulse 6s ease infinite;
+      animation: pulse 6s ease infinite; }
+    .dropzone .dz-preview .dz-progress {
+      opacity: 1;
+      z-index: 1000;
+      pointer-events: none;
+      position: absolute;
+      height: 16px;
+      left: 50%;
+      top: 50%;
+      margin-top: -8px;
+      width: 80px;
+      margin-left: -40px;
+      background: rgba(255, 255, 255, 0.9);
+      -webkit-transform: scale(1);
+      border-radius: 8px;
+      overflow: hidden; }
+      .dropzone .dz-preview .dz-progress .dz-upload {
+        background: #333;
+        background: linear-gradient(to bottom, #666, #444);
+        position: absolute;
+        top: 0;
+        left: 0;
+        bottom: 0;
+        width: 0;
+        -webkit-transition: width 300ms ease-in-out;
+        -moz-transition: width 300ms ease-in-out;
+        -ms-transition: width 300ms ease-in-out;
+        -o-transition: width 300ms ease-in-out;
+        transition: width 300ms ease-in-out; }
+    .dropzone .dz-preview.dz-error .dz-error-message {
+      display: block; }
+    .dropzone .dz-preview.dz-error:hover .dz-error-message {
+      opacity: 1;
+      pointer-events: auto; }
+    .dropzone .dz-preview .dz-error-message {
+      pointer-events: none;
+      z-index: 1000;
+      position: absolute;
+      display: block;
+      display: none;
+      opacity: 0;
+      -webkit-transition: opacity 0.3s ease;
+      -moz-transition: opacity 0.3s ease;
+      -ms-transition: opacity 0.3s ease;
+      -o-transition: opacity 0.3s ease;
+      transition: opacity 0.3s ease;
+      border-radius: 8px;
+      font-size: 13px;
+      top: 130px;
+      left: -10px;
+      width: 140px;
+      background: #be2626;
+      background: linear-gradient(to bottom, #be2626, #a92222);
+      padding: 0.5em 1.2em;
+      color: white; }
+      .dropzone .dz-preview .dz-error-message:after {
+        content: '';
+        position: absolute;
+        top: -6px;
+        left: 64px;
+        width: 0;
+        height: 0;
+        border-left: 6px solid transparent;
+        border-right: 6px solid transparent;
+        border-bottom: 6px solid #be2626; }
diff --git a/vendor/enyo/dropzone/dist/dropzone.js b/vendor/enyo/dropzone/dist/dropzone.js
new file mode 100644
index 0000000000000000000000000000000000000000..1bf9a7fe4740a05922c622551fc35affb52b010a
--- /dev/null
+++ b/vendor/enyo/dropzone/dist/dropzone.js
@@ -0,0 +1,2052 @@
+
+/*
+ *
+ * More info at [www.dropzonejs.com](http://www.dropzonejs.com)
+ *
+ * Copyright (c) 2012, Matias Meno
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ */
+
+(function() {
+  var Dropzone, Emitter, ExifRestore, camelize, contentLoaded, detectVerticalSquash, drawImageIOSFix, noop, without,
+    slice = [].slice,
+    extend1 = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
+    hasProp = {}.hasOwnProperty;
+
+  noop = function() {};
+
+  Emitter = (function() {
+    function Emitter() {}
+
+    Emitter.prototype.addEventListener = Emitter.prototype.on;
+
+    Emitter.prototype.on = function(event, fn) {
+      this._callbacks = this._callbacks || {};
+      if (!this._callbacks[event]) {
+        this._callbacks[event] = [];
+      }
+      this._callbacks[event].push(fn);
+      return this;
+    };
+
+    Emitter.prototype.emit = function() {
+      var args, callback, callbacks, event, j, len;
+      event = arguments[0], args = 2 <= arguments.length ? slice.call(arguments, 1) : [];
+      this._callbacks = this._callbacks || {};
+      callbacks = this._callbacks[event];
+      if (callbacks) {
+        for (j = 0, len = callbacks.length; j < len; j++) {
+          callback = callbacks[j];
+          callback.apply(this, args);
+        }
+      }
+      return this;
+    };
+
+    Emitter.prototype.removeListener = Emitter.prototype.off;
+
+    Emitter.prototype.removeAllListeners = Emitter.prototype.off;
+
+    Emitter.prototype.removeEventListener = Emitter.prototype.off;
+
+    Emitter.prototype.off = function(event, fn) {
+      var callback, callbacks, i, j, len;
+      if (!this._callbacks || arguments.length === 0) {
+        this._callbacks = {};
+        return this;
+      }
+      callbacks = this._callbacks[event];
+      if (!callbacks) {
+        return this;
+      }
+      if (arguments.length === 1) {
+        delete this._callbacks[event];
+        return this;
+      }
+      for (i = j = 0, len = callbacks.length; j < len; i = ++j) {
+        callback = callbacks[i];
+        if (callback === fn) {
+          callbacks.splice(i, 1);
+          break;
+        }
+      }
+      return this;
+    };
+
+    return Emitter;
+
+  })();
+
+  Dropzone = (function(superClass) {
+    var extend, resolveOption;
+
+    extend1(Dropzone, superClass);
+
+    Dropzone.prototype.Emitter = Emitter;
+
+
+    /*
+    This is a list of all available events you can register on a dropzone object.
+    
+    You can register an event handler like this:
+    
+        dropzone.on("dragEnter", function() { });
+     */
+
+    Dropzone.prototype.events = ["drop", "dragstart", "dragend", "dragenter", "dragover", "dragleave", "addedfile", "addedfiles", "removedfile", "thumbnail", "error", "errormultiple", "processing", "processingmultiple", "uploadprogress", "totaluploadprogress", "sending", "sendingmultiple", "success", "successmultiple", "canceled", "canceledmultiple", "complete", "completemultiple", "reset", "maxfilesexceeded", "maxfilesreached", "queuecomplete"];
+
+    Dropzone.prototype.defaultOptions = {
+      url: null,
+      method: "post",
+      withCredentials: false,
+      timeout: 30000,
+      parallelUploads: 2,
+      uploadMultiple: false,
+      maxFilesize: 256,
+      paramName: "file",
+      createImageThumbnails: true,
+      maxThumbnailFilesize: 10,
+      thumbnailWidth: 120,
+      thumbnailHeight: 120,
+      thumbnailMethod: 'crop',
+      resizeWidth: null,
+      resizeHeight: null,
+      resizeMimeType: null,
+      resizeQuality: 0.8,
+      resizeMethod: 'contain',
+      filesizeBase: 1000,
+      maxFiles: null,
+      params: {},
+      headers: null,
+      clickable: true,
+      ignoreHiddenFiles: true,
+      acceptedFiles: null,
+      acceptedMimeTypes: null,
+      autoProcessQueue: true,
+      autoQueue: true,
+      addRemoveLinks: false,
+      previewsContainer: null,
+      hiddenInputContainer: "body",
+      capture: null,
+      renameFilename: null,
+      renameFile: null,
+      forceFallback: false,
+      dictDefaultMessage: "Drop files here to upload",
+      dictFallbackMessage: "Your browser does not support drag'n'drop file uploads.",
+      dictFallbackText: "Please use the fallback form below to upload your files like in the olden days.",
+      dictFileTooBig: "File is too big ({{filesize}}MiB). Max filesize: {{maxFilesize}}MiB.",
+      dictInvalidFileType: "You can't upload files of this type.",
+      dictResponseError: "Server responded with {{statusCode}} code.",
+      dictCancelUpload: "Cancel upload",
+      dictCancelUploadConfirmation: "Are you sure you want to cancel this upload?",
+      dictRemoveFile: "Remove file",
+      dictRemoveFileConfirmation: null,
+      dictMaxFilesExceeded: "You can not upload any more files.",
+      dictFileSizeUnits: {
+        tb: "TB",
+        gb: "GB",
+        mb: "MB",
+        kb: "KB",
+        b: "b"
+      },
+      init: function() {
+        return noop;
+      },
+      accept: function(file, done) {
+        return done();
+      },
+      fallback: function() {
+        var child, j, len, messageElement, ref, span;
+        this.element.className = this.element.className + " dz-browser-not-supported";
+        ref = this.element.getElementsByTagName("div");
+        for (j = 0, len = ref.length; j < len; j++) {
+          child = ref[j];
+          if (/(^| )dz-message($| )/.test(child.className)) {
+            messageElement = child;
+            child.className = "dz-message";
+            continue;
+          }
+        }
+        if (!messageElement) {
+          messageElement = Dropzone.createElement("<div class=\"dz-message\"><span></span></div>");
+          this.element.appendChild(messageElement);
+        }
+        span = messageElement.getElementsByTagName("span")[0];
+        if (span) {
+          if (span.textContent != null) {
+            span.textContent = this.options.dictFallbackMessage;
+          } else if (span.innerText != null) {
+            span.innerText = this.options.dictFallbackMessage;
+          }
+        }
+        return this.element.appendChild(this.getFallbackForm());
+      },
+      resize: function(file, width, height, resizeMethod) {
+        var info, srcRatio, trgRatio;
+        info = {
+          srcX: 0,
+          srcY: 0,
+          srcWidth: file.width,
+          srcHeight: file.height
+        };
+        srcRatio = file.width / file.height;
+        if ((width == null) && (height == null)) {
+          width = info.srcWidth;
+          height = info.srcHeight;
+        } else if (width == null) {
+          width = height * srcRatio;
+        } else if (height == null) {
+          height = width / srcRatio;
+        }
+        width = Math.min(width, info.srcWidth);
+        height = Math.min(height, info.srcHeight);
+        trgRatio = width / height;
+        if (info.srcWidth > width || info.srcHeight > height) {
+          if (resizeMethod === 'crop') {
+            if (srcRatio > trgRatio) {
+              info.srcHeight = file.height;
+              info.srcWidth = info.srcHeight * trgRatio;
+            } else {
+              info.srcWidth = file.width;
+              info.srcHeight = info.srcWidth / trgRatio;
+            }
+          } else if (resizeMethod === 'contain') {
+            if (srcRatio > trgRatio) {
+              height = width / srcRatio;
+            } else {
+              width = height * srcRatio;
+            }
+          } else {
+            throw new Error("Unknown resizeMethod '" + resizeMethod + "'");
+          }
+        }
+        info.srcX = (file.width - info.srcWidth) / 2;
+        info.srcY = (file.height - info.srcHeight) / 2;
+        info.trgWidth = width;
+        info.trgHeight = height;
+        return info;
+      },
+      transformFile: function(file, done) {
+        if ((this.options.resizeWidth || this.options.resizeHeight) && file.type.match(/image.*/)) {
+          return this.resizeImage(file, this.options.resizeWidth, this.options.resizeHeight, this.options.resizeMethod, done);
+        } else {
+          return done(file);
+        }
+      },
+      previewTemplate: "<div class=\"dz-preview dz-file-preview\">\n  <div class=\"dz-image\"><img data-dz-thumbnail /></div>\n  <div class=\"dz-details\">\n    <div class=\"dz-size\"><span data-dz-size></span></div>\n    <div class=\"dz-filename\"><span data-dz-name></span></div>\n  </div>\n  <div class=\"dz-progress\"><span class=\"dz-upload\" data-dz-uploadprogress></span></div>\n  <div class=\"dz-error-message\"><span data-dz-errormessage></span></div>\n  <div class=\"dz-success-mark\">\n    <svg width=\"54px\" height=\"54px\" viewBox=\"0 0 54 54\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xmlns:sketch=\"http://www.bohemiancoding.com/sketch/ns\">\n      <title>Check</title>\n      <defs></defs>\n      <g id=\"Page-1\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" sketch:type=\"MSPage\">\n        <path d=\"M23.5,31.8431458 L17.5852419,25.9283877 C16.0248253,24.3679711 13.4910294,24.366835 11.9289322,25.9289322 C10.3700136,27.4878508 10.3665912,30.0234455 11.9283877,31.5852419 L20.4147581,40.0716123 C20.5133999,40.1702541 20.6159315,40.2626649 20.7218615,40.3488435 C22.2835669,41.8725651 24.794234,41.8626202 26.3461564,40.3106978 L43.3106978,23.3461564 C44.8771021,21.7797521 44.8758057,19.2483887 43.3137085,17.6862915 C41.7547899,16.1273729 39.2176035,16.1255422 37.6538436,17.6893022 L23.5,31.8431458 Z M27,53 C41.3594035,53 53,41.3594035 53,27 C53,12.6405965 41.3594035,1 27,1 C12.6405965,1 1,12.6405965 1,27 C1,41.3594035 12.6405965,53 27,53 Z\" id=\"Oval-2\" stroke-opacity=\"0.198794158\" stroke=\"#747474\" fill-opacity=\"0.816519475\" fill=\"#FFFFFF\" sketch:type=\"MSShapeGroup\"></path>\n      </g>\n    </svg>\n  </div>\n  <div class=\"dz-error-mark\">\n    <svg width=\"54px\" height=\"54px\" viewBox=\"0 0 54 54\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xmlns:sketch=\"http://www.bohemiancoding.com/sketch/ns\">\n      <title>Error</title>\n      <defs></defs>\n      <g id=\"Page-1\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" sketch:type=\"MSPage\">\n        <g id=\"Check-+-Oval-2\" sketch:type=\"MSLayerGroup\" stroke=\"#747474\" stroke-opacity=\"0.198794158\" fill=\"#FFFFFF\" fill-opacity=\"0.816519475\">\n          <path d=\"M32.6568542,29 L38.3106978,23.3461564 C39.8771021,21.7797521 39.8758057,19.2483887 38.3137085,17.6862915 C36.7547899,16.1273729 34.2176035,16.1255422 32.6538436,17.6893022 L27,23.3431458 L21.3461564,17.6893022 C19.7823965,16.1255422 17.2452101,16.1273729 15.6862915,17.6862915 C14.1241943,19.2483887 14.1228979,21.7797521 15.6893022,23.3461564 L21.3431458,29 L15.6893022,34.6538436 C14.1228979,36.2202479 14.1241943,38.7516113 15.6862915,40.3137085 C17.2452101,41.8726271 19.7823965,41.8744578 21.3461564,40.3106978 L27,34.6568542 L32.6538436,40.3106978 C34.2176035,41.8744578 36.7547899,41.8726271 38.3137085,40.3137085 C39.8758057,38.7516113 39.8771021,36.2202479 38.3106978,34.6538436 L32.6568542,29 Z M27,53 C41.3594035,53 53,41.3594035 53,27 C53,12.6405965 41.3594035,1 27,1 C12.6405965,1 1,12.6405965 1,27 C1,41.3594035 12.6405965,53 27,53 Z\" id=\"Oval-2\" sketch:type=\"MSShapeGroup\"></path>\n        </g>\n      </g>\n    </svg>\n  </div>\n</div>",
+
+      /*
+      Those functions register themselves to the events on init and handle all
+      the user interface specific stuff. Overwriting them won't break the upload
+      but can break the way it's displayed.
+      You can overwrite them if you don't like the default behavior. If you just
+      want to add an additional event handler, register it on the dropzone object
+      and don't overwrite those options.
+       */
+      drop: function(e) {
+        return this.element.classList.remove("dz-drag-hover");
+      },
+      dragstart: noop,
+      dragend: function(e) {
+        return this.element.classList.remove("dz-drag-hover");
+      },
+      dragenter: function(e) {
+        return this.element.classList.add("dz-drag-hover");
+      },
+      dragover: function(e) {
+        return this.element.classList.add("dz-drag-hover");
+      },
+      dragleave: function(e) {
+        return this.element.classList.remove("dz-drag-hover");
+      },
+      paste: noop,
+      reset: function() {
+        return this.element.classList.remove("dz-started");
+      },
+      addedfile: function(file) {
+        var j, k, l, len, len1, len2, node, ref, ref1, ref2, removeFileEvent, removeLink, results;
+        if (this.element === this.previewsContainer) {
+          this.element.classList.add("dz-started");
+        }
+        if (this.previewsContainer) {
+          file.previewElement = Dropzone.createElement(this.options.previewTemplate.trim());
+          file.previewTemplate = file.previewElement;
+          this.previewsContainer.appendChild(file.previewElement);
+          ref = file.previewElement.querySelectorAll("[data-dz-name]");
+          for (j = 0, len = ref.length; j < len; j++) {
+            node = ref[j];
+            node.textContent = file.name;
+          }
+          ref1 = file.previewElement.querySelectorAll("[data-dz-size]");
+          for (k = 0, len1 = ref1.length; k < len1; k++) {
+            node = ref1[k];
+            node.innerHTML = this.filesize(file.size);
+          }
+          if (this.options.addRemoveLinks) {
+            file._removeLink = Dropzone.createElement("<a class=\"dz-remove\" href=\"javascript:undefined;\" data-dz-remove>" + this.options.dictRemoveFile + "</a>");
+            file.previewElement.appendChild(file._removeLink);
+          }
+          removeFileEvent = (function(_this) {
+            return function(e) {
+              e.preventDefault();
+              e.stopPropagation();
+              if (file.status === Dropzone.UPLOADING) {
+                return Dropzone.confirm(_this.options.dictCancelUploadConfirmation, function() {
+                  return _this.removeFile(file);
+                });
+              } else {
+                if (_this.options.dictRemoveFileConfirmation) {
+                  return Dropzone.confirm(_this.options.dictRemoveFileConfirmation, function() {
+                    return _this.removeFile(file);
+                  });
+                } else {
+                  return _this.removeFile(file);
+                }
+              }
+            };
+          })(this);
+          ref2 = file.previewElement.querySelectorAll("[data-dz-remove]");
+          results = [];
+          for (l = 0, len2 = ref2.length; l < len2; l++) {
+            removeLink = ref2[l];
+            results.push(removeLink.addEventListener("click", removeFileEvent));
+          }
+          return results;
+        }
+      },
+      removedfile: function(file) {
+        var ref;
+        if (file.previewElement) {
+          if ((ref = file.previewElement) != null) {
+            ref.parentNode.removeChild(file.previewElement);
+          }
+        }
+        return this._updateMaxFilesReachedClass();
+      },
+      thumbnail: function(file, dataUrl) {
+        var j, len, ref, thumbnailElement;
+        if (file.previewElement) {
+          file.previewElement.classList.remove("dz-file-preview");
+          ref = file.previewElement.querySelectorAll("[data-dz-thumbnail]");
+          for (j = 0, len = ref.length; j < len; j++) {
+            thumbnailElement = ref[j];
+            thumbnailElement.alt = file.name;
+            thumbnailElement.src = dataUrl;
+          }
+          return setTimeout(((function(_this) {
+            return function() {
+              return file.previewElement.classList.add("dz-image-preview");
+            };
+          })(this)), 1);
+        }
+      },
+      error: function(file, message) {
+        var j, len, node, ref, results;
+        if (file.previewElement) {
+          file.previewElement.classList.add("dz-error");
+          if (typeof message !== "String" && message.error) {
+            message = message.error;
+          }
+          ref = file.previewElement.querySelectorAll("[data-dz-errormessage]");
+          results = [];
+          for (j = 0, len = ref.length; j < len; j++) {
+            node = ref[j];
+            results.push(node.textContent = message);
+          }
+          return results;
+        }
+      },
+      errormultiple: noop,
+      processing: function(file) {
+        if (file.previewElement) {
+          file.previewElement.classList.add("dz-processing");
+          if (file._removeLink) {
+            return file._removeLink.textContent = this.options.dictCancelUpload;
+          }
+        }
+      },
+      processingmultiple: noop,
+      uploadprogress: function(file, progress, bytesSent) {
+        var j, len, node, ref, results;
+        if (file.previewElement) {
+          ref = file.previewElement.querySelectorAll("[data-dz-uploadprogress]");
+          results = [];
+          for (j = 0, len = ref.length; j < len; j++) {
+            node = ref[j];
+            if (node.nodeName === 'PROGRESS') {
+              results.push(node.value = progress);
+            } else {
+              results.push(node.style.width = progress + "%");
+            }
+          }
+          return results;
+        }
+      },
+      totaluploadprogress: noop,
+      sending: noop,
+      sendingmultiple: noop,
+      success: function(file) {
+        if (file.previewElement) {
+          return file.previewElement.classList.add("dz-success");
+        }
+      },
+      successmultiple: noop,
+      canceled: function(file) {
+        return this.emit("error", file, "Upload canceled.");
+      },
+      canceledmultiple: noop,
+      complete: function(file) {
+        if (file._removeLink) {
+          file._removeLink.textContent = this.options.dictRemoveFile;
+        }
+        if (file.previewElement) {
+          return file.previewElement.classList.add("dz-complete");
+        }
+      },
+      completemultiple: noop,
+      maxfilesexceeded: noop,
+      maxfilesreached: noop,
+      queuecomplete: noop,
+      addedfiles: noop
+    };
+
+    extend = function() {
+      var j, key, len, object, objects, target, val;
+      target = arguments[0], objects = 2 <= arguments.length ? slice.call(arguments, 1) : [];
+      for (j = 0, len = objects.length; j < len; j++) {
+        object = objects[j];
+        for (key in object) {
+          val = object[key];
+          target[key] = val;
+        }
+      }
+      return target;
+    };
+
+    function Dropzone(element1, options) {
+      var elementOptions, fallback, ref;
+      this.element = element1;
+      this.version = Dropzone.version;
+      this.defaultOptions.previewTemplate = this.defaultOptions.previewTemplate.replace(/\n*/g, "");
+      this.clickableElements = [];
+      this.listeners = [];
+      this.files = [];
+      if (typeof this.element === "string") {
+        this.element = document.querySelector(this.element);
+      }
+      if (!(this.element && (this.element.nodeType != null))) {
+        throw new Error("Invalid dropzone element.");
+      }
+      if (this.element.dropzone) {
+        throw new Error("Dropzone already attached.");
+      }
+      Dropzone.instances.push(this);
+      this.element.dropzone = this;
+      elementOptions = (ref = Dropzone.optionsForElement(this.element)) != null ? ref : {};
+      this.options = extend({}, this.defaultOptions, elementOptions, options != null ? options : {});
+      if (this.options.forceFallback || !Dropzone.isBrowserSupported()) {
+        return this.options.fallback.call(this);
+      }
+      if (this.options.url == null) {
+        this.options.url = this.element.getAttribute("action");
+      }
+      if (!this.options.url) {
+        throw new Error("No URL provided.");
+      }
+      if (this.options.acceptedFiles && this.options.acceptedMimeTypes) {
+        throw new Error("You can't provide both 'acceptedFiles' and 'acceptedMimeTypes'. 'acceptedMimeTypes' is deprecated.");
+      }
+      if (this.options.acceptedMimeTypes) {
+        this.options.acceptedFiles = this.options.acceptedMimeTypes;
+        delete this.options.acceptedMimeTypes;
+      }
+      if (this.options.renameFilename != null) {
+        this.options.renameFile = (function(_this) {
+          return function(file) {
+            return _this.options.renameFilename.call(_this, file.name, file);
+          };
+        })(this);
+      }
+      this.options.method = this.options.method.toUpperCase();
+      if ((fallback = this.getExistingFallback()) && fallback.parentNode) {
+        fallback.parentNode.removeChild(fallback);
+      }
+      if (this.options.previewsContainer !== false) {
+        if (this.options.previewsContainer) {
+          this.previewsContainer = Dropzone.getElement(this.options.previewsContainer, "previewsContainer");
+        } else {
+          this.previewsContainer = this.element;
+        }
+      }
+      if (this.options.clickable) {
+        if (this.options.clickable === true) {
+          this.clickableElements = [this.element];
+        } else {
+          this.clickableElements = Dropzone.getElements(this.options.clickable, "clickable");
+        }
+      }
+      this.init();
+    }
+
+    Dropzone.prototype.getAcceptedFiles = function() {
+      var file, j, len, ref, results;
+      ref = this.files;
+      results = [];
+      for (j = 0, len = ref.length; j < len; j++) {
+        file = ref[j];
+        if (file.accepted) {
+          results.push(file);
+        }
+      }
+      return results;
+    };
+
+    Dropzone.prototype.getRejectedFiles = function() {
+      var file, j, len, ref, results;
+      ref = this.files;
+      results = [];
+      for (j = 0, len = ref.length; j < len; j++) {
+        file = ref[j];
+        if (!file.accepted) {
+          results.push(file);
+        }
+      }
+      return results;
+    };
+
+    Dropzone.prototype.getFilesWithStatus = function(status) {
+      var file, j, len, ref, results;
+      ref = this.files;
+      results = [];
+      for (j = 0, len = ref.length; j < len; j++) {
+        file = ref[j];
+        if (file.status === status) {
+          results.push(file);
+        }
+      }
+      return results;
+    };
+
+    Dropzone.prototype.getQueuedFiles = function() {
+      return this.getFilesWithStatus(Dropzone.QUEUED);
+    };
+
+    Dropzone.prototype.getUploadingFiles = function() {
+      return this.getFilesWithStatus(Dropzone.UPLOADING);
+    };
+
+    Dropzone.prototype.getAddedFiles = function() {
+      return this.getFilesWithStatus(Dropzone.ADDED);
+    };
+
+    Dropzone.prototype.getActiveFiles = function() {
+      var file, j, len, ref, results;
+      ref = this.files;
+      results = [];
+      for (j = 0, len = ref.length; j < len; j++) {
+        file = ref[j];
+        if (file.status === Dropzone.UPLOADING || file.status === Dropzone.QUEUED) {
+          results.push(file);
+        }
+      }
+      return results;
+    };
+
+    Dropzone.prototype.init = function() {
+      var eventName, j, len, noPropagation, ref, ref1, setupHiddenFileInput;
+      if (this.element.tagName === "form") {
+        this.element.setAttribute("enctype", "multipart/form-data");
+      }
+      if (this.element.classList.contains("dropzone") && !this.element.querySelector(".dz-message")) {
+        this.element.appendChild(Dropzone.createElement("<div class=\"dz-default dz-message\"><span>" + this.options.dictDefaultMessage + "</span></div>"));
+      }
+      if (this.clickableElements.length) {
+        setupHiddenFileInput = (function(_this) {
+          return function() {
+            if (_this.hiddenFileInput) {
+              _this.hiddenFileInput.parentNode.removeChild(_this.hiddenFileInput);
+            }
+            _this.hiddenFileInput = document.createElement("input");
+            _this.hiddenFileInput.setAttribute("type", "file");
+            if ((_this.options.maxFiles == null) || _this.options.maxFiles > 1) {
+              _this.hiddenFileInput.setAttribute("multiple", "multiple");
+            }
+            _this.hiddenFileInput.className = "dz-hidden-input";
+            if (_this.options.acceptedFiles != null) {
+              _this.hiddenFileInput.setAttribute("accept", _this.options.acceptedFiles);
+            }
+            if (_this.options.capture != null) {
+              _this.hiddenFileInput.setAttribute("capture", _this.options.capture);
+            }
+            _this.hiddenFileInput.style.visibility = "hidden";
+            _this.hiddenFileInput.style.position = "absolute";
+            _this.hiddenFileInput.style.top = "0";
+            _this.hiddenFileInput.style.left = "0";
+            _this.hiddenFileInput.style.height = "0";
+            _this.hiddenFileInput.style.width = "0";
+            document.querySelector(_this.options.hiddenInputContainer).appendChild(_this.hiddenFileInput);
+            return _this.hiddenFileInput.addEventListener("change", function() {
+              var file, files, j, len;
+              files = _this.hiddenFileInput.files;
+              if (files.length) {
+                for (j = 0, len = files.length; j < len; j++) {
+                  file = files[j];
+                  _this.addFile(file);
+                }
+              }
+              _this.emit("addedfiles", files);
+              return setupHiddenFileInput();
+            });
+          };
+        })(this);
+        setupHiddenFileInput();
+      }
+      this.URL = (ref = window.URL) != null ? ref : window.webkitURL;
+      ref1 = this.events;
+      for (j = 0, len = ref1.length; j < len; j++) {
+        eventName = ref1[j];
+        this.on(eventName, this.options[eventName]);
+      }
+      this.on("uploadprogress", (function(_this) {
+        return function() {
+          return _this.updateTotalUploadProgress();
+        };
+      })(this));
+      this.on("removedfile", (function(_this) {
+        return function() {
+          return _this.updateTotalUploadProgress();
+        };
+      })(this));
+      this.on("canceled", (function(_this) {
+        return function(file) {
+          return _this.emit("complete", file);
+        };
+      })(this));
+      this.on("complete", (function(_this) {
+        return function(file) {
+          if (_this.getAddedFiles().length === 0 && _this.getUploadingFiles().length === 0 && _this.getQueuedFiles().length === 0) {
+            return setTimeout((function() {
+              return _this.emit("queuecomplete");
+            }), 0);
+          }
+        };
+      })(this));
+      noPropagation = function(e) {
+        e.stopPropagation();
+        if (e.preventDefault) {
+          return e.preventDefault();
+        } else {
+          return e.returnValue = false;
+        }
+      };
+      this.listeners = [
+        {
+          element: this.element,
+          events: {
+            "dragstart": (function(_this) {
+              return function(e) {
+                return _this.emit("dragstart", e);
+              };
+            })(this),
+            "dragenter": (function(_this) {
+              return function(e) {
+                noPropagation(e);
+                return _this.emit("dragenter", e);
+              };
+            })(this),
+            "dragover": (function(_this) {
+              return function(e) {
+                var efct;
+                try {
+                  efct = e.dataTransfer.effectAllowed;
+                } catch (undefined) {}
+                e.dataTransfer.dropEffect = 'move' === efct || 'linkMove' === efct ? 'move' : 'copy';
+                noPropagation(e);
+                return _this.emit("dragover", e);
+              };
+            })(this),
+            "dragleave": (function(_this) {
+              return function(e) {
+                return _this.emit("dragleave", e);
+              };
+            })(this),
+            "drop": (function(_this) {
+              return function(e) {
+                noPropagation(e);
+                return _this.drop(e);
+              };
+            })(this),
+            "dragend": (function(_this) {
+              return function(e) {
+                return _this.emit("dragend", e);
+              };
+            })(this)
+          }
+        }
+      ];
+      this.clickableElements.forEach((function(_this) {
+        return function(clickableElement) {
+          return _this.listeners.push({
+            element: clickableElement,
+            events: {
+              "click": function(evt) {
+                if ((clickableElement !== _this.element) || (evt.target === _this.element || Dropzone.elementInside(evt.target, _this.element.querySelector(".dz-message")))) {
+                  _this.hiddenFileInput.click();
+                }
+                return true;
+              }
+            }
+          });
+        };
+      })(this));
+      this.enable();
+      return this.options.init.call(this);
+    };
+
+    Dropzone.prototype.destroy = function() {
+      var ref;
+      this.disable();
+      this.removeAllFiles(true);
+      if ((ref = this.hiddenFileInput) != null ? ref.parentNode : void 0) {
+        this.hiddenFileInput.parentNode.removeChild(this.hiddenFileInput);
+        this.hiddenFileInput = null;
+      }
+      delete this.element.dropzone;
+      return Dropzone.instances.splice(Dropzone.instances.indexOf(this), 1);
+    };
+
+    Dropzone.prototype.updateTotalUploadProgress = function() {
+      var activeFiles, file, j, len, ref, totalBytes, totalBytesSent, totalUploadProgress;
+      totalBytesSent = 0;
+      totalBytes = 0;
+      activeFiles = this.getActiveFiles();
+      if (activeFiles.length) {
+        ref = this.getActiveFiles();
+        for (j = 0, len = ref.length; j < len; j++) {
+          file = ref[j];
+          totalBytesSent += file.upload.bytesSent;
+          totalBytes += file.upload.total;
+        }
+        totalUploadProgress = 100 * totalBytesSent / totalBytes;
+      } else {
+        totalUploadProgress = 100;
+      }
+      return this.emit("totaluploadprogress", totalUploadProgress, totalBytes, totalBytesSent);
+    };
+
+    Dropzone.prototype._getParamName = function(n) {
+      if (typeof this.options.paramName === "function") {
+        return this.options.paramName(n);
+      } else {
+        return "" + this.options.paramName + (this.options.uploadMultiple ? "[" + n + "]" : "");
+      }
+    };
+
+    Dropzone.prototype._renameFile = function(file) {
+      if (typeof this.options.renameFile !== "function") {
+        return file.name;
+      }
+      return this.options.renameFile(file);
+    };
+
+    Dropzone.prototype.getFallbackForm = function() {
+      var existingFallback, fields, fieldsString, form;
+      if (existingFallback = this.getExistingFallback()) {
+        return existingFallback;
+      }
+      fieldsString = "<div class=\"dz-fallback\">";
+      if (this.options.dictFallbackText) {
+        fieldsString += "<p>" + this.options.dictFallbackText + "</p>";
+      }
+      fieldsString += "<input type=\"file\" name=\"" + (this._getParamName(0)) + "\" " + (this.options.uploadMultiple ? 'multiple="multiple"' : void 0) + " /><input type=\"submit\" value=\"Upload!\"></div>";
+      fields = Dropzone.createElement(fieldsString);
+      if (this.element.tagName !== "FORM") {
+        form = Dropzone.createElement("<form action=\"" + this.options.url + "\" enctype=\"multipart/form-data\" method=\"" + this.options.method + "\"></form>");
+        form.appendChild(fields);
+      } else {
+        this.element.setAttribute("enctype", "multipart/form-data");
+        this.element.setAttribute("method", this.options.method);
+      }
+      return form != null ? form : fields;
+    };
+
+    Dropzone.prototype.getExistingFallback = function() {
+      var fallback, getFallback, j, len, ref, tagName;
+      getFallback = function(elements) {
+        var el, j, len;
+        for (j = 0, len = elements.length; j < len; j++) {
+          el = elements[j];
+          if (/(^| )fallback($| )/.test(el.className)) {
+            return el;
+          }
+        }
+      };
+      ref = ["div", "form"];
+      for (j = 0, len = ref.length; j < len; j++) {
+        tagName = ref[j];
+        if (fallback = getFallback(this.element.getElementsByTagName(tagName))) {
+          return fallback;
+        }
+      }
+    };
+
+    Dropzone.prototype.setupEventListeners = function() {
+      var elementListeners, event, j, len, listener, ref, results;
+      ref = this.listeners;
+      results = [];
+      for (j = 0, len = ref.length; j < len; j++) {
+        elementListeners = ref[j];
+        results.push((function() {
+          var ref1, results1;
+          ref1 = elementListeners.events;
+          results1 = [];
+          for (event in ref1) {
+            listener = ref1[event];
+            results1.push(elementListeners.element.addEventListener(event, listener, false));
+          }
+          return results1;
+        })());
+      }
+      return results;
+    };
+
+    Dropzone.prototype.removeEventListeners = function() {
+      var elementListeners, event, j, len, listener, ref, results;
+      ref = this.listeners;
+      results = [];
+      for (j = 0, len = ref.length; j < len; j++) {
+        elementListeners = ref[j];
+        results.push((function() {
+          var ref1, results1;
+          ref1 = elementListeners.events;
+          results1 = [];
+          for (event in ref1) {
+            listener = ref1[event];
+            results1.push(elementListeners.element.removeEventListener(event, listener, false));
+          }
+          return results1;
+        })());
+      }
+      return results;
+    };
+
+    Dropzone.prototype.disable = function() {
+      var file, j, len, ref, results;
+      this.clickableElements.forEach(function(element) {
+        return element.classList.remove("dz-clickable");
+      });
+      this.removeEventListeners();
+      ref = this.files;
+      results = [];
+      for (j = 0, len = ref.length; j < len; j++) {
+        file = ref[j];
+        results.push(this.cancelUpload(file));
+      }
+      return results;
+    };
+
+    Dropzone.prototype.enable = function() {
+      this.clickableElements.forEach(function(element) {
+        return element.classList.add("dz-clickable");
+      });
+      return this.setupEventListeners();
+    };
+
+    Dropzone.prototype.filesize = function(size) {
+      var cutoff, i, j, len, selectedSize, selectedUnit, unit, units;
+      selectedSize = 0;
+      selectedUnit = "b";
+      if (size > 0) {
+        units = ['tb', 'gb', 'mb', 'kb', 'b'];
+        for (i = j = 0, len = units.length; j < len; i = ++j) {
+          unit = units[i];
+          cutoff = Math.pow(this.options.filesizeBase, 4 - i) / 10;
+          if (size >= cutoff) {
+            selectedSize = size / Math.pow(this.options.filesizeBase, 4 - i);
+            selectedUnit = unit;
+            break;
+          }
+        }
+        selectedSize = Math.round(10 * selectedSize) / 10;
+      }
+      return "<strong>" + selectedSize + "</strong> " + this.options.dictFileSizeUnits[selectedUnit];
+    };
+
+    Dropzone.prototype._updateMaxFilesReachedClass = function() {
+      if ((this.options.maxFiles != null) && this.getAcceptedFiles().length >= this.options.maxFiles) {
+        if (this.getAcceptedFiles().length === this.options.maxFiles) {
+          this.emit('maxfilesreached', this.files);
+        }
+        return this.element.classList.add("dz-max-files-reached");
+      } else {
+        return this.element.classList.remove("dz-max-files-reached");
+      }
+    };
+
+    Dropzone.prototype.drop = function(e) {
+      var files, items;
+      if (!e.dataTransfer) {
+        return;
+      }
+      this.emit("drop", e);
+      files = e.dataTransfer.files;
+      this.emit("addedfiles", files);
+      if (files.length) {
+        items = e.dataTransfer.items;
+        if (items && items.length && (items[0].webkitGetAsEntry != null)) {
+          this._addFilesFromItems(items);
+        } else {
+          this.handleFiles(files);
+        }
+      }
+    };
+
+    Dropzone.prototype.paste = function(e) {
+      var items, ref;
+      if ((e != null ? (ref = e.clipboardData) != null ? ref.items : void 0 : void 0) == null) {
+        return;
+      }
+      this.emit("paste", e);
+      items = e.clipboardData.items;
+      if (items.length) {
+        return this._addFilesFromItems(items);
+      }
+    };
+
+    Dropzone.prototype.handleFiles = function(files) {
+      var file, j, len, results;
+      results = [];
+      for (j = 0, len = files.length; j < len; j++) {
+        file = files[j];
+        results.push(this.addFile(file));
+      }
+      return results;
+    };
+
+    Dropzone.prototype._addFilesFromItems = function(items) {
+      var entry, item, j, len, results;
+      results = [];
+      for (j = 0, len = items.length; j < len; j++) {
+        item = items[j];
+        if ((item.webkitGetAsEntry != null) && (entry = item.webkitGetAsEntry())) {
+          if (entry.isFile) {
+            results.push(this.addFile(item.getAsFile()));
+          } else if (entry.isDirectory) {
+            results.push(this._addFilesFromDirectory(entry, entry.name));
+          } else {
+            results.push(void 0);
+          }
+        } else if (item.getAsFile != null) {
+          if ((item.kind == null) || item.kind === "file") {
+            results.push(this.addFile(item.getAsFile()));
+          } else {
+            results.push(void 0);
+          }
+        } else {
+          results.push(void 0);
+        }
+      }
+      return results;
+    };
+
+    Dropzone.prototype._addFilesFromDirectory = function(directory, path) {
+      var dirReader, errorHandler, readEntries;
+      dirReader = directory.createReader();
+      errorHandler = function(error) {
+        return typeof console !== "undefined" && console !== null ? typeof console.log === "function" ? console.log(error) : void 0 : void 0;
+      };
+      readEntries = (function(_this) {
+        return function() {
+          return dirReader.readEntries(function(entries) {
+            var entry, j, len;
+            if (entries.length > 0) {
+              for (j = 0, len = entries.length; j < len; j++) {
+                entry = entries[j];
+                if (entry.isFile) {
+                  entry.file(function(file) {
+                    if (_this.options.ignoreHiddenFiles && file.name.substring(0, 1) === '.') {
+                      return;
+                    }
+                    file.fullPath = path + "/" + file.name;
+                    return _this.addFile(file);
+                  });
+                } else if (entry.isDirectory) {
+                  _this._addFilesFromDirectory(entry, path + "/" + entry.name);
+                }
+              }
+              readEntries();
+            }
+            return null;
+          }, errorHandler);
+        };
+      })(this);
+      return readEntries();
+    };
+
+    Dropzone.prototype.accept = function(file, done) {
+      if (file.size > this.options.maxFilesize * 1024 * 1024) {
+        return done(this.options.dictFileTooBig.replace("{{filesize}}", Math.round(file.size / 1024 / 10.24) / 100).replace("{{maxFilesize}}", this.options.maxFilesize));
+      } else if (!Dropzone.isValidFile(file, this.options.acceptedFiles)) {
+        return done(this.options.dictInvalidFileType);
+      } else if ((this.options.maxFiles != null) && this.getAcceptedFiles().length >= this.options.maxFiles) {
+        done(this.options.dictMaxFilesExceeded.replace("{{maxFiles}}", this.options.maxFiles));
+        return this.emit("maxfilesexceeded", file);
+      } else {
+        return this.options.accept.call(this, file, done);
+      }
+    };
+
+    Dropzone.prototype.addFile = function(file) {
+      file.upload = {
+        progress: 0,
+        total: file.size,
+        bytesSent: 0,
+        filename: this._renameFile(file)
+      };
+      this.files.push(file);
+      file.status = Dropzone.ADDED;
+      this.emit("addedfile", file);
+      this._enqueueThumbnail(file);
+      return this.accept(file, (function(_this) {
+        return function(error) {
+          if (error) {
+            file.accepted = false;
+            _this._errorProcessing([file], error);
+          } else {
+            file.accepted = true;
+            if (_this.options.autoQueue) {
+              _this.enqueueFile(file);
+            }
+          }
+          return _this._updateMaxFilesReachedClass();
+        };
+      })(this));
+    };
+
+    Dropzone.prototype.enqueueFiles = function(files) {
+      var file, j, len;
+      for (j = 0, len = files.length; j < len; j++) {
+        file = files[j];
+        this.enqueueFile(file);
+      }
+      return null;
+    };
+
+    Dropzone.prototype.enqueueFile = function(file) {
+      if (file.status === Dropzone.ADDED && file.accepted === true) {
+        file.status = Dropzone.QUEUED;
+        if (this.options.autoProcessQueue) {
+          return setTimeout(((function(_this) {
+            return function() {
+              return _this.processQueue();
+            };
+          })(this)), 0);
+        }
+      } else {
+        throw new Error("This file can't be queued because it has already been processed or was rejected.");
+      }
+    };
+
+    Dropzone.prototype._thumbnailQueue = [];
+
+    Dropzone.prototype._processingThumbnail = false;
+
+    Dropzone.prototype._enqueueThumbnail = function(file) {
+      if (this.options.createImageThumbnails && file.type.match(/image.*/) && file.size <= this.options.maxThumbnailFilesize * 1024 * 1024) {
+        this._thumbnailQueue.push(file);
+        return setTimeout(((function(_this) {
+          return function() {
+            return _this._processThumbnailQueue();
+          };
+        })(this)), 0);
+      }
+    };
+
+    Dropzone.prototype._processThumbnailQueue = function() {
+      var file;
+      if (this._processingThumbnail || this._thumbnailQueue.length === 0) {
+        return;
+      }
+      this._processingThumbnail = true;
+      file = this._thumbnailQueue.shift();
+      return this.createThumbnail(file, this.options.thumbnailWidth, this.options.thumbnailHeight, this.options.thumbnailMethod, true, (function(_this) {
+        return function(dataUrl) {
+          _this.emit("thumbnail", file, dataUrl);
+          _this._processingThumbnail = false;
+          return _this._processThumbnailQueue();
+        };
+      })(this));
+    };
+
+    Dropzone.prototype.removeFile = function(file) {
+      if (file.status === Dropzone.UPLOADING) {
+        this.cancelUpload(file);
+      }
+      this.files = without(this.files, file);
+      this.emit("removedfile", file);
+      if (this.files.length === 0) {
+        return this.emit("reset");
+      }
+    };
+
+    Dropzone.prototype.removeAllFiles = function(cancelIfNecessary) {
+      var file, j, len, ref;
+      if (cancelIfNecessary == null) {
+        cancelIfNecessary = false;
+      }
+      ref = this.files.slice();
+      for (j = 0, len = ref.length; j < len; j++) {
+        file = ref[j];
+        if (file.status !== Dropzone.UPLOADING || cancelIfNecessary) {
+          this.removeFile(file);
+        }
+      }
+      return null;
+    };
+
+    Dropzone.prototype.resizeImage = function(file, width, height, resizeMethod, callback) {
+      return this.createThumbnail(file, width, height, resizeMethod, false, (function(_this) {
+        return function(dataUrl, canvas) {
+          var resizeMimeType, resizedDataURL;
+          if (canvas === null) {
+            return callback(file);
+          } else {
+            resizeMimeType = _this.options.resizeMimeType;
+            if (resizeMimeType == null) {
+              resizeMimeType = file.type;
+            }
+            resizedDataURL = canvas.toDataURL(resizeMimeType, _this.options.resizeQuality);
+            if (resizeMimeType === 'image/jpeg' || resizeMimeType === 'image/jpg') {
+              resizedDataURL = ExifRestore.restore(file.dataURL, resizedDataURL);
+            }
+            return callback(Dropzone.dataURItoBlob(resizedDataURL));
+          }
+        };
+      })(this));
+    };
+
+    Dropzone.prototype.createThumbnail = function(file, width, height, resizeMethod, fixOrientation, callback) {
+      var fileReader;
+      fileReader = new FileReader;
+      fileReader.onload = (function(_this) {
+        return function() {
+          file.dataURL = fileReader.result;
+          if (file.type === "image/svg+xml") {
+            if (callback != null) {
+              callback(fileReader.result);
+            }
+            return;
+          }
+          return _this.createThumbnailFromUrl(file, width, height, resizeMethod, fixOrientation, callback);
+        };
+      })(this);
+      return fileReader.readAsDataURL(file);
+    };
+
+    Dropzone.prototype.createThumbnailFromUrl = function(file, width, height, resizeMethod, fixOrientation, callback, crossOrigin) {
+      var img;
+      img = document.createElement("img");
+      if (crossOrigin) {
+        img.crossOrigin = crossOrigin;
+      }
+      img.onload = (function(_this) {
+        return function() {
+          var loadExif;
+          loadExif = function(callback) {
+            return callback(1);
+          };
+          if ((typeof EXIF !== "undefined" && EXIF !== null) && fixOrientation) {
+            loadExif = function(callback) {
+              return EXIF.getData(img, function() {
+                return callback(EXIF.getTag(this, 'Orientation'));
+              });
+            };
+          }
+          return loadExif(function(orientation) {
+            var canvas, ctx, ref, ref1, ref2, ref3, resizeInfo, thumbnail;
+            file.width = img.width;
+            file.height = img.height;
+            resizeInfo = _this.options.resize.call(_this, file, width, height, resizeMethod);
+            canvas = document.createElement("canvas");
+            ctx = canvas.getContext("2d");
+            canvas.width = resizeInfo.trgWidth;
+            canvas.height = resizeInfo.trgHeight;
+            if (orientation > 4) {
+              canvas.width = resizeInfo.trgHeight;
+              canvas.height = resizeInfo.trgWidth;
+            }
+            switch (orientation) {
+              case 2:
+                ctx.translate(canvas.width, 0);
+                ctx.scale(-1, 1);
+                break;
+              case 3:
+                ctx.translate(canvas.width, canvas.height);
+                ctx.rotate(Math.PI);
+                break;
+              case 4:
+                ctx.translate(0, canvas.height);
+                ctx.scale(1, -1);
+                break;
+              case 5:
+                ctx.rotate(0.5 * Math.PI);
+                ctx.scale(1, -1);
+                break;
+              case 6:
+                ctx.rotate(0.5 * Math.PI);
+                ctx.translate(0, -canvas.height);
+                break;
+              case 7:
+                ctx.rotate(0.5 * Math.PI);
+                ctx.translate(canvas.width, -canvas.height);
+                ctx.scale(-1, 1);
+                break;
+              case 8:
+                ctx.rotate(-0.5 * Math.PI);
+                ctx.translate(-canvas.width, 0);
+            }
+            drawImageIOSFix(ctx, img, (ref = resizeInfo.srcX) != null ? ref : 0, (ref1 = resizeInfo.srcY) != null ? ref1 : 0, resizeInfo.srcWidth, resizeInfo.srcHeight, (ref2 = resizeInfo.trgX) != null ? ref2 : 0, (ref3 = resizeInfo.trgY) != null ? ref3 : 0, resizeInfo.trgWidth, resizeInfo.trgHeight);
+            thumbnail = canvas.toDataURL("image/png");
+            if (callback != null) {
+              return callback(thumbnail, canvas);
+            }
+          });
+        };
+      })(this);
+      if (callback != null) {
+        img.onerror = callback;
+      }
+      return img.src = file.dataURL;
+    };
+
+    Dropzone.prototype.processQueue = function() {
+      var i, parallelUploads, processingLength, queuedFiles;
+      parallelUploads = this.options.parallelUploads;
+      processingLength = this.getUploadingFiles().length;
+      i = processingLength;
+      if (processingLength >= parallelUploads) {
+        return;
+      }
+      queuedFiles = this.getQueuedFiles();
+      if (!(queuedFiles.length > 0)) {
+        return;
+      }
+      if (this.options.uploadMultiple) {
+        return this.processFiles(queuedFiles.slice(0, parallelUploads - processingLength));
+      } else {
+        while (i < parallelUploads) {
+          if (!queuedFiles.length) {
+            return;
+          }
+          this.processFile(queuedFiles.shift());
+          i++;
+        }
+      }
+    };
+
+    Dropzone.prototype.processFile = function(file) {
+      return this.processFiles([file]);
+    };
+
+    Dropzone.prototype.processFiles = function(files) {
+      var file, j, len;
+      for (j = 0, len = files.length; j < len; j++) {
+        file = files[j];
+        file.processing = true;
+        file.status = Dropzone.UPLOADING;
+        this.emit("processing", file);
+      }
+      if (this.options.uploadMultiple) {
+        this.emit("processingmultiple", files);
+      }
+      return this.uploadFiles(files);
+    };
+
+    Dropzone.prototype._getFilesWithXhr = function(xhr) {
+      var file, files;
+      return files = (function() {
+        var j, len, ref, results;
+        ref = this.files;
+        results = [];
+        for (j = 0, len = ref.length; j < len; j++) {
+          file = ref[j];
+          if (file.xhr === xhr) {
+            results.push(file);
+          }
+        }
+        return results;
+      }).call(this);
+    };
+
+    Dropzone.prototype.cancelUpload = function(file) {
+      var groupedFile, groupedFiles, j, k, len, len1, ref;
+      if (file.status === Dropzone.UPLOADING) {
+        groupedFiles = this._getFilesWithXhr(file.xhr);
+        for (j = 0, len = groupedFiles.length; j < len; j++) {
+          groupedFile = groupedFiles[j];
+          groupedFile.status = Dropzone.CANCELED;
+        }
+        file.xhr.abort();
+        for (k = 0, len1 = groupedFiles.length; k < len1; k++) {
+          groupedFile = groupedFiles[k];
+          this.emit("canceled", groupedFile);
+        }
+        if (this.options.uploadMultiple) {
+          this.emit("canceledmultiple", groupedFiles);
+        }
+      } else if ((ref = file.status) === Dropzone.ADDED || ref === Dropzone.QUEUED) {
+        file.status = Dropzone.CANCELED;
+        this.emit("canceled", file);
+        if (this.options.uploadMultiple) {
+          this.emit("canceledmultiple", [file]);
+        }
+      }
+      if (this.options.autoProcessQueue) {
+        return this.processQueue();
+      }
+    };
+
+    resolveOption = function() {
+      var args, option;
+      option = arguments[0], args = 2 <= arguments.length ? slice.call(arguments, 1) : [];
+      if (typeof option === 'function') {
+        return option.apply(this, args);
+      }
+      return option;
+    };
+
+    Dropzone.prototype.uploadFile = function(file) {
+      return this.uploadFiles([file]);
+    };
+
+    Dropzone.prototype.uploadFiles = function(files) {
+      var doneCounter, doneFunction, file, formData, handleError, headerName, headerValue, headers, i, input, inputName, inputType, j, k, key, l, len, len1, len2, len3, m, method, o, option, progressObj, ref, ref1, ref2, ref3, ref4, ref5, response, results, updateProgress, url, value, xhr;
+      xhr = new XMLHttpRequest();
+      for (j = 0, len = files.length; j < len; j++) {
+        file = files[j];
+        file.xhr = xhr;
+      }
+      method = resolveOption(this.options.method, files);
+      url = resolveOption(this.options.url, files);
+      xhr.open(method, url, true);
+      xhr.timeout = resolveOption(this.options.timeout, files);
+      xhr.withCredentials = !!this.options.withCredentials;
+      response = null;
+      handleError = (function(_this) {
+        return function() {
+          var k, len1, results;
+          results = [];
+          for (k = 0, len1 = files.length; k < len1; k++) {
+            file = files[k];
+            results.push(_this._errorProcessing(files, response || _this.options.dictResponseError.replace("{{statusCode}}", xhr.status), xhr));
+          }
+          return results;
+        };
+      })(this);
+      updateProgress = (function(_this) {
+        return function(e) {
+          var allFilesFinished, k, l, len1, len2, len3, m, progress, results;
+          if (e != null) {
+            progress = 100 * e.loaded / e.total;
+            for (k = 0, len1 = files.length; k < len1; k++) {
+              file = files[k];
+              file.upload.progress = progress;
+              file.upload.total = e.total;
+              file.upload.bytesSent = e.loaded;
+            }
+          } else {
+            allFilesFinished = true;
+            progress = 100;
+            for (l = 0, len2 = files.length; l < len2; l++) {
+              file = files[l];
+              if (!(file.upload.progress === 100 && file.upload.bytesSent === file.upload.total)) {
+                allFilesFinished = false;
+              }
+              file.upload.progress = progress;
+              file.upload.bytesSent = file.upload.total;
+            }
+            if (allFilesFinished) {
+              return;
+            }
+          }
+          results = [];
+          for (m = 0, len3 = files.length; m < len3; m++) {
+            file = files[m];
+            results.push(_this.emit("uploadprogress", file, progress, file.upload.bytesSent));
+          }
+          return results;
+        };
+      })(this);
+      xhr.onload = (function(_this) {
+        return function(e) {
+          var error1, ref;
+          if (files[0].status === Dropzone.CANCELED) {
+            return;
+          }
+          if (xhr.readyState !== 4) {
+            return;
+          }
+          if (xhr.responseType !== 'arraybuffer' && xhr.responseType !== 'blob') {
+            response = xhr.responseText;
+            if (xhr.getResponseHeader("content-type") && ~xhr.getResponseHeader("content-type").indexOf("application/json")) {
+              try {
+                response = JSON.parse(response);
+              } catch (error1) {
+                e = error1;
+                response = "Invalid JSON response from server.";
+              }
+            }
+          }
+          updateProgress();
+          if (!((200 <= (ref = xhr.status) && ref < 300))) {
+            return handleError();
+          } else {
+            return _this._finished(files, response, e);
+          }
+        };
+      })(this);
+      xhr.onerror = (function(_this) {
+        return function() {
+          if (files[0].status === Dropzone.CANCELED) {
+            return;
+          }
+          return handleError();
+        };
+      })(this);
+      progressObj = (ref = xhr.upload) != null ? ref : xhr;
+      progressObj.onprogress = updateProgress;
+      headers = {
+        "Accept": "application/json",
+        "Cache-Control": "no-cache",
+        "X-Requested-With": "XMLHttpRequest"
+      };
+      if (this.options.headers) {
+        extend(headers, this.options.headers);
+      }
+      for (headerName in headers) {
+        headerValue = headers[headerName];
+        if (headerValue) {
+          xhr.setRequestHeader(headerName, headerValue);
+        }
+      }
+      formData = new FormData();
+      if (this.options.params) {
+        ref1 = this.options.params;
+        for (key in ref1) {
+          value = ref1[key];
+          formData.append(key, value);
+        }
+      }
+      for (k = 0, len1 = files.length; k < len1; k++) {
+        file = files[k];
+        this.emit("sending", file, xhr, formData);
+      }
+      if (this.options.uploadMultiple) {
+        this.emit("sendingmultiple", files, xhr, formData);
+      }
+      if (this.element.tagName === "FORM") {
+        ref2 = this.element.querySelectorAll("input, textarea, select, button");
+        for (l = 0, len2 = ref2.length; l < len2; l++) {
+          input = ref2[l];
+          inputName = input.getAttribute("name");
+          inputType = input.getAttribute("type");
+          if (input.tagName === "SELECT" && input.hasAttribute("multiple")) {
+            ref3 = input.options;
+            for (m = 0, len3 = ref3.length; m < len3; m++) {
+              option = ref3[m];
+              if (option.selected) {
+                formData.append(inputName, option.value);
+              }
+            }
+          } else if (!inputType || ((ref4 = inputType.toLowerCase()) !== "checkbox" && ref4 !== "radio") || input.checked) {
+            formData.append(inputName, input.value);
+          }
+        }
+      }
+      doneCounter = 0;
+      results = [];
+      for (i = o = 0, ref5 = files.length - 1; 0 <= ref5 ? o <= ref5 : o >= ref5; i = 0 <= ref5 ? ++o : --o) {
+        doneFunction = (function(_this) {
+          return function(file, paramName, fileName) {
+            return function(transformedFile) {
+              formData.append(paramName, transformedFile, fileName);
+              if (++doneCounter === files.length) {
+                return _this.submitRequest(xhr, formData, files);
+              }
+            };
+          };
+        })(this);
+        results.push(this.options.transformFile.call(this, files[i], doneFunction(files[i], this._getParamName(i), files[i].upload.filename)));
+      }
+      return results;
+    };
+
+    Dropzone.prototype.submitRequest = function(xhr, formData, files) {
+      return xhr.send(formData);
+    };
+
+    Dropzone.prototype._finished = function(files, responseText, e) {
+      var file, j, len;
+      for (j = 0, len = files.length; j < len; j++) {
+        file = files[j];
+        file.status = Dropzone.SUCCESS;
+        this.emit("success", file, responseText, e);
+        this.emit("complete", file);
+      }
+      if (this.options.uploadMultiple) {
+        this.emit("successmultiple", files, responseText, e);
+        this.emit("completemultiple", files);
+      }
+      if (this.options.autoProcessQueue) {
+        return this.processQueue();
+      }
+    };
+
+    Dropzone.prototype._errorProcessing = function(files, message, xhr) {
+      var file, j, len;
+      for (j = 0, len = files.length; j < len; j++) {
+        file = files[j];
+        file.status = Dropzone.ERROR;
+        this.emit("error", file, message, xhr);
+        this.emit("complete", file);
+      }
+      if (this.options.uploadMultiple) {
+        this.emit("errormultiple", files, message, xhr);
+        this.emit("completemultiple", files);
+      }
+      if (this.options.autoProcessQueue) {
+        return this.processQueue();
+      }
+    };
+
+    return Dropzone;
+
+  })(Emitter);
+
+  Dropzone.version = "5.1.1";
+
+  Dropzone.options = {};
+
+  Dropzone.optionsForElement = function(element) {
+    if (element.getAttribute("id")) {
+      return Dropzone.options[camelize(element.getAttribute("id"))];
+    } else {
+      return void 0;
+    }
+  };
+
+  Dropzone.instances = [];
+
+  Dropzone.forElement = function(element) {
+    if (typeof element === "string") {
+      element = document.querySelector(element);
+    }
+    if ((element != null ? element.dropzone : void 0) == null) {
+      throw new Error("No Dropzone found for given element. This is probably because you're trying to access it before Dropzone had the time to initialize. Use the `init` option to setup any additional observers on your Dropzone.");
+    }
+    return element.dropzone;
+  };
+
+  Dropzone.autoDiscover = true;
+
+  Dropzone.discover = function() {
+    var checkElements, dropzone, dropzones, j, len, results;
+    if (document.querySelectorAll) {
+      dropzones = document.querySelectorAll(".dropzone");
+    } else {
+      dropzones = [];
+      checkElements = function(elements) {
+        var el, j, len, results;
+        results = [];
+        for (j = 0, len = elements.length; j < len; j++) {
+          el = elements[j];
+          if (/(^| )dropzone($| )/.test(el.className)) {
+            results.push(dropzones.push(el));
+          } else {
+            results.push(void 0);
+          }
+        }
+        return results;
+      };
+      checkElements(document.getElementsByTagName("div"));
+      checkElements(document.getElementsByTagName("form"));
+    }
+    results = [];
+    for (j = 0, len = dropzones.length; j < len; j++) {
+      dropzone = dropzones[j];
+      if (Dropzone.optionsForElement(dropzone) !== false) {
+        results.push(new Dropzone(dropzone));
+      } else {
+        results.push(void 0);
+      }
+    }
+    return results;
+  };
+
+  Dropzone.blacklistedBrowsers = [/opera.*Macintosh.*version\/12/i];
+
+  Dropzone.isBrowserSupported = function() {
+    var capableBrowser, j, len, ref, regex;
+    capableBrowser = true;
+    if (window.File && window.FileReader && window.FileList && window.Blob && window.FormData && document.querySelector) {
+      if (!("classList" in document.createElement("a"))) {
+        capableBrowser = false;
+      } else {
+        ref = Dropzone.blacklistedBrowsers;
+        for (j = 0, len = ref.length; j < len; j++) {
+          regex = ref[j];
+          if (regex.test(navigator.userAgent)) {
+            capableBrowser = false;
+            continue;
+          }
+        }
+      }
+    } else {
+      capableBrowser = false;
+    }
+    return capableBrowser;
+  };
+
+  Dropzone.dataURItoBlob = function(dataURI) {
+    var ab, byteString, i, ia, j, mimeString, ref;
+    byteString = atob(dataURI.split(',')[1]);
+    mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];
+    ab = new ArrayBuffer(byteString.length);
+    ia = new Uint8Array(ab);
+    for (i = j = 0, ref = byteString.length; 0 <= ref ? j <= ref : j >= ref; i = 0 <= ref ? ++j : --j) {
+      ia[i] = byteString.charCodeAt(i);
+    }
+    return new Blob([ab], {
+      type: mimeString
+    });
+  };
+
+  without = function(list, rejectedItem) {
+    var item, j, len, results;
+    results = [];
+    for (j = 0, len = list.length; j < len; j++) {
+      item = list[j];
+      if (item !== rejectedItem) {
+        results.push(item);
+      }
+    }
+    return results;
+  };
+
+  camelize = function(str) {
+    return str.replace(/[\-_](\w)/g, function(match) {
+      return match.charAt(1).toUpperCase();
+    });
+  };
+
+  Dropzone.createElement = function(string) {
+    var div;
+    div = document.createElement("div");
+    div.innerHTML = string;
+    return div.childNodes[0];
+  };
+
+  Dropzone.elementInside = function(element, container) {
+    if (element === container) {
+      return true;
+    }
+    while (element = element.parentNode) {
+      if (element === container) {
+        return true;
+      }
+    }
+    return false;
+  };
+
+  Dropzone.getElement = function(el, name) {
+    var element;
+    if (typeof el === "string") {
+      element = document.querySelector(el);
+    } else if (el.nodeType != null) {
+      element = el;
+    }
+    if (element == null) {
+      throw new Error("Invalid `" + name + "` option provided. Please provide a CSS selector or a plain HTML element.");
+    }
+    return element;
+  };
+
+  Dropzone.getElements = function(els, name) {
+    var e, el, elements, error1, j, k, len, len1, ref;
+    if (els instanceof Array) {
+      elements = [];
+      try {
+        for (j = 0, len = els.length; j < len; j++) {
+          el = els[j];
+          elements.push(this.getElement(el, name));
+        }
+      } catch (error1) {
+        e = error1;
+        elements = null;
+      }
+    } else if (typeof els === "string") {
+      elements = [];
+      ref = document.querySelectorAll(els);
+      for (k = 0, len1 = ref.length; k < len1; k++) {
+        el = ref[k];
+        elements.push(el);
+      }
+    } else if (els.nodeType != null) {
+      elements = [els];
+    }
+    if (!((elements != null) && elements.length)) {
+      throw new Error("Invalid `" + name + "` option provided. Please provide a CSS selector, a plain HTML element or a list of those.");
+    }
+    return elements;
+  };
+
+  Dropzone.confirm = function(question, accepted, rejected) {
+    if (window.confirm(question)) {
+      return accepted();
+    } else if (rejected != null) {
+      return rejected();
+    }
+  };
+
+  Dropzone.isValidFile = function(file, acceptedFiles) {
+    var baseMimeType, j, len, mimeType, validType;
+    if (!acceptedFiles) {
+      return true;
+    }
+    acceptedFiles = acceptedFiles.split(",");
+    mimeType = file.type;
+    baseMimeType = mimeType.replace(/\/.*$/, "");
+    for (j = 0, len = acceptedFiles.length; j < len; j++) {
+      validType = acceptedFiles[j];
+      validType = validType.trim();
+      if (validType.charAt(0) === ".") {
+        if (file.name.toLowerCase().indexOf(validType.toLowerCase(), file.name.length - validType.length) !== -1) {
+          return true;
+        }
+      } else if (/\/\*$/.test(validType)) {
+        if (baseMimeType === validType.replace(/\/.*$/, "")) {
+          return true;
+        }
+      } else {
+        if (mimeType === validType) {
+          return true;
+        }
+      }
+    }
+    return false;
+  };
+
+  if (typeof jQuery !== "undefined" && jQuery !== null) {
+    jQuery.fn.dropzone = function(options) {
+      return this.each(function() {
+        return new Dropzone(this, options);
+      });
+    };
+  }
+
+  if (typeof module !== "undefined" && module !== null) {
+    module.exports = Dropzone;
+  } else {
+    window.Dropzone = Dropzone;
+  }
+
+  Dropzone.ADDED = "added";
+
+  Dropzone.QUEUED = "queued";
+
+  Dropzone.ACCEPTED = Dropzone.QUEUED;
+
+  Dropzone.UPLOADING = "uploading";
+
+  Dropzone.PROCESSING = Dropzone.UPLOADING;
+
+  Dropzone.CANCELED = "canceled";
+
+  Dropzone.ERROR = "error";
+
+  Dropzone.SUCCESS = "success";
+
+
+  /*
+  
+  Bugfix for iOS 6 and 7
+  Source: http://stackoverflow.com/questions/11929099/html5-canvas-drawimage-ratio-bug-ios
+  based on the work of https://github.com/stomita/ios-imagefile-megapixel
+   */
+
+  detectVerticalSquash = function(img) {
+    var alpha, canvas, ctx, data, ey, ih, iw, py, ratio, sy;
+    iw = img.naturalWidth;
+    ih = img.naturalHeight;
+    canvas = document.createElement("canvas");
+    canvas.width = 1;
+    canvas.height = ih;
+    ctx = canvas.getContext("2d");
+    ctx.drawImage(img, 0, 0);
+    data = ctx.getImageData(1, 0, 1, ih).data;
+    sy = 0;
+    ey = ih;
+    py = ih;
+    while (py > sy) {
+      alpha = data[(py - 1) * 4 + 3];
+      if (alpha === 0) {
+        ey = py;
+      } else {
+        sy = py;
+      }
+      py = (ey + sy) >> 1;
+    }
+    ratio = py / ih;
+    if (ratio === 0) {
+      return 1;
+    } else {
+      return ratio;
+    }
+  };
+
+  drawImageIOSFix = function(ctx, img, sx, sy, sw, sh, dx, dy, dw, dh) {
+    var vertSquashRatio;
+    vertSquashRatio = detectVerticalSquash(img);
+    return ctx.drawImage(img, sx, sy, sw, sh, dx, dy, dw, dh / vertSquashRatio);
+  };
+
+  ExifRestore = (function() {
+    function ExifRestore() {}
+
+    ExifRestore.KEY_STR = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
+
+    ExifRestore.encode64 = function(input) {
+      var chr1, chr2, chr3, enc1, enc2, enc3, enc4, i, output;
+      output = '';
+      chr1 = void 0;
+      chr2 = void 0;
+      chr3 = '';
+      enc1 = void 0;
+      enc2 = void 0;
+      enc3 = void 0;
+      enc4 = '';
+      i = 0;
+      while (true) {
+        chr1 = input[i++];
+        chr2 = input[i++];
+        chr3 = input[i++];
+        enc1 = chr1 >> 2;
+        enc2 = (chr1 & 3) << 4 | chr2 >> 4;
+        enc3 = (chr2 & 15) << 2 | chr3 >> 6;
+        enc4 = chr3 & 63;
+        if (isNaN(chr2)) {
+          enc3 = enc4 = 64;
+        } else if (isNaN(chr3)) {
+          enc4 = 64;
+        }
+        output = output + this.KEY_STR.charAt(enc1) + this.KEY_STR.charAt(enc2) + this.KEY_STR.charAt(enc3) + this.KEY_STR.charAt(enc4);
+        chr1 = chr2 = chr3 = '';
+        enc1 = enc2 = enc3 = enc4 = '';
+        if (!(i < input.length)) {
+          break;
+        }
+      }
+      return output;
+    };
+
+    ExifRestore.restore = function(origFileBase64, resizedFileBase64) {
+      var image, rawImage, segments;
+      if (!origFileBase64.match('data:image/jpeg;base64,')) {
+        return resizedFileBase64;
+      }
+      rawImage = this.decode64(origFileBase64.replace('data:image/jpeg;base64,', ''));
+      segments = this.slice2Segments(rawImage);
+      image = this.exifManipulation(resizedFileBase64, segments);
+      return 'data:image/jpeg;base64,' + this.encode64(image);
+    };
+
+    ExifRestore.exifManipulation = function(resizedFileBase64, segments) {
+      var aBuffer, exifArray, newImageArray;
+      exifArray = this.getExifArray(segments);
+      newImageArray = this.insertExif(resizedFileBase64, exifArray);
+      aBuffer = new Uint8Array(newImageArray);
+      return aBuffer;
+    };
+
+    ExifRestore.getExifArray = function(segments) {
+      var seg, x;
+      seg = void 0;
+      x = 0;
+      while (x < segments.length) {
+        seg = segments[x];
+        if (seg[0] === 255 & seg[1] === 225) {
+          return seg;
+        }
+        x++;
+      }
+      return [];
+    };
+
+    ExifRestore.insertExif = function(resizedFileBase64, exifArray) {
+      var array, ato, buf, imageData, mae, separatePoint;
+      imageData = resizedFileBase64.replace('data:image/jpeg;base64,', '');
+      buf = this.decode64(imageData);
+      separatePoint = buf.indexOf(255, 3);
+      mae = buf.slice(0, separatePoint);
+      ato = buf.slice(separatePoint);
+      array = mae;
+      array = array.concat(exifArray);
+      array = array.concat(ato);
+      return array;
+    };
+
+    ExifRestore.slice2Segments = function(rawImageArray) {
+      var endPoint, head, length, seg, segments;
+      head = 0;
+      segments = [];
+      while (true) {
+        if (rawImageArray[head] === 255 & rawImageArray[head + 1] === 218) {
+          break;
+        }
+        if (rawImageArray[head] === 255 & rawImageArray[head + 1] === 216) {
+          head += 2;
+        } else {
+          length = rawImageArray[head + 2] * 256 + rawImageArray[head + 3];
+          endPoint = head + length + 2;
+          seg = rawImageArray.slice(head, endPoint);
+          segments.push(seg);
+          head = endPoint;
+        }
+        if (head > rawImageArray.length) {
+          break;
+        }
+      }
+      return segments;
+    };
+
+    ExifRestore.decode64 = function(input) {
+      var base64test, buf, chr1, chr2, chr3, enc1, enc2, enc3, enc4, i, output;
+      output = '';
+      chr1 = void 0;
+      chr2 = void 0;
+      chr3 = '';
+      enc1 = void 0;
+      enc2 = void 0;
+      enc3 = void 0;
+      enc4 = '';
+      i = 0;
+      buf = [];
+      base64test = /[^A-Za-z0-9\+\/\=]/g;
+      if (base64test.exec(input)) {
+        console.warning('There were invalid base64 characters in the input text.\n' + 'Valid base64 characters are A-Z, a-z, 0-9, \'+\', \'/\',and \'=\'\n' + 'Expect errors in decoding.');
+      }
+      input = input.replace(/[^A-Za-z0-9\+\/\=]/g, '');
+      while (true) {
+        enc1 = this.KEY_STR.indexOf(input.charAt(i++));
+        enc2 = this.KEY_STR.indexOf(input.charAt(i++));
+        enc3 = this.KEY_STR.indexOf(input.charAt(i++));
+        enc4 = this.KEY_STR.indexOf(input.charAt(i++));
+        chr1 = enc1 << 2 | enc2 >> 4;
+        chr2 = (enc2 & 15) << 4 | enc3 >> 2;
+        chr3 = (enc3 & 3) << 6 | enc4;
+        buf.push(chr1);
+        if (enc3 !== 64) {
+          buf.push(chr2);
+        }
+        if (enc4 !== 64) {
+          buf.push(chr3);
+        }
+        chr1 = chr2 = chr3 = '';
+        enc1 = enc2 = enc3 = enc4 = '';
+        if (!(i < input.length)) {
+          break;
+        }
+      }
+      return buf;
+    };
+
+    return ExifRestore;
+
+  })();
+
+
+  /*
+   * contentloaded.js
+   *
+   * Author: Diego Perini (diego.perini at gmail.com)
+   * Summary: cross-browser wrapper for DOMContentLoaded
+   * Updated: 20101020
+   * License: MIT
+   * Version: 1.2
+   *
+   * URL:
+   * http://javascript.nwbox.com/ContentLoaded/
+   * http://javascript.nwbox.com/ContentLoaded/MIT-LICENSE
+   */
+
+  contentLoaded = function(win, fn) {
+    var add, doc, done, init, poll, pre, rem, root, top;
+    done = false;
+    top = true;
+    doc = win.document;
+    root = doc.documentElement;
+    add = (doc.addEventListener ? "addEventListener" : "attachEvent");
+    rem = (doc.addEventListener ? "removeEventListener" : "detachEvent");
+    pre = (doc.addEventListener ? "" : "on");
+    init = function(e) {
+      if (e.type === "readystatechange" && doc.readyState !== "complete") {
+        return;
+      }
+      (e.type === "load" ? win : doc)[rem](pre + e.type, init, false);
+      if (!done && (done = true)) {
+        return fn.call(win, e.type || e);
+      }
+    };
+    poll = function() {
+      var e, error1;
+      try {
+        root.doScroll("left");
+      } catch (error1) {
+        e = error1;
+        setTimeout(poll, 50);
+        return;
+      }
+      return init("poll");
+    };
+    if (doc.readyState !== "complete") {
+      if (doc.createEventObject && root.doScroll) {
+        try {
+          top = !win.frameElement;
+        } catch (undefined) {}
+        if (top) {
+          poll();
+        }
+      }
+      doc[add](pre + "DOMContentLoaded", init, false);
+      doc[add](pre + "readystatechange", init, false);
+      return win[add](pre + "load", init, false);
+    }
+  };
+
+  Dropzone._autoDiscoverFunction = function() {
+    if (Dropzone.autoDiscover) {
+      return Dropzone.discover();
+    }
+  };
+
+  contentLoaded(window, Dropzone._autoDiscoverFunction);
+
+}).call(this);
diff --git a/vendor/enyo/dropzone/dist/min/basic.min.css b/vendor/enyo/dropzone/dist/min/basic.min.css
new file mode 100644
index 0000000000000000000000000000000000000000..5238d5cae5c590afce745efdd16aa1780276b765
--- /dev/null
+++ b/vendor/enyo/dropzone/dist/min/basic.min.css
@@ -0,0 +1 @@
+.dropzone,.dropzone *{box-sizing:border-box}.dropzone{position:relative}.dropzone .dz-preview{position:relative;display:inline-block;width:120px;margin:0.5em}.dropzone .dz-preview .dz-progress{display:block;height:15px;border:1px solid #aaa}.dropzone .dz-preview .dz-progress .dz-upload{display:block;height:100%;width:0;background:green}.dropzone .dz-preview .dz-error-message{color:red;display:none}.dropzone .dz-preview.dz-error .dz-error-message,.dropzone .dz-preview.dz-error .dz-error-mark{display:block}.dropzone .dz-preview.dz-success .dz-success-mark{display:block}.dropzone .dz-preview .dz-error-mark,.dropzone .dz-preview .dz-success-mark{position:absolute;display:none;left:30px;top:30px;width:54px;height:58px;left:50%;margin-left:-27px}
diff --git a/vendor/enyo/dropzone/dist/min/dropzone-amd-module.min.js b/vendor/enyo/dropzone/dist/min/dropzone-amd-module.min.js
new file mode 100644
index 0000000000000000000000000000000000000000..b3baa6990e81bb074afa84ec3a0b772c0107ff1a
--- /dev/null
+++ b/vendor/enyo/dropzone/dist/min/dropzone-amd-module.min.js
@@ -0,0 +1,2 @@
+!function(a){"function"==typeof define&&define.amd?define(["jquery"],a):a(jQuery)}(function(a){var b={exports:{}};return function(){var c,d,e,f,g,h,i,j,k,l=[].slice,m=function(a,b){function c(){this.constructor=a}for(var d in b)n.call(b,d)&&(a[d]=b[d]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a},n={}.hasOwnProperty;j=function(){},d=function(){function a(){}return a.prototype.addEventListener=a.prototype.on,a.prototype.on=function(a,b){return this._callbacks=this._callbacks||{},this._callbacks[a]||(this._callbacks[a]=[]),this._callbacks[a].push(b),this},a.prototype.emit=function(){var a,b,c,d,e,f;if(d=arguments[0],a=2<=arguments.length?l.call(arguments,1):[],this._callbacks=this._callbacks||{},c=this._callbacks[d])for(e=0,f=c.length;e<f;e++)b=c[e],b.apply(this,a);return this},a.prototype.removeListener=a.prototype.off,a.prototype.removeAllListeners=a.prototype.off,a.prototype.removeEventListener=a.prototype.off,a.prototype.off=function(a,b){var c,d,e,f,g;if(!this._callbacks||0===arguments.length)return this._callbacks={},this;if(d=this._callbacks[a],!d)return this;if(1===arguments.length)return delete this._callbacks[a],this;for(e=f=0,g=d.length;f<g;e=++f)if(c=d[e],c===b){d.splice(e,1);break}return this},a}(),c=function(a){function b(a,d){var e,f,g;if(this.element=a,this.version=b.version,this.defaultOptions.previewTemplate=this.defaultOptions.previewTemplate.replace(/\n*/g,""),this.clickableElements=[],this.listeners=[],this.files=[],"string"==typeof this.element&&(this.element=document.querySelector(this.element)),!this.element||null==this.element.nodeType)throw new Error("Invalid dropzone element.");if(this.element.dropzone)throw new Error("Dropzone already attached.");if(b.instances.push(this),this.element.dropzone=this,e=null!=(g=b.optionsForElement(this.element))?g:{},this.options=c({},this.defaultOptions,e,null!=d?d:{}),this.options.forceFallback||!b.isBrowserSupported())return this.options.fallback.call(this);if(null==this.options.url&&(this.options.url=this.element.getAttribute("action")),!this.options.url)throw new Error("No URL provided.");if(this.options.acceptedFiles&&this.options.acceptedMimeTypes)throw new Error("You can't provide both 'acceptedFiles' and 'acceptedMimeTypes'. 'acceptedMimeTypes' is deprecated.");this.options.acceptedMimeTypes&&(this.options.acceptedFiles=this.options.acceptedMimeTypes,delete this.options.acceptedMimeTypes),null!=this.options.renameFilename&&(this.options.renameFile=function(a){return function(b){return a.options.renameFilename.call(a,b.name,b)}}(this)),this.options.method=this.options.method.toUpperCase(),(f=this.getExistingFallback())&&f.parentNode&&f.parentNode.removeChild(f),this.options.previewsContainer!==!1&&(this.options.previewsContainer?this.previewsContainer=b.getElement(this.options.previewsContainer,"previewsContainer"):this.previewsContainer=this.element),this.options.clickable&&(this.options.clickable===!0?this.clickableElements=[this.element]:this.clickableElements=b.getElements(this.options.clickable,"clickable")),this.init()}var c,f;return m(b,a),b.prototype.Emitter=d,b.prototype.events=["drop","dragstart","dragend","dragenter","dragover","dragleave","addedfile","addedfiles","removedfile","thumbnail","error","errormultiple","processing","processingmultiple","uploadprogress","totaluploadprogress","sending","sendingmultiple","success","successmultiple","canceled","canceledmultiple","complete","completemultiple","reset","maxfilesexceeded","maxfilesreached","queuecomplete"],b.prototype.defaultOptions={url:null,method:"post",withCredentials:!1,timeout:3e4,parallelUploads:2,uploadMultiple:!1,maxFilesize:256,paramName:"file",createImageThumbnails:!0,maxThumbnailFilesize:10,thumbnailWidth:120,thumbnailHeight:120,thumbnailMethod:"crop",resizeWidth:null,resizeHeight:null,resizeMimeType:null,resizeQuality:.8,resizeMethod:"contain",filesizeBase:1e3,maxFiles:null,params:{},headers:null,clickable:!0,ignoreHiddenFiles:!0,acceptedFiles:null,acceptedMimeTypes:null,autoProcessQueue:!0,autoQueue:!0,addRemoveLinks:!1,previewsContainer:null,hiddenInputContainer:"body",capture:null,renameFilename:null,renameFile:null,forceFallback:!1,dictDefaultMessage:"Drop files here to upload",dictFallbackMessage:"Your browser does not support drag'n'drop file uploads.",dictFallbackText:"Please use the fallback form below to upload your files like in the olden days.",dictFileTooBig:"File is too big ({{filesize}}MiB). Max filesize: {{maxFilesize}}MiB.",dictInvalidFileType:"You can't upload files of this type.",dictResponseError:"Server responded with {{statusCode}} code.",dictCancelUpload:"Cancel upload",dictCancelUploadConfirmation:"Are you sure you want to cancel this upload?",dictRemoveFile:"Remove file",dictRemoveFileConfirmation:null,dictMaxFilesExceeded:"You can not upload any more files.",dictFileSizeUnits:{tb:"TB",gb:"GB",mb:"MB",kb:"KB",b:"b"},init:function(){return j},accept:function(a,b){return b()},fallback:function(){var a,c,d,e,f,g;for(this.element.className=this.element.className+" dz-browser-not-supported",f=this.element.getElementsByTagName("div"),c=0,d=f.length;c<d;c++)a=f[c],/(^| )dz-message($| )/.test(a.className)&&(e=a,a.className="dz-message");return e||(e=b.createElement('<div class="dz-message"><span></span></div>'),this.element.appendChild(e)),g=e.getElementsByTagName("span")[0],g&&(null!=g.textContent?g.textContent=this.options.dictFallbackMessage:null!=g.innerText&&(g.innerText=this.options.dictFallbackMessage)),this.element.appendChild(this.getFallbackForm())},resize:function(a,b,c,d){var e,f,g;if(e={srcX:0,srcY:0,srcWidth:a.width,srcHeight:a.height},f=a.width/a.height,null==b&&null==c?(b=e.srcWidth,c=e.srcHeight):null==b?b=c*f:null==c&&(c=b/f),b=Math.min(b,e.srcWidth),c=Math.min(c,e.srcHeight),g=b/c,e.srcWidth>b||e.srcHeight>c)if("crop"===d)f>g?(e.srcHeight=a.height,e.srcWidth=e.srcHeight*g):(e.srcWidth=a.width,e.srcHeight=e.srcWidth/g);else{if("contain"!==d)throw new Error("Unknown resizeMethod '"+d+"'");f>g?c=b/f:b=c*f}return e.srcX=(a.width-e.srcWidth)/2,e.srcY=(a.height-e.srcHeight)/2,e.trgWidth=b,e.trgHeight=c,e},transformFile:function(a,b){return(this.options.resizeWidth||this.options.resizeHeight)&&a.type.match(/image.*/)?this.resizeImage(a,this.options.resizeWidth,this.options.resizeHeight,this.options.resizeMethod,b):b(a)},previewTemplate:'<div class="dz-preview dz-file-preview">\n  <div class="dz-image"><img data-dz-thumbnail /></div>\n  <div class="dz-details">\n    <div class="dz-size"><span data-dz-size></span></div>\n    <div class="dz-filename"><span data-dz-name></span></div>\n  </div>\n  <div class="dz-progress"><span class="dz-upload" data-dz-uploadprogress></span></div>\n  <div class="dz-error-message"><span data-dz-errormessage></span></div>\n  <div class="dz-success-mark">\n    <svg width="54px" height="54px" viewBox="0 0 54 54" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sketch="http://www.bohemiancoding.com/sketch/ns">\n      <title>Check</title>\n      <defs></defs>\n      <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" sketch:type="MSPage">\n        <path d="M23.5,31.8431458 L17.5852419,25.9283877 C16.0248253,24.3679711 13.4910294,24.366835 11.9289322,25.9289322 C10.3700136,27.4878508 10.3665912,30.0234455 11.9283877,31.5852419 L20.4147581,40.0716123 C20.5133999,40.1702541 20.6159315,40.2626649 20.7218615,40.3488435 C22.2835669,41.8725651 24.794234,41.8626202 26.3461564,40.3106978 L43.3106978,23.3461564 C44.8771021,21.7797521 44.8758057,19.2483887 43.3137085,17.6862915 C41.7547899,16.1273729 39.2176035,16.1255422 37.6538436,17.6893022 L23.5,31.8431458 Z M27,53 C41.3594035,53 53,41.3594035 53,27 C53,12.6405965 41.3594035,1 27,1 C12.6405965,1 1,12.6405965 1,27 C1,41.3594035 12.6405965,53 27,53 Z" id="Oval-2" stroke-opacity="0.198794158" stroke="#747474" fill-opacity="0.816519475" fill="#FFFFFF" sketch:type="MSShapeGroup"></path>\n      </g>\n    </svg>\n  </div>\n  <div class="dz-error-mark">\n    <svg width="54px" height="54px" viewBox="0 0 54 54" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sketch="http://www.bohemiancoding.com/sketch/ns">\n      <title>Error</title>\n      <defs></defs>\n      <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" sketch:type="MSPage">\n        <g id="Check-+-Oval-2" sketch:type="MSLayerGroup" stroke="#747474" stroke-opacity="0.198794158" fill="#FFFFFF" fill-opacity="0.816519475">\n          <path d="M32.6568542,29 L38.3106978,23.3461564 C39.8771021,21.7797521 39.8758057,19.2483887 38.3137085,17.6862915 C36.7547899,16.1273729 34.2176035,16.1255422 32.6538436,17.6893022 L27,23.3431458 L21.3461564,17.6893022 C19.7823965,16.1255422 17.2452101,16.1273729 15.6862915,17.6862915 C14.1241943,19.2483887 14.1228979,21.7797521 15.6893022,23.3461564 L21.3431458,29 L15.6893022,34.6538436 C14.1228979,36.2202479 14.1241943,38.7516113 15.6862915,40.3137085 C17.2452101,41.8726271 19.7823965,41.8744578 21.3461564,40.3106978 L27,34.6568542 L32.6538436,40.3106978 C34.2176035,41.8744578 36.7547899,41.8726271 38.3137085,40.3137085 C39.8758057,38.7516113 39.8771021,36.2202479 38.3106978,34.6538436 L32.6568542,29 Z M27,53 C41.3594035,53 53,41.3594035 53,27 C53,12.6405965 41.3594035,1 27,1 C12.6405965,1 1,12.6405965 1,27 C1,41.3594035 12.6405965,53 27,53 Z" id="Oval-2" sketch:type="MSShapeGroup"></path>\n        </g>\n      </g>\n    </svg>\n  </div>\n</div>',drop:function(a){return this.element.classList.remove("dz-drag-hover")},dragstart:j,dragend:function(a){return this.element.classList.remove("dz-drag-hover")},dragenter:function(a){return this.element.classList.add("dz-drag-hover")},dragover:function(a){return this.element.classList.add("dz-drag-hover")},dragleave:function(a){return this.element.classList.remove("dz-drag-hover")},paste:j,reset:function(){return this.element.classList.remove("dz-started")},addedfile:function(a){var c,d,e,f,g,h,i,j,k,l,m,n,o;if(this.element===this.previewsContainer&&this.element.classList.add("dz-started"),this.previewsContainer){for(a.previewElement=b.createElement(this.options.previewTemplate.trim()),a.previewTemplate=a.previewElement,this.previewsContainer.appendChild(a.previewElement),j=a.previewElement.querySelectorAll("[data-dz-name]"),c=0,f=j.length;c<f;c++)i=j[c],i.textContent=a.name;for(k=a.previewElement.querySelectorAll("[data-dz-size]"),d=0,g=k.length;d<g;d++)i=k[d],i.innerHTML=this.filesize(a.size);for(this.options.addRemoveLinks&&(a._removeLink=b.createElement('<a class="dz-remove" href="javascript:undefined;" data-dz-remove>'+this.options.dictRemoveFile+"</a>"),a.previewElement.appendChild(a._removeLink)),m=function(c){return function(d){return d.preventDefault(),d.stopPropagation(),a.status===b.UPLOADING?b.confirm(c.options.dictCancelUploadConfirmation,function(){return c.removeFile(a)}):c.options.dictRemoveFileConfirmation?b.confirm(c.options.dictRemoveFileConfirmation,function(){return c.removeFile(a)}):c.removeFile(a)}}(this),l=a.previewElement.querySelectorAll("[data-dz-remove]"),o=[],e=0,h=l.length;e<h;e++)n=l[e],o.push(n.addEventListener("click",m));return o}},removedfile:function(a){var b;return a.previewElement&&null!=(b=a.previewElement)&&b.parentNode.removeChild(a.previewElement),this._updateMaxFilesReachedClass()},thumbnail:function(a,b){var c,d,e,f;if(a.previewElement){for(a.previewElement.classList.remove("dz-file-preview"),e=a.previewElement.querySelectorAll("[data-dz-thumbnail]"),c=0,d=e.length;c<d;c++)f=e[c],f.alt=a.name,f.src=b;return setTimeout(function(b){return function(){return a.previewElement.classList.add("dz-image-preview")}}(this),1)}},error:function(a,b){var c,d,e,f,g;if(a.previewElement){for(a.previewElement.classList.add("dz-error"),"String"!=typeof b&&b.error&&(b=b.error),f=a.previewElement.querySelectorAll("[data-dz-errormessage]"),g=[],c=0,d=f.length;c<d;c++)e=f[c],g.push(e.textContent=b);return g}},errormultiple:j,processing:function(a){if(a.previewElement&&(a.previewElement.classList.add("dz-processing"),a._removeLink))return a._removeLink.textContent=this.options.dictCancelUpload},processingmultiple:j,uploadprogress:function(a,b,c){var d,e,f,g,h;if(a.previewElement){for(g=a.previewElement.querySelectorAll("[data-dz-uploadprogress]"),h=[],d=0,e=g.length;d<e;d++)f=g[d],"PROGRESS"===f.nodeName?h.push(f.value=b):h.push(f.style.width=b+"%");return h}},totaluploadprogress:j,sending:j,sendingmultiple:j,success:function(a){if(a.previewElement)return a.previewElement.classList.add("dz-success")},successmultiple:j,canceled:function(a){return this.emit("error",a,"Upload canceled.")},canceledmultiple:j,complete:function(a){if(a._removeLink&&(a._removeLink.textContent=this.options.dictRemoveFile),a.previewElement)return a.previewElement.classList.add("dz-complete")},completemultiple:j,maxfilesexceeded:j,maxfilesreached:j,queuecomplete:j,addedfiles:j},c=function(){var a,b,c,d,e,f,g;for(f=arguments[0],e=2<=arguments.length?l.call(arguments,1):[],a=0,c=e.length;a<c;a++){d=e[a];for(b in d)g=d[b],f[b]=g}return f},b.prototype.getAcceptedFiles=function(){var a,b,c,d,e;for(d=this.files,e=[],b=0,c=d.length;b<c;b++)a=d[b],a.accepted&&e.push(a);return e},b.prototype.getRejectedFiles=function(){var a,b,c,d,e;for(d=this.files,e=[],b=0,c=d.length;b<c;b++)a=d[b],a.accepted||e.push(a);return e},b.prototype.getFilesWithStatus=function(a){var b,c,d,e,f;for(e=this.files,f=[],c=0,d=e.length;c<d;c++)b=e[c],b.status===a&&f.push(b);return f},b.prototype.getQueuedFiles=function(){return this.getFilesWithStatus(b.QUEUED)},b.prototype.getUploadingFiles=function(){return this.getFilesWithStatus(b.UPLOADING)},b.prototype.getAddedFiles=function(){return this.getFilesWithStatus(b.ADDED)},b.prototype.getActiveFiles=function(){var a,c,d,e,f;for(e=this.files,f=[],c=0,d=e.length;c<d;c++)a=e[c],a.status!==b.UPLOADING&&a.status!==b.QUEUED||f.push(a);return f},b.prototype.init=function(){var a,c,d,e,f,g,h;for("form"===this.element.tagName&&this.element.setAttribute("enctype","multipart/form-data"),this.element.classList.contains("dropzone")&&!this.element.querySelector(".dz-message")&&this.element.appendChild(b.createElement('<div class="dz-default dz-message"><span>'+this.options.dictDefaultMessage+"</span></div>")),this.clickableElements.length&&(h=function(a){return function(){return a.hiddenFileInput&&a.hiddenFileInput.parentNode.removeChild(a.hiddenFileInput),a.hiddenFileInput=document.createElement("input"),a.hiddenFileInput.setAttribute("type","file"),(null==a.options.maxFiles||a.options.maxFiles>1)&&a.hiddenFileInput.setAttribute("multiple","multiple"),a.hiddenFileInput.className="dz-hidden-input",null!=a.options.acceptedFiles&&a.hiddenFileInput.setAttribute("accept",a.options.acceptedFiles),null!=a.options.capture&&a.hiddenFileInput.setAttribute("capture",a.options.capture),a.hiddenFileInput.style.visibility="hidden",a.hiddenFileInput.style.position="absolute",a.hiddenFileInput.style.top="0",a.hiddenFileInput.style.left="0",a.hiddenFileInput.style.height="0",a.hiddenFileInput.style.width="0",document.querySelector(a.options.hiddenInputContainer).appendChild(a.hiddenFileInput),a.hiddenFileInput.addEventListener("change",function(){var b,c,d,e;if(c=a.hiddenFileInput.files,c.length)for(d=0,e=c.length;d<e;d++)b=c[d],a.addFile(b);return a.emit("addedfiles",c),h()})}}(this))(),this.URL=null!=(f=window.URL)?f:window.webkitURL,g=this.events,c=0,d=g.length;c<d;c++)a=g[c],this.on(a,this.options[a]);return this.on("uploadprogress",function(a){return function(){return a.updateTotalUploadProgress()}}(this)),this.on("removedfile",function(a){return function(){return a.updateTotalUploadProgress()}}(this)),this.on("canceled",function(a){return function(b){return a.emit("complete",b)}}(this)),this.on("complete",function(a){return function(b){if(0===a.getAddedFiles().length&&0===a.getUploadingFiles().length&&0===a.getQueuedFiles().length)return setTimeout(function(){return a.emit("queuecomplete")},0)}}(this)),e=function(a){return a.stopPropagation(),a.preventDefault?a.preventDefault():a.returnValue=!1},this.listeners=[{element:this.element,events:{dragstart:function(a){return function(b){return a.emit("dragstart",b)}}(this),dragenter:function(a){return function(b){return e(b),a.emit("dragenter",b)}}(this),dragover:function(a){return function(b){var c;try{c=b.dataTransfer.effectAllowed}catch(a){}return b.dataTransfer.dropEffect="move"===c||"linkMove"===c?"move":"copy",e(b),a.emit("dragover",b)}}(this),dragleave:function(a){return function(b){return a.emit("dragleave",b)}}(this),drop:function(a){return function(b){return e(b),a.drop(b)}}(this),dragend:function(a){return function(b){return a.emit("dragend",b)}}(this)}}],this.clickableElements.forEach(function(a){return function(c){return a.listeners.push({element:c,events:{click:function(d){return(c!==a.element||d.target===a.element||b.elementInside(d.target,a.element.querySelector(".dz-message")))&&a.hiddenFileInput.click(),!0}}})}}(this)),this.enable(),this.options.init.call(this)},b.prototype.destroy=function(){var a;return this.disable(),this.removeAllFiles(!0),(null!=(a=this.hiddenFileInput)?a.parentNode:void 0)&&(this.hiddenFileInput.parentNode.removeChild(this.hiddenFileInput),this.hiddenFileInput=null),delete this.element.dropzone,b.instances.splice(b.instances.indexOf(this),1)},b.prototype.updateTotalUploadProgress=function(){var a,b,c,d,e,f,g,h;if(g=0,f=0,a=this.getActiveFiles(),a.length){for(e=this.getActiveFiles(),c=0,d=e.length;c<d;c++)b=e[c],g+=b.upload.bytesSent,f+=b.upload.total;h=100*g/f}else h=100;return this.emit("totaluploadprogress",h,f,g)},b.prototype._getParamName=function(a){return"function"==typeof this.options.paramName?this.options.paramName(a):""+this.options.paramName+(this.options.uploadMultiple?"["+a+"]":"")},b.prototype._renameFile=function(a){return"function"!=typeof this.options.renameFile?a.name:this.options.renameFile(a)},b.prototype.getFallbackForm=function(){var a,c,d,e;return(a=this.getExistingFallback())?a:(d='<div class="dz-fallback">',this.options.dictFallbackText&&(d+="<p>"+this.options.dictFallbackText+"</p>"),d+='<input type="file" name="'+this._getParamName(0)+'" '+(this.options.uploadMultiple?'multiple="multiple"':void 0)+' /><input type="submit" value="Upload!"></div>',c=b.createElement(d),"FORM"!==this.element.tagName?(e=b.createElement('<form action="'+this.options.url+'" enctype="multipart/form-data" method="'+this.options.method+'"></form>'),e.appendChild(c)):(this.element.setAttribute("enctype","multipart/form-data"),this.element.setAttribute("method",this.options.method)),null!=e?e:c)},b.prototype.getExistingFallback=function(){var a,b,c,d,e,f;for(b=function(a){var b,c,d;for(c=0,d=a.length;c<d;c++)if(b=a[c],/(^| )fallback($| )/.test(b.className))return b},e=["div","form"],c=0,d=e.length;c<d;c++)if(f=e[c],a=b(this.element.getElementsByTagName(f)))return a},b.prototype.setupEventListeners=function(){var a,b,c,d,e,f,g;for(f=this.listeners,g=[],c=0,d=f.length;c<d;c++)a=f[c],g.push(function(){var c,d;c=a.events,d=[];for(b in c)e=c[b],d.push(a.element.addEventListener(b,e,!1));return d}());return g},b.prototype.removeEventListeners=function(){var a,b,c,d,e,f,g;for(f=this.listeners,g=[],c=0,d=f.length;c<d;c++)a=f[c],g.push(function(){var c,d;c=a.events,d=[];for(b in c)e=c[b],d.push(a.element.removeEventListener(b,e,!1));return d}());return g},b.prototype.disable=function(){var a,b,c,d,e;for(this.clickableElements.forEach(function(a){return a.classList.remove("dz-clickable")}),this.removeEventListeners(),d=this.files,e=[],b=0,c=d.length;b<c;b++)a=d[b],e.push(this.cancelUpload(a));return e},b.prototype.enable=function(){return this.clickableElements.forEach(function(a){return a.classList.add("dz-clickable")}),this.setupEventListeners()},b.prototype.filesize=function(a){var b,c,d,e,f,g,h,i;if(f=0,g="b",a>0){for(i=["tb","gb","mb","kb","b"],c=d=0,e=i.length;d<e;c=++d)if(h=i[c],b=Math.pow(this.options.filesizeBase,4-c)/10,a>=b){f=a/Math.pow(this.options.filesizeBase,4-c),g=h;break}f=Math.round(10*f)/10}return"<strong>"+f+"</strong> "+this.options.dictFileSizeUnits[g]},b.prototype._updateMaxFilesReachedClass=function(){return null!=this.options.maxFiles&&this.getAcceptedFiles().length>=this.options.maxFiles?(this.getAcceptedFiles().length===this.options.maxFiles&&this.emit("maxfilesreached",this.files),this.element.classList.add("dz-max-files-reached")):this.element.classList.remove("dz-max-files-reached")},b.prototype.drop=function(a){var b,c;a.dataTransfer&&(this.emit("drop",a),b=a.dataTransfer.files,this.emit("addedfiles",b),b.length&&(c=a.dataTransfer.items,c&&c.length&&null!=c[0].webkitGetAsEntry?this._addFilesFromItems(c):this.handleFiles(b)))},b.prototype.paste=function(a){var b,c;if(null!=(null!=a&&null!=(c=a.clipboardData)?c.items:void 0))return this.emit("paste",a),b=a.clipboardData.items,b.length?this._addFilesFromItems(b):void 0},b.prototype.handleFiles=function(a){var b,c,d,e;for(e=[],c=0,d=a.length;c<d;c++)b=a[c],e.push(this.addFile(b));return e},b.prototype._addFilesFromItems=function(a){var b,c,d,e,f;for(f=[],d=0,e=a.length;d<e;d++)c=a[d],null!=c.webkitGetAsEntry&&(b=c.webkitGetAsEntry())?b.isFile?f.push(this.addFile(c.getAsFile())):b.isDirectory?f.push(this._addFilesFromDirectory(b,b.name)):f.push(void 0):null!=c.getAsFile&&(null==c.kind||"file"===c.kind)?f.push(this.addFile(c.getAsFile())):f.push(void 0);return f},b.prototype._addFilesFromDirectory=function(a,b){var c,d,e;return c=a.createReader(),d=function(a){return"undefined"!=typeof console&&null!==console&&"function"==typeof console.log?console.log(a):void 0},(e=function(a){return function(){return c.readEntries(function(c){var d,f,g;if(c.length>0){for(f=0,g=c.length;f<g;f++)d=c[f],d.isFile?d.file(function(c){if(!a.options.ignoreHiddenFiles||"."!==c.name.substring(0,1))return c.fullPath=b+"/"+c.name,a.addFile(c)}):d.isDirectory&&a._addFilesFromDirectory(d,b+"/"+d.name);e()}return null},d)}}(this))()},b.prototype.accept=function(a,c){return a.size>1024*this.options.maxFilesize*1024?c(this.options.dictFileTooBig.replace("{{filesize}}",Math.round(a.size/1024/10.24)/100).replace("{{maxFilesize}}",this.options.maxFilesize)):b.isValidFile(a,this.options.acceptedFiles)?null!=this.options.maxFiles&&this.getAcceptedFiles().length>=this.options.maxFiles?(c(this.options.dictMaxFilesExceeded.replace("{{maxFiles}}",this.options.maxFiles)),this.emit("maxfilesexceeded",a)):this.options.accept.call(this,a,c):c(this.options.dictInvalidFileType)},b.prototype.addFile=function(a){return a.upload={progress:0,total:a.size,bytesSent:0,filename:this._renameFile(a)},this.files.push(a),a.status=b.ADDED,this.emit("addedfile",a),this._enqueueThumbnail(a),this.accept(a,function(b){return function(c){return c?(a.accepted=!1,b._errorProcessing([a],c)):(a.accepted=!0,b.options.autoQueue&&b.enqueueFile(a)),b._updateMaxFilesReachedClass()}}(this))},b.prototype.enqueueFiles=function(a){var b,c,d;for(c=0,d=a.length;c<d;c++)b=a[c],this.enqueueFile(b);return null},b.prototype.enqueueFile=function(a){if(a.status!==b.ADDED||a.accepted!==!0)throw new Error("This file can't be queued because it has already been processed or was rejected.");if(a.status=b.QUEUED,this.options.autoProcessQueue)return setTimeout(function(a){return function(){return a.processQueue()}}(this),0)},b.prototype._thumbnailQueue=[],b.prototype._processingThumbnail=!1,b.prototype._enqueueThumbnail=function(a){if(this.options.createImageThumbnails&&a.type.match(/image.*/)&&a.size<=1024*this.options.maxThumbnailFilesize*1024)return this._thumbnailQueue.push(a),setTimeout(function(a){return function(){return a._processThumbnailQueue()}}(this),0)},b.prototype._processThumbnailQueue=function(){var a;if(!this._processingThumbnail&&0!==this._thumbnailQueue.length)return this._processingThumbnail=!0,a=this._thumbnailQueue.shift(),this.createThumbnail(a,this.options.thumbnailWidth,this.options.thumbnailHeight,this.options.thumbnailMethod,!0,function(b){return function(c){return b.emit("thumbnail",a,c),b._processingThumbnail=!1,b._processThumbnailQueue()}}(this))},b.prototype.removeFile=function(a){if(a.status===b.UPLOADING&&this.cancelUpload(a),this.files=k(this.files,a),this.emit("removedfile",a),0===this.files.length)return this.emit("reset")},b.prototype.removeAllFiles=function(a){var c,d,e,f;for(null==a&&(a=!1),f=this.files.slice(),d=0,e=f.length;d<e;d++)c=f[d],(c.status!==b.UPLOADING||a)&&this.removeFile(c);return null},b.prototype.resizeImage=function(a,c,d,f,g){return this.createThumbnail(a,c,d,f,!1,function(c){return function(d,f){var h,i;return null===f?g(a):(h=c.options.resizeMimeType,null==h&&(h=a.type),i=f.toDataURL(h,c.options.resizeQuality),"image/jpeg"!==h&&"image/jpg"!==h||(i=e.restore(a.dataURL,i)),g(b.dataURItoBlob(i)))}}(this))},b.prototype.createThumbnail=function(a,b,c,d,e,f){var g;return g=new FileReader,g.onload=function(h){return function(){return a.dataURL=g.result,"image/svg+xml"===a.type?void(null!=f&&f(g.result)):h.createThumbnailFromUrl(a,b,c,d,e,f)}}(this),g.readAsDataURL(a)},b.prototype.createThumbnailFromUrl=function(a,b,c,d,e,f,g){var h;return h=document.createElement("img"),g&&(h.crossOrigin=g),h.onload=function(g){return function(){var j;return j=function(a){return a(1)},"undefined"!=typeof EXIF&&null!==EXIF&&e&&(j=function(a){return EXIF.getData(h,function(){return a(EXIF.getTag(this,"Orientation"))})}),j(function(e){var j,k,l,m,n,o,p,q;switch(a.width=h.width,a.height=h.height,p=g.options.resize.call(g,a,b,c,d),j=document.createElement("canvas"),k=j.getContext("2d"),j.width=p.trgWidth,j.height=p.trgHeight,e>4&&(j.width=p.trgHeight,j.height=p.trgWidth),e){case 2:k.translate(j.width,0),k.scale(-1,1);break;case 3:k.translate(j.width,j.height),k.rotate(Math.PI);break;case 4:k.translate(0,j.height),k.scale(1,-1);break;case 5:k.rotate(.5*Math.PI),k.scale(1,-1);break;case 6:k.rotate(.5*Math.PI),k.translate(0,-j.height);break;case 7:k.rotate(.5*Math.PI),k.translate(j.width,-j.height),k.scale(-1,1);break;case 8:k.rotate(-.5*Math.PI),k.translate(-j.width,0)}if(i(k,h,null!=(l=p.srcX)?l:0,null!=(m=p.srcY)?m:0,p.srcWidth,p.srcHeight,null!=(n=p.trgX)?n:0,null!=(o=p.trgY)?o:0,p.trgWidth,p.trgHeight),q=j.toDataURL("image/png"),null!=f)return f(q,j)})}}(this),null!=f&&(h.onerror=f),h.src=a.dataURL},b.prototype.processQueue=function(){var a,b,c,d;if(b=this.options.parallelUploads,c=this.getUploadingFiles().length,a=c,!(c>=b)&&(d=this.getQueuedFiles(),d.length>0)){if(this.options.uploadMultiple)return this.processFiles(d.slice(0,b-c));for(;a<b;){if(!d.length)return;this.processFile(d.shift()),a++}}},b.prototype.processFile=function(a){return this.processFiles([a])},b.prototype.processFiles=function(a){var c,d,e;for(d=0,e=a.length;d<e;d++)c=a[d],c.processing=!0,c.status=b.UPLOADING,this.emit("processing",c);return this.options.uploadMultiple&&this.emit("processingmultiple",a),this.uploadFiles(a)},b.prototype._getFilesWithXhr=function(a){var b,c;return c=function(){var c,d,e,f;for(e=this.files,f=[],c=0,d=e.length;c<d;c++)b=e[c],b.xhr===a&&f.push(b);return f}.call(this)},b.prototype.cancelUpload=function(a){var c,d,e,f,g,h,i;if(a.status===b.UPLOADING){for(d=this._getFilesWithXhr(a.xhr),e=0,g=d.length;e<g;e++)c=d[e],c.status=b.CANCELED;for(a.xhr.abort(),f=0,h=d.length;f<h;f++)c=d[f],this.emit("canceled",c);this.options.uploadMultiple&&this.emit("canceledmultiple",d)}else(i=a.status)!==b.ADDED&&i!==b.QUEUED||(a.status=b.CANCELED,this.emit("canceled",a),this.options.uploadMultiple&&this.emit("canceledmultiple",[a]));if(this.options.autoProcessQueue)return this.processQueue()},f=function(){var a,b;return b=arguments[0],a=2<=arguments.length?l.call(arguments,1):[],"function"==typeof b?b.apply(this,a):b},b.prototype.uploadFile=function(a){return this.uploadFiles([a])},b.prototype.uploadFiles=function(a){var d,e,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O;for(O=new XMLHttpRequest,q=0,u=a.length;q<u;q++)g=a[q],g.xhr=O;z=f(this.options.method,a),M=f(this.options.url,a),O.open(z,M,!0),O.timeout=f(this.options.timeout,a),O.withCredentials=!!this.options.withCredentials,J=null,i=function(b){return function(){var c,d,e;for(e=[],c=0,d=a.length;c<d;c++)g=a[c],e.push(b._errorProcessing(a,J||b.options.dictResponseError.replace("{{statusCode}}",O.status),O));return e}}(this),L=function(b){return function(c){var d,e,f,h,i,j,k,l,m;if(null!=c)for(l=100*c.loaded/c.total,e=0,h=a.length;e<h;e++)g=a[e],g.upload.progress=l,g.upload.total=c.total,g.upload.bytesSent=c.loaded;else{for(d=!0,l=100,f=0,i=a.length;f<i;f++)g=a[f],100===g.upload.progress&&g.upload.bytesSent===g.upload.total||(d=!1),g.upload.progress=l,g.upload.bytesSent=g.upload.total;if(d)return}for(m=[],k=0,j=a.length;k<j;k++)g=a[k],m.push(b.emit("uploadprogress",g,l,g.upload.bytesSent));return m}}(this),O.onload=function(c){return function(d){var e;if(a[0].status!==b.CANCELED&&4===O.readyState){if("arraybuffer"!==O.responseType&&"blob"!==O.responseType&&(J=O.responseText,O.getResponseHeader("content-type")&&~O.getResponseHeader("content-type").indexOf("application/json")))try{J=JSON.parse(J)}catch(a){d=a,J="Invalid JSON response from server."}return L(),200<=(e=O.status)&&e<300?c._finished(a,J,d):i()}}}(this),O.onerror=function(c){return function(){if(a[0].status!==b.CANCELED)return i()}}(this),C=null!=(D=O.upload)?D:O,C.onprogress=L,l={Accept:"application/json","Cache-Control":"no-cache","X-Requested-With":"XMLHttpRequest"},this.options.headers&&c(l,this.options.headers);for(j in l)k=l[j],k&&O.setRequestHeader(j,k);if(h=new FormData,this.options.params){E=this.options.params;for(s in E)N=E[s],h.append(s,N)}for(r=0,v=a.length;r<v;r++)g=a[r],this.emit("sending",g,O,h);if(this.options.uploadMultiple&&this.emit("sendingmultiple",a,O,h),"FORM"===this.element.tagName)for(F=this.element.querySelectorAll("input, textarea, select, button"),t=0,w=F.length;t<w;t++)if(n=F[t],o=n.getAttribute("name"),p=n.getAttribute("type"),"SELECT"===n.tagName&&n.hasAttribute("multiple"))for(G=n.options,y=0,x=G.length;y<x;y++)B=G[y],B.selected&&h.append(o,B.value);else(!p||"checkbox"!==(H=p.toLowerCase())&&"radio"!==H||n.checked)&&h.append(o,n.value);for(d=0,K=[],m=A=0,I=a.length-1;0<=I?A<=I:A>=I;m=0<=I?++A:--A)e=function(b){return function(c,e,f){return function(c){if(h.append(e,c,f),++d===a.length)return b.submitRequest(O,h,a)}}}(this),K.push(this.options.transformFile.call(this,a[m],e(a[m],this._getParamName(m),a[m].upload.filename)));return K},b.prototype.submitRequest=function(a,b,c){return a.send(b)},b.prototype._finished=function(a,c,d){var e,f,g;for(f=0,g=a.length;f<g;f++)e=a[f],e.status=b.SUCCESS,this.emit("success",e,c,d),this.emit("complete",e);if(this.options.uploadMultiple&&(this.emit("successmultiple",a,c,d),this.emit("completemultiple",a)),this.options.autoProcessQueue)return this.processQueue()},b.prototype._errorProcessing=function(a,c,d){var e,f,g;for(f=0,g=a.length;f<g;f++)e=a[f],e.status=b.ERROR,this.emit("error",e,c,d),this.emit("complete",e);if(this.options.uploadMultiple&&(this.emit("errormultiple",a,c,d),this.emit("completemultiple",a)),this.options.autoProcessQueue)return this.processQueue()},b}(d),c.version="5.1.1",c.options={},c.optionsForElement=function(a){return a.getAttribute("id")?c.options[f(a.getAttribute("id"))]:void 0},c.instances=[],c.forElement=function(a){if("string"==typeof a&&(a=document.querySelector(a)),null==(null!=a?a.dropzone:void 0))throw new Error("No Dropzone found for given element. This is probably because you're trying to access it before Dropzone had the time to initialize. Use the `init` option to setup any additional observers on your Dropzone.");return a.dropzone},c.autoDiscover=!0,c.discover=function(){var a,b,d,e,f,g;for(document.querySelectorAll?d=document.querySelectorAll(".dropzone"):(d=[],a=function(a){var b,c,e,f;for(f=[],c=0,e=a.length;c<e;c++)b=a[c],/(^| )dropzone($| )/.test(b.className)?f.push(d.push(b)):f.push(void 0);return f},a(document.getElementsByTagName("div")),a(document.getElementsByTagName("form"))),
+g=[],e=0,f=d.length;e<f;e++)b=d[e],c.optionsForElement(b)!==!1?g.push(new c(b)):g.push(void 0);return g},c.blacklistedBrowsers=[/opera.*Macintosh.*version\/12/i],c.isBrowserSupported=function(){var a,b,d,e,f;if(a=!0,window.File&&window.FileReader&&window.FileList&&window.Blob&&window.FormData&&document.querySelector)if("classList"in document.createElement("a"))for(e=c.blacklistedBrowsers,b=0,d=e.length;b<d;b++)f=e[b],f.test(navigator.userAgent)&&(a=!1);else a=!1;else a=!1;return a},c.dataURItoBlob=function(a){var b,c,d,e,f,g,h;for(c=atob(a.split(",")[1]),g=a.split(",")[0].split(":")[1].split(";")[0],b=new ArrayBuffer(c.length),e=new Uint8Array(b),d=f=0,h=c.length;0<=h?f<=h:f>=h;d=0<=h?++f:--f)e[d]=c.charCodeAt(d);return new Blob([b],{type:g})},k=function(a,b){var c,d,e,f;for(f=[],d=0,e=a.length;d<e;d++)c=a[d],c!==b&&f.push(c);return f},f=function(a){return a.replace(/[\-_](\w)/g,function(a){return a.charAt(1).toUpperCase()})},c.createElement=function(a){var b;return b=document.createElement("div"),b.innerHTML=a,b.childNodes[0]},c.elementInside=function(a,b){if(a===b)return!0;for(;a=a.parentNode;)if(a===b)return!0;return!1},c.getElement=function(a,b){var c;if("string"==typeof a?c=document.querySelector(a):null!=a.nodeType&&(c=a),null==c)throw new Error("Invalid `"+b+"` option provided. Please provide a CSS selector or a plain HTML element.");return c},c.getElements=function(a,b){var c,d,e,f,g,h,i,j;if(a instanceof Array){e=[];try{for(f=0,h=a.length;f<h;f++)d=a[f],e.push(this.getElement(d,b))}catch(a){c=a,e=null}}else if("string"==typeof a)for(e=[],j=document.querySelectorAll(a),g=0,i=j.length;g<i;g++)d=j[g],e.push(d);else null!=a.nodeType&&(e=[a]);if(null==e||!e.length)throw new Error("Invalid `"+b+"` option provided. Please provide a CSS selector, a plain HTML element or a list of those.");return e},c.confirm=function(a,b,c){return window.confirm(a)?b():null!=c?c():void 0},c.isValidFile=function(a,b){var c,d,e,f,g;if(!b)return!0;for(b=b.split(","),f=a.type,c=f.replace(/\/.*$/,""),d=0,e=b.length;d<e;d++)if(g=b[d],g=g.trim(),"."===g.charAt(0)){if(a.name.toLowerCase().indexOf(g.toLowerCase(),a.name.length-g.length)!==-1)return!0}else if(/\/\*$/.test(g)){if(c===g.replace(/\/.*$/,""))return!0}else if(f===g)return!0;return!1},"undefined"!=typeof a&&null!==a&&(a.fn.dropzone=function(a){return this.each(function(){return new c(this,a)})}),"undefined"!=typeof b&&null!==b?b.exports=c:window.Dropzone=c,c.ADDED="added",c.QUEUED="queued",c.ACCEPTED=c.QUEUED,c.UPLOADING="uploading",c.PROCESSING=c.UPLOADING,c.CANCELED="canceled",c.ERROR="error",c.SUCCESS="success",h=function(a){var b,c,d,e,f,g,h,i,j,k;for(h=a.naturalWidth,g=a.naturalHeight,c=document.createElement("canvas"),c.width=1,c.height=g,d=c.getContext("2d"),d.drawImage(a,0,0),e=d.getImageData(1,0,1,g).data,k=0,f=g,i=g;i>k;)b=e[4*(i-1)+3],0===b?f=i:k=i,i=f+k>>1;return j=i/g,0===j?1:j},i=function(a,b,c,d,e,f,g,i,j,k){var l;return l=h(b),a.drawImage(b,c,d,e,f,g,i,j,k/l)},e=function(){function a(){}return a.KEY_STR="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",a.encode64=function(a){var b,c,d,e,f,g,h,i,j;for(j="",b=void 0,c=void 0,d="",e=void 0,f=void 0,g=void 0,h="",i=0;;)if(b=a[i++],c=a[i++],d=a[i++],e=b>>2,f=(3&b)<<4|c>>4,g=(15&c)<<2|d>>6,h=63&d,isNaN(c)?g=h=64:isNaN(d)&&(h=64),j=j+this.KEY_STR.charAt(e)+this.KEY_STR.charAt(f)+this.KEY_STR.charAt(g)+this.KEY_STR.charAt(h),b=c=d="",e=f=g=h="",!(i<a.length))break;return j},a.restore=function(a,b){var c,d,e;return a.match("data:image/jpeg;base64,")?(d=this.decode64(a.replace("data:image/jpeg;base64,","")),e=this.slice2Segments(d),c=this.exifManipulation(b,e),"data:image/jpeg;base64,"+this.encode64(c)):b},a.exifManipulation=function(a,b){var c,d,e;return d=this.getExifArray(b),e=this.insertExif(a,d),c=new Uint8Array(e)},a.getExifArray=function(a){var b,c;for(b=void 0,c=0;c<a.length;){if(b=a[c],255===b[0]&225===b[1])return b;c++}return[]},a.insertExif=function(a,b){var c,d,e,f,g,h;return f=a.replace("data:image/jpeg;base64,",""),e=this.decode64(f),h=e.indexOf(255,3),g=e.slice(0,h),d=e.slice(h),c=g,c=c.concat(b),c=c.concat(d)},a.slice2Segments=function(a){var b,c,d,e,f;for(c=0,f=[];;){if(255===a[c]&218===a[c+1])break;if(255===a[c]&216===a[c+1]?c+=2:(d=256*a[c+2]+a[c+3],b=c+d+2,e=a.slice(c,b),f.push(e),c=b),c>a.length)break}return f},a.decode64=function(a){var b,c,d,e,f,g,h,i,j,k,l;for(l="",d=void 0,e=void 0,f="",g=void 0,h=void 0,i=void 0,j="",k=0,c=[],b=/[^A-Za-z0-9\+\/\=]/g,b.exec(a)&&console.warning("There were invalid base64 characters in the input text.\nValid base64 characters are A-Z, a-z, 0-9, '+', '/',and '='\nExpect errors in decoding."),a=a.replace(/[^A-Za-z0-9\+\/\=]/g,"");;)if(g=this.KEY_STR.indexOf(a.charAt(k++)),h=this.KEY_STR.indexOf(a.charAt(k++)),i=this.KEY_STR.indexOf(a.charAt(k++)),j=this.KEY_STR.indexOf(a.charAt(k++)),d=g<<2|h>>4,e=(15&h)<<4|i>>2,f=(3&i)<<6|j,c.push(d),64!==i&&c.push(e),64!==j&&c.push(f),d=e=f="",g=h=i=j="",!(k<a.length))break;return c},a}(),g=function(a,b){var c,d,e,f,g,h,i,j,k;if(e=!1,k=!0,d=a.document,j=d.documentElement,c=d.addEventListener?"addEventListener":"attachEvent",i=d.addEventListener?"removeEventListener":"detachEvent",h=d.addEventListener?"":"on",f=function(c){if("readystatechange"!==c.type||"complete"===d.readyState)return("load"===c.type?a:d)[i](h+c.type,f,!1),!e&&(e=!0)?b.call(a,c.type||c):void 0},g=function(){var a;try{j.doScroll("left")}catch(b){return a=b,void setTimeout(g,50)}return f("poll")},"complete"!==d.readyState){if(d.createEventObject&&j.doScroll){try{k=!a.frameElement}catch(a){}k&&g()}return d[c](h+"DOMContentLoaded",f,!1),d[c](h+"readystatechange",f,!1),a[c](h+"load",f,!1)}},c._autoDiscoverFunction=function(){if(c.autoDiscover)return c.discover()},g(window,c._autoDiscoverFunction)}.call(this),b.exports});
\ No newline at end of file
diff --git a/vendor/enyo/dropzone/dist/min/dropzone.min.css b/vendor/enyo/dropzone/dist/min/dropzone.min.css
new file mode 100644
index 0000000000000000000000000000000000000000..d04515e270d3a891632cbc7ffe9c391866212444
--- /dev/null
+++ b/vendor/enyo/dropzone/dist/min/dropzone.min.css
@@ -0,0 +1 @@
+@-webkit-keyframes passing-through{0%{opacity:0;-webkit-transform:translateY(40px);-moz-transform:translateY(40px);-ms-transform:translateY(40px);-o-transform:translateY(40px);transform:translateY(40px)}30%, 70%{opacity:1;-webkit-transform:translateY(0px);-moz-transform:translateY(0px);-ms-transform:translateY(0px);-o-transform:translateY(0px);transform:translateY(0px)}100%{opacity:0;-webkit-transform:translateY(-40px);-moz-transform:translateY(-40px);-ms-transform:translateY(-40px);-o-transform:translateY(-40px);transform:translateY(-40px)}}@-moz-keyframes passing-through{0%{opacity:0;-webkit-transform:translateY(40px);-moz-transform:translateY(40px);-ms-transform:translateY(40px);-o-transform:translateY(40px);transform:translateY(40px)}30%, 70%{opacity:1;-webkit-transform:translateY(0px);-moz-transform:translateY(0px);-ms-transform:translateY(0px);-o-transform:translateY(0px);transform:translateY(0px)}100%{opacity:0;-webkit-transform:translateY(-40px);-moz-transform:translateY(-40px);-ms-transform:translateY(-40px);-o-transform:translateY(-40px);transform:translateY(-40px)}}@keyframes passing-through{0%{opacity:0;-webkit-transform:translateY(40px);-moz-transform:translateY(40px);-ms-transform:translateY(40px);-o-transform:translateY(40px);transform:translateY(40px)}30%, 70%{opacity:1;-webkit-transform:translateY(0px);-moz-transform:translateY(0px);-ms-transform:translateY(0px);-o-transform:translateY(0px);transform:translateY(0px)}100%{opacity:0;-webkit-transform:translateY(-40px);-moz-transform:translateY(-40px);-ms-transform:translateY(-40px);-o-transform:translateY(-40px);transform:translateY(-40px)}}@-webkit-keyframes slide-in{0%{opacity:0;-webkit-transform:translateY(40px);-moz-transform:translateY(40px);-ms-transform:translateY(40px);-o-transform:translateY(40px);transform:translateY(40px)}30%{opacity:1;-webkit-transform:translateY(0px);-moz-transform:translateY(0px);-ms-transform:translateY(0px);-o-transform:translateY(0px);transform:translateY(0px)}}@-moz-keyframes slide-in{0%{opacity:0;-webkit-transform:translateY(40px);-moz-transform:translateY(40px);-ms-transform:translateY(40px);-o-transform:translateY(40px);transform:translateY(40px)}30%{opacity:1;-webkit-transform:translateY(0px);-moz-transform:translateY(0px);-ms-transform:translateY(0px);-o-transform:translateY(0px);transform:translateY(0px)}}@keyframes slide-in{0%{opacity:0;-webkit-transform:translateY(40px);-moz-transform:translateY(40px);-ms-transform:translateY(40px);-o-transform:translateY(40px);transform:translateY(40px)}30%{opacity:1;-webkit-transform:translateY(0px);-moz-transform:translateY(0px);-ms-transform:translateY(0px);-o-transform:translateY(0px);transform:translateY(0px)}}@-webkit-keyframes pulse{0%{-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}10%{-webkit-transform:scale(1.1);-moz-transform:scale(1.1);-ms-transform:scale(1.1);-o-transform:scale(1.1);transform:scale(1.1)}20%{-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}}@-moz-keyframes pulse{0%{-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}10%{-webkit-transform:scale(1.1);-moz-transform:scale(1.1);-ms-transform:scale(1.1);-o-transform:scale(1.1);transform:scale(1.1)}20%{-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}}@keyframes pulse{0%{-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}10%{-webkit-transform:scale(1.1);-moz-transform:scale(1.1);-ms-transform:scale(1.1);-o-transform:scale(1.1);transform:scale(1.1)}20%{-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}}.dropzone,.dropzone *{box-sizing:border-box}.dropzone{min-height:150px;border:2px solid rgba(0,0,0,0.3);background:white;padding:20px 20px}.dropzone.dz-clickable{cursor:pointer}.dropzone.dz-clickable *{cursor:default}.dropzone.dz-clickable .dz-message,.dropzone.dz-clickable .dz-message *{cursor:pointer}.dropzone.dz-started .dz-message{display:none}.dropzone.dz-drag-hover{border-style:solid}.dropzone.dz-drag-hover .dz-message{opacity:0.5}.dropzone .dz-message{text-align:center;margin:2em 0}.dropzone .dz-preview{position:relative;display:inline-block;vertical-align:top;margin:16px;min-height:100px}.dropzone .dz-preview:hover{z-index:1000}.dropzone .dz-preview:hover .dz-details{opacity:1}.dropzone .dz-preview.dz-file-preview .dz-image{border-radius:20px;background:#999;background:linear-gradient(to bottom, #eee, #ddd)}.dropzone .dz-preview.dz-file-preview .dz-details{opacity:1}.dropzone .dz-preview.dz-image-preview{background:white}.dropzone .dz-preview.dz-image-preview .dz-details{-webkit-transition:opacity 0.2s linear;-moz-transition:opacity 0.2s linear;-ms-transition:opacity 0.2s linear;-o-transition:opacity 0.2s linear;transition:opacity 0.2s linear}.dropzone .dz-preview .dz-remove{font-size:14px;text-align:center;display:block;cursor:pointer;border:none}.dropzone .dz-preview .dz-remove:hover{text-decoration:underline}.dropzone .dz-preview:hover .dz-details{opacity:1}.dropzone .dz-preview .dz-details{z-index:20;position:absolute;top:0;left:0;opacity:0;font-size:13px;min-width:100%;max-width:100%;padding:2em 1em;text-align:center;color:rgba(0,0,0,0.9);line-height:150%}.dropzone .dz-preview .dz-details .dz-size{margin-bottom:1em;font-size:16px}.dropzone .dz-preview .dz-details .dz-filename{white-space:nowrap}.dropzone .dz-preview .dz-details .dz-filename:hover span{border:1px solid rgba(200,200,200,0.8);background-color:rgba(255,255,255,0.8)}.dropzone .dz-preview .dz-details .dz-filename:not(:hover){overflow:hidden;text-overflow:ellipsis}.dropzone .dz-preview .dz-details .dz-filename:not(:hover) span{border:1px solid transparent}.dropzone .dz-preview .dz-details .dz-filename span,.dropzone .dz-preview .dz-details .dz-size span{background-color:rgba(255,255,255,0.4);padding:0 0.4em;border-radius:3px}.dropzone .dz-preview:hover .dz-image img{-webkit-transform:scale(1.05, 1.05);-moz-transform:scale(1.05, 1.05);-ms-transform:scale(1.05, 1.05);-o-transform:scale(1.05, 1.05);transform:scale(1.05, 1.05);-webkit-filter:blur(8px);filter:blur(8px)}.dropzone .dz-preview .dz-image{border-radius:20px;overflow:hidden;width:120px;height:120px;position:relative;display:block;z-index:10}.dropzone .dz-preview .dz-image img{display:block}.dropzone .dz-preview.dz-success .dz-success-mark{-webkit-animation:passing-through 3s cubic-bezier(0.77, 0, 0.175, 1);-moz-animation:passing-through 3s cubic-bezier(0.77, 0, 0.175, 1);-ms-animation:passing-through 3s cubic-bezier(0.77, 0, 0.175, 1);-o-animation:passing-through 3s cubic-bezier(0.77, 0, 0.175, 1);animation:passing-through 3s cubic-bezier(0.77, 0, 0.175, 1)}.dropzone .dz-preview.dz-error .dz-error-mark{opacity:1;-webkit-animation:slide-in 3s cubic-bezier(0.77, 0, 0.175, 1);-moz-animation:slide-in 3s cubic-bezier(0.77, 0, 0.175, 1);-ms-animation:slide-in 3s cubic-bezier(0.77, 0, 0.175, 1);-o-animation:slide-in 3s cubic-bezier(0.77, 0, 0.175, 1);animation:slide-in 3s cubic-bezier(0.77, 0, 0.175, 1)}.dropzone .dz-preview .dz-success-mark,.dropzone .dz-preview .dz-error-mark{pointer-events:none;opacity:0;z-index:500;position:absolute;display:block;top:50%;left:50%;margin-left:-27px;margin-top:-27px}.dropzone .dz-preview .dz-success-mark svg,.dropzone .dz-preview .dz-error-mark svg{display:block;width:54px;height:54px}.dropzone .dz-preview.dz-processing .dz-progress{opacity:1;-webkit-transition:all 0.2s linear;-moz-transition:all 0.2s linear;-ms-transition:all 0.2s linear;-o-transition:all 0.2s linear;transition:all 0.2s linear}.dropzone .dz-preview.dz-complete .dz-progress{opacity:0;-webkit-transition:opacity 0.4s ease-in;-moz-transition:opacity 0.4s ease-in;-ms-transition:opacity 0.4s ease-in;-o-transition:opacity 0.4s ease-in;transition:opacity 0.4s ease-in}.dropzone .dz-preview:not(.dz-processing) .dz-progress{-webkit-animation:pulse 6s ease infinite;-moz-animation:pulse 6s ease infinite;-ms-animation:pulse 6s ease infinite;-o-animation:pulse 6s ease infinite;animation:pulse 6s ease infinite}.dropzone .dz-preview .dz-progress{opacity:1;z-index:1000;pointer-events:none;position:absolute;height:16px;left:50%;top:50%;margin-top:-8px;width:80px;margin-left:-40px;background:rgba(255,255,255,0.9);-webkit-transform:scale(1);border-radius:8px;overflow:hidden}.dropzone .dz-preview .dz-progress .dz-upload{background:#333;background:linear-gradient(to bottom, #666, #444);position:absolute;top:0;left:0;bottom:0;width:0;-webkit-transition:width 300ms ease-in-out;-moz-transition:width 300ms ease-in-out;-ms-transition:width 300ms ease-in-out;-o-transition:width 300ms ease-in-out;transition:width 300ms ease-in-out}.dropzone .dz-preview.dz-error .dz-error-message{display:block}.dropzone .dz-preview.dz-error:hover .dz-error-message{opacity:1;pointer-events:auto}.dropzone .dz-preview .dz-error-message{pointer-events:none;z-index:1000;position:absolute;display:block;display:none;opacity:0;-webkit-transition:opacity 0.3s ease;-moz-transition:opacity 0.3s ease;-ms-transition:opacity 0.3s ease;-o-transition:opacity 0.3s ease;transition:opacity 0.3s ease;border-radius:8px;font-size:13px;top:130px;left:-10px;width:140px;background:#be2626;background:linear-gradient(to bottom, #be2626, #a92222);padding:0.5em 1.2em;color:white}.dropzone .dz-preview .dz-error-message:after{content:'';position:absolute;top:-6px;left:64px;width:0;height:0;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #be2626}
diff --git a/vendor/enyo/dropzone/dist/min/dropzone.min.js b/vendor/enyo/dropzone/dist/min/dropzone.min.js
new file mode 100644
index 0000000000000000000000000000000000000000..2cf568ea9395825ea1bb185b7d5bb28d897ca656
--- /dev/null
+++ b/vendor/enyo/dropzone/dist/min/dropzone.min.js
@@ -0,0 +1,2 @@
+(function(){var a,b,c,d,e,f,g,h,i,j=[].slice,k=function(a,b){function c(){this.constructor=a}for(var d in b)l.call(b,d)&&(a[d]=b[d]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a},l={}.hasOwnProperty;h=function(){},b=function(){function a(){}return a.prototype.addEventListener=a.prototype.on,a.prototype.on=function(a,b){return this._callbacks=this._callbacks||{},this._callbacks[a]||(this._callbacks[a]=[]),this._callbacks[a].push(b),this},a.prototype.emit=function(){var a,b,c,d,e,f;if(d=arguments[0],a=2<=arguments.length?j.call(arguments,1):[],this._callbacks=this._callbacks||{},c=this._callbacks[d])for(e=0,f=c.length;e<f;e++)b=c[e],b.apply(this,a);return this},a.prototype.removeListener=a.prototype.off,a.prototype.removeAllListeners=a.prototype.off,a.prototype.removeEventListener=a.prototype.off,a.prototype.off=function(a,b){var c,d,e,f,g;if(!this._callbacks||0===arguments.length)return this._callbacks={},this;if(d=this._callbacks[a],!d)return this;if(1===arguments.length)return delete this._callbacks[a],this;for(e=f=0,g=d.length;f<g;e=++f)if(c=d[e],c===b){d.splice(e,1);break}return this},a}(),a=function(a){function d(a,b){var c,f,g;if(this.element=a,this.version=d.version,this.defaultOptions.previewTemplate=this.defaultOptions.previewTemplate.replace(/\n*/g,""),this.clickableElements=[],this.listeners=[],this.files=[],"string"==typeof this.element&&(this.element=document.querySelector(this.element)),!this.element||null==this.element.nodeType)throw new Error("Invalid dropzone element.");if(this.element.dropzone)throw new Error("Dropzone already attached.");if(d.instances.push(this),this.element.dropzone=this,c=null!=(g=d.optionsForElement(this.element))?g:{},this.options=e({},this.defaultOptions,c,null!=b?b:{}),this.options.forceFallback||!d.isBrowserSupported())return this.options.fallback.call(this);if(null==this.options.url&&(this.options.url=this.element.getAttribute("action")),!this.options.url)throw new Error("No URL provided.");if(this.options.acceptedFiles&&this.options.acceptedMimeTypes)throw new Error("You can't provide both 'acceptedFiles' and 'acceptedMimeTypes'. 'acceptedMimeTypes' is deprecated.");this.options.acceptedMimeTypes&&(this.options.acceptedFiles=this.options.acceptedMimeTypes,delete this.options.acceptedMimeTypes),null!=this.options.renameFilename&&(this.options.renameFile=function(a){return function(b){return a.options.renameFilename.call(a,b.name,b)}}(this)),this.options.method=this.options.method.toUpperCase(),(f=this.getExistingFallback())&&f.parentNode&&f.parentNode.removeChild(f),this.options.previewsContainer!==!1&&(this.options.previewsContainer?this.previewsContainer=d.getElement(this.options.previewsContainer,"previewsContainer"):this.previewsContainer=this.element),this.options.clickable&&(this.options.clickable===!0?this.clickableElements=[this.element]:this.clickableElements=d.getElements(this.options.clickable,"clickable")),this.init()}var e,f;return k(d,a),d.prototype.Emitter=b,d.prototype.events=["drop","dragstart","dragend","dragenter","dragover","dragleave","addedfile","addedfiles","removedfile","thumbnail","error","errormultiple","processing","processingmultiple","uploadprogress","totaluploadprogress","sending","sendingmultiple","success","successmultiple","canceled","canceledmultiple","complete","completemultiple","reset","maxfilesexceeded","maxfilesreached","queuecomplete"],d.prototype.defaultOptions={url:null,method:"post",withCredentials:!1,timeout:3e4,parallelUploads:2,uploadMultiple:!1,maxFilesize:256,paramName:"file",createImageThumbnails:!0,maxThumbnailFilesize:10,thumbnailWidth:120,thumbnailHeight:120,thumbnailMethod:"crop",resizeWidth:null,resizeHeight:null,resizeMimeType:null,resizeQuality:.8,resizeMethod:"contain",filesizeBase:1e3,maxFiles:null,params:{},headers:null,clickable:!0,ignoreHiddenFiles:!0,acceptedFiles:null,acceptedMimeTypes:null,autoProcessQueue:!0,autoQueue:!0,addRemoveLinks:!1,previewsContainer:null,hiddenInputContainer:"body",capture:null,renameFilename:null,renameFile:null,forceFallback:!1,dictDefaultMessage:"Drop files here to upload",dictFallbackMessage:"Your browser does not support drag'n'drop file uploads.",dictFallbackText:"Please use the fallback form below to upload your files like in the olden days.",dictFileTooBig:"File is too big ({{filesize}}MiB). Max filesize: {{maxFilesize}}MiB.",dictInvalidFileType:"You can't upload files of this type.",dictResponseError:"Server responded with {{statusCode}} code.",dictCancelUpload:"Cancel upload",dictCancelUploadConfirmation:"Are you sure you want to cancel this upload?",dictRemoveFile:"Remove file",dictRemoveFileConfirmation:null,dictMaxFilesExceeded:"You can not upload any more files.",dictFileSizeUnits:{tb:"TB",gb:"GB",mb:"MB",kb:"KB",b:"b"},init:function(){return h},accept:function(a,b){return b()},fallback:function(){var a,b,c,e,f,g;for(this.element.className=this.element.className+" dz-browser-not-supported",f=this.element.getElementsByTagName("div"),b=0,c=f.length;b<c;b++)a=f[b],/(^| )dz-message($| )/.test(a.className)&&(e=a,a.className="dz-message");return e||(e=d.createElement('<div class="dz-message"><span></span></div>'),this.element.appendChild(e)),g=e.getElementsByTagName("span")[0],g&&(null!=g.textContent?g.textContent=this.options.dictFallbackMessage:null!=g.innerText&&(g.innerText=this.options.dictFallbackMessage)),this.element.appendChild(this.getFallbackForm())},resize:function(a,b,c,d){var e,f,g;if(e={srcX:0,srcY:0,srcWidth:a.width,srcHeight:a.height},f=a.width/a.height,null==b&&null==c?(b=e.srcWidth,c=e.srcHeight):null==b?b=c*f:null==c&&(c=b/f),b=Math.min(b,e.srcWidth),c=Math.min(c,e.srcHeight),g=b/c,e.srcWidth>b||e.srcHeight>c)if("crop"===d)f>g?(e.srcHeight=a.height,e.srcWidth=e.srcHeight*g):(e.srcWidth=a.width,e.srcHeight=e.srcWidth/g);else{if("contain"!==d)throw new Error("Unknown resizeMethod '"+d+"'");f>g?c=b/f:b=c*f}return e.srcX=(a.width-e.srcWidth)/2,e.srcY=(a.height-e.srcHeight)/2,e.trgWidth=b,e.trgHeight=c,e},transformFile:function(a,b){return(this.options.resizeWidth||this.options.resizeHeight)&&a.type.match(/image.*/)?this.resizeImage(a,this.options.resizeWidth,this.options.resizeHeight,this.options.resizeMethod,b):b(a)},previewTemplate:'<div class="dz-preview dz-file-preview">\n  <div class="dz-image"><img data-dz-thumbnail /></div>\n  <div class="dz-details">\n    <div class="dz-size"><span data-dz-size></span></div>\n    <div class="dz-filename"><span data-dz-name></span></div>\n  </div>\n  <div class="dz-progress"><span class="dz-upload" data-dz-uploadprogress></span></div>\n  <div class="dz-error-message"><span data-dz-errormessage></span></div>\n  <div class="dz-success-mark">\n    <svg width="54px" height="54px" viewBox="0 0 54 54" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sketch="http://www.bohemiancoding.com/sketch/ns">\n      <title>Check</title>\n      <defs></defs>\n      <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" sketch:type="MSPage">\n        <path d="M23.5,31.8431458 L17.5852419,25.9283877 C16.0248253,24.3679711 13.4910294,24.366835 11.9289322,25.9289322 C10.3700136,27.4878508 10.3665912,30.0234455 11.9283877,31.5852419 L20.4147581,40.0716123 C20.5133999,40.1702541 20.6159315,40.2626649 20.7218615,40.3488435 C22.2835669,41.8725651 24.794234,41.8626202 26.3461564,40.3106978 L43.3106978,23.3461564 C44.8771021,21.7797521 44.8758057,19.2483887 43.3137085,17.6862915 C41.7547899,16.1273729 39.2176035,16.1255422 37.6538436,17.6893022 L23.5,31.8431458 Z M27,53 C41.3594035,53 53,41.3594035 53,27 C53,12.6405965 41.3594035,1 27,1 C12.6405965,1 1,12.6405965 1,27 C1,41.3594035 12.6405965,53 27,53 Z" id="Oval-2" stroke-opacity="0.198794158" stroke="#747474" fill-opacity="0.816519475" fill="#FFFFFF" sketch:type="MSShapeGroup"></path>\n      </g>\n    </svg>\n  </div>\n  <div class="dz-error-mark">\n    <svg width="54px" height="54px" viewBox="0 0 54 54" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sketch="http://www.bohemiancoding.com/sketch/ns">\n      <title>Error</title>\n      <defs></defs>\n      <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" sketch:type="MSPage">\n        <g id="Check-+-Oval-2" sketch:type="MSLayerGroup" stroke="#747474" stroke-opacity="0.198794158" fill="#FFFFFF" fill-opacity="0.816519475">\n          <path d="M32.6568542,29 L38.3106978,23.3461564 C39.8771021,21.7797521 39.8758057,19.2483887 38.3137085,17.6862915 C36.7547899,16.1273729 34.2176035,16.1255422 32.6538436,17.6893022 L27,23.3431458 L21.3461564,17.6893022 C19.7823965,16.1255422 17.2452101,16.1273729 15.6862915,17.6862915 C14.1241943,19.2483887 14.1228979,21.7797521 15.6893022,23.3461564 L21.3431458,29 L15.6893022,34.6538436 C14.1228979,36.2202479 14.1241943,38.7516113 15.6862915,40.3137085 C17.2452101,41.8726271 19.7823965,41.8744578 21.3461564,40.3106978 L27,34.6568542 L32.6538436,40.3106978 C34.2176035,41.8744578 36.7547899,41.8726271 38.3137085,40.3137085 C39.8758057,38.7516113 39.8771021,36.2202479 38.3106978,34.6538436 L32.6568542,29 Z M27,53 C41.3594035,53 53,41.3594035 53,27 C53,12.6405965 41.3594035,1 27,1 C12.6405965,1 1,12.6405965 1,27 C1,41.3594035 12.6405965,53 27,53 Z" id="Oval-2" sketch:type="MSShapeGroup"></path>\n        </g>\n      </g>\n    </svg>\n  </div>\n</div>',drop:function(a){return this.element.classList.remove("dz-drag-hover")},dragstart:h,dragend:function(a){return this.element.classList.remove("dz-drag-hover")},dragenter:function(a){return this.element.classList.add("dz-drag-hover")},dragover:function(a){return this.element.classList.add("dz-drag-hover")},dragleave:function(a){return this.element.classList.remove("dz-drag-hover")},paste:h,reset:function(){return this.element.classList.remove("dz-started")},addedfile:function(a){var b,c,e,f,g,h,i,j,k,l,m,n,o;if(this.element===this.previewsContainer&&this.element.classList.add("dz-started"),this.previewsContainer){for(a.previewElement=d.createElement(this.options.previewTemplate.trim()),a.previewTemplate=a.previewElement,this.previewsContainer.appendChild(a.previewElement),j=a.previewElement.querySelectorAll("[data-dz-name]"),b=0,f=j.length;b<f;b++)i=j[b],i.textContent=a.name;for(k=a.previewElement.querySelectorAll("[data-dz-size]"),c=0,g=k.length;c<g;c++)i=k[c],i.innerHTML=this.filesize(a.size);for(this.options.addRemoveLinks&&(a._removeLink=d.createElement('<a class="dz-remove" href="javascript:undefined;" data-dz-remove>'+this.options.dictRemoveFile+"</a>"),a.previewElement.appendChild(a._removeLink)),m=function(b){return function(c){return c.preventDefault(),c.stopPropagation(),a.status===d.UPLOADING?d.confirm(b.options.dictCancelUploadConfirmation,function(){return b.removeFile(a)}):b.options.dictRemoveFileConfirmation?d.confirm(b.options.dictRemoveFileConfirmation,function(){return b.removeFile(a)}):b.removeFile(a)}}(this),l=a.previewElement.querySelectorAll("[data-dz-remove]"),o=[],e=0,h=l.length;e<h;e++)n=l[e],o.push(n.addEventListener("click",m));return o}},removedfile:function(a){var b;return a.previewElement&&null!=(b=a.previewElement)&&b.parentNode.removeChild(a.previewElement),this._updateMaxFilesReachedClass()},thumbnail:function(a,b){var c,d,e,f;if(a.previewElement){for(a.previewElement.classList.remove("dz-file-preview"),e=a.previewElement.querySelectorAll("[data-dz-thumbnail]"),c=0,d=e.length;c<d;c++)f=e[c],f.alt=a.name,f.src=b;return setTimeout(function(b){return function(){return a.previewElement.classList.add("dz-image-preview")}}(this),1)}},error:function(a,b){var c,d,e,f,g;if(a.previewElement){for(a.previewElement.classList.add("dz-error"),"String"!=typeof b&&b.error&&(b=b.error),f=a.previewElement.querySelectorAll("[data-dz-errormessage]"),g=[],c=0,d=f.length;c<d;c++)e=f[c],g.push(e.textContent=b);return g}},errormultiple:h,processing:function(a){if(a.previewElement&&(a.previewElement.classList.add("dz-processing"),a._removeLink))return a._removeLink.textContent=this.options.dictCancelUpload},processingmultiple:h,uploadprogress:function(a,b,c){var d,e,f,g,h;if(a.previewElement){for(g=a.previewElement.querySelectorAll("[data-dz-uploadprogress]"),h=[],d=0,e=g.length;d<e;d++)f=g[d],"PROGRESS"===f.nodeName?h.push(f.value=b):h.push(f.style.width=b+"%");return h}},totaluploadprogress:h,sending:h,sendingmultiple:h,success:function(a){if(a.previewElement)return a.previewElement.classList.add("dz-success")},successmultiple:h,canceled:function(a){return this.emit("error",a,"Upload canceled.")},canceledmultiple:h,complete:function(a){if(a._removeLink&&(a._removeLink.textContent=this.options.dictRemoveFile),a.previewElement)return a.previewElement.classList.add("dz-complete")},completemultiple:h,maxfilesexceeded:h,maxfilesreached:h,queuecomplete:h,addedfiles:h},e=function(){var a,b,c,d,e,f,g;for(f=arguments[0],e=2<=arguments.length?j.call(arguments,1):[],a=0,c=e.length;a<c;a++){d=e[a];for(b in d)g=d[b],f[b]=g}return f},d.prototype.getAcceptedFiles=function(){var a,b,c,d,e;for(d=this.files,e=[],b=0,c=d.length;b<c;b++)a=d[b],a.accepted&&e.push(a);return e},d.prototype.getRejectedFiles=function(){var a,b,c,d,e;for(d=this.files,e=[],b=0,c=d.length;b<c;b++)a=d[b],a.accepted||e.push(a);return e},d.prototype.getFilesWithStatus=function(a){var b,c,d,e,f;for(e=this.files,f=[],c=0,d=e.length;c<d;c++)b=e[c],b.status===a&&f.push(b);return f},d.prototype.getQueuedFiles=function(){return this.getFilesWithStatus(d.QUEUED)},d.prototype.getUploadingFiles=function(){return this.getFilesWithStatus(d.UPLOADING)},d.prototype.getAddedFiles=function(){return this.getFilesWithStatus(d.ADDED)},d.prototype.getActiveFiles=function(){var a,b,c,e,f;for(e=this.files,f=[],b=0,c=e.length;b<c;b++)a=e[b],a.status!==d.UPLOADING&&a.status!==d.QUEUED||f.push(a);return f},d.prototype.init=function(){var a,b,c,e,f,g,h;for("form"===this.element.tagName&&this.element.setAttribute("enctype","multipart/form-data"),this.element.classList.contains("dropzone")&&!this.element.querySelector(".dz-message")&&this.element.appendChild(d.createElement('<div class="dz-default dz-message"><span>'+this.options.dictDefaultMessage+"</span></div>")),this.clickableElements.length&&(h=function(a){return function(){return a.hiddenFileInput&&a.hiddenFileInput.parentNode.removeChild(a.hiddenFileInput),a.hiddenFileInput=document.createElement("input"),a.hiddenFileInput.setAttribute("type","file"),(null==a.options.maxFiles||a.options.maxFiles>1)&&a.hiddenFileInput.setAttribute("multiple","multiple"),a.hiddenFileInput.className="dz-hidden-input",null!=a.options.acceptedFiles&&a.hiddenFileInput.setAttribute("accept",a.options.acceptedFiles),null!=a.options.capture&&a.hiddenFileInput.setAttribute("capture",a.options.capture),a.hiddenFileInput.style.visibility="hidden",a.hiddenFileInput.style.position="absolute",a.hiddenFileInput.style.top="0",a.hiddenFileInput.style.left="0",a.hiddenFileInput.style.height="0",a.hiddenFileInput.style.width="0",document.querySelector(a.options.hiddenInputContainer).appendChild(a.hiddenFileInput),a.hiddenFileInput.addEventListener("change",function(){var b,c,d,e;if(c=a.hiddenFileInput.files,c.length)for(d=0,e=c.length;d<e;d++)b=c[d],a.addFile(b);return a.emit("addedfiles",c),h()})}}(this))(),this.URL=null!=(f=window.URL)?f:window.webkitURL,g=this.events,b=0,c=g.length;b<c;b++)a=g[b],this.on(a,this.options[a]);return this.on("uploadprogress",function(a){return function(){return a.updateTotalUploadProgress()}}(this)),this.on("removedfile",function(a){return function(){return a.updateTotalUploadProgress()}}(this)),this.on("canceled",function(a){return function(b){return a.emit("complete",b)}}(this)),this.on("complete",function(a){return function(b){if(0===a.getAddedFiles().length&&0===a.getUploadingFiles().length&&0===a.getQueuedFiles().length)return setTimeout(function(){return a.emit("queuecomplete")},0)}}(this)),e=function(a){return a.stopPropagation(),a.preventDefault?a.preventDefault():a.returnValue=!1},this.listeners=[{element:this.element,events:{dragstart:function(a){return function(b){return a.emit("dragstart",b)}}(this),dragenter:function(a){return function(b){return e(b),a.emit("dragenter",b)}}(this),dragover:function(a){return function(b){var c;try{c=b.dataTransfer.effectAllowed}catch(a){}return b.dataTransfer.dropEffect="move"===c||"linkMove"===c?"move":"copy",e(b),a.emit("dragover",b)}}(this),dragleave:function(a){return function(b){return a.emit("dragleave",b)}}(this),drop:function(a){return function(b){return e(b),a.drop(b)}}(this),dragend:function(a){return function(b){return a.emit("dragend",b)}}(this)}}],this.clickableElements.forEach(function(a){return function(b){return a.listeners.push({element:b,events:{click:function(c){return(b!==a.element||c.target===a.element||d.elementInside(c.target,a.element.querySelector(".dz-message")))&&a.hiddenFileInput.click(),!0}}})}}(this)),this.enable(),this.options.init.call(this)},d.prototype.destroy=function(){var a;return this.disable(),this.removeAllFiles(!0),(null!=(a=this.hiddenFileInput)?a.parentNode:void 0)&&(this.hiddenFileInput.parentNode.removeChild(this.hiddenFileInput),this.hiddenFileInput=null),delete this.element.dropzone,d.instances.splice(d.instances.indexOf(this),1)},d.prototype.updateTotalUploadProgress=function(){var a,b,c,d,e,f,g,h;if(g=0,f=0,a=this.getActiveFiles(),a.length){for(e=this.getActiveFiles(),c=0,d=e.length;c<d;c++)b=e[c],g+=b.upload.bytesSent,f+=b.upload.total;h=100*g/f}else h=100;return this.emit("totaluploadprogress",h,f,g)},d.prototype._getParamName=function(a){return"function"==typeof this.options.paramName?this.options.paramName(a):""+this.options.paramName+(this.options.uploadMultiple?"["+a+"]":"")},d.prototype._renameFile=function(a){return"function"!=typeof this.options.renameFile?a.name:this.options.renameFile(a)},d.prototype.getFallbackForm=function(){var a,b,c,e;return(a=this.getExistingFallback())?a:(c='<div class="dz-fallback">',this.options.dictFallbackText&&(c+="<p>"+this.options.dictFallbackText+"</p>"),c+='<input type="file" name="'+this._getParamName(0)+'" '+(this.options.uploadMultiple?'multiple="multiple"':void 0)+' /><input type="submit" value="Upload!"></div>',b=d.createElement(c),"FORM"!==this.element.tagName?(e=d.createElement('<form action="'+this.options.url+'" enctype="multipart/form-data" method="'+this.options.method+'"></form>'),e.appendChild(b)):(this.element.setAttribute("enctype","multipart/form-data"),this.element.setAttribute("method",this.options.method)),null!=e?e:b)},d.prototype.getExistingFallback=function(){var a,b,c,d,e,f;for(b=function(a){var b,c,d;for(c=0,d=a.length;c<d;c++)if(b=a[c],/(^| )fallback($| )/.test(b.className))return b},e=["div","form"],c=0,d=e.length;c<d;c++)if(f=e[c],a=b(this.element.getElementsByTagName(f)))return a},d.prototype.setupEventListeners=function(){var a,b,c,d,e,f,g;for(f=this.listeners,g=[],c=0,d=f.length;c<d;c++)a=f[c],g.push(function(){var c,d;c=a.events,d=[];for(b in c)e=c[b],d.push(a.element.addEventListener(b,e,!1));return d}());return g},d.prototype.removeEventListeners=function(){var a,b,c,d,e,f,g;for(f=this.listeners,g=[],c=0,d=f.length;c<d;c++)a=f[c],g.push(function(){var c,d;c=a.events,d=[];for(b in c)e=c[b],d.push(a.element.removeEventListener(b,e,!1));return d}());return g},d.prototype.disable=function(){var a,b,c,d,e;for(this.clickableElements.forEach(function(a){return a.classList.remove("dz-clickable")}),this.removeEventListeners(),d=this.files,e=[],b=0,c=d.length;b<c;b++)a=d[b],e.push(this.cancelUpload(a));return e},d.prototype.enable=function(){return this.clickableElements.forEach(function(a){return a.classList.add("dz-clickable")}),this.setupEventListeners()},d.prototype.filesize=function(a){var b,c,d,e,f,g,h,i;if(f=0,g="b",a>0){for(i=["tb","gb","mb","kb","b"],c=d=0,e=i.length;d<e;c=++d)if(h=i[c],b=Math.pow(this.options.filesizeBase,4-c)/10,a>=b){f=a/Math.pow(this.options.filesizeBase,4-c),g=h;break}f=Math.round(10*f)/10}return"<strong>"+f+"</strong> "+this.options.dictFileSizeUnits[g]},d.prototype._updateMaxFilesReachedClass=function(){return null!=this.options.maxFiles&&this.getAcceptedFiles().length>=this.options.maxFiles?(this.getAcceptedFiles().length===this.options.maxFiles&&this.emit("maxfilesreached",this.files),this.element.classList.add("dz-max-files-reached")):this.element.classList.remove("dz-max-files-reached")},d.prototype.drop=function(a){var b,c;a.dataTransfer&&(this.emit("drop",a),b=a.dataTransfer.files,this.emit("addedfiles",b),b.length&&(c=a.dataTransfer.items,c&&c.length&&null!=c[0].webkitGetAsEntry?this._addFilesFromItems(c):this.handleFiles(b)))},d.prototype.paste=function(a){var b,c;if(null!=(null!=a&&null!=(c=a.clipboardData)?c.items:void 0))return this.emit("paste",a),b=a.clipboardData.items,b.length?this._addFilesFromItems(b):void 0},d.prototype.handleFiles=function(a){var b,c,d,e;for(e=[],c=0,d=a.length;c<d;c++)b=a[c],e.push(this.addFile(b));return e},d.prototype._addFilesFromItems=function(a){var b,c,d,e,f;for(f=[],d=0,e=a.length;d<e;d++)c=a[d],null!=c.webkitGetAsEntry&&(b=c.webkitGetAsEntry())?b.isFile?f.push(this.addFile(c.getAsFile())):b.isDirectory?f.push(this._addFilesFromDirectory(b,b.name)):f.push(void 0):null!=c.getAsFile&&(null==c.kind||"file"===c.kind)?f.push(this.addFile(c.getAsFile())):f.push(void 0);return f},d.prototype._addFilesFromDirectory=function(a,b){var c,d,e;return c=a.createReader(),d=function(a){return"undefined"!=typeof console&&null!==console&&"function"==typeof console.log?console.log(a):void 0},(e=function(a){return function(){return c.readEntries(function(c){var d,f,g;if(c.length>0){for(f=0,g=c.length;f<g;f++)d=c[f],d.isFile?d.file(function(c){if(!a.options.ignoreHiddenFiles||"."!==c.name.substring(0,1))return c.fullPath=b+"/"+c.name,a.addFile(c)}):d.isDirectory&&a._addFilesFromDirectory(d,b+"/"+d.name);e()}return null},d)}}(this))()},d.prototype.accept=function(a,b){return a.size>1024*this.options.maxFilesize*1024?b(this.options.dictFileTooBig.replace("{{filesize}}",Math.round(a.size/1024/10.24)/100).replace("{{maxFilesize}}",this.options.maxFilesize)):d.isValidFile(a,this.options.acceptedFiles)?null!=this.options.maxFiles&&this.getAcceptedFiles().length>=this.options.maxFiles?(b(this.options.dictMaxFilesExceeded.replace("{{maxFiles}}",this.options.maxFiles)),this.emit("maxfilesexceeded",a)):this.options.accept.call(this,a,b):b(this.options.dictInvalidFileType)},d.prototype.addFile=function(a){return a.upload={progress:0,total:a.size,bytesSent:0,filename:this._renameFile(a)},this.files.push(a),a.status=d.ADDED,this.emit("addedfile",a),this._enqueueThumbnail(a),this.accept(a,function(b){return function(c){return c?(a.accepted=!1,b._errorProcessing([a],c)):(a.accepted=!0,b.options.autoQueue&&b.enqueueFile(a)),b._updateMaxFilesReachedClass()}}(this))},d.prototype.enqueueFiles=function(a){var b,c,d;for(c=0,d=a.length;c<d;c++)b=a[c],this.enqueueFile(b);return null},d.prototype.enqueueFile=function(a){if(a.status!==d.ADDED||a.accepted!==!0)throw new Error("This file can't be queued because it has already been processed or was rejected.");if(a.status=d.QUEUED,this.options.autoProcessQueue)return setTimeout(function(a){return function(){return a.processQueue()}}(this),0)},d.prototype._thumbnailQueue=[],d.prototype._processingThumbnail=!1,d.prototype._enqueueThumbnail=function(a){if(this.options.createImageThumbnails&&a.type.match(/image.*/)&&a.size<=1024*this.options.maxThumbnailFilesize*1024)return this._thumbnailQueue.push(a),setTimeout(function(a){return function(){return a._processThumbnailQueue()}}(this),0)},d.prototype._processThumbnailQueue=function(){var a;if(!this._processingThumbnail&&0!==this._thumbnailQueue.length)return this._processingThumbnail=!0,a=this._thumbnailQueue.shift(),this.createThumbnail(a,this.options.thumbnailWidth,this.options.thumbnailHeight,this.options.thumbnailMethod,!0,function(b){return function(c){return b.emit("thumbnail",a,c),b._processingThumbnail=!1,b._processThumbnailQueue()}}(this))},d.prototype.removeFile=function(a){if(a.status===d.UPLOADING&&this.cancelUpload(a),this.files=i(this.files,a),this.emit("removedfile",a),0===this.files.length)return this.emit("reset")},d.prototype.removeAllFiles=function(a){var b,c,e,f;for(null==a&&(a=!1),f=this.files.slice(),c=0,e=f.length;c<e;c++)b=f[c],(b.status!==d.UPLOADING||a)&&this.removeFile(b);return null},d.prototype.resizeImage=function(a,b,e,f,g){return this.createThumbnail(a,b,e,f,!1,function(b){return function(e,f){var h,i;return null===f?g(a):(h=b.options.resizeMimeType,null==h&&(h=a.type),i=f.toDataURL(h,b.options.resizeQuality),"image/jpeg"!==h&&"image/jpg"!==h||(i=c.restore(a.dataURL,i)),g(d.dataURItoBlob(i)))}}(this))},d.prototype.createThumbnail=function(a,b,c,d,e,f){var g;return g=new FileReader,g.onload=function(h){return function(){return a.dataURL=g.result,"image/svg+xml"===a.type?void(null!=f&&f(g.result)):h.createThumbnailFromUrl(a,b,c,d,e,f)}}(this),g.readAsDataURL(a)},d.prototype.createThumbnailFromUrl=function(a,b,c,d,e,f,h){var i;return i=document.createElement("img"),h&&(i.crossOrigin=h),i.onload=function(h){return function(){var j;return j=function(a){return a(1)},"undefined"!=typeof EXIF&&null!==EXIF&&e&&(j=function(a){return EXIF.getData(i,function(){return a(EXIF.getTag(this,"Orientation"))})}),j(function(e){var j,k,l,m,n,o,p,q;switch(a.width=i.width,a.height=i.height,p=h.options.resize.call(h,a,b,c,d),j=document.createElement("canvas"),k=j.getContext("2d"),j.width=p.trgWidth,j.height=p.trgHeight,e>4&&(j.width=p.trgHeight,j.height=p.trgWidth),e){case 2:k.translate(j.width,0),k.scale(-1,1);break;case 3:k.translate(j.width,j.height),k.rotate(Math.PI);break;case 4:k.translate(0,j.height),k.scale(1,-1);break;case 5:k.rotate(.5*Math.PI),k.scale(1,-1);break;case 6:k.rotate(.5*Math.PI),k.translate(0,-j.height);break;case 7:k.rotate(.5*Math.PI),k.translate(j.width,-j.height),k.scale(-1,1);break;case 8:k.rotate(-.5*Math.PI),k.translate(-j.width,0)}if(g(k,i,null!=(l=p.srcX)?l:0,null!=(m=p.srcY)?m:0,p.srcWidth,p.srcHeight,null!=(n=p.trgX)?n:0,null!=(o=p.trgY)?o:0,p.trgWidth,p.trgHeight),q=j.toDataURL("image/png"),null!=f)return f(q,j)})}}(this),null!=f&&(i.onerror=f),i.src=a.dataURL},d.prototype.processQueue=function(){var a,b,c,d;if(b=this.options.parallelUploads,c=this.getUploadingFiles().length,a=c,!(c>=b)&&(d=this.getQueuedFiles(),d.length>0)){if(this.options.uploadMultiple)return this.processFiles(d.slice(0,b-c));for(;a<b;){if(!d.length)return;this.processFile(d.shift()),a++}}},d.prototype.processFile=function(a){return this.processFiles([a])},d.prototype.processFiles=function(a){var b,c,e;for(c=0,e=a.length;c<e;c++)b=a[c],b.processing=!0,b.status=d.UPLOADING,this.emit("processing",b);return this.options.uploadMultiple&&this.emit("processingmultiple",a),this.uploadFiles(a)},d.prototype._getFilesWithXhr=function(a){var b,c;return c=function(){var c,d,e,f;for(e=this.files,f=[],c=0,d=e.length;c<d;c++)b=e[c],b.xhr===a&&f.push(b);return f}.call(this)},d.prototype.cancelUpload=function(a){var b,c,e,f,g,h,i;if(a.status===d.UPLOADING){for(c=this._getFilesWithXhr(a.xhr),e=0,g=c.length;e<g;e++)b=c[e],b.status=d.CANCELED;for(a.xhr.abort(),f=0,h=c.length;f<h;f++)b=c[f],this.emit("canceled",b);this.options.uploadMultiple&&this.emit("canceledmultiple",c)}else(i=a.status)!==d.ADDED&&i!==d.QUEUED||(a.status=d.CANCELED,this.emit("canceled",a),this.options.uploadMultiple&&this.emit("canceledmultiple",[a]));if(this.options.autoProcessQueue)return this.processQueue()},f=function(){var a,b;return b=arguments[0],a=2<=arguments.length?j.call(arguments,1):[],"function"==typeof b?b.apply(this,a):b},d.prototype.uploadFile=function(a){return this.uploadFiles([a])},d.prototype.uploadFiles=function(a){var b,c,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O;for(O=new XMLHttpRequest,q=0,u=a.length;q<u;q++)g=a[q],g.xhr=O;z=f(this.options.method,a),M=f(this.options.url,a),O.open(z,M,!0),O.timeout=f(this.options.timeout,a),O.withCredentials=!!this.options.withCredentials,J=null,i=function(b){return function(){var c,d,e;for(e=[],c=0,d=a.length;c<d;c++)g=a[c],e.push(b._errorProcessing(a,J||b.options.dictResponseError.replace("{{statusCode}}",O.status),O));return e}}(this),L=function(b){return function(c){var d,e,f,h,i,j,k,l,m;if(null!=c)for(l=100*c.loaded/c.total,e=0,h=a.length;e<h;e++)g=a[e],g.upload.progress=l,g.upload.total=c.total,g.upload.bytesSent=c.loaded;else{for(d=!0,l=100,f=0,i=a.length;f<i;f++)g=a[f],100===g.upload.progress&&g.upload.bytesSent===g.upload.total||(d=!1),g.upload.progress=l,g.upload.bytesSent=g.upload.total;if(d)return}for(m=[],k=0,j=a.length;k<j;k++)g=a[k],m.push(b.emit("uploadprogress",g,l,g.upload.bytesSent));return m}}(this),O.onload=function(b){return function(c){var e;if(a[0].status!==d.CANCELED&&4===O.readyState){if("arraybuffer"!==O.responseType&&"blob"!==O.responseType&&(J=O.responseText,O.getResponseHeader("content-type")&&~O.getResponseHeader("content-type").indexOf("application/json")))try{J=JSON.parse(J)}catch(a){c=a,J="Invalid JSON response from server."}return L(),200<=(e=O.status)&&e<300?b._finished(a,J,c):i()}}}(this),O.onerror=function(b){return function(){if(a[0].status!==d.CANCELED)return i()}}(this),C=null!=(D=O.upload)?D:O,C.onprogress=L,l={Accept:"application/json","Cache-Control":"no-cache","X-Requested-With":"XMLHttpRequest"},this.options.headers&&e(l,this.options.headers);for(j in l)k=l[j],k&&O.setRequestHeader(j,k);if(h=new FormData,this.options.params){E=this.options.params;for(s in E)N=E[s],h.append(s,N)}for(r=0,v=a.length;r<v;r++)g=a[r],this.emit("sending",g,O,h);if(this.options.uploadMultiple&&this.emit("sendingmultiple",a,O,h),"FORM"===this.element.tagName)for(F=this.element.querySelectorAll("input, textarea, select, button"),t=0,w=F.length;t<w;t++)if(n=F[t],o=n.getAttribute("name"),p=n.getAttribute("type"),"SELECT"===n.tagName&&n.hasAttribute("multiple"))for(G=n.options,y=0,x=G.length;y<x;y++)B=G[y],B.selected&&h.append(o,B.value);else(!p||"checkbox"!==(H=p.toLowerCase())&&"radio"!==H||n.checked)&&h.append(o,n.value);for(b=0,K=[],m=A=0,I=a.length-1;0<=I?A<=I:A>=I;m=0<=I?++A:--A)c=function(c){return function(d,e,f){return function(d){if(h.append(e,d,f),++b===a.length)return c.submitRequest(O,h,a)}}}(this),K.push(this.options.transformFile.call(this,a[m],c(a[m],this._getParamName(m),a[m].upload.filename)));return K},d.prototype.submitRequest=function(a,b,c){return a.send(b)},d.prototype._finished=function(a,b,c){var e,f,g;for(f=0,g=a.length;f<g;f++)e=a[f],e.status=d.SUCCESS,this.emit("success",e,b,c),this.emit("complete",e);if(this.options.uploadMultiple&&(this.emit("successmultiple",a,b,c),this.emit("completemultiple",a)),this.options.autoProcessQueue)return this.processQueue()},d.prototype._errorProcessing=function(a,b,c){var e,f,g;for(f=0,g=a.length;f<g;f++)e=a[f],e.status=d.ERROR,this.emit("error",e,b,c),this.emit("complete",e);if(this.options.uploadMultiple&&(this.emit("errormultiple",a,b,c),this.emit("completemultiple",a)),this.options.autoProcessQueue)return this.processQueue()},d}(b),a.version="5.1.1",a.options={},a.optionsForElement=function(b){return b.getAttribute("id")?a.options[d(b.getAttribute("id"))]:void 0},a.instances=[],a.forElement=function(a){if("string"==typeof a&&(a=document.querySelector(a)),null==(null!=a?a.dropzone:void 0))throw new Error("No Dropzone found for given element. This is probably because you're trying to access it before Dropzone had the time to initialize. Use the `init` option to setup any additional observers on your Dropzone.");return a.dropzone},a.autoDiscover=!0,a.discover=function(){var b,c,d,e,f,g;for(document.querySelectorAll?d=document.querySelectorAll(".dropzone"):(d=[],b=function(a){var b,c,e,f;for(f=[],c=0,e=a.length;c<e;c++)b=a[c],/(^| )dropzone($| )/.test(b.className)?f.push(d.push(b)):f.push(void 0);return f},b(document.getElementsByTagName("div")),b(document.getElementsByTagName("form"))),g=[],e=0,f=d.length;e<f;e++)c=d[e],a.optionsForElement(c)!==!1?g.push(new a(c)):g.push(void 0);
+return g},a.blacklistedBrowsers=[/opera.*Macintosh.*version\/12/i],a.isBrowserSupported=function(){var b,c,d,e,f;if(b=!0,window.File&&window.FileReader&&window.FileList&&window.Blob&&window.FormData&&document.querySelector)if("classList"in document.createElement("a"))for(e=a.blacklistedBrowsers,c=0,d=e.length;c<d;c++)f=e[c],f.test(navigator.userAgent)&&(b=!1);else b=!1;else b=!1;return b},a.dataURItoBlob=function(a){var b,c,d,e,f,g,h;for(c=atob(a.split(",")[1]),g=a.split(",")[0].split(":")[1].split(";")[0],b=new ArrayBuffer(c.length),e=new Uint8Array(b),d=f=0,h=c.length;0<=h?f<=h:f>=h;d=0<=h?++f:--f)e[d]=c.charCodeAt(d);return new Blob([b],{type:g})},i=function(a,b){var c,d,e,f;for(f=[],d=0,e=a.length;d<e;d++)c=a[d],c!==b&&f.push(c);return f},d=function(a){return a.replace(/[\-_](\w)/g,function(a){return a.charAt(1).toUpperCase()})},a.createElement=function(a){var b;return b=document.createElement("div"),b.innerHTML=a,b.childNodes[0]},a.elementInside=function(a,b){if(a===b)return!0;for(;a=a.parentNode;)if(a===b)return!0;return!1},a.getElement=function(a,b){var c;if("string"==typeof a?c=document.querySelector(a):null!=a.nodeType&&(c=a),null==c)throw new Error("Invalid `"+b+"` option provided. Please provide a CSS selector or a plain HTML element.");return c},a.getElements=function(a,b){var c,d,e,f,g,h,i,j;if(a instanceof Array){e=[];try{for(f=0,h=a.length;f<h;f++)d=a[f],e.push(this.getElement(d,b))}catch(a){c=a,e=null}}else if("string"==typeof a)for(e=[],j=document.querySelectorAll(a),g=0,i=j.length;g<i;g++)d=j[g],e.push(d);else null!=a.nodeType&&(e=[a]);if(null==e||!e.length)throw new Error("Invalid `"+b+"` option provided. Please provide a CSS selector, a plain HTML element or a list of those.");return e},a.confirm=function(a,b,c){return window.confirm(a)?b():null!=c?c():void 0},a.isValidFile=function(a,b){var c,d,e,f,g;if(!b)return!0;for(b=b.split(","),f=a.type,c=f.replace(/\/.*$/,""),d=0,e=b.length;d<e;d++)if(g=b[d],g=g.trim(),"."===g.charAt(0)){if(a.name.toLowerCase().indexOf(g.toLowerCase(),a.name.length-g.length)!==-1)return!0}else if(/\/\*$/.test(g)){if(c===g.replace(/\/.*$/,""))return!0}else if(f===g)return!0;return!1},"undefined"!=typeof jQuery&&null!==jQuery&&(jQuery.fn.dropzone=function(b){return this.each(function(){return new a(this,b)})}),"undefined"!=typeof module&&null!==module?module.exports=a:window.Dropzone=a,a.ADDED="added",a.QUEUED="queued",a.ACCEPTED=a.QUEUED,a.UPLOADING="uploading",a.PROCESSING=a.UPLOADING,a.CANCELED="canceled",a.ERROR="error",a.SUCCESS="success",f=function(a){var b,c,d,e,f,g,h,i,j,k;for(h=a.naturalWidth,g=a.naturalHeight,c=document.createElement("canvas"),c.width=1,c.height=g,d=c.getContext("2d"),d.drawImage(a,0,0),e=d.getImageData(1,0,1,g).data,k=0,f=g,i=g;i>k;)b=e[4*(i-1)+3],0===b?f=i:k=i,i=f+k>>1;return j=i/g,0===j?1:j},g=function(a,b,c,d,e,g,h,i,j,k){var l;return l=f(b),a.drawImage(b,c,d,e,g,h,i,j,k/l)},c=function(){function a(){}return a.KEY_STR="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",a.encode64=function(a){var b,c,d,e,f,g,h,i,j;for(j="",b=void 0,c=void 0,d="",e=void 0,f=void 0,g=void 0,h="",i=0;;)if(b=a[i++],c=a[i++],d=a[i++],e=b>>2,f=(3&b)<<4|c>>4,g=(15&c)<<2|d>>6,h=63&d,isNaN(c)?g=h=64:isNaN(d)&&(h=64),j=j+this.KEY_STR.charAt(e)+this.KEY_STR.charAt(f)+this.KEY_STR.charAt(g)+this.KEY_STR.charAt(h),b=c=d="",e=f=g=h="",!(i<a.length))break;return j},a.restore=function(a,b){var c,d,e;return a.match("data:image/jpeg;base64,")?(d=this.decode64(a.replace("data:image/jpeg;base64,","")),e=this.slice2Segments(d),c=this.exifManipulation(b,e),"data:image/jpeg;base64,"+this.encode64(c)):b},a.exifManipulation=function(a,b){var c,d,e;return d=this.getExifArray(b),e=this.insertExif(a,d),c=new Uint8Array(e)},a.getExifArray=function(a){var b,c;for(b=void 0,c=0;c<a.length;){if(b=a[c],255===b[0]&225===b[1])return b;c++}return[]},a.insertExif=function(a,b){var c,d,e,f,g,h;return f=a.replace("data:image/jpeg;base64,",""),e=this.decode64(f),h=e.indexOf(255,3),g=e.slice(0,h),d=e.slice(h),c=g,c=c.concat(b),c=c.concat(d)},a.slice2Segments=function(a){var b,c,d,e,f;for(c=0,f=[];;){if(255===a[c]&218===a[c+1])break;if(255===a[c]&216===a[c+1]?c+=2:(d=256*a[c+2]+a[c+3],b=c+d+2,e=a.slice(c,b),f.push(e),c=b),c>a.length)break}return f},a.decode64=function(a){var b,c,d,e,f,g,h,i,j,k,l;for(l="",d=void 0,e=void 0,f="",g=void 0,h=void 0,i=void 0,j="",k=0,c=[],b=/[^A-Za-z0-9\+\/\=]/g,b.exec(a)&&console.warning("There were invalid base64 characters in the input text.\nValid base64 characters are A-Z, a-z, 0-9, '+', '/',and '='\nExpect errors in decoding."),a=a.replace(/[^A-Za-z0-9\+\/\=]/g,"");;)if(g=this.KEY_STR.indexOf(a.charAt(k++)),h=this.KEY_STR.indexOf(a.charAt(k++)),i=this.KEY_STR.indexOf(a.charAt(k++)),j=this.KEY_STR.indexOf(a.charAt(k++)),d=g<<2|h>>4,e=(15&h)<<4|i>>2,f=(3&i)<<6|j,c.push(d),64!==i&&c.push(e),64!==j&&c.push(f),d=e=f="",g=h=i=j="",!(k<a.length))break;return c},a}(),e=function(a,b){var c,d,e,f,g,h,i,j,k;if(e=!1,k=!0,d=a.document,j=d.documentElement,c=d.addEventListener?"addEventListener":"attachEvent",i=d.addEventListener?"removeEventListener":"detachEvent",h=d.addEventListener?"":"on",f=function(c){if("readystatechange"!==c.type||"complete"===d.readyState)return("load"===c.type?a:d)[i](h+c.type,f,!1),!e&&(e=!0)?b.call(a,c.type||c):void 0},g=function(){var a;try{j.doScroll("left")}catch(b){return a=b,void setTimeout(g,50)}return f("poll")},"complete"!==d.readyState){if(d.createEventObject&&j.doScroll){try{k=!a.frameElement}catch(a){}k&&g()}return d[c](h+"DOMContentLoaded",f,!1),d[c](h+"readystatechange",f,!1),a[c](h+"load",f,!1)}},a._autoDiscoverFunction=function(){if(a.autoDiscover)return a.discover()},e(window,a._autoDiscoverFunction)}).call(this);
\ No newline at end of file
diff --git a/vendor/enyo/dropzone/dist/readme.md b/vendor/enyo/dropzone/dist/readme.md
new file mode 100644
index 0000000000000000000000000000000000000000..f281e04643cbf73c636ea744f93a761a6623a4dc
--- /dev/null
+++ b/vendor/enyo/dropzone/dist/readme.md
@@ -0,0 +1,10 @@
+# Warning!
+
+You shouldn't pull these files from the github master branch directly!
+
+They might be outdated or not working at all since I normally only push them
+when I create a version release.
+
+To be sure to get a proper release, please go to the
+[dropzone releases section on github](https://github.com/enyo/dropzone/releases/latest).
+
diff --git a/vendor/enyo/dropzone/index.js b/vendor/enyo/dropzone/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..f300153ac969e1ef0ae1572451ae8ddd2ab0e432
--- /dev/null
+++ b/vendor/enyo/dropzone/index.js
@@ -0,0 +1 @@
+module.exports = require("./lib/dropzone.js"); // Exposing dropzone
diff --git a/vendor/enyo/dropzone/package.json b/vendor/enyo/dropzone/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..fd5214edbcb3c1b9fdd093847af04b55cdd9dac7
--- /dev/null
+++ b/vendor/enyo/dropzone/package.json
@@ -0,0 +1,54 @@
+{
+  "name": "dropzone",
+  "version": "5.1.1",
+  "description": "Handles drag and drop of files for you.",
+  "keywords": [
+    "dragndrop",
+    "drag and drop",
+    "file upload",
+    "upload"
+  ],
+  "homepage": "http://www.dropzonejs.com",
+  "main": "./dist/dropzone.js",
+  "maintainers": [
+    {
+      "name": "Matias Meno",
+      "email": "m@tias.me",
+      "web": "http://www.colorglare.com"
+    }
+  ],
+  "contributors": [
+    {
+      "name": "Matias Meno",
+      "email": "m@tias.me",
+      "web": "http://www.colorglare.com"
+    }
+  ],
+  "scripts": {
+    "test": "grunt && npm run test-prebuilt",
+    "test-prebuilt": "mocha-phantomjs test/test.html"
+  },
+  "bugs": {
+    "email": "m@tias.me",
+    "url": "https://gitlab.com/meno/dropzone/issues"
+  },
+  "license": "MIT",
+  "repository": {
+    "type": "git",
+    "url": "https://gitlab.com/meno/dropzone.git"
+  },
+  "devDependencies": {
+    "chai": "1.7.x",
+    "grunt": "^1.0.0",
+    "grunt-contrib-coffee": "^1.0.0",
+    "grunt-contrib-concat": "^1.0.1",
+    "grunt-contrib-sass": "^1.0.0",
+    "grunt-contrib-uglify": "^2.1.0",
+    "grunt-contrib-watch": "^1.0.0",
+    "mocha": "^3.2.0",
+    "phantomjs-prebuilt": "^2.1.7",
+    "mocha-phantomjs": "^4.1.0",
+    "sinon": "1.17.7",
+    "marked": "^0.3.6"
+  }
+}
diff --git a/vendor/jakub-onderka/php-console-color/.gitignore b/vendor/jakub-onderka/php-console-color/.gitignore
deleted file mode 100644
index 05ab16b84f7d7211a53c74c9a70cece62cc3e843..0000000000000000000000000000000000000000
--- a/vendor/jakub-onderka/php-console-color/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-build
-vendor
-composer.lock
diff --git a/vendor/jakub-onderka/php-console-color/.travis.yml b/vendor/jakub-onderka/php-console-color/.travis.yml
deleted file mode 100644
index 49175a99693797be2c85d5c6fe9a50915b20596e..0000000000000000000000000000000000000000
--- a/vendor/jakub-onderka/php-console-color/.travis.yml
+++ /dev/null
@@ -1,24 +0,0 @@
-language: php
-
-php:
-  - 5.4
-  - 5.5
-  - 5.6
-  - 7.0
-  - 7.1
-  - 7.2
-
-sudo: false
-
-cache:
-  directories:
-    - vendor
-    - $HOME/.composer/cache
-
-before_script:
-  - composer install --no-interaction --prefer-source
-
-script:
-  - ant phplint
-  - ant phpcs
-  - ant phpunit
diff --git a/vendor/jakub-onderka/php-console-color/LICENSE b/vendor/jakub-onderka/php-console-color/LICENSE
deleted file mode 100644
index 0954fc941f03b88e16e3c4bd24f251b8b29cf049..0000000000000000000000000000000000000000
--- a/vendor/jakub-onderka/php-console-color/LICENSE
+++ /dev/null
@@ -1,27 +0,0 @@
-Copyright (c) 2014-2018, Jakub Onderka
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-
-  * Redistributions of source code must retain the above copyright
-    notice, this list of conditions and the following disclaimer.
-
-  * Redistributions in binary form must reproduce the above copyright
-    notice, this list of conditions and the following disclaimer in
-    the documentation and/or other materials provided with the
-    distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGE.
diff --git a/vendor/jakub-onderka/php-console-color/README.md b/vendor/jakub-onderka/php-console-color/README.md
deleted file mode 100644
index 39e55d9255e866144c2de3fdf1d70e0083205dc4..0000000000000000000000000000000000000000
--- a/vendor/jakub-onderka/php-console-color/README.md
+++ /dev/null
@@ -1,10 +0,0 @@
-PHP Console Color
-=================
-
-[![Build Status](https://travis-ci.org/JakubOnderka/PHP-Console-Color.svg?branch=master)](https://travis-ci.org/JakubOnderka/PHP-Console-Color)
-
-Simple library for creating colored console ouput.
-
-See `example.php` how to use this library.
-
-![Example from Windows 10](https://user-images.githubusercontent.com/89590/40762008-687f909a-646c-11e8-88d6-e268a064be4c.png)
\ No newline at end of file
diff --git a/vendor/jakub-onderka/php-console-color/build.xml b/vendor/jakub-onderka/php-console-color/build.xml
deleted file mode 100644
index bb4ba66d8fd4fc24cbca2715a9e7bae48a110ed7..0000000000000000000000000000000000000000
--- a/vendor/jakub-onderka/php-console-color/build.xml
+++ /dev/null
@@ -1,93 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project default="build">
-    <!-- Set executables according to OS -->
-    <condition property="phpunit" value="${basedir}/vendor/bin/phpunit.bat" else="${basedir}/vendor/bin/phpunit">
-        <os family="windows" />
-    </condition>
-
-    <condition property="phpcs" value="${basedir}/vendor/bin/phpcs.bat" else="${basedir}/vendor/bin/phpcs">
-        <os family="windows" />
-    </condition>
-
-    <condition property="parallel-lint" value="${basedir}/vendor/bin/parallel-lint.bat" else="${basedir}/vendor/bin/parallel-lint">
-        <os family="windows" />
-    </condition>
-
-    <condition property="var-dump-check" value="${basedir}/vendor/bin/var-dump-check.bat" else="${basedir}/vendor/bin/var-dump-check">
-        <os family="windows"/>
-    </condition>
-
-    <!-- Use colors in output can be disabled when calling ant with -Duse-colors=false -->
-    <property name="use-colors" value="true" />
-
-    <condition property="colors-arg.color" value="--colors" else="">
-        <equals arg1="${use-colors}" arg2="true" />
-    </condition>
-
-    <condition property="colors-arg.no-colors" value="" else="--no-colors">
-        <equals arg1="${use-colors}" arg2="true" />
-    </condition>
-
-    <!-- Targets -->
-    <target name="prepare" description="Create build directory">
-        <mkdir dir="${basedir}/build/logs" />
-    </target>
-
-    <target name="phplint" description="Check syntax errors in PHP files">
-        <exec executable="${parallel-lint}" failonerror="true">
-            <arg line='--exclude ${basedir}/vendor/' />
-            <arg line='${colors-arg.no-colors}' />
-            <arg line='${basedir}' />
-        </exec>
-    </target>
-
-    <target name="var-dump-check" description="Check PHP files for forgotten variable dumps">
-        <exec executable="${var-dump-check}" failonerror="true">
-            <arg line='--exclude ${basedir}/vendor/' />
-            <arg line='${colors-arg.no-colors}' />
-            <arg line='${basedir}' />
-        </exec>
-    </target>
-
-    <target name="phpcs" depends="prepare" description="Check PHP code style">
-        <delete file="${basedir}/build/logs/checkstyle.xml" quiet="true" />
-
-        <exec executable="${phpcs}">
-            <arg line='--extensions=php' />
-            <arg line='--standard="${basedir}/vendor/jakub-onderka/php-code-style/ruleset.xml"' />
-            <arg line='--report-checkstyle="${basedir}/build/logs/checkstyle.xml"' />
-            <arg line='--report-full' />
-            <arg line='"${basedir}/src"' />
-        </exec>
-    </target>
-
-    <target name="phpunit" depends="prepare" description="PHP unit">
-        <delete file="${basedir}/build/logs/phpunit.xml" quiet="true" />
-
-        <exec executable="${phpunit}">
-            <arg line='--configuration ${basedir}/phpunit.xml' />
-            <arg line='-d memory_limit=256M' />
-            <arg line='--log-junit "${basedir}/build/logs/phpunit.xml"' />
-            <arg line='${colors-arg.color}' />
-        </exec>
-    </target>
-
-    <target name="phpunit-coverage" depends="prepare" description="PHP unit with code coverage">
-        <delete file="${basedir}/build/logs/phpunit.xml" quiet="true" />
-        <delete file="${basedir}/build/logs/clover.xml" quiet="true" />
-        <delete dir="${basedir}/build/coverage" quiet="true" />
-        <mkdir dir="${basedir}/build/coverage" />
-
-        <exec executable="${phpunit}">
-            <arg line='--configuration ${basedir}/phpunit.xml' />
-            <arg line='-d memory_limit=256M' />
-            <arg line='--log-junit "${basedir}/build/logs/phpunit.xml"' />
-            <arg line='--coverage-clover "${basedir}/build/logs/clover.xml"' />
-            <arg line='--coverage-html "${basedir}/build/coverage/"' />
-            <arg line='${colors-arg.color}' />
-        </exec>
-    </target>
-
-    <target name="build" depends="phplint,var-dump-check,phpcs,phpunit" />
-
-</project>
\ No newline at end of file
diff --git a/vendor/jakub-onderka/php-console-color/composer.json b/vendor/jakub-onderka/php-console-color/composer.json
deleted file mode 100644
index 6481cb51d0fca62690e7a79541d68699b73714bf..0000000000000000000000000000000000000000
--- a/vendor/jakub-onderka/php-console-color/composer.json
+++ /dev/null
@@ -1,23 +0,0 @@
-{
-    "name": "jakub-onderka/php-console-color",
-    "license": "BSD-2-Clause",
-    "authors": [
-        {
-            "name": "Jakub Onderka",
-            "email": "jakub.onderka@gmail.com"
-        }
-    ],
-    "autoload": {
-        "psr-4": {"JakubOnderka\\PhpConsoleColor\\": "src/"}
-    },
-    "require": {
-        "php": ">=5.4.0"
-    },
-    "require-dev": {
-        "phpunit/phpunit": "~4.3",
-        "jakub-onderka/php-parallel-lint": "1.0",
-        "jakub-onderka/php-var-dump-check": "0.*",
-        "squizlabs/php_codesniffer": "1.*",
-        "jakub-onderka/php-code-style": "1.0"
-    }
-}
diff --git a/vendor/jakub-onderka/php-console-color/example.php b/vendor/jakub-onderka/php-console-color/example.php
deleted file mode 100644
index 5e698a24eca1f2942045d41e18867fdb9cbad1a0..0000000000000000000000000000000000000000
--- a/vendor/jakub-onderka/php-console-color/example.php
+++ /dev/null
@@ -1,38 +0,0 @@
-<?php
-$loader = require_once __DIR__ . '/vendor/autoload.php';
-
-$consoleColor = new JakubOnderka\PhpConsoleColor\ConsoleColor();
-
-echo "Colors are supported: " . ($consoleColor->isSupported() ? 'Yes' : 'No') . "\n";
-echo "256 colors are supported: " . ($consoleColor->are256ColorsSupported() ? 'Yes' : 'No') . "\n\n";
-
-if ($consoleColor->isSupported()) {
-    foreach ($consoleColor->getPossibleStyles() as $style) {
-        echo $consoleColor->apply($style, $style) . "\n";
-    }
-}
-
-echo "\n";
-
-if ($consoleColor->are256ColorsSupported()) {
-    echo "Foreground colors:\n";
-    for ($i = 1; $i <= 255; $i++) {
-        echo $consoleColor->apply("color_$i", str_pad($i, 6, ' ', STR_PAD_BOTH));
-
-        if ($i % 15 === 0) {
-            echo "\n";
-        }
-    }
-
-    echo "\nBackground colors:\n";
-
-    for ($i = 1; $i <= 255; $i++) {
-        echo $consoleColor->apply("bg_color_$i", str_pad($i, 6, ' ', STR_PAD_BOTH));
-
-        if ($i % 15 === 0) {
-            echo "\n";
-        }
-    }
-
-    echo "\n";
-}
diff --git a/vendor/jakub-onderka/php-console-color/phpunit.xml b/vendor/jakub-onderka/php-console-color/phpunit.xml
deleted file mode 100644
index f1105cc4e2e23be53ab152c34ee3b7fef5c6aa25..0000000000000000000000000000000000000000
--- a/vendor/jakub-onderka/php-console-color/phpunit.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<phpunit
-    bootstrap="./vendor/autoload.php">
-    <testsuites>
-        <testsuite>
-            <directory suffix="Test.php">tests</directory>
-        </testsuite>
-    </testsuites>
-
-    <!-- Ignore vendor folder for code coverage -->
-    <filter>
-        <blacklist>
-            <directory>vendor</directory>
-        </blacklist>
-    </filter>
-</phpunit>
diff --git a/vendor/jakub-onderka/php-console-color/src/ConsoleColor.php b/vendor/jakub-onderka/php-console-color/src/ConsoleColor.php
deleted file mode 100644
index 90fd1252865c7797946dc77449095fdd0b73175d..0000000000000000000000000000000000000000
--- a/vendor/jakub-onderka/php-console-color/src/ConsoleColor.php
+++ /dev/null
@@ -1,287 +0,0 @@
-<?php
-namespace JakubOnderka\PhpConsoleColor;
-
-class ConsoleColor
-{
-    const FOREGROUND = 38,
-        BACKGROUND = 48;
-
-    const COLOR256_REGEXP = '~^(bg_)?color_([0-9]{1,3})$~';
-
-    const RESET_STYLE = 0;
-
-    /** @var bool */
-    private $isSupported;
-
-    /** @var bool */
-    private $forceStyle = false;
-
-    /** @var array */
-    private $styles = array(
-        'none' => null,
-        'bold' => '1',
-        'dark' => '2',
-        'italic' => '3',
-        'underline' => '4',
-        'blink' => '5',
-        'reverse' => '7',
-        'concealed' => '8',
-
-        'default' => '39',
-        'black' => '30',
-        'red' => '31',
-        'green' => '32',
-        'yellow' => '33',
-        'blue' => '34',
-        'magenta' => '35',
-        'cyan' => '36',
-        'light_gray' => '37',
-
-        'dark_gray' => '90',
-        'light_red' => '91',
-        'light_green' => '92',
-        'light_yellow' => '93',
-        'light_blue' => '94',
-        'light_magenta' => '95',
-        'light_cyan' => '96',
-        'white' => '97',
-
-        'bg_default' => '49',
-        'bg_black' => '40',
-        'bg_red' => '41',
-        'bg_green' => '42',
-        'bg_yellow' => '43',
-        'bg_blue' => '44',
-        'bg_magenta' => '45',
-        'bg_cyan' => '46',
-        'bg_light_gray' => '47',
-
-        'bg_dark_gray' => '100',
-        'bg_light_red' => '101',
-        'bg_light_green' => '102',
-        'bg_light_yellow' => '103',
-        'bg_light_blue' => '104',
-        'bg_light_magenta' => '105',
-        'bg_light_cyan' => '106',
-        'bg_white' => '107',
-    );
-
-    /** @var array */
-    private $themes = array();
-
-    public function __construct()
-    {
-        $this->isSupported = $this->isSupported();
-    }
-
-    /**
-     * @param string|array $style
-     * @param string $text
-     * @return string
-     * @throws InvalidStyleException
-     * @throws \InvalidArgumentException
-     */
-    public function apply($style, $text)
-    {
-        if (!$this->isStyleForced() && !$this->isSupported()) {
-            return $text;
-        }
-
-        if (is_string($style)) {
-            $style = array($style);
-        }
-        if (!is_array($style)) {
-            throw new \InvalidArgumentException("Style must be string or array.");
-        }
-
-        $sequences = array();
-
-        foreach ($style as $s) {
-            if (isset($this->themes[$s])) {
-                $sequences = array_merge($sequences, $this->themeSequence($s));
-            } else if ($this->isValidStyle($s)) {
-                $sequences[] = $this->styleSequence($s);
-            } else {
-                throw new InvalidStyleException($s);
-            }
-        }
-
-        $sequences = array_filter($sequences, function ($val) {
-            return $val !== null;
-        });
-
-        if (empty($sequences)) {
-            return $text;
-        }
-
-        return $this->escSequence(implode(';', $sequences)) . $text . $this->escSequence(self::RESET_STYLE);
-    }
-
-    /**
-     * @param bool $forceStyle
-     */
-    public function setForceStyle($forceStyle)
-    {
-        $this->forceStyle = (bool) $forceStyle;
-    }
-
-    /**
-     * @return bool
-     */
-    public function isStyleForced()
-    {
-        return $this->forceStyle;
-    }
-
-    /**
-     * @param array $themes
-     * @throws InvalidStyleException
-     * @throws \InvalidArgumentException
-     */
-    public function setThemes(array $themes)
-    {
-        $this->themes = array();
-        foreach ($themes as $name => $styles) {
-            $this->addTheme($name, $styles);
-        }
-    }
-
-    /**
-     * @param string $name
-     * @param array|string $styles
-     * @throws \InvalidArgumentException
-     * @throws InvalidStyleException
-     */
-    public function addTheme($name, $styles)
-    {
-        if (is_string($styles)) {
-            $styles = array($styles);
-        }
-        if (!is_array($styles)) {
-            throw new \InvalidArgumentException("Style must be string or array.");
-        }
-
-        foreach ($styles as $style) {
-            if (!$this->isValidStyle($style)) {
-                throw new InvalidStyleException($style);
-            }
-        }
-
-        $this->themes[$name] = $styles;
-    }
-
-    /**
-     * @return array
-     */
-    public function getThemes()
-    {
-        return $this->themes;
-    }
-
-    /**
-     * @param string $name
-     * @return bool
-     */
-    public function hasTheme($name)
-    {
-        return isset($this->themes[$name]);
-    }
-
-    /**
-     * @param string $name
-     */
-    public function removeTheme($name)
-    {
-        unset($this->themes[$name]);
-    }
-
-    /**
-     * @return bool
-     */
-    public function isSupported()
-    {
-        if (DIRECTORY_SEPARATOR === '\\') {
-            if (function_exists('sapi_windows_vt100_support') && @sapi_windows_vt100_support(STDOUT)) {
-                return true;
-            } elseif (getenv('ANSICON') !== false || getenv('ConEmuANSI') === 'ON') {
-                return true;
-            }
-            return false;
-        } else {
-            return function_exists('posix_isatty') && @posix_isatty(STDOUT);
-        }
-    }
-
-    /**
-     * @return bool
-     */
-    public function are256ColorsSupported()
-    {
-        if (DIRECTORY_SEPARATOR === '\\') {
-            return function_exists('sapi_windows_vt100_support') && @sapi_windows_vt100_support(STDOUT);
-        } else {
-            return strpos(getenv('TERM'), '256color') !== false;
-        }
-    }
-
-    /**
-     * @return array
-     */
-    public function getPossibleStyles()
-    {
-        return array_keys($this->styles);
-    }
-
-    /**
-     * @param string $name
-     * @return string[]
-     */
-    private function themeSequence($name)
-    {
-        $sequences = array();
-        foreach ($this->themes[$name] as $style) {
-            $sequences[] = $this->styleSequence($style);
-        }
-        return $sequences;
-    }
-
-    /**
-     * @param string $style
-     * @return string
-     */
-    private function styleSequence($style)
-    {
-        if (array_key_exists($style, $this->styles)) {
-            return $this->styles[$style];
-        }
-
-        if (!$this->are256ColorsSupported()) {
-            return null;
-        }
-
-        preg_match(self::COLOR256_REGEXP, $style, $matches);
-
-        $type = $matches[1] === 'bg_' ? self::BACKGROUND : self::FOREGROUND;
-        $value = $matches[2];
-
-        return "$type;5;$value";
-    }
-
-    /**
-     * @param string $style
-     * @return bool
-     */
-    private function isValidStyle($style)
-    {
-        return array_key_exists($style, $this->styles) || preg_match(self::COLOR256_REGEXP, $style);
-    }
-
-    /**
-     * @param string|int $value
-     * @return string
-     */
-    private function escSequence($value)
-    {
-        return "\033[{$value}m";
-    }
-}
diff --git a/vendor/jakub-onderka/php-console-color/src/InvalidStyleException.php b/vendor/jakub-onderka/php-console-color/src/InvalidStyleException.php
deleted file mode 100644
index 6f1586f62ead246c7c7758da4bda38a5e2dc5b38..0000000000000000000000000000000000000000
--- a/vendor/jakub-onderka/php-console-color/src/InvalidStyleException.php
+++ /dev/null
@@ -1,10 +0,0 @@
-<?php
-namespace JakubOnderka\PhpConsoleColor;
-
-class InvalidStyleException extends \Exception
-{
-    public function __construct($styleName)
-    {
-        parent::__construct("Invalid style $styleName.");
-    }
-}
\ No newline at end of file
diff --git a/vendor/jakub-onderka/php-console-color/tests/ConsoleColorTest.php b/vendor/jakub-onderka/php-console-color/tests/ConsoleColorTest.php
deleted file mode 100644
index aaa1a224a303cbed27f0b9f76066004896dd31ec..0000000000000000000000000000000000000000
--- a/vendor/jakub-onderka/php-console-color/tests/ConsoleColorTest.php
+++ /dev/null
@@ -1,184 +0,0 @@
-<?php
-use JakubOnderka\PhpConsoleColor\ConsoleColor;
-
-class ConsoleColorWithForceSupport extends ConsoleColor
-{
-    private $isSupportedForce = true;
-
-    private $are256ColorsSupportedForce = true;
-
-    public function setIsSupported($isSupported)
-    {
-        $this->isSupportedForce = $isSupported;
-    }
-
-    public function isSupported()
-    {
-        return $this->isSupportedForce;
-    }
-
-    public function setAre256ColorsSupported($are256ColorsSupported)
-    {
-        $this->are256ColorsSupportedForce = $are256ColorsSupported;
-    }
-
-    public function are256ColorsSupported()
-    {
-        return $this->are256ColorsSupportedForce;
-    }
-}
-
-class ConsoleColorTest extends \PHPUnit_Framework_TestCase
-{
-    /** @var ConsoleColorWithForceSupport */
-    private $uut;
-
-    protected function setUp()
-    {
-        $this->uut = new ConsoleColorWithForceSupport();
-    }
-
-    public function testNone()
-    {
-        $output = $this->uut->apply('none', 'text');
-        $this->assertEquals("text", $output);
-    }
-
-    public function testBold()
-    {
-        $output = $this->uut->apply('bold', 'text');
-        $this->assertEquals("\033[1mtext\033[0m", $output);
-    }
-
-    public function testBoldColorsAreNotSupported()
-    {
-        $this->uut->setIsSupported(false);
-
-        $output = $this->uut->apply('bold', 'text');
-        $this->assertEquals("text", $output);
-    }
-
-    public function testBoldColorsAreNotSupportedButAreForced()
-    {
-        $this->uut->setIsSupported(false);
-        $this->uut->setForceStyle(true);
-
-        $output = $this->uut->apply('bold', 'text');
-        $this->assertEquals("\033[1mtext\033[0m", $output);
-    }
-
-    public function testDark()
-    {
-        $output = $this->uut->apply('dark', 'text');
-        $this->assertEquals("\033[2mtext\033[0m", $output);
-    }
-
-    public function testBoldAndDark()
-    {
-        $output = $this->uut->apply(array('bold', 'dark'), 'text');
-        $this->assertEquals("\033[1;2mtext\033[0m", $output);
-    }
-
-    public function test256ColorForeground()
-    {
-        $output = $this->uut->apply('color_255', 'text');
-        $this->assertEquals("\033[38;5;255mtext\033[0m", $output);
-    }
-
-    public function test256ColorWithoutSupport()
-    {
-        $this->uut->setAre256ColorsSupported(false);
-
-        $output = $this->uut->apply('color_255', 'text');
-        $this->assertEquals("text", $output);
-    }
-
-    public function test256ColorBackground()
-    {
-        $output = $this->uut->apply('bg_color_255', 'text');
-        $this->assertEquals("\033[48;5;255mtext\033[0m", $output);
-    }
-
-    public function test256ColorForegroundAndBackground()
-    {
-        $output = $this->uut->apply(array('color_200', 'bg_color_255'), 'text');
-        $this->assertEquals("\033[38;5;200;48;5;255mtext\033[0m", $output);
-    }
-
-    public function testSetOwnTheme()
-    {
-        $this->uut->setThemes(array('bold_dark' => array('bold', 'dark')));
-        $output = $this->uut->apply(array('bold_dark'), 'text');
-        $this->assertEquals("\033[1;2mtext\033[0m", $output);
-    }
-
-    public function testAddOwnTheme()
-    {
-        $this->uut->addTheme('bold_own', 'bold');
-        $output = $this->uut->apply(array('bold_own'), 'text');
-        $this->assertEquals("\033[1mtext\033[0m", $output);
-    }
-
-    public function testAddOwnThemeArray()
-    {
-        $this->uut->addTheme('bold_dark', array('bold', 'dark'));
-        $output = $this->uut->apply(array('bold_dark'), 'text');
-        $this->assertEquals("\033[1;2mtext\033[0m", $output);
-    }
-
-    public function testOwnWithStyle()
-    {
-        $this->uut->addTheme('bold_dark', array('bold', 'dark'));
-        $output = $this->uut->apply(array('bold_dark', 'italic'), 'text');
-        $this->assertEquals("\033[1;2;3mtext\033[0m", $output);
-    }
-
-    public function testHasAndRemoveTheme()
-    {
-        $this->assertFalse($this->uut->hasTheme('bold_dark'));
-
-        $this->uut->addTheme('bold_dark', array('bold', 'dark'));
-        $this->assertTrue($this->uut->hasTheme('bold_dark'));
-
-        $this->uut->removeTheme('bold_dark');
-        $this->assertFalse($this->uut->hasTheme('bold_dark'));
-    }
-
-    public function testApplyInvalidArgument()
-    {
-        $this->setExpectedException('\InvalidArgumentException');
-        $this->uut->apply(new stdClass(), 'text');
-    }
-
-    public function testApplyInvalidStyleName()
-    {
-        $this->setExpectedException('\JakubOnderka\PhpConsoleColor\InvalidStyleException');
-        $this->uut->apply('invalid', 'text');
-    }
-
-    public function testApplyInvalid256Color()
-    {
-        $this->setExpectedException('\JakubOnderka\PhpConsoleColor\InvalidStyleException');
-        $this->uut->apply('color_2134', 'text');
-    }
-
-    public function testThemeInvalidStyle()
-    {
-        $this->setExpectedException('\JakubOnderka\PhpConsoleColor\InvalidStyleException');
-        $this->uut->addTheme('invalid', array('invalid'));
-    }
-
-    public function testForceStyle()
-    {
-        $this->assertFalse($this->uut->isStyleForced());
-        $this->uut->setForceStyle(true);
-        $this->assertTrue($this->uut->isStyleForced());
-    }
-
-    public function testGetPossibleStyles()
-    {
-        $this->assertInternalType('array', $this->uut->getPossibleStyles());
-        $this->assertNotEmpty($this->uut->getPossibleStyles());
-    }
-}
-
diff --git a/vendor/jakub-onderka/php-console-highlighter/.gitignore b/vendor/jakub-onderka/php-console-highlighter/.gitignore
deleted file mode 100644
index 70f6ec0695ce4945b88ab22ae3b03453a298f361..0000000000000000000000000000000000000000
--- a/vendor/jakub-onderka/php-console-highlighter/.gitignore
+++ /dev/null
@@ -1,4 +0,0 @@
-/.idea/
-/build/
-/vendor/
-/composer.lock
\ No newline at end of file
diff --git a/vendor/jakub-onderka/php-console-highlighter/.travis.yml b/vendor/jakub-onderka/php-console-highlighter/.travis.yml
deleted file mode 100644
index c88c4ec9d4d4013c230e50df3053a2ddc5a99076..0000000000000000000000000000000000000000
--- a/vendor/jakub-onderka/php-console-highlighter/.travis.yml
+++ /dev/null
@@ -1,22 +0,0 @@
-language: php
-
-php:
-  - 5.4
-  - 5.5
-  - 5.6
-  - 7.0
-  - 7.1
-  - 7.2
-  
-sudo: false
-
-cache:
-  directories:
-    - vendor
-    - $HOME/.composer/cache
-
-before_script:
-  - composer install --no-interaction --prefer-source
-
-script:
-  - ant
diff --git a/vendor/jakub-onderka/php-console-highlighter/README.md b/vendor/jakub-onderka/php-console-highlighter/README.md
deleted file mode 100644
index 1ef3d1340d50c98e82096c246cb05676d185f869..0000000000000000000000000000000000000000
--- a/vendor/jakub-onderka/php-console-highlighter/README.md
+++ /dev/null
@@ -1,42 +0,0 @@
-PHP Console Highlighter
-=======================
-
-Highlight PHP code in console (terminal).
-
-Example
--------
-![Example](http://jakubonderka.github.io/php-console-highlight-example.png)
-
-Install
--------
-
-Just create a `composer.json` file and run the `php composer.phar install` command to install it:
-
-```json
-{
-    "require": {
-        "jakub-onderka/php-console-highlighter": "0.*"
-    }
-}
-```
-
-Usage
--------
-```php
-<?php
-use JakubOnderka\PhpConsoleColor\ConsoleColor;
-use JakubOnderka\PhpConsoleHighlighter\Highlighter;
-
-require __DIR__ . '/vendor/autoload.php';
-
-$highlighter = new Highlighter(new ConsoleColor());
-
-$fileContent = file_get_contents(__FILE__);
-echo $highlighter->getWholeFile($fileContent);
-```
-
-------
-
-[![Downloads this Month](https://img.shields.io/packagist/dm/jakub-onderka/php-console-highlighter.svg)](https://packagist.org/packages/jakub-onderka/php-console-highlighter)
-[![Build Status](https://travis-ci.org/JakubOnderka/PHP-Console-Highlighter.svg?branch=master)](https://travis-ci.org/JakubOnderka/PHP-Console-Highlighter)
-[![License](https://poser.pugx.org/jakub-onderka/php-console-highlighter/license.svg)](https://packagist.org/packages/jakub-onderka/php-console-highlighter)
diff --git a/vendor/jakub-onderka/php-console-highlighter/build.xml b/vendor/jakub-onderka/php-console-highlighter/build.xml
deleted file mode 100644
index d656ea9d4b253689a4292c298ce2707bf7ae332f..0000000000000000000000000000000000000000
--- a/vendor/jakub-onderka/php-console-highlighter/build.xml
+++ /dev/null
@@ -1,93 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project default="build">
-    <!-- Set executables according to OS -->
-    <condition property="phpunit" value="${basedir}/vendor/bin/phpunit.bat" else="${basedir}/vendor/bin/phpunit">
-        <os family="windows" />
-    </condition>
-
-    <condition property="phpcs" value="${basedir}/vendor/bin/phpcs.bat" else="${basedir}/vendor/bin/phpcs">
-        <os family="windows" />
-    </condition>
-
-    <condition property="parallel-lint" value="${basedir}/vendor/bin/parallel-lint.bat" else="${basedir}/vendor/bin/parallel-lint">
-        <os family="windows" />
-    </condition>
-
-    <condition property="var-dump-check" value="${basedir}/vendor/bin/var-dump-check.bat" else="${basedir}/vendor/bin/var-dump-check">
-        <os family="windows"/>
-    </condition>
-
-    <!-- Use colors in output can be disabled when calling ant with -Duse-colors=false -->
-    <property name="use-colors" value="true" />
-
-    <condition property="colors-arg.color" value="--colors" else="">
-        <equals arg1="${use-colors}" arg2="true" />
-    </condition>
-
-    <condition property="colors-arg.no-colors" value="" else="--no-colors">
-        <equals arg1="${use-colors}" arg2="true" />
-    </condition>
-
-    <!-- Targets -->
-    <target name="prepare" description="Create build directory">
-        <mkdir dir="${basedir}/build/logs" />
-    </target>
-
-    <target name="phplint" description="Check syntax errors in PHP files">
-        <exec executable="${parallel-lint}" failonerror="true">
-            <arg line='--exclude ${basedir}/vendor/' />
-            <arg line='${colors-arg.no-colors}' />
-            <arg line='${basedir}' />
-        </exec>
-    </target>
-
-    <target name="var-dump-check" description="Check PHP files for forgotten variable dumps">
-        <exec executable="${var-dump-check}" failonerror="true">
-            <arg line='--exclude ${basedir}/vendor/' />
-            <arg line='${colors-arg.no-colors}' />
-            <arg line='${basedir}' />
-        </exec>
-    </target>
-
-    <target name="phpcs" depends="prepare" description="Check PHP code style">
-        <delete file="${basedir}/build/logs/checkstyle.xml" quiet="true" />
-
-        <exec executable="${phpcs}">
-            <arg line='--extensions=php' />
-            <arg line='--standard="${basedir}/vendor/jakub-onderka/php-code-style/ruleset.xml"' />
-            <arg line='--report-checkstyle="${basedir}/build/logs/checkstyle.xml"' />
-            <arg line='--report-full' />
-            <arg line='"${basedir}/src"' />
-        </exec>
-    </target>
-
-    <target name="phpunit" depends="prepare" description="PHP unit">
-        <delete file="${basedir}/build/logs/phpunit.xml" quiet="true" />
-
-        <exec executable="${phpunit}">
-            <arg line='--configuration ${basedir}/phpunit.xml' />
-            <arg line='-d memory_limit=256M' />
-            <arg line='--log-junit "${basedir}/build/logs/phpunit.xml"' />
-            <arg line='${colors-arg.color}' />
-        </exec>
-    </target>
-
-    <target name="phpunit-coverage" depends="prepare" description="PHP unit with code coverage">
-        <delete file="${basedir}/build/logs/phpunit.xml" quiet="true" />
-        <delete file="${basedir}/build/logs/clover.xml" quiet="true" />
-        <delete dir="${basedir}/build/coverage" quiet="true" />
-        <mkdir dir="${basedir}/build/coverage" />
-
-        <exec executable="${phpunit}" failonerror="true">
-            <arg line='--configuration ${basedir}/phpunit.xml' />
-            <arg line='-d memory_limit=256M' />
-            <arg line='--log-junit "${basedir}/build/logs/phpunit.xml"' />
-            <arg line='--coverage-clover "${basedir}/build/logs/clover.xml"' />
-            <arg line='--coverage-html "${basedir}/build/coverage/"' />
-            <arg line='${colors-arg.color}' />
-        </exec>
-    </target>
-
-    <target name="build" depends="phplint,var-dump-check,phpcs,phpunit" />
-
-</project>
\ No newline at end of file
diff --git a/vendor/jakub-onderka/php-console-highlighter/composer.json b/vendor/jakub-onderka/php-console-highlighter/composer.json
deleted file mode 100644
index 21c29f710a7259b88b92cb156400ae144ee1cf3f..0000000000000000000000000000000000000000
--- a/vendor/jakub-onderka/php-console-highlighter/composer.json
+++ /dev/null
@@ -1,28 +0,0 @@
-{
-    "name": "jakub-onderka/php-console-highlighter",
-    "description": "Highlight PHP code in terminal",
-    "type": "library",
-    "license": "MIT",
-    "authors": [
-        {
-            "name": "Jakub Onderka",
-            "email": "acci@acci.cz",
-            "homepage": "http://www.acci.cz/"
-        }
-    ],
-    "autoload": {
-        "psr-4": {"JakubOnderka\\PhpConsoleHighlighter\\": "src/"}
-    },
-    "require": {
-        "php": ">=5.4.0",
-        "ext-tokenizer": "*",
-        "jakub-onderka/php-console-color": "~0.2"
-    },
-    "require-dev": {
-        "phpunit/phpunit": "~4.0",
-        "jakub-onderka/php-parallel-lint": "~1.0",
-        "jakub-onderka/php-var-dump-check": "~0.1",
-        "squizlabs/php_codesniffer": "~1.5",
-        "jakub-onderka/php-code-style": "~1.0"
-    }
-}
diff --git a/vendor/jakub-onderka/php-console-highlighter/examples/snippet.php b/vendor/jakub-onderka/php-console-highlighter/examples/snippet.php
deleted file mode 100644
index 1bf6ac3bd7f86066657c29b57a316249eb535a2f..0000000000000000000000000000000000000000
--- a/vendor/jakub-onderka/php-console-highlighter/examples/snippet.php
+++ /dev/null
@@ -1,10 +0,0 @@
-<?php
-use JakubOnderka\PhpConsoleColor\ConsoleColor;
-use JakubOnderka\PhpConsoleHighlighter\Highlighter;
-
-require __DIR__ . '/../vendor/autoload.php';
-
-$highlighter = new Highlighter(new ConsoleColor());
-
-$fileContent = file_get_contents(__FILE__);
-echo $highlighter->getCodeSnippet($fileContent, 3);
\ No newline at end of file
diff --git a/vendor/jakub-onderka/php-console-highlighter/examples/whole_file.php b/vendor/jakub-onderka/php-console-highlighter/examples/whole_file.php
deleted file mode 100644
index 2a023d80abdcf3c7266fc421f8438767e23ade72..0000000000000000000000000000000000000000
--- a/vendor/jakub-onderka/php-console-highlighter/examples/whole_file.php
+++ /dev/null
@@ -1,10 +0,0 @@
-<?php
-use JakubOnderka\PhpConsoleColor\ConsoleColor;
-use JakubOnderka\PhpConsoleHighlighter\Highlighter;
-
-require __DIR__ . '/../vendor/autoload.php';
-
-$highlighter = new Highlighter(new ConsoleColor());
-
-$fileContent = file_get_contents(__FILE__);
-echo $highlighter->getWholeFile($fileContent);
\ No newline at end of file
diff --git a/vendor/jakub-onderka/php-console-highlighter/examples/whole_file_line_numbers.php b/vendor/jakub-onderka/php-console-highlighter/examples/whole_file_line_numbers.php
deleted file mode 100644
index f9178f2d136ba7953df31b92ef9d4c3f4f748fdf..0000000000000000000000000000000000000000
--- a/vendor/jakub-onderka/php-console-highlighter/examples/whole_file_line_numbers.php
+++ /dev/null
@@ -1,10 +0,0 @@
-<?php
-use JakubOnderka\PhpConsoleColor\ConsoleColor;
-use JakubOnderka\PhpConsoleHighlighter\Highlighter;
-
-require __DIR__ . '/../vendor/autoload.php';
-
-$highlighter = new Highlighter(new ConsoleColor());
-
-$fileContent = file_get_contents(__FILE__);
-echo $highlighter->getWholeFileWithLineNumbers($fileContent);
\ No newline at end of file
diff --git a/vendor/jakub-onderka/php-console-highlighter/phpunit.xml b/vendor/jakub-onderka/php-console-highlighter/phpunit.xml
deleted file mode 100644
index 9c653a680a487e3c566ea85a6b19ef6009aa79b2..0000000000000000000000000000000000000000
--- a/vendor/jakub-onderka/php-console-highlighter/phpunit.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<phpunit bootstrap="./vendor/autoload.php">
-    <testsuites>
-        <testsuite>
-            <directory suffix="Test.php">tests</directory>
-        </testsuite>
-    </testsuites>
-
-    <!-- Ignore vendor folder for code coverage -->
-    <filter>
-        <blacklist>
-            <directory>vendor</directory>
-        </blacklist>
-    </filter>
-</phpunit>
diff --git a/vendor/jakub-onderka/php-console-highlighter/src/Highlighter.php b/vendor/jakub-onderka/php-console-highlighter/src/Highlighter.php
deleted file mode 100644
index 47ce30d2c04c98ada209c83b70aa3c41046a2925..0000000000000000000000000000000000000000
--- a/vendor/jakub-onderka/php-console-highlighter/src/Highlighter.php
+++ /dev/null
@@ -1,263 +0,0 @@
-<?php
-namespace JakubOnderka\PhpConsoleHighlighter;
-
-use JakubOnderka\PhpConsoleColor\ConsoleColor;
-
-class Highlighter
-{
-    const TOKEN_DEFAULT = 'token_default',
-        TOKEN_COMMENT = 'token_comment',
-        TOKEN_STRING = 'token_string',
-        TOKEN_HTML = 'token_html',
-        TOKEN_KEYWORD = 'token_keyword';
-
-    const ACTUAL_LINE_MARK = 'actual_line_mark',
-        LINE_NUMBER = 'line_number';
-
-    /** @var ConsoleColor */
-    private $color;
-
-    /** @var array */
-    private $defaultTheme = array(
-        self::TOKEN_STRING => 'red',
-        self::TOKEN_COMMENT => 'yellow',
-        self::TOKEN_KEYWORD => 'green',
-        self::TOKEN_DEFAULT => 'default',
-        self::TOKEN_HTML => 'cyan',
-
-        self::ACTUAL_LINE_MARK  => 'red',
-        self::LINE_NUMBER => 'dark_gray',
-    );
-
-    /**
-     * @param ConsoleColor $color
-     * @throws \JakubOnderka\PhpConsoleColor\InvalidStyleException
-     */
-    public function __construct(ConsoleColor $color)
-    {
-        $this->color = $color;
-
-        foreach ($this->defaultTheme as $name => $styles) {
-            if (!$this->color->hasTheme($name)) {
-                $this->color->addTheme($name, $styles);
-            }
-        }
-    }
-
-    /**
-     * @param string $source
-     * @param int $lineNumber
-     * @param int $linesBefore
-     * @param int $linesAfter
-     * @return string
-     * @throws \JakubOnderka\PhpConsoleColor\InvalidStyleException
-     * @throws \InvalidArgumentException
-     */
-    public function getCodeSnippet($source, $lineNumber, $linesBefore = 2, $linesAfter = 2)
-    {
-        $tokenLines = $this->getHighlightedLines($source);
-
-        $offset = $lineNumber - $linesBefore - 1;
-        $offset = max($offset, 0);
-        $length = $linesAfter + $linesBefore + 1;
-        $tokenLines = array_slice($tokenLines, $offset, $length, $preserveKeys = true);
-
-        $lines = $this->colorLines($tokenLines);
-
-        return $this->lineNumbers($lines, $lineNumber);
-    }
-
-    /**
-     * @param string $source
-     * @return string
-     * @throws \JakubOnderka\PhpConsoleColor\InvalidStyleException
-     * @throws \InvalidArgumentException
-     */
-    public function getWholeFile($source)
-    {
-        $tokenLines = $this->getHighlightedLines($source);
-        $lines = $this->colorLines($tokenLines);
-        return implode(PHP_EOL, $lines);
-    }
-
-    /**
-     * @param string $source
-     * @return string
-     * @throws \JakubOnderka\PhpConsoleColor\InvalidStyleException
-     * @throws \InvalidArgumentException
-     */
-    public function getWholeFileWithLineNumbers($source)
-    {
-        $tokenLines = $this->getHighlightedLines($source);
-        $lines = $this->colorLines($tokenLines);
-        return $this->lineNumbers($lines);
-    }
-
-    /**
-     * @param string $source
-     * @return array
-     */
-    private function getHighlightedLines($source)
-    {
-        $source = str_replace(array("\r\n", "\r"), "\n", $source);
-        $tokens = $this->tokenize($source);
-        return $this->splitToLines($tokens);
-    }
-
-    /**
-     * @param string $source
-     * @return array
-     */
-    private function tokenize($source)
-    {
-        $tokens = token_get_all($source);
-
-        $output = array();
-        $currentType = null;
-        $buffer = '';
-
-        foreach ($tokens as $token) {
-            if (is_array($token)) {
-                switch ($token[0]) {
-                    case T_WHITESPACE:
-                        break;
-
-                    case T_OPEN_TAG:
-                    case T_OPEN_TAG_WITH_ECHO:
-                    case T_CLOSE_TAG:
-                    case T_STRING:
-                    case T_VARIABLE:
-
-                    // Constants
-                    case T_DIR:
-                    case T_FILE:
-                    case T_METHOD_C:
-                    case T_DNUMBER:
-                    case T_LNUMBER:
-                    case T_NS_C:
-                    case T_LINE:
-                    case T_CLASS_C:
-                    case T_FUNC_C:
-                    case T_TRAIT_C:
-                        $newType = self::TOKEN_DEFAULT;
-                        break;
-
-                    case T_COMMENT:
-                    case T_DOC_COMMENT:
-                        $newType = self::TOKEN_COMMENT;
-                        break;
-
-                    case T_ENCAPSED_AND_WHITESPACE:
-                    case T_CONSTANT_ENCAPSED_STRING:
-                        $newType = self::TOKEN_STRING;
-                        break;
-
-                    case T_INLINE_HTML:
-                        $newType = self::TOKEN_HTML;
-                        break;
-
-                    default:
-                        $newType = self::TOKEN_KEYWORD;
-                }
-            } else {
-                $newType = $token === '"' ? self::TOKEN_STRING : self::TOKEN_KEYWORD;
-            }
-
-            if ($currentType === null) {
-                $currentType = $newType;
-            }
-
-            if ($currentType !== $newType) {
-                $output[] = array($currentType, $buffer);
-                $buffer = '';
-                $currentType = $newType;
-            }
-
-            $buffer .= is_array($token) ? $token[1] : $token;
-        }
-
-        if (isset($newType)) {
-            $output[] = array($newType, $buffer);
-        }
-
-        return $output;
-    }
-
-    /**
-     * @param array $tokens
-     * @return array
-     */
-    private function splitToLines(array $tokens)
-    {
-        $lines = array();
-
-        $line = array();
-        foreach ($tokens as $token) {
-            foreach (explode("\n", $token[1]) as $count => $tokenLine) {
-                if ($count > 0) {
-                    $lines[] = $line;
-                    $line = array();
-                }
-
-                if ($tokenLine === '') {
-                    continue;
-                }
-
-                $line[] = array($token[0], $tokenLine);
-            }
-        }
-
-        $lines[] = $line;
-
-        return $lines;
-    }
-
-    /**
-     * @param array $tokenLines
-     * @return array
-     * @throws \JakubOnderka\PhpConsoleColor\InvalidStyleException
-     * @throws \InvalidArgumentException
-     */
-    private function colorLines(array $tokenLines)
-    {
-        $lines = array();
-        foreach ($tokenLines as $lineCount => $tokenLine) {
-            $line = '';
-            foreach ($tokenLine as $token) {
-                list($tokenType, $tokenValue) = $token;
-                if ($this->color->hasTheme($tokenType)) {
-                    $line .= $this->color->apply($tokenType, $tokenValue);
-                } else {
-                    $line .= $tokenValue;
-                }
-            }
-            $lines[$lineCount] = $line;
-        }
-
-        return $lines;
-    }
-
-    /**
-     * @param array $lines
-     * @param null|int $markLine
-     * @return string
-     * @throws \JakubOnderka\PhpConsoleColor\InvalidStyleException
-     */
-    private function lineNumbers(array $lines, $markLine = null)
-    {
-        end($lines);
-        $lineStrlen = strlen(key($lines) + 1);
-
-        $snippet = '';
-        foreach ($lines as $i => $line) {
-            if ($markLine !== null) {
-                $snippet .= ($markLine === $i + 1 ? $this->color->apply(self::ACTUAL_LINE_MARK, '  > ') : '    ');
-            }
-
-            $snippet .= $this->color->apply(self::LINE_NUMBER, str_pad($i + 1, $lineStrlen, ' ', STR_PAD_LEFT) . '| ');
-            $snippet .= $line . PHP_EOL;
-        }
-
-        return $snippet;
-    }
-}
\ No newline at end of file
diff --git a/vendor/jakub-onderka/php-console-highlighter/tests/HigligterTest.php b/vendor/jakub-onderka/php-console-highlighter/tests/HigligterTest.php
deleted file mode 100644
index 187beb67bbe235dd59b5b82ec0776f97135e29c2..0000000000000000000000000000000000000000
--- a/vendor/jakub-onderka/php-console-highlighter/tests/HigligterTest.php
+++ /dev/null
@@ -1,274 +0,0 @@
-<?php
-namespace JakubOnderka\PhpConsoleHighlighter;
-
-class HighlighterTest extends \PHPUnit_Framework_TestCase
-{
-    /** @var Highlighter */
-    private $uut;
-
-    protected function getConsoleColorMock()
-    {
-        $mock = method_exists($this, 'createMock')
-            ? $this->createMock('\JakubOnderka\PhpConsoleColor\ConsoleColor')
-            : $this->getMock('\JakubOnderka\PhpConsoleColor\ConsoleColor');
-
-        $mock->expects($this->any())
-            ->method('apply')
-            ->will($this->returnCallback(function ($style, $text) {
-                return "<$style>$text</$style>";
-            }));
-
-        $mock->expects($this->any())
-            ->method('hasTheme')
-            ->will($this->returnValue(true));
-
-        return $mock;
-    }
-
-    protected function setUp()
-    {
-        $this->uut = new Highlighter($this->getConsoleColorMock());
-    }
-
-    protected function compare($original, $expected)
-    {
-        $output = $this->uut->getWholeFile($original);
-        $this->assertEquals($expected, $output);
-    }
-
-    public function testVariable()
-    {
-        $this->compare(
-            <<<EOL
-<?php
-echo \$a;
-EOL
-            ,
-            <<<EOL
-<token_default><?php</token_default>
-<token_keyword>echo </token_keyword><token_default>\$a</token_default><token_keyword>;</token_keyword>
-EOL
-        );
-    }
-
-    public function testInteger()
-    {
-        $this->compare(
-            <<<EOL
-<?php
-echo 43;
-EOL
-            ,
-            <<<EOL
-<token_default><?php</token_default>
-<token_keyword>echo </token_keyword><token_default>43</token_default><token_keyword>;</token_keyword>
-EOL
-        );
-    }
-
-    public function testFloat()
-    {
-        $this->compare(
-            <<<EOL
-<?php
-echo 43.3;
-EOL
-            ,
-            <<<EOL
-<token_default><?php</token_default>
-<token_keyword>echo </token_keyword><token_default>43.3</token_default><token_keyword>;</token_keyword>
-EOL
-        );
-    }
-
-    public function testHex()
-    {
-        $this->compare(
-            <<<EOL
-<?php
-echo 0x43;
-EOL
-            ,
-            <<<EOL
-<token_default><?php</token_default>
-<token_keyword>echo </token_keyword><token_default>0x43</token_default><token_keyword>;</token_keyword>
-EOL
-        );
-    }
-
-    public function testBasicFunction()
-    {
-        $this->compare(
-            <<<EOL
-<?php
-function plus(\$a, \$b) {
-    return \$a + \$b;
-}
-EOL
-            ,
-            <<<EOL
-<token_default><?php</token_default>
-<token_keyword>function </token_keyword><token_default>plus</token_default><token_keyword>(</token_keyword><token_default>\$a</token_default><token_keyword>, </token_keyword><token_default>\$b</token_default><token_keyword>) {</token_keyword>
-<token_keyword>    return </token_keyword><token_default>\$a </token_default><token_keyword>+ </token_keyword><token_default>\$b</token_default><token_keyword>;</token_keyword>
-<token_keyword>}</token_keyword>
-EOL
-        );
-    }
-
-    public function testStringNormal()
-    {
-        $this->compare(
-            <<<EOL
-<?php
-echo 'Ahoj světe';
-EOL
-            ,
-            <<<EOL
-<token_default><?php</token_default>
-<token_keyword>echo </token_keyword><token_string>'Ahoj světe'</token_string><token_keyword>;</token_keyword>
-EOL
-        );
-    }
-
-    public function testStringDouble()
-    {
-        $this->compare(
-            <<<EOL
-<?php
-echo "Ahoj světe";
-EOL
-            ,
-            <<<EOL
-<token_default><?php</token_default>
-<token_keyword>echo </token_keyword><token_string>"Ahoj světe"</token_string><token_keyword>;</token_keyword>
-EOL
-        );
-    }
-
-    public function testInstanceof()
-    {
-        $this->compare(
-            <<<EOL
-<?php
-\$a instanceof stdClass;
-EOL
-            ,
-            <<<EOL
-<token_default><?php</token_default>
-<token_default>\$a </token_default><token_keyword>instanceof </token_keyword><token_default>stdClass</token_default><token_keyword>;</token_keyword>
-EOL
-        );
-    }
-
-    /*
-     * Constants
-     */
-    public function testConstant()
-    {
-        $constants = array(
-            '__FILE__',
-            '__LINE__',
-            '__CLASS__',
-            '__FUNCTION__',
-            '__METHOD__',
-            '__TRAIT__',
-            '__DIR__',
-            '__NAMESPACE__'
-        );
-
-        foreach ($constants as $constant) {
-            $this->compare(
-                <<<EOL
-<?php
-$constant;
-EOL
-                ,
-                <<<EOL
-<token_default><?php</token_default>
-<token_default>$constant</token_default><token_keyword>;</token_keyword>
-EOL
-            );
-        }
-    }
-
-    /*
-     * Comments
-     */
-    public function testComment()
-    {
-        $this->compare(
-            <<<EOL
-<?php
-/* Ahoj */
-EOL
-            ,
-            <<<EOL
-<token_default><?php</token_default>
-<token_comment>/* Ahoj */</token_comment>
-EOL
-        );
-    }
-
-    public function testDocComment()
-    {
-        $this->compare(
-            <<<EOL
-<?php
-/** Ahoj */
-EOL
-            ,
-            <<<EOL
-<token_default><?php</token_default>
-<token_comment>/** Ahoj */</token_comment>
-EOL
-        );
-    }
-
-    public function testInlineComment()
-    {
-        $this->compare(
-            <<<EOL
-<?php
-// Ahoj
-EOL
-            ,
-            <<<EOL
-<token_default><?php</token_default>
-<token_comment>// Ahoj</token_comment>
-EOL
-        );
-    }
-
-    public function testHashComment()
-    {
-        $this->compare(
-            <<<EOL
-<?php
-# Ahoj
-EOL
-            ,
-            <<<EOL
-<token_default><?php</token_default>
-<token_comment># Ahoj</token_comment>
-EOL
-        );
-    }
-
-    public function testEmpty()
-    {
-        $this->compare(
-            ''
-            ,
-            ''
-        );
-    }
-
-    public function testWhitespace()
-    {
-        $this->compare(
-            ' '
-            ,
-            '<token_html> </token_html>'
-        );
-    }
-}
diff --git a/vendor/nikic/php-parser/.gitignore b/vendor/nikic/php-parser/.gitignore
deleted file mode 100644
index 8c7db2a6efc3034847d7c8281c9c2ab206f058bb..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/.gitignore
+++ /dev/null
@@ -1,4 +0,0 @@
-vendor/
-composer.lock
-grammar/kmyacc.exe
-grammar/y.output
diff --git a/vendor/nikic/php-parser/.travis.yml b/vendor/nikic/php-parser/.travis.yml
deleted file mode 100644
index d33d7a8b503661da5ad82c6fae5fd6bf649cd74f..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/.travis.yml
+++ /dev/null
@@ -1,31 +0,0 @@
-language: php
-dist: xenial
-sudo: false
-
-cache:
-  directories:
-    - $HOME/.composer/cache
-
-php:
-  - 7.0
-  - 7.1
-  - 7.2
-  - 7.3
-  - 7.4snapshot
-  - nightly
-
-install:
-  - if [ $TRAVIS_PHP_VERSION = '7.0' ]; then composer require satooshi/php-coveralls '~1.0'; fi
-  - composer install --prefer-dist --ignore-platform-reqs
-
-matrix:
-  allow_failures:
-    - php: nightly
-  fast_finish: true
-
-script:
-  - if [ $TRAVIS_PHP_VERSION = '7.0' ]; then vendor/bin/phpunit --coverage-clover build/logs/clover.xml; else vendor/bin/phpunit; fi
-  - if [ $TRAVIS_PHP_VERSION = '7.2' ]; then test_old/run-php-src.sh; fi
-
-after_success:
-  - if [ $TRAVIS_PHP_VERSION = '7.0' ]; then php vendor/bin/coveralls; fi
diff --git a/vendor/nikic/php-parser/CHANGELOG.md b/vendor/nikic/php-parser/CHANGELOG.md
deleted file mode 100644
index c3045d91c1642b0a3126965aef8e4272ea1435bf..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/CHANGELOG.md
+++ /dev/null
@@ -1,659 +0,0 @@
-Version 4.2.3-dev
------------------
-
-Nothing yet.
-
-Version 4.2.2 (2019-05-25)
---------------------------
-
-### Added
-
-* [PHP 7.4] Add support for arrow functions using a new `Expr\ArrowFunction` node. (#602)
-* [PHP 7.4] Add support for array spreads, using a new `unpack` subnode on `ArrayItem`. (#609)
-* Added support for inserting into empty list nodes in the formatting preserving pretty printer.
-
-### Changed
-
-* `php-parse` will now print messages to stderr, so that stdout only contains the actual result of
-  the operation (such as a JSON dump). (#605)
-
-### Fixed
-
-* Fixed attribute assignment for zero-length nop statements, and a related assertion failure in
-  the formatting-preserving pretty printer. (#589)
-
-Version 4.2.1 (2019-02-16)
---------------------------
-
-### Added
-
-* [PHP 7.4] Add support for `??=` operator through a new `AssignOp\Coalesce` node. (#575)
-
-Version 4.2.0 (2019-01-12)
---------------------------
-
-### Added
-
-* [PHP 7.4] Add support for typed properties through a new `type` subnode of `Stmt\Property`.
-  Additionally `Builder\Property` now has a `setType()` method. (#567)
-* Add `kind` attribute to `Cast\Double_`, which allows to distinguish between `(float)`,
-  `(double)` and `(real)`. The form of the cast will be preserved by the pretty printer. (#565)
-
-### Fixed
-
-* Remove assertion when pretty printing anonymous class with a name (#554).
-
-Version 4.1.1 (2018-12-26)
---------------------------
-
-### Fixed
-
-* Fix "undefined offset" notice when parsing specific malformed code (#551).
-
-### Added
-
-* Support error recovery for missing return type (`function foo() : {}`) (#544).
-
-Version 4.1.0 (2018-10-10)
---------------------------
-
-### Added
-
-* Added support for PHP 7.3 flexible heredoc/nowdoc strings, completing support for PHP 7.3. There
-  are two caveats for this feature:
-   * In some rare, pathological cases flexible heredoc/nowdoc strings change the interpretation of
-     existing doc strings. PHP-Parser will now use the new interpretation.
-   * Flexible heredoc/nowdoc strings require special support from the lexer. Because this is not
-     available on PHP versions before 7.3, support has to be emulated. This emulation is not perfect
-     and some cases which we do not expect to occur in practice (such as flexible doc strings being
-     nested within each other through abuse of variable-variable interpolation syntax) may not be
-     recognized correctly.
-* Added `DONT_TRAVERSE_CURRENT_AND_CHILDREN` to `NodeTraverser` to skip both traversal of child
-  nodes, and prevent subsequent visitors from visiting the current node.
-
-Version 4.0.4 (2018-09-18)
---------------------------
-
-### Added
-
-* The following methods have been added to `BuilderFactory`:
-  * `useTrait()` (fluent builder)
-  * `traitUseAdaptation()` (fluent builder)
-  * `useFunction()` (fluent builder)
-  * `useConst()` (fluent builder)
-  * `var()`
-  * `propertyFetch()`
-  
-### Deprecated
-
-* `Builder\Param::setTypeHint()` has been deprecated in favor of the newly introduced
-  `Builder\Param::setType()`.
-
-Version 4.0.3 (2018-07-15)
---------------------------
-
-### Fixed
-
-* Fixed possible undefined offset notice in formatting-preserving printer. (#513)
-
-### Added
-
-* Improved error recovery inside arrays.
-* Preserve trailing comment inside classes. **Note:** This change is possibly BC breaking if your
-  code validates that classes can only contain certain statement types. After this change, classes
-  can also contain Nop statements, while this was not previously possible. (#509)
-
-Version 4.0.2 (2018-06-03)
---------------------------
-
-### Added
-
-* Improved error recovery inside classes.
-* Support error recovery for `foreach` without `as`.
-* Support error recovery for parameters without variable (`function (Type ) {}`).
-* Support error recovery for functions without body (`function ($foo)`).
-
-Version 4.0.1 (2018-03-25)
---------------------------
-
-### Added
-
-* [PHP 7.3] Added support for trailing commas in function calls.
-* [PHP 7.3] Added support for by-reference array destructuring. 
-* Added checks to node traverser to prevent replacing a statement with an expression or vice versa.
-  This should prevent common mistakes in the implementation of node visitors.
-* Added the following methods to `BuilderFactory`, to simplify creation of expressions:
-  * `funcCall()`
-  * `methodCall()`
-  * `staticCall()`
-  * `new()`
-  * `constFetch()`
-  * `classConstFetch()`
-
-Version 4.0.0 (2018-02-28)
---------------------------
-
-* No significant code changes since the beta 1 release.
-
-Version 4.0.0-beta1 (2018-01-27)
---------------------------------
-
-### Fixed
-
-* In formatting-preserving pretty printer: Fixed indentation when inserting into lists. (#466)
-
-### Added
-
-* In formatting-preserving pretty printer: Improved formatting of elements inserted into multi-line
-  arrays.
-
-### Removed
-
-* The `Autoloader` class has been removed. It is now required to use the Composer autoloader.
-
-Version 4.0.0-alpha3 (2017-12-26)
----------------------------------
-
-### Fixed
-
-* In the formatting-preserving pretty printer:
-  * Fixed comment indentation.
-  * Fixed handling of inline HTML in the fallback case.
-  * Fixed insertion into list nodes that require creation of a code block.
-
-### Added
-
-* Added support for inserting at the start of list nodes in formatting-preserving pretty printer.
-
-Version 4.0.0-alpha2 (2017-11-10)
----------------------------------
-
-### Added
-
-* In the formatting-preserving pretty printer:
-  * Added support for changing modifiers.
-  * Added support for anonymous classes.
-  * Added support for removing from list nodes.
-  * Improved support for changing comments.
-* Added start token offsets to comments.
-
-Version 4.0.0-alpha1 (2017-10-18)
----------------------------------
-
-### Added
-
-* Added experimental support for format-preserving pretty-printing. In this mode formatting will be
-  preserved for parts of the code which have not been modified.
-* Added `replaceNodes` option to `NameResolver`, defaulting to true. If this option is disabled,
-  resolved names will be added as `resolvedName` attributes, instead of replacing the original
-  names.
-* Added `NodeFinder` class, which can be used to find nodes based on a callback or class name. This
-  is a utility to avoid custom node visitor implementations for simple search operations.
-* Added `ClassMethod::isMagic()` method.
-* Added `BuilderFactory` methods: `val()` method for creating an AST for a simple value, `concat()`
-  for creating concatenation trees, `args()` for preparing function arguments.
-* Added `NameContext` class, which encapsulates the `NameResolver` logic independently of the actual
-  AST traversal. This facilitates use in other context, such as class names in doc comments.
-  Additionally it provides an API for getting the shortest representation of a name.
-* Added `Node::setAttributes()` method.
-* Added `JsonDecoder`. This allows conversion JSON back into an AST.
-* Added `Name` methods `toLowerString()` and `isSpecialClassName()`.
-* Added `Identifier` and `VarLikeIdentifier` nodes, which are used in place of simple strings in
-  many places.
-* Added `getComments()`, `getStartLine()`, `getEndLine()`, `getStartTokenPos()`, `getEndTokenPos()`,
-  `getStartFilePos()` and `getEndFilePos()` methods to `Node`. These provide a more obvious access
-  point for the already existing attributes of the same name.
-* Added `ConstExprEvaluator` to evaluate constant expressions to PHP values.
-* Added `Expr\BinaryOp::getOperatorSigil()`, returning `+` for `Expr\BinaryOp\Plus`, etc.
-
-### Changed
-
-* Many subnodes that previously held simple strings now use `Identifier` (or `VarLikeIdentifier`)
-  nodes. Please see the UPGRADE-4.0 file for an exhaustive list of affected nodes and some notes on
-  possible impact.
-* Expression statements (`expr;`) are now represented using a `Stmt\Expression` node. Previously
-  these statements were directly represented as their constituent expression.
-* The `name` subnode of `Param` has been renamed to `var` and now contains a `Variable` rather than
-  a plain string.
-* The `name` subnode of `StaticVar` has been renamed to `var` and now contains a `Variable` rather
-  than a plain string.
-* The `var` subnode of `ClosureUse` now contains a `Variable` rather than a plain string.
-* The `var` subnode of `Catch` now contains a `Variable` rather than a plain string.
-* The `alias` subnode of `UseUse` is now `null` if no explicit alias is given. As such,
-  `use Foo\Bar` and `use Foo\Bar as Bar` are now represented differently. The `getAlias()` method
-  can be used to get the effective alias, even if it is not explicitly given.
-
-### Removed
-
-* Support for running on PHP 5 and HHVM has been removed. You can however still parse code of old
-  PHP versions (such as PHP 5.2), while running on PHP 7.
-* Removed `type` subnode on `Class`, `ClassMethod` and `Property` nodes. Use `flags` instead.
-* The `ClassConst::isStatic()` method has been removed. Constants cannot have a static modifier.
-* The `NodeTraverser` no longer accepts `false` as a return value from a `leaveNode()` method.
-  `NodeTraverser::REMOVE_NODE` should be returned instead.
-* The `Node::setLine()` method has been removed. If you really need to, you can use `setAttribute()`
-  instead.
-* The misspelled `Class_::VISIBILITY_MODIFER_MASK` constant has been dropped in favor of
-  `Class_::VISIBILITY_MODIFIER_MASK`.
-* The XML serializer has been removed. As such, the classes `Serializer\XML`, and
-  `Unserializer\XML`, as well as the interfaces `Serializer` and `Unserializer` no longer exist.
-* The `BuilderAbstract` class has been removed. It's functionality is moved into `BuilderHelpers`.
-  However, this is an internal class and should not be used directly.
-
-Version 3.1.5 (2018-02-28)
---------------------------
-
-### Fixed
-
-* Fixed duplicate comment assignment in switch statements. (#469)
-* Improve compatibility with PHP-Scoper. (#477)
-
-Version 3.1.4 (2018-01-25)
---------------------------
-
-### Fixed
-
-* Fixed pretty printing of `-(-$x)` and `+(+$x)`. (#459)
-
-Version 3.1.3 (2017-12-26)
---------------------------
-
-### Fixed
-
-* Improve compatibility with php-scoper, by supporting prefixed namespaces in
-  `NodeAbstract::getType()`.
-
-Version 3.1.2 (2017-11-04)
---------------------------
-
-### Fixed
-
-* Comments on empty blocks are now preserved on a `Stmt\Nop` node. (#382)
-
-### Added
-
-* Added `kind` attribute for `Stmt\Namespace_` node, which is one of `KIND_SEMICOLON` or
-  `KIND_BRACED`. (#417)
-* Added `setDocComment()` method to namespace builder. (#437)
-
-Version 3.1.1 (2017-09-02)
---------------------------
-
-### Fixed
-
-* Fixed syntax error on comment after brace-style namespace declaration. (#412)
-* Added support for TraitUse statements in trait builder. (#413)
-
-Version 3.1.0 (2017-07-28)
---------------------------
-
-### Added
-
-* [PHP 7.2] Added support for trailing comma in group use statements.
-* [PHP 7.2] Added support for `object` type. This means `object` types will now be represented as a
-  builtin type (a simple `"object"` string), rather than a class `Name`.
-
-### Fixed
-
-* Floating-point numbers are now printed correctly if the LC_NUMERIC locale uses a comma as decimal
-  separator.
-
-### Changed
-
-* `Name::$parts` is no longer deprecated.
-
-Version 3.0.6 (2017-06-28)
---------------------------
-
-### Fixed
-
-* Fixed the spelling of `Class_::VISIBILITY_MODIFIER_MASK`. The previous spelling of
-  `Class_::VISIBILITY_MODIFER_MASK` is preserved for backwards compatibility.
-* The pretty printing will now preserve comments inside array literals and function calls by
-  printing the array items / function arguments on separate lines. Array literals and functions that
-  do not contain comments are not affected.
-
-### Added
-
-* Added `Builder\Param::makeVariadic()`.
-
-### Deprecated
-
-* The `Node::setLine()` method has been deprecated.
-
-Version 3.0.5 (2017-03-05)
---------------------------
-
-### Fixed
-
-* Name resolution of `NullableType`s is now performed earlier, so that a fully resolved signature is
-  available when a function is entered. (#360)
-* `Error` nodes are now considered empty, while previously they extended until the token where the
-  error occurred. This made some nodes larger than expected. (#359)
-* Fixed notices being thrown during error recovery in some situations. (#362)
-
-Version 3.0.4 (2017-02-10)
---------------------------
-
-### Fixed
-
-* Fixed some extensibility issues in pretty printer (`pUseType()` is now public and `pPrec()` calls
-  into `p()`, instead of directly dispatching to the type-specific printing method).
-* Fixed notice in `bin/php-parse` script.
-
-### Added
-
-* Error recovery from missing semicolons is now supported in more cases.
-* Error recovery from trailing commas in positions where PHP does not support them is now supported.
-
-Version 3.0.3 (2017-02-03)
---------------------------
-
-### Fixed
-
-* In `"$foo[0]"` the `0` is now parsed as an `LNumber` rather than `String`. (#325)
-* Ensure integers and floats are always pretty printed preserving semantics, even if the particular
-  value can only be manually constructed.
-* Throw a `LogicException` when trying to pretty-print an `Error` node. Previously this resulted in
-  an undefined method exception or fatal error.
-
-### Added
-
-* [PHP 7.1] Added support for negative interpolated offsets: `"$foo[-1]"`
-* Added `preserveOriginalNames` option to `NameResolver`. If this option is enabled, an
-  `originalName` attribute, containing the unresolved name, will be added to each resolved name.
-* Added `php-parse --with-positions` option, which dumps nodes with position information.
-
-### Deprecated
-
-* The XML serializer has been deprecated. In particular, the classes `Serializer\XML`,
-  `Unserializer\XML`, as well as the interfaces `Serializer` and `Unserializer` are deprecated.
-
-Version 3.0.2 (2016-12-06)
---------------------------
-
-### Fixed
-
-* Fixed name resolution of nullable types. (#324)
-* Fixed pretty-printing of nullable types.
-
-Version 3.0.1 (2016-12-01)
---------------------------
-
-### Fixed
-
-* Fixed handling of nested `list()`s: If the nested list was unkeyed, it was directly included in
-  the list items. If it was keyed, it was wrapped in `ArrayItem`. Now nested `List_` nodes are
-  always wrapped in `ArrayItem`s. (#321)
-
-Version 3.0.0 (2016-11-30)
---------------------------
-
-### Added
-
-* Added support for dumping node positions in the NodeDumper through the `dumpPositions` option.
-* Added error recovery support for `$`, `new`, `Foo::`.
-
-Version 3.0.0-beta2 (2016-10-29)
---------------------------------
-
-This release primarily improves our support for error recovery.
-
-### Added
-
-* Added `Node::setDocComment()` method.
-* Added `Error::getMessageWithColumnInfo()` method.
-* Added support for recovery from lexer errors.
-* Added support for recovering from "special" errors (i.e. non-syntax parse errors).
-* Added precise location information for lexer errors.
-* Added `ErrorHandler` interface, and `ErrorHandler\Throwing` and `ErrorHandler\Collecting` as
-  specific implementations. These provide a general mechanism for handling error recovery.
-* Added optional `ErrorHandler` argument to `Parser::parse()`, `Lexer::startLexing()` and
-  `NameResolver::__construct()`.
-* The `NameResolver` now adds a `namespacedName` attribute on name nodes that cannot be statically
-  resolved (unqualified unaliased function or constant names in namespaces).
-
-### Fixed
-
-* Fixed attribute assignment for `GroupUse` prefix and variables in interpolated strings.
-
-### Changed
-
-* The constants on `NameTraverserInterface` have been moved into the `NameTraverser` class.
-* Due to the error handling changes, the `Parser` interface and `Lexer` API have changed.
-* The emulative lexer now directly postprocesses tokens, instead of using `~__EMU__~` sequences.
-  This changes the protected API of the lexer.
-* The `Name::slice()` method now returns `null` for empty slices, previously `new Name([])` was
-  used. `Name::concat()` now also supports concatenation with `null`.
-
-### Removed
-
-* Removed `Name::append()` and `Name::prepend()`. These mutable methods have been superseded by
-  the immutable `Name::concat()`.
-* Removed `Error::getRawLine()` and `Error::setRawLine()`. These methods have been superseded by
-  `Error::getStartLine()` and `Error::setStartLine()`.
-* Removed support for node cloning in the `NodeTraverser`.
-* Removed `$separator` argument from `Name::toString()`.
-* Removed `throw_on_error` parser option and `Parser::getErrors()` method. Use the `ErrorHandler`
-  mechanism instead.
-
-Version 3.0.0-beta1 (2016-09-16)
---------------------------------
-
-### Added
-
-* [7.1] Function/method and parameter builders now support PHP 7.1 type hints (void, iterable and
-  nullable types).
-* Nodes and Comments now implement `JsonSerializable`. The node kind is stored in a `nodeType`
-  property.
-* The `InlineHTML` node now has an `hasLeadingNewline` attribute, that specifies whether the
-  preceding closing tag contained a newline. The pretty printer honors this attribute.
-* Partial parsing of `$obj->` (with missing property name) is now supported in error recovery mode.
-* The error recovery mode is now exposed in the `php-parse` script through the `--with-recovery`
-  or `-r` flags.
-
-The following changes are also part of PHP-Parser 2.1.1:
-
-* The PHP 7 parser will now generate a parse error for `$var =& new Obj` assignments.
-* Comments on free-standing code blocks will now be retained as comments on the first statement in
-  the code block.
-
-Version 3.0.0-alpha1 (2016-07-25)
----------------------------------
-
-### Added
-
-* [7.1] Added support for `void` and `iterable` types. These will now be represented as strings
-  (instead of `Name` instances) similar to other builtin types.
-* [7.1] Added support for class constant visibility. The `ClassConst` node now has a `flags` subnode
-  holding the visibility modifier, as well as `isPublic()`, `isProtected()` and `isPrivate()`
-  methods. The constructor changed to accept the additional subnode.
-* [7.1] Added support for nullable types. These are represented using a new `NullableType` node
-  with a single `type` subnode.
-* [7.1] Added support for short array destructuring syntax. This means that `Array` nodes may now
-  appear as the left-hand-side of assignments and foreach value targets. Additionally the array
-  items may now contain `null` values if elements are skipped.
-* [7.1] Added support for keys in list() destructuring. The `List` subnode `vars` has been renamed
-  to `items` and now contains `ArrayItem`s instead of plain variables.
-* [7.1] Added support for multi-catch. The `Catch` subnode `type` has been renamed to `types` and
-  is now an array of `Name`s.
-* `Name::slice()` now supports lengths and negative offsets. This brings it in line with
-  `array_slice()` functionality.
-
-### Changed
-
-Due to PHP 7.1 support additions described above, the node structure changed as follows:
-
-* `void` and `iterable` types are now stored as strings if the PHP 7 parser is used.
-* The `ClassConst` constructor changed to accept an additional `flags` subnode.
-* The `Array` subnode `items` may now contain `null` elements (destructuring).
-* The `List` subnode `vars` has been renamed to `items` and now contains `ArrayItem`s instead of
-  plain variables.
-* The `Catch` subnode `type` has been renamed to `types` and is now an array of `Name`s.
-
-Additionally the following changes were made:
-
-* The `type` subnode on `Class`, `ClassMethod` and `Property` has been renamed to `flags`. The
-  `type` subnode has retained for backwards compatibility and is populated to the same value as
-  `flags`. However, writes to `type` will not update `flags`.
-* The `TryCatch` subnode `finallyStmts` has been replaced with a `finally` subnode that holds an
-  explicit `Finally` node. This allows for more accurate attribute assignment.
-* The `Trait` constructor now has the same form as the `Class` and `Interface` constructors: It
-  takes an array of subnodes. Unlike classes/interfaces, traits can only have a `stmts` subnode.
-* The `NodeDumper` now prints class/method/property/constant modifiers, as well as the include and
-  use type in a textual representation, instead of only showing the number.
-* All methods on `PrettyPrinter\Standard` are now protected. Previously most of them were public.
-
-### Removed
-
-* Removed support for running on PHP 5.4. It is however still possible to parse PHP 5.2-5.4 code
-  while running on a newer version.
-* The deprecated `Comment::setLine()` and `Comment::setText()` methods have been removed.
-* The deprecated `Name::set()`, `Name::setFirst()` and `Name::setLast()` methods have been removed.
-
-Version 2.1.1 (2016-09-16)
---------------------------
-
-### Changed
-
-* The pretty printer will now escape all control characters in the range `\x00-\x1F` inside double
-  quoted strings. If no special escape sequence is available, an octal escape will be used.
-* The quality of the error recovery has been improved. In particular unterminated expressions should
-  be handled more gracefully.
-* The PHP 7 parser will now generate a parse error for `$var =& new Obj` assignments.
-* Comments on free-standing code blocks will no be retained as comments on the first statement in
-  the code block.
-
-Version 2.1.0 (2016-04-19)
---------------------------
-
-### Fixed
-
-* Properly support `B""` strings (with uppercase `B`) in a number of places.
-* Fixed reformatting of indented parts in a certain non-standard comment style.
-
-### Added
-
-* Added `dumpComments` option to node dumper, to enable dumping of comments associated with nodes.
-* Added `Stmt\Nop` node, that is used to collect comments located at the end of a block or at the
-  end of a file (without a following node with which they could otherwise be associated).
-* Added `kind` attribute to `Expr\Exit` to distinguish between `exit` and `die`.
-* Added `kind` attribute to `Scalar\LNumber` to distinguish between decimal, binary, octal and
-  hexadecimal numbers.
-* Added `kind` attribute to `Expr\Array` to distinguish between `array()` and `[]`.
-* Added `kind` attribute to `Scalar\String` and `Scalar\Encapsed` to distinguish between
-  single-quoted, double-quoted, heredoc and nowdoc string.
-* Added `docLabel` attribute to `Scalar\String` and `Scalar\Encapsed`, if it is a heredoc or
-  nowdoc string.
-* Added start file offset information to `Comment` nodes.
-* Added `setReturnType()` method to function and method builders.
-* Added `-h` and `--help` options to `php-parse` script.
-
-### Changed
-
-* Invalid octal literals now throw a parse error in PHP 7 mode.
-* The pretty printer takes all the new attributes mentioned in the previous section into account.
-* The protected `AbstractPrettyPrinter::pComments()` method no longer returns a trailing newline.
-* The bundled autoloader supports library files being stored in a different directory than
-  `PhpParser` for easier downstream distribution.
-
-### Deprecated
-
-* The `Comment::setLine()` and `Comment::setText()` methods have been deprecated. Construct new
-  objects instead.
-
-### Removed
-
-* The internal (but public) method `Scalar\LNumber::parse()` has been removed. A non-internal
-  `LNumber::fromString()` method has been added instead.
-
-Version 2.0.1 (2016-02-28)
---------------------------
-
-### Fixed
-
-* `declare() {}` and `declare();` are not semantically equivalent and will now result in different
-  ASTs. The format case will have an empty `stmts` array, while the latter will set `stmts` to
-  `null`.
-* Magic constants are now supported as semi-reserved keywords.
-* A shebang line like `#!/usr/bin/env php` is now allowed at the start of a namespaced file.
-  Previously this generated an exception.
-* The `prettyPrintFile()` method will not strip a trailing `?>` from the raw data that follows a
-  `__halt_compiler()` statement.
-* The `prettyPrintFile()` method will not strip an opening `<?php` if the file starts with a
-  comment followed by InlineHTML.
-
-Version 2.0.0 (2015-12-04)
---------------------------
-
-### Changed
-
-* String parts of encapsed strings are now represented using `Scalar\EncapsStringPart` nodes.
-  Previously raw strings were used. This affects the `parts` child of `Scalar\Encaps` and
-  `Expr\ShellExec`. The change has been done to allow assignment of attributes to encapsed string
-  parts.
-
-Version 2.0.0-beta1 (2015-10-21)
---------------------------------
-
-### Fixed
-
-* Fixed issue with too many newlines being stripped at the end of heredoc/nowdoc strings in some
-  cases. (#227)
-
-### Changed
-
-* Update group use support to be in line with recent PHP 7.0 builds.
-* Renamed `php-parse.php` to `php-parse` and registered it as a composer bin.
-* Use composer PSR-4 autoloader instead of custom autoloader.
-* Specify phpunit as a dev dependency.
-
-### Added
-
-* Added `shortArraySyntax` option to pretty printer, to print all arrays using short syntax.
-
-Version 2.0.0-alpha1 (2015-07-14)
----------------------------------
-
-A more detailed description of backwards incompatible changes can be found in the
-[upgrading guide](UPGRADE-2.0.md).
-
-### Removed
-
-* Removed support for running on PHP 5.3. It is however still possible to parse PHP 5.2 and PHP 5.3
-  code while running on a newer version.
-* Removed legacy class name aliases. This includes the old non-namespaced class names and the old
-  names for classes that were renamed for PHP 7 compatibility.
-* Removed support for legacy node format. All nodes must have a `getSubNodeNames()` method now.
-
-### Added
-
-* Added support for remaining PHP 7 features that were not present in 1.x:
-  * Group use declarations. These are represented using `Stmt\GroupUse` nodes. Furthermore a `type`
-    attribute was added to `Stmt\UseUse` to handle mixed group use declarations.
-  * Uniform variable syntax.
-  * Generalized yield operator.
-  * Scalar type declarations. These are presented using `'bool'`, `'int'`, `'float'` and `'string'`
-    as the type. The PHP 5 parser also accepts these, however they'll be `Name` instances there.
-  * Unicode escape sequences.
-* Added `PhpParser\ParserFactory` class, which should be used to create parser instances.
-* Added `Name::concat()` which concatenates two names.
-* Added `Name->slice()` which takes a subslice of a name.
-
-### Changed
-
-* `PhpParser\Parser` is now an interface, implemented by `Parser\Php5`, `Parser\Php7` and
-  `Parser\Multiple`. The `Multiple` parser will try multiple parsers, until one succeeds.
-* Token constants are now defined on `PhpParser\Parser\Tokens` rather than `PhpParser\Parser`.
-* The `Name->set()`, `Name->append()`, `Name->prepend()` and `Name->setFirst()` methods are
-  deprecated in favor of `Name::concat()` and `Name->slice()`.
-* The `NodeTraverser` no longer clones nodes by default. The old behavior can be restored by
-  passing `true` to the constructor.
-* The constructor for `Scalar` nodes no longer has a default value. E.g. `new LNumber()` should now
-  be written as `new LNumber(0)`.
-
----
-
-**This changelog only includes changes from the 2.0 series. For older changes see the
-[1.x series changelog](https://github.com/nikic/PHP-Parser/blob/1.x/CHANGELOG.md) and the
-[0.9 series changelog](https://github.com/nikic/PHP-Parser/blob/0.9/CHANGELOG.md).**
diff --git a/vendor/nikic/php-parser/LICENSE b/vendor/nikic/php-parser/LICENSE
index 920cc5b1f4cc5d97d75284c285c164a0ef775da2..2e56718358791b095d659b54f6c6e03f2bfb5f4f 100644
--- a/vendor/nikic/php-parser/LICENSE
+++ b/vendor/nikic/php-parser/LICENSE
@@ -1,31 +1,29 @@
-Copyright (c) 2011-2018 by Nikita Popov.
+BSD 3-Clause License
 
-Some rights reserved.
+Copyright (c) 2011, Nikita Popov
+All rights reserved.
 
 Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
+modification, are permitted provided that the following conditions are met:
 
-    * Redistributions of source code must retain the above copyright
-      notice, this list of conditions and the following disclaimer.
+1. Redistributions of source code must retain the above copyright notice, this
+   list of conditions and the following disclaimer.
 
-    * Redistributions in binary form must reproduce the above
-      copyright notice, this list of conditions and the following
-      disclaimer in the documentation and/or other materials provided
-      with the distribution.
+2. Redistributions in binary form must reproduce the above copyright notice,
+   this list of conditions and the following disclaimer in the documentation
+   and/or other materials provided with the distribution.
 
-    * The names of the contributors may not be used to endorse or
-      promote products derived from this software without specific
-      prior written permission.
+3. Neither the name of the copyright holder nor the names of its
+   contributors may be used to endorse or promote products derived from
+   this software without specific prior written permission.
 
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/vendor/nikic/php-parser/README.md b/vendor/nikic/php-parser/README.md
index e62748eb1c19fcddcd5deefafefabc97242bd312..f1dd929d7ff2b782461b475ab46e746fc9788da4 100644
--- a/vendor/nikic/php-parser/README.md
+++ b/vendor/nikic/php-parser/README.md
@@ -3,10 +3,10 @@ PHP Parser
 
 [![Build Status](https://travis-ci.org/nikic/PHP-Parser.svg?branch=master)](https://travis-ci.org/nikic/PHP-Parser) [![Coverage Status](https://coveralls.io/repos/github/nikic/PHP-Parser/badge.svg?branch=master)](https://coveralls.io/github/nikic/PHP-Parser?branch=master)
 
-This is a PHP 5.2 to PHP 7.3 parser written in PHP. Its purpose is to simplify static code analysis and
+This is a PHP 5.2 to PHP 7.4 parser written in PHP. Its purpose is to simplify static code analysis and
 manipulation.
 
-[**Documentation for version 4.x**][doc_master] (stable; for running on PHP >= 7.0; for parsing PHP 5.2 to PHP 7.3).
+[**Documentation for version 4.x**][doc_master] (stable; for running on PHP >= 7.0; for parsing PHP 5.2 to PHP 7.4).
 
 [Documentation for version 3.x][doc_3_x] (unsupported; for running on PHP >= 5.5; for parsing PHP 5.2 to PHP 7.2).
 
diff --git a/vendor/nikic/php-parser/UPGRADE-1.0.md b/vendor/nikic/php-parser/UPGRADE-1.0.md
deleted file mode 100644
index 6a9ee2622b92ffbfba2c39cf9f6ba633d7c46fc0..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/UPGRADE-1.0.md
+++ /dev/null
@@ -1,121 +0,0 @@
-Upgrading from PHP-Parser 0.9 to 1.0
-====================================
-
-### PHP version requirements
-
-PHP-Parser now requires PHP 5.3 or newer to run. It is however still possible to *parse* PHP 5.2 source code, while
-running on a newer version.
-
-### Move to namespaced names
-
-The library has been moved to use namespaces with the `PhpParser` vendor prefix. However, the old names using
-underscores are still available as aliases, as such most code should continue running on the new version without
-further changes.
-
-Old (still works, but discouraged):
-
-```php
-$parser = new \PHPParser_Parser(new \PHPParser_Lexer_Emulative);
-$prettyPrinter = new \PHPParser_PrettyPrinter_Default;
-```
-
-New:
-
-```php
-$parser = new \PhpParser\Parser(new PhpParser\Lexer\Emulative);
-$prettyPrinter = new \PhpParser\PrettyPrinter\Standard;
-```
-
-Note that the `PHPParser` prefix was changed to `PhpParser`. While PHP class names are technically case-insensitive,
-the autoloader will not be able to load `PHPParser\Parser` or other case variants.
-
-Due to conflicts with reserved keywords, some class names now end with an underscore, e.g. `PHPParser_Node_Stmt_Class`
-is now `PhpParser\Node\Stmt\Class_`. (But as usual, the old name is still available.)
-
-### Changes to `Node::getType()`
-
-The `Node::getType()` method continues to return names using underscores instead of namespace separators and also does
-not contain the trailing underscore that may be present in the class name. As such its output will not change in many
-cases.
-
-However, some node classes have been moved to a different namespace or renamed, which will result in a different
-`Node::getType()` output:
-
-```
-Expr_AssignBitwiseAnd => Expr_AssignOp_BitwiseAnd
-Expr_AssignBitwiseOr  => Expr_AssignOp_BitwiseOr
-Expr_AssignBitwiseXor => Expr_AssignOp_BitwiseXor
-Expr_AssignConcat     => Expr_AssignOp_Concat
-Expr_AssignDiv        => Expr_AssignOp_Div
-Expr_AssignMinus      => Expr_AssignOp_Minus
-Expr_AssignMod        => Expr_AssignOp_Mod
-Expr_AssignMul        => Expr_AssignOp_Mul
-Expr_AssignPlus       => Expr_AssignOp_Plus
-Expr_AssignShiftLeft  => Expr_AssignOp_ShiftLeft
-Expr_AssignShiftRight => Expr_AssignOp_ShiftRight
-
-Expr_BitwiseAnd       => Expr_BinaryOp_BitwiseAnd
-Expr_BitwiseOr        => Expr_BinaryOp_BitwiseOr
-Expr_BitwiseXor       => Expr_BinaryOp_BitwiseXor
-Expr_BooleanAnd       => Expr_BinaryOp_BooleanAnd
-Expr_BooleanOr        => Expr_BinaryOp_BooleanOr
-Expr_Concat           => Expr_BinaryOp_Concat
-Expr_Div              => Expr_BinaryOp_Div
-Expr_Equal            => Expr_BinaryOp_Equal
-Expr_Greater          => Expr_BinaryOp_Greater
-Expr_GreaterOrEqual   => Expr_BinaryOp_GreaterOrEqual
-Expr_Identical        => Expr_BinaryOp_Identical
-Expr_LogicalAnd       => Expr_BinaryOp_LogicalAnd
-Expr_LogicalOr        => Expr_BinaryOp_LogicalOr
-Expr_LogicalXor       => Expr_BinaryOp_LogicalXor
-Expr_Minus            => Expr_BinaryOp_Minus
-Expr_Mod              => Expr_BinaryOp_Mod
-Expr_Mul              => Expr_BinaryOp_Mul
-Expr_NotEqual         => Expr_BinaryOp_NotEqual
-Expr_NotIdentical     => Expr_BinaryOp_NotIdentical
-Expr_Plus             => Expr_BinaryOp_Plus
-Expr_ShiftLeft        => Expr_BinaryOp_ShiftLeft
-Expr_ShiftRight       => Expr_BinaryOp_ShiftRight
-Expr_Smaller          => Expr_BinaryOp_Smaller
-Expr_SmallerOrEqual   => Expr_BinaryOp_SmallerOrEqual
-
-Scalar_ClassConst     => Scalar_MagicConst_Class
-Scalar_DirConst       => Scalar_MagicConst_Dir
-Scalar_FileConst      => Scalar_MagicConst_File
-Scalar_FuncConst      => Scalar_MagicConst_Function
-Scalar_LineConst      => Scalar_MagicConst_Line
-Scalar_MethodConst    => Scalar_MagicConst_Method
-Scalar_NSConst        => Scalar_MagicConst_Namespace
-Scalar_TraitConst     => Scalar_MagicConst_Trait
-```
-
-These changes may affect custom pretty printers and code comparing the return value of `Node::getType()` to specific
-strings.
-
-### Miscellaneous
-
-  * The classes `Template` and `TemplateLoader` have been removed. You should use some other [code generation][code_gen]
-    project built on top of PHP-Parser instead.
-
-  * The `PrettyPrinterAbstract::pStmts()` method now emits a leading newline if the statement list is not empty.
-    Custom pretty printers should remove the explicit newline before `pStmts()` calls.
-
-    Old:
-
-    ```php
-    public function pStmt_Trait(PHPParser_Node_Stmt_Trait $node) {
-        return 'trait ' . $node->name
-             . "\n" . '{' . "\n" . $this->pStmts($node->stmts) . "\n" . '}';
-    }
-    ```
-
-    New:
-
-    ```php
-    public function pStmt_Trait(Stmt\Trait_ $node) {
-        return 'trait ' . $node->name
-             . "\n" . '{' . $this->pStmts($node->stmts) . "\n" . '}';
-    }
-    ```
-
-  [code_gen]: https://github.com/nikic/PHP-Parser/wiki/Projects-using-the-PHP-Parser#code-generation
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/UPGRADE-2.0.md b/vendor/nikic/php-parser/UPGRADE-2.0.md
deleted file mode 100644
index 1c61de54fb5581243eae6698d0838a389f007c40..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/UPGRADE-2.0.md
+++ /dev/null
@@ -1,74 +0,0 @@
-Upgrading from PHP-Parser 1.x to 2.0
-====================================
-
-### PHP version requirements
-
-PHP-Parser now requires PHP 5.4 or newer to run. It is however still possible to *parse* PHP 5.2 and
-PHP 5.3 source code, while running on a newer version.
-
-### Creating a parser instance
-
-Parser instances should now be created through the `ParserFactory`. Old direct instantiation code
-will not work, because the parser class was renamed.
-
-Old:
-
-```php
-use PhpParser\Parser, PhpParser\Lexer;
-$parser = new Parser(new Lexer\Emulative);
-```
-
-New:
-
-```php
-use PhpParser\ParserFactory;
-$parser = (new ParserFactory)->create(ParserFactory::PREFER_PHP7);
-```
-
-The first argument to `ParserFactory` determines how different PHP versions are handled. The
-possible values are:
-
- * `ParserFactory::PREFER_PHP7`: Try to parse code as PHP 7. If this fails, try to parse it as PHP 5.
- * `ParserFactory::PREFER_PHP5`: Try to parse code as PHP 5. If this fails, try to parse it as PHP 7.
- * `ParserFactory::ONLY_PHP7`: Parse code as PHP 7.
- * `ParserFactory::ONLY_PHP5`: Parse code as PHP 5.
-
-For most practical purposes the difference between `PREFER_PHP7` and `PREFER_PHP5` is mainly whether
-a scalar type hint like `string` will be stored as `'string'` (PHP 7) or as `new Name('string')`
-(PHP 5).
-
-To use a custom lexer, pass it as the second argument to the `create()` method:
-
-```php
-use PhpParser\ParserFactory;
-$lexer = new MyLexer;
-$parser = (new ParserFactory)->create(ParserFactory::PREFER_PHP7, $lexer);
-```
-
-### Rename of the `PhpParser\Parser` class
-
-`PhpParser\Parser` is now an interface, which is implemented by `Parser\Php5`, `Parser\Php7` and
-`Parser\Multiple`. Parser tokens are now defined in `Parser\Tokens`. If you use the `ParserFactory`
-described above to create your parser instance, these changes should have no further impact on you.
-
-### Removal of legacy aliases
-
-All legacy aliases for classes have been removed. This includes the old non-namespaced `PHPParser_`
-classes, as well as the classes that had to be renamed for PHP 7 support.
-
-### Deprecations
-
-The `set()`, `setFirst()`, `append()` and `prepend()` methods of the `Node\Name` class have been
-deprecated. Instead `Name::concat()` and `Name->slice()` should be used.
-
-### Miscellaneous
-
-* The `NodeTraverser` no longer clones nodes by default. If you want to restore the old behavior,
-  pass `true` to the constructor.
-* The legacy node format has been removed. If you use custom nodes, they are now expected to
-  implement a `getSubNodeNames()` method.
-* The default value for `Scalar` node constructors was removed. This means that something like
-  `new LNumber()` should be replaced by `new LNumber(0)`.
-* String parts of encapsed strings are now represented using `Scalar\EncapsStringPart` nodes, while
-  previously raw strings were used. This affects the `parts` child of `Scalar\Encaps` and
-  `Expr\ShellExec`.
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/UPGRADE-3.0.md b/vendor/nikic/php-parser/UPGRADE-3.0.md
deleted file mode 100644
index 9a2895f4267ae72f36c232fc3f8a4a93a52760e1..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/UPGRADE-3.0.md
+++ /dev/null
@@ -1,160 +0,0 @@
-Upgrading from PHP-Parser 2.x to 3.0
-====================================
-
-The backwards-incompatible changes in this release may be summarized as follows:
-
- * The specific details of the node representation have changed in some cases, primarily to
-   accommodate new PHP 7.1 features.
- * There have been significant changes to the error recovery implementation. This may affect you,
-   if you used the error recovery mode or have a custom lexer implementation.
- * A number of deprecated methods were removed.
-
-### PHP version requirements
-
-PHP-Parser now requires PHP 5.5 or newer to run. It is however still possible to *parse* PHP 5.2,
-5.3 and 5.4 source code, while running on a newer version.
-
-### Changes to the node structure
-
-The following changes are likely to require code changes if the respective nodes are used:
-
- * The `List` subnode `vars` has been renamed to `items` and now contains `ArrayItem`s instead of
-   plain variables.
- * The `Catch` subnode `type` has been renamed to `types` and is now an array of `Name`s.
- * The `TryCatch` subnode `finallyStmts` has been replaced with a `finally` subnode that holds an
-   explicit `Finally` node.
- * The `type` subnode on `Class`, `ClassMethod` and `Property` has been renamed to `flags`. The
-   `type` subnode has retained for backwards compatibility and is populated to the same value as
-   `flags`. However, writes to `type` will not update `flags` and use of `type` is discouraged.
-
-The following changes are unlikely to require code changes:
-
- * The `ClassConst` constructor changed to accept an additional `flags` subnode.
- * The `Trait` constructor now has the same form as the `Class` and `Interface` constructors: It
-   takes an array of subnodes. Unlike classes/interfaces, traits can only have a `stmts` subnode.
- * The `Array` subnode `items` may now contain `null` elements (due to destructuring).
- * `void` and `iterable` types are now stored as strings if the PHP 7 parser is used. Previously
-   these would have been represented as `Name` instances.
-
-### Changes to error recovery mode
-
-Previously, error recovery mode was enabled by setting the `throwOnError` option to `false` when
-creating the parser, while collected errors were retrieved using the `getErrors()` method:
-
-```php
-$lexer = ...;
-$parser = (new ParserFactory)->create(ParserFactor::ONLY_PHP7, $lexer, [
-    'throwOnError' => true,
-]);
-
-$stmts = $parser->parse($code);
-$errors = $parser->getErrors();
-if ($errors) {
-    handleErrors($errors);
-}
-processAst($stmts);
-```
-
-Both the `throwOnError` option and the `getErrors()` method have been removed in PHP-Parser 3.0.
-Instead an instance of `ErrorHandler\Collecting` should be passed to the `parse()` method:
-
-```php
-$lexer = ...;
-$parser = (new ParserFactory)->create(ParserFactor::ONLY_PHP7, $lexer);
-
-$errorHandler = new ErrorHandler\Collecting;
-$stmts = $parser->parse($code, $errorHandler);
-if ($errorHandler->hasErrors()) {
-    handleErrors($errorHandler->getErrors());
-}
-processAst($stmts);
-```
-
-#### Multiple parser fallback in error recovery mode
-
-As a result of this change, if a `Multiple` parser is used (e.g. through the `ParserFactory` using
-`PREFER_PHP7` or `PREFER_PHP5`), it will now return the result of the first *non-throwing* parse. As
-parsing never throws in error recovery mode, the result from the first parser will always be
-returned.
-
-The PHP 7 parser is a superset of the PHP 5 parser, with the exceptions that `=& new` and
-`global $$foo->bar` are not supported (other differences are in representation only). The PHP 7
-parser will be able to recover from the error in both cases. For this reason, this change will
-likely pass unnoticed if you do not specifically test for this syntax.
-
-It is possible to restore the precise previous behavior with the following code:
-
-```php
-$lexer = ...;
-$parser7 = new Parser\Php7($lexer);
-$parser5 = new Parser\Php5($lexer);
-
-$errors7 = new ErrorHandler\Collecting();
-$stmts7 = $parser7->parse($code, $errors7);
-if ($errors7->hasErrors()) {
-    $errors5 = new ErrorHandler\Collecting();
-    $stmts5 = $parser5->parse($code, $errors5);
-    if (!$errors5->hasErrors()) {
-        // If PHP 7 parse has errors but PHP 5 parse has no errors, use PHP 5 result
-        return [$stmts5, $errors5];
-    }
-}
-// If PHP 7 succeeds or both fail use PHP 7 result
-return [$stmts7, $errors7];
-```
-
-#### Error handling in the lexer
-
-In order to support recovery from lexer errors, the signature of the `startLexing()` method changed
-to optionally accept an `ErrorHandler`:
-
-```php
-// OLD
-public function startLexing($code);
-// NEW
-public function startLexing($code, ErrorHandler $errorHandler = null);
-```
-
-If you use a custom lexer with overridden `startLexing()` method, it needs to be changed to accept
-the extra parameter. The value should be passed on to the parent method.
-
-#### Error checks in node constructors
-
-The constructors of certain nodes used to contain additional checks for semantic errors, such as
-creating a try block without either catch or finally. These checks have been moved from the node
-constructors into the parser. This allows recovery from such errors, as well as representing the
-resulting (invalid) AST.
-
-This means that certain error conditions are no longer checked for manually constructed nodes.
-
-### Removed methods, arguments, options
-
-The following methods, arguments or options have been removed:
-
- * `Comment::setLine()`, `Comment::setText()`: Create new `Comment` instances instead.
- * `Name::set()`, `Name::setFirst()`, `Name::setLast()`, `Name::append()`, `Name::prepend()`:
-    Use `Name::concat()` in combination with `Name::slice()` instead.
- * `Error::getRawLine()`, `Error::setRawLine()`. Use `Error::getStartLine()` and
-   `Error::setStartLine()` instead.
- * `Parser::getErrors()`. Use `ErrorHandler\Collecting` instead.
- * `$separator` argument of `Name::toString()`. Use `strtr()` instead, if you really need it.
- * `$cloneNodes` argument of `NodeTraverser::__construct()`. Explicitly clone nodes in the visitor
-   instead.
- * `throwOnError` parser option. Use `ErrorHandler\Collecting` instead.
-
-### Miscellaneous
-
- * The `NameResolver` will now resolve unqualified function and constant names in the global
-   namespace into fully qualified names. For example `foo()` in the global namespace resolves to
-   `\foo()`. For names where no static resolution is possible, a `namespacedName` attribute is
-   added now, containing the namespaced variant of the name.
- * All methods on `PrettyPrinter\Standard` are now protected. Previously most of them were public.
-   The pretty printer should only be invoked using the `prettyPrint()`, `prettyPrintFile()` and
-   `prettyPrintExpr()` methods.
- * The node dumper now prints numeric values that act as enums/flags in a string representation.
-   If node dumper results are used in tests, updates may be needed to account for this.
- * The constants on `NameTraverserInterface` have been moved into the `NameTraverser` class.
- * The emulative lexer now directly postprocesses tokens, instead of using `~__EMU__~` sequences.
-   This changes the protected API of the emulative lexer.
- * The `Name::slice()` method now returns `null` for empty slices, previously `new Name([])` was
-   used. `Name::concat()` now also supports concatenation with `null`.
diff --git a/vendor/nikic/php-parser/UPGRADE-4.0.md b/vendor/nikic/php-parser/UPGRADE-4.0.md
deleted file mode 100644
index 628bdbdc58ea645fac6b0160e81460030e893fe9..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/UPGRADE-4.0.md
+++ /dev/null
@@ -1,77 +0,0 @@
-Upgrading from PHP-Parser 3.x to 4.0
-====================================
-
-### PHP version requirements
-
-PHP-Parser now requires PHP 7.0 or newer to run. It is however still possible to *parse* PHP 5.2-5.6
-source code, while running on a newer version.
-
-HHVM is no longer actively supported.
-
-### Changes to the node structure
-
-* Many subnodes that previously held simple strings now store `Identifier` nodes instead (or
-  `VarLikeIdentifier` nodes if they have form `$ident`). The constructors of the affected nodes will
-  automatically convert strings to `Identifier`s and `Identifier`s implement `__toString()`. As such
-  some code continues to work without changes, but anything using `is_string()`, type-strict
-  comparisons or strict-mode may require adjustment. The following is an exhaustive list of all
-  affected subnodes:
-
-   * `Const_::$name`
-   * `NullableType::$type` (for simple types)
-   * `Param::$type` (for simple types)
-   * `Expr\ClassConstFetch::$name`
-   * `Expr\Closure::$returnType` (for simple types)
-   * `Expr\MethodCall::$name`
-   * `Expr\PropertyFetch::$name`
-   * `Expr\StaticCall::$name`
-   * `Expr\StaticPropertyFetch::$name` (uses `VarLikeIdentifier`)
-   * `Stmt\Class_::$name`
-   * `Stmt\ClassMethod::$name`
-   * `Stmt\ClassMethod::$returnType` (for simple types)
-   * `Stmt\Function_::$name`
-   * `Stmt\Function_::$returnType` (for simple types)
-   * `Stmt\Goto_::$name`
-   * `Stmt\Interface_::$name`
-   * `Stmt\Label::$name`
-   * `Stmt\PropertyProperty::$name` (uses `VarLikeIdentifier`)
-   * `Stmt\TraitUseAdaptation\Alias::$method`
-   * `Stmt\TraitUseAdaptation\Alias::$newName`
-   * `Stmt\TraitUseAdaptation\Precedence::$method`
-   * `Stmt\Trait_::$name`
-   * `Stmt\UseUse::$alias`
-
-* Expression statements (`expr;`) are now represented using a `Stmt\Expression` node. Previously
-  these statements were directly represented as their constituent expression.
-* The `name` subnode of `Param` has been renamed to `var` and now contains a `Variable` rather than
-  a plain string.
-* The `name` subnode of `StaticVar` has been renamed to `var` and now contains a `Variable` rather
-  than a plain string.
-* The `var` subnode of `ClosureUse` now contains a `Variable` rather than a plain string.
-* The `var` subnode of `Catch_` now contains a `Variable` rather than a plain string.
-* The `alias` subnode of `UseUse` is now `null` if no explicit alias is given. As such,
-  `use Foo\Bar` and `use Foo\Bar as Bar` are now represented differently. The `getAlias()` method
-  can be used to get the effective alias, even if it is not explicitly given.
-
-### Miscellaneous
-
-* The indentation handling in the pretty printer has been changed (this is only relevant if you
-  extend the pretty printer). Previously indentation was automatic, and parts were excluded using
-  `pNoindent()`. Now no-indent is the default and newlines that require indentation should use
-  `$this->nl`.
-
-### Removed functionality
-
-* Removed `type` subnode on `Class_`, `ClassMethod` and `Property` nodes. Use `flags` instead.
-* The `ClassConst::isStatic()` method has been removed. Constants cannot have a static modifier.
-* The `NodeTraverser` no longer accepts `false` as a return value from a `leaveNode()` method.
-  `NodeTraverser::REMOVE_NODE` should be returned instead.
-* The `Node::setLine()` method has been removed. If you really need to, you can use `setAttribute()`
-  instead.
-* The misspelled `Class_::VISIBILITY_MODIFER_MASK` constant has been dropped in favor of
-  `Class_::VISIBILITY_MODIFIER_MASK`.
-* The XML serializer has been removed. As such, the classes `Serializer\XML`, and
-  `Unserializer\XML`, as well as the interfaces `Serializer` and `Unserializer` no longer exist.
-* The `BuilderAbstract` class has been removed. It's functionality is moved into `BuilderHelpers`.
-  However, this is an internal class and should not be used directly.
-* The `Autoloader` class has been removed in favor of relying on the Composer autoloader.
diff --git a/vendor/nikic/php-parser/composer.json b/vendor/nikic/php-parser/composer.json
index 97428539271af82a4a1d3d3a05e709591de15de5..2fd064a21242490c5ac6129e9b19af4323e4b9d1 100644
--- a/vendor/nikic/php-parser/composer.json
+++ b/vendor/nikic/php-parser/composer.json
@@ -17,11 +17,12 @@
         "ext-tokenizer": "*"
     },
     "require-dev": {
-        "phpunit/phpunit": "^6.5 || ^7.0"
+        "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0",
+        "ircmaxell/php-yacc": "^0.0.7"
     },
     "extra": {
         "branch-alias": {
-            "dev-master": "4.2-dev"
+            "dev-master": "4.9-dev"
         }
     },
     "autoload": {
diff --git a/vendor/nikic/php-parser/doc/0_Introduction.markdown b/vendor/nikic/php-parser/doc/0_Introduction.markdown
deleted file mode 100644
index abc40f2bb83d58ba65f3eb6131433c8d19e0c62b..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/doc/0_Introduction.markdown
+++ /dev/null
@@ -1,80 +0,0 @@
-Introduction
-============
-
-This project is a PHP 5.2 to PHP 7.3 parser **written in PHP itself**.
-
-What is this for?
------------------
-
-A parser is useful for [static analysis][0], manipulation of code and basically any other
-application dealing with code programmatically. A parser constructs an [Abstract Syntax Tree][1]
-(AST) of the code and thus allows dealing with it in an abstract and robust way.
-
-There are other ways of processing source code. One that PHP supports natively is using the
-token stream generated by [`token_get_all`][2]. The token stream is much more low level than
-the AST and thus has different applications: It allows to also analyze the exact formatting of
-a file. On the other hand the token stream is much harder to deal with for more complex analysis.
-For example, an AST abstracts away the fact that, in PHP, variables can be written as `$foo`, but also
-as `$$bar`, `${'foobar'}` or even `${!${''}=barfoo()}`. You don't have to worry about recognizing
-all the different syntaxes from a stream of tokens.
-
-Another question is: Why would I want to have a PHP parser *written in PHP*? Well, PHP might not be
-a language especially suited for fast parsing, but processing the AST is much easier in PHP than it
-would be in other, faster languages like C. Furthermore the people most probably wanting to do
-programmatic PHP code analysis are incidentally PHP developers, not C developers.
-
-What can it parse?
-------------------
-
-The parser supports parsing PHP 5.2-7.3.
-
-As the parser is based on the tokens returned by `token_get_all` (which is only able to lex the PHP
-version it runs on), additionally a wrapper for emulating tokens from newer versions is provided.
-This allows to parse PHP 7.3 source code running on PHP 7.0, for example. This emulation is somewhat
-hacky and not perfect, but it should work well on any sane code.
-
-What output does it produce?
-----------------------------
-
-The parser produces an [Abstract Syntax Tree][1] (AST) also known as a node tree. How this looks
-can best be seen in an example. The program `<?php echo 'Hi', 'World';` will give you a node tree
-roughly looking like this:
-
-```
-array(
-    0: Stmt_Echo(
-        exprs: array(
-            0: Scalar_String(
-                value: Hi
-            )
-            1: Scalar_String(
-                value: World
-            )
-        )
-    )
-)
-```
-
-This matches the structure of the code: An echo statement, which takes two strings as expressions,
-with the values `Hi` and `World!`.
-
-You can also see that the AST does not contain any whitespace information (but most comments are saved).
-So using it for formatting analysis is not possible.
-
-What else can it do?
---------------------
-
-Apart from the parser itself this package also bundles support for some other, related features:
-
- * Support for pretty printing, which is the act of converting an AST into PHP code. Please note
-   that "pretty printing" does not imply that the output is especially pretty. It's just how it's
-   called ;)
- * Support for serializing and unserializing the node tree to JSON
- * Support for dumping the node tree in a human readable form (see the section above for an
-   example of how the output looks like)
- * Infrastructure for traversing and changing the AST (node traverser and node visitors)
- * A node visitor for resolving namespaced names
-
- [0]: http://en.wikipedia.org/wiki/Static_program_analysis
- [1]: http://en.wikipedia.org/wiki/Abstract_syntax_tree
- [2]: http://php.net/token_get_all
diff --git a/vendor/nikic/php-parser/doc/2_Usage_of_basic_components.markdown b/vendor/nikic/php-parser/doc/2_Usage_of_basic_components.markdown
deleted file mode 100644
index 9a809ec8e632182cd2e920b292153602a962f378..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/doc/2_Usage_of_basic_components.markdown
+++ /dev/null
@@ -1,516 +0,0 @@
-Usage of basic components
-=========================
-
-This document explains how to use the parser, the pretty printer and the node traverser.
-
-Bootstrapping
--------------
-
-To bootstrap the library, include the autoloader generated by composer:
-
-```php
-require 'path/to/vendor/autoload.php';
-```
-
-Additionally you may want to set the `xdebug.max_nesting_level` ini option to a higher value:
-
-```php
-ini_set('xdebug.max_nesting_level', 3000);
-```
-
-This ensures that there will be no errors when traversing highly nested node trees. However, it is
-preferable to disable XDebug completely, as it can easily make this library more than five times
-slower.
-
-Parsing
--------
-
-In order to parse code, you first have to create a parser instance:
-
-```php
-use PhpParser\ParserFactory;
-$parser = (new ParserFactory)->create(ParserFactory::PREFER_PHP7);
-```
-
-The factory accepts a kind argument, that determines how different PHP versions are treated:
-
-Kind | Behavior
------|---------
-`ParserFactory::PREFER_PHP7` | Try to parse code as PHP 7. If this fails, try to parse it as PHP 5.
-`ParserFactory::PREFER_PHP5` | Try to parse code as PHP 5. If this fails, try to parse it as PHP 7.
-`ParserFactory::ONLY_PHP7` | Parse code as PHP 7.
-`ParserFactory::ONLY_PHP5` | Parse code as PHP 5.
-
-Unless you have a strong reason to use something else, `PREFER_PHP7` is a reasonable default.
-
-The `create()` method optionally accepts a `Lexer` instance as the second argument. Some use cases
-that require customized lexers are discussed in the [lexer documentation](component/Lexer.markdown).
-
-Subsequently you can pass PHP code (including the opening `<?php` tag) to the `parse` method in order to
-create a syntax tree. If a syntax error is encountered, an `PhpParser\Error` exception will be thrown:
-
-```php
-<?php
-use PhpParser\Error;
-use PhpParser\ParserFactory;
-
-$code = <<<'CODE'
-<?php
-function printLine($msg) {
-    echo $msg, "\n";
-}
-printLine('Hello World!!!');
-CODE;
-
-$parser = (new ParserFactory)->create(ParserFactory::PREFER_PHP7);
-
-try {
-    $stmts = $parser->parse($code);
-    // $stmts is an array of statement nodes
-} catch (Error $e) {
-    echo 'Parse Error: ', $e->getMessage();
-}
-```
-
-A parser instance can be reused to parse multiple files.
-
-Node dumping
-------------
-
-To dump the abstact syntax tree in human readable form, a `NodeDumper` can be used:
-
-```php
-<?php
-use PhpParser\NodeDumper;
-
-$nodeDumper = new NodeDumper;
-echo $nodeDumper->dump($stmts), "\n";
-```
-
-For the sample code from the previous section, this will produce the following output:
-
-```
-array(
-    0: Stmt_Function(
-        byRef: false
-        name: Identifier(
-            name: printLine
-        )
-        params: array(
-            0: Param(
-                type: null
-                byRef: false
-                variadic: false
-                var: Expr_Variable(
-                    name: msg
-                )
-                default: null
-            )
-        )
-        returnType: null
-        stmts: array(
-            0: Stmt_Echo(
-                exprs: array(
-                    0: Expr_Variable(
-                        name: msg
-                    )
-                    1: Scalar_String(
-                        value:
-
-                    )
-                )
-            )
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_FuncCall(
-            name: Name(
-                parts: array(
-                    0: printLine
-                )
-            )
-            args: array(
-                0: Arg(
-                    value: Scalar_String(
-                        value: Hello World!!!
-                    )
-                    byRef: false
-                    unpack: false
-                )
-            )
-        )
-    )
-)
-```
-
-You can also use the `php-parse` script to obtain such a node dump by calling it either with a file
-name or code string:
-
-```sh
-vendor/bin/php-parse file.php
-vendor/bin/php-parse "<?php foo();"
-```
-
-This can be very helpful if you want to quickly check how certain syntax is represented in the AST.
-
-Node tree structure
--------------------
-
-Looking at the node dump above, you can see that `$stmts` for this example code is an array of two
-nodes, a `Stmt_Function` and a `Stmt_Expression`. The corresponding class names are:
-
- * `Stmt_Function -> PhpParser\Node\Stmt\Function_`
- * `Stmt_Expression -> PhpParser\Node\Stmt\Expression`
-
-The additional `_` at the end of the first class name is necessary, because `Function` is a
-reserved keyword. Many node class names in this library have a trailing `_` to avoid clashing with
-a keyword.
-
-As PHP is a large language there are approximately 140 different nodes. In order to make working
-with them easier they are grouped into three categories:
-
- * `PhpParser\Node\Stmt`s are statement nodes, i.e. language constructs that do not return
-   a value and can not occur in an expression. For example a class definition is a statement.
-   It doesn't return a value and you can't write something like `func(class A {});`.
- * `PhpParser\Node\Expr`s are expression nodes, i.e. language constructs that return a value
-   and thus can occur in other expressions. Examples of expressions are `$var`
-   (`PhpParser\Node\Expr\Variable`) and `func()` (`PhpParser\Node\Expr\FuncCall`).
- * `PhpParser\Node\Scalar`s are nodes representing scalar values, like `'string'`
-   (`PhpParser\Node\Scalar\String_`), `0` (`PhpParser\Node\Scalar\LNumber`) or magic constants
-   like `__FILE__` (`PhpParser\Node\Scalar\MagicConst\File`). All `PhpParser\Node\Scalar`s extend
-   `PhpParser\Node\Expr`, as scalars are expressions, too.
- * There are some nodes not in either of these groups, for example names (`PhpParser\Node\Name`)
-   and call arguments (`PhpParser\Node\Arg`).
-
-The `Node\Stmt\Expression` node is somewhat confusing in that it contains both the terms "statement"
-and "expression". This node distinguishes `expr`, which is a `Node\Expr`, from `expr;`, which is
-an "expression statement" represented by `Node\Stmt\Expression` and containing `expr` as a sub-node.
-
-Every node has a (possibly zero) number of subnodes. You can access subnodes by writing
-`$node->subNodeName`. The `Stmt\Echo_` node has only one subnode `exprs`. So in order to access it
-in the above example you would write `$stmts[0]->exprs`. If you wanted to access the name of the function
-call, you would write `$stmts[0]->exprs[1]->name`.
-
-All nodes also define a `getType()` method that returns the node type. The type is the class name
-without the `PhpParser\Node\` prefix and `\` replaced with `_`. It also does not contain a trailing
-`_` for reserved-keyword class names.
-
-It is possible to associate custom metadata with a node using the `setAttribute()` method. This data
-can then be retrieved using `hasAttribute()`, `getAttribute()` and `getAttributes()`.
-
-By default the lexer adds the `startLine`, `endLine` and `comments` attributes. `comments` is an array
-of `PhpParser\Comment[\Doc]` instances.
-
-The start line can also be accessed using `getLine()`/`setLine()` (instead of `getAttribute('startLine')`).
-The last doc comment from the `comments` attribute can be obtained using `getDocComment()`.
-
-Pretty printer
---------------
-
-The pretty printer component compiles the AST back to PHP code. As the parser does not retain formatting
-information the formatting is done using a specified scheme. Currently there is only one scheme available,
-namely `PhpParser\PrettyPrinter\Standard`.
-
-```php
-use PhpParser\Error;
-use PhpParser\ParserFactory;
-use PhpParser\PrettyPrinter;
-
-$code = "<?php echo 'Hi ', hi\\getTarget();";
-
-$parser = (new ParserFactory)->create(ParserFactory::PREFER_PHP7);
-$prettyPrinter = new PrettyPrinter\Standard;
-
-try {
-    // parse
-    $stmts = $parser->parse($code);
-
-    // change
-    $stmts[0]         // the echo statement
-          ->exprs     // sub expressions
-          [0]         // the first of them (the string node)
-          ->value     // it's value, i.e. 'Hi '
-          = 'Hello '; // change to 'Hello '
-
-    // pretty print
-    $code = $prettyPrinter->prettyPrint($stmts);
-
-    echo $code;
-} catch (Error $e) {
-    echo 'Parse Error: ', $e->getMessage();
-}
-```
-
-The above code will output:
-
-    echo 'Hello ', hi\getTarget();
-
-As you can see the source code was first parsed using `PhpParser\Parser->parse()`, then changed and then
-again converted to code using `PhpParser\PrettyPrinter\Standard->prettyPrint()`.
-
-The `prettyPrint()` method pretty prints a statements array. It is also possible to pretty print only a
-single expression using `prettyPrintExpr()`.
-
-The `prettyPrintFile()` method can be used to print an entire file. This will include the opening `<?php` tag
-and handle inline HTML as the first/last statement more gracefully.
-
-> Read more: [Pretty printing documentation](component/Pretty_printing.markdown)
-
-Node traversation
------------------
-
-The above pretty printing example used the fact that the source code was known and thus it was easy to
-write code that accesses a certain part of a node tree and changes it. Normally this is not the case.
-Usually you want to change / analyze code in a generic way, where you don't know how the node tree is
-going to look like.
-
-For this purpose the parser provides a component for traversing and visiting the node tree. The basic
-structure of a program using this `PhpParser\NodeTraverser` looks like this:
-
-```php
-use PhpParser\NodeTraverser;
-use PhpParser\ParserFactory;
-use PhpParser\PrettyPrinter;
-
-$parser        = (new ParserFactory)->create(ParserFactory::PREFER_PHP7);
-$traverser     = new NodeTraverser;
-$prettyPrinter = new PrettyPrinter\Standard;
-
-// add your visitor
-$traverser->addVisitor(new MyNodeVisitor);
-
-try {
-    $code = file_get_contents($fileName);
-
-    // parse
-    $stmts = $parser->parse($code);
-
-    // traverse
-    $stmts = $traverser->traverse($stmts);
-
-    // pretty print
-    $code = $prettyPrinter->prettyPrintFile($stmts);
-
-    echo $code;
-} catch (PhpParser\Error $e) {
-    echo 'Parse Error: ', $e->getMessage();
-}
-```
-
-The corresponding node visitor might look like this:
-
-```php
-use PhpParser\Node;
-use PhpParser\NodeVisitorAbstract;
-
-class MyNodeVisitor extends NodeVisitorAbstract
-{
-    public function leaveNode(Node $node) {
-        if ($node instanceof Node\Scalar\String_) {
-            $node->value = 'foo';
-        }
-    }
-}
-```
-
-The above node visitor would change all string literals in the program to `'foo'`.
-
-All visitors must implement the `PhpParser\NodeVisitor` interface, which defines the following four
-methods:
-
-```php
-public function beforeTraverse(array $nodes);
-public function enterNode(\PhpParser\Node $node);
-public function leaveNode(\PhpParser\Node $node);
-public function afterTraverse(array $nodes);
-```
-
-The `beforeTraverse()` method is called once before the traversal begins and is passed the nodes the
-traverser was called with. This method can be used for resetting values before traversation or
-preparing the tree for traversal.
-
-The `afterTraverse()` method is similar to the `beforeTraverse()` method, with the only difference that
-it is called once after the traversal.
-
-The `enterNode()` and `leaveNode()` methods are called on every node, the former when it is entered,
-i.e. before its subnodes are traversed, the latter when it is left.
-
-All four methods can either return the changed node or not return at all (i.e. `null`) in which
-case the current node is not changed.
-
-The `enterNode()` method can additionally return the value `NodeTraverser::DONT_TRAVERSE_CHILDREN`,
-which instructs the traverser to skip all children of the current node. To furthermore prevent subsequent
-visitors from visiting the current node, `NodeTraverser::DONT_TRAVERSE_CURRENT_AND_CHILDREN` can be used instead.
-
-The `leaveNode()` method can additionally return the value `NodeTraverser::REMOVE_NODE`, in which
-case the current node will be removed from the parent array. Furthermore it is possible to return
-an array of nodes, which will be merged into the parent array at the offset of the current node.
-I.e. if in `array(A, B, C)` the node `B` should be replaced with `array(X, Y, Z)` the result will
-be `array(A, X, Y, Z, C)`.
-
-Instead of manually implementing the `NodeVisitor` interface you can also extend the `NodeVisitorAbstract`
-class, which will define empty default implementations for all the above methods.
-
-> Read more: [Walking the AST](component/Walking_the_AST.markdown)
-
-The NameResolver node visitor
------------------------------
-
-One visitor that is already bundled with the package is `PhpParser\NodeVisitor\NameResolver`. This visitor
-helps you work with namespaced code by trying to resolve most names to fully qualified ones.
-
-For example, consider the following code:
-
-    use A as B;
-    new B\C();
-
-In order to know that `B\C` really is `A\C` you would need to track aliases and namespaces yourself.
-The `NameResolver` takes care of that and resolves names as far as possible.
-
-After running it, most names will be fully qualified. The only names that will stay unqualified are
-unqualified function and constant names. These are resolved at runtime and thus the visitor can't
-know which function they are referring to. In most cases this is a non-issue as the global functions
-are meant.
-
-Also the `NameResolver` adds a `namespacedName` subnode to class, function and constant declarations
-that contains the namespaced name instead of only the shortname that is available via `name`.
-
-> Read more: [Name resolution documentation](component/Name_resolution.markdown)
-
-Example: Converting namespaced code to pseudo namespaces
---------------------------------------------------------
-
-A small example to understand the concept: We want to convert namespaced code to pseudo namespaces
-so it works on 5.2, i.e. names like `A\\B` should be converted to `A_B`. Note that such conversions
-are fairly complicated if you take PHP's dynamic features into account, so our conversion will
-assume that no dynamic features are used.
-
-We start off with the following base code:
-
-```php
-use PhpParser\ParserFactory;
-use PhpParser\PrettyPrinter;
-use PhpParser\NodeTraverser;
-use PhpParser\NodeVisitor\NameResolver;
-
-$inDir  = '/some/path';
-$outDir = '/some/other/path';
-
-$parser        = (new ParserFactory)->create(ParserFactory::PREFER_PHP7);
-$traverser     = new NodeTraverser;
-$prettyPrinter = new PrettyPrinter\Standard;
-
-$traverser->addVisitor(new NameResolver); // we will need resolved names
-$traverser->addVisitor(new NamespaceConverter); // our own node visitor
-
-// iterate over all .php files in the directory
-$files = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($inDir));
-$files = new \RegexIterator($files, '/\.php$/');
-
-foreach ($files as $file) {
-    try {
-        // read the file that should be converted
-        $code = file_get_contents($file->getPathName());
-
-        // parse
-        $stmts = $parser->parse($code);
-
-        // traverse
-        $stmts = $traverser->traverse($stmts);
-
-        // pretty print
-        $code = $prettyPrinter->prettyPrintFile($stmts);
-
-        // write the converted file to the target directory
-        file_put_contents(
-            substr_replace($file->getPathname(), $outDir, 0, strlen($inDir)),
-            $code
-        );
-    } catch (PhpParser\Error $e) {
-        echo 'Parse Error: ', $e->getMessage();
-    }
-}
-```
-
-Now lets start with the main code, the `NodeVisitor\NamespaceConverter`. One thing it needs to do
-is convert `A\\B` style names to `A_B` style ones.
-
-```php
-use PhpParser\Node;
-
-class NamespaceConverter extends \PhpParser\NodeVisitorAbstract
-{
-    public function leaveNode(Node $node) {
-        if ($node instanceof Node\Name) {
-            return new Node\Name(str_replace('\\', '_', $node->toString()));
-        }
-    }
-}
-```
-
-The above code profits from the fact that the `NameResolver` already resolved all names as far as
-possible, so we don't need to do that. We only need to create a string with the name parts separated
-by underscores instead of backslashes. This is what `str_replace('\\', '_', $node->toString())` does. (If you want to
-create a name with backslashes either write `$node->toString()` or `(string) $node`.) Then we create
-a new name from the string and return it. Returning a new node replaces the old node.
-
-Another thing we need to do is change the class/function/const declarations. Currently they contain
-only the shortname (i.e. the last part of the name), but they need to contain the complete name including
-the namespace prefix:
-
-```php
-use PhpParser\Node;
-use PhpParser\Node\Stmt;
-
-class NodeVisitor_NamespaceConverter extends \PhpParser\NodeVisitorAbstract
-{
-    public function leaveNode(Node $node) {
-        if ($node instanceof Node\Name) {
-            return new Node\Name(str_replace('\\', '_', $node->toString()));
-        } elseif ($node instanceof Stmt\Class_
-                  || $node instanceof Stmt\Interface_
-                  || $node instanceof Stmt\Function_) {
-            $node->name = str_replace('\\', '_', $node->namespacedName->toString());
-        } elseif ($node instanceof Stmt\Const_) {
-            foreach ($node->consts as $const) {
-                $const->name = str_replace('\\', '_', $const->namespacedName->toString());
-            }
-        }
-    }
-}
-```
-
-There is not much more to it than converting the namespaced name to string with `_` as separator.
-
-The last thing we need to do is remove the `namespace` and `use` statements:
-
-```php
-use PhpParser\Node;
-use PhpParser\Node\Stmt;
-use PhpParser\NodeTraverser;
-
-class NodeVisitor_NamespaceConverter extends \PhpParser\NodeVisitorAbstract
-{
-    public function leaveNode(Node $node) {
-        if ($node instanceof Node\Name) {
-            return new Node\Name(str_replace('\\', '_', $node->toString()));
-        } elseif ($node instanceof Stmt\Class_
-                  || $node instanceof Stmt\Interface_
-                  || $node instanceof Stmt\Function_) {
-            $node->name = str_replace('\\', '_', $node->namespacedName->toString();
-        } elseif ($node instanceof Stmt\Const_) {
-            foreach ($node->consts as $const) {
-                $const->name = str_replace('\\', '_', $const->namespacedName->toString());
-            }
-        } elseif ($node instanceof Stmt\Namespace_) {
-            // returning an array merges is into the parent array
-            return $node->stmts;
-        } elseif ($node instanceof Stmt\Use_) {
-            // remove use nodes altogether
-            return NodeTraverser::REMOVE_NODE;
-        }
-    }
-}
-```
-
-That's all.
diff --git a/vendor/nikic/php-parser/doc/README.md b/vendor/nikic/php-parser/doc/README.md
deleted file mode 100644
index 3b8cd7656328ddcee88f6cd4f8856e2347bdfc4b..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/doc/README.md
+++ /dev/null
@@ -1,46 +0,0 @@
-Table of Contents
-=================
-
-Guide
------
-
-  1. [Introduction](0_Introduction.markdown)
-  2. [Usage of basic components](2_Usage_of_basic_components.markdown)
-
-Component documentation
------------------------
-
-  * [Walking the AST](component/Walking_the_AST.markdown)
-    * Node visitors
-    * Modifying the AST from a visitor
-    * Short-circuiting traversals
-    * Interleaved visitors
-    * Simple node finding API
-    * Parent and sibling references
-  * [Name resolution](component/Name_resolution.markdown)
-    * Name resolver options
-    * Name resolution context
-  * [Pretty printing](component/Pretty_printing.markdown)
-    * Converting AST back to PHP code
-    * Customizing formatting
-    * Formatting-preserving code transformations
-  * [AST builders](component/AST_builders.markdown)
-    * Fluent builders for AST nodes
-  * [Lexer](component/Lexer.markdown)
-    * Lexer options
-    * Token and file positions for nodes
-    * Custom attributes
-  * [Error handling](component/Error_handling.markdown)
-    * Column information for errors
-    * Error recovery (parsing of syntactically incorrect code)
-  * [Constant expression evaluation](component/Constant_expression_evaluation.markdown)
-    * Evaluating constant/property/etc initializers
-    * Handling errors and unsupported expressions
-  * [JSON representation](component/JSON_representation.markdown)
-    * JSON encoding and decoding of ASTs
-  * [Performance](component/Performance.markdown)
-    * Disabling XDebug
-    * Reusing objects
-    * Garbage collection impact
-  * [Frequently asked questions](component/FAQ.markdown)
-    * Parent and sibling references
diff --git a/vendor/nikic/php-parser/doc/component/AST_builders.markdown b/vendor/nikic/php-parser/doc/component/AST_builders.markdown
deleted file mode 100644
index 60ae0192df62c51389e897d9427b972a6f9a23fd..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/doc/component/AST_builders.markdown
+++ /dev/null
@@ -1,138 +0,0 @@
-AST builders
-============
-
-When PHP-Parser is used to generate (or modify) code by first creating an Abstract Syntax Tree and
-then using the [pretty printer](Pretty_printing.markdown) to convert it to PHP code, it can often
-be tedious to manually construct AST nodes. The project provides a number of utilities to simplify
-the construction of common AST nodes.
-
-Fluent builders
----------------
-
-The library comes with a number of builders, which allow creating node trees using a fluent
-interface. Builders are created using the `BuilderFactory` and the final constructed node is
-accessed through `getNode()`. Fluent builders are available for
-the following syntactic elements:
-
- * namespaces and use statements
- * classes, interfaces and traits
- * methods, functions and parameters
- * properties
-
-Here is an example:
-
-```php
-use PhpParser\BuilderFactory;
-use PhpParser\PrettyPrinter;
-use PhpParser\Node;
-
-$factory = new BuilderFactory;
-$node = $factory->namespace('Name\Space')
-    ->addStmt($factory->use('Some\Other\Thingy')->as('SomeClass'))
-    ->addStmt($factory->useFunction('strlen'))
-    ->addStmt($factory->useConst('PHP_VERSION'))
-    ->addStmt($factory->class('SomeOtherClass')
-        ->extend('SomeClass')
-        ->implement('A\Few', '\Interfaces')
-        ->makeAbstract() // ->makeFinal()
-
-        ->addStmt($factory->useTrait('FirstTrait'))
-
-        ->addStmt($factory->useTrait('SecondTrait', 'ThirdTrait')
-            ->and('AnotherTrait')
-            ->with($factory->traitUseAdaptation('foo')->as('bar'))
-            ->with($factory->traitUseAdaptation('AnotherTrait', 'baz')->as('test'))
-            ->with($factory->traitUseAdaptation('AnotherTrait', 'func')->insteadof('SecondTrait')))
-
-        ->addStmt($factory->method('someMethod')
-            ->makePublic()
-            ->makeAbstract() // ->makeFinal()
-            ->setReturnType('bool') // ->makeReturnByRef()
-            ->addParam($factory->param('someParam')->setType('SomeClass'))
-            ->setDocComment('/**
-                              * This method does something.
-                              *
-                              * @param SomeClass And takes a parameter
-                              */')
-        )
-
-        ->addStmt($factory->method('anotherMethod')
-            ->makeProtected() // ->makePublic() [default], ->makePrivate()
-            ->addParam($factory->param('someParam')->setDefault('test'))
-            // it is possible to add manually created nodes
-            ->addStmt(new Node\Expr\Print_(new Node\Expr\Variable('someParam')))
-        )
-
-        // properties will be correctly reordered above the methods
-        ->addStmt($factory->property('someProperty')->makeProtected())
-        ->addStmt($factory->property('anotherProperty')->makePrivate()->setDefault(array(1, 2, 3)))
-    )
-
-    ->getNode()
-;
-
-$stmts = array($node);
-$prettyPrinter = new PrettyPrinter\Standard();
-echo $prettyPrinter->prettyPrintFile($stmts);
-```
-
-This will produce the following output with the standard pretty printer:
-
-```php
-<?php
-
-namespace Name\Space;
-
-use Some\Other\Thingy as SomeClass;
-use function strlen;
-use const PHP_VERSION;
-abstract class SomeOtherClass extends SomeClass implements A\Few, \Interfaces
-{
-    use FirstTrait;
-    use SecondTrait, ThirdTrait, AnotherTrait {
-        foo as bar;
-        AnotherTrait::baz as test;
-        AnotherTrait::func insteadof SecondTrait;
-    }
-    protected $someProperty;
-    private $anotherProperty = array(1, 2, 3);
-    /**
-     * This method does something.
-     *
-     * @param SomeClass And takes a parameter
-     */
-    public abstract function someMethod(SomeClass $someParam) : bool;
-    protected function anotherMethod($someParam = 'test')
-    {
-        print $someParam;
-    }
-}
-```
-
-Additional helper methods
--------------------------
-
-The `BuilderFactory` also provides a number of additional helper methods, which directly return
-nodes. The following methods are currently available:
-
- * `val($value)`: Creates an AST node for a literal value like `42` or `[1, 2, 3]`.
- * `var($name)`: Creates variable node.
- * `args(array $args)`: Creates an array of function/method arguments, including the required `Arg`
-   wrappers. Also converts literals to AST nodes.
- * `funcCall($name, array $args = [])`: Create a function call node. Converts `$name` to a `Name`
-   node and normalizes arguments.
- * `methodCall(Expr $var, $name, array $args = [])`: Create a method call node. Converts `$name` to
-   an `Identifier` node and normalizes arguments.
- * `staticCall($class, $name, array $args = [])`: Create a static method call node. Converts
-   `$class` to a `Name` node, `$name` to an `Identifier` node and normalizes arguments.
- * `new($class, array $args = [])`: Create a "new" (object creation) node. Converts `$class` to a
-   `Name` node.
- * `constFetch($name)`: Create a constant fetch node. Converts `$name` to a `Name` node.
- * `classConstFetch($class, $name)`: Create a class constant fetch node. Converts `$class` to a
-   `Name` node and `$name` to an `Identifier` node.
- * `propertyFetch($var, $name)`: Creates a property fetch node. Converts `$name` to an `Identifier`
-   node.
- * `concat(...$exprs)`: Create a tree of `BinaryOp\Concat` nodes for the given expressions.
-
-These methods may be expanded on an as-needed basis. Please open an issue or PR if a common
-operation is missing.
diff --git a/vendor/nikic/php-parser/doc/component/Constant_expression_evaluation.markdown b/vendor/nikic/php-parser/doc/component/Constant_expression_evaluation.markdown
deleted file mode 100644
index 9ab4f5c3952eb9f1e41e8f658671227546e0436c..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/doc/component/Constant_expression_evaluation.markdown
+++ /dev/null
@@ -1,115 +0,0 @@
-Constant expression evaluation
-==============================
-
-Initializers for constants, properties, parameters, etc. have limited support for expressions. For
-example:
-
-```php
-<?php
-class Test {
-    const SECONDS_IN_HOUR = 60 * 60;
-    const SECONDS_IN_DAY = 24 * self::SECONDS_IN_HOUR;
-}
-```
-
-PHP-Parser supports evaluation of such constant expressions through the `ConstExprEvaluator` class:
-
-```php
-<?php
-
-use PhpParser\{ConstExprEvaluator, ConstExprEvaluationException};
-
-$evalutator = new ConstExprEvaluator();
-try {
-    $value = $evalutator->evaluateSilently($someExpr);
-} catch (ConstExprEvaluationException $e) {
-    // Either the expression contains unsupported expression types,
-    // or an error occurred during evaluation
-}
-```
-
-Error handling
---------------
-
-The constant evaluator provides two methods, `evaluateDirectly()` and `evaluateSilently()`, which
-differ in error behavior. `evaluateDirectly()` will evaluate the expression as PHP would, including
-any generated warnings or Errors. `evaluateSilently()` will instead convert warnings and Errors into
-a `ConstExprEvaluationException`. For example:
-
-```php
-<?php
-
-use PhpParser\{ConstExprEvaluator, ConstExprEvaluationException};
-use PhpParser\Node\{Expr, Scalar};
-
-$evaluator = new ConstExprEvaluator();
-
-// 10 / 0
-$expr = new Expr\BinaryOp\Div(new Scalar\LNumber(10), new Scalar\LNumber(0));
-
-var_dump($evaluator->evaluateDirectly($expr)); // float(INF)
-// Warning: Division by zero
-
-try {
-    $evaluator->evaluateSilently($expr);
-} catch (ConstExprEvaluationException $e) {
-    var_dump($e->getPrevious()->getMessage()); // Division by zero
-}
-```
-
-For the purposes of static analysis, you will likely want to use `evaluateSilently()` and leave
-erroring expressions unevaluated.
-
-Unsupported expressions and evaluator fallback
-----------------------------------------------
-
-The constant expression evaluator supports all expression types that are permitted in constant
-expressions, apart from the following:
-
- * `Scalar\MagicConst\*`
- * `Expr\ConstFetch` (only null/false/true are handled)
- * `Expr\ClassConstFetch`
-
-Handling these expression types requires non-local information, such as which global constants are
-defined. By default, the evaluator will throw a `ConstExprEvaluationException` when it encounters
-an unsupported expression type.
-
-It is possible to override this behavior and support resolution for these expression types by
-specifying an evaluation fallback function:
-
-```php
-<?php
-
-use PhpParser\{ConstExprEvaluator, ConstExprEvaluationException};
-use PhpParser\Node\Expr;
-
-$evalutator = new ConstExprEvaluator(function(Expr $expr) {
-    if ($expr instanceof Expr\ConstFetch) {
-        return fetchConstantSomehow($expr);
-    }
-    if ($expr instanceof Expr\ClassConstFetch) {
-        return fetchClassConstantSomehow($expr);
-    }
-    // etc.
-    throw new ConstExprEvaluationException(
-        "Expression of type {$expr->getType()} cannot be evaluated");
-});
-
-try {
-    $evalutator->evaluateSilently($someExpr);
-} catch (ConstExprEvaluationException $e) {
-    // Handle exception
-}
-```
-
-Implementers are advised to ensure that evaluation of indirect constant references cannot lead to
-infinite recursion. For example, the following code could lead to infinite recursion if constant
-lookup is implemented naively.
-
-```php
-<?php
-class Test {
-    const A = self::B;
-    const B = self::A;
-}
-```
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/doc/component/Error_handling.markdown b/vendor/nikic/php-parser/doc/component/Error_handling.markdown
deleted file mode 100644
index 55bb5153b73eb3b93de8880ea8458b2c55d6141b..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/doc/component/Error_handling.markdown
+++ /dev/null
@@ -1,75 +0,0 @@
-Error handling
-==============
-
-Errors during parsing or analysis are represented using the `PhpParser\Error` exception class. In addition to an error
-message, an error can also store additional information about the location the error occurred at.
-
-How much location information is available depends on the origin of the error and how many lexer attributes have been
-enabled. At a minimum the start line of the error is usually available.
-
-Column information
-------------------
-
-In order to receive information about not only the line, but also the column span an error occurred at, the file
-position attributes in the lexer need to be enabled:
-
-```php
-$lexer = new PhpParser\Lexer(array(
-    'usedAttributes' => array('comments', 'startLine', 'endLine', 'startFilePos', 'endFilePos'),
-));
-$parser = (new PhpParser\ParserFactory)->create(PhpParser\ParserFactory::PREFER_PHP7, $lexer);
-
-try {
-    $stmts = $parser->parse($code);
-    // ...
-} catch (PhpParser\Error $e) {
-    // ...
-}
-```
-
-Before using column information, its availability needs to be checked with `$e->hasColumnInfo()`, as the precise
-location of an error cannot always be determined. The methods for retrieving column information also have to be passed
-the source code of the parsed file. An example for printing an error:
-
-```php
-if ($e->hasColumnInfo()) {
-    echo $e->getRawMessage() . ' from ' . $e->getStartLine() . ':' . $e->getStartColumn($code)
-        . ' to ' . $e->getEndLine() . ':' . $e->getEndColumn($code);
-    // or:
-    echo $e->getMessageWithColumnInfo();
-} else {
-    echo $e->getMessage();
-}
-```
-
-Both line numbers and column numbers are 1-based. EOF errors will be located at the position one past the end of the
-file.
-
-Error recovery
---------------
-
-The error behavior of the parser (and other components) is controlled by an `ErrorHandler`. Whenever an error is
-encountered, `ErrorHandler::handleError()` is invoked. The default error handling strategy is `ErrorHandler\Throwing`,
-which will immediately throw when an error is encountered.
-
-To instead collect all encountered errors into an array, while trying to continue parsing the rest of the source code,
-an instance of `ErrorHandler\Collecting` can be passed to the `Parser::parse()` method. A usage example:
-
-```php
-$parser = (new PhpParser\ParserFactory)->create(PhpParser\ParserFactory::ONLY_PHP7);
-$errorHandler = new PhpParser\ErrorHandler\Collecting;
-
-$stmts = $parser->parse($code, $errorHandler);
-
-if ($errorHandler->hasErrors()) {
-    foreach ($errorHandler->getErrors() as $error) {
-        // $error is an ordinary PhpParser\Error
-    }
-}
-
-if (null !== $stmts) {
-    // $stmts is a best-effort partial AST
-}
-```
-
-The `NameResolver` visitor also accepts an `ErrorHandler` as a constructor argument.
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/doc/component/FAQ.markdown b/vendor/nikic/php-parser/doc/component/FAQ.markdown
deleted file mode 100644
index b8bf834b66e3c212f4f3ef3bd1f86dec74223649..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/doc/component/FAQ.markdown
+++ /dev/null
@@ -1,68 +0,0 @@
-Frequently Asked Questions
-==========================
-
- * [How can the parent of a node be obtained?](#how-can-the-parent-of-a-node-be-obtained)
- * [How can the next/previous sibling of a node be obtained?](#how-can-the-nextprevious-sibling-of-a-node-be-obtained)
-
-How can the parent of a node be obtained?
------
-
-The AST does not store parent nodes by default. However, it is easy to add a custom parent node
-attribute using a custom node visitor:
-
-```php
-use PhpParser\Node;
-use PhpParser\NodeVisitorAbstract;
-
-class ParentConnector extends NodeVisitorAbstract {
-    private $stack;
-    public function beforeTraverse(array $nodes) {
-        $this->stack = [];
-    }
-    public function enterNode(Node $node) {
-        if (!empty($this->stack)) {
-            $node->setAttribute('parent', $this->stack[count($this->stack)-1]);
-        }
-        $this->stack[] = $node;
-    }
-    public function leaveNode(Node $node) {
-        array_pop($this->stack);
-    }
-}
-```
-
-After running this visitor, the parent node can be obtained through `$node->getAttribute('parent')`.
-
-How can the next/previous sibling of a node be obtained?
------
-
-Again, siblings are not stored by default, but the visitor from the previous entry can be easily
-extended to store the previous / next node with a common parent as well:
-
-```php
-use PhpParser\Node;
-use PhpParser\NodeVisitorAbstract;
-
-class NodeConnector extends NodeVisitorAbstract {
-    private $stack;
-    private $prev;
-    public function beforeTraverse(array $nodes) {
-        $this->stack = [];
-        $this->prev = null;
-    }
-    public function enterNode(Node $node) {
-        if (!empty($this->stack)) {
-            $node->setAttribute('parent', $this->stack[count($this->stack)-1]);
-        }
-        if ($this->prev && $this->prev->getAttribute('parent') == $node->getAttribute('parent')) {
-            $node->setAttribute('prev', $this->prev);
-            $this->prev->setAttribute('next', $node);
-        }
-        $this->stack[] = $node;
-    }
-    public function leaveNode(Node $node) {
-        $this->prev = $node;
-        array_pop($this->stack);
-    }
-}
-```
diff --git a/vendor/nikic/php-parser/doc/component/JSON_representation.markdown b/vendor/nikic/php-parser/doc/component/JSON_representation.markdown
deleted file mode 100644
index 47c3429c07b665ecad5977bc7cbb953b8bdd960d..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/doc/component/JSON_representation.markdown
+++ /dev/null
@@ -1,131 +0,0 @@
-JSON representation
-===================
-
-Nodes (and comments) implement the `JsonSerializable` interface. As such, it is possible to JSON
-encode the AST directly using `json_encode()`:
-
-```php
-<?php
-
-use PhpParser\ParserFactory;
-
-$code = <<<'CODE'
-<?php
-
-/** @param string $msg */
-function printLine($msg) {
-    echo $msg, "\n";
-}
-CODE;
-
-$parser = (new ParserFactory)->create(ParserFactory::PREFER_PHP7);
-
-try {
-    $stmts = $parser->parse($code);
-
-    echo json_encode($stmts, JSON_PRETTY_PRINT), "\n";
-} catch (PhpParser\Error $e) {
-    echo 'Parse Error: ', $e->getMessage();
-}
-```
-
-This will result in the following output (which includes attributes):
-
-```json
-[
-    {
-        "nodeType": "Stmt_Function",
-        "byRef": false,
-        "name": {
-            "nodeType": "Identifier",
-            "name": "printLine",
-            "attributes": {
-                "startLine": 4,
-                "endLine": 4
-            }
-        },
-        "params": [
-            {
-                "nodeType": "Param",
-                "type": null,
-                "byRef": false,
-                "variadic": false,
-                "var": {
-                    "nodeType": "Expr_Variable",
-                    "name": "msg",
-                    "attributes": {
-                        "startLine": 4,
-                        "endLine": 4
-                    }
-                },
-                "default": null,
-                "attributes": {
-                    "startLine": 4,
-                    "endLine": 4
-                }
-            }
-        ],
-        "returnType": null,
-        "stmts": [
-            {
-                "nodeType": "Stmt_Echo",
-                "exprs": [
-                    {
-                        "nodeType": "Expr_Variable",
-                        "name": "msg",
-                        "attributes": {
-                            "startLine": 5,
-                            "endLine": 5
-                        }
-                    },
-                    {
-                        "nodeType": "Scalar_String",
-                        "value": "\n",
-                        "attributes": {
-                            "startLine": 5,
-                            "endLine": 5,
-                            "kind": 2
-                        }
-                    }
-                ],
-                "attributes": {
-                    "startLine": 5,
-                    "endLine": 5
-                }
-            }
-        ],
-        "attributes": {
-            "startLine": 4,
-            "comments": [
-                {
-                    "nodeType": "Comment_Doc",
-                    "text": "\/** @param string $msg *\/",
-                    "line": 3,
-                    "filePos": 9,
-                    "tokenPos": 2
-                }
-            ],
-            "endLine": 6
-        }
-    }
-]
-```
-
-The JSON representation may be converted back into an AST using the `JsonDecoder`:
-
-```php
-<?php
-
-$jsonDecoder = new PhpParser\JsonDecoder();
-$ast = $jsonDecoder->decode($json);
-```
-
-Note that not all ASTs can be represented using JSON. In particular:
-
- * JSON only supports UTF-8 strings.
- * JSON does not support non-finite floating-point numbers. This can occur if the original source
-   code contains non-representable floating-pointing literals such as `1e1000`.
-
-If the node tree is not representable in JSON, the initial `json_encode()` call will fail.
-
-From the command line, a JSON dump can be obtained using `vendor/bin/php-parse -j file.php`.
diff --git a/vendor/nikic/php-parser/doc/component/Lexer.markdown b/vendor/nikic/php-parser/doc/component/Lexer.markdown
deleted file mode 100644
index be26e381e5d7685448fada9bdc3aef3e48665fbf..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/doc/component/Lexer.markdown
+++ /dev/null
@@ -1,159 +0,0 @@
-Lexer component documentation
-=============================
-
-The lexer is responsible for providing tokens to the parser. The project comes with two lexers: `PhpParser\Lexer` and
-`PhpParser\Lexer\Emulative`. The latter is an extension of the former, which adds the ability to emulate tokens of
-newer PHP versions and thus allows parsing of new code on older versions.
-
-This documentation discusses options available for the default lexers and explains how lexers can be extended.
-
-Lexer options
--------------
-
-The two default lexers accept an `$options` array in the constructor. Currently only the `'usedAttributes'` option is
-supported, which allows you to specify which attributes will be added to the AST nodes. The attributes can then be
-accessed using `$node->getAttribute()`, `$node->setAttribute()`, `$node->hasAttribute()` and `$node->getAttributes()`
-methods. A sample options array:
-
-```php
-$lexer = new PhpParser\Lexer(array(
-    'usedAttributes' => array(
-        'comments', 'startLine', 'endLine'
-    )
-));
-```
-
-The attributes used in this example match the default behavior of the lexer. The following attributes are supported:
-
- * `comments`: Array of `PhpParser\Comment` or `PhpParser\Comment\Doc` instances, representing all comments that occurred
-   between the previous non-discarded token and the current one. Use of this attribute is required for the
-   `$node->getComments()` and `$node->getDocComment()` methods to work. The attribute is also needed if you wish the pretty
-   printer to retain comments present in the original code.
- * `startLine`: Line in which the node starts. This attribute is required for the `$node->getLine()` to work. It is also
-   required if syntax errors should contain line number information.
- * `endLine`: Line in which the node ends. Required for `$node->getEndLine()`.
- * `startTokenPos`: Offset into the token array of the first token in the node. Required for `$node->getStartTokenPos()`.
- * `endTokenPos`: Offset into the token array of the last token in the node. Required for `$node->getEndTokenPos()`.
- * `startFilePos`: Offset into the code string of the first character that is part of the node. Required for `$node->getStartFilePos()`.
- * `endFilePos`: Offset into the code string of the last character that is part of the node. Required for `$node->getEndFilePos()`.
-
-### Using token positions
-
-> **Note:** The example in this section is outdated in that this information is directly available in the AST: While
-> `$property->isPublic()` does not distinguish between `public` and `var`, directly checking `$property->flags` for
-> the `$property->flags & Class_::VISIBILITY_MODIFIER_MASK) === 0` allows making this distinction without resorting to
-> tokens. However the general idea behind the example still applies in other cases.
-
-The token offset information is useful if you wish to examine the exact formatting used for a node. For example the AST
-does not distinguish whether a property was declared using `public` or using `var`, but you can retrieve this
-information based on the token position:
-
-```php
-function isDeclaredUsingVar(array $tokens, PhpParser\Node\Stmt\Property $prop) {
-    $i = $prop->getAttribute('startTokenPos');
-    return $tokens[$i][0] === T_VAR;
-}
-```
-
-In order to make use of this function, you will have to provide the tokens from the lexer to your node visitor using
-code similar to the following:
-
-```php
-class MyNodeVisitor extends PhpParser\NodeVisitorAbstract {
-    private $tokens;
-    public function setTokens(array $tokens) {
-        $this->tokens = $tokens;
-    }
-
-    public function leaveNode(PhpParser\Node $node) {
-        if ($node instanceof PhpParser\Node\Stmt\Property) {
-            var_dump(isDeclaredUsingVar($this->tokens, $node));
-        }
-    }
-}
-
-$lexer = new PhpParser\Lexer(array(
-    'usedAttributes' => array(
-        'comments', 'startLine', 'endLine', 'startTokenPos', 'endTokenPos'
-    )
-));
-$parser = (new PhpParser\ParserFactory)->create(PhpParser\ParserFactory::ONLY_PHP7, $lexer);
-
-$visitor = new MyNodeVisitor();
-$traverser = new PhpParser\NodeTraverser();
-$traverser->addVisitor($visitor);
-
-try {
-    $stmts = $parser->parse($code);
-    $visitor->setTokens($lexer->getTokens());
-    $stmts = $traverser->traverse($stmts);
-} catch (PhpParser\Error $e) {
-    echo 'Parse Error: ', $e->getMessage();
-}
-```
-
-The same approach can also be used to perform specific modifications in the code, without changing the formatting in
-other places (which is the case when using the pretty printer).
-
-Lexer extension
----------------
-
-A lexer has to define the following public interface:
-
-```php
-function startLexing(string $code, ErrorHandler $errorHandler = null): void;
-function getTokens(): array;
-function handleHaltCompiler(): string;
-function getNextToken(string &$value = null, array &$startAttributes = null, array &$endAttributes = null): int;
-```
-
-The `startLexing()` method is invoked whenever the `parse()` method of the parser is called and is passed the source
-code that is to be lexed (including the opening tag). It can be used to reset state or preprocess the source code or tokens. The
-passed `ErrorHandler` should be used to report lexing errors.
-
-The `getTokens()` method returns the current token array, in the usual `token_get_all()` format. This method is not
-used by the parser (which uses `getNextToken()`), but is useful in combination with the token position attributes.
-
-The `handleHaltCompiler()` method is called whenever a `T_HALT_COMPILER` token is encountered. It has to return the
-remaining string after the construct (not including `();`).
-
-The `getNextToken()` method returns the ID of the next token (as defined by the `Parser::T_*` constants). If no more
-tokens are available it must return `0`, which is the ID of the `EOF` token. Furthermore the string content of the
-token should be written into the by-reference `$value` parameter (which will then be available as `$n` in the parser).
-
-### Attribute handling
-
-The other two by-ref variables `$startAttributes` and `$endAttributes` define which attributes will eventually be
-assigned to the generated nodes: The parser will take the `$startAttributes` from the first token which is part of the
-node and the `$endAttributes` from the last token that is part of the node.
-
-E.g. if the tokens `T_FUNCTION T_STRING ... '{' ... '}'` constitute a node, then the `$startAttributes` from the
-`T_FUNCTION` token will be taken and the `$endAttributes` from the `'}'` token.
-
-An application of custom attributes is storing the exact original formatting of literals: While the parser does retain
-some information about the formatting of integers (like decimal vs. hexadecimal) or strings (like used quote type), it
-does not preserve the exact original formatting (e.g. leading zeros for integers or escape sequences in strings). This
-can be remedied by storing the original value in an attribute:
-
-```php
-use PhpParser\Lexer;
-use PhpParser\Parser\Tokens;
-
-class KeepOriginalValueLexer extends Lexer // or Lexer\Emulative
-{
-    public function getNextToken(&$value = null, &$startAttributes = null, &$endAttributes = null) {
-        $tokenId = parent::getNextToken($value, $startAttributes, $endAttributes);
-
-        if ($tokenId == Tokens::T_CONSTANT_ENCAPSED_STRING   // non-interpolated string
-            || $tokenId == Tokens::T_ENCAPSED_AND_WHITESPACE // interpolated string
-            || $tokenId == Tokens::T_LNUMBER                 // integer
-            || $tokenId == Tokens::T_DNUMBER                 // floating point number
-        ) {
-            // could also use $startAttributes, doesn't really matter here
-            $endAttributes['originalValue'] = $value;
-        }
-
-        return $tokenId;
-    }
-}
-```
diff --git a/vendor/nikic/php-parser/doc/component/Name_resolution.markdown b/vendor/nikic/php-parser/doc/component/Name_resolution.markdown
deleted file mode 100644
index 2a7eb603a9d8fa76f8cc4702d11d0a22d434ecf4..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/doc/component/Name_resolution.markdown
+++ /dev/null
@@ -1,87 +0,0 @@
-Name resolution
-===============
-
-Since the introduction of namespaces in PHP 5.3, literal names in PHP code are subject to a
-relatively complex name resolution process, which is based on the current namespace, the current
-import table state, as well the type of the referenced symbol. PHP-Parser implements name
-resolution and related functionality, both as reusable logic (NameContext), as well as a node
-visitor (NameResolver) based on it.
-
-The NameResolver visitor
-------------------------
-
-The `NameResolver` visitor can (and for nearly all uses of the AST, is) be applied to resolve names
-to their fully-qualified form, to the degree that this is possible.
-
-```php
-$nameResolver = new PhpParser\NodeVisitor\NameResolver;
-$nodeTraverser = new PhpParser\NodeTraverser;
-$nodeTraverser->addVisitor($nameResolver);
-
-// Resolve names
-$stmts = $nodeTraverser->traverse($stmts);
-```
-
-In the default configuration, the name resolver will perform three actions:
-
- * Declarations of functions, classes, interfaces, traits and global constants will have a
-   `namespacedName` property added, which contains the function/class/etc name including the
-   namespace prefix. For historic reasons this is a **property** rather than an attribute.
- * Names will be replaced by fully qualified resolved names, which are instances of
-   `Node\Name\FullyQualified`.
- * Unqualified function and constant names inside a namespace cannot be statically resolved. Inside
-   a namespace `Foo`, a call to `strlen()` may either refer to the namespaced `\Foo\strlen()`, or
-   the global `\strlen()`. Because PHP-Parser does not have the necessary context to decide this,
-   such names are left unresolved. Additionally a `namespacedName` **attribute** is added to the
-   name node.
-
-The name resolver accepts an option array as the second argument, with the following default values:
-
-```php
-$nameResolver = new PhpParser\NodeVisitor\NameResolver(null, [
-    'preserveOriginalNames' => false,
-    'replaceNodes' => true,
-]);
-```
-
-If the `preserveOriginalNames` option is enabled, then the resolved (fully qualified) name will have
-an `originalName` attribute, which contains the unresolved name.
-
-If the `replaceNodes` option is disabled, then names will no longer be resolved in-place. Instead a
-`resolvedName` attribute will be added to each name, which contains the resolved (fully qualified)
-name. Once again, if an unqualified function or constant name cannot be resolved, then the
-`resolvedName` attribute will not be present, and instead a `namespacedName` attribute is added.
-
-The `replaceNodes` attribute is useful if you wish to perform modifications on the AST, as you
-probably do not wish the resoluting code to have fully resolved names as a side-effect.
-
-The NameContext
----------------
-
-The actual name resolution logic is implemented in the `NameContext` class, which has the following
-public API:
-
-```php
-class NameContext {
-    public function __construct(ErrorHandler $errorHandler);
-    public function startNamespace(Name $namespace = null);
-    public function addAlias(Name $name, string $aliasName, int $type, array $errorAttrs = []);
-
-    public function getNamespace();
-    public function getResolvedName(Name $name, int $type);
-    public function getResolvedClassName(Name $name) : Name;
-    public function getPossibleNames(string $name, int $type) : array;
-    public function getShortName(string $name, int $type) : Name;
-}
-```
-
-The `$type` parameters accept on of the `Stmt\Use_::TYPE_*` constants, which represent the three
-basic symbol types in PHP (functions, constants and everything else).
-
-Next to name resolution, the `NameContext` also supports the reverse operation of finding a short
-representation of a name given the current name resolution environment.
-
-The name context is intended to be used for name resolution operations outside the AST itself, such
-as class names inside doc comments. A visitor running in parallel with the name resolver can access
-the name context using `$nameResolver->getNameContext()`. Alternatively a visitor can use an
-independent context and explicitly feed `Namespace` and `Use` nodes to it.
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/doc/component/Performance.markdown b/vendor/nikic/php-parser/doc/component/Performance.markdown
deleted file mode 100644
index 4281ce8cbeb56721d5619f145509d57167214d62..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/doc/component/Performance.markdown
+++ /dev/null
@@ -1,65 +0,0 @@
-Performance
-===========
-
-Parsing is computationally expensive task, to which the PHP language is not very well suited.
-Nonetheless, there are a few things you can do to improve the performance of this library, which are
-described in the following.
-
-Xdebug
-------
-
-Running PHP with XDebug adds a lot of overhead, especially for code that performs many method calls.
-Just by loading XDebug (without enabling profiling or other more intrusive XDebug features), you
-can expect that code using PHP-Parser will be approximately *five times slower*.
-
-As such, you should make sure that XDebug is not loaded when using this library. Note that setting
-the `xdebug.default_enable=0` ini option does *not* disable XDebug. The *only* way to disable
-XDebug is to not load the extension in the first place.
-
-If you are building a command-line utility for use by developers (who often have XDebug enabled),
-you may want to consider automatically restarting PHP with XDebug unloaded. The
-[composer/xdebug-handler](https://github.com/composer/xdebug-handler) package can be used to do
-this.
-
-If you do run with XDebug, you may need to increase the `xdebug.max_nesting_level` option to a
-higher level, such as 3000. While the parser itself is recursion free, most other code working on
-the AST uses recursion and will generate an error if the value of this option is too low.
-
-Assertions
-----------
-
-Assertions should be disabled in a production context by setting `zend.assertions=-1` (or
-`zend.assertions=0` if set at runtime). The library currently doesn't make heavy use of assertions,
-but they are used in an increasing number of places.
-
-Object reuse
-------------
-
-Many objects in this project are designed for reuse. For example, one `Parser` object can be used to
-parse multiple files.
-
-When possible, objects should be reused rather than being newly instantiated for every use. Some
-objects have expensive initialization procedures, which will be unnecessarily repeated if the object
-is not reused. (Currently two objects with particularly expensive setup are lexers and pretty
-printers, though the details might change between versions of this library.)
-
-Garbage collection
-------------------
-
-A limitation in PHP's cyclic garbage collector may lead to major performance degradation when the
-active working set exceeds 10000 objects (or arrays). Especially when parsing very large files this
-limit is significantly exceeded and PHP will spend the majority of time performing unnecessary
-garbage collection attempts.
-
-Without GC, parsing time is roughly linear in the input size. With GC, this degenerates to quadratic
-runtime for large files. While the specifics may differ, as a rough guideline you may expect a 2.5x
-GC overhead for 500KB files and a 5x overhead for 1MB files.
-
-Because this a limitation in PHP's implementation, there is no easy way to work around this. If
-possible, you should avoid parsing very large files, as they will impact overall execution time
-disproportionally (and are usually generated anyway).
-
-Of course, you can also try to (temporarily) disable GC. By design the AST generated by PHP-Parser
-is cycle-free, so the AST itself will never cause leaks with GC disabled. However, other code
-(including for example the parser object itself) may hold cycles, so disabling of GC should be
-approached with care.
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/doc/component/Pretty_printing.markdown b/vendor/nikic/php-parser/doc/component/Pretty_printing.markdown
deleted file mode 100644
index d6198e315f098635e87ca2bad7687b30e7168303..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/doc/component/Pretty_printing.markdown
+++ /dev/null
@@ -1,96 +0,0 @@
-Pretty printing
-===============
-
-Pretty printing is the process of converting a syntax tree back to PHP code. In its basic mode of
-operation the pretty printer provided by this library will print the AST using a certain predefined
-code style and will discard (nearly) all formatting of the original code. Because programmers tend
-to be rather picky about their code formatting, this mode of operation is not very suitable for
-refactoring code, but can be used for automatically generated code, which is usually only read for
-debugging purposes.
-
-Basic usage
------------
-
-```php
-$stmts = $parser->parse($code);
-
-// MODIFY $stmts here
-
-$prettyPrinter = new PhpParser\PrettyPrinter\Standard;
-$newCode = $prettyPrinter->prettyPrintFile($stmts);
-```
-
-The pretty printer has three basic printing methods: `prettyPrint()`, `prettyPrintFile()` and
-`prettyPrintExpr()`. The one that is most commonly useful is `prettyPrintFile()`, which takes an
-array of statements and produces a full PHP file, including opening `<?php`.
-
-`prettyPrint()` also takes a statement array, but produces code which is valid inside an already
-open `<?php` context. Lastly, `prettyPrintExpr()` takes an `Expr` node and prints only a single
-expression.
-
-Customizing the formatting
---------------------------
-
-Apart from an `shortArraySyntax` option, the default pretty printer does not provide any
-functionality to customize the formatting of the generated code. The pretty printer does respect a
-number of `kind` attributes used by some notes (e.g., whether an integer should be printed as
-decimal, hexadecimal, etc), but there are no options to control brace placement or similar.
-
-If you want to make minor changes to the formatting, the easiest way is to extend the pretty printer
-and override the methods responsible for the node types you are interested in.
-
-If you want to have more fine-grained formatting control, the recommended method is to combine the
-default pretty printer with an existing library for code reformatting, such as
-[PHP-CS-Fixer](https://github.com/FriendsOfPHP/PHP-CS-Fixer).
-
-Formatting-preserving pretty printing
--------------------------------------
-
-> **Note:** This functionality is **experimental** and not yet complete.
-
-For automated code refactoring, migration and similar, you will usually only want to modify a small
-portion of the code and leave the remainder alone. The basic pretty printer is not suitable for
-this, because it will also reformat parts of the code which have not been modified.
-
-Since PHP-Parser 4.0, an experimental formatting-preserving pretty-printing mode is available, which
-attempts to preserve the formatting of code (those AST nodes that have not changed) and only reformat
-code which has been modified or newly inserted.
-
-Use of the formatting-preservation functionality requires some additional preparatory steps:
-
-```php
-use PhpParser\{Lexer, NodeTraverser, NodeVisitor, Parser, PrettyPrinter};
-
-$lexer = new Lexer\Emulative([
-    'usedAttributes' => [
-        'comments',
-        'startLine', 'endLine',
-        'startTokenPos', 'endTokenPos',
-    ],
-]);
-$parser = new Parser\Php7($lexer);
-
-$traverser = new NodeTraverser();
-$traverser->addVisitor(new NodeVisitor\CloningVisitor());
-
-$printer = new PrettyPrinter\Standard();
-
-$oldStmts = $parser->parse($code);
-$oldTokens = $lexer->getTokens();
-
-$newStmts = $traverser->traverse($oldStmts);
-
-// MODIFY $newStmts HERE
-
-$newCode = $printer->printFormatPreserving($newStmts, $oldStmts, $oldTokens);
-```
-
-If you make use of the name resolution functionality, you will likely want to disable the
-`replaceNodes` option. This will add resolved names as attributes, instead of directlying modifying
-the AST and causing spurious changes to the pretty printed code. For more information, see the
-[name resolution documentation](Name_resolution.markdown).
-
-This functionality is experimental and not yet fully implemented. It should not provide incorrect
-code, but it may sometimes reformat more code than necessary. Open issues are tracked in
-[issue #344](https://github.com/nikic/PHP-Parser/issues/344). If you encounter problems while using
-this functionality, please open an issue, so we know what to prioritize.
diff --git a/vendor/nikic/php-parser/doc/component/Walking_the_AST.markdown b/vendor/nikic/php-parser/doc/component/Walking_the_AST.markdown
deleted file mode 100644
index 69af1e832fc93d00e9c008c9280f1aa7f475f329..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/doc/component/Walking_the_AST.markdown
+++ /dev/null
@@ -1,337 +0,0 @@
-Walking the AST
-===============
-
-The most common way to work with the AST is by using a node traverser and one or more node visitors.
-As a basic example, the following code changes all literal integers in the AST into strings (e.g.,
-`42` becomes `'42'`.)
-
-```php
-use PhpParser\{Node, NodeTraverser, NodeVisitorAbstract};
-
-$traverser = new NodeTraverser;
-$traverser->addVisitor(new class extends NodeVisitorAbstract {
-    public function leaveNode(Node $node) {
-        if ($node instanceof Node\Scalar\LNumber) {
-            return new Node\Scalar\String_((string) $node->value);
-        }
-    }
-});
-
-$stmts = ...;
-$modifiedStmts = $traverser->traverse($stmts);
-```
-
-Node visitors
--------------
-
-Each node visitor implements an interface with following four methods:
-
-```php
-interface NodeVisitor {
-    public function beforeTraverse(array $nodes);
-    public function enterNode(Node $node);
-    public function leaveNode(Node $node);
-    public function afterTraverse(array $nodes);
-}
-```
-
-The `beforeTraverse()` and `afterTraverse()` methods are called before and after the traversal
-respectively, and are passed the entire AST. They can be used to perform any necessary state
-setup or cleanup.
-
-The `enterNode()` method is called when a node is first encountered, before its children are
-processed ("preorder"). The `leaveNode()` method is called after all children have been visited
-("postorder").
-
-For example, if we have the following excerpt of an AST
-
-```
-Expr_FuncCall(
-    name: Name(
-        parts: array(
-            0: printLine
-        )
-    )
-    args: array(
-        0: Arg(
-            value: Scalar_String(
-                value: Hello World!!!
-            )
-            byRef: false
-            unpack: false
-        )
-    )
-)
-```
-
-then the enter/leave methods will be called in the following order:
-
-```
-enterNode(Expr_FuncCall)
-enterNode(Name)
-leaveNode(Name)
-enterNode(Arg)
-enterNode(Scalar_String)
-leaveNode(Scalar_String)
-leaveNode(Arg)
-leaveNode(Expr_FuncCall)
-```
-
-A common pattern is that `enterNode` is used to collect some information and then `leaveNode`
-performs modifications based on that. At the time when `leaveNode` is called, all the code inside
-the node will have already been visited and necessary information collected.
-
-As you usually do not want to implement all four methods, it is recommended that you extend
-`NodeVisitorAbstract` instead of implementing the interface directly. The abstract class provides
-empty default implementations.
-
-Modifying the AST
------------------
-
-There are a number of ways in which the AST can be modified from inside a node visitor. The first
-and simplest is to simply change AST properties inside the visitor:
-
-```php
-public function leaveNode(Node $node) {
-    if ($node instanceof Node\Scalar\LNumber) {
-        // increment all integer literals
-        $node->value++;
-    }
-}
-```
-
-The second is to replace a node entirely by returning a new node:
-
-```php
-public function leaveNode(Node $node) {
-    if ($node instanceof Node\Expr\BinaryOp\BooleanAnd) {
-        // Convert all $a && $b expressions into !($a && $b)
-        return new Node\Expr\BooleanNot($node);
-    }
-}
-```
-
-Doing this is supported both inside enterNode and leaveNode. However, you have to be mindful about
-where you perform the replacement: If a node is replaced in enterNode, then the recursive traversal
-will also consider the children of the new node. If you aren't careful, this can lead to infinite
-recursion. For example, let's take the previous code sample and use enterNode instead:
-
-```php
-public function enterNode(Node $node) {
-    if ($node instanceof Node\Expr\BinaryOp\BooleanAnd) {
-        // Convert all $a && $b expressions into !($a && $b)
-        return new Node\Expr\BooleanNot($node);
-    }
-}
-```
-
-Now `$a && $b` will be replaced by `!($a && $b)`. Then the traverser will go into the first (and
-only) child of `!($a && $b)`, which is `$a && $b`. The transformation applies again and we end up
-with `!!($a && $b)`. This will continue until PHP hits the memory limit.
-
-Finally, two special replacement types are supported only by leaveNode. The first is removal of a
-node:
-
-```php
-public function leaveNode(Node $node) {
-    if ($node instanceof Node\Stmt\Return_) {
-        // Remove all return statements
-        return NodeTraverser::REMOVE_NODE;
-    }
-}
-```
-
-Node removal only works if the parent structure is an array. This means that usually it only makes
-sense to remove nodes of type `Node\Stmt`, as they always occur inside statement lists (and a few
-more node types like `Arg` or `Expr\ArrayItem`, which are also always part of lists).
-
-On the other hand, removing a `Node\Expr` does not make sense: If you have `$a * $b`, there is no
-meaningful way in which the `$a` part could be removed. If you want to remove an expression, you
-generally want to remove it together with a surrounding expression statement:
-
-```php
-public function leaveNode(Node $node) {
-    if ($node instanceof Node\Stmt\Expression
-        && $node->expr instanceof Node\Expr\FuncCall
-        && $node->expr->name instanceof Node\Name
-        && $node->expr->name->toString() === 'var_dump'
-    ) {
-        return NodeTraverser::REMOVE_NODE;
-    }
-}
-```
-
-This example will remove all calls to `var_dump()` which occur as expression statements. This means
-that `var_dump($a);` will be removed, but `if (var_dump($a))` will not be removed (and there is no
-obvious way in which it can be removed).
-
-Next to removing nodes, it is also possible to replace one node with multiple nodes. Again, this
-only works inside leaveNode and only if the parent structure is an array.
-
-```php
-public function leaveNode(Node $node) {
-    if ($node instanceof Node\Stmt\Return_ && $node->expr !== null) {
-        // Convert "return foo();" into "$retval = foo(); return $retval;"
-        $var = new Node\Expr\Variable('retval');
-        return [
-            new Node\Stmt\Expression(new Node\Expr\Assign($var, $node->expr)),
-            new Node\Stmt\Return_($var),
-        ];
-    }
-}
-```
-
-Short-circuiting traversal
---------------------------
-
-An AST can easily contain thousands of nodes, and traversing over all of them may be slow,
-especially if you have more than one visitor. In some cases, it is possible to avoid a full
-traversal.
-
-If you are looking for all class declarations in a file (and assuming you're not interested in
-anonymous classes), you know that once you've seen a class declaration, there is no point in also
-checking all it's child nodes, because PHP does not allow nesting classes. In this case, you can
-instruct the traverser to not recurse into the class node:
-
-```
-private $classes = [];
-public function enterNode(Node $node) {
-    if ($node instanceof Node\Stmt\Class_) {
-        $this->classes[] = $node;
-        return NodeTraverser::DONT_TRAVERSE_CHILDREN;
-    }
-}
-```
-
-Of course, this option is only available in enterNode, because it's already too late by the time
-leaveNode is reached.
-
-If you are only looking for one specific node, it is also possible to abort the traversal entirely
-after finding it. For example, if you are looking for the node of a class with a certain name (and
-discounting exotic cases like conditionally defining a class two times), you can stop traversal
-once you found it:
-
-```
-private $class = null;
-public function enterNode(Node $node) {
-    if ($node instanceof Node\Stmt\Class_ &&
-        $node->namespacedName->toString() === 'Foo\Bar\Baz'
-    ) {
-        $this->class = $node;
-        return NodeTraverser::STOP_TRAVERSAL;
-    }
-}
-```
-
-This works both in enterNode and leaveNode. Note that this particular case can also be more easily
-handled using a NodeFinder, which will be introduced below.
-
-Multiple visitors
------------------
-
-A single traverser can be used with multiple visitors:
-
-```php
-$traverser = new NodeTraverser;
-$traverser->addVisitor($visitorA);
-$traverser->addVisitor($visitorB);
-$stmts = $traverser->traverse($stmts);
-```
-
-It is important to understand that if a traverser is run with multiple visitors, the visitors will
-be interleaved. Given the following AST excerpt
-
-```
-Stmt_Return(
-    expr: Expr_Variable(
-        name: foobar
-    )
-)
-```
-
-the following method calls will be performed:
-
-```
-$visitorA->enterNode(Stmt_Return)
-$visitorB->enterNode(Stmt_Return)
-$visitorA->enterNode(Expr_Variable)
-$visitorB->enterNode(Expr_Variable)
-$visitorA->leaveNode(Expr_Variable)
-$visitorB->leaveNode(Expr_Variable)
-$visitorA->leaveNode(Stmt_Return)
-$visitorB->leaveNode(Stmt_Return)
-```
-
-That is, when visiting a node, enterNode and leaveNode will always be called for all visitors.
-Running multiple visitors in parallel improves performance, as the AST only has to be traversed
-once. However, it is not always possible to write visitors in a way that allows interleaved
-execution. In this case, you can always fall back to performing multiple traversals:
-
-```php
-$traverserA = new NodeTraverser;
-$traverserA->addVisitor($visitorA);
-$traverserB = new NodeTraverser;
-$traverserB->addVisitor($visitorB);
-$stmts = $traverserA->traverser($stmts);
-$stmts = $traverserB->traverser($stmts);
-```
-
-When using multiple visitors, it is important to understand how they interact with the various
-special enterNode/leaveNode return values:
-
- * If *any* visitor returns `DONT_TRAVERSE_CHILDREN`, the children will be skipped for *all*
-   visitors.
- * If *any* visitor returns `DONT_TRAVERSE_CURRENT_AND_CHILDREN`, the children will be skipped for *all*
-   visitors, and all *subsequent* visitors will not visit the current node.
- * If *any* visitor returns `STOP_TRAVERSAL`, traversal is stopped for *all* visitors.
- * If a visitor returns a replacement node, subsequent visitors will be passed the replacement node,
-   not the original one.
- * If a visitor returns `REMOVE_NODE`, subsequent visitors will not see this node.
- * If a visitor returns an array of replacement nodes, subsequent visitors will see neither the node
-   that was replaced, nor the replacement nodes.
-
-Simple node finding
--------------------
-
-While the node visitor mechanism is very flexible, creating a node visitor can be overly cumbersome
-for minor tasks. For this reason a `NodeFinder` is provided, which can find AST nodes that either
-satisfy a certain callback, or which are instanced of a certain node type. A couple of examples are
-shown in the following:
-
-```php
-use PhpParser\{Node, NodeFinder};
-
-$nodeFinder = new NodeFinder;
-
-// Find all class nodes.
-$classes = $nodeFinder->findInstanceOf($stmts, Node\Stmt\Class_::class);
-
-// Find all classes that extend another class
-$extendingClasses = $nodeFinder->find($stmts, function(Node $node) {
-    return $node instanceof Node\Stmt\Class_
-        && $node->extends !== null;
-});
-
-// Find first class occuring in the AST. Returns null if no class exists.
-$class = $nodeFinder->findFirstInstanceOf($stmts, Node\Stmt\Class_::class);
-
-// Find first class that has name $name
-$class = $nodeFinder->findFirst($stmts, function(Node $node) use ($name) {
-    return $node instanceof Node\Stmt\Class_
-        && $node->resolvedName->toString() === $name;
-});
-```
-
-Internally, the `NodeFinder` also uses a node traverser. It only simplifies the interface for a
-common use case.
-
-Parent and sibling references
------------------------------
-
-The node visitor mechanism is somewhat rigid, in that it prescribes an order in which nodes should
-be accessed: From parents to children. However, it can often be convenient to operate in the
-reverse direction: When working on a node, you might want to check if the parent node satisfies a
-certain property.
-
-PHP-Parser does not add parent (or sibling) references to nodes by itself, but you can easily
-emulate this with a visitor. See the [FAQ](FAQ.markdown) for more information.
diff --git a/vendor/nikic/php-parser/grammar/README.md b/vendor/nikic/php-parser/grammar/README.md
index 90988cf4441226570bf91ebad00dcbba2044e850..4bae11d8261cb1bf6462f5be54e22f1a7f099afa 100644
--- a/vendor/nikic/php-parser/grammar/README.md
+++ b/vendor/nikic/php-parser/grammar/README.md
@@ -21,8 +21,10 @@ applied to it:
 Building the parser
 ===================
 
-In order to rebuild the parser, you need [moriyoshi's fork of kmyacc](https://github.com/moriyoshi/kmyacc-forked).
-After you compiled/installed it, run the `rebuildParsers.php` script.
+Run `php grammar/rebuildParsers.php` to rebuild the parsers. Additional options:
 
-By default only the `Parser.php` is built. If you want to additionally emit debug symbols and create `y.output`, run the
-script with `--debug`. If you want to retain the preprocessed grammar pass `--keep-tmp-grammar`.
+ * The `KMYACC` environment variable can be used to specify an alternative `kmyacc` binary.
+   By default the `phpyacc` dev dependency will be used. To use the original `kmyacc`, you
+   need to compile [moriyoshi's fork](https://github.com/moriyoshi/kmyacc-forked).
+ * The `--debug` option enables emission of debug symbols and creates the `y.output` file.
+ * The `--keep-tmp-grammar` option preserves the preprocessed grammar file.
diff --git a/vendor/nikic/php-parser/grammar/php5.y b/vendor/nikic/php-parser/grammar/php5.y
index e775f2cab749d1c7e64a7308223e8579f744f0eb..c7d245dc78f6b1c67f0e9739c376aa91953a5a84 100644
--- a/vendor/nikic/php-parser/grammar/php5.y
+++ b/vendor/nikic/php-parser/grammar/php5.y
@@ -28,6 +28,7 @@ reserved_non_modifiers:
     | T_FUNCTION | T_CONST | T_RETURN | T_PRINT | T_YIELD | T_LIST | T_SWITCH | T_ENDSWITCH | T_CASE | T_DEFAULT
     | T_BREAK | T_ARRAY | T_CALLABLE | T_EXTENDS | T_IMPLEMENTS | T_NAMESPACE | T_TRAIT | T_INTERFACE | T_CLASS
     | T_CLASS_C | T_TRAIT_C | T_FUNC_C | T_METHOD_C | T_LINE | T_FILE | T_DIR | T_NS_C | T_HALT_COMPILER | T_FN
+    | T_MATCH
 ;
 
 semi_reserved:
@@ -48,13 +49,14 @@ reserved_non_modifiers_identifier:
       reserved_non_modifiers                                { $$ = Node\Identifier[$1]; }
 ;
 
-namespace_name_parts:
-      T_STRING                                              { init($1); }
-    | namespace_name_parts T_NS_SEPARATOR T_STRING          { push($1, $3); }
+namespace_name:
+      T_STRING                                              { $$ = Name[$1]; }
+    | T_NAME_QUALIFIED                                      { $$ = Name[$1]; }
 ;
 
-namespace_name:
-      namespace_name_parts                                  { $$ = Name[$1]; }
+legacy_namespace_name:
+      namespace_name                                        { $$ = $1; }
+    | T_NAME_FULLY_QUALIFIED                                { $$ = Name[substr($1, 1)]; }
 ;
 
 plain_variable:
@@ -90,16 +92,11 @@ use_type:
     | T_CONST                                               { $$ = Stmt\Use_::TYPE_CONSTANT; }
 ;
 
-/* Using namespace_name_parts here to avoid s/r conflict on T_NS_SEPARATOR */
 group_use_declaration:
-      T_USE use_type namespace_name_parts T_NS_SEPARATOR '{' unprefixed_use_declarations '}'
-          { $$ = Stmt\GroupUse[new Name($3, stackAttributes(#3)), $6, $2]; }
-    | T_USE use_type T_NS_SEPARATOR namespace_name_parts T_NS_SEPARATOR '{' unprefixed_use_declarations '}'
-          { $$ = Stmt\GroupUse[new Name($4, stackAttributes(#4)), $7, $2]; }
-    | T_USE namespace_name_parts T_NS_SEPARATOR '{' inline_use_declarations '}'
-          { $$ = Stmt\GroupUse[new Name($2, stackAttributes(#2)), $5, Stmt\Use_::TYPE_UNKNOWN]; }
-    | T_USE T_NS_SEPARATOR namespace_name_parts T_NS_SEPARATOR '{' inline_use_declarations '}'
-          { $$ = Stmt\GroupUse[new Name($3, stackAttributes(#3)), $6, Stmt\Use_::TYPE_UNKNOWN]; }
+      T_USE use_type legacy_namespace_name T_NS_SEPARATOR '{' unprefixed_use_declarations '}'
+          { $$ = Stmt\GroupUse[$3, $6, $2]; }
+    | T_USE legacy_namespace_name T_NS_SEPARATOR '{' inline_use_declarations '}'
+          { $$ = Stmt\GroupUse[$2, $5, Stmt\Use_::TYPE_UNKNOWN]; }
 ;
 
 unprefixed_use_declarations:
@@ -126,8 +123,10 @@ unprefixed_use_declaration:
 ;
 
 use_declaration:
-      unprefixed_use_declaration                            { $$ = $1; }
-    | T_NS_SEPARATOR unprefixed_use_declaration             { $$ = $2; }
+      legacy_namespace_name
+          { $$ = Stmt\UseUse[$1, null, Stmt\Use_::TYPE_UNKNOWN]; $this->checkUseUse($$, #1); }
+    | legacy_namespace_name T_AS identifier
+          { $$ = Stmt\UseUse[$1, $3, Stmt\Use_::TYPE_UNKNOWN]; $this->checkUseUse($$, #3); }
 ;
 
 inline_use_declaration:
@@ -733,9 +732,10 @@ class_name:
 ;
 
 name:
-      namespace_name_parts                                  { $$ = Name[$1]; }
-    | T_NS_SEPARATOR namespace_name_parts                   { $$ = Name\FullyQualified[$2]; }
-    | T_NAMESPACE T_NS_SEPARATOR namespace_name_parts       { $$ = Name\Relative[$3]; }
+      T_STRING                                              { $$ = Name[$1]; }
+    | T_NAME_QUALIFIED                                      { $$ = Name[$1]; }
+    | T_NAME_FULLY_QUALIFIED                                { $$ = Name\FullyQualified[substr($1, 1)]; }
+    | T_NAME_RELATIVE                                       { $$ = Name\Relative[substr($1, 10)]; }
 ;
 
 class_name_reference:
diff --git a/vendor/nikic/php-parser/grammar/php7.y b/vendor/nikic/php-parser/grammar/php7.y
index 23b193bbba774b100abdef2ea4254ca56020b96b..8add7833874fd6682bb8942c93e977b9df5bc35e 100644
--- a/vendor/nikic/php-parser/grammar/php7.y
+++ b/vendor/nikic/php-parser/grammar/php7.y
@@ -28,6 +28,7 @@ reserved_non_modifiers:
     | T_FUNCTION | T_CONST | T_RETURN | T_PRINT | T_YIELD | T_LIST | T_SWITCH | T_ENDSWITCH | T_CASE | T_DEFAULT
     | T_BREAK | T_ARRAY | T_CALLABLE | T_EXTENDS | T_IMPLEMENTS | T_NAMESPACE | T_TRAIT | T_INTERFACE | T_CLASS
     | T_CLASS_C | T_TRAIT_C | T_FUNC_C | T_METHOD_C | T_LINE | T_FILE | T_DIR | T_NS_C | T_HALT_COMPILER | T_FN
+    | T_MATCH
 ;
 
 semi_reserved:
@@ -48,13 +49,20 @@ reserved_non_modifiers_identifier:
       reserved_non_modifiers                                { $$ = Node\Identifier[$1]; }
 ;
 
-namespace_name_parts:
-      T_STRING                                              { init($1); }
-    | namespace_name_parts T_NS_SEPARATOR T_STRING          { push($1, $3); }
+namespace_declaration_name:
+      T_STRING                                              { $$ = Name[$1]; }
+    | semi_reserved                                         { $$ = Name[$1]; }
+    | T_NAME_QUALIFIED                                      { $$ = Name[$1]; }
 ;
 
 namespace_name:
-      namespace_name_parts                                  { $$ = Name[$1]; }
+      T_STRING                                              { $$ = Name[$1]; }
+    | T_NAME_QUALIFIED                                      { $$ = Name[$1]; }
+;
+
+legacy_namespace_name:
+      namespace_name                                        { $$ = $1; }
+    | T_NAME_FULLY_QUALIFIED                                { $$ = Name[substr($1, 1)]; }
 ;
 
 plain_variable:
@@ -74,6 +82,31 @@ no_comma:
 optional_comma:
       /* empty */
     | ','
+;
+
+attribute_decl:
+      class_name                                            { $$ = Node\Attribute[$1, []]; }
+    | class_name argument_list                              { $$ = Node\Attribute[$1, $2]; }
+;
+
+attribute_group:
+      attribute_decl                                        { init($1); }
+    | attribute_group ',' attribute_decl                    { push($1, $3); }
+;
+
+attribute:
+      T_ATTRIBUTE attribute_group optional_comma ']'        { $$ = Node\AttributeGroup[$2]; }
+;
+
+attributes:
+      attribute                                             { init($1); }
+    | attributes attribute                                  { push($1, $2); }
+;
+
+optional_attributes:
+      /* empty */                                           { $$ = []; }
+    | attributes                                            { $$ = $1; }
+;
 
 top_statement:
       statement                                             { $$ = $1; }
@@ -81,11 +114,11 @@ top_statement:
     | class_declaration_statement                           { $$ = $1; }
     | T_HALT_COMPILER
           { $$ = Stmt\HaltCompiler[$this->lexer->handleHaltCompiler()]; }
-    | T_NAMESPACE namespace_name semi
+    | T_NAMESPACE namespace_declaration_name semi
           { $$ = Stmt\Namespace_[$2, null];
             $$->setAttribute('kind', Stmt\Namespace_::KIND_SEMICOLON);
             $this->checkNamespace($$); }
-    | T_NAMESPACE namespace_name '{' top_statement_list '}'
+    | T_NAMESPACE namespace_declaration_name '{' top_statement_list '}'
           { $$ = Stmt\Namespace_[$2, $4];
             $$->setAttribute('kind', Stmt\Namespace_::KIND_BRACED);
             $this->checkNamespace($$); }
@@ -104,16 +137,11 @@ use_type:
     | T_CONST                                               { $$ = Stmt\Use_::TYPE_CONSTANT; }
 ;
 
-/* Using namespace_name_parts here to avoid s/r conflict on T_NS_SEPARATOR */
 group_use_declaration:
-      T_USE use_type namespace_name_parts T_NS_SEPARATOR '{' unprefixed_use_declarations '}'
-          { $$ = Stmt\GroupUse[new Name($3, stackAttributes(#3)), $6, $2]; }
-    | T_USE use_type T_NS_SEPARATOR namespace_name_parts T_NS_SEPARATOR '{' unprefixed_use_declarations '}'
-          { $$ = Stmt\GroupUse[new Name($4, stackAttributes(#4)), $7, $2]; }
-    | T_USE namespace_name_parts T_NS_SEPARATOR '{' inline_use_declarations '}'
-          { $$ = Stmt\GroupUse[new Name($2, stackAttributes(#2)), $5, Stmt\Use_::TYPE_UNKNOWN]; }
-    | T_USE T_NS_SEPARATOR namespace_name_parts T_NS_SEPARATOR '{' inline_use_declarations '}'
-          { $$ = Stmt\GroupUse[new Name($3, stackAttributes(#3)), $6, Stmt\Use_::TYPE_UNKNOWN]; }
+      T_USE use_type legacy_namespace_name T_NS_SEPARATOR '{' unprefixed_use_declarations '}'
+          { $$ = Stmt\GroupUse[$3, $6, $2]; }
+    | T_USE legacy_namespace_name T_NS_SEPARATOR '{' inline_use_declarations '}'
+          { $$ = Stmt\GroupUse[$2, $5, Stmt\Use_::TYPE_UNKNOWN]; }
 ;
 
 unprefixed_use_declarations:
@@ -153,8 +181,10 @@ unprefixed_use_declaration:
 ;
 
 use_declaration:
-      unprefixed_use_declaration                            { $$ = $1; }
-    | T_NS_SEPARATOR unprefixed_use_declaration             { $$ = $2; }
+      legacy_namespace_name
+          { $$ = Stmt\UseUse[$1, null, Stmt\Use_::TYPE_UNKNOWN]; $this->checkUseUse($$, #1); }
+    | legacy_namespace_name T_AS identifier
+          { $$ = Stmt\UseUse[$1, $3, Stmt\Use_::TYPE_UNKNOWN]; $this->checkUseUse($$, #3); }
 ;
 
 inline_use_declaration:
@@ -232,9 +262,18 @@ non_empty_statement:
     | T_RETURN optional_expr semi                           { $$ = Stmt\Return_[$2]; }
     | T_GLOBAL global_var_list semi                         { $$ = Stmt\Global_[$2]; }
     | T_STATIC static_var_list semi                         { $$ = Stmt\Static_[$2]; }
-    | T_ECHO expr_list semi                                 { $$ = Stmt\Echo_[$2]; }
+    | T_ECHO expr_list_forbid_comma semi                    { $$ = Stmt\Echo_[$2]; }
     | T_INLINE_HTML                                         { $$ = Stmt\InlineHTML[$1]; }
-    | expr semi                                             { $$ = Stmt\Expression[$1]; }
+    | expr semi {
+        $e = $1;
+        if ($e instanceof Expr\Throw_) {
+            // For backwards-compatibility reasons, convert throw in statement position into
+            // Stmt\Throw_ rather than Stmt\Expression(Expr\Throw_).
+            $$ = Stmt\Throw_[$e->expr];
+        } else {
+            $$ = Stmt\Expression[$e];
+        }
+    }
     | T_UNSET '(' variables_list ')' semi                   { $$ = Stmt\Unset_[$3]; }
     | T_FOREACH '(' expr T_AS foreach_variable ')' foreach_statement
           { $$ = Stmt\Foreach_[$3, $5[0], ['keyVar' => null, 'byRef' => $5[1], 'stmts' => $7]]; }
@@ -245,7 +284,6 @@ non_empty_statement:
     | T_DECLARE '(' declare_list ')' declare_statement      { $$ = Stmt\Declare_[$3, $5]; }
     | T_TRY '{' inner_statement_list '}' catches optional_finally
           { $$ = Stmt\TryCatch[$3, $5, $6]; $this->checkTryCatch($$); }
-    | T_THROW expr semi                                     { $$ = Stmt\Throw_[$2]; }
     | T_GOTO identifier semi                                { $$ = Stmt\Goto_[$2]; }
     | identifier ':'                                        { $$ = Stmt\Label[$1]; }
     | error                                                 { $$ = array(); /* means: no statement */ }
@@ -269,7 +307,7 @@ name_union:
 ;
 
 catch:
-    T_CATCH '(' name_union plain_variable ')' '{' inner_statement_list '}'
+    T_CATCH '(' name_union optional_plain_variable ')' '{' inner_statement_list '}'
         { $$ = Stmt\Catch_[$3, $4, $7]; }
 ;
 
@@ -303,19 +341,24 @@ block_or_error:
 ;
 
 function_declaration_statement:
-    T_FUNCTION optional_ref identifier '(' parameter_list ')' optional_return_type block_or_error
-        { $$ = Stmt\Function_[$3, ['byRef' => $2, 'params' => $5, 'returnType' => $7, 'stmts' => $8]]; }
+      T_FUNCTION optional_ref identifier '(' parameter_list ')' optional_return_type block_or_error
+          { $$ = Stmt\Function_[$3, ['byRef' => $2, 'params' => $5, 'returnType' => $7, 'stmts' => $8, 'attrGroups' => []]]; }
+    | attributes T_FUNCTION optional_ref identifier '(' parameter_list ')' optional_return_type block_or_error
+          { $$ = Stmt\Function_[$4, ['byRef' => $3, 'params' => $6, 'returnType' => $8, 'stmts' => $9, 'attrGroups' => $1]]; }
 ;
 
 class_declaration_statement:
       class_entry_type identifier extends_from implements_list '{' class_statement_list '}'
-          { $$ = Stmt\Class_[$2, ['type' => $1, 'extends' => $3, 'implements' => $4, 'stmts' => $6]];
+          { $$ = Stmt\Class_[$2, ['type' => $1, 'extends' => $3, 'implements' => $4, 'stmts' => $6, 'attrGroups' => []]];
             $this->checkClass($$, #2); }
-    | T_INTERFACE identifier interface_extends_list '{' class_statement_list '}'
-          { $$ = Stmt\Interface_[$2, ['extends' => $3, 'stmts' => $5]];
-            $this->checkInterface($$, #2); }
-    | T_TRAIT identifier '{' class_statement_list '}'
-          { $$ = Stmt\Trait_[$2, ['stmts' => $4]]; }
+    | attributes class_entry_type identifier extends_from implements_list '{' class_statement_list '}'
+          { $$ = Stmt\Class_[$3, ['type' => $2, 'extends' => $4, 'implements' => $5, 'stmts' => $7, 'attrGroups' => $1]];
+            $this->checkClass($$, #3); }
+    | optional_attributes T_INTERFACE identifier interface_extends_list '{' class_statement_list '}'
+          { $$ = Stmt\Interface_[$3, ['extends' => $4, 'stmts' => $6, 'attrGroups' => $1]];
+            $this->checkInterface($$, #3); }
+    | optional_attributes T_TRAIT identifier '{' class_statement_list '}'
+          { $$ = Stmt\Trait_[$3, ['stmts' => $5, 'attrGroups' => $1]]; }
 ;
 
 class_entry_type:
@@ -399,6 +442,25 @@ case_separator:
     | ';'
 ;
 
+match:
+      T_MATCH '(' expr ')' '{' match_arm_list '}'           { $$ = Expr\Match_[$3, $6]; }
+;
+
+match_arm_list:
+      /* empty */                                           { $$ = []; }
+    | non_empty_match_arm_list optional_comma               { $$ = $1; }
+;
+
+non_empty_match_arm_list:
+      match_arm                                             { init($1); }
+    | non_empty_match_arm_list ',' match_arm                { push($1, $3); }
+;
+
+match_arm:
+      expr_list_allow_comma T_DOUBLE_ARROW expr             { $$ = Node\MatchArm[$1, $3]; }
+    | T_DEFAULT optional_comma T_DOUBLE_ARROW expr          { $$ = Node\MatchArm[null, $4]; }
+;
+
 while_statement:
       statement                                             { $$ = toArray($1); }
     | ':' inner_statement_list T_ENDWHILE ';'               { $$ = $2; }
@@ -440,7 +502,7 @@ foreach_variable:
 ;
 
 parameter_list:
-      non_empty_parameter_list no_comma                     { $$ = $1; }
+      non_empty_parameter_list optional_comma               { $$ = $1; }
     | /* empty */                                           { $$ = array(); }
 ;
 
@@ -449,29 +511,60 @@ non_empty_parameter_list:
     | non_empty_parameter_list ',' parameter                { push($1, $3); }
 ;
 
+optional_visibility_modifier:
+      /* empty */               { $$ = 0; }
+    | T_PUBLIC                  { $$ = Stmt\Class_::MODIFIER_PUBLIC; }
+    | T_PROTECTED               { $$ = Stmt\Class_::MODIFIER_PROTECTED; }
+    | T_PRIVATE                 { $$ = Stmt\Class_::MODIFIER_PRIVATE; }
+;
+
 parameter:
-      optional_type optional_ref optional_ellipsis plain_variable
-          { $$ = Node\Param[$4, null, $1, $2, $3]; $this->checkParam($$); }
-    | optional_type optional_ref optional_ellipsis plain_variable '=' expr
-          { $$ = Node\Param[$4, $6, $1, $2, $3]; $this->checkParam($$); }
-    | optional_type optional_ref optional_ellipsis error
-          { $$ = Node\Param[Expr\Error[], null, $1, $2, $3]; }
+      optional_attributes optional_visibility_modifier optional_type_without_static optional_ref optional_ellipsis plain_variable
+          { $$ = new Node\Param($6, null, $3, $4, $5, attributes(), $2, $1);
+            $this->checkParam($$); }
+    | optional_attributes optional_visibility_modifier optional_type_without_static optional_ref optional_ellipsis plain_variable '=' expr
+          { $$ = new Node\Param($6, $8, $3, $4, $5, attributes(), $2, $1);
+            $this->checkParam($$); }
+    | optional_attributes optional_visibility_modifier optional_type_without_static optional_ref optional_ellipsis error
+          { $$ = new Node\Param(Expr\Error[], null, $3, $4, $5, attributes(), $2, $1); }
 ;
 
 type_expr:
       type                                                  { $$ = $1; }
     | '?' type                                              { $$ = Node\NullableType[$2]; }
+    | union_type                                            { $$ = Node\UnionType[$1]; }
 ;
 
 type:
+      type_without_static                                   { $$ = $1; }
+    | T_STATIC                                              { $$ = Node\Name['static']; }
+;
+
+type_without_static:
       name                                                  { $$ = $this->handleBuiltinTypes($1); }
     | T_ARRAY                                               { $$ = Node\Identifier['array']; }
     | T_CALLABLE                                            { $$ = Node\Identifier['callable']; }
 ;
 
-optional_type:
+union_type:
+      type '|' type                                         { init($1, $3); }
+    | union_type '|' type                                   { push($1, $3); }
+;
+
+union_type_without_static:
+      type_without_static '|' type_without_static           { init($1, $3); }
+    | union_type_without_static '|' type_without_static     { push($1, $3); }
+;
+
+type_expr_without_static:
+      type_without_static                                   { $$ = $1; }
+    | '?' type_without_static                               { $$ = Node\NullableType[$2]; }
+    | union_type_without_static                             { $$ = Node\UnionType[$1]; }
+;
+
+optional_type_without_static:
       /* empty */                                           { $$ = null; }
-    | type_expr                                             { $$ = $1; }
+    | type_expr_without_static                              { $$ = $1; }
 ;
 
 optional_return_type:
@@ -494,6 +587,8 @@ argument:
       expr                                                  { $$ = Node\Arg[$1, false, false]; }
     | '&' variable                                          { $$ = Node\Arg[$2, true, false]; }
     | T_ELLIPSIS expr                                       { $$ = Node\Arg[$2, false, true]; }
+    | identifier_ex ':' expr
+          { $$ = new Node\Arg($3, false, false, attributes(), $1); }
 ;
 
 global_var_list:
@@ -535,14 +630,15 @@ class_statement_list:
 ;
 
 class_statement:
-      variable_modifiers optional_type property_declaration_list ';'
-          { $attrs = attributes();
-            $$ = new Stmt\Property($1, $3, $attrs, $2); $this->checkProperty($$, #1); }
-    | method_modifiers T_CONST class_const_list ';'
-          { $$ = Stmt\ClassConst[$3, $1]; $this->checkClassConst($$, #1); }
-    | method_modifiers T_FUNCTION optional_ref identifier_ex '(' parameter_list ')' optional_return_type method_body
-          { $$ = Stmt\ClassMethod[$4, ['type' => $1, 'byRef' => $3, 'params' => $6, 'returnType' => $8, 'stmts' => $9]];
-            $this->checkClassMethod($$, #1); }
+      optional_attributes variable_modifiers optional_type_without_static property_declaration_list semi
+          { $$ = new Stmt\Property($2, $4, attributes(), $3, $1);
+            $this->checkProperty($$, #2); }
+    | optional_attributes method_modifiers T_CONST class_const_list semi
+          { $$ = new Stmt\ClassConst($4, $2, attributes(), $1);
+            $this->checkClassConst($$, #2); }
+    | optional_attributes method_modifiers T_FUNCTION optional_ref identifier_ex '(' parameter_list ')' optional_return_type method_body
+          { $$ = Stmt\ClassMethod[$5, ['type' => $2, 'byRef' => $4, 'params' => $7, 'returnType' => $9, 'stmts' => $10, 'attrGroups' => $1]];
+            $this->checkClassMethod($$, #2); }
     | T_USE class_name_list trait_adaptations               { $$ = Stmt\TraitUse[$2, $3]; }
     | error                                                 { $$ = null; /* will be skipped */ }
 ;
@@ -626,10 +722,14 @@ property_declaration:
     | property_decl_name '=' expr                           { $$ = Stmt\PropertyProperty[$1, $3]; }
 ;
 
-expr_list:
+expr_list_forbid_comma:
       non_empty_expr_list no_comma                          { $$ = $1; }
 ;
 
+expr_list_allow_comma:
+      non_empty_expr_list optional_comma                    { $$ = $1; }
+;
+
 non_empty_expr_list:
       non_empty_expr_list ',' expr                          { push($1, $3); }
     | expr                                                  { init($1); }
@@ -637,7 +737,7 @@ non_empty_expr_list:
 
 for_expr:
       /* empty */                                           { $$ = array(); }
-    | expr_list                                             { $$ = $1; }
+    | expr_list_forbid_comma                                { $$ = $1; }
 ;
 
 expr:
@@ -647,6 +747,7 @@ expr:
     | variable '=' expr                                     { $$ = Expr\Assign[$1, $3]; }
     | variable '=' '&' variable                             { $$ = Expr\AssignRef[$1, $4]; }
     | new_expr                                              { $$ = $1; }
+    | match                                                 { $$ = $1; }
     | T_CLONE expr                                          { $$ = Expr\Clone_[$2]; }
     | variable T_PLUS_EQUAL expr                            { $$ = Expr\AssignOp\Plus      [$1, $3]; }
     | variable T_MINUS_EQUAL expr                           { $$ = Expr\AssignOp\Minus     [$1, $3]; }
@@ -700,7 +801,7 @@ expr:
     | expr '?' expr ':' expr                                { $$ = Expr\Ternary[$1, $3,   $5]; }
     | expr '?' ':' expr                                     { $$ = Expr\Ternary[$1, null, $4]; }
     | expr T_COALESCE expr                                  { $$ = Expr\BinaryOp\Coalesce[$1, $3]; }
-    | T_ISSET '(' variables_list ')'                        { $$ = Expr\Isset_[$3]; }
+    | T_ISSET '(' expr_list_allow_comma ')'                 { $$ = Expr\Isset_[$3]; }
     | T_EMPTY '(' expr ')'                                  { $$ = Expr\Empty_[$3]; }
     | T_INCLUDE expr                                        { $$ = Expr\Include_[$2, Expr\Include_::TYPE_INCLUDE]; }
     | T_INCLUDE_ONCE expr                                   { $$ = Expr\Include_[$2, Expr\Include_::TYPE_INCLUDE_ONCE]; }
@@ -729,23 +830,30 @@ expr:
     | T_YIELD expr                                          { $$ = Expr\Yield_[$2, null]; }
     | T_YIELD expr T_DOUBLE_ARROW expr                      { $$ = Expr\Yield_[$4, $2]; }
     | T_YIELD_FROM expr                                     { $$ = Expr\YieldFrom[$2]; }
+    | T_THROW expr                                          { $$ = Expr\Throw_[$2]; }
 
     | T_FN optional_ref '(' parameter_list ')' optional_return_type T_DOUBLE_ARROW expr
-          { $$ = Expr\ArrowFunction[['static' => false, 'byRef' => $2, 'params' => $4, 'returnType' => $6, 'expr' => $8]]; }
+          { $$ = Expr\ArrowFunction[['static' => false, 'byRef' => $2, 'params' => $4, 'returnType' => $6, 'expr' => $8, 'attrGroups' => []]]; }
     | T_STATIC T_FN optional_ref '(' parameter_list ')' optional_return_type T_DOUBLE_ARROW expr
-          { $$ = Expr\ArrowFunction[['static' => true, 'byRef' => $3, 'params' => $5, 'returnType' => $7, 'expr' => $9]]; }
-
-    | T_FUNCTION optional_ref '(' parameter_list ')' lexical_vars optional_return_type
-      block_or_error
-          { $$ = Expr\Closure[['static' => false, 'byRef' => $2, 'params' => $4, 'uses' => $6, 'returnType' => $7, 'stmts' => $8]]; }
-    | T_STATIC T_FUNCTION optional_ref '(' parameter_list ')' lexical_vars optional_return_type
-      block_or_error
-          { $$ = Expr\Closure[['static' => true, 'byRef' => $3, 'params' => $5, 'uses' => $7, 'returnType' => $8, 'stmts' => $9]]; }
+          { $$ = Expr\ArrowFunction[['static' => true, 'byRef' => $3, 'params' => $5, 'returnType' => $7, 'expr' => $9, 'attrGroups' => []]]; }
+    | T_FUNCTION optional_ref '(' parameter_list ')' lexical_vars optional_return_type block_or_error
+          { $$ = Expr\Closure[['static' => false, 'byRef' => $2, 'params' => $4, 'uses' => $6, 'returnType' => $7, 'stmts' => $8, 'attrGroups' => []]]; }
+    | T_STATIC T_FUNCTION optional_ref '(' parameter_list ')' lexical_vars optional_return_type       block_or_error
+          { $$ = Expr\Closure[['static' => true, 'byRef' => $3, 'params' => $5, 'uses' => $7, 'returnType' => $8, 'stmts' => $9, 'attrGroups' => []]]; }
+
+    | attributes T_FN optional_ref '(' parameter_list ')' optional_return_type T_DOUBLE_ARROW expr
+          { $$ = Expr\ArrowFunction[['static' => false, 'byRef' => $3, 'params' => $5, 'returnType' => $7, 'expr' => $9, 'attrGroups' => $1]]; }
+    | attributes T_STATIC T_FN optional_ref '(' parameter_list ')' optional_return_type T_DOUBLE_ARROW expr
+          { $$ = Expr\ArrowFunction[['static' => true, 'byRef' => $4, 'params' => $6, 'returnType' => $8, 'expr' => $10, 'attrGroups' => $1]]; }
+    | attributes T_FUNCTION optional_ref '(' parameter_list ')' lexical_vars optional_return_type block_or_error
+          { $$ = Expr\Closure[['static' => false, 'byRef' => $3, 'params' => $5, 'uses' => $7, 'returnType' => $8, 'stmts' => $9, 'attrGroups' => $1]]; }
+    | attributes T_STATIC T_FUNCTION optional_ref '(' parameter_list ')' lexical_vars optional_return_type       block_or_error
+          { $$ = Expr\Closure[['static' => true, 'byRef' => $4, 'params' => $6, 'uses' => $8, 'returnType' => $9, 'stmts' => $10, 'attrGroups' => $1]]; }
 ;
 
 anonymous_class:
-      T_CLASS ctor_arguments extends_from implements_list '{' class_statement_list '}'
-          { $$ = array(Stmt\Class_[null, ['type' => 0, 'extends' => $3, 'implements' => $4, 'stmts' => $6]], $2);
+      optional_attributes T_CLASS ctor_arguments extends_from implements_list '{' class_statement_list '}'
+          { $$ = array(Stmt\Class_[null, ['type' => 0, 'extends' => $4, 'implements' => $5, 'stmts' => $7, 'attrGroups' => $1]], $3);
             $this->checkClass($$[0], -1); }
 ;
 
@@ -761,7 +869,7 @@ lexical_vars:
 ;
 
 lexical_var_list:
-      non_empty_lexical_var_list no_comma                   { $$ = $1; }
+      non_empty_lexical_var_list optional_comma             { $$ = $1; }
 ;
 
 non_empty_lexical_var_list:
@@ -786,20 +894,22 @@ class_name:
 ;
 
 name:
-      namespace_name_parts                                  { $$ = Name[$1]; }
-    | T_NS_SEPARATOR namespace_name_parts                   { $$ = Name\FullyQualified[$2]; }
-    | T_NAMESPACE T_NS_SEPARATOR namespace_name_parts       { $$ = Name\Relative[$3]; }
+      T_STRING                                              { $$ = Name[$1]; }
+    | T_NAME_QUALIFIED                                      { $$ = Name[$1]; }
+    | T_NAME_FULLY_QUALIFIED                                { $$ = Name\FullyQualified[substr($1, 1)]; }
+    | T_NAME_RELATIVE                                       { $$ = Name\Relative[substr($1, 10)]; }
 ;
 
 class_name_reference:
       class_name                                            { $$ = $1; }
     | new_variable                                          { $$ = $1; }
+    | '(' expr ')'                                          { $$ = $2; }
     | error                                                 { $$ = Expr\Error[]; $this->errorState = 2; }
 ;
 
 class_name_or_var:
       class_name                                            { $$ = $1; }
-    | dereferencable                                        { $$ = $1; }
+    | fully_dereferencable                                  { $$ = $1; }
 ;
 
 exit_expr:
@@ -821,9 +931,20 @@ ctor_arguments:
 
 constant:
       name                                                  { $$ = Expr\ConstFetch[$1]; }
-    | class_name_or_var T_PAAMAYIM_NEKUDOTAYIM identifier_ex
+    | T_LINE                                                { $$ = Scalar\MagicConst\Line[]; }
+    | T_FILE                                                { $$ = Scalar\MagicConst\File[]; }
+    | T_DIR                                                 { $$ = Scalar\MagicConst\Dir[]; }
+    | T_CLASS_C                                             { $$ = Scalar\MagicConst\Class_[]; }
+    | T_TRAIT_C                                             { $$ = Scalar\MagicConst\Trait_[]; }
+    | T_METHOD_C                                            { $$ = Scalar\MagicConst\Method[]; }
+    | T_FUNC_C                                              { $$ = Scalar\MagicConst\Function_[]; }
+    | T_NS_C                                                { $$ = Scalar\MagicConst\Namespace_[]; }
+;
+
+class_constant:
+      class_name_or_var T_PAAMAYIM_NEKUDOTAYIM identifier_ex
           { $$ = Expr\ClassConstFetch[$1, $3]; }
-    /* We interpret and isolated FOO:: as an unfinished class constant fetch. It could also be
+    /* We interpret an isolated FOO:: as an unfinished class constant fetch. It could also be
        an unfinished static property fetch or unfinished scoped call. */
     | class_name_or_var T_PAAMAYIM_NEKUDOTAYIM error
           { $$ = Expr\ClassConstFetch[$1, new Expr\Error(stackAttributes(#3))]; $this->errorState = 2; }
@@ -843,28 +964,21 @@ dereferencable_scalar:
     | T_CONSTANT_ENCAPSED_STRING
           { $attrs = attributes(); $attrs['kind'] = strKind($1);
             $$ = new Scalar\String_(Scalar\String_::parse($1), $attrs); }
+    | '"' encaps_list '"'
+          { $attrs = attributes(); $attrs['kind'] = Scalar\String_::KIND_DOUBLE_QUOTED;
+            parseEncapsed($2, '"', true); $$ = new Scalar\Encapsed($2, $attrs); }
 ;
 
 scalar:
       T_LNUMBER                                             { $$ = $this->parseLNumber($1, attributes()); }
     | T_DNUMBER                                             { $$ = Scalar\DNumber[Scalar\DNumber::parse($1)]; }
-    | T_LINE                                                { $$ = Scalar\MagicConst\Line[]; }
-    | T_FILE                                                { $$ = Scalar\MagicConst\File[]; }
-    | T_DIR                                                 { $$ = Scalar\MagicConst\Dir[]; }
-    | T_CLASS_C                                             { $$ = Scalar\MagicConst\Class_[]; }
-    | T_TRAIT_C                                             { $$ = Scalar\MagicConst\Trait_[]; }
-    | T_METHOD_C                                            { $$ = Scalar\MagicConst\Method[]; }
-    | T_FUNC_C                                              { $$ = Scalar\MagicConst\Function_[]; }
-    | T_NS_C                                                { $$ = Scalar\MagicConst\Namespace_[]; }
     | dereferencable_scalar                                 { $$ = $1; }
     | constant                                              { $$ = $1; }
+    | class_constant                                        { $$ = $1; }
     | T_START_HEREDOC T_ENCAPSED_AND_WHITESPACE T_END_HEREDOC
           { $$ = $this->parseDocString($1, $2, $3, attributes(), stackAttributes(#3), true); }
     | T_START_HEREDOC T_END_HEREDOC
           { $$ = $this->parseDocString($1, '', $2, attributes(), stackAttributes(#2), true); }
-    | '"' encaps_list '"'
-          { $attrs = attributes(); $attrs['kind'] = Scalar\String_::KIND_DOUBLE_QUOTED;
-            parseEncapsed($2, '"', true); $$ = new Scalar\Encapsed($2, $attrs); }
     | T_START_HEREDOC encaps_list T_END_HEREDOC
           { $$ = $this->parseDocString($1, $2, $3, attributes(), stackAttributes(#3), true); }
 ;
@@ -874,10 +988,16 @@ optional_expr:
     | expr                                                  { $$ = $1; }
 ;
 
-dereferencable:
+fully_dereferencable:
       variable                                              { $$ = $1; }
     | '(' expr ')'                                          { $$ = $2; }
     | dereferencable_scalar                                 { $$ = $1; }
+    | class_constant                                        { $$ = $1; }
+;
+
+array_object_dereferencable:
+      fully_dereferencable                                  { $$ = $1; }
+    | constant                                              { $$ = $1; }
 ;
 
 callable_expr:
@@ -888,18 +1008,27 @@ callable_expr:
 
 callable_variable:
       simple_variable                                       { $$ = Expr\Variable[$1]; }
-    | dereferencable '[' optional_expr ']'                  { $$ = Expr\ArrayDimFetch[$1, $3]; }
-    | constant '[' optional_expr ']'                        { $$ = Expr\ArrayDimFetch[$1, $3]; }
-    | dereferencable '{' expr '}'                           { $$ = Expr\ArrayDimFetch[$1, $3]; }
+    | array_object_dereferencable '[' optional_expr ']'     { $$ = Expr\ArrayDimFetch[$1, $3]; }
+    | array_object_dereferencable '{' expr '}'              { $$ = Expr\ArrayDimFetch[$1, $3]; }
     | function_call                                         { $$ = $1; }
-    | dereferencable T_OBJECT_OPERATOR property_name argument_list
+    | array_object_dereferencable T_OBJECT_OPERATOR property_name argument_list
           { $$ = Expr\MethodCall[$1, $3, $4]; }
+    | array_object_dereferencable T_NULLSAFE_OBJECT_OPERATOR property_name argument_list
+          { $$ = Expr\NullsafeMethodCall[$1, $3, $4]; }
+;
+
+optional_plain_variable:
+      /* empty */                                           { $$ = null; }
+    | plain_variable                                        { $$ = $1; }
 ;
 
 variable:
       callable_variable                                     { $$ = $1; }
     | static_member                                         { $$ = $1; }
-    | dereferencable T_OBJECT_OPERATOR property_name        { $$ = Expr\PropertyFetch[$1, $3]; }
+    | array_object_dereferencable T_OBJECT_OPERATOR property_name
+          { $$ = Expr\PropertyFetch[$1, $3]; }
+    | array_object_dereferencable T_NULLSAFE_OBJECT_OPERATOR property_name
+          { $$ = Expr\NullsafePropertyFetch[$1, $3]; }
 ;
 
 simple_variable:
@@ -924,6 +1053,7 @@ new_variable:
     | new_variable '[' optional_expr ']'                    { $$ = Expr\ArrayDimFetch[$1, $3]; }
     | new_variable '{' expr '}'                             { $$ = Expr\ArrayDimFetch[$1, $3]; }
     | new_variable T_OBJECT_OPERATOR property_name          { $$ = Expr\PropertyFetch[$1, $3]; }
+    | new_variable T_NULLSAFE_OBJECT_OPERATOR property_name { $$ = Expr\NullsafePropertyFetch[$1, $3]; }
     | class_name T_PAAMAYIM_NEKUDOTAYIM static_member_prop_name
           { $$ = Expr\StaticPropertyFetch[$1, $3]; }
     | new_variable T_PAAMAYIM_NEKUDOTAYIM static_member_prop_name
@@ -932,34 +1062,19 @@ new_variable:
 
 member_name:
       identifier_ex                                         { $$ = $1; }
-    | '{' expr '}'	                                        { $$ = $2; }
-    | simple_variable	                                    { $$ = Expr\Variable[$1]; }
+    | '{' expr '}'                                          { $$ = $2; }
+    | simple_variable                                       { $$ = Expr\Variable[$1]; }
 ;
 
 property_name:
       identifier                                            { $$ = $1; }
-    | '{' expr '}'	                                        { $$ = $2; }
-    | simple_variable	                                    { $$ = Expr\Variable[$1]; }
+    | '{' expr '}'                                          { $$ = $2; }
+    | simple_variable                                       { $$ = Expr\Variable[$1]; }
     | error                                                 { $$ = Expr\Error[]; $this->errorState = 2; }
 ;
 
 list_expr:
-      T_LIST '(' list_expr_elements ')'                     { $$ = Expr\List_[$3]; }
-;
-
-list_expr_elements:
-      list_expr_elements ',' list_expr_element              { push($1, $3); }
-    | list_expr_element                                     { init($1); }
-;
-
-list_expr_element:
-      variable                                              { $$ = Expr\ArrayItem[$1, null, false]; }
-    | '&' variable                                          { $$ = Expr\ArrayItem[$2, null, true]; }
-    | list_expr                                             { $$ = Expr\ArrayItem[$1, null, false]; }
-    | expr T_DOUBLE_ARROW variable                          { $$ = Expr\ArrayItem[$3, $1, false]; }
-    | expr T_DOUBLE_ARROW '&' variable                      { $$ = Expr\ArrayItem[$4, $1, true]; }
-    | expr T_DOUBLE_ARROW list_expr                         { $$ = Expr\ArrayItem[$3, $1, false]; }
-    | /* empty */                                           { $$ = null; }
+      T_LIST '(' inner_array_pair_list ')'                  { $$ = Expr\List_[$3]; }
 ;
 
 array_pair_list:
@@ -979,10 +1094,12 @@ inner_array_pair_list:
 ;
 
 array_pair:
-      expr T_DOUBLE_ARROW expr                              { $$ = Expr\ArrayItem[$3, $1,   false]; }
-    | expr                                                  { $$ = Expr\ArrayItem[$1, null, false]; }
-    | expr T_DOUBLE_ARROW '&' variable                      { $$ = Expr\ArrayItem[$4, $1,   true]; }
+      expr                                                  { $$ = Expr\ArrayItem[$1, null, false]; }
     | '&' variable                                          { $$ = Expr\ArrayItem[$2, null, true]; }
+    | list_expr                                             { $$ = Expr\ArrayItem[$1, null, false]; }
+    | expr T_DOUBLE_ARROW expr                              { $$ = Expr\ArrayItem[$3, $1,   false]; }
+    | expr T_DOUBLE_ARROW '&' variable                      { $$ = Expr\ArrayItem[$4, $1,   true]; }
+    | expr T_DOUBLE_ARROW list_expr                         { $$ = Expr\ArrayItem[$3, $1,   false]; }
     | T_ELLIPSIS expr                                       { $$ = Expr\ArrayItem[$2, null, false, attributes(), true]; }
     | /* empty */                                           { $$ = null; }
 ;
@@ -1006,6 +1123,7 @@ encaps_var:
       plain_variable                                        { $$ = $1; }
     | plain_variable '[' encaps_var_offset ']'              { $$ = Expr\ArrayDimFetch[$1, $3]; }
     | plain_variable T_OBJECT_OPERATOR identifier           { $$ = Expr\PropertyFetch[$1, $3]; }
+    | plain_variable T_NULLSAFE_OBJECT_OPERATOR identifier  { $$ = Expr\NullsafePropertyFetch[$1, $3]; }
     | T_DOLLAR_OPEN_CURLY_BRACES expr '}'                   { $$ = Expr\Variable[$2]; }
     | T_DOLLAR_OPEN_CURLY_BRACES T_STRING_VARNAME '}'       { $$ = Expr\Variable[$2]; }
     | T_DOLLAR_OPEN_CURLY_BRACES encaps_str_varname '[' expr ']' '}'
diff --git a/vendor/nikic/php-parser/grammar/rebuildParsers.php b/vendor/nikic/php-parser/grammar/rebuildParsers.php
index b913cdacaf1af6a2e8a16b4cea61785c499c12a2..88a53f13348ce82777dbed9632341a04fd50c504 100644
--- a/vendor/nikic/php-parser/grammar/rebuildParsers.php
+++ b/vendor/nikic/php-parser/grammar/rebuildParsers.php
@@ -13,13 +13,10 @@
 $resultDir = __DIR__ . '/../lib/PhpParser/Parser';
 $tokensResultsFile = $resultDir . '/Tokens.php';
 
-// check for kmyacc binary in this directory, otherwise fall back to global name
-if (file_exists(__DIR__ . '/kmyacc.exe')) {
-    $kmyacc = __DIR__ . '/kmyacc.exe';
-} else if (file_exists(__DIR__ . '/kmyacc')) {
-    $kmyacc = __DIR__ . '/kmyacc';
-} else {
-    $kmyacc = 'kmyacc';
+$kmyacc = getenv('KMYACC');
+if (!$kmyacc) {
+    // Use phpyacc from dev dependencies by default.
+    $kmyacc = __DIR__ . '/../vendor/bin/phpyacc';
 }
 
 $options = array_flip($argv);
@@ -62,8 +59,7 @@
     $additionalArgs = $optionDebug ? '-t -v' : '';
 
     echo "Building $name parser.\n";
-    $output = trim(shell_exec("$kmyacc $additionalArgs -l -m $skeletonFile -p $name $tmpGrammarFile 2>&1"));
-    echo "Output: \"$output\"\n";
+    $output = execCmd("$kmyacc $additionalArgs -m $skeletonFile -p $name $tmpGrammarFile");
 
     $resultCode = file_get_contents($tmpResultFile);
     $resultCode = removeTrailingWhitespace($resultCode);
@@ -73,8 +69,7 @@
     unlink($tmpResultFile);
 
     echo "Building token definition.\n";
-    $output = trim(shell_exec("$kmyacc -l -m $tokensTemplate $tmpGrammarFile 2>&1"));
-    assert($output === '');
+    $output = execCmd("$kmyacc -m $tokensTemplate $tmpGrammarFile");
     rename($tmpResultFile, $tokensResultsFile);
 
     if (!$optionKeepTmpGrammar) {
@@ -122,28 +117,28 @@ function($matches) {
                 $matches['args']
             );
 
-            if ('attributes' == $name) {
+            if ('attributes' === $name) {
                 assertArgs(0, $args, $name);
                 return '$this->startAttributeStack[#1] + $this->endAttributes';
             }
 
-            if ('stackAttributes' == $name) {
+            if ('stackAttributes' === $name) {
                 assertArgs(1, $args, $name);
                 return '$this->startAttributeStack[' . $args[0] . ']'
                      . ' + $this->endAttributeStack[' . $args[0] . ']';
             }
 
-            if ('init' == $name) {
+            if ('init' === $name) {
                 return '$$ = array(' . implode(', ', $args) . ')';
             }
 
-            if ('push' == $name) {
+            if ('push' === $name) {
                 assertArgs(2, $args, $name);
 
                 return $args[0] . '[] = ' . $args[1] . '; $$ = ' . $args[0];
             }
 
-            if ('pushNormalizing' == $name) {
+            if ('pushNormalizing' === $name) {
                 assertArgs(2, $args, $name);
 
                 return 'if (is_array(' . $args[1] . ')) { $$ = array_merge(' . $args[0] . ', ' . $args[1] . '); }'
@@ -156,20 +151,20 @@ function($matches) {
                 return 'is_array(' . $args[0] . ') ? ' . $args[0] . ' : array(' . $args[0] . ')';
             }
 
-            if ('parseVar' == $name) {
+            if ('parseVar' === $name) {
                 assertArgs(1, $args, $name);
 
                 return 'substr(' . $args[0] . ', 1)';
             }
 
-            if ('parseEncapsed' == $name) {
+            if ('parseEncapsed' === $name) {
                 assertArgs(3, $args, $name);
 
                 return 'foreach (' . $args[0] . ' as $s) { if ($s instanceof Node\Scalar\EncapsedStringPart) {'
                      . ' $s->value = Node\Scalar\String_::parseEscapeSequences($s->value, ' . $args[1] . ', ' . $args[2] . '); } }';
             }
 
-            if ('makeNop' == $name) {
+            if ('makeNop' === $name) {
                 assertArgs(3, $args, $name);
 
                 return '$startAttributes = ' . $args[1] . ';'
@@ -183,11 +178,11 @@ function($matches) {
 
                 return '$startAttributes = ' . $args[1] . ';'
                     . ' if (isset($startAttributes[\'comments\']))'
-                    . ' { ' . $args[0] . ' = new Stmt\Nop($this->createZeroLengthAttributes($startAttributes)); }'
+                    . ' { ' . $args[0] . ' = new Stmt\Nop($this->createCommentNopAttributes($startAttributes[\'comments\'])); }'
                     . ' else { ' . $args[0] . ' = null; }';
             }
 
-            if ('strKind' == $name) {
+            if ('strKind' === $name) {
                 assertArgs(1, $args, $name);
 
                 return '(' . $args[0] . '[0] === "\'" || (' . $args[0] . '[1] === "\'" && '
@@ -195,7 +190,7 @@ function($matches) {
                      . '? Scalar\String_::KIND_SINGLE_QUOTED : Scalar\String_::KIND_DOUBLE_QUOTED)';
             }
 
-            if ('prependLeadingComments' == $name) {
+            if ('prependLeadingComments' === $name) {
                 assertArgs(1, $args, $name);
 
                 return '$attrs = $this->startAttributeStack[#1]; $stmts = ' . $args[0] . '; '
@@ -234,6 +229,15 @@ function ensureDirExists($dir) {
     }
 }
 
+function execCmd($cmd) {
+    $output = trim(shell_exec("$cmd 2>&1"));
+    if ($output !== "") {
+        echo "> " . $cmd . "\n";
+        echo $output;
+    }
+    return $output;
+}
+
 //////////////////////////////
 /// Regex helper functions ///
 //////////////////////////////
diff --git a/vendor/nikic/php-parser/grammar/tokens.y b/vendor/nikic/php-parser/grammar/tokens.y
index dd83a6f83dc3afd89794e3b8998704b8f22daf58..b0b0360cd26574b786343d4fe103624e18ce1c21 100644
--- a/vendor/nikic/php-parser/grammar/tokens.y
+++ b/vendor/nikic/php-parser/grammar/tokens.y
@@ -1,6 +1,7 @@
 /* We currently rely on the token ID mapping to be the same between PHP 5 and PHP 7 - so the same lexer can be used for
  * both. This is enforced by sharing this token file. */
 
+%right T_THROW
 %left T_INCLUDE T_INCLUDE_ONCE T_EVAL T_REQUIRE T_REQUIRE_ONCE
 %left ','
 %left T_LOGICAL_OR
@@ -41,8 +42,6 @@
 %token T_VARIABLE
 %token T_NUM_STRING
 %token T_INLINE_HTML
-%token T_CHARACTER
-%token T_BAD_CHARACTER
 %token T_ENCAPSED_AND_WHITESPACE
 %token T_CONSTANT_ENCAPSED_STRING
 %token T_ECHO
@@ -57,6 +56,7 @@
 %token T_ENDDECLARE
 %token T_AS
 %token T_SWITCH
+%token T_MATCH
 %token T_ENDSWITCH
 %token T_CASE
 %token T_DEFAULT
@@ -86,6 +86,7 @@
 %token T_EXTENDS
 %token T_IMPLEMENTS
 %token T_OBJECT_OPERATOR
+%token T_NULLSAFE_OBJECT_OPERATOR
 %token T_DOUBLE_ARROW
 %token T_LIST
 %token T_ARRAY
@@ -96,12 +97,6 @@
 %token T_FUNC_C
 %token T_LINE
 %token T_FILE
-%token T_COMMENT
-%token T_DOC_COMMENT
-%token T_OPEN_TAG
-%token T_OPEN_TAG_WITH_ECHO
-%token T_CLOSE_TAG
-%token T_WHITESPACE
 %token T_START_HEREDOC
 %token T_END_HEREDOC
 %token T_DOLLAR_OPEN_CURLY_BRACES
@@ -112,3 +107,7 @@
 %token T_DIR
 %token T_NS_SEPARATOR
 %token T_ELLIPSIS
+%token T_NAME_FULLY_QUALIFIED
+%token T_NAME_QUALIFIED
+%token T_NAME_RELATIVE
+%token T_ATTRIBUTE
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Builder/Param.php b/vendor/nikic/php-parser/lib/PhpParser/Builder/Param.php
index 184813a657cf6cab39406fc02a1715f74ed0540a..c6491786e34bc0311e4be053ba49e0037bdc589b 100644
--- a/vendor/nikic/php-parser/lib/PhpParser/Builder/Param.php
+++ b/vendor/nikic/php-parser/lib/PhpParser/Builder/Param.php
@@ -12,7 +12,7 @@ class Param implements PhpParser\Builder
 
     protected $default = null;
 
-    /** @var string|Node\Name|Node\NullableType|null */
+    /** @var Node\Identifier|Node\Name|Node\NullableType|null */
     protected $type = null;
 
     protected $byRef = false;
@@ -44,7 +44,7 @@ public function setDefault($value) {
     /**
      * Sets type for the parameter.
      *
-     * @param string|Node\Name|Node\NullableType $type Parameter type
+     * @param string|Node\Name|Node\NullableType|Node\UnionType $type Parameter type
      *
      * @return $this The builder instance (for fluid interface)
      */
@@ -60,7 +60,7 @@ public function setType($type) {
     /**
      * Sets type for the parameter.
      *
-     * @param string|Node\Name|Node\NullableType $type Parameter type
+     * @param string|Node\Name|Node\NullableType|Node\UnionType $type Parameter type
      *
      * @return $this The builder instance (for fluid interface)
      *
diff --git a/vendor/nikic/php-parser/lib/PhpParser/BuilderHelpers.php b/vendor/nikic/php-parser/lib/PhpParser/BuilderHelpers.php
index 790e8877eb49242a315ed70561ef165f348b56c3..180bf35d0e7732f4f67628f2cc99adffdb2e58f5 100644
--- a/vendor/nikic/php-parser/lib/PhpParser/BuilderHelpers.php
+++ b/vendor/nikic/php-parser/lib/PhpParser/BuilderHelpers.php
@@ -8,6 +8,7 @@
 use PhpParser\Node\NullableType;
 use PhpParser\Node\Scalar;
 use PhpParser\Node\Stmt;
+use PhpParser\Node\UnionType;
 
 /**
  * This class defines helpers used in the implementation of builders. Don't use it directly.
@@ -158,16 +159,19 @@ private static function normalizeNameCommon($name, bool $allowExpr) {
      * In particular, builtin types become Identifiers, custom types become Names and nullables
      * are wrapped in NullableType nodes.
      *
-     * @param string|Name|Identifier|NullableType $type The type to normalize
+     * @param string|Name|Identifier|NullableType|UnionType $type The type to normalize
      *
-     * @return Name|Identifier|NullableType The normalized type
+     * @return Name|Identifier|NullableType|UnionType The normalized type
      */
     public static function normalizeType($type) {
         if (!is_string($type)) {
-            if (!$type instanceof Name && !$type instanceof Identifier
-                    && !$type instanceof NullableType) {
+            if (
+                !$type instanceof Name && !$type instanceof Identifier &&
+                !$type instanceof NullableType && !$type instanceof UnionType
+            ) {
                 throw new \LogicException(
-                    'Type must be a string, or an instance of Name, Identifier or NullableType');
+                    'Type must be a string, or an instance of Name, Identifier, NullableType or UnionType'
+                );
             }
             return $type;
         }
@@ -179,7 +183,7 @@ public static function normalizeType($type) {
         }
 
         $builtinTypes = [
-            'array', 'callable', 'string', 'int', 'float', 'bool', 'iterable', 'void', 'object'
+            'array', 'callable', 'string', 'int', 'float', 'bool', 'iterable', 'void', 'object', 'mixed'
         ];
 
         $lowerType = strtolower($type);
@@ -193,7 +197,11 @@ public static function normalizeType($type) {
             throw new \LogicException('void type cannot be nullable');
         }
 
-        return $nullable ? new Node\NullableType($type) : $type;
+        if ($nullable && (string) $type === 'mixed') {
+            throw new \LogicException('mixed type cannot be nullable');
+        }
+
+        return $nullable ? new NullableType($type) : $type;
     }
 
     /**
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Comment.php b/vendor/nikic/php-parser/lib/PhpParser/Comment.php
index 5da8420958806baf58fc65f465e162ee93b7d269..61e98d3dca7e63797ab563acb8f94e8052728086 100644
--- a/vendor/nikic/php-parser/lib/PhpParser/Comment.php
+++ b/vendor/nikic/php-parser/lib/PhpParser/Comment.php
@@ -5,9 +5,12 @@
 class Comment implements \JsonSerializable
 {
     protected $text;
-    protected $line;
-    protected $filePos;
-    protected $tokenPos;
+    protected $startLine;
+    protected $startFilePos;
+    protected $startTokenPos;
+    protected $endLine;
+    protected $endFilePos;
+    protected $endTokenPos;
 
     /**
      * Constructs a comment node.
@@ -18,12 +21,17 @@ class Comment implements \JsonSerializable
      * @param int    $startTokenPos Token offset the comment started on
      */
     public function __construct(
-        string $text, int $startLine = -1, int $startFilePos = -1, int $startTokenPos = -1
+        string $text,
+        int $startLine = -1, int $startFilePos = -1, int $startTokenPos = -1,
+        int $endLine = -1, int $endFilePos = -1, int $endTokenPos = -1
     ) {
         $this->text = $text;
-        $this->line = $startLine;
-        $this->filePos = $startFilePos;
-        $this->tokenPos = $startTokenPos;
+        $this->startLine = $startLine;
+        $this->startFilePos = $startFilePos;
+        $this->startTokenPos = $startTokenPos;
+        $this->endLine = $endLine;
+        $this->endFilePos = $endFilePos;
+        $this->endTokenPos = $endTokenPos;
     }
 
     /**
@@ -38,28 +46,88 @@ public function getText() : string {
     /**
      * Gets the line number the comment started on.
      *
+     * @return int Line number (or -1 if not available)
+     */
+    public function getStartLine() : int {
+        return $this->startLine;
+    }
+
+    /**
+     * Gets the file offset the comment started on.
+     *
+     * @return int File offset (or -1 if not available)
+     */
+    public function getStartFilePos() : int {
+        return $this->startFilePos;
+    }
+
+    /**
+     * Gets the token offset the comment started on.
+     *
+     * @return int Token offset (or -1 if not available)
+     */
+    public function getStartTokenPos() : int {
+        return $this->startTokenPos;
+    }
+
+    /**
+     * Gets the line number the comment ends on.
+     *
+     * @return int Line number (or -1 if not available)
+     */
+    public function getEndLine() : int {
+        return $this->endLine;
+    }
+
+    /**
+     * Gets the file offset the comment ends on.
+     *
+     * @return int File offset (or -1 if not available)
+     */
+    public function getEndFilePos() : int {
+        return $this->endFilePos;
+    }
+
+    /**
+     * Gets the token offset the comment ends on.
+     *
+     * @return int Token offset (or -1 if not available)
+     */
+    public function getEndTokenPos() : int {
+        return $this->endTokenPos;
+    }
+
+    /**
+     * Gets the line number the comment started on.
+     *
+     * @deprecated Use getStartLine() instead
+     *
      * @return int Line number
      */
     public function getLine() : int {
-        return $this->line;
+        return $this->startLine;
     }
 
     /**
      * Gets the file offset the comment started on.
      *
+     * @deprecated Use getStartFilePos() instead
+     *
      * @return int File offset
      */
     public function getFilePos() : int {
-        return $this->filePos;
+        return $this->startFilePos;
     }
 
     /**
      * Gets the token offset the comment started on.
      *
+     * @deprecated Use getStartTokenPos() instead
+     *
      * @return int Token offset
      */
     public function getTokenPos() : int {
-        return $this->tokenPos;
+        return $this->startTokenPos;
     }
 
     /**
@@ -159,9 +227,13 @@ public function jsonSerialize() : array {
         return [
             'nodeType' => $type,
             'text' => $this->text,
-            'line' => $this->line,
-            'filePos' => $this->filePos,
-            'tokenPos' => $this->tokenPos,
+            // TODO: Rename these to include "start".
+            'line' => $this->startLine,
+            'filePos' => $this->startFilePos,
+            'tokenPos' => $this->startTokenPos,
+            'endLine' => $this->endLine,
+            'endFilePos' => $this->endFilePos,
+            'endTokenPos' => $this->endTokenPos,
         ];
     }
 }
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Internal/PrintableNewAnonClassNode.php b/vendor/nikic/php-parser/lib/PhpParser/Internal/PrintableNewAnonClassNode.php
index 7b019db812b3ee3eb4159c3f8a5af5910c5e39a8..3eeac04a412dc13dc34527e59b0a203866e5507c 100644
--- a/vendor/nikic/php-parser/lib/PhpParser/Internal/PrintableNewAnonClassNode.php
+++ b/vendor/nikic/php-parser/lib/PhpParser/Internal/PrintableNewAnonClassNode.php
@@ -17,6 +17,8 @@
  */
 class PrintableNewAnonClassNode extends Expr
 {
+    /** @var Node\AttributeGroup[] PHP attribute groups */
+    public $attrGroups;
     /** @var Node\Arg[] Arguments */
     public $args;
     /** @var null|Node\Name Name of extended class */
@@ -27,9 +29,11 @@ class PrintableNewAnonClassNode extends Expr
     public $stmts;
 
     public function __construct(
-        array $args, Node\Name $extends = null, array $implements, array $stmts, array $attributes
+        array $attrGroups, array $args, Node\Name $extends = null, array $implements,
+        array $stmts, array $attributes
     ) {
         parent::__construct($attributes);
+        $this->attrGroups = $attrGroups;
         $this->args = $args;
         $this->extends = $extends;
         $this->implements = $implements;
@@ -42,7 +46,7 @@ public static function fromNewNode(Expr\New_ $newNode) {
         // We don't assert that $class->name is null here, to allow consumers to assign unique names
         // to anonymous classes for their own purposes. We simplify ignore the name here.
         return new self(
-            $newNode->args, $class->extends, $class->implements,
+            $class->attrGroups, $newNode->args, $class->extends, $class->implements,
             $class->stmts, $newNode->getAttributes()
         );
     }
@@ -52,6 +56,6 @@ public function getType() : string {
     }
 
     public function getSubNodeNames() : array {
-        return ['args', 'extends', 'implements', 'stmts'];
+        return ['attrGroups', 'args', 'extends', 'implements', 'stmts'];
     }
 }
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Internal/TokenStream.php b/vendor/nikic/php-parser/lib/PhpParser/Internal/TokenStream.php
index cf9e00abf3da50259b96462b9945fc83a565e184..39308ae6297132c1f22711976d38181e2d573e54 100644
--- a/vendor/nikic/php-parser/lib/PhpParser/Internal/TokenStream.php
+++ b/vendor/nikic/php-parser/lib/PhpParser/Internal/TokenStream.php
@@ -33,7 +33,7 @@ public function __construct(array $tokens) {
      * @return bool
      */
     public function haveParens(int $startPos, int $endPos) : bool {
-        return $this->haveTokenImmediativelyBefore($startPos, '(')
+        return $this->haveTokenImmediatelyBefore($startPos, '(')
             && $this->haveTokenImmediatelyAfter($endPos, ')');
     }
 
@@ -46,7 +46,7 @@ public function haveParens(int $startPos, int $endPos) : bool {
      * @return bool
      */
     public function haveBraces(int $startPos, int $endPos) : bool {
-        return $this->haveTokenImmediativelyBefore($startPos, '{')
+        return $this->haveTokenImmediatelyBefore($startPos, '{')
             && $this->haveTokenImmediatelyAfter($endPos, '}');
     }
 
@@ -60,7 +60,7 @@ public function haveBraces(int $startPos, int $endPos) : bool {
      *
      * @return bool Whether the expected token was found
      */
-    public function haveTokenImmediativelyBefore(int $pos, $expectedTokenType) : bool {
+    public function haveTokenImmediatelyBefore(int $pos, $expectedTokenType) : bool {
         $tokens = $this->tokens;
         $pos--;
         for (; $pos >= 0; $pos--) {
@@ -170,7 +170,7 @@ public function skipRightWhitespace(int $pos) {
         return $pos;
     }
 
-    public function findRight($pos, $findTokenType) {
+    public function findRight(int $pos, $findTokenType) {
         $tokens = $this->tokens;
         for ($count = \count($tokens); $pos < $count; $pos++) {
             $type = $tokens[$pos][0];
@@ -181,6 +181,29 @@ public function findRight($pos, $findTokenType) {
         return -1;
     }
 
+    /**
+     * Whether the given position range contains a certain token type.
+     *
+     * @param int $startPos Starting position (inclusive)
+     * @param int $endPos Ending position (exclusive)
+     * @param int|string $tokenType Token type to look for
+     * @return bool Whether the token occurs in the given range
+     */
+    public function haveTokenInRange(int $startPos, int $endPos, $tokenType) {
+        $tokens = $this->tokens;
+        for ($pos = $startPos; $pos < $endPos; $pos++) {
+            if ($tokens[$pos][0] === $tokenType) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    public function haveBracesInRange(int $startPos, int $endPos) {
+        return $this->haveTokenInRange($startPos, $endPos, '{')
+            || $this->haveTokenInRange($startPos, $endPos, '}');
+    }
+
     /**
      * Get indentation before token position.
      *
diff --git a/vendor/nikic/php-parser/lib/PhpParser/JsonDecoder.php b/vendor/nikic/php-parser/lib/PhpParser/JsonDecoder.php
index 25d1c6abee66a22e4e83b4856fc3d32a873134ca..47d2003d4bae6b54d650f3e86f8a93ab6be60db0 100644
--- a/vendor/nikic/php-parser/lib/PhpParser/JsonDecoder.php
+++ b/vendor/nikic/php-parser/lib/PhpParser/JsonDecoder.php
@@ -73,7 +73,9 @@ private function decodeComment(array $value) : Comment {
         }
 
         return new $className(
-            $value['text'], $value['line'] ?? -1, $value['filePos'] ?? -1, $value['tokenPos'] ?? -1
+            $value['text'],
+            $value['line'] ?? -1, $value['filePos'] ?? -1, $value['tokenPos'] ?? -1,
+            $value['endLine'] ?? -1, $value['endFilePos'] ?? -1, $value['endTokenPos'] ?? -1
         );
     }
 
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Lexer.php b/vendor/nikic/php-parser/lib/PhpParser/Lexer.php
index dc5e5332c295ea59ea674365a5850362fd95ff7a..b0c21ead2687a54e8e2e2b9e63809f1893cdadff 100644
--- a/vendor/nikic/php-parser/lib/PhpParser/Lexer.php
+++ b/vendor/nikic/php-parser/lib/PhpParser/Lexer.php
@@ -15,6 +15,7 @@ class Lexer
 
     protected $tokenMap;
     protected $dropTokens;
+    protected $identifierTokens;
 
     private $attributeStartLineUsed;
     private $attributeEndLineUsed;
@@ -34,13 +35,15 @@ class Lexer
      *                       first three. For more info see getNextToken() docs.
      */
     public function __construct(array $options = []) {
-        // map from internal tokens to PhpParser tokens
+        // Create Map from internal tokens to PhpParser tokens.
+        $this->defineCompatibilityTokens();
         $this->tokenMap = $this->createTokenMap();
+        $this->identifierTokens = $this->createIdentifierTokenMap();
 
         // map of tokens to drop while lexing (the map is only used for isset lookup,
         // that's why the value is simply set to 1; the value is never actually used.)
         $this->dropTokens = array_fill_keys(
-            [\T_WHITESPACE, \T_OPEN_TAG, \T_COMMENT, \T_DOC_COMMENT], 1
+            [\T_WHITESPACE, \T_OPEN_TAG, \T_COMMENT, \T_DOC_COMMENT, \T_BAD_CHARACTER], 1
         );
 
         $defaultAttributes = ['comments', 'startLine', 'endLine'];
@@ -84,7 +87,7 @@ public function startLexing(string $code, ErrorHandler $errorHandler = null) {
 
         error_clear_last();
         $this->tokens = @token_get_all($code);
-        $this->handleErrors($errorHandler);
+        $this->postprocessTokens($errorHandler);
 
         if (false !== $scream) {
             ini_set('xdebug.scream', $scream);
@@ -92,13 +95,9 @@ public function startLexing(string $code, ErrorHandler $errorHandler = null) {
     }
 
     private function handleInvalidCharacterRange($start, $end, $line, ErrorHandler $errorHandler) {
+        $tokens = [];
         for ($i = $start; $i < $end; $i++) {
             $chr = $this->code[$i];
-            if ($chr === 'b' || $chr === 'B') {
-                // HHVM does not treat b" tokens correctly, so ignore these
-                continue;
-            }
-
             if ($chr === "\0") {
                 // PHP cuts error message after null byte, so need special case
                 $errorMsg = 'Unexpected null byte';
@@ -108,6 +107,7 @@ private function handleInvalidCharacterRange($start, $end, $line, ErrorHandler $
                 );
             }
 
+            $tokens[] = [\T_BAD_CHARACTER, $chr, $line];
             $errorHandler->handleError(new Error($errorMsg, [
                 'startLine' => $line,
                 'endLine' => $line,
@@ -115,6 +115,7 @@ private function handleInvalidCharacterRange($start, $end, $line, ErrorHandler $
                 'endFilePos' => $i,
             ]));
         }
+        return $tokens;
     }
 
     /**
@@ -128,43 +129,99 @@ private function isUnterminatedComment($token) : bool {
             && substr($token[1], -2) !== '*/';
     }
 
-    /**
-     * Check whether an error *may* have occurred during tokenization.
-     *
-     * @return bool
-     */
-    private function errorMayHaveOccurred() : bool {
-        if (defined('HHVM_VERSION')) {
-            // In HHVM token_get_all() does not throw warnings, so we need to conservatively
-            // assume that an error occurred
-            return true;
-        }
-
-        return null !== error_get_last();
-    }
-
-    protected function handleErrors(ErrorHandler $errorHandler) {
-        if (!$this->errorMayHaveOccurred()) {
-            return;
-        }
-
+    protected function postprocessTokens(ErrorHandler $errorHandler) {
         // PHP's error handling for token_get_all() is rather bad, so if we want detailed
         // error information we need to compute it ourselves. Invalid character errors are
         // detected by finding "gaps" in the token array. Unterminated comments are detected
         // by checking if a trailing comment has a "*/" at the end.
+        //
+        // Additionally, we canonicalize to the PHP 8 comment format here, which does not include
+        // the trailing whitespace anymore.
+        //
+        // We also canonicalize to the PHP 8 T_NAME_* tokens.
 
         $filePos = 0;
         $line = 1;
-        foreach ($this->tokens as $token) {
+        $numTokens = \count($this->tokens);
+        for ($i = 0; $i < $numTokens; $i++) {
+            $token = $this->tokens[$i];
+
+            // Since PHP 7.4 invalid characters are represented by a T_BAD_CHARACTER token.
+            // In this case we only need to emit an error.
+            if ($token[0] === \T_BAD_CHARACTER) {
+                $this->handleInvalidCharacterRange($filePos, $filePos + 1, $line, $errorHandler);
+            }
+
+            if ($token[0] === \T_COMMENT && substr($token[1], 0, 2) !== '/*'
+                    && preg_match('/(\r\n|\n|\r)$/D', $token[1], $matches)) {
+                $trailingNewline = $matches[0];
+                $token[1] = substr($token[1], 0, -strlen($trailingNewline));
+                $this->tokens[$i] = $token;
+                if (isset($this->tokens[$i + 1]) && $this->tokens[$i + 1][0] === \T_WHITESPACE) {
+                    // Move trailing newline into following T_WHITESPACE token, if it already exists.
+                    $this->tokens[$i + 1][1] = $trailingNewline . $this->tokens[$i + 1][1];
+                    $this->tokens[$i + 1][2]--;
+                } else {
+                    // Otherwise, we need to create a new T_WHITESPACE token.
+                    array_splice($this->tokens, $i + 1, 0, [
+                        [\T_WHITESPACE, $trailingNewline, $line],
+                    ]);
+                    $numTokens++;
+                }
+            }
+
+            // Emulate PHP 8 T_NAME_* tokens, by combining sequences of T_NS_SEPARATOR and T_STRING
+            // into a single token.
+            if (\is_array($token)
+                    && ($token[0] === \T_NS_SEPARATOR || isset($this->identifierTokens[$token[0]]))) {
+                $lastWasSeparator = $token[0] === \T_NS_SEPARATOR;
+                $text = $token[1];
+                for ($j = $i + 1; isset($this->tokens[$j]); $j++) {
+                    if ($lastWasSeparator) {
+                        if (!isset($this->identifierTokens[$this->tokens[$j][0]])) {
+                            break;
+                        }
+                        $lastWasSeparator = false;
+                    } else {
+                        if ($this->tokens[$j][0] !== \T_NS_SEPARATOR) {
+                            break;
+                        }
+                        $lastWasSeparator = true;
+                    }
+                    $text .= $this->tokens[$j][1];
+                }
+                if ($lastWasSeparator) {
+                    // Trailing separator is not part of the name.
+                    $j--;
+                    $text = substr($text, 0, -1);
+                }
+                if ($j > $i + 1) {
+                    if ($token[0] === \T_NS_SEPARATOR) {
+                        $type = \T_NAME_FULLY_QUALIFIED;
+                    } else if ($token[0] === \T_NAMESPACE) {
+                        $type = \T_NAME_RELATIVE;
+                    } else {
+                        $type = \T_NAME_QUALIFIED;
+                    }
+                    $token = [$type, $text, $line];
+                    array_splice($this->tokens, $i, $j - $i, [$token]);
+                    $numTokens -= $j - $i - 1;
+                }
+            }
+
             $tokenValue = \is_string($token) ? $token : $token[1];
             $tokenLen = \strlen($tokenValue);
 
             if (substr($this->code, $filePos, $tokenLen) !== $tokenValue) {
                 // Something is missing, must be an invalid character
                 $nextFilePos = strpos($this->code, $tokenValue, $filePos);
-                $this->handleInvalidCharacterRange(
+                $badCharTokens = $this->handleInvalidCharacterRange(
                     $filePos, $nextFilePos, $line, $errorHandler);
                 $filePos = (int) $nextFilePos;
+
+                array_splice($this->tokens, $i, 0, $badCharTokens);
+                $numTokens += \count($badCharTokens);
+                $i += \count($badCharTokens);
             }
 
             $filePos += $tokenLen;
@@ -187,8 +244,9 @@ protected function handleErrors(ErrorHandler $errorHandler) {
                 $this->tokens[] = [$isDocComment ? \T_DOC_COMMENT : \T_COMMENT, $comment, $line];
             } else {
                 // Invalid characters at the end of the input
-                $this->handleInvalidCharacterRange(
+                $badCharTokens = $this->handleInvalidCharacterRange(
                     $filePos, \strlen($this->code), $line, $errorHandler);
+                $this->tokens = array_merge($this->tokens, $badCharTokens);
             }
             return;
         }
@@ -273,17 +331,23 @@ public function getNextToken(&$value = null, &$startAttributes = null, &$endAttr
                 $this->line += substr_count($value, "\n");
                 $this->filePos += \strlen($value);
             } else {
+                $origLine = $this->line;
+                $origFilePos = $this->filePos;
+                $this->line += substr_count($token[1], "\n");
+                $this->filePos += \strlen($token[1]);
+
                 if (\T_COMMENT === $token[0] || \T_DOC_COMMENT === $token[0]) {
                     if ($this->attributeCommentsUsed) {
                         $comment = \T_DOC_COMMENT === $token[0]
-                            ? new Comment\Doc($token[1], $this->line, $this->filePos, $this->pos)
-                            : new Comment($token[1], $this->line, $this->filePos, $this->pos);
+                            ? new Comment\Doc($token[1],
+                                $origLine, $origFilePos, $this->pos,
+                                $this->line, $this->filePos - 1, $this->pos)
+                            : new Comment($token[1],
+                                $origLine, $origFilePos, $this->pos,
+                                $this->line, $this->filePos - 1, $this->pos);
                         $startAttributes['comments'][] = $comment;
                     }
                 }
-
-                $this->line += substr_count($token[1], "\n");
-                $this->filePos += \strlen($token[1]);
                 continue;
             }
 
@@ -340,6 +404,61 @@ public function handleHaltCompiler() : string {
         return substr($textAfter, strlen($matches[0]));
     }
 
+    private function defineCompatibilityTokens() {
+        static $compatTokensDefined = false;
+        if ($compatTokensDefined) {
+            return;
+        }
+
+        $compatTokens = [
+            // PHP 7.4
+            'T_BAD_CHARACTER',
+            'T_FN',
+            'T_COALESCE_EQUAL',
+            // PHP 8.0
+            'T_NAME_QUALIFIED',
+            'T_NAME_FULLY_QUALIFIED',
+            'T_NAME_RELATIVE',
+            'T_MATCH',
+            'T_NULLSAFE_OBJECT_OPERATOR',
+            'T_ATTRIBUTE',
+        ];
+
+        // PHP-Parser might be used together with another library that also emulates some or all
+        // of these tokens. Perform a sanity-check that all already defined tokens have been
+        // assigned a unique ID.
+        $usedTokenIds = [];
+        foreach ($compatTokens as $token) {
+            if (\defined($token)) {
+                $tokenId = \constant($token);
+                $clashingToken = $usedTokenIds[$tokenId] ?? null;
+                if ($clashingToken !== null) {
+                    throw new \Error(sprintf(
+                        'Token %s has same ID as token %s, ' .
+                        'you may be using a library with broken token emulation',
+                        $token, $clashingToken
+                    ));
+                }
+                $usedTokenIds[$tokenId] = $token;
+            }
+        }
+
+        // Now define any tokens that have not yet been emulated. Try to assign IDs from -1
+        // downwards, but skip any IDs that may already be in use.
+        $newTokenId = -1;
+        foreach ($compatTokens as $token) {
+            if (!\defined($token)) {
+                while (isset($usedTokenIds[$newTokenId])) {
+                    $newTokenId--;
+                }
+                \define($token, $newTokenId);
+                $newTokenId--;
+            }
+        }
+
+        $compatTokensDefined = true;
+    }
+
     /**
      * Creates the token map.
      *
@@ -384,6 +503,32 @@ protected function createTokenMap() : array {
             $tokenMap[\T_COMPILER_HALT_OFFSET] = Tokens::T_STRING;
         }
 
+        // Assign tokens for which we define compatibility constants, as token_name() does not know them.
+        $tokenMap[\T_FN] = Tokens::T_FN;
+        $tokenMap[\T_COALESCE_EQUAL] = Tokens::T_COALESCE_EQUAL;
+        $tokenMap[\T_NAME_QUALIFIED] = Tokens::T_NAME_QUALIFIED;
+        $tokenMap[\T_NAME_FULLY_QUALIFIED] = Tokens::T_NAME_FULLY_QUALIFIED;
+        $tokenMap[\T_NAME_RELATIVE] = Tokens::T_NAME_RELATIVE;
+        $tokenMap[\T_MATCH] = Tokens::T_MATCH;
+        $tokenMap[\T_NULLSAFE_OBJECT_OPERATOR] = Tokens::T_NULLSAFE_OBJECT_OPERATOR;
+        $tokenMap[\T_ATTRIBUTE] = Tokens::T_ATTRIBUTE;
+
         return $tokenMap;
     }
+
+    private function createIdentifierTokenMap(): array {
+        // Based on semi_reserved production.
+        return array_fill_keys([
+            \T_STRING,
+            \T_STATIC, \T_ABSTRACT, \T_FINAL, \T_PRIVATE, \T_PROTECTED, \T_PUBLIC,
+            \T_INCLUDE, \T_INCLUDE_ONCE, \T_EVAL, \T_REQUIRE, \T_REQUIRE_ONCE, \T_LOGICAL_OR, \T_LOGICAL_XOR, \T_LOGICAL_AND,
+            \T_INSTANCEOF, \T_NEW, \T_CLONE, \T_EXIT, \T_IF, \T_ELSEIF, \T_ELSE, \T_ENDIF, \T_ECHO, \T_DO, \T_WHILE,
+            \T_ENDWHILE, \T_FOR, \T_ENDFOR, \T_FOREACH, \T_ENDFOREACH, \T_DECLARE, \T_ENDDECLARE, \T_AS, \T_TRY, \T_CATCH,
+            \T_FINALLY, \T_THROW, \T_USE, \T_INSTEADOF, \T_GLOBAL, \T_VAR, \T_UNSET, \T_ISSET, \T_EMPTY, \T_CONTINUE, \T_GOTO,
+            \T_FUNCTION, \T_CONST, \T_RETURN, \T_PRINT, \T_YIELD, \T_LIST, \T_SWITCH, \T_ENDSWITCH, \T_CASE, \T_DEFAULT,
+            \T_BREAK, \T_ARRAY, \T_CALLABLE, \T_EXTENDS, \T_IMPLEMENTS, \T_NAMESPACE, \T_TRAIT, \T_INTERFACE, \T_CLASS,
+            \T_CLASS_C, \T_TRAIT_C, \T_FUNC_C, \T_METHOD_C, \T_LINE, \T_FILE, \T_DIR, \T_NS_C, \T_HALT_COMPILER, \T_FN,
+            \T_MATCH,
+        ], true);
+    }
 }
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Lexer/Emulative.php b/vendor/nikic/php-parser/lib/PhpParser/Lexer/Emulative.php
index 5d10b9af6463eb2950a85d5e60411b6a5d509543..cf1f8e5a954b93d370f640ea8cf682f16fa57ffb 100644
--- a/vendor/nikic/php-parser/lib/PhpParser/Lexer/Emulative.php
+++ b/vendor/nikic/php-parser/lib/PhpParser/Lexer/Emulative.php
@@ -5,66 +5,85 @@
 use PhpParser\Error;
 use PhpParser\ErrorHandler;
 use PhpParser\Lexer;
+use PhpParser\Lexer\TokenEmulator\AttributeEmulator;
 use PhpParser\Lexer\TokenEmulator\CoaleseEqualTokenEmulator;
+use PhpParser\Lexer\TokenEmulator\FlexibleDocStringEmulator;
 use PhpParser\Lexer\TokenEmulator\FnTokenEmulator;
-use PhpParser\Lexer\TokenEmulator\TokenEmulatorInterface;
+use PhpParser\Lexer\TokenEmulator\MatchTokenEmulator;
+use PhpParser\Lexer\TokenEmulator\NullsafeTokenEmulator;
+use PhpParser\Lexer\TokenEmulator\NumericLiteralSeparatorEmulator;
+use PhpParser\Lexer\TokenEmulator\ReverseEmulator;
+use PhpParser\Lexer\TokenEmulator\TokenEmulator;
+use PhpParser\Parser\Tokens;
 
 class Emulative extends Lexer
 {
-    const PHP_7_3 = '7.3.0dev';
-    const PHP_7_4 = '7.4.0dev';
-
-    const FLEXIBLE_DOC_STRING_REGEX = <<<'REGEX'
-/<<<[ \t]*(['"]?)([a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*)\1\r?\n
-(?:.*\r?\n)*?
-(?<indentation>\h*)\2(?![a-zA-Z_\x80-\xff])(?<separator>(?:;?[\r\n])?)/x
-REGEX;
+    const PHP_7_3 = '7.3dev';
+    const PHP_7_4 = '7.4dev';
+    const PHP_8_0 = '8.0dev';
 
     /** @var mixed[] Patches used to reverse changes introduced in the code */
     private $patches = [];
 
-    /** @var TokenEmulatorInterface[] */
-    private $tokenEmulators = [];
+    /** @var TokenEmulator[] */
+    private $emulators = [];
+
+    /** @var string */
+    private $targetPhpVersion;
 
     /**
-     * @param mixed[] $options
+     * @param mixed[] $options Lexer options. In addition to the usual options,
+     *                         accepts a 'phpVersion' string that specifies the
+     *                         version to emulated. Defaults to newest supported.
      */
     public function __construct(array $options = [])
     {
-        parent::__construct($options);
+        $this->targetPhpVersion = $options['phpVersion'] ?? Emulative::PHP_8_0;
+        unset($options['phpVersion']);
 
-        // prepare token emulators
-        $this->tokenEmulators[] = new FnTokenEmulator();
-        $this->tokenEmulators[] = new CoaleseEqualTokenEmulator();
+        parent::__construct($options);
 
-        // add emulated tokens here
-        foreach ($this->tokenEmulators as $emulativeToken) {
-            $this->tokenMap[$emulativeToken->getTokenId()] = $emulativeToken->getParserTokenId();
+        $emulators = [
+            new FlexibleDocStringEmulator(),
+            new FnTokenEmulator(),
+            new MatchTokenEmulator(),
+            new CoaleseEqualTokenEmulator(),
+            new NumericLiteralSeparatorEmulator(),
+            new NullsafeTokenEmulator(),
+            new AttributeEmulator(),
+        ];
+
+        // Collect emulators that are relevant for the PHP version we're running
+        // and the PHP version we're targeting for emulation.
+        foreach ($emulators as $emulator) {
+            $emulatorPhpVersion = $emulator->getPhpVersion();
+            if ($this->isForwardEmulationNeeded($emulatorPhpVersion)) {
+                $this->emulators[] = $emulator;
+            } else if ($this->isReverseEmulationNeeded($emulatorPhpVersion)) {
+                $this->emulators[] = new ReverseEmulator($emulator);
+            }
         }
     }
 
     public function startLexing(string $code, ErrorHandler $errorHandler = null) {
-        $this->patches = [];
+        $emulators = array_filter($this->emulators, function($emulator) use($code) {
+            return $emulator->isEmulationNeeded($code);
+        });
 
-        if ($this->isEmulationNeeded($code) === false) {
+        if (empty($emulators)) {
             // Nothing to emulate, yay
             parent::startLexing($code, $errorHandler);
             return;
         }
 
-        $collector = new ErrorHandler\Collecting();
-
-        // 1. emulation of heredoc and nowdoc new syntax
-        $preparedCode = $this->processHeredocNowdoc($code);
-        parent::startLexing($preparedCode, $collector);
-
-        // add token emulation
-        foreach ($this->tokenEmulators as $emulativeToken) {
-            if ($emulativeToken->isEmulationNeeded($code)) {
-                $this->tokens = $emulativeToken->emulate($code, $this->tokens);
-            }
+        $this->patches = [];
+        foreach ($emulators as $emulator) {
+            $code = $emulator->preprocessCode($code, $this->patches);
         }
 
+        $collector = new ErrorHandler\Collecting();
+        parent::startLexing($code, $collector);
+        $this->sortPatches();
         $this->fixupTokens();
 
         $errors = $collector->getErrors();
@@ -74,72 +93,29 @@ public function startLexing(string $code, ErrorHandler $errorHandler = null) {
                 $errorHandler->handleError($error);
             }
         }
-    }
 
-    private function isHeredocNowdocEmulationNeeded(string $code): bool
-    {
-        // skip version where this works without emulation
-        if (version_compare(\PHP_VERSION, self::PHP_7_3, '>=')) {
-            return false;
+        foreach ($emulators as $emulator) {
+            $this->tokens = $emulator->emulate($code, $this->tokens);
         }
-
-        return strpos($code, '<<<') !== false;
     }
 
-    private function processHeredocNowdoc(string $code): string
-    {
-        if ($this->isHeredocNowdocEmulationNeeded($code) === false) {
-            return $code;
-        }
-
-        if (!preg_match_all(self::FLEXIBLE_DOC_STRING_REGEX, $code, $matches, PREG_SET_ORDER|PREG_OFFSET_CAPTURE)) {
-            // No heredoc/nowdoc found
-            return $code;
-        }
-
-        // Keep track of how much we need to adjust string offsets due to the modifications we
-        // already made
-        $posDelta = 0;
-        foreach ($matches as $match) {
-            $indentation = $match['indentation'][0];
-            $indentationStart = $match['indentation'][1];
-
-            $separator = $match['separator'][0];
-            $separatorStart = $match['separator'][1];
-
-            if ($indentation === '' && $separator !== '') {
-                // Ordinary heredoc/nowdoc
-                continue;
-            }
-
-            if ($indentation !== '') {
-                // Remove indentation
-                $indentationLen = strlen($indentation);
-                $code = substr_replace($code, '', $indentationStart + $posDelta, $indentationLen);
-                $this->patches[] = [$indentationStart + $posDelta, 'add', $indentation];
-                $posDelta -= $indentationLen;
-            }
-
-            if ($separator === '') {
-                // Insert newline as separator
-                $code = substr_replace($code, "\n", $separatorStart + $posDelta, 0);
-                $this->patches[] = [$separatorStart + $posDelta, 'remove', "\n"];
-                $posDelta += 1;
-            }
-        }
+    private function isForwardEmulationNeeded(string $emulatorPhpVersion): bool {
+        return version_compare(\PHP_VERSION, $emulatorPhpVersion, '<')
+            && version_compare($this->targetPhpVersion, $emulatorPhpVersion, '>=');
+    }
 
-        return $code;
+    private function isReverseEmulationNeeded(string $emulatorPhpVersion): bool {
+        return version_compare(\PHP_VERSION, $emulatorPhpVersion, '>=')
+            && version_compare($this->targetPhpVersion, $emulatorPhpVersion, '<');
     }
 
-    private function isEmulationNeeded(string $code): bool
+    private function sortPatches()
     {
-        foreach ($this->tokenEmulators as $emulativeToken) {
-            if ($emulativeToken->isEmulationNeeded($code)) {
-                return true;
-            }
-        }
-
-        return $this->isHeredocNowdocEmulationNeeded($code);
+        // Patches may be contributed by different emulators.
+        // Make sure they are sorted by increasing patch position.
+        usort($this->patches, function($p1, $p2) {
+            return $p1[0] <=> $p2[0];
+        });
     }
 
     private function fixupTokens()
@@ -158,7 +134,20 @@ private function fixupTokens()
         for ($i = 0, $c = \count($this->tokens); $i < $c; $i++) {
             $token = $this->tokens[$i];
             if (\is_string($token)) {
-                // We assume that patches don't apply to string tokens
+                if ($patchPos === $pos) {
+                    // Only support replacement for string tokens.
+                    assert($patchType === 'replace');
+                    $this->tokens[$i] = $patchText;
+
+                    // Fetch the next patch
+                    $patchIdx++;
+                    if ($patchIdx >= \count($this->patches)) {
+                        // No more patches, we're done
+                        return;
+                    }
+                    list($patchPos, $patchType, $patchText) = $this->patches[$patchIdx];
+                }
+
                 $pos += \strlen($token);
                 continue;
             }
@@ -186,6 +175,11 @@ private function fixupTokens()
                         $token[1], $patchText, $patchPos - $pos + $posDelta, 0
                     );
                     $posDelta += $patchTextLen;
+                } else if ($patchType === 'replace') {
+                    // Replace inside the token string
+                    $this->tokens[$i][1] = substr_replace(
+                        $token[1], $patchText, $patchPos - $pos + $posDelta, $patchTextLen
+                    );
                 } else {
                     assert(false);
                 }
@@ -232,7 +226,7 @@ private function fixupErrors(array $errors) {
                 if ($patchType === 'add') {
                     $posDelta += strlen($patchText);
                     $lineDelta += substr_count($patchText, "\n");
-                } else {
+                } else if ($patchType === 'remove') {
                     $posDelta -= strlen($patchText);
                     $lineDelta -= substr_count($patchText, "\n");
                 }
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/AttributeEmulator.php b/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/AttributeEmulator.php
new file mode 100644
index 0000000000000000000000000000000000000000..6776a51975fbd202e7aa75aab92701383568ce60
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/AttributeEmulator.php
@@ -0,0 +1,56 @@
+<?php declare(strict_types=1);
+
+namespace PhpParser\Lexer\TokenEmulator;
+
+use PhpParser\Lexer\Emulative;
+
+final class AttributeEmulator extends TokenEmulator
+{
+    public function getPhpVersion(): string
+    {
+        return Emulative::PHP_8_0;
+    }
+
+    public function isEmulationNeeded(string $code) : bool
+    {
+        return strpos($code, '#[') !== false;
+    }
+
+    public function emulate(string $code, array $tokens): array
+    {
+        // We need to manually iterate and manage a count because we'll change
+        // the tokens array on the way.
+        $line = 1;
+        for ($i = 0, $c = count($tokens); $i < $c; ++$i) {
+            if ($tokens[$i] === '#' && isset($tokens[$i + 1]) && $tokens[$i + 1] === '[') {
+                array_splice($tokens, $i, 2, [
+                    [\T_ATTRIBUTE, '#[', $line]
+                ]);
+                $c--;
+                continue;
+            }
+            if (\is_array($tokens[$i])) {
+                $line += substr_count($tokens[$i][1], "\n");
+            }
+        }
+
+        return $tokens;
+    }
+
+    public function reverseEmulate(string $code, array $tokens): array
+    {
+        // TODO
+        return $tokens;
+    }
+
+    public function preprocessCode(string $code, array &$patches): string {
+        $pos = 0;
+        while (false !== $pos = strpos($code, '#[', $pos)) {
+            // Replace #[ with %[
+            $code[$pos] = '%';
+            $patches[] = [$pos, 'replace', '#'];
+            $pos += 2;
+        }
+        return $code;
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/CoaleseEqualTokenEmulator.php b/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/CoaleseEqualTokenEmulator.php
index ca6cf1340057bab92cdd67e692d5626e0b6ae05b..d91da92143c514a8b58b9cd2cf5ff01453bc485b 100644
--- a/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/CoaleseEqualTokenEmulator.php
+++ b/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/CoaleseEqualTokenEmulator.php
@@ -3,29 +3,16 @@
 namespace PhpParser\Lexer\TokenEmulator;
 
 use PhpParser\Lexer\Emulative;
-use PhpParser\Parser\Tokens;
 
-final class CoaleseEqualTokenEmulator implements TokenEmulatorInterface
+final class CoaleseEqualTokenEmulator extends TokenEmulator
 {
-    const T_COALESCE_EQUAL = 1007;
-
-    public function getTokenId(): int
+    public function getPhpVersion(): string
     {
-        return self::T_COALESCE_EQUAL;
+        return Emulative::PHP_7_4;
     }
 
-    public function getParserTokenId(): int
+    public function isEmulationNeeded(string $code): bool
     {
-        return Tokens::T_COALESCE_EQUAL;
-    }
-
-    public function isEmulationNeeded(string $code) : bool
-    {
-        // skip version where this is supported
-        if (version_compare(\PHP_VERSION, Emulative::PHP_7_4, '>=')) {
-            return false;
-        }
-
         return strpos($code, '??=') !== false;
     }
 
@@ -38,7 +25,7 @@ public function emulate(string $code, array $tokens): array
             if (isset($tokens[$i + 1])) {
                 if ($tokens[$i][0] === T_COALESCE && $tokens[$i + 1] === '=') {
                     array_splice($tokens, $i, 2, [
-                        [self::T_COALESCE_EQUAL, '??=', $line]
+                        [\T_COALESCE_EQUAL, '??=', $line]
                     ]);
                     $c--;
                     continue;
@@ -51,4 +38,10 @@ public function emulate(string $code, array $tokens): array
 
         return $tokens;
     }
+
+    public function reverseEmulate(string $code, array $tokens): array
+    {
+        // ??= was not valid code previously, don't bother.
+        return $tokens;
+    }
 }
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/FlexibleDocStringEmulator.php b/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/FlexibleDocStringEmulator.php
new file mode 100644
index 0000000000000000000000000000000000000000..c15d6271fcb51610988acf5851cea6a8cd67170e
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/FlexibleDocStringEmulator.php
@@ -0,0 +1,76 @@
+<?php declare(strict_types=1);
+
+namespace PhpParser\Lexer\TokenEmulator;
+
+use PhpParser\Lexer\Emulative;
+
+final class FlexibleDocStringEmulator extends TokenEmulator
+{
+    const FLEXIBLE_DOC_STRING_REGEX = <<<'REGEX'
+/<<<[ \t]*(['"]?)([a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*)\1\r?\n
+(?:.*\r?\n)*?
+(?<indentation>\h*)\2(?![a-zA-Z0-9_\x80-\xff])(?<separator>(?:;?[\r\n])?)/x
+REGEX;
+
+    public function getPhpVersion(): string
+    {
+        return Emulative::PHP_7_3;
+    }
+
+    public function isEmulationNeeded(string $code) : bool
+    {
+        return strpos($code, '<<<') !== false;
+    }
+
+    public function emulate(string $code, array $tokens): array
+    {
+        // Handled by preprocessing + fixup.
+        return $tokens;
+    }
+
+    public function reverseEmulate(string $code, array $tokens): array
+    {
+        // Not supported.
+        return $tokens;
+    }
+
+    public function preprocessCode(string $code, array &$patches): string {
+        if (!preg_match_all(self::FLEXIBLE_DOC_STRING_REGEX, $code, $matches, PREG_SET_ORDER|PREG_OFFSET_CAPTURE)) {
+            // No heredoc/nowdoc found
+            return $code;
+        }
+
+        // Keep track of how much we need to adjust string offsets due to the modifications we
+        // already made
+        $posDelta = 0;
+        foreach ($matches as $match) {
+            $indentation = $match['indentation'][0];
+            $indentationStart = $match['indentation'][1];
+
+            $separator = $match['separator'][0];
+            $separatorStart = $match['separator'][1];
+
+            if ($indentation === '' && $separator !== '') {
+                // Ordinary heredoc/nowdoc
+                continue;
+            }
+
+            if ($indentation !== '') {
+                // Remove indentation
+                $indentationLen = strlen($indentation);
+                $code = substr_replace($code, '', $indentationStart + $posDelta, $indentationLen);
+                $patches[] = [$indentationStart + $posDelta, 'add', $indentation];
+                $posDelta -= $indentationLen;
+            }
+
+            if ($separator === '') {
+                // Insert newline as separator
+                $code = substr_replace($code, "\n", $separatorStart + $posDelta, 0);
+                $patches[] = [$separatorStart + $posDelta, 'remove', "\n"];
+                $posDelta += 1;
+            }
+        }
+
+        return $code;
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/FnTokenEmulator.php b/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/FnTokenEmulator.php
index 2059693ae1d53111c05716971121bb57ff8397ca..eb7e49634ac6221891d95874a32e03b885a23d58 100644
--- a/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/FnTokenEmulator.php
+++ b/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/FnTokenEmulator.php
@@ -3,64 +3,21 @@
 namespace PhpParser\Lexer\TokenEmulator;
 
 use PhpParser\Lexer\Emulative;
-use PhpParser\Parser\Tokens;
 
-final class FnTokenEmulator implements TokenEmulatorInterface
+final class FnTokenEmulator extends KeywordEmulator
 {
-    const T_FN = 1008;
-
-    public function getTokenId(): int
-    {
-        return self::T_FN;
-    }
-
-    public function getParserTokenId(): int
-    {
-        return Tokens::T_FN;
-    }
-
-    public function isEmulationNeeded(string $code) : bool
+    public function getPhpVersion(): string
     {
-        // skip version where this is supported
-        if (version_compare(\PHP_VERSION, Emulative::PHP_7_4, '>=')) {
-            return false;
-        }
-
-        return strpos($code, 'fn') !== false;
+        return Emulative::PHP_7_4;
     }
 
-    public function emulate(string $code, array $tokens): array
+    public function getKeywordString(): string
     {
-        // We need to manually iterate and manage a count because we'll change
-        // the tokens array on the way
-        foreach ($tokens as $i => $token) {
-            if ($token[0] === T_STRING && $token[1] === 'fn') {
-                $previousNonSpaceToken = $this->getPreviousNonSpaceToken($tokens, $i);
-                if ($previousNonSpaceToken !== null && $previousNonSpaceToken[0] === T_OBJECT_OPERATOR) {
-                    continue;
-                }
-
-                $tokens[$i][0] = self::T_FN;
-            }
-        }
-
-        return $tokens;
+        return 'fn';
     }
 
-    /**
-     * @param mixed[] $tokens
-     * @return mixed[]|null
-     */
-    private function getPreviousNonSpaceToken(array $tokens, int $start)
+    public function getKeywordToken(): int
     {
-        for ($i = $start - 1; $i >= 0; --$i) {
-            if ($tokens[$i][0] === T_WHITESPACE) {
-                continue;
-            }
-
-            return $tokens[$i];
-        }
-
-        return null;
+        return \T_FN;
     }
-}
+}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/KeywordEmulator.php b/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/KeywordEmulator.php
new file mode 100644
index 0000000000000000000000000000000000000000..e7c0512bd716273a6a425c4a836ae21e83aebf19
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/KeywordEmulator.php
@@ -0,0 +1,60 @@
+<?php declare(strict_types=1);
+
+namespace PhpParser\Lexer\TokenEmulator;
+
+abstract class KeywordEmulator extends TokenEmulator
+{
+    abstract function getKeywordString(): string;
+    abstract function getKeywordToken(): int;
+
+    public function isEmulationNeeded(string $code): bool
+    {
+        return strpos(strtolower($code), $this->getKeywordString()) !== false;
+    }
+
+    public function emulate(string $code, array $tokens): array
+    {
+        $keywordString = $this->getKeywordString();
+        foreach ($tokens as $i => $token) {
+            if ($token[0] === T_STRING && strtolower($token[1]) === $keywordString) {
+                $previousNonSpaceToken = $this->getPreviousNonSpaceToken($tokens, $i);
+                if ($previousNonSpaceToken !== null && $previousNonSpaceToken[0] === \T_OBJECT_OPERATOR) {
+                    continue;
+                }
+
+                $tokens[$i][0] = $this->getKeywordToken();
+            }
+        }
+
+        return $tokens;
+    }
+
+    /**
+     * @param mixed[] $tokens
+     * @return mixed[]|null
+     */
+    private function getPreviousNonSpaceToken(array $tokens, int $start)
+    {
+        for ($i = $start - 1; $i >= 0; --$i) {
+            if ($tokens[$i][0] === T_WHITESPACE) {
+                continue;
+            }
+
+            return $tokens[$i];
+        }
+
+        return null;
+    }
+
+    public function reverseEmulate(string $code, array $tokens): array
+    {
+        $keywordToken = $this->getKeywordToken();
+        foreach ($tokens as $i => $token) {
+            if ($token[0] === $keywordToken) {
+                $tokens[$i][0] = \T_STRING;
+            }
+        }
+
+        return $tokens;
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/MatchTokenEmulator.php b/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/MatchTokenEmulator.php
new file mode 100644
index 0000000000000000000000000000000000000000..902a46dfcb76bdf11e6c187d6d6dd5046fddce24
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/MatchTokenEmulator.php
@@ -0,0 +1,23 @@
+<?php declare(strict_types=1);
+
+namespace PhpParser\Lexer\TokenEmulator;
+
+use PhpParser\Lexer\Emulative;
+
+final class MatchTokenEmulator extends KeywordEmulator
+{
+    public function getPhpVersion(): string
+    {
+        return Emulative::PHP_8_0;
+    }
+
+    public function getKeywordString(): string
+    {
+        return 'match';
+    }
+
+    public function getKeywordToken(): int
+    {
+        return \T_MATCH;
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/NullsafeTokenEmulator.php b/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/NullsafeTokenEmulator.php
new file mode 100644
index 0000000000000000000000000000000000000000..1a29c676e450c4eec02065295ef195c83f623878
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/NullsafeTokenEmulator.php
@@ -0,0 +1,67 @@
+<?php declare(strict_types=1);
+
+namespace PhpParser\Lexer\TokenEmulator;
+
+use PhpParser\Lexer\Emulative;
+
+final class NullsafeTokenEmulator extends TokenEmulator
+{
+    public function getPhpVersion(): string
+    {
+        return Emulative::PHP_8_0;
+    }
+
+    public function isEmulationNeeded(string $code): bool
+    {
+        return strpos($code, '?->') !== false;
+    }
+
+    public function emulate(string $code, array $tokens): array
+    {
+        // We need to manually iterate and manage a count because we'll change
+        // the tokens array on the way
+        $line = 1;
+        for ($i = 0, $c = count($tokens); $i < $c; ++$i) {
+            if ($tokens[$i] === '?' && isset($tokens[$i + 1]) && $tokens[$i + 1][0] === \T_OBJECT_OPERATOR) {
+                array_splice($tokens, $i, 2, [
+                    [\T_NULLSAFE_OBJECT_OPERATOR, '?->', $line]
+                ]);
+                $c--;
+                continue;
+            }
+
+            // Handle ?-> inside encapsed string.
+            if ($tokens[$i][0] === \T_ENCAPSED_AND_WHITESPACE && isset($tokens[$i - 1])
+                && $tokens[$i - 1][0] === \T_VARIABLE
+                && preg_match('/^\?->([a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*)/', $tokens[$i][1], $matches)
+            ) {
+                $replacement = [
+                    [\T_NULLSAFE_OBJECT_OPERATOR, '?->', $line],
+                    [\T_STRING, $matches[1], $line],
+                ];
+                if (\strlen($matches[0]) !== \strlen($tokens[$i][1])) {
+                    $replacement[] = [
+                        \T_ENCAPSED_AND_WHITESPACE,
+                        \substr($tokens[$i][1], \strlen($matches[0])),
+                        $line
+                    ];
+                }
+                array_splice($tokens, $i, 1, $replacement);
+                $c += \count($replacement) - 1;
+                continue;
+            }
+
+            if (\is_array($tokens[$i])) {
+                $line += substr_count($tokens[$i][1], "\n");
+            }
+        }
+
+        return $tokens;
+    }
+
+    public function reverseEmulate(string $code, array $tokens): array
+    {
+        // ?-> was not valid code previously, don't bother.
+        return $tokens;
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/NumericLiteralSeparatorEmulator.php b/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/NumericLiteralSeparatorEmulator.php
new file mode 100644
index 0000000000000000000000000000000000000000..cdf793e46e81e865d45317fc0ef23ee882091085
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/NumericLiteralSeparatorEmulator.php
@@ -0,0 +1,105 @@
+<?php declare(strict_types=1);
+
+namespace PhpParser\Lexer\TokenEmulator;
+
+use PhpParser\Lexer\Emulative;
+
+final class NumericLiteralSeparatorEmulator extends TokenEmulator
+{
+    const BIN = '(?:0b[01]+(?:_[01]+)*)';
+    const HEX = '(?:0x[0-9a-f]+(?:_[0-9a-f]+)*)';
+    const DEC = '(?:[0-9]+(?:_[0-9]+)*)';
+    const SIMPLE_FLOAT = '(?:' . self::DEC . '\.' . self::DEC . '?|\.' . self::DEC . ')';
+    const EXP = '(?:e[+-]?' . self::DEC . ')';
+    const FLOAT = '(?:' . self::SIMPLE_FLOAT . self::EXP . '?|' . self::DEC . self::EXP . ')';
+    const NUMBER = '~' . self::FLOAT . '|' . self::BIN . '|' . self::HEX . '|' . self::DEC . '~iA';
+
+    public function getPhpVersion(): string
+    {
+        return Emulative::PHP_7_4;
+    }
+
+    public function isEmulationNeeded(string $code) : bool
+    {
+        return preg_match('~[0-9]_[0-9]~', $code)
+            || preg_match('~0x[0-9a-f]+_[0-9a-f]~i', $code);
+    }
+
+    public function emulate(string $code, array $tokens): array
+    {
+        // We need to manually iterate and manage a count because we'll change
+        // the tokens array on the way
+        $codeOffset = 0;
+        for ($i = 0, $c = count($tokens); $i < $c; ++$i) {
+            $token = $tokens[$i];
+            $tokenLen = \strlen(\is_array($token) ? $token[1] : $token);
+
+            if ($token[0] !== T_LNUMBER && $token[0] !== T_DNUMBER) {
+                $codeOffset += $tokenLen;
+                continue;
+            }
+
+            $res = preg_match(self::NUMBER, $code, $matches, 0, $codeOffset);
+            assert($res, "No number at number token position");
+
+            $match = $matches[0];
+            $matchLen = \strlen($match);
+            if ($matchLen === $tokenLen) {
+                // Original token already holds the full number.
+                $codeOffset += $tokenLen;
+                continue;
+            }
+
+            $tokenKind = $this->resolveIntegerOrFloatToken($match);
+            $newTokens = [[$tokenKind, $match, $token[2]]];
+
+            $numTokens = 1;
+            $len = $tokenLen;
+            while ($matchLen > $len) {
+                $nextToken = $tokens[$i + $numTokens];
+                $nextTokenText = \is_array($nextToken) ? $nextToken[1] : $nextToken;
+                $nextTokenLen = \strlen($nextTokenText);
+
+                $numTokens++;
+                if ($matchLen < $len + $nextTokenLen) {
+                    // Split trailing characters into a partial token.
+                    assert(is_array($nextToken), "Partial token should be an array token");
+                    $partialText = substr($nextTokenText, $matchLen - $len);
+                    $newTokens[] = [$nextToken[0], $partialText, $nextToken[2]];
+                    break;
+                }
+
+                $len += $nextTokenLen;
+            }
+
+            array_splice($tokens, $i, $numTokens, $newTokens);
+            $c -= $numTokens - \count($newTokens);
+            $codeOffset += $matchLen;
+        }
+
+        return $tokens;
+    }
+
+    private function resolveIntegerOrFloatToken(string $str): int
+    {
+        $str = str_replace('_', '', $str);
+
+        if (stripos($str, '0b') === 0) {
+            $num = bindec($str);
+        } elseif (stripos($str, '0x') === 0) {
+            $num = hexdec($str);
+        } elseif (stripos($str, '0') === 0 && ctype_digit($str)) {
+            $num = octdec($str);
+        } else {
+            $num = +$str;
+        }
+
+        return is_float($num) ? T_DNUMBER : T_LNUMBER;
+    }
+
+    public function reverseEmulate(string $code, array $tokens): array
+    {
+        // Numeric separators were not legal code previously, don't bother.
+        return $tokens;
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ReverseEmulator.php b/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ReverseEmulator.php
new file mode 100644
index 0000000000000000000000000000000000000000..90093f66b21c4e9efbc7c10c588958b5658ffff1
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ReverseEmulator.php
@@ -0,0 +1,36 @@
+<?php declare(strict_types=1);
+
+namespace PhpParser\Lexer\TokenEmulator;
+
+/**
+ * Reverses emulation direction of the inner emulator.
+ */
+final class ReverseEmulator extends TokenEmulator
+{
+    /** @var TokenEmulator Inner emulator */
+    private $emulator;
+
+    public function __construct(TokenEmulator $emulator) {
+        $this->emulator = $emulator;
+    }
+
+    public function getPhpVersion(): string {
+        return $this->emulator->getPhpVersion();
+    }
+
+    public function isEmulationNeeded(string $code): bool {
+        return $this->emulator->isEmulationNeeded($code);
+    }
+
+    public function emulate(string $code, array $tokens): array {
+        return $this->emulator->reverseEmulate($code, $tokens);
+    }
+
+    public function reverseEmulate(string $code, array $tokens): array {
+        return $this->emulator->emulate($code, $tokens);
+    }
+
+    public function preprocessCode(string $code, array &$patches): string {
+        return $code;
+    }
+}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/TokenEmulator.php b/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/TokenEmulator.php
new file mode 100644
index 0000000000000000000000000000000000000000..a020bc0ff49f92e160a4a53944249776e5b71174
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/TokenEmulator.php
@@ -0,0 +1,25 @@
+<?php declare(strict_types=1);
+
+namespace PhpParser\Lexer\TokenEmulator;
+
+/** @internal */
+abstract class TokenEmulator
+{
+    abstract public function getPhpVersion(): string;
+
+    abstract public function isEmulationNeeded(string $code): bool;
+
+    /**
+     * @return array Modified Tokens
+     */
+    abstract public function emulate(string $code, array $tokens): array;
+
+    /**
+     * @return array Modified Tokens
+     */
+    abstract public function reverseEmulate(string $code, array $tokens): array;
+
+    public function preprocessCode(string $code, array &$patches): string {
+        return $code;
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/TokenEmulatorInterface.php b/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/TokenEmulatorInterface.php
deleted file mode 100644
index 6ef5b9d0689ed118dd00f6b058f0db1f6d186a53..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/TokenEmulatorInterface.php
+++ /dev/null
@@ -1,17 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser\Lexer\TokenEmulator;
-
-interface TokenEmulatorInterface
-{
-    public function getTokenId(): int;
-
-    public function getParserTokenId(): int;
-
-    public function isEmulationNeeded(string $code): bool;
-
-    /**
-     * @return array Modified Tokens
-     */
-    public function emulate(string $code, array $tokens): array;
-}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node.php b/vendor/nikic/php-parser/lib/PhpParser/Node.php
index 7f04c3432c301130456eb10c9bc52faae827adc5..befb256504294d7c1d2dc4263bb429e46d903d73 100644
--- a/vendor/nikic/php-parser/lib/PhpParser/Node.php
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node.php
@@ -95,8 +95,6 @@ public function getComments() : array;
     /**
      * Gets the doc comment of the node.
      *
-     * The doc comment has to be the last comment associated with the node.
-     *
      * @return null|Comment\Doc Doc comment object or null
      */
     public function getDocComment();
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Arg.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Arg.php
index a585ddc3be0bb8e25f82ade2688f7f9ac6db0d6f..b25b0904a229c2c85d9ad27d43442b1345eb7113 100644
--- a/vendor/nikic/php-parser/lib/PhpParser/Node/Arg.php
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Arg.php
@@ -6,6 +6,8 @@
 
 class Arg extends NodeAbstract
 {
+    /** @var Identifier|null Parameter name (for named parameters) */
+    public $name;
     /** @var Expr Value to pass */
     public $value;
     /** @var bool Whether to pass by ref */
@@ -20,16 +22,21 @@ class Arg extends NodeAbstract
      * @param bool  $byRef      Whether to pass by ref
      * @param bool  $unpack     Whether to unpack the argument
      * @param array $attributes Additional attributes
+     * @param Identifier|null $name Parameter name (for named parameters)
      */
-    public function __construct(Expr $value, bool $byRef = false, bool $unpack = false, array $attributes = []) {
+    public function __construct(
+        Expr $value, bool $byRef = false, bool $unpack = false, array $attributes = [],
+        Identifier $name = null
+    ) {
         $this->attributes = $attributes;
+        $this->name = $name;
         $this->value = $value;
         $this->byRef = $byRef;
         $this->unpack = $unpack;
     }
 
     public function getSubNodeNames() : array {
-        return ['value', 'byRef', 'unpack'];
+        return ['name', 'value', 'byRef', 'unpack'];
     }
     
     public function getType() : string {
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Attribute.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Attribute.php
new file mode 100644
index 0000000000000000000000000000000000000000..c96f66e5147ef89d7f53c4b952d909bcd4d4ed97
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Attribute.php
@@ -0,0 +1,34 @@
+<?php declare(strict_types=1);
+
+namespace PhpParser\Node;
+
+use PhpParser\Node;
+use PhpParser\NodeAbstract;
+
+class Attribute extends NodeAbstract
+{
+    /** @var Name Attribute name */
+    public $name;
+
+    /** @var Arg[] Attribute arguments */
+    public $args;
+
+    /**
+     * @param Node\Name $name       Attribute name
+     * @param Arg[]     $args       Attribute arguments
+     * @param array     $attributes Additional node attributes
+     */
+    public function __construct(Name $name, array $args = [], array $attributes = []) {
+        $this->attributes = $attributes;
+        $this->name = $name;
+        $this->args = $args;
+    }
+
+    public function getSubNodeNames() : array {
+        return ['name', 'args'];
+    }
+
+    public function getType() : string {
+        return 'Attribute';
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/AttributeGroup.php b/vendor/nikic/php-parser/lib/PhpParser/Node/AttributeGroup.php
new file mode 100644
index 0000000000000000000000000000000000000000..613bfc41343cb718bfc200b05afc0d98cf457267
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/AttributeGroup.php
@@ -0,0 +1,29 @@
+<?php declare(strict_types=1);
+
+namespace PhpParser\Node;
+
+use PhpParser\Node;
+use PhpParser\NodeAbstract;
+
+class AttributeGroup extends NodeAbstract
+{
+    /** @var Attribute[] Attributes */
+    public $attrs;
+
+    /**
+     * @param Attribute[] $attrs PHP attributes
+     * @param array $attributes Additional node attributes
+     */
+    public function __construct(array $attrs, array $attributes = []) {
+        $this->attributes = $attributes;
+        $this->attrs = $attrs;
+    }
+
+    public function getSubNodeNames() : array {
+        return ['attrs'];
+    }
+
+    public function getType() : string {
+        return 'AttributeGroup';
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Const_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Const_.php
index 4094a653dc2a46fb298656865bbc3e450703189f..789a426552d45ba3f1714a005b82ea4c68fc562b 100644
--- a/vendor/nikic/php-parser/lib/PhpParser/Node/Const_.php
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Const_.php
@@ -5,7 +5,7 @@
 use PhpParser\NodeAbstract;
 
 /**
- * @property Name $namespacedName Namespaced name (for class constants, if using NameResolver)
+ * @property Name $namespacedName Namespaced name (for global constants, if using NameResolver)
  */
 class Const_ extends NodeAbstract
 {
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Array_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Array_.php
index fbe207ee3026b566488d34f9120dfa8af67b5618..e6eaa2834db65fee7d42cab31b19219a2d54cd41 100644
--- a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Array_.php
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Array_.php
@@ -10,13 +10,13 @@ class Array_ extends Expr
     const KIND_LONG = 1;  // array() syntax
     const KIND_SHORT = 2; // [] syntax
 
-    /** @var ArrayItem[] Items */
+    /** @var (ArrayItem|null)[] Items */
     public $items;
 
     /**
      * Constructs an array node.
      *
-     * @param ArrayItem[] $items      Items of the array
+     * @param (ArrayItem|null)[] $items      Items of the array
      * @param array       $attributes Additional attributes
      */
     public function __construct(array $items = [], array $attributes = []) {
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ArrowFunction.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ArrowFunction.php
index b4b816f622ce831cd2fff8f7c761993abf3d4ed7..d293f0ae41802abf0434de0ac06790eac39e8909 100644
--- a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ArrowFunction.php
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ArrowFunction.php
@@ -17,11 +17,13 @@ class ArrowFunction extends Expr implements FunctionLike
     /** @var Node\Param[] */
     public $params = [];
 
-    /** @var null|Node\Identifier|Node\Name|Node\NullableType */
+    /** @var null|Node\Identifier|Node\Name|Node\NullableType|Node\UnionType */
     public $returnType;
 
     /** @var Expr */
     public $expr;
+    /** @var Node\AttributeGroup[] */
+    public $attrGroups;
 
     /**
      * @param array $subNodes   Array of the following optional subnodes:
@@ -30,6 +32,7 @@ class ArrowFunction extends Expr implements FunctionLike
      *                          'params'     => array() : Parameters
      *                          'returnType' => null    : Return type
      *                          'expr'       => Expr    : Expression body
+     *                          'attrGroups' => array() : PHP attribute groups
      * @param array $attributes Additional attributes
      */
     public function __construct(array $subNodes = [], array $attributes = []) {
@@ -40,10 +43,11 @@ public function __construct(array $subNodes = [], array $attributes = []) {
         $returnType = $subNodes['returnType'] ?? null;
         $this->returnType = \is_string($returnType) ? new Node\Identifier($returnType) : $returnType;
         $this->expr = $subNodes['expr'] ?? null;
+        $this->attrGroups = $subNodes['attrGroups'] ?? [];
     }
 
     public function getSubNodeNames() : array {
-        return ['static', 'byRef', 'params', 'returnType', 'expr'];
+        return ['attrGroups', 'static', 'byRef', 'params', 'returnType', 'expr'];
     }
 
     public function returnsByRef() : bool {
@@ -58,6 +62,10 @@ public function getReturnType() {
         return $this->returnType;
     }
 
+    public function getAttrGroups() : array {
+        return $this->attrGroups;
+    }
+
     /**
      * @return Node\Stmt\Return_[]
      */
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Closure.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Closure.php
index dfda88a7a9223935b3812aec297d6138e56815a1..56e621f252480abaccff6c150b56c754db13b81b 100644
--- a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Closure.php
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Closure.php
@@ -16,10 +16,12 @@ class Closure extends Expr implements FunctionLike
     public $params;
     /** @var ClosureUse[] use()s */
     public $uses;
-    /** @var null|Node\Identifier|Node\Name|Node\NullableType Return type */
+    /** @var null|Node\Identifier|Node\Name|Node\NullableType|Node\UnionType Return type */
     public $returnType;
     /** @var Node\Stmt[] Statements */
     public $stmts;
+    /** @var Node\AttributeGroup[] PHP attribute groups */
+    public $attrGroups;
 
     /**
      * Constructs a lambda function node.
@@ -31,6 +33,7 @@ class Closure extends Expr implements FunctionLike
      *                          'uses'       => array(): use()s
      *                          'returnType' => null   : Return type
      *                          'stmts'      => array(): Statements
+     *                          'attrGroups' => array(): PHP attributes groups
      * @param array $attributes Additional attributes
      */
     public function __construct(array $subNodes = [], array $attributes = []) {
@@ -42,10 +45,11 @@ public function __construct(array $subNodes = [], array $attributes = []) {
         $returnType = $subNodes['returnType'] ?? null;
         $this->returnType = \is_string($returnType) ? new Node\Identifier($returnType) : $returnType;
         $this->stmts = $subNodes['stmts'] ?? [];
+        $this->attrGroups = $subNodes['attrGroups'] ?? [];
     }
 
     public function getSubNodeNames() : array {
-        return ['static', 'byRef', 'params', 'uses', 'returnType', 'stmts'];
+        return ['attrGroups', 'static', 'byRef', 'params', 'uses', 'returnType', 'stmts'];
     }
 
     public function returnsByRef() : bool {
@@ -64,7 +68,11 @@ public function getReturnType() {
     public function getStmts() : array {
         return $this->stmts;
     }
-    
+
+    public function getAttrGroups() : array {
+        return $this->attrGroups;
+    }
+
     public function getType() : string {
         return 'Expr_Closure';
     }
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Match_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Match_.php
new file mode 100644
index 0000000000000000000000000000000000000000..2455a3026410372bcbd1d987f3a81a000d1578a9
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Match_.php
@@ -0,0 +1,31 @@
+<?php declare(strict_types=1);
+
+namespace PhpParser\Node\Expr;
+
+use PhpParser\Node;
+use PhpParser\Node\MatchArm;
+
+class Match_ extends Node\Expr
+{
+    /** @var Node\Expr */
+    public $cond;
+    /** @var MatchArm[] */
+    public $arms;
+
+    /**
+     * @param MatchArm[] $arms
+     */
+    public function __construct(Node\Expr $cond, array $arms = [], array $attributes = []) {
+        $this->attributes = $attributes;
+        $this->cond = $cond;
+        $this->arms = $arms;
+    }
+
+    public function getSubNodeNames() : array {
+        return ['cond', 'arms'];
+    }
+
+    public function getType() : string {
+        return 'Expr_Match';
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/NullsafeMethodCall.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/NullsafeMethodCall.php
new file mode 100644
index 0000000000000000000000000000000000000000..361e44622758cde938c9ce6d81c719077fac9d29
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/NullsafeMethodCall.php
@@ -0,0 +1,40 @@
+<?php declare(strict_types=1);
+
+namespace PhpParser\Node\Expr;
+
+use PhpParser\Node\Arg;
+use PhpParser\Node\Expr;
+use PhpParser\Node\Identifier;
+
+class NullsafeMethodCall extends Expr
+{
+    /** @var Expr Variable holding object */
+    public $var;
+    /** @var Identifier|Expr Method name */
+    public $name;
+    /** @var Arg[] Arguments */
+    public $args;
+
+    /**
+     * Constructs a nullsafe method call node.
+     *
+     * @param Expr                   $var        Variable holding object
+     * @param string|Identifier|Expr $name       Method name
+     * @param Arg[]                  $args       Arguments
+     * @param array                  $attributes Additional attributes
+     */
+    public function __construct(Expr $var, $name, array $args = [], array $attributes = []) {
+        $this->attributes = $attributes;
+        $this->var = $var;
+        $this->name = \is_string($name) ? new Identifier($name) : $name;
+        $this->args = $args;
+    }
+
+    public function getSubNodeNames() : array {
+        return ['var', 'name', 'args'];
+    }
+    
+    public function getType() : string {
+        return 'Expr_NullsafeMethodCall';
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/NullsafePropertyFetch.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/NullsafePropertyFetch.php
new file mode 100644
index 0000000000000000000000000000000000000000..9317eb3b919cce090ac431b248a41902481ecf02
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/NullsafePropertyFetch.php
@@ -0,0 +1,35 @@
+<?php declare(strict_types=1);
+
+namespace PhpParser\Node\Expr;
+
+use PhpParser\Node\Expr;
+use PhpParser\Node\Identifier;
+
+class NullsafePropertyFetch extends Expr
+{
+    /** @var Expr Variable holding object */
+    public $var;
+    /** @var Identifier|Expr Property name */
+    public $name;
+
+    /**
+     * Constructs a nullsafe property fetch node.
+     *
+     * @param Expr                   $var        Variable holding object
+     * @param string|Identifier|Expr $name       Property name
+     * @param array                  $attributes Additional attributes
+     */
+    public function __construct(Expr $var, $name, array $attributes = []) {
+        $this->attributes = $attributes;
+        $this->var = $var;
+        $this->name = \is_string($name) ? new Identifier($name) : $name;
+    }
+
+    public function getSubNodeNames() : array {
+        return ['var', 'name'];
+    }
+    
+    public function getType() : string {
+        return 'Expr_NullsafePropertyFetch';
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Throw_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Throw_.php
new file mode 100644
index 0000000000000000000000000000000000000000..5c97f0e2b4d199bd83ce969fa7e92d0f18a43f09
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Throw_.php
@@ -0,0 +1,30 @@
+<?php declare(strict_types=1);
+
+namespace PhpParser\Node\Expr;
+
+use PhpParser\Node;
+
+class Throw_ extends Node\Expr
+{
+    /** @var Node\Expr Expression */
+    public $expr;
+
+    /**
+     * Constructs a throw expression node.
+     *
+     * @param Node\Expr $expr       Expression
+     * @param array     $attributes Additional attributes
+     */
+    public function __construct(Node\Expr $expr, array $attributes = []) {
+        $this->attributes = $attributes;
+        $this->expr = $expr;
+    }
+
+    public function getSubNodeNames() : array {
+        return ['expr'];
+    }
+
+    public function getType() : string {
+        return 'Expr_Throw';
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/FunctionLike.php b/vendor/nikic/php-parser/lib/PhpParser/Node/FunctionLike.php
index d574e02082062532729341102712cba4dd96535e..bbcf53e55fb71b371e02ea3f1da676f95c963780 100644
--- a/vendor/nikic/php-parser/lib/PhpParser/Node/FunctionLike.php
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/FunctionLike.php
@@ -16,21 +16,28 @@ public function returnsByRef() : bool;
     /**
      * List of parameters
      *
-     * @return Node\Param[]
+     * @return Param[]
      */
     public function getParams() : array;
 
     /**
      * Get the declared return type or null
      *
-     * @return null|Identifier|Node\Name|Node\NullableType
+     * @return null|Identifier|Name|NullableType|UnionType
      */
     public function getReturnType();
 
     /**
      * The function body
      *
-     * @return Node\Stmt[]|null
+     * @return Stmt[]|null
      */
     public function getStmts();
+
+    /**
+     * Get PHP attribute groups.
+     *
+     * @return AttributeGroup[]
+     */
+    public function getAttrGroups() : array;
 }
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/MatchArm.php b/vendor/nikic/php-parser/lib/PhpParser/Node/MatchArm.php
new file mode 100644
index 0000000000000000000000000000000000000000..2ae1c86b8555302270f4dd8f3411e8c179531b06
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/MatchArm.php
@@ -0,0 +1,31 @@
+<?php declare(strict_types=1);
+
+namespace PhpParser\Node;
+
+use PhpParser\Node;
+use PhpParser\NodeAbstract;
+
+class MatchArm extends NodeAbstract
+{
+    /** @var null|Node\Expr[] */
+    public $conds;
+    /** @var Node\Expr */
+    public $body;
+
+    /**
+     * @param null|Node\Expr[] $conds
+     */
+    public function __construct($conds, Node\Expr $body, array $attributes = []) {
+        $this->conds = $conds;
+        $this->body = $body;
+        $this->attributes = $attributes;
+    }
+
+    public function getSubNodeNames() : array {
+        return ['conds', 'body'];
+    }
+
+    public function getType() : string {
+        return 'MatchArm';
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Name.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Name.php
index 7ebdd579cf0bdec468660e859f6cf38c7e15d255..6b1cc9f8ed2e6ff11cfc4eff04aadbe50e0e67d2 100644
--- a/vendor/nikic/php-parser/lib/PhpParser/Node/Name.php
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Name.php
@@ -85,7 +85,7 @@ public function isRelative() : bool {
     }
 
     /**
-     * Returns a string representation of the name itself, without taking taking the name type into
+     * Returns a string representation of the name itself, without taking the name type into
      * account (e.g., not including a leading backslash for fully qualified names).
      *
      * @return string String representation
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Param.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Param.php
index 5bc8a1cb88f5ebae7718caab5a858a0652be3fe7..315b5f24f64750353b1d8040eedc7b5a02b215e7 100644
--- a/vendor/nikic/php-parser/lib/PhpParser/Node/Param.php
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Param.php
@@ -6,7 +6,7 @@
 
 class Param extends NodeAbstract
 {
-    /** @var null|Identifier|Name|NullableType Type declaration */
+    /** @var null|Identifier|Name|NullableType|UnionType Type declaration */
     public $type;
     /** @var bool Whether parameter is passed by reference */
     public $byRef;
@@ -16,20 +16,29 @@ class Param extends NodeAbstract
     public $var;
     /** @var null|Expr Default value */
     public $default;
+    /** @var int */
+    public $flags;
+    /** @var AttributeGroup[] PHP attribute groups */
+    public $attrGroups;
 
     /**
      * Constructs a parameter node.
      *
-     * @param Expr\Variable|Expr\Error                 $var        Parameter variable
-     * @param null|Expr                                $default    Default value
-     * @param null|string|Identifier|Name|NullableType $type       Type declaration
-     * @param bool                                     $byRef      Whether is passed by reference
-     * @param bool                                     $variadic   Whether this is a variadic argument
-     * @param array                                    $attributes Additional attributes
+     * @param Expr\Variable|Expr\Error                           $var        Parameter variable
+     * @param null|Expr                                          $default    Default value
+     * @param null|string|Identifier|Name|NullableType|UnionType $type       Type declaration
+     * @param bool                                               $byRef      Whether is passed by reference
+     * @param bool                                               $variadic   Whether this is a variadic argument
+     * @param array                                              $attributes Additional attributes
+     * @param int                                                $flags      Optional visibility flags
+     * @param AttributeGroup[]                                   $attrGroups PHP attribute groups
      */
     public function __construct(
         $var, Expr $default = null, $type = null,
-        bool $byRef = false, bool $variadic = false, array $attributes = []
+        bool $byRef = false, bool $variadic = false,
+        array $attributes = [],
+        int $flags = 0,
+        array $attrGroups = []
     ) {
         $this->attributes = $attributes;
         $this->type = \is_string($type) ? new Identifier($type) : $type;
@@ -37,10 +46,12 @@ public function __construct(
         $this->variadic = $variadic;
         $this->var = $var;
         $this->default = $default;
+        $this->flags = $flags;
+        $this->attrGroups = $attrGroups;
     }
 
     public function getSubNodeNames() : array {
-        return ['type', 'byRef', 'variadic', 'var', 'default'];
+        return ['attrGroups', 'flags', 'type', 'byRef', 'variadic', 'var', 'default'];
     }
 
     public function getType() : string {
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/DNumber.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/DNumber.php
index 7b7ae378d77a07cd95334041fe55fb9b130d21a9..29ce0dd40133cd735aa040b073a9820533b42a43 100644
--- a/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/DNumber.php
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/DNumber.php
@@ -34,6 +34,8 @@ public function getSubNodeNames() : array {
      * @return float The parsed number
      */
     public static function parse(string $str) : float {
+        $str = str_replace('_', '', $str);
+
         // if string contains any of .eE just cast it to float
         if (false !== strpbrk($str, '.eE')) {
             return (float) $str;
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/LNumber.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/LNumber.php
index 5c5aca3f7991b86df01d171631c7275aa4d07ef1..b33943547e2aaad5d112070bfce2a524489b041e 100644
--- a/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/LNumber.php
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/LNumber.php
@@ -41,6 +41,8 @@ public function getSubNodeNames() : array {
      * @return LNumber The constructed LNumber, including kind attribute
      */
     public static function fromString(string $str, array $attributes = [], bool $allowInvalidOctal = false) : LNumber {
+        $str = str_replace('_', '', $str);
+
         if ('0' !== $str[0] || '0' === $str) {
             $attributes['kind'] = LNumber::KIND_DEC;
             return new LNumber((int) $str, $attributes);
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/String_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/String_.php
index de6318d05341c1595caf1d812e882eaa058294eb..8a6d93a47415a7de82b007dcf71490c526b8b19b 100644
--- a/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/String_.php
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/String_.php
@@ -100,7 +100,7 @@ function($matches) {
                 if (isset(self::$replacements[$str])) {
                     return self::$replacements[$str];
                 } elseif ('x' === $str[0] || 'X' === $str[0]) {
-                    return chr(hexdec($str));
+                    return chr(hexdec(substr($str, 1)));
                 } elseif ('u' === $str[0]) {
                     return self::codePointToUtf8(hexdec($matches[2]));
                 } else {
@@ -134,7 +134,7 @@ private static function codePointToUtf8(int $num) : string {
         }
         throw new Error('Invalid UTF-8 codepoint escape sequence: Codepoint too large');
     }
-    
+
     public function getType() : string {
         return 'Scalar_String';
     }
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Catch_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Catch_.php
index 7d4a7034be367364b553561a50d2293fc8177165..9b9c09478222def88a553b92d70092e166080b6a 100644
--- a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Catch_.php
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Catch_.php
@@ -9,7 +9,7 @@ class Catch_ extends Node\Stmt
 {
     /** @var Node\Name[] Types of exceptions to catch */
     public $types;
-    /** @var Expr\Variable Variable for exception */
+    /** @var Expr\Variable|null Variable for exception */
     public $var;
     /** @var Node\Stmt[] Statements */
     public $stmts;
@@ -17,13 +17,13 @@ class Catch_ extends Node\Stmt
     /**
      * Constructs a catch node.
      *
-     * @param Node\Name[]   $types      Types of exceptions to catch
-     * @param Expr\Variable $var        Variable for exception
-     * @param Node\Stmt[]   $stmts      Statements
-     * @param array         $attributes Additional attributes
+     * @param Node\Name[]           $types      Types of exceptions to catch
+     * @param Expr\Variable|null    $var        Variable for exception
+     * @param Node\Stmt[]           $stmts      Statements
+     * @param array                 $attributes Additional attributes
      */
     public function __construct(
-        array $types, Expr\Variable $var, array $stmts = [], array $attributes = []
+        array $types, Expr\Variable $var = null, array $stmts = [], array $attributes = []
     ) {
         $this->attributes = $attributes;
         $this->types = $types;
@@ -34,7 +34,7 @@ public function __construct(
     public function getSubNodeNames() : array {
         return ['types', 'var', 'stmts'];
     }
-    
+
     public function getType() : string {
         return 'Stmt_Catch';
     }
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassConst.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassConst.php
index 73a50103092f470e8dfc4d73879eec296aeb4ddd..c459acb1527f04eb633296db96fcc9c7c4362768 100644
--- a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassConst.php
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassConst.php
@@ -10,22 +10,31 @@ class ClassConst extends Node\Stmt
     public $flags;
     /** @var Node\Const_[] Constant declarations */
     public $consts;
+    /** @var Node\AttributeGroup[] */
+    public $attrGroups;
 
     /**
      * Constructs a class const list node.
      *
-     * @param Node\Const_[] $consts     Constant declarations
-     * @param int           $flags      Modifiers
-     * @param array         $attributes Additional attributes
+     * @param Node\Const_[]         $consts     Constant declarations
+     * @param int                   $flags      Modifiers
+     * @param array                 $attributes Additional attributes
+     * @param Node\AttributeGroup[] $attrGroups PHP attribute groups
      */
-    public function __construct(array $consts, int $flags = 0, array $attributes = []) {
+    public function __construct(
+        array $consts,
+        int $flags = 0,
+        array $attributes = [],
+        array $attrGroups = []
+    ) {
         $this->attributes = $attributes;
         $this->flags = $flags;
         $this->consts = $consts;
+        $this->attrGroups = $attrGroups;
     }
 
     public function getSubNodeNames() : array {
-        return ['flags', 'consts'];
+        return ['attrGroups', 'flags', 'consts'];
     }
 
     /**
@@ -55,7 +64,7 @@ public function isProtected() : bool {
     public function isPrivate() : bool {
         return (bool) ($this->flags & Class_::MODIFIER_PRIVATE);
     }
-    
+
     public function getType() : string {
         return 'Stmt_ClassConst';
     }
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassLike.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassLike.php
index 31cd66ac950fddf60a1a5c56706a983a3e498886..840c4f67ec5f4b9691de3914321921e5abc76600 100644
--- a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassLike.php
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassLike.php
@@ -13,6 +13,67 @@ abstract class ClassLike extends Node\Stmt
     public $name;
     /** @var Node\Stmt[] Statements */
     public $stmts;
+    /** @var Node\AttributeGroup[] PHP attribute groups */
+    public $attrGroups;
+
+    /**
+     * @return TraitUse[]
+     */
+    public function getTraitUses() : array {
+        $traitUses = [];
+        foreach ($this->stmts as $stmt) {
+            if ($stmt instanceof TraitUse) {
+                $traitUses[] = $stmt;
+            }
+        }
+        return $traitUses;
+    }
+
+    /**
+     * @return ClassConst[]
+     */
+    public function getConstants() : array {
+        $constants = [];
+        foreach ($this->stmts as $stmt) {
+            if ($stmt instanceof ClassConst) {
+                $constants[] = $stmt;
+            }
+        }
+        return $constants;
+    }
+
+    /**
+     * @return Property[]
+     */
+    public function getProperties() : array {
+        $properties = [];
+        foreach ($this->stmts as $stmt) {
+            if ($stmt instanceof Property) {
+                $properties[] = $stmt;
+            }
+        }
+        return $properties;
+    }
+
+    /**
+     * Gets property with the given name defined directly in this class/interface/trait.
+     *
+     * @param string $name Name of the property
+     *
+     * @return Property|null Property node or null if the property does not exist
+     */
+    public function getProperty(string $name) {
+        foreach ($this->stmts as $stmt) {
+            if ($stmt instanceof Property) {
+                foreach ($stmt->props as $prop) {
+                    if ($prop instanceof PropertyProperty && $name === $prop->name->toString()) {
+                        return $stmt;
+                    }
+                }
+            }
+        }
+        return null;
+    }
 
     /**
      * Gets all methods defined directly in this class/interface/trait
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassMethod.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassMethod.php
index 881dcd7ff5322abe5822d17837185179e6182f6a..92157fab26b4f13da38d73a9d17bec892e84a913 100644
--- a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassMethod.php
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassMethod.php
@@ -15,10 +15,12 @@ class ClassMethod extends Node\Stmt implements FunctionLike
     public $name;
     /** @var Node\Param[] Parameters */
     public $params;
-    /** @var null|Node\Identifier|Node\Name|Node\NullableType Return type */
+    /** @var null|Node\Identifier|Node\Name|Node\NullableType|Node\UnionType Return type */
     public $returnType;
     /** @var Node\Stmt[]|null Statements */
     public $stmts;
+    /** @var Node\AttributeGroup[] PHP attribute groups */
+    public $attrGroups;
 
     private static $magicNames = [
         '__construct'  => true,
@@ -48,6 +50,7 @@ class ClassMethod extends Node\Stmt implements FunctionLike
      *                          'params'     => array()        : Parameters
      *                          'returnType' => null           : Return type
      *                          'stmts'      => array()        : Statements
+     *                          'attrGroups' => array()        : PHP attribute groups
      * @param array $attributes Additional attributes
      */
     public function __construct($name, array $subNodes = [], array $attributes = []) {
@@ -59,10 +62,11 @@ public function __construct($name, array $subNodes = [], array $attributes = [])
         $returnType = $subNodes['returnType'] ?? null;
         $this->returnType = \is_string($returnType) ? new Node\Identifier($returnType) : $returnType;
         $this->stmts = array_key_exists('stmts', $subNodes) ? $subNodes['stmts'] : [];
+        $this->attrGroups = $subNodes['attrGroups'] ?? [];
     }
 
     public function getSubNodeNames() : array {
-        return ['flags', 'byRef', 'name', 'params', 'returnType', 'stmts'];
+        return ['attrGroups', 'flags', 'byRef', 'name', 'params', 'returnType', 'stmts'];
     }
 
     public function returnsByRef() : bool {
@@ -81,6 +85,10 @@ public function getStmts() {
         return $this->stmts;
     }
 
+    public function getAttrGroups() : array {
+        return $this->attrGroups;
+    }
+
     /**
      * Whether the method is explicitly or implicitly public.
      *
@@ -120,7 +128,7 @@ public function isAbstract() : bool {
 
     /**
      * Whether the method is final.
-     * 
+     *
      * @return bool
      */
     public function isFinal() : bool {
@@ -144,7 +152,7 @@ public function isStatic() : bool {
     public function isMagic() : bool {
         return isset(self::$magicNames[$this->name->toLowerString()]);
     }
-    
+
     public function getType() : string {
         return 'Stmt_ClassMethod';
     }
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Class_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Class_.php
index a97c3f4ae8d3f43bb053f530d4851b44f275dd4d..ace266f74b71cf554997b9c0c5beffd3f77690aa 100644
--- a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Class_.php
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Class_.php
@@ -28,10 +28,11 @@ class Class_ extends ClassLike
      *
      * @param string|Node\Identifier|null $name Name
      * @param array       $subNodes   Array of the following optional subnodes:
-     *                                'flags'      => 0      : Flags
-     *                                'extends'    => null   : Name of extended class
-     *                                'implements' => array(): Names of implemented interfaces
-     *                                'stmts'      => array(): Statements
+     *                                'flags'       => 0      : Flags
+     *                                'extends'     => null   : Name of extended class
+     *                                'implements'  => array(): Names of implemented interfaces
+     *                                'stmts'       => array(): Statements
+     *                                '$attrGroups' => array(): PHP attribute groups
      * @param array       $attributes Additional attributes
      */
     public function __construct($name, array $subNodes = [], array $attributes = []) {
@@ -41,10 +42,11 @@ public function __construct($name, array $subNodes = [], array $attributes = [])
         $this->extends = $subNodes['extends'] ?? null;
         $this->implements = $subNodes['implements'] ?? [];
         $this->stmts = $subNodes['stmts'] ?? [];
+        $this->attrGroups = $subNodes['attrGroups'] ?? [];
     }
 
     public function getSubNodeNames() : array {
-        return ['flags', 'name', 'extends', 'implements', 'stmts'];
+        return ['attrGroups', 'flags', 'name', 'extends', 'implements', 'stmts'];
     }
 
     /**
@@ -98,7 +100,7 @@ public static function verifyModifier($a, $b) {
             throw new Error('Cannot use the final modifier on an abstract class member');
         }
     }
-    
+
     public function getType() : string {
         return 'Stmt_Class';
     }
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Function_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Function_.php
index d11a4df9d35353d28544d9e8137e680aa56f7574..f08481fae1c40e789ef32c6650d26b1b16dd200d 100644
--- a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Function_.php
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Function_.php
@@ -16,10 +16,12 @@ class Function_ extends Node\Stmt implements FunctionLike
     public $name;
     /** @var Node\Param[] Parameters */
     public $params;
-    /** @var null|Node\Identifier|Node\Name|Node\NullableType Return type */
+    /** @var null|Node\Identifier|Node\Name|Node\NullableType|Node\UnionType Return type */
     public $returnType;
     /** @var Node\Stmt[] Statements */
     public $stmts;
+    /** @var Node\AttributeGroup[] PHP attribute groups */
+    public $attrGroups;
 
     /**
      * Constructs a function node.
@@ -30,6 +32,7 @@ class Function_ extends Node\Stmt implements FunctionLike
      *                           'params'     => array(): Parameters
      *                           'returnType' => null   : Return type
      *                           'stmts'      => array(): Statements
+     *                           'attrGroups' => array(): PHP attribute groups
      * @param array  $attributes Additional attributes
      */
     public function __construct($name, array $subNodes = [], array $attributes = []) {
@@ -40,10 +43,11 @@ public function __construct($name, array $subNodes = [], array $attributes = [])
         $returnType = $subNodes['returnType'] ?? null;
         $this->returnType = \is_string($returnType) ? new Node\Identifier($returnType) : $returnType;
         $this->stmts = $subNodes['stmts'] ?? [];
+        $this->attrGroups = $subNodes['attrGroups'] ?? [];
     }
 
     public function getSubNodeNames() : array {
-        return ['byRef', 'name', 'params', 'returnType', 'stmts'];
+        return ['attrGroups', 'byRef', 'name', 'params', 'returnType', 'stmts'];
     }
 
     public function returnsByRef() : bool {
@@ -58,11 +62,15 @@ public function getReturnType() {
         return $this->returnType;
     }
 
+    public function getAttrGroups() : array {
+        return $this->attrGroups;
+    }
+
     /** @return Node\Stmt[] */
     public function getStmts() : array {
         return $this->stmts;
     }
-    
+
     public function getType() : string {
         return 'Stmt_Function';
     }
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Interface_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Interface_.php
index 052558113d911e457fcc43255f5969196787ee9e..4d587dd4843e7f2bff1ff68aa2fd98f4bcf10b4d 100644
--- a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Interface_.php
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Interface_.php
@@ -14,8 +14,9 @@ class Interface_ extends ClassLike
      *
      * @param string|Node\Identifier $name Name
      * @param array  $subNodes   Array of the following optional subnodes:
-     *                           'extends' => array(): Name of extended interfaces
-     *                           'stmts'   => array(): Statements
+     *                           'extends'    => array(): Name of extended interfaces
+     *                           'stmts'      => array(): Statements
+     *                           'attrGroups' => array(): PHP attribute groups
      * @param array  $attributes Additional attributes
      */
     public function __construct($name, array $subNodes = [], array $attributes = []) {
@@ -23,12 +24,13 @@ public function __construct($name, array $subNodes = [], array $attributes = [])
         $this->name = \is_string($name) ? new Node\Identifier($name) : $name;
         $this->extends = $subNodes['extends'] ?? [];
         $this->stmts = $subNodes['stmts'] ?? [];
+        $this->attrGroups = $subNodes['attrGroups'] ?? [];
     }
 
     public function getSubNodeNames() : array {
-        return ['name', 'extends', 'stmts'];
+        return ['attrGroups', 'name', 'extends', 'stmts'];
     }
-    
+
     public function getType() : string {
         return 'Stmt_Interface';
     }
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Property.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Property.php
index 849b8b44e9b20933b3b79821d5bda2782c6f0446..324345b85f992c9b3f4527831682f40af99ddea6 100644
--- a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Property.php
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Property.php
@@ -6,6 +6,7 @@
 use PhpParser\Node\Identifier;
 use PhpParser\Node\Name;
 use PhpParser\Node\NullableType;
+use PhpParser\Node\UnionType;
 
 class Property extends Node\Stmt
 {
@@ -13,26 +14,30 @@ class Property extends Node\Stmt
     public $flags;
     /** @var PropertyProperty[] Properties */
     public $props;
-    /** @var null|Identifier|Name|NullableType Type declaration */
+    /** @var null|Identifier|Name|NullableType|UnionType Type declaration */
     public $type;
+    /** @var Node\AttributeGroup[] PHP attribute groups */
+    public $attrGroups;
 
     /**
      * Constructs a class property list node.
      *
-     * @param int                                      $flags      Modifiers
-     * @param PropertyProperty[]                       $props      Properties
-     * @param array                                    $attributes Additional attributes
-     * @param null|string|Identifier|Name|NullableType $type       Type declaration
+     * @param int                                                $flags      Modifiers
+     * @param PropertyProperty[]                                 $props      Properties
+     * @param array                                              $attributes Additional attributes
+     * @param null|string|Identifier|Name|NullableType|UnionType $type       Type declaration
+     * @param Node\AttributeGroup[]                              $attrGroups PHP attribute groups
      */
-    public function __construct(int $flags, array $props, array $attributes = [], $type = null) {
+    public function __construct(int $flags, array $props, array $attributes = [], $type = null, array $attrGroups = []) {
         $this->attributes = $attributes;
         $this->flags = $flags;
         $this->props = $props;
         $this->type = \is_string($type) ? new Identifier($type) : $type;
+        $this->attrGroups = $attrGroups;
     }
 
     public function getSubNodeNames() : array {
-        return ['flags', 'type', 'props'];
+        return ['attrGroups', 'flags', 'type', 'props'];
     }
 
     /**
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Throw_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Throw_.php
index f97f56718aed1e51135190074b0ac558ce453229..a34e2b362437f8ffc4ec9be123ca59fab938a142 100644
--- a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Throw_.php
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Throw_.php
@@ -10,7 +10,7 @@ class Throw_ extends Node\Stmt
     public $expr;
 
     /**
-     * Constructs a throw node.
+     * Constructs a legacy throw statement node.
      *
      * @param Node\Expr $expr       Expression
      * @param array     $attributes Additional attributes
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Trait_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Trait_.php
index 1ffa664e7ed033dfbe25282b6f183a60b65bd0c9..0cec203ac71bf0a718e07facc0dcafed396a78c6 100644
--- a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Trait_.php
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Trait_.php
@@ -11,19 +11,21 @@ class Trait_ extends ClassLike
      *
      * @param string|Node\Identifier $name Name
      * @param array  $subNodes   Array of the following optional subnodes:
-     *                           'stmts' => array(): Statements
+     *                           'stmts'      => array(): Statements
+     *                           'attrGroups' => array(): PHP attribute groups
      * @param array  $attributes Additional attributes
      */
     public function __construct($name, array $subNodes = [], array $attributes = []) {
         $this->attributes = $attributes;
         $this->name = \is_string($name) ? new Node\Identifier($name) : $name;
         $this->stmts = $subNodes['stmts'] ?? [];
+        $this->attrGroups = $subNodes['attrGroups'] ?? [];
     }
 
     public function getSubNodeNames() : array {
-        return ['name', 'stmts'];
+        return ['attrGroups', 'name', 'stmts'];
     }
-    
+
     public function getType() : string {
         return 'Stmt_Trait';
     }
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TryCatch.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TryCatch.php
index 47b9aae74df32fecdf36551a7089429fcbd06763..7fc158c570b5b32c2d61933e2a9605d6709b3150 100644
--- a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TryCatch.php
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TryCatch.php
@@ -18,7 +18,7 @@ class TryCatch extends Node\Stmt
      *
      * @param Node\Stmt[]   $stmts      Statements
      * @param Catch_[]      $catches    Catches
-     * @param null|Finally_ $finally    Optionaly finally node
+     * @param null|Finally_ $finally    Optional finally node
      * @param array         $attributes Additional attributes
      */
     public function __construct(array $stmts, array $catches, Finally_ $finally = null, array $attributes = []) {
@@ -31,7 +31,7 @@ public function __construct(array $stmts, array $catches, Finally_ $finally = nu
     public function getSubNodeNames() : array {
         return ['stmts', 'catches', 'finally'];
     }
-    
+
     public function getType() : string {
         return 'Stmt_TryCatch';
     }
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/UnionType.php b/vendor/nikic/php-parser/lib/PhpParser/Node/UnionType.php
new file mode 100644
index 0000000000000000000000000000000000000000..c8f45235d6c627d0244eabc2674c231003e43662
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/UnionType.php
@@ -0,0 +1,30 @@
+<?php declare(strict_types=1);
+
+namespace PhpParser\Node;
+
+use PhpParser\NodeAbstract;
+
+class UnionType extends NodeAbstract
+{
+    /** @var (Identifier|Name)[] Types */
+    public $types;
+
+    /**
+     * Constructs a union type.
+     *
+     * @param (Identifier|Name)[] $types      Types
+     * @param array               $attributes Additional attributes
+     */
+    public function __construct(array $types, array $attributes = []) {
+        $this->attributes = $attributes;
+        $this->types = $types;
+    }
+
+    public function getSubNodeNames() : array {
+        return ['types'];
+    }
+    
+    public function getType() : string {
+        return 'UnionType';
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/NodeAbstract.php b/vendor/nikic/php-parser/lib/PhpParser/NodeAbstract.php
index fda595994d2cf63326323b8ed22e05f53f77b63b..04514da116ce25961fb73f86a6f66eff85ef65ad 100644
--- a/vendor/nikic/php-parser/lib/PhpParser/NodeAbstract.php
+++ b/vendor/nikic/php-parser/lib/PhpParser/NodeAbstract.php
@@ -108,22 +108,18 @@ public function getComments() : array {
     /**
      * Gets the doc comment of the node.
      *
-     * The doc comment has to be the last comment associated with the node.
-     *
      * @return null|Comment\Doc Doc comment object or null
      */
     public function getDocComment() {
         $comments = $this->getComments();
-        if (!$comments) {
-            return null;
-        }
-
-        $lastComment = $comments[count($comments) - 1];
-        if (!$lastComment instanceof Comment\Doc) {
-            return null;
+        for ($i = count($comments) - 1; $i >= 0; $i--) {
+            $comment = $comments[$i];
+            if ($comment instanceof Comment\Doc) {
+                return $comment;
+            }
         }
 
-        return $lastComment;
+        return null;
     }
 
     /**
@@ -135,16 +131,17 @@ public function getDocComment() {
      */
     public function setDocComment(Comment\Doc $docComment) {
         $comments = $this->getComments();
-
-        $numComments = count($comments);
-        if ($numComments > 0 && $comments[$numComments - 1] instanceof Comment\Doc) {
-            // Replace existing doc comment
-            $comments[$numComments - 1] = $docComment;
-        } else {
-            // Append new comment
-            $comments[] = $docComment;
+        for ($i = count($comments) - 1; $i >= 0; $i--) {
+            if ($comments[$i] instanceof Comment\Doc) {
+                // Replace existing doc comment.
+                $comments[$i] = $docComment;
+                $this->setAttribute('comments', $comments);
+                return;
+            }
         }
 
+        // Append new doc comment.
+        $comments[] = $docComment;
         $this->setAttribute('comments', $comments);
     }
 
diff --git a/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/NameResolver.php b/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/NameResolver.php
index cfe8ce7643b8807d813fcc7fa6df920d23b36dd4..c55532a5eae24c6734360a3c437e7cbfe1599f07 100644
--- a/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/NameResolver.php
+++ b/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/NameResolver.php
@@ -75,6 +75,7 @@ public function enterNode(Node $node) {
                 $interface = $this->resolveClassName($interface);
             }
 
+            $this->resolveAttrGroups($node);
             if (null !== $node->name) {
                 $this->addNamespacedName($node);
             }
@@ -83,24 +84,32 @@ public function enterNode(Node $node) {
                 $interface = $this->resolveClassName($interface);
             }
 
+            $this->resolveAttrGroups($node);
             $this->addNamespacedName($node);
         } elseif ($node instanceof Stmt\Trait_) {
+            $this->resolveAttrGroups($node);
             $this->addNamespacedName($node);
         } elseif ($node instanceof Stmt\Function_) {
-            $this->addNamespacedName($node);
             $this->resolveSignature($node);
+            $this->resolveAttrGroups($node);
+            $this->addNamespacedName($node);
         } elseif ($node instanceof Stmt\ClassMethod
                   || $node instanceof Expr\Closure
+                  || $node instanceof Expr\ArrowFunction
         ) {
             $this->resolveSignature($node);
+            $this->resolveAttrGroups($node);
         } elseif ($node instanceof Stmt\Property) {
             if (null !== $node->type) {
                 $node->type = $this->resolveType($node->type);
             }
+            $this->resolveAttrGroups($node);
         } elseif ($node instanceof Stmt\Const_) {
             foreach ($node->consts as $const) {
                 $this->addNamespacedName($const);
             }
+        } else if ($node instanceof Stmt\ClassConst) {
+            $this->resolveAttrGroups($node);
         } elseif ($node instanceof Expr\StaticCall
                   || $node instanceof Expr\StaticPropertyFetch
                   || $node instanceof Expr\ClassConstFetch
@@ -156,17 +165,24 @@ private function addAlias(Stmt\UseUse $use, $type, Name $prefix = null) {
     private function resolveSignature($node) {
         foreach ($node->params as $param) {
             $param->type = $this->resolveType($param->type);
+            $this->resolveAttrGroups($param);
         }
         $node->returnType = $this->resolveType($node->returnType);
     }
 
     private function resolveType($node) {
+        if ($node instanceof Name) {
+            return $this->resolveClassName($node);
+        }
         if ($node instanceof Node\NullableType) {
             $node->type = $this->resolveType($node->type);
             return $node;
         }
-        if ($node instanceof Name) {
-            return $this->resolveClassName($node);
+        if ($node instanceof Node\UnionType) {
+            foreach ($node->types as &$type) {
+                $type = $this->resolveType($type);
+            }
+            return $node;
         }
         return $node;
     }
@@ -218,4 +234,13 @@ protected function addNamespacedName(Node $node) {
         $node->namespacedName = Name::concat(
             $this->nameContext->getNamespace(), (string) $node->name);
     }
+
+    protected function resolveAttrGroups(Node $node)
+    {
+        foreach ($node->attrGroups as $attrGroup) {
+            foreach ($attrGroup->attrs as $attr) {
+                $attr->name = $this->resolveClassName($attr->name);
+            }
+        }
+    }
 }
diff --git a/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/NodeConnectingVisitor.php b/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/NodeConnectingVisitor.php
new file mode 100644
index 0000000000000000000000000000000000000000..ea372e5b991c3e601c20d2fd7ccbe40469179a2a
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/NodeConnectingVisitor.php
@@ -0,0 +1,52 @@
+<?php declare(strict_types=1);
+
+namespace PhpParser\NodeVisitor;
+
+use PhpParser\Node;
+use PhpParser\NodeVisitorAbstract;
+
+/**
+ * Visitor that connects a child node to its parent node
+ * as well as its sibling nodes.
+ *
+ * On the child node, the parent node can be accessed through
+ * <code>$node->getAttribute('parent')</code>, the previous
+ * node can be accessed through <code>$node->getAttribute('previous')</code>,
+ * and the next node can be accessed through <code>$node->getAttribute('next')</code>.
+ */
+final class NodeConnectingVisitor extends NodeVisitorAbstract
+{
+    /**
+     * @var Node[]
+     */
+    private $stack = [];
+
+    /**
+     * @var ?Node
+     */
+    private $previous;
+
+    public function beforeTraverse(array $nodes) {
+        $this->stack    = [];
+        $this->previous = null;
+    }
+
+    public function enterNode(Node $node) {
+        if (!empty($this->stack)) {
+            $node->setAttribute('parent', $this->stack[count($this->stack) - 1]);
+        }
+
+        if ($this->previous !== null && $this->previous->getAttribute('parent') === $node->getAttribute('parent')) {
+            $node->setAttribute('previous', $this->previous);
+            $this->previous->setAttribute('next', $node);
+        }
+
+        $this->stack[] = $node;
+    }
+
+    public function leaveNode(Node $node) {
+        $this->previous = $node;
+
+        array_pop($this->stack);
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/ParentConnectingVisitor.php b/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/ParentConnectingVisitor.php
new file mode 100644
index 0000000000000000000000000000000000000000..b98d2bfa6fc3c271150e94981c7248061b6504c6
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/ParentConnectingVisitor.php
@@ -0,0 +1,41 @@
+<?php declare(strict_types=1);
+
+namespace PhpParser\NodeVisitor;
+
+use function array_pop;
+use function count;
+use PhpParser\Node;
+use PhpParser\NodeVisitorAbstract;
+
+/**
+ * Visitor that connects a child node to its parent node.
+ *
+ * On the child node, the parent node can be accessed through
+ * <code>$node->getAttribute('parent')</code>.
+ */
+final class ParentConnectingVisitor extends NodeVisitorAbstract
+{
+    /**
+     * @var Node[]
+     */
+    private $stack = [];
+
+    public function beforeTraverse(array $nodes)
+    {
+        $this->stack = [];
+    }
+
+    public function enterNode(Node $node)
+    {
+        if (!empty($this->stack)) {
+            $node->setAttribute('parent', $this->stack[count($this->stack) - 1]);
+        }
+
+        $this->stack[] = $node;
+    }
+
+    public function leaveNode(Node $node)
+    {
+        array_pop($this->stack);
+    }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Parser/Php5.php b/vendor/nikic/php-parser/lib/PhpParser/Parser/Php5.php
index a558d28b7803c0ec5bb94ab660fdb6ba711c0a24..c67a5e707a0f2001d9d09f8d99c104c6abf723fc 100644
--- a/vendor/nikic/php-parser/lib/PhpParser/Parser/Php5.php
+++ b/vendor/nikic/php-parser/lib/PhpParser/Parser/Php5.php
@@ -17,21 +17,22 @@
  */
 class Php5 extends \PhpParser\ParserAbstract
 {
-    protected $tokenToSymbolMapSize = 394;
-    protected $actionTableSize = 1079;
-    protected $gotoTableSize = 650;
+    protected $tokenToSymbolMapSize = 392;
+    protected $actionTableSize = 1069;
+    protected $gotoTableSize = 580;
 
-    protected $invalidSymbol = 159;
+    protected $invalidSymbol = 165;
     protected $errorSymbol = 1;
     protected $defaultAction = -32766;
     protected $unexpectedTokenRule = 32767;
 
-    protected $YY2TBLSTATE = 407;
-    protected $numNonLeafStates = 676;
+    protected $YY2TBLSTATE = 405;
+    protected $numNonLeafStates = 658;
 
     protected $symbolToName = array(
         "EOF",
         "error",
+        "T_THROW",
         "T_INCLUDE",
         "T_INCLUDE_ONCE",
         "T_EVAL",
@@ -127,6 +128,7 @@ class Php5 extends \PhpParser\ParserAbstract
         "T_ENDDECLARE",
         "T_AS",
         "T_SWITCH",
+        "T_MATCH",
         "T_ENDSWITCH",
         "T_CASE",
         "T_DEFAULT",
@@ -140,7 +142,6 @@ class Php5 extends \PhpParser\ParserAbstract
         "T_TRY",
         "T_CATCH",
         "T_FINALLY",
-        "T_THROW",
         "T_USE",
         "T_INSTEADOF",
         "T_GLOBAL",
@@ -180,6 +181,9 @@ class Php5 extends \PhpParser\ParserAbstract
         "T_DIR",
         "T_NS_SEPARATOR",
         "T_ELLIPSIS",
+        "T_NAME_FULLY_QUALIFIED",
+        "T_NAME_QUALIFIED",
+        "T_NAME_RELATIVE",
         "';'",
         "'{'",
         "'}'",
@@ -188,348 +192,346 @@ class Php5 extends \PhpParser\ParserAbstract
         "'$'",
         "'`'",
         "']'",
-        "'\"'"
+        "'\"'",
+        "T_NULLSAFE_OBJECT_OPERATOR",
+        "T_ATTRIBUTE"
     );
 
     protected $tokenToSymbol = array(
-            0,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-          159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-          159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-          159,  159,  159,   54,  158,  159,  155,   53,   36,  159,
-          153,  154,   51,   48,    7,   49,   50,   52,  159,  159,
-          159,  159,  159,  159,  159,  159,  159,  159,   30,  150,
-           42,   15,   44,   29,   66,  159,  159,  159,  159,  159,
-          159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-          159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-          159,   68,  159,  157,   35,  159,  156,  159,  159,  159,
-          159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-          159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-          159,  159,  159,  151,   34,  152,   56,  159,  159,  159,
-          159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-          159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-          159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-          159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-          159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-          159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-          159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-          159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-          159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-          159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-          159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-          159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-          159,  159,  159,  159,  159,  159,    1,    2,    3,    4,
-            5,    6,    8,    9,   10,   11,   12,   13,   14,   16,
+            0,  165,  165,  165,  165,  165,  165,  165,  165,  165,
+          165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
+          165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
+          165,  165,  165,   55,  162,  165,  159,   54,   37,  165,
+          157,  158,   52,   49,    8,   50,   51,   53,  165,  165,
+          165,  165,  165,  165,  165,  165,  165,  165,   31,  154,
+           43,   16,   45,   30,   67,  165,  165,  165,  165,  165,
+          165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
+          165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
+          165,   69,  165,  161,   36,  165,  160,  165,  165,  165,
+          165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
+          165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
+          165,  165,  165,  155,   35,  156,   57,  165,  165,  165,
+          165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
+          165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
+          165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
+          165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
+          165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
+          165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
+          165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
+          165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
+          165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
+          165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
+          165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
+          165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
+          165,  165,  165,  165,  165,  165,    1,    2,    3,    4,
+            5,    6,    7,    9,   10,   11,   12,   13,   14,   15,
            17,   18,   19,   20,   21,   22,   23,   24,   25,   26,
-           27,   28,   31,   32,   33,   37,   38,   39,   40,   41,
-           43,   45,   46,   47,   55,   57,   58,   59,   60,   61,
-           62,   63,   64,   65,   67,   69,   70,   71,   72,   73,
-           74,   75,   76,   77,   78,   79,   80,   81,   82,  159,
-          159,   83,   84,   85,   86,   87,   88,   89,   90,   91,
-           92,   93,   94,   95,   96,   97,   98,   99,  100,  101,
-          102,  103,  104,  105,  106,  107,  108,  109,  110,  111,
-          112,  113,  114,  115,  116,  117,  118,  119,  120,  121,
-          122,  123,  124,  125,  126,  127,  128,  129,  130,  131,
-          132,  133,  134,  135,  136,  137,  138,  139,  159,  159,
-          159,  159,  159,  159,  140,  141,  142,  143,  144,  145,
-          146,  147,  148,  149
+           27,   28,   29,   32,   33,   34,   38,   39,   40,   41,
+           42,   44,   46,   47,   48,   56,   58,   59,   60,   61,
+           62,   63,   64,   65,   66,   68,   70,   71,   72,   73,
+           74,   75,   76,   77,   78,   79,   80,   81,   82,   83,
+           84,   85,   86,   87,   88,   89,   90,   91,   92,   93,
+           94,   95,   96,   97,   98,   99,  100,  101,  102,  103,
+          104,  105,  106,  107,  108,  109,  110,  111,  112,  113,
+          114,  115,  116,  117,  118,  119,  120,  121,  122,  123,
+          124,  125,  126,  127,  128,  129,  130,  131,  163,  132,
+          133,  134,  135,  136,  137,  138,  139,  140,  141,  142,
+          143,  144,  145,  146,  147,  148,  149,  150,  151,  152,
+          153,  164
     );
 
     protected $action = array(
-          681,  682,  683,  684,  685,  283,  686,  687,  688,  724,
-          725,  222,  223,  224,  225,  226,  227,  228,  229,  230,
-            0,  231,  232,  233,  234,  235,  236,  237,  238,  239,
-          240,  241,  242,-32766,-32766,-32766,-32766,-32766,-32766,-32766,
-        -32766,-32767,-32767,-32767,-32767, 1052,  243,  244,-32766,-32766,
-        -32766,-32766,-32766,  689,-32766,-32766,-32766,-32766,-32766,-32766,
-        -32766,-32766,-32767,-32767,-32767,-32767,-32767,  690,  691,  692,
-          693,  694,  695,  696,  834,   27,  757,  959,  960,  961,
-          958,  957,  956,  697,  698,  699,  700,  701,  702,  703,
-          704,  705,  706,  707,  727,  728,  729,  730,  731,  719,
-          720,  721,  749,  722,  723,  708,  709,  710,  711,  712,
-          713,  714,  751,  752,  753,  754,  755,  756,  715,  716,
-          717,  718,  748,  739,  737,  738,  734,  735, 1188,  726,
-          732,  733,  740,  741,  743,  742,  744,  745,   54,   55,
-          426,   56,   57,  736,  747,  746, -220,   58,   59,  419,
-           60,-32766,-32766,-32766,-32766,-32766,-32766,-32766,-32766,-32766,
-           28,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,   97,
-           98,   99,  100,  101,    9,  906,  907,-32766, 1202,  761,
-          328,  764, 1188,  814,   61,   62,   52,  285,  500,  951,
-           63,  434,   64,  294,  295,   65,   66,   67,   68,   69,
-           70,   71,   72,  340,   25,  302,   73,  418,-32766,-32766,
-        -32766,  882, 1103, 1104,  761, 1080,  764,-32766,-32766,-32766,
-          475, -255,  298,  825,  835,  759,  219,  220,  221,-32766,
-           36,-32766,-32766,-32766,-32766,-32766,-32766,  125,-32766,  438,
-        -32766,-32766,-32766,-32766,-32766, 1052,  500,  206,  310,  434,
-          499,  423, 1052,  129,  439,  759,  336,  340,  483,  484,
-           10,  959,  960,  961,  958,  957,  956,  485,  486,  124,
-         1109, 1110, 1111, 1112, 1106, 1107,  313,-32766,-32766,-32766,
-        -32766,  500, 1113, 1108,  434,  219,  220,  221,  425,   41,
-          764,  336,  324, 1222,  325,  427, -126, -126, -126,   -4,
-          835,  474,-32766,-32766,-32766,  823,  206,  913,   40,   21,
-          428, -126,  476, -126,  477, -126,  478, -126,  123,  429,
-          219,  220,  221,   31,   32,  430,  431,  354,  130,   33,
-          479,  883,  336,   74, 1203,  128,  352,  353,  480,  481,
-          912,  206,  247,  301,  482,  210, 1052,  806,  853,  432,
-          433,  312,   30,  297,   35,  106,  107,  108,  109,  110,
-          111,  112,  113,  114,  115,  116,  117,  118,  421, 1052,
-          296,  427, 1154,  837,  647, -126,  835,  474,  102,  103,
-          104,  823,  304,  816,   40,   21,  428,  332,  476,  632,
-          477,  422,  478,  298,  105,  429,  991,  993,   20,   31,
-           32,  430,  431,  933,  409,   33,  479,  220,  221,   74,
-          323,-32766,  352,  353,  480,  481,-32766,-32766,-32766,  424,
-          482, 1052,  448,  768,  853,  432,  433,  206,-32766,-32766,
-        -32766,   48,  906,  907, 1153, 1070,  339,-32766,  485,-32766,
-        -32766,-32766,-32766, 1231,  337,  500, 1232,  427,  434,  837,
-          647,   -4,  835,  474, -224, 1052,  633,  823,   49,  434,
-           40,   21,  428,  937,  476,  776,  477,  777,  478, -504,
-          820,  429, -205, -205, -205,   31,   32,  430,  431,-32766,
-        -32766,   33,  479,   75,-32766,   74,-32766,  594,  352,  353,
-          480,  481,-32766,-32766,-32766,  119,  482,  526,  451,  806,
-          853,  432,  433,  240,  241,  242,  128,-32766,-32766,-32766,
-          411,  775,   51,-32766,  120,-32766,-32766,-32766,  500,  243,
-          244,  434,  552,  427,  417,  837,  647, -205,-32766,  474,
-        -32766,-32766, 1052,  823,  821,  351,   40,   21,  428, 1052,
-          476,  121,  477,  449,  478, 1115,  211,  429, -204, -204,
-         -204,   31,   32,  430,  431, 1115,  286,   33,  479,  818,
-          835,   74,  932,  299,  352,  353,  480,  481,  212,  219,
-          220,  221,  482,  335,  245,  806,  853,  432,  433,-32766,
-        -32766,-32766,  213,   79,   80,   81,   99,  100,  101,  650,
-          206,  237,  238,  239,  444,  122,  776,  649,  777,  300,
-        -32766,  837,  647, -204,   34,  248,   82,   83,   84,   85,
-           86,   87,   88,   89,   90,   91,   92,   93,   94,   95,
-           96,   97,   98,   99,  100,  101,  102,  103,  104, 1052,
-          304,  427,  221,  249,  835,  250,   78,  474,  206,  133,
-          336,  823,  105,  585,   40,   21,  428,  127,  476,  -83,
-          477,  206,  478,-32766,-32766,  429,  219,  220,  221,   31,
-           32,  430,  316,  651,  658,   33,  479,  835,  661,   74,
-          243,  244,  352,  353,  458,   22,  833,  206,  463,  601,
-          482,  134,  362,  132,  608,  609,  769,  653,-32766,  948,
-          667,  936,  675,  846,  304,  105,  655,   43,   44,   45,
-          616,  761,  759,   46,   47,  427,  302, -274,   50,  837,
-          647,  474,   53,  131,  588,  823,  442,  468,   40,   21,
-          428,  762,  476,  606,  477,-32766,  478,  764,  447,  429,
-          964,  854,  532,   31,   32,  430,  855,  327,  427,   33,
-          479,  835,  641,   74,  474,  620,  352,  353,  823,  -81,
-          628,   40,   21,  428,  482,  476,   11,  477,  450,  478,
-          282,  591,  429,  375,  605,  848,   31,   32,  430,    0,
-          659,  329,   33,  479,  835,    0,   74,    0,    0,  352,
-          353,    0,    0,  837,  647, -504,    0,  482,  326,    0,
-          331,    0,    0,    0,    0,    0,    0,    0,  309,  311,
-         -505,    0,  485,  664,    0,    0,    0,    0,    0,    0,
-            0,    0,  427, 1114, 1160,    0,  869,  647,  474, -413,
-         -405,  835,  823,    5,    6,   40,   21,  428,   12,  476,
-           14,  477,  361,  478, -414,  386,  429,  387,   24,  395,
-           31,   32,  430,  444,  534,  427,   33,  479,  412,  413,
-           74,  474,   38,  352,  353,  823,   39,  670,   40,   21,
-          428,  482,  476,  671,  477,  774,  478,  824,  832,  429,
-          811,  826,  885,   31,   32,  430,  876,  877,  809,   33,
-          479,  870,  867,   74,  865,  943,  352,  353,  944,  941,
-          837,  647,  427,  815,  482,  817,  819,  831,  474,  822,
-          940,  772,  823,  773,  942,   40,   21,  428,   78,  476,
-          648,  477,  652,  478,  654,  656,  429,  657,  246,  660,
-           31,   32,  430,  837,  647,  662,   33,  479,  663,  665,
-           74,  666,  126,  352,  353,  333,  214,  215,  334,  407,
-          408,  482,  216,  672,  217,  807, 1228, 1230,  771,  852,
-          770,  851, 1229,  850, 1066,  842,  208, 1054,  849, 1055,
-          840,  214,  215,  949, 1103, 1104,  874,  216,-32766,  217,
-          837,  647, 1105,  875,  462, 1227, 1196, 1194, 1179, 1192,
-         1094,  208,  924, 1200, 1190,  780,  781,  778,  779, 1103,
-         1104,   26,   29,-32766,   37,   42,   76, 1105,   77,  209,
-          284,  292,  293,  305,  306,  307,  308,  341,  410,  416,
-        -32766,    0, -221, -220,   16,   17,   18,  380,  459,  466,
-          573,  467, 1109, 1110, 1111, 1112, 1106, 1107,  385,  472,
-          567,  638, 1057, 1060, 1113, 1108,  914, 1119, 1056, 1032,
-          577,  218,  287,-32766, 1031,  573, 1096, 1109, 1110, 1111,
-         1112, 1106, 1107,  385, -423, 1050,    0, 1061, 1063, 1113,
-         1108, 1062, 1065, 1064, 1079, 1193,  218, 1178,-32766, 1174,
-            0, 1191, 1093, 1225, 1120, 1173,  612,    0, 1159
+          693,  663,  664,  665,  666,  667,  282,  668,  669,  670,
+          706,  707,  221,  222,  223,  224,  225,  226,  227,  228,
+          229,    0,  230,  231,  232,  233,  234,  235,  236,  237,
+          238,  239,  240,  241,-32766,-32766,-32766,-32766,-32766,-32766,
+        -32766,-32766,-32767,-32767,-32767,-32767,   27,  242,  243,-32766,
+        -32766,-32766,-32766,-32766,  671,-32766,  333,-32766,-32766,-32766,
+        -32766,-32766,-32766,-32767,-32767,-32767,-32767,-32767,  672,  673,
+          674,  675,  676,  677,  678, 1034,  816,  740,  941,  942,
+          943,  940,  939,  938,  679,  680,  681,  682,  683,  684,
+          685,  686,  687,  688,  689,  709,  732,  710,  711,  712,
+          713,  701,  702,  703,  731,  704,  705,  690,  691,  692,
+          694,  695,  696,  734,  735,  736,  737,  738,  739,  697,
+          698,  699,  700,  730,  721,  719,  720,  716,  717,  437,
+          708,  714,  715,  722,  723,  725,  724,  726,  727,   55,
+           56,  417,   57,   58,  718,  729,  728,   28,   59,   60,
+         -220,   61,-32766,-32766,-32766,-32766,-32766,-32766,-32766,-32766,
+        -32766,   36,-32767,-32767,-32767,-32767, 1034,   35,  106,  107,
+          108,  109,  110,  111,  112,  113,  114,  115,  116,  117,
+          118,-32766,-32766,-32766,-32766,   62,   63, 1034,  125,  285,
+          292,   64,  748,   65,  290,  291,   66,   67,   68,   69,
+           70,   71,   72,   73,  763,   25,  298,   74,  409,  973,
+          975,  294,  294, 1086, 1087, 1064,  796,  748,  218,  219,
+          220,  465,-32766,-32766,-32766,  742,  864,  817,   54,  807,
+            9,-32766,-32766,-32766,  760,  320,  761,  410,   10,  202,
+          246,  428,  209,-32766,  933,-32766,-32766,-32766,-32766,-32766,
+        -32766,  488,-32766,  438,-32766,-32766,-32766,-32766,-32766,  473,
+          474,  941,  942,  943,  940,  939,  938,-32766,  475,  476,
+          337, 1092, 1093, 1094, 1095, 1089, 1090,  315, 1214, -255,
+          747, 1215, -505, 1096, 1091,  888,  889, 1066, 1065, 1067,
+          218,  219,  220,   41,  414,  337,  330,  895,  332,  418,
+         -126, -126, -126,   75,   52,  464,   -4,  817,   54,  805,
+         -224,  202,   40,   21,  419, -126,  466, -126,  467, -126,
+          468, -126,  359,  420,  128,  128,  748, 1171,   31,   32,
+          421,  422, 1034,  894,   33,  469,-32766,-32766,-32766, 1186,
+          351,  352,  470,  471,-32766,-32766,-32766,  309,  472,  865,
+          323,  788,  835,  423,  424,-32767,-32767,-32767,-32767,   97,
+           98,   99,  100,  101,  615,-32766,  313,-32766,-32766,-32766,
+        -32766,  354, 1185, 1171,  218,  219,  220,  475,  748,  418,
+          819,  629, -126,  297,  915,  464,  817,   54,-32766,  805,
+          124,  748,   40,   21,  419,  202,  466,   48,  467,  534,
+          468,  129,  429,  420,  337,  341,  888,  889,   31,   32,
+          421,  422,  416,  405,   33,  469,-32766,-32766,  311,  298,
+          351,  352,  470,  471,-32766,-32766,-32766,  748,  472,  412,
+          748,  752,  835,  423,  424,  338, 1066, 1065, 1067,  219,
+          220,  919, 1136,  296,   20,-32766,  576,-32766,-32766,-32766,
+          742,  341,  342,  413,  429, 1064,  337,  512,  418,  202,
+          819,  629,   -4, 1034,  464,  817,   54,   49,  805,  337,
+          762,   40,   21,  419,   51,  466, 1034,  467,  475,  468,
+          340,  748,  420,  120, -205, -205, -205,   31,   32,  421,
+          422, 1062,-32766,   33,  469,-32766,-32766,-32766,  744,  351,
+          352,  470,  471,  429, 1098,  337,  429,  472,  337, 1034,
+          788,  835,  423,  424,  415, 1098,-32766,  802,-32766,-32766,
+          102,  103,  104, 1137,  303,  202,  130, 1066, 1065, 1067,
+          337,  123,  239,  240,  241,  748,  105,  418, 1205,  819,
+          629, -205,  440,  464,-32766,-32766,-32766,  805,  242,  243,
+           40,   21,  419,  121,  466,  126,  467,  429,  468,  337,
+          122,  420, 1052, -204, -204, -204,   31,   32,  421,  422,
+         1034,  745,   33,  469,  220,  759,  817,   54,  351,  352,
+          470,  471,  218,  219,  220,  119,  472,  244,  127,  788,
+          835,  423,  424,  202,-32766,-32766,-32766,   30,  293,  803,
+           79,   80,   81,  202,  798,  210,  632,   99,  100,  101,
+          236,  237,  238,  817,   54,-32766,  211,  800,  819,  629,
+         -204,   34, 1034,   82,   83,   84,   85,   86,   87,   88,
+           89,   90,   91,   92,   93,   94,   95,   96,   97,   98,
+           99,  100,  101,  102,  103,  104,  286,  303,  418, 1034,
+          817,   54,-32766,-32766,  464,  218,  219,  220,  805,  105,
+          914,   40,   21,  419,   78,  466,  212,  467,  337,  468,
+          133,  247,  420,  295,  567,  248,  202,   31,   32,  421,
+          633,  242,  243,   33,  469,  418,  249,  817,   54,  351,
+          352,  464,  760,  -84,  761,  805,  310,  472,   40,   21,
+          419,-32766,  466,  640,  467,  643,  468,  447,   22,  420,
+          815,  452,  584,  132,   31,   32,  421,  637,  134,  364,
+           33,  469,  418,  303,  817,   54,  351,  352,  464,  819,
+          629,  828,  805,   43,  472,   40,   21,  419,   44,  466,
+           45,  467,   46,  468,  591,  592,  420,  753,  635,  930,
+          649,   31,   32,  421,  641,  918,  657,   33,  469,  418,
+          105,  817,   54,  351,  352,  464,  819,  629,   47,  805,
+           50,  472,   40,   21,  419,   53,  466,  131,  467,  298,
+          468,  599,  742,  420,-32766, -274,  516,  570,   31,   32,
+          421,  646,  748,  946,   33,  469,  418,  589,  436,-32766,
+          351,  352,  464,  819,  629,  623,  805,  836,  472,   40,
+           21,  419,  611,  466,  -82,  467,  603,  468,   11,  573,
+          420,  439,  456,  281,  318,   31,   32,  421,  588,  432,
+          321,   33,  469,  418, -414,  458,  322,  351,  352,  464,
+          851,  629,  837,  805, -505,  472,   40,   21,  419,  654,
+          466,   38,  467,   24,  468,    0,    0,  420,  319,    0,
+         -405,    0,   31,   32,  421,  245,  312,  314,   33,  469,
+         -506,    0,    0, 1097,  351,  352, 1143,  819,  629,    0,
+            0,  527,  472,  213,  214,    6,    7,   12,   14,  215,
+          363,  216, -415,  558,  789, -221,  830,    0,    0,  747,
+            0,    0,    0,  207,   39,  652,  653,  758,  806,  814,
+          793, 1086, 1087,  808,  819,  629,  213,  214,  867, 1088,
+          858,  859,  215,  791,  216,  852,  849,  847,  925,  926,
+          923,  813,  797,  799,  801,  804,  207,  922,  756,  757,
+          924,  287,   78,  331, 1086, 1087,  353,  630,  634,  636,
+          638,  639, 1088,  642,  644,  645,  647,  648,  631, 1142,
+         1211, 1213,  755,  834,  754,  833, 1212,  554,  832, 1092,
+         1093, 1094, 1095, 1089, 1090,  388, 1048,  824, 1036,  831,
+         1037, 1096, 1091,  822,  931,  856,  857,  451, 1210, 1179,
+            0,  217, 1177, 1162, 1175, 1077,  906, 1183, 1173,    0,
+          554,   26, 1092, 1093, 1094, 1095, 1089, 1090,  388,   29,
+           37,   42,   76,   77, 1096, 1091,  208,  284,  288,  289,
+          304,  305,  306,  307,  217,  335,  406,  408,    0, -220,
+           16,   17,   18,  383,  448,  455,  457,  462,  548,  620,
+         1039, 1042,  896, 1102, 1038, 1014,  559, 1013, 1079,    0,
+            0, -424, 1032,    0, 1043, 1045, 1044, 1047, 1046, 1061,
+         1176, 1161, 1157, 1174, 1076, 1208, 1103, 1156,  595
     );
 
     protected $actionCheck = array(
-            2,    3,    4,    5,    6,   13,    8,    9,   10,   11,
-           12,   32,   33,   34,   35,   36,   37,   38,   39,   40,
-            0,   42,   43,   44,   45,   46,   47,   48,   49,   50,
-           51,   52,   53,    8,    9,   10,   32,   33,   34,   35,
-           36,   37,   38,   39,   40,   12,   67,   68,   32,   33,
-           34,   35,   36,   55,   29,    8,   31,   32,   33,   34,
-           35,   36,   37,   38,   39,   40,   41,   69,   70,   71,
-           72,   73,   74,   75,    1,    7,   78,  114,  115,  116,
-          117,  118,  119,   85,   86,   87,   88,   89,   90,   91,
+            2,    3,    4,    5,    6,    7,   14,    9,   10,   11,
+           12,   13,   33,   34,   35,   36,   37,   38,   39,   40,
+           41,    0,   43,   44,   45,   46,   47,   48,   49,   50,
+           51,   52,   53,   54,    9,   10,   11,   33,   34,   35,
+           36,   37,   38,   39,   40,   41,    8,   68,   69,   33,
+           34,   35,   36,   37,   56,   30,    8,   32,   33,   34,
+           35,   36,   37,   38,   39,   40,   41,   42,   70,   71,
+           72,   73,   74,   75,   76,   13,    1,   79,  115,  116,
+          117,  118,  119,  120,   86,   87,   88,   89,   90,   91,
            92,   93,   94,   95,   96,   97,   98,   99,  100,  101,
           102,  103,  104,  105,  106,  107,  108,  109,  110,  111,
           112,  113,  114,  115,  116,  117,  118,  119,  120,  121,
-          122,  123,  124,  125,  126,  127,  128,  129,   80,  131,
-          132,  133,  134,  135,  136,  137,  138,  139,    2,    3,
-            4,    5,    6,  145,  146,  147,  154,   11,   12,  125,
-           14,   32,   33,   34,   35,   36,   37,   38,   39,   40,
-            7,   42,   43,   44,   45,   42,   43,   44,   45,   46,
-           47,   48,   49,   50,  105,  132,  133,  153,    1,   78,
-          111,   80,   80,  150,   48,   49,   68,    7,  145,  120,
-           54,  148,   56,   57,   58,   59,   60,   61,   62,   63,
-           64,   65,   66,  155,   68,   69,   70,   71,    8,    9,
-           10,   30,   76,   77,   78,  114,   80,    8,    9,   10,
-           84,  152,   36,  150,    1,   78,    8,    9,   10,   29,
-           13,   31,   32,   33,   34,   35,   36,    7,   29,  103,
-           31,   32,   33,   34,   35,   12,  145,   29,  130,  148,
-          114,    7,   12,  151,  153,   78,  155,  155,  122,  123,
-            7,  114,  115,  116,  117,  118,  119,  131,  132,  151,
-          134,  135,  136,  137,  138,  139,  140,   32,   33,   34,
-           35,  145,  146,  147,  148,    8,    9,   10,    7,  153,
-           80,  155,  156,   83,  158,   72,   73,   74,   75,    0,
-            1,   78,    8,    9,   10,   82,   29,  154,   85,   86,
-           87,   88,   89,   90,   91,   92,   93,   94,   13,   96,
-            8,    9,   10,  100,  101,  102,  103,    7,  151,  106,
-          107,  150,  155,  110,  154,  149,  113,  114,  115,  116,
-          154,   29,   30,   36,  121,    7,   12,  124,  125,  126,
-          127,    7,  142,  143,   15,   16,   17,   18,   19,   20,
-           21,   22,   23,   24,   25,   26,   27,   28,    7,   12,
-           36,   72,  154,  150,  151,  152,    1,   78,   51,   52,
-           53,   82,   55,  150,   85,   86,   87,    7,   89,   78,
-           91,    7,   93,   36,   67,   96,   57,   58,  154,  100,
-          101,  102,  103,  150,  105,  106,  107,    9,   10,  110,
-          111,   80,  113,  114,  115,  116,    8,    9,   10,    7,
-          121,   12,   30,  124,  125,  126,  127,   29,   32,   33,
-           34,   68,  132,  133,  157,  154,   68,   29,  131,   31,
-           32,   33,   34,   78,  145,  145,   81,   72,  148,  150,
-          151,  152,    1,   78,  154,   12,  145,   82,   68,  148,
-           85,   86,   87,  152,   89,  103,   91,  105,   93,  130,
-          150,   96,   97,   98,   99,  100,  101,  102,  103,    8,
-            9,  106,  107,  149,  153,  110,  155,   83,  113,  114,
-          115,  116,    8,    9,   10,   15,  121,   83,  130,  124,
-          125,  126,  127,   51,   52,   53,  149,    8,    9,   10,
-          148,  150,   68,   29,  151,   31,   32,   33,  145,   67,
-           68,  148,   79,   72,    7,  150,  151,  152,   29,   78,
-           31,   32,   12,   82,  150,    7,   85,   86,   87,   12,
-           89,  151,   91,  151,   93,  141,   15,   96,   97,   98,
-           99,  100,  101,  102,  103,  141,   36,  106,  107,  150,
-            1,  110,  150,   36,  113,  114,  115,  116,   15,    8,
-            9,   10,  121,    7,   13,  124,  125,  126,  127,    8,
-            9,   10,   15,    8,    9,   10,   48,   49,   50,   30,
-           29,   48,   49,   50,  148,  151,  103,  151,  105,    7,
-           29,  150,  151,  152,   29,   15,   31,   32,   33,   34,
-           35,   36,   37,   38,   39,   40,   41,   42,   43,   44,
-           45,   46,   47,   48,   49,   50,   51,   52,   53,   12,
-           55,   72,   10,   15,    1,   15,  151,   78,   29,  151,
-          155,   82,   67,  155,   85,   86,   87,   30,   89,   30,
-           91,   29,   93,   32,   33,   96,    8,    9,   10,  100,
-          101,  102,   30,   30,   30,  106,  107,    1,   30,  110,
-           67,   68,  113,  114,   73,   74,   30,   29,   73,   74,
-          121,   98,   99,   30,  108,  109,  150,  151,   32,  150,
-          151,  150,  151,   36,   55,   67,   30,   68,   68,   68,
-           75,   78,   78,   68,   68,   72,   69,   80,   68,  150,
-          151,   78,   68,   68,   88,   82,  103,  103,   85,   86,
-           87,   78,   89,  111,   91,   83,   93,   80,   87,   96,
-           80,  125,   83,  100,  101,  102,  125,  129,   72,  106,
-          107,    1,   90,  110,   78,   94,  113,  114,   82,   95,
-           92,   85,   86,   87,  121,   89,   95,   91,   95,   93,
-           95,   97,   96,  148,   97,  149,  100,  101,  102,   -1,
-           30,  112,  106,  107,    1,   -1,  110,   -1,   -1,  113,
-          114,   -1,   -1,  150,  151,  130,   -1,  121,  128,   -1,
-          128,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  130,  130,
-          130,   -1,  131,   30,   -1,   -1,   -1,   -1,   -1,   -1,
-           -1,   -1,   72,  141,  141,   -1,  150,  151,   78,  144,
-          144,    1,   82,  144,  144,   85,   86,   87,  144,   89,
-          144,   91,  144,   93,  144,  148,   96,  148,  153,  148,
-          100,  101,  102,  148,  148,   72,  106,  107,  148,  148,
-          110,   78,  150,  113,  114,   82,  150,  150,   85,   86,
-           87,  121,   89,  150,   91,  150,   93,  150,  150,   96,
-          150,  150,  150,  100,  101,  102,  150,  150,  150,  106,
-          107,  150,  150,  110,  150,  150,  113,  114,  150,  150,
-          150,  151,   72,  150,  121,  150,  150,  150,   78,  150,
-          150,  150,   82,  150,  150,   85,   86,   87,  151,   89,
-          151,   91,  151,   93,  151,  151,   96,  151,   30,  151,
-          100,  101,  102,  150,  151,  151,  106,  107,  151,  151,
-          110,  151,  151,  113,  114,  151,   48,   49,  151,  151,
-          151,  121,   54,  152,   56,  152,  152,  152,  152,  152,
-          152,  152,  152,  152,  152,  152,   68,  152,  152,  152,
-          152,   48,   49,  152,   76,   77,  152,   54,   80,   56,
-          150,  151,   84,  152,  152,  152,  152,  152,  152,  152,
-          152,   68,  152,  152,  152,  152,  152,  152,  152,   76,
-           77,  153,  153,   80,  153,  153,  153,   84,  153,  153,
-          153,  153,  153,  153,  153,  153,  153,  153,  153,  153,
-          153,   -1,  154,  154,  154,  154,  154,  154,  154,  154,
-          132,  154,  134,  135,  136,  137,  138,  139,  140,  154,
-          154,  154,  154,  154,  146,  147,  154,  154,  154,  154,
-          154,  153,  155,  155,  154,  132,  154,  134,  135,  136,
-          137,  138,  139,  140,  156,  156,   -1,  157,  157,  146,
-          147,  157,  157,  157,  157,  157,  153,  157,  155,  157,
-           -1,  157,  157,  157,  157,  157,  157,   -1,  158
+          122,  123,  124,  125,  126,  127,  128,  129,  130,   31,
+          132,  133,  134,  135,  136,  137,  138,  139,  140,    3,
+            4,    5,    6,    7,  146,  147,  148,    8,   12,   13,
+          158,   15,   33,   34,   35,   36,   37,   38,   39,   40,
+           41,   14,   43,   44,   45,   46,   13,   16,   17,   18,
+           19,   20,   21,   22,   23,   24,   25,   26,   27,   28,
+           29,   33,   34,   35,   36,   49,   50,   13,    8,    8,
+           37,   55,   81,   57,   58,   59,   60,   61,   62,   63,
+           64,   65,   66,   67,  156,   69,   70,   71,   72,   58,
+           59,   37,   37,   77,   78,   79,  154,   81,    9,   10,
+           11,   85,    9,   10,   11,   79,   31,    1,    2,  154,
+          107,    9,   10,   11,  105,  112,  107,  126,    8,   30,
+           31,  105,    8,   30,  121,   32,   33,   34,   35,   36,
+           37,  115,   30,  155,   32,   33,   34,   35,   36,  123,
+          124,  115,  116,  117,  118,  119,  120,  115,  132,  133,
+          159,  135,  136,  137,  138,  139,  140,  141,   79,  156,
+          151,   82,  131,  147,  148,  133,  134,  151,  152,  153,
+            9,   10,   11,  157,    8,  159,  160,  158,  162,   73,
+           74,   75,   76,  150,   69,   79,    0,    1,    2,   83,
+          158,   30,   86,   87,   88,   89,   90,   91,   92,   93,
+           94,   95,    8,   97,  150,  150,   81,   81,  102,  103,
+          104,  105,   13,  158,  108,  109,    9,   10,   11,  158,
+          114,  115,  116,  117,    9,   10,   11,    8,  122,  154,
+            8,  125,  126,  127,  128,   43,   44,   45,   46,   47,
+           48,   49,   50,   51,   79,   30,  131,   32,   33,   34,
+           35,    8,    1,   81,    9,   10,   11,  132,   81,   73,
+          154,  155,  156,   37,  154,   79,    1,    2,  115,   83,
+          155,   81,   86,   87,   88,   30,   90,   69,   92,   80,
+           94,  155,  157,   97,  159,  159,  133,  134,  102,  103,
+          104,  105,    8,  107,  108,  109,    9,   10,  112,   70,
+          114,  115,  116,  117,    9,   10,   11,   81,  122,    8,
+           81,  125,  126,  127,  128,    8,  151,  152,  153,   10,
+           11,  156,  161,    8,  158,   30,   84,   32,   33,   34,
+           79,  159,  146,    8,  157,   79,  159,   84,   73,   30,
+          154,  155,  156,   13,   79,    1,    2,   69,   83,  159,
+          156,   86,   87,   88,   69,   90,   13,   92,  132,   94,
+           69,   81,   97,  155,   99,  100,  101,  102,  103,  104,
+          105,  115,    9,  108,  109,    9,   10,   11,   79,  114,
+          115,  116,  117,  157,  142,  159,  157,  122,  159,   13,
+          125,  126,  127,  128,    8,  142,   30,  154,   32,   33,
+           52,   53,   54,  158,   56,   30,  155,  151,  152,  153,
+          159,   14,   52,   53,   54,   81,   68,   73,   84,  154,
+          155,  156,  131,   79,   33,   34,   35,   83,   68,   69,
+           86,   87,   88,  155,   90,  155,   92,  157,   94,  159,
+          155,   97,  158,   99,  100,  101,  102,  103,  104,  105,
+           13,  152,  108,  109,   11,  154,    1,    2,  114,  115,
+          116,  117,    9,   10,   11,   16,  122,   14,   31,  125,
+          126,  127,  128,   30,    9,   10,   11,  143,  144,  154,
+            9,   10,   11,   30,  154,   16,   31,   49,   50,   51,
+           49,   50,   51,    1,    2,   30,   16,  154,  154,  155,
+          156,   30,   13,   32,   33,   34,   35,   36,   37,   38,
+           39,   40,   41,   42,   43,   44,   45,   46,   47,   48,
+           49,   50,   51,   52,   53,   54,   37,   56,   73,   13,
+            1,    2,   33,   34,   79,    9,   10,   11,   83,   68,
+          154,   86,   87,   88,  155,   90,   16,   92,  159,   94,
+          155,   16,   97,   37,  159,   16,   30,  102,  103,  104,
+           31,   68,   69,  108,  109,   73,   16,    1,    2,  114,
+          115,   79,  105,   31,  107,   83,   31,  122,   86,   87,
+           88,   33,   90,   31,   92,   31,   94,   74,   75,   97,
+           31,   74,   75,   31,  102,  103,  104,   31,  100,  101,
+          108,  109,   73,   56,    1,    2,  114,  115,   79,  154,
+          155,   37,   83,   69,  122,   86,   87,   88,   69,   90,
+           69,   92,   69,   94,  110,  111,   97,  154,  155,  154,
+          155,  102,  103,  104,   31,  154,  155,  108,  109,   73,
+           68,    1,    2,  114,  115,   79,  154,  155,   69,   83,
+           69,  122,   86,   87,   88,   69,   90,   69,   92,   70,
+           94,   76,   79,   97,   84,   81,   84,   89,  102,  103,
+          104,   31,   81,   81,  108,  109,   73,  112,   88,  115,
+          114,  115,   79,  154,  155,   91,   83,  126,  122,   86,
+           87,   88,   93,   90,   96,   92,   95,   94,   96,   99,
+           97,   96,   96,   96,  129,  102,  103,  104,   99,  105,
+          113,  108,  109,   73,  145,  105,  129,  114,  115,   79,
+          154,  155,  126,   83,  131,  122,   86,   87,   88,  156,
+           90,  154,   92,  157,   94,   -1,   -1,   97,  130,   -1,
+          145,   -1,  102,  103,  104,   31,  131,  131,  108,  109,
+          131,   -1,   -1,  142,  114,  115,  142,  154,  155,   -1,
+           -1,  149,  122,   49,   50,  145,  145,  145,  145,   55,
+          145,   57,  145,  149,  156,  158,  150,   -1,   -1,  151,
+           -1,   -1,   -1,   69,  154,  154,  154,  154,  154,  154,
+          154,   77,   78,  154,  154,  155,   49,   50,  154,   85,
+          154,  154,   55,  154,   57,  154,  154,  154,  154,  154,
+          154,  154,  154,  154,  154,  154,   69,  154,  154,  154,
+          154,  159,  155,  155,   77,   78,  155,  155,  155,  155,
+          155,  155,   85,  155,  155,  155,  155,  155,  155,  162,
+          156,  156,  156,  156,  156,  156,  156,  133,  156,  135,
+          136,  137,  138,  139,  140,  141,  156,  156,  156,  156,
+          156,  147,  148,  156,  156,  156,  156,  156,  156,  156,
+           -1,  157,  156,  156,  156,  156,  156,  156,  156,   -1,
+          133,  157,  135,  136,  137,  138,  139,  140,  141,  157,
+          157,  157,  157,  157,  147,  148,  157,  157,  157,  157,
+          157,  157,  157,  157,  157,  157,  157,  157,   -1,  158,
+          158,  158,  158,  158,  158,  158,  158,  158,  158,  158,
+          158,  158,  158,  158,  158,  158,  158,  158,  158,   -1,
+           -1,  160,  160,   -1,  161,  161,  161,  161,  161,  161,
+          161,  161,  161,  161,  161,  161,  161,  161,  161
     );
 
     protected $actionBase = array(
-            0,  223,  299,  375,  451,  102,  102,  311,  754,   -2,
-           -2,  147,   -2,   -2,   -2,  633,  740,  773,  740,  559,
-          666,  820,  820,  820,  186,  334,  334,  334,  357,  892,
-          443,   33,  233,  409,  617,  520,  527,  240,  240,  240,
-          240,  136,  136,  240,  240,  240,  240,  240,  240,  240,
-          240,  240,  240,  240,  240,  240,  240,  240,  240,  240,
-          240,  240,  240,  240,  240,  240,  240,  240,  240,  240,
-          240,  240,  240,  240,  240,  240,  240,  240,  240,  240,
-          240,  240,  240,  240,  240,  240,  240,  240,  240,  240,
-          240,  240,  240,  240,  240,  240,  240,  240,  240,  240,
-          240,  240,  240,  240,  240,  240,  240,  240,  240,  240,
-          240,  240,  240,  240,  240,  240,  240,  240,  240,  240,
-          240,  240,  240,  240,  240,  240,  240,  240,  240,  240,
-          240,  240,  240,  240,  240,  181,   73,  305,  217,  743,
-          745,  746,  747,  884,  665,  885,  823,  824,  653,  825,
-          826,  827,  828,  830,  822,  831,  919,  832,  575,  575,
-          575,  575,  575,  575,  575,  575,  575,  575,  575,  575,
-           47,  561,  218,  312,  277,  471,  648,  648,  648,  648,
-          648,  648,  648,  294,  294,  294,  294,  294,  294,  294,
-          294,  294,  294,  294,  294,  294,  294,  294,  294,  294,
-          294,  398,  571,  571,  571,  622,  888,  609,  913,  913,
-          913,  913,  913,  913,  913,  913,  913,  913,  913,  913,
-          913,  913,  913,  913,  913,  913,  913,  913,  913,  913,
-          913,  913,  913,  913,  913,  913,  913,  913,  913,  913,
-          913,  913,  913,  913,  913,  913,  913,  913,  913,  913,
-          913,  499,  -21,  -21,  484,  656,  408,  621,  209,  396,
-          200,   25,   25,   25,   25,   25,  245,   16,    4,    4,
-            4,    4,  339,  123,  123,  123,  123,  119,  119,  119,
-          119,   69,  307,  307,  671,  671,  637,  781,  538,  538,
-          543,  543,  101,  101,  101,  101,  101,  101,  101,  101,
-          101,  101,   24,  627,  857,  300,  300,  300,  300,  177,
-          177,  177,   43,  414,  673,  920,   43,  327,  327,  327,
-          452,  452,  452,  362,  649,  210,  331,  331,  331,  331,
-          210,  331,  331,  493,  493,  493,  485,  446,  642,  365,
-          488,  373,  390,  664,  814,  667,  821,  541,  690,  118,
-          700,  701,  887,  613,  887,  601,  605,  576,  676,  392,
-          850,   48,  181,  539,  444,  639,  749,  361,  751,  320,
-          384,  368,  536,  363,  244,  784,  753,  886,  890,  180,
-          670,  639,  639,  639,  153,  404,  787,  788,  363,   -8,
-          603,  603,  603,  603,  833,  789,  603,  603,  603,  603,
-          834,  835,  253,  412,  836,  281,  750,  623,  623,  624,
-          624,  623,  623,  623,  623,  650,  657,  623,  839,  685,
-          685,  624,  647,  624,  650,  657,  842,  842,  842,  842,
-          624,  657,  624,  624,  623,  624,  685,  685,  657,  637,
-          685,   68,  657,  660,  623,  662,  662,  842,  707,  713,
-          624,  624,  608,  685,  685,  685,  608,  657,  842,  612,
-          616,  338,  685,  842,  632,  647,  632,  612,  657,  632,
-          647,  647,  632,   20,  619,  629,  841,  843,  855,  759,
-          606,  611,  848,  849,  845,  847,  838,  646,  696,  715,
-          717,  480,  630,  631,  635,  636,  679,  640,  668,  613,
-          695,  628,  628,  628,  655,  680,  655,  628,  628,  628,
-          628,  628,  628,  628,  628,  900,  675,  688,  669,  641,
-          718,  531,  615,  663,  553,  761,  672,  696,  696,  793,
-          878,  863,  898,  899,  643,  850,  876,  655,  901,  702,
-          230,  567,  851,  791,  687,  689,  655,  852,  655,  763,
-          655,  879,  794,  645,  795,  696,  796,  628,  882,  904,
-          905,  906,  907,  908,  910,  912,  914,  644,  915,  720,
-          626,  864,  344,  846,  676,  684,  691,  721,  797,  380,
-          916,  798,  655,  655,  764,  757,  655,  766,  722,  706,
-          860,  726,  865,  917,  672,  867,  655,  614,  799,  918,
-          380,  634,  625,  858,  651,  727,  856,  883,  854,  768,
-          590,  618,  800,  801,  802,  638,  728,  861,  862,  859,
-          731,  774,  620,  777,  658,  803,  778,  853,  732,  805,
-          806,  877,  654,  695,  686,  659,  661,  652,  780,  807,
-          875,  734,  735,  738,  808,  739,  811,    0,    0,    0,
+            0,  226,  306,  385,  464,  285,  246,  246,  786,   -2,
+           -2,  146,   -2,   -2,   -2,  649,  723,  760,  723,  575,
+          686,  612,  612,  612,  175,  153,  153,  153,  174,  890,
+          319,   62,  450,  463,  557,  609,  636,  496,  496,  496,
+          496,  136,  136,  496,  496,  496,  496,  496,  496,  496,
+          496,  496,  496,  496,  496,  496,  496,  496,  496,  496,
+          496,  496,  496,  496,  496,  496,  496,  496,  496,  496,
+          496,  496,  496,  496,  496,  496,  496,  496,  496,  496,
+          496,  496,  496,  496,  496,  496,  496,  496,  496,  496,
+          496,  496,  496,  496,  496,  496,  496,  496,  496,  496,
+          496,  496,  496,  496,  496,  496,  496,  496,  496,  496,
+          496,  496,  496,  496,  496,  496,  496,  496,  496,  496,
+          496,  496,  496,  496,  496,  496,  496,  496,  496,  496,
+          496,  496,  496,  496,  496,  195,   75,  777,  517,  147,
+          778,  779,  780,  886,  727,  887,  832,  833,  682,  836,
+          837,  838,  839,  840,  831,  841,  907,  842,  591,  591,
+          591,  591,  591,  591,  591,  591,  591,  591,  591,  591,
+          483,  573,  365,  209,  281,  407,  646,  646,  646,  646,
+          646,  646,  646,  327,  327,  327,  327,  327,  327,  327,
+          327,  327,  327,  327,  327,  327,  327,  327,  327,  327,
+          327,  429,  834,  585,  585,  585,  563,  867,  867,  867,
+          867,  867,  867,  867,  867,  867,  867,  867,  867,  867,
+          867,  867,  867,  867,  867,  867,  867,  867,  867,  867,
+          867,  867,  867,  867,  867,  867,  867,  867,  867,  867,
+          867,  867,  867,  867,  867,  867,  867,  867,  867,  867,
+          495,  486,  -21,  -21,  415,  668,  335,  619,  222,  511,
+          213,   25,   25,   25,   25,   25,  148,   16,    4,    4,
+            4,    4,  151,  312,  312,  312,  312,  119,  119,  119,
+          119,  346,  346,  123,  245,  245,  349,  400,  297,  297,
+          297,  297,  297,  297,  297,  297,  297,  297,  111,  558,
+          558,  561,  561,  310,  152,  152,  152,  152,  704,  273,
+          273,  129,  371,  371,  371,  373,  734,  797,  376,  376,
+          376,  376,  376,  376,  468,  468,  468,  480,  480,  480,
+          702,  587,  454,  587,  454,  684,  748,  509,  748,  700,
+          199,  515,  803,  398,  720,  829,  729,  830,  601,  747,
+          235,  782,  724,  419,  782,  633,  637,  634,  419,  419,
+          715,   98,  863,  292,  195,  595,  405,  667,  781,  421,
+          732,  784,  363,  445,  411,  593,  328,  286,  744,  785,
+          888,  889,  181,  739,  667,  667,  667,  139,  362,  328,
+           -8,  613,  613,  613,  613,   48,  613,  613,  613,  613,
+          314,  230,  506,  404,  783,  703,  703,  712,  694,  852,
+          696,  696,  703,  711,  703,  712,  694,  854,  854,  854,
+          854,  703,  694,  703,  703,  703,  696,  696,  694,  709,
+          696,   38,  694,  695,  707,  707,  854,  751,  752,  703,
+          703,  728,  696,  696,  696,  728,  694,  854,  685,  746,
+          234,  696,  854,  665,  711,  665,  703,  685,  694,  665,
+          711,  711,  665,   21,  662,  664,  853,  855,  869,  792,
+          681,  716,  861,  862,  856,  860,  844,  679,  753,  754,
+          569,  669,  671,  673,  699,  740,  701,  735,  724,  692,
+          692,  692,  713,  741,  713,  692,  692,  692,  692,  692,
+          692,  692,  692,  893,  689,  745,  736,  710,  755,  589,
+          600,  793,  731,  738,  882,  875,  891,  892,  863,  880,
+          713,  894,  697,  180,  650,  864,  693,  788,  713,  865,
+          713,  794,  713,  883,  804,  708,  805,  806,  692,  884,
+          895,  896,  897,  898,  899,  900,  901,  902,  706,  903,
+          756,  698,  876,  339,  859,  715,  742,  725,  791,  759,
+          807,  342,  904,  808,  713,  713,  795,  787,  713,  796,
+          764,  750,  872,  766,  877,  905,  731,  726,  878,  713,
+          730,  809,  906,  342,  672,  705,  737,  721,  767,  870,
+          885,  868,  798,  655,  659,  810,  812,  820,  674,  769,
+          873,  874,  871,  771,  799,  670,  800,  719,  821,  801,
+          866,  772,  822,  823,  881,  718,  743,  717,  722,  714,
+          802,  824,  879,  773,  774,  775,  827,  776,  828,    0,
             0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
             0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-            0,    0,    0,    0,    0,    0,    0,  136,  136,  136,
-          136,   -2,   -2,   -2,   -2,    0,    0,   -2,    0,    0,
-            0,  136,  136,  136,  136,  136,  136,  136,  136,  136,
-          136,  136,  136,  136,  136,  136,  136,  136,  136,  136,
-          136,  136,  136,  136,  136,  136,  136,    0,    0,  136,
+            0,    0,    0,    0,    0,    0,    0,    0,    0,  136,
+          136,  136,  136,   -2,   -2,   -2,   -2,    0,    0,   -2,
+            0,    0,    0,  136,  136,  136,  136,  136,  136,  136,
           136,  136,  136,  136,  136,  136,  136,  136,  136,  136,
+          136,  136,  136,  136,  136,  136,  136,  136,  136,    0,
+            0,  136,  136,  136,  136,  136,  136,  136,  136,  136,
           136,  136,  136,  136,  136,  136,  136,  136,  136,  136,
           136,  136,  136,  136,  136,  136,  136,  136,  136,  136,
           136,  136,  136,  136,  136,  136,  136,  136,  136,  136,
@@ -538,173 +540,164 @@ class Php5 extends \PhpParser\ParserAbstract
           136,  136,  136,  136,  136,  136,  136,  136,  136,  136,
           136,  136,  136,  136,  136,  136,  136,  136,  136,  136,
           136,  136,  136,  136,  136,  136,  136,  136,  136,  136,
-          136,  575,  575,  575,  575,  575,  575,  575,  575,  575,
-          575,  575,  575,  575,  575,  575,  575,  575,  575,  575,
-          575,  575,  575,  575,    0,    0,    0,    0,    0,    0,
-            0,    0,    0,    0,    0,    0,  575,  -21,  -21,  -21,
-          -21,  575,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  575,
-          575,  575,  575,  575,  575,  575,  575,  575,  575,  575,
-          575,  575,  575,  575,  575,  575,  575,  -21,  575,  575,
-          575,  -21,  101,  -21,  101,  101,  101,  101,  101,  101,
-          101,  101,  101,  101,  101,  101,  101,  101,  101,  101,
-          101,  101,  101,  101,  101,  101,  101,  101,  101,  101,
-          101,  101,  101,  101,  101,  101,  101,  101,  101,  101,
-          101,  101,  101,  101,  101,  101,  101,  575,    0,    0,
-          575,  -21,  575,  -21,  575,  -21,  575,  575,  575,  575,
-          575,  575,  -21,  -21,  -21,  -21,  -21,  -21,    0,  327,
-          327,  327,  327,  -21,  -21,  -21,  -21,  -37,  101,  101,
-          101,  101,  101,  101,  327,  327,  452,  452,    0,    0,
-            0,    0,    0,    0,    0,    0,    0,    0,  101,  -37,
-          101,  623,  623,  623,  623,  647,  647,  647,  623,  210,
-          210,  210,  623,    0,    0,    0,    0,    0,    0,  623,
-          210,    0,  101,  101,  101,  101,    0,  101,  101,  623,
-          623,  623,  647,  623,  210,  647,  647,  623,  685,  583,
-          583,  583,  583,  380,  363,    0,  623,  623,  647,  647,
-          647,    0,    0,    0,  685,    0,  624,    0,    0,    0,
-            0,  628,  230,    0,  528,    0,    0,    0,    0,    0,
-            0,  643,  528,  592,  592,    0,  644,  628,  628,  628,
-            0,    0,  643,  643,    0,    0,    0,    0,    0,    0,
-          566,  643,    0,    0,    0,    0,  566,  517,    0,    0,
-          517,    0,  380
+          136,  136,  136,  591,  591,  591,  591,  591,  591,  591,
+          591,  591,  591,  591,  591,  591,  591,  591,  591,  591,
+          591,  591,  591,  591,  591,  591,    0,    0,    0,    0,
+            0,    0,    0,    0,    0,    0,    0,    0,  591,  -21,
+          -21,  -21,  -21,  591,  -21,  -21,  -21,  -21,  -21,  -21,
+          -21,  591,  591,  591,  591,  591,  591,  591,  591,  591,
+          591,  591,  591,  591,  591,  591,  591,  591,  591,  -21,
+          376,  591,  591,  591,  -21,  376,  376,  376,  376,  376,
+          376,  376,  376,  376,  376,  376,  376,  376,  376,  376,
+          376,  376,  376,  376,  376,  376,  376,  376,  376,  376,
+          376,  376,  376,  376,  376,  376,  376,  376,  376,  376,
+          376,  376,  376,  376,  376,  376,  376,  376,  -21,  591,
+            0,    0,  591,  -21,  591,  -21,  591,  -21,  591,  591,
+          591,  591,  591,  591,  -21,  -21,  -21,  -21,  -21,  -21,
+            0,  468,  468,  468,  468,  -21,  -21,  -21,  -21,  376,
+          376,  -37,  376,  376,  376,  376,  376,  376,  376,  376,
+          376,  376,  376,  376,  376,  376,  376,  468,  468,  480,
+          480,  376,  376,  376,  376,  376,  -37,  376,  376,  419,
+          711,  711,  711,  454,  454,  454,    0,    0,    0,    0,
+            0,    0,    0,    0,    0,    0,    0,    0,  454,  419,
+            0,  419,    0,  376,  419,  711,  419,  454,  711,  711,
+          419,  696,  618,  618,  618,  618,  342,  328,    0,  711,
+          711,    0,  711,    0,    0,    0,    0,    0,  696,    0,
+          703,    0,    0,    0,    0,  692,  180,    0,  725,  427,
+            0,    0,    0,    0,    0,    0,  725,  427,  435,  435,
+            0,  706,  692,  692,  692,    0,    0,    0,    0,    0,
+            0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+            0,    0,  342
     );
 
     protected $actionDefault = array(
             3,32767,32767,32767,32767,32767,32767,32767,32767,32767,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
-        32767,32767,32767,32767,32767,  533,  533,  488,32767,32767,
+        32767,32767,32767,32767,32767,  534,  534,  489,32767,32767,
         32767,32767,32767,32767,32767,32767,32767,  293,  293,  293,
-        32767,32767,32767,  521,  521,  521,  521,  521,  521,  521,
-          521,  521,  521,  521,32767,32767,32767,32767,32767,  376,
-        32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
+        32767,32767,32767,  522,  522,  522,  522,  522,  522,  522,
+          522,  522,  522,  522,32767,32767,32767,32767,32767,32767,
+          376,32767,32767,32767,32767,32767,32767,32767,32767,32767,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
-        32767,32767,32767,32767,32767,32767,32767,  382,  538,32767,
+        32767,32767,32767,32767,32767,32767,32767,32767,  382,  539,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
         32767,32767,32767,32767,32767,32767,32767,32767,  357,  358,
-          360,  361,  292,  541,  522,  241,  383,  537,  291,  243,
-          321,  492,32767,32767,32767,  323,  120,  252,  197,  491,
+          360,  361,  292,  542,  523,  241,  383,  538,  291,  243,
+          321,  493,32767,32767,32767,  323,  120,  252,  197,  492,
           123,  290,  228,  375,  377,  322,  297,  302,  303,  304,
           305,  306,  307,  308,  309,  310,  311,  312,  313,  314,
-          296,  448,  354,  353,  352,  450,32767,  449,  485,  485,
-          488,32767,32767,32767,32767,32767,32767,32767,32767,32767,
+          296,  449,32767,  354,  353,  352,  451,  486,  486,  489,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
-        32767,  319,  476,  475,  320,  446,  324,  447,  326,  451,
-          325,  342,  343,  340,  341,  344,  453,  452,  469,  470,
-          467,  468,  295,  345,  346,  347,  348,  471,  472,  473,
-          474,  276,32767,32767,  532,  532,32767,32767,  333,  334,
-          460,  461,32767,32767,32767,32767,32767,32767,32767,32767,
-        32767,32767,32767,  277,32767,  232,  232,  232,  232,32767,
-        32767,32767,  232,32767,32767,32767,32767,  328,  329,  327,
-          455,  456,  454,32767,  422,32767,32767,32767,32767,32767,
-          424,32767,32767,32767,32767,32767,32767,32767,32767,32767,
-        32767,32767,  493,32767,32767,32767,32767,32767,  506,  411,
-        32767,32767,32767,  404,32767,  216,  218,  165,  479,32767,
-        32767,32767,32767,32767,  511,  338,32767,32767,32767,32767,
-        32767,  548,32767,  506,32767,32767,32767,32767,32767,32767,
-          351,  330,  331,  332,32767,32767,32767,32767,  510,  504,
-          463,  464,  465,  466,32767,32767,  457,  458,  459,  462,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
-        32767,32767,32767,32767,32767,32767,  169,32767,  419,  425,
-          425,32767,32767,32767,32767,  169,32767,32767,32767,32767,
-        32767,  169,32767,32767,32767,32767,  509,  508,  169,32767,
-          405,  487,  169,  182,32767,  180,  180,32767,  202,  202,
-        32767,32767,  184,  480,  499,32767,  184,  169,32767,  393,
-          171,  487,32767,32767,  234,32767,  234,  393,  169,  234,
-        32767,32767,  234,32767,   85,  429,32767,32767,32767,32767,
-        32767,32767,32767,32767,32767,32767,32767,32767,  406,32767,
-        32767,32767,  372,  373,  482,  495,32767,  496,32767,  404,
-        32767,  336,  337,  339,  316,32767,  318,  362,  363,  364,
-          365,  366,  367,  368,  370,32767,  409,32767,  412,32767,
-        32767,32767,   87,  112,  251,32767,  546,   87,  407,32767,
-        32767,  300,  546,32767,32767,32767,32767,  540,32767,32767,
-          294,32767,32767,32767,   87,   87,  247,32767,  167,32767,
-          530,32767,  547,32767,  504,  408,32767,  335,32767,32767,
-        32767,32767,32767,32767,32767,32767,32767,  505,32767,32767,
-        32767,32767,  223,32767,  442,32767,   87,32767,32767,  183,
-        32767,32767,  298,  242,32767,32767,  539,32767,32767,32767,
-        32767,32767,32767,32767,32767,32767,  168,32767,32767,32767,
-          185,32767,32767,  504,32767,32767,32767,32767,32767,32767,
-        32767,  289,32767,32767,32767,32767,32767,32767,32767,  504,
-        32767,32767,  227,32767,32767,32767,32767,32767,32767,32767,
-        32767,32767,   85,   60,32767,  270,32767,32767,32767,32767,
-        32767,32767,32767,32767,32767,32767,32767,  125,  125,    3,
-          125,  125,  254,    3,  254,  125,  254,  254,  125,  125,
-          125,  125,  125,  125,  125,  125,  125,  125,  210,  213,
-          202,  202,  162,  125,  125,  262
+          450,  319,  477,  476,  320,  447,  324,  448,  326,  452,
+          325,  342,  343,  340,  341,  344,  454,  453,  470,  471,
+          468,  469,  295,  345,  346,  347,  348,  472,  473,  474,
+          475,32767,32767,  276,  533,  533,32767,32767,32767,32767,
+        32767,32767,32767,32767,32767,32767,32767,32767,32767,  333,
+          334,  461,  462,32767,  232,  232,  232,  232,  277,  232,
+        32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
+        32767,32767,32767,32767,  328,  329,  327,  456,  457,  455,
+          423,32767,32767,32767,  425,32767,32767,32767,32767,32767,
+        32767,32767,32767,  494,32767,32767,32767,32767,32767,  507,
+          412,32767,  404,32767,32767,  216,  218,  165,32767,32767,
+          480,32767,32767,32767,32767,32767,  512,  338,32767,32767,
+          114,32767,32767,32767,  549,32767,  507,32767,  114,32767,
+        32767,32767,32767,  351,  330,  331,  332,32767,32767,  511,
+          505,  464,  465,  466,  467,32767,  458,  459,  460,  463,
+        32767,32767,32767,32767,32767,32767,32767,32767,  169,  420,
+          426,  426,32767,32767,32767,32767,  169,32767,32767,32767,
+        32767,32767,  169,32767,32767,32767,  510,  509,  169,32767,
+          405,  488,  169,  182,  180,  180,32767,  202,  202,32767,
+        32767,  184,  481,  500,32767,  184,  169,32767,  393,  171,
+          488,32767,32767,  234,32767,  234,32767,  393,  169,  234,
+        32767,32767,  234,32767,  406,  430,32767,32767,32767,32767,
+        32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
+        32767,  372,  373,  483,  496,32767,  497,32767,  404,  336,
+          337,  339,  316,32767,  318,  362,  363,  364,  365,  366,
+          367,  368,  370,32767,  410,32767,  413,32767,32767,32767,
+          251,32767,  547,32767,32767,  300,  547,32767,32767,32767,
+          541,32767,32767,  294,32767,32767,32767,32767,  247,32767,
+          167,32767,  531,32767,  548,32767,  505,32767,  335,32767,
+        32767,32767,32767,32767,32767,32767,32767,32767,  506,32767,
+        32767,32767,32767,  223,32767,  443,32767,  114,32767,32767,
+        32767,  183,32767,32767,  298,  242,32767,32767,  540,32767,
+        32767,32767,32767,32767,32767,32767,32767,  112,32767,  168,
+        32767,32767,32767,  185,32767,32767,  505,32767,32767,32767,
+        32767,32767,32767,32767,  289,32767,32767,32767,32767,32767,
+        32767,32767,  505,32767,32767,  227,32767,32767,32767,32767,
+        32767,32767,32767,32767,32767,  406,32767,  270,32767,32767,
+        32767,32767,32767,32767,32767,32767,32767,32767,32767,  125,
+          125,    3,  125,  125,  254,    3,  254,  125,  254,  254,
+          125,  125,  125,  125,  125,  125,  125,  125,  125,  125,
+          210,  213,  202,  202,  162,  125,  125,  262
     );
 
     protected $goto = array(
-          165,  138,  138,  138,  165,  143,  146,  139,  140,  141,
+          165,  139,  139,  139,  165,  143,  146,  140,  141,  142,
           148,  186,  167,  162,  162,  162,  162,  143,  143,  164,
           164,  164,  164,  164,  164,  164,  164,  164,  164,  164,
-          158,  159,  160,  161,  183,  137,  184,  501,  502,  365,
-          503,  507,  508,  509,  510,  511,  512,  513,  514,  977,
-          142,  163,  144,  145,  147,  170,  175,  185,  202,  251,
+          137,  158,  159,  160,  161,  183,  138,  184,  489,  490,
+          367,  491,  495,  496,  497,  498,  499,  500,  501,  502,
+          959,  163,  144,  145,  147,  170,  175,  185,  203,  251,
           254,  256,  258,  260,  261,  262,  263,  264,  265,  273,
-          274,  275,  276,  288,  289,  317,  318,  319,  381,  382,
-          383,  557,  187,  188,  189,  190,  191,  192,  193,  194,
+          274,  275,  276,  299,  300,  324,  325,  326,  384,  385,
+          386,  538,  187,  188,  189,  190,  191,  192,  193,  194,
           195,  196,  197,  198,  199,  200,  149,  150,  151,  166,
-          152,  168,  153,  203,  169,  154,  155,  156,  204,  157,
-          135,  634,  575,  760,  575,  575,  575,  575,  575,  575,
-          575,  575,  575,  575,  575,  575,  575,  575,  575,  575,
-          575,  575,  575,  575,  575,  575,  575,  575,  575,  575,
-          575,  575,  575,  575,  575,  575,  575,  575,  575,  575,
-          575,  575,  575,  575,  575,  575,  575, 1116,  766, 1116,
-         1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116,
-         1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116,
-         1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116,
-         1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116,
-         1116, 1116,  505,  505,  505,  505,  505,  505,  516,  642,
-          516,  767,  505,  505,  505,  505,  505,  505,  505,  505,
-          505,  505,  517,  797,  517,  898,  898, 1207, 1207,  531,
-          589,  617,  862,  862,  862,  862,  173,  857,  863, 1092,
-         1091,  176,  177,  178,  390,  391,  392,  393,  172,  201,
-          205,  207,  255,  257,  259,  266,  267,  268,  269,  270,
-          271,  277,  278,  279,  280,  290,  291,  320,  321,  322,
-          396,  397,  398,  399,  174,  179,  252,  253,  180,  181,
-          182,  389,  619,  550,  550,  582,  546,  598,  765,  613,
-          614,  548,  548,  504,  506,  537,  554,  583,  586,  596,
-          603,  884,  866,  864,  866,  668,  828,  519,  893,  888,
-          574,  344,  574,  574,  574,  574,  574,  574,  574,  574,
-          574,  574,  574,  574,  574,  574,  574,  574,  574,  574,
-          574,  574,  574,  574,  574,  574,  574,  574,  574,  574,
-          574,  574,  574,  574,  574,  574,  574,  574,  574,  574,
-          574,  574,  574,  574,  574,  559,  560,  561,  562,  563,
-          564,  565,  566,  568,  599,  522,  558,  330,  315, 1219,
-         1219,  530,  592,  595,  640,  527,  527,  527,  868,  527,
-          600,  347,  406,  530,  530, 1219,  440,  440,  440,  440,
-          440,  440,  545,  527,  551,  954,  440,  440,  440,  440,
-          440,  440,  440,  440,  440,  440, 1081, 1211, 1081,  905,
-          905,  905,  905,    3,    4,  623,  905,  955,  626,  556,
-          905,  363, 1185,  581, 1185,  916,  371,  371,  371,  366,
-         1081, 1081, 1081, 1081,  790, 1081, 1081,  371,  371, 1184,
-          607, 1184, 1177,  371, 1165,  471, 1201, 1201, 1201,  527,
-          527,  371, 1233,  544,  576,  527,  527,  618, 1074,  527,
-         1204,  790,  790,  378, 1025,  922,  524,  922,  518,  902,
-          518,  911,  350, 1183,  975,  400,  528,  543,  786,  669,
-          570,  372,  376,  920,  604,  784,  555,  895,  624,  625,
-          891,  629,  630,  637,  639,  644,  646,  453,  455,  947,
-          645,  673, 1097,  404, 1117,  627,  945, 1199, 1199, 1199,
-         1035,   19,   15,  359, 1218, 1218, 1067,  872,  783,  783,
-          794,  963,  791,  791,  791,  793, 1072,  925,  782,  456,
-         1218,  569,  345,  346,  360,  524, 1077, 1078, 1221, 1162,
-         1074,  535,   23,  587,  469,  547,    0,  615,  373,  373,
-          373,    0,    0, 1075, 1176, 1075,    0,    0,  542,    0,
-          460,    0, 1076,    0,    0,    0,    0,    0,    0,    0,
-            0,   13,    0,    0,    0,  373,    0,    0,  622,  388,
-            0,    0,    0, 1073,  631,    0,    0,    0,    0,    0,
-            0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-            0,    0,    0,    0,    0,    0,    0,  521,  541,    0,
-            0,    0,    0,    0,    0,    0,    0,    0,    0,  521,
-            0,  541,    0,    0,    0,    0,    0,  536,  520,    0,
-          525,  443,    0,  445,    0,    0,    0,    0,    0,    0,
-            0,    0,    0,    0,    0,    0,    0,    0,  789, 1226
+          152,  168,  153,  204,  169,  154,  155,  156,  205,  157,
+          135,  616,  556,  574,  578,  622,  624,  556,  556,  556,
+          556,  556,  556,  556,  556,  556,  556,  556,  556,  556,
+          556,  556,  556,  556,  556,  556,  556,  556,  556,  556,
+          556,  556,  556,  556,  556,  556,  556,  556,  556,  556,
+          556,  556,  556,  556,  556,  556,  556,  556,  556,  556,
+         1099,  515,  345,  571,  600, 1099, 1099, 1099, 1099, 1099,
+         1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099,
+         1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099,
+         1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099,
+         1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099,  504, 1202,
+         1202, 1075, 1074,  504,  540,  541,  542,  543,  544,  545,
+          546,  547,  549,  582,    3,    4,  173, 1202,  844,  844,
+          844,  844,  839,  845,  176,  177,  178,  391,  392,  393,
+          394,  172,  201,  206,  250,  255,  257,  259,  266,  267,
+          268,  269,  270,  271,  277,  278,  279,  280,  301,  302,
+          327,  328,  329,  396,  397,  398,  399,  174,  179,  252,
+          253,  180,  181,  182,  493,  493,  750,  493,  493,  493,
+          493,  493,  493,  493,  493,  493,  493,  493,  493,  493,
+          493,  505,  929,  442,  444,  627,  505,  751,  779, 1100,
+          610,  927,  880,  880,  765, 1190, 1190, 1168,  555,  775,
+          764,  743, 1168,  555,  555,  555,  555,  555,  555,  555,
+          555,  555,  555,  555,  555,  555,  555,  555,  555,  555,
+          555,  555,  555,  555,  555,  555,  555,  555,  555,  555,
+          555,  555,  555,  555,  555,  555,  555,  555,  555,  555,
+          555,  555,  555,  555,  555,  555,  390,  602,  746,  532,
+          532,  564,  528,  530,  530,  492,  494,  520,  536,  565,
+          568,  579,  586,  810,  606,  506,  346,  347,  609,  850,
+          506,  365,  537,  746,  533,  746,  563,  430,  430,  375,
+          430,  430,  430,  430,  430,  430,  430,  430,  430,  430,
+          430,  430,  430,  430, 1063,  581,  957,  596,  597, 1063,
+          887,  887,  887,  887, 1160,  887,  887, 1182, 1182, 1182,
+          376,  376,  376,  749, 1063, 1063, 1063, 1063, 1063, 1063,
+          334, 1056,  317,  374,  374,  374,  866,  848,  846,  848,
+          650,  461,  507,  875,  870,  376, 1194,  368,  374,  389,
+          374,  898,  374, 1080,  583,  348,  404,  374, 1216,  590,
+          601, 1017,   19,   15,  361, 1148, 1187,  525,  936,  904,
+          510,  526,  904,  651,  551,  381, 1201, 1201,  587, 1007,
+          550,  877,  607,  608,  873,  612,  613,  619,  621,  626,
+          628,   23,  884,  937, 1201,  336,  598, 1059, 1060, 1204,
+          378, 1056,  557,  539,  893,  768,  766,  379,  514,  902,
+          509,  524,  655, 1057, 1159, 1057,  776,  509, 1167,  524,
+          514,  514, 1058, 1167, 1049,  907,  508, 1054,  511,  433,
+          434,  510, 1184, 1184, 1184,  854,  445,  945,  569, 1145,
+          459,  362,    0,    0,  773, 1209,    0,  518,    0,  519,
+            0,  529,    0,    0,    0,    0,    0, 1166,    0,    0,
+            0,  771,    0,    0,    0,  449,    0,    0,    0,    0,
+            0,    0,  605,    0,    0,    0,    0,   13, 1055,  614
     );
 
     protected $gotoCheck = array(
@@ -719,96 +712,89 @@ class Php5 extends \PhpParser\ParserAbstract
            42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
            42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
            42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
-           42,   56,   66,    5,   66,   66,   66,   66,   66,   66,
+           42,   56,   66,   59,   59,   59,    8,   66,   66,   66,
            66,   66,   66,   66,   66,   66,   66,   66,   66,   66,
            66,   66,   66,   66,   66,   66,   66,   66,   66,   66,
            66,   66,   66,   66,   66,   66,   66,   66,   66,   66,
-           66,   66,   66,   66,   66,   66,   66,  124,   14,  124,
-          124,  124,  124,  124,  124,  124,  124,  124,  124,  124,
+           66,   66,   66,   66,   66,   66,   66,   66,   66,   66,
+          124,   99,   69,   39,   39,  124,  124,  124,  124,  124,
           124,  124,  124,  124,  124,  124,  124,  124,  124,  124,
           124,  124,  124,  124,  124,  124,  124,  124,  124,  124,
           124,  124,  124,  124,  124,  124,  124,  124,  124,  124,
-          124,  124,  115,  115,  115,  115,  115,  115,   66,    8,
-           66,   15,  115,  115,  115,  115,  115,  115,  115,  115,
-          115,  115,  115,   28,  115,   74,   74,   74,   74,   99,
-           39,   39,   66,   66,   66,   66,   26,   66,   66,  122,
-          122,   26,   26,   26,   26,   26,   26,   26,   26,   26,
+          124,  124,  124,  124,  124,  124,  124,  124,   66,  140,
+          140,  122,  122,   66,  108,  108,  108,  108,  108,  108,
+          108,  108,  108,  108,   29,   29,   26,  140,   66,   66,
+           66,   66,   66,   66,   26,   26,   26,   26,   26,   26,
            26,   26,   26,   26,   26,   26,   26,   26,   26,   26,
            26,   26,   26,   26,   26,   26,   26,   26,   26,   26,
            26,   26,   26,   26,   26,   26,   26,   26,   26,   26,
-           26,   50,   50,   50,   50,   50,   50,   64,   13,   64,
-           64,   50,   50,   50,   50,   50,   50,   50,   50,   50,
-           50,   13,   13,   13,   13,   13,   49,   13,   13,   13,
-           56,   69,   56,   56,   56,   56,   56,   56,   56,   56,
+           26,   26,   26,   26,  115,  115,   14,  115,  115,  115,
+          115,  115,  115,  115,  115,  115,  115,  115,  115,  115,
+          115,  115,    7,    7,    7,    7,  115,   15,   28,    7,
+            7,    7,   74,   74,   22,   74,   74,  116,   56,   22,
+           22,    5,  116,   56,   56,   56,   56,   56,   56,   56,
            56,   56,   56,   56,   56,   56,   56,   56,   56,   56,
            56,   56,   56,   56,   56,   56,   56,   56,   56,   56,
            56,   56,   56,   56,   56,   56,   56,   56,   56,   56,
-           56,   56,   56,   56,   56,  108,  108,  108,  108,  108,
-          108,  108,  108,  108,  108,   10,   46,  123,  123,  140,
-          140,   46,   59,   59,   59,   10,   10,   10,   32,   10,
-           67,   67,   67,   46,   46,  140,   56,   56,   56,   56,
-           56,   56,   10,   10,  107,   95,   56,   56,   56,   56,
-           56,   56,   56,   56,   56,   56,   56,  138,   56,   56,
-           56,   56,   56,   29,   29,   60,   56,   95,   60,    2,
-           56,   60,  116,    2,  116,   81,   12,   12,   12,   45,
-           56,   56,   56,   56,   22,   56,   56,   12,   12,  117,
-          125,  117,   79,   12,  129,   56,  117,  117,  117,   10,
-           10,   12,   12,   10,   10,   10,   10,   48,   79,   10,
-          136,   22,   22,   47,  100,   12,   12,   12,  120,   76,
-          120,   78,   17,  117,   99,   21,   10,   31,   24,   31,
-           31,   11,   16,   82,   31,   23,   10,   31,   31,   31,
-           31,   31,   31,   31,   31,   31,   31,    7,    7,    7,
-            7,   71,   33,   20,    7,    7,    7,    8,    8,    8,
-           33,   33,   33,   33,  139,  139,  111,   68,   22,   22,
-           25,   97,   22,   22,   22,   22,  113,   83,   22,   62,
-          139,   33,   69,   69,   57,   12,   79,   79,  139,  128,
-           79,   57,   33,   63,  106,   57,   -1,   33,  121,  121,
-          121,   -1,   -1,   79,   79,   79,   -1,   -1,    8,   -1,
-           57,   -1,   79,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-           -1,   57,   -1,   -1,   -1,  121,   -1,   -1,   12,  121,
-           -1,   -1,   -1,   12,   12,   -1,   -1,   -1,   -1,   -1,
-           -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-           -1,   -1,   -1,   -1,   -1,   -1,   -1,    8,    8,   -1,
-           -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,    8,
-           -1,    8,   -1,   -1,   -1,   -1,   -1,   99,    8,   -1,
-            8,    8,   -1,    8,   -1,   -1,   -1,   -1,   -1,   -1,
-           -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,    8,    8
+           56,   56,   56,   56,   56,   56,   50,   50,   10,   50,
+           50,   50,   50,   50,   50,   50,   50,   50,   50,   50,
+           50,   50,   50,   49,   60,  120,   69,   69,   60,   32,
+          120,   60,    2,   10,  107,   10,    2,   56,   56,   10,
+           56,   56,   56,   56,   56,   56,   56,   56,   56,   56,
+           56,   56,   56,   56,   56,   64,   99,   64,   64,   56,
+           56,   56,   56,   56,   79,   56,   56,    8,    8,    8,
+          121,  121,  121,   13,   56,   56,   56,   56,   56,   56,
+          123,   79,  123,   12,   12,   12,   13,   13,   13,   13,
+           13,   56,   13,   13,   13,  121,  138,   45,   12,  121,
+           12,   81,   12,   33,   67,   67,   67,   12,   12,  125,
+           48,   33,   33,   33,   33,  129,  136,    8,   95,   12,
+           12,   31,   12,   31,   31,   47,  139,  139,   31,  100,
+           33,   31,   31,   31,   31,   31,   31,   31,   31,   31,
+           31,   33,   76,   95,  139,   17,   33,   79,   79,  139,
+           11,   79,   11,   46,   78,   24,   23,   16,   46,   82,
+            8,    8,   71,   79,   79,   79,   25,    8,  117,    8,
+           46,   46,   79,  117,  111,   83,    8,  113,    8,    8,
+            8,   12,  117,  117,  117,   68,   62,   97,   63,  128,
+          106,   57,   -1,   -1,    8,    8,   -1,   57,   -1,   99,
+           -1,   57,   -1,   -1,   -1,   -1,   -1,  117,   -1,   -1,
+           -1,    8,   -1,   -1,   -1,   57,   -1,   -1,   -1,   -1,
+           -1,   -1,   12,   -1,   -1,   -1,   -1,   57,   12,   12
     );
 
     protected $gotoBase = array(
-            0,    0, -230,    0,    0,  102,    0,  492,  198,    0,
-           42,  144,  113,  286,  156,  209,  132,  149,    0,    0,
-           95,  141,  111,  134,  143,   99,   30,    0,  213, -260,
-            0, -171,  358,   84,    0,    0,    0,    0,    0,  192,
-            0,    0,  -24,    0,    0,  389,  342,  170,  174,  288,
-           -1,    0,    0,    0,    0,    0,  104,  103,    0,   66,
-          -51,    0,   83,   87, -367,    0,  -94,   53,   94, -138,
-            0,  139,    0,    0,  -57,    0,  157,    0,  155,  100,
-            0,  397,  129,  105,    0,    0,    0,    0,    0,    0,
-            0,    0,    0,    0,    0,  114,    0,   97,    0,  188,
-          160,    0,    0,    0,    0,    0,   77,  368,  311,    0,
-            0,   96,    0,  101,    0,  -80,  120,  137,    0,    0,
-          166,  239,  -71,   43,  -49,  231,    0,    0,   78,  234,
-            0,    0,    0,    0,    0,    0,  175,    0,  380,  200,
-           55,    0,    0
+            0,    0, -249,    0,    0,  300,    0,  287,  105,    0,
+           47,  164,  118,  421,  274,  295,  171,  184,    0,    0,
+            0,    0,  -49,  168,  172,  104,   24,    0,  288, -431,
+            0, -159,  359,   44,    0,    0,    0,    0,    0,  125,
+            0,    0,  -24,    0,    0,  407,  479,  186,  178,  355,
+           75,    0,    0,    0,    0,    0,  106,  119,    0, -192,
+          -81,    0,  101,   93, -231,    0,  -90,  135,  121, -276,
+            0,  148,    0,    0,   21,    0,  183,    0,  194,   71,
+            0,  423,  155,  112,    0,    0,    0,    0,    0,    0,
+            0,    0,    0,    0,    0,  185,    0,  122,    0,  120,
+          176,    0,    0,    0,    0,    0,   83,  358,  170,    0,
+            0,  113,    0,  111,    0,   -7,    9,  220,    0,    0,
+           77,  108, -102,  100,  -42,  251,    0,    0,   89,  256,
+            0,    0,    0,    0,    0,    0,  181,    0,  419,  160,
+         -107,    0,    0
     );
 
     protected $gotoDefault = array(
-        -32768,  473,  677,    2,  678,  750,  758,  610,  487,  643,
-          488,  523, 1195,  803,  804,  805,  368,  414,  489,  367,
-          401,  394,  792,  785,  787,  795,  171,  402,  798,    1,
-          800,  529,  836, 1026,  355,  808,  356,  602,  810,  539,
-          812,  813,  136,  369,  370,  540,  490,  377,  590,  827,
-          272,  374,  829,  357,  830,  839,  358,  470,  465,  571,
-          621,  435,  452,  584,  578,  549, 1089,  579,  871,  343,
-          879,  674,  887,  890,  491,  572,  901,  457,  909, 1102,
-          384,  915,  921,  926,  281,  929,  415,  403,  597,  934,
-          935,    7,  939,  635,  636,    8,  303,  962,  611,  976,
-          420, 1045, 1047,  492,  493,  533,  464,  515,  538,  494,
-         1068,  446,  405, 1071,  495,  496,  436,  437, 1086,  349,
-         1170,  348,  454,  314, 1157,  593, 1121,  461, 1210, 1166,
-          342,  497,  498,  364, 1189,  379, 1205,  441, 1212, 1220,
-          338,  553,  580
+        -32768,  463,  659,    2,  660,  733,  741,  593,  477,  625,
+          577,  370, 1178,  785,  786,  787,  371,  358,  478,  369,
+          400,  395,  774,  767,  769,  777,  171,  401,  780,    1,
+          782,  513,  818, 1008,  355,  790,  356,  585,  792,  522,
+          794,  795,  136,  372,  373,  523,  479,  380,  572,  809,
+          272,  377,  811,  357,  812,  821,  360,  460,  454,  552,
+          604,  425,  441,  566,  560,  531, 1072,  561,  853,  344,
+          861,  656,  869,  872,  480,  553,  883,  446,  891, 1085,
+          387,  897,  903,  908,  283,  911,  407,  402,  580,  916,
+          917,    5,  921,  617,  618,    8,  308,  944,  594,  958,
+          411, 1027, 1029,  481,  482,  517,  453,  503,  521,  483,
+         1050,  435,  403, 1053,  484,  485,  426,  427, 1069,  350,
+         1153,  349,  443,  316, 1140,  575, 1104,  450, 1193, 1149,
+          343,  486,  487,  366, 1172,  382, 1188,  431, 1195, 1203,
+          339,  535,  562
     );
 
     protected $ruleToNonTerminal = array(
@@ -819,10 +805,10 @@ class Php5 extends \PhpParser\ParserAbstract
             5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
             5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
             5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
-            5,    5,    5,    5,    6,    6,    6,    6,    6,    6,
-            6,    7,    7,    8,    9,   10,   10,   11,   12,    4,
-            4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
-           17,   17,   18,   18,   18,   18,   20,   20,   16,   16,
+            5,    5,    5,    5,    5,    6,    6,    6,    6,    6,
+            6,    6,    7,    7,    8,    9,   10,   10,   11,   11,
+           12,    4,    4,    4,    4,    4,    4,    4,    4,    4,
+            4,    4,   17,   17,   18,   18,   20,   20,   16,   16,
            21,   21,   22,   22,   23,   23,   24,   24,   19,   19,
            25,   27,   27,   28,   29,   29,   31,   30,   30,   30,
            30,   32,   32,   32,   32,   32,   32,   32,   32,   32,
@@ -852,22 +838,22 @@ class Php5 extends \PhpParser\ParserAbstract
            42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
            33,   33,   46,   46,  103,  103,  104,  104,  104,  104,
           110,   99,   99,  106,  106,  112,  112,  113,  114,  114,
-          114,  114,  114,  114,   66,   66,   56,   56,   56,  100,
-          100,  118,  118,  115,  115,  119,  119,  119,  119,  101,
-          101,  101,  105,  105,  105,  111,  111,  124,  124,  124,
+          114,  114,  114,  114,   66,   66,   56,   56,   56,   56,
+          100,  100,  118,  118,  115,  115,  119,  119,  119,  119,
+          101,  101,  101,  105,  105,  105,  111,  111,  124,  124,
           124,  124,  124,  124,  124,  124,  124,  124,  124,  124,
-           26,   26,   26,   26,   26,   26,  126,  126,  126,  126,
+          124,   26,   26,   26,   26,   26,   26,  126,  126,  126,
+          126,  126,  126,  126,  126,  126,  126,  126,  126,  126,
           126,  126,  126,  126,  126,  126,  126,  126,  126,  126,
           126,  126,  126,  126,  126,  126,  126,  126,  126,  126,
-          126,  126,  126,  126,  126,  126,  126,  126,  126,  109,
-          109,  102,  102,  102,  102,  125,  125,  128,  128,  127,
-          127,  129,  129,   50,   50,   50,   50,  131,  131,  130,
-          130,  130,  130,  130,  132,  132,  117,  117,  120,  120,
-          116,  116,  134,  133,  133,  133,  133,  121,  121,  121,
-          121,  108,  108,  122,  122,  122,  122,   74,  135,  135,
-          136,  136,  136,  107,  107,  137,  137,  138,  138,  138,
-          138,  138,  123,  123,  123,  123,  140,  141,  139,  139,
-          139,  139,  139,  139,  139,  142,  142,  142
+          109,  109,  102,  102,  102,  102,  125,  125,  128,  128,
+          127,  127,  129,  129,   50,   50,   50,   50,  131,  131,
+          130,  130,  130,  130,  130,  132,  132,  117,  117,  120,
+          120,  116,  116,  134,  133,  133,  133,  133,  121,  121,
+          121,  121,  108,  108,  122,  122,  122,  122,   74,  135,
+          135,  136,  136,  136,  107,  107,  137,  137,  138,  138,
+          138,  138,  138,  123,  123,  123,  123,  140,  141,  139,
+          139,  139,  139,  139,  139,  139,  142,  142,  142
     );
 
     protected $ruleToLength = array(
@@ -879,10 +865,10 @@ class Php5 extends \PhpParser\ParserAbstract
             1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
             1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
             1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-            1,    1,    1,    1,    1,    1,    3,    1,    1,    1,
-            1,    1,    1,    3,    5,    4,    3,    4,    2,    3,
-            1,    1,    7,    8,    6,    7,    3,    1,    3,    1,
-            3,    1,    1,    3,    1,    2,    1,    2,    3,    1,
+            1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+            1,    1,    1,    1,    1,    3,    5,    4,    3,    4,
+            2,    3,    1,    1,    7,    6,    3,    1,    3,    1,
+            3,    1,    1,    3,    1,    3,    1,    2,    3,    1,
             3,    3,    1,    3,    2,    0,    1,    1,    1,    1,
             1,    3,    5,    8,    3,    5,    9,    3,    2,    3,
             2,    3,    2,    3,    3,    3,    3,    1,    2,    2,
@@ -911,22 +897,22 @@ class Php5 extends \PhpParser\ParserAbstract
             2,    1,    1,    1,    3,    2,    1,    2,   10,   11,
             3,    3,    2,    4,    4,    3,    4,    4,    4,    4,
             7,    3,    2,    0,    4,    1,    3,    2,    2,    4,
-            6,    2,    2,    4,    1,    1,    1,    2,    3,    1,
-            1,    1,    1,    1,    1,    3,    3,    4,    4,    0,
-            2,    1,    0,    1,    1,    0,    1,    1,    1,    1,
-            1,    1,    1,    1,    1,    1,    1,    1,    3,    2,
-            1,    3,    1,    4,    3,    1,    3,    3,    3,    3,
+            6,    2,    2,    4,    1,    1,    1,    1,    1,    1,
+            1,    1,    1,    1,    1,    1,    3,    3,    4,    4,
+            0,    2,    1,    0,    1,    1,    0,    1,    1,    1,
+            1,    1,    1,    1,    1,    1,    1,    1,    1,    3,
+            2,    1,    3,    1,    4,    3,    1,    3,    3,    3,
             3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
-            3,    3,    3,    2,    2,    2,    2,    3,    3,    3,
-            3,    3,    3,    3,    3,    5,    4,    4,    3,    1,
-            3,    1,    1,    3,    3,    0,    2,    0,    1,    3,
-            1,    3,    1,    1,    1,    1,    1,    6,    4,    3,
-            4,    2,    4,    4,    1,    3,    1,    2,    1,    1,
-            4,    1,    1,    3,    6,    4,    4,    4,    4,    1,
-            4,    0,    1,    1,    3,    1,    1,    4,    3,    1,
-            1,    1,    0,    0,    2,    3,    1,    3,    1,    4,
-            2,    2,    2,    2,    1,    2,    1,    1,    1,    4,
-            3,    3,    3,    6,    3,    1,    1,    1
+            3,    3,    3,    3,    2,    2,    2,    2,    3,    3,
+            3,    3,    3,    3,    3,    3,    5,    4,    4,    3,
+            1,    3,    1,    1,    3,    3,    0,    2,    0,    1,
+            3,    1,    3,    1,    1,    1,    1,    1,    6,    4,
+            3,    4,    2,    4,    4,    1,    3,    1,    2,    1,
+            1,    4,    1,    1,    3,    6,    4,    4,    4,    4,
+            1,    4,    0,    1,    1,    3,    1,    1,    4,    3,
+            1,    1,    1,    0,    0,    2,    3,    1,    3,    1,
+            4,    2,    2,    2,    2,    1,    2,    1,    1,    1,
+            4,    3,    3,    3,    6,    3,    1,    1,    1
     );
 
     protected function initReduceCallbacks() {
@@ -944,7 +930,7 @@ protected function initReduceCallbacks() {
                  $this->semValue = array();
             },
             4 => function ($stackPos) {
-                 $startAttributes = $this->lookaheadStartAttributes; if (isset($startAttributes['comments'])) { $nop = new Stmt\Nop($this->createZeroLengthAttributes($startAttributes)); } else { $nop = null; };
+                 $startAttributes = $this->lookaheadStartAttributes; if (isset($startAttributes['comments'])) { $nop = new Stmt\Nop($this->createCommentNopAttributes($startAttributes['comments'])); } else { $nop = null; };
             if ($nop !== null) { $this->semStack[$stackPos-(1-1)][] = $nop; } $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             5 => function ($stackPos) {
@@ -1176,7 +1162,7 @@ protected function initReduceCallbacks() {
                 $this->semValue = $this->semStack[$stackPos];
             },
             81 => function ($stackPos) {
-                 $this->semValue = new Node\Identifier($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                $this->semValue = $this->semStack[$stackPos];
             },
             82 => function ($stackPos) {
                  $this->semValue = new Node\Identifier($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
@@ -1188,73 +1174,73 @@ protected function initReduceCallbacks() {
                  $this->semValue = new Node\Identifier($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             85 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = new Node\Identifier($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             86 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             87 => function ($stackPos) {
                  $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             88 => function ($stackPos) {
-                 $this->semValue = new Expr\Variable(substr($this->semStack[$stackPos-(1-1)], 1), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             89 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Name(substr($this->semStack[$stackPos-(1-1)], 1), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             90 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Expr\Variable(substr($this->semStack[$stackPos-(1-1)], 1), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             91 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             92 => function ($stackPos) {
-                 $this->semValue = new Stmt\HaltCompiler($this->lexer->handleHaltCompiler(), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             93 => function ($stackPos) {
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+            },
+            94 => function ($stackPos) {
+                 $this->semValue = new Stmt\HaltCompiler($this->lexer->handleHaltCompiler(), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+            },
+            95 => function ($stackPos) {
                  $this->semValue = new Stmt\Namespace_($this->semStack[$stackPos-(3-2)], null, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             $this->semValue->setAttribute('kind', Stmt\Namespace_::KIND_SEMICOLON);
             $this->checkNamespace($this->semValue);
             },
-            94 => function ($stackPos) {
+            96 => function ($stackPos) {
                  $this->semValue = new Stmt\Namespace_($this->semStack[$stackPos-(5-2)], $this->semStack[$stackPos-(5-4)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
             $this->semValue->setAttribute('kind', Stmt\Namespace_::KIND_BRACED);
             $this->checkNamespace($this->semValue);
             },
-            95 => function ($stackPos) {
+            97 => function ($stackPos) {
                  $this->semValue = new Stmt\Namespace_(null, $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             $this->semValue->setAttribute('kind', Stmt\Namespace_::KIND_BRACED);
             $this->checkNamespace($this->semValue);
             },
-            96 => function ($stackPos) {
-                 $this->semValue = new Stmt\Use_($this->semStack[$stackPos-(3-2)], Stmt\Use_::TYPE_NORMAL, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
-            },
-            97 => function ($stackPos) {
-                 $this->semValue = new Stmt\Use_($this->semStack[$stackPos-(4-3)], $this->semStack[$stackPos-(4-2)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
-            },
             98 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = new Stmt\Use_($this->semStack[$stackPos-(3-2)], Stmt\Use_::TYPE_NORMAL, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             99 => function ($stackPos) {
-                 $this->semValue = new Stmt\Const_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Stmt\Use_($this->semStack[$stackPos-(4-3)], $this->semStack[$stackPos-(4-2)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             100 => function ($stackPos) {
-                 $this->semValue = Stmt\Use_::TYPE_FUNCTION;
+                 $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             101 => function ($stackPos) {
-                 $this->semValue = Stmt\Use_::TYPE_CONSTANT;
+                 $this->semValue = new Stmt\Const_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             102 => function ($stackPos) {
-                 $this->semValue = new Stmt\GroupUse(new Name($this->semStack[$stackPos-(7-3)], $this->startAttributeStack[$stackPos-(7-3)] + $this->endAttributeStack[$stackPos-(7-3)]), $this->semStack[$stackPos-(7-6)], $this->semStack[$stackPos-(7-2)], $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes);
+                 $this->semValue = Stmt\Use_::TYPE_FUNCTION;
             },
             103 => function ($stackPos) {
-                 $this->semValue = new Stmt\GroupUse(new Name($this->semStack[$stackPos-(8-4)], $this->startAttributeStack[$stackPos-(8-4)] + $this->endAttributeStack[$stackPos-(8-4)]), $this->semStack[$stackPos-(8-7)], $this->semStack[$stackPos-(8-2)], $this->startAttributeStack[$stackPos-(8-1)] + $this->endAttributes);
+                 $this->semValue = Stmt\Use_::TYPE_CONSTANT;
             },
             104 => function ($stackPos) {
-                 $this->semValue = new Stmt\GroupUse(new Name($this->semStack[$stackPos-(6-2)], $this->startAttributeStack[$stackPos-(6-2)] + $this->endAttributeStack[$stackPos-(6-2)]), $this->semStack[$stackPos-(6-5)], Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes);
+                 $this->semValue = new Stmt\GroupUse($this->semStack[$stackPos-(7-3)], $this->semStack[$stackPos-(7-6)], $this->semStack[$stackPos-(7-2)], $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes);
             },
             105 => function ($stackPos) {
-                 $this->semValue = new Stmt\GroupUse(new Name($this->semStack[$stackPos-(7-3)], $this->startAttributeStack[$stackPos-(7-3)] + $this->endAttributeStack[$stackPos-(7-3)]), $this->semStack[$stackPos-(7-6)], Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes);
+                 $this->semValue = new Stmt\GroupUse($this->semStack[$stackPos-(6-2)], $this->semStack[$stackPos-(6-5)], Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes);
             },
             106 => function ($stackPos) {
                  $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
@@ -1281,10 +1267,10 @@ protected function initReduceCallbacks() {
                  $this->semValue = new Stmt\UseUse($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); $this->checkUseUse($this->semValue, $stackPos-(3-3));
             },
             114 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Stmt\UseUse($this->semStack[$stackPos-(1-1)], null, Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); $this->checkUseUse($this->semValue, $stackPos-(1-1));
             },
             115 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-2)];
+                 $this->semValue = new Stmt\UseUse($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); $this->checkUseUse($this->semValue, $stackPos-(3-3));
             },
             116 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)]; $this->semValue->type = Stmt\Use_::TYPE_NORMAL;
@@ -1317,7 +1303,7 @@ protected function initReduceCallbacks() {
                  $this->semValue = array();
             },
             126 => function ($stackPos) {
-                 $startAttributes = $this->lookaheadStartAttributes; if (isset($startAttributes['comments'])) { $nop = new Stmt\Nop($this->createZeroLengthAttributes($startAttributes)); } else { $nop = null; };
+                 $startAttributes = $this->lookaheadStartAttributes; if (isset($startAttributes['comments'])) { $nop = new Stmt\Nop($this->createCommentNopAttributes($startAttributes['comments'])); } else { $nop = null; };
             if ($nop !== null) { $this->semStack[$stackPos-(1-1)][] = $nop; } $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             127 => function ($stackPos) {
@@ -1715,7 +1701,7 @@ protected function initReduceCallbacks() {
                  $this->semValue = array();
             },
             255 => function ($stackPos) {
-                 $startAttributes = $this->lookaheadStartAttributes; if (isset($startAttributes['comments'])) { $nop = new Stmt\Nop($this->createZeroLengthAttributes($startAttributes)); } else { $nop = null; };
+                 $startAttributes = $this->lookaheadStartAttributes; if (isset($startAttributes['comments'])) { $nop = new Stmt\Nop($this->createCommentNopAttributes($startAttributes['comments'])); } else { $nop = null; };
             if ($nop !== null) { $this->semStack[$stackPos-(1-1)][] = $nop; } $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             256 => function ($stackPos) {
@@ -2181,13 +2167,13 @@ protected function initReduceCallbacks() {
                  $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             407 => function ($stackPos) {
-                 $this->semValue = new Name\FullyQualified($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             408 => function ($stackPos) {
-                 $this->semValue = new Name\Relative($this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Name\FullyQualified(substr($this->semStack[$stackPos-(1-1)], 1), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             409 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Name\Relative(substr($this->semStack[$stackPos-(1-1)], 10), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             410 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
@@ -2205,243 +2191,243 @@ protected function initReduceCallbacks() {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             415 => function ($stackPos) {
-                 $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             416 => function ($stackPos) {
                  $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             417 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             418 => function ($stackPos) {
                  $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             419 => function ($stackPos) {
-                 $this->semValue = null;
+                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             420 => function ($stackPos) {
                  $this->semValue = null;
             },
             421 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = null;
             },
             422 => function ($stackPos) {
-                 $this->semValue = array();
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             423 => function ($stackPos) {
-                 $this->semValue = array(new Scalar\EncapsedStringPart(Scalar\String_::parseEscapeSequences($this->semStack[$stackPos-(1-1)], '`', false), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes));
+                 $this->semValue = array();
             },
             424 => function ($stackPos) {
-                 foreach ($this->semStack[$stackPos-(1-1)] as $s) { if ($s instanceof Node\Scalar\EncapsedStringPart) { $s->value = Node\Scalar\String_::parseEscapeSequences($s->value, '`', false); } }; $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = array(new Scalar\EncapsedStringPart(Scalar\String_::parseEscapeSequences($this->semStack[$stackPos-(1-1)], '`', false), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes));
             },
             425 => function ($stackPos) {
-                 $this->semValue = array();
+                 foreach ($this->semStack[$stackPos-(1-1)] as $s) { if ($s instanceof Node\Scalar\EncapsedStringPart) { $s->value = Node\Scalar\String_::parseEscapeSequences($s->value, '`', false); } }; $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             426 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = array();
             },
             427 => function ($stackPos) {
-                 $this->semValue = $this->parseLNumber($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes, true);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             428 => function ($stackPos) {
-                 $this->semValue = new Scalar\DNumber(Scalar\DNumber::parse($this->semStack[$stackPos-(1-1)]), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = $this->parseLNumber($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes, true);
             },
             429 => function ($stackPos) {
-                 $attrs = $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes; $attrs['kind'] = ($this->semStack[$stackPos-(1-1)][0] === "'" || ($this->semStack[$stackPos-(1-1)][1] === "'" && ($this->semStack[$stackPos-(1-1)][0] === 'b' || $this->semStack[$stackPos-(1-1)][0] === 'B')) ? Scalar\String_::KIND_SINGLE_QUOTED : Scalar\String_::KIND_DOUBLE_QUOTED);
-            $this->semValue = new Scalar\String_(Scalar\String_::parse($this->semStack[$stackPos-(1-1)], false), $attrs);
+                 $this->semValue = new Scalar\DNumber(Scalar\DNumber::parse($this->semStack[$stackPos-(1-1)]), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             430 => function ($stackPos) {
-                 $this->semValue = new Scalar\MagicConst\Line($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $attrs = $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes; $attrs['kind'] = ($this->semStack[$stackPos-(1-1)][0] === "'" || ($this->semStack[$stackPos-(1-1)][1] === "'" && ($this->semStack[$stackPos-(1-1)][0] === 'b' || $this->semStack[$stackPos-(1-1)][0] === 'B')) ? Scalar\String_::KIND_SINGLE_QUOTED : Scalar\String_::KIND_DOUBLE_QUOTED);
+            $this->semValue = new Scalar\String_(Scalar\String_::parse($this->semStack[$stackPos-(1-1)], false), $attrs);
             },
             431 => function ($stackPos) {
-                 $this->semValue = new Scalar\MagicConst\File($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Scalar\MagicConst\Line($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             432 => function ($stackPos) {
-                 $this->semValue = new Scalar\MagicConst\Dir($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Scalar\MagicConst\File($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             433 => function ($stackPos) {
-                 $this->semValue = new Scalar\MagicConst\Class_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Scalar\MagicConst\Dir($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             434 => function ($stackPos) {
-                 $this->semValue = new Scalar\MagicConst\Trait_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Scalar\MagicConst\Class_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             435 => function ($stackPos) {
-                 $this->semValue = new Scalar\MagicConst\Method($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Scalar\MagicConst\Trait_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             436 => function ($stackPos) {
-                 $this->semValue = new Scalar\MagicConst\Function_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Scalar\MagicConst\Method($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             437 => function ($stackPos) {
-                 $this->semValue = new Scalar\MagicConst\Namespace_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Scalar\MagicConst\Function_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             438 => function ($stackPos) {
-                 $this->semValue = $this->parseDocString($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-2)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes, $this->startAttributeStack[$stackPos-(3-3)] + $this->endAttributeStack[$stackPos-(3-3)], false);
+                 $this->semValue = new Scalar\MagicConst\Namespace_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             439 => function ($stackPos) {
-                 $this->semValue = $this->parseDocString($this->semStack[$stackPos-(2-1)], '', $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes, $this->startAttributeStack[$stackPos-(2-2)] + $this->endAttributeStack[$stackPos-(2-2)], false);
+                 $this->semValue = $this->parseDocString($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-2)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes, $this->startAttributeStack[$stackPos-(3-3)] + $this->endAttributeStack[$stackPos-(3-3)], false);
             },
             440 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = $this->parseDocString($this->semStack[$stackPos-(2-1)], '', $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes, $this->startAttributeStack[$stackPos-(2-2)] + $this->endAttributeStack[$stackPos-(2-2)], false);
             },
             441 => function ($stackPos) {
-                 $this->semValue = new Expr\ClassConstFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             442 => function ($stackPos) {
-                 $this->semValue = new Expr\ConstFetch($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\ClassConstFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             443 => function ($stackPos) {
-                 $this->semValue = new Expr\Array_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\ConstFetch($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             444 => function ($stackPos) {
-                 $this->semValue = new Expr\Array_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Array_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             445 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Expr\Array_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             446 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\BooleanOr($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             447 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\BooleanAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\BooleanOr($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             448 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\LogicalOr($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\BooleanAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             449 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\LogicalAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\LogicalOr($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             450 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\LogicalXor($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\LogicalAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             451 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\BitwiseOr($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\LogicalXor($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             452 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\BitwiseAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\BitwiseOr($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             453 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\BitwiseXor($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\BitwiseAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             454 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\Concat($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\BitwiseXor($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             455 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\Plus($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\Concat($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             456 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\Minus($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\Plus($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             457 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\Mul($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\Minus($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             458 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\Div($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\Mul($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             459 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\Mod($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\Div($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             460 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\ShiftLeft($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\Mod($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             461 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\ShiftRight($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\ShiftLeft($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             462 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\Pow($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\ShiftRight($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             463 => function ($stackPos) {
-                 $this->semValue = new Expr\UnaryPlus($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\Pow($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             464 => function ($stackPos) {
-                 $this->semValue = new Expr\UnaryMinus($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\UnaryPlus($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             465 => function ($stackPos) {
-                 $this->semValue = new Expr\BooleanNot($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\UnaryMinus($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             466 => function ($stackPos) {
-                 $this->semValue = new Expr\BitwiseNot($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BooleanNot($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             467 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\Identical($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BitwiseNot($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             468 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\NotIdentical($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\Identical($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             469 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\Equal($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\NotIdentical($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             470 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\NotEqual($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\Equal($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             471 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\Smaller($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\NotEqual($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             472 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\SmallerOrEqual($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\Smaller($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             473 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\Greater($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\SmallerOrEqual($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             474 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\GreaterOrEqual($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\Greater($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             475 => function ($stackPos) {
-                 $this->semValue = new Expr\Ternary($this->semStack[$stackPos-(5-1)], $this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-5)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\GreaterOrEqual($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             476 => function ($stackPos) {
-                 $this->semValue = new Expr\Ternary($this->semStack[$stackPos-(4-1)], null, $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Ternary($this->semStack[$stackPos-(5-1)], $this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-5)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
             },
             477 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Ternary($this->semStack[$stackPos-(4-1)], null, $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             478 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
+                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             479 => function ($stackPos) {
-                 $this->semValue = new Expr\ConstFetch($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(3-2)];
             },
             480 => function ($stackPos) {
-                 $this->semValue = new Expr\ClassConstFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\ConstFetch($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             481 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Expr\ClassConstFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             482 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             483 => function ($stackPos) {
-                 $attrs = $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes; $attrs['kind'] = Scalar\String_::KIND_DOUBLE_QUOTED;
-            foreach ($this->semStack[$stackPos-(3-2)] as $s) { if ($s instanceof Node\Scalar\EncapsedStringPart) { $s->value = Node\Scalar\String_::parseEscapeSequences($s->value, '"', true); } }; $this->semValue = new Scalar\Encapsed($this->semStack[$stackPos-(3-2)], $attrs);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             484 => function ($stackPos) {
-                 $this->semValue = $this->parseDocString($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-2)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes, $this->startAttributeStack[$stackPos-(3-3)] + $this->endAttributeStack[$stackPos-(3-3)], true);
+                 $attrs = $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes; $attrs['kind'] = Scalar\String_::KIND_DOUBLE_QUOTED;
+            foreach ($this->semStack[$stackPos-(3-2)] as $s) { if ($s instanceof Node\Scalar\EncapsedStringPart) { $s->value = Node\Scalar\String_::parseEscapeSequences($s->value, '"', true); } }; $this->semValue = new Scalar\Encapsed($this->semStack[$stackPos-(3-2)], $attrs);
             },
             485 => function ($stackPos) {
-                 $this->semValue = array();
+                 $this->semValue = $this->parseDocString($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-2)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes, $this->startAttributeStack[$stackPos-(3-3)] + $this->endAttributeStack[$stackPos-(3-3)], true);
             },
             486 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = array();
             },
             487 => function ($stackPos) {
-                $this->semValue = $this->semStack[$stackPos];
+                 $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             488 => function ($stackPos) {
                 $this->semValue = $this->semStack[$stackPos];
             },
             489 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                $this->semValue = $this->semStack[$stackPos];
             },
             490 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             491 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(3-3)], $this->semStack[$stackPos-(3-1)], false, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             492 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(1-1)], null, false, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(3-3)], $this->semStack[$stackPos-(3-1)], false, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             493 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(1-1)], null, false, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             494 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
@@ -2453,61 +2439,61 @@ protected function initReduceCallbacks() {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             497 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(6-2)], $this->semStack[$stackPos-(6-5)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             498 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(6-2)], $this->semStack[$stackPos-(6-5)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes);
             },
             499 => function ($stackPos) {
-                 $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             500 => function ($stackPos) {
-                 $this->semValue = new Expr\MethodCall($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             501 => function ($stackPos) {
-                 $this->semValue = new Expr\FuncCall($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\MethodCall($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             502 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\FuncCall($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             503 => function ($stackPos) {
                  $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             504 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             505 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             506 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = $this->semStack[$stackPos-(3-2)];
             },
             507 => function ($stackPos) {
-                 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             508 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             509 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             510 => function ($stackPos) {
-                 $this->semValue = new Expr\StaticPropertyFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             511 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Expr\StaticPropertyFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             512 => function ($stackPos) {
-                 $var = substr($this->semStack[$stackPos-(1-1)], 1); $this->semValue = \is_string($var) ? new Node\VarLikeIdentifier($var, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes) : $var;
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             513 => function ($stackPos) {
-                 $this->semValue = new Expr\StaticPropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $var = substr($this->semStack[$stackPos-(1-1)], 1); $this->semValue = \is_string($var) ? new Node\VarLikeIdentifier($var, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes) : $var;
             },
             514 => function ($stackPos) {
-                 $this->semValue = new Expr\StaticPropertyFetch($this->semStack[$stackPos-(6-1)], $this->semStack[$stackPos-(6-5)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\StaticPropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             515 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\StaticPropertyFetch($this->semStack[$stackPos-(6-1)], $this->semStack[$stackPos-(6-5)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes);
             },
             516 => function ($stackPos) {
                  $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
@@ -2519,120 +2505,123 @@ protected function initReduceCallbacks() {
                  $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             519 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             520 => function ($stackPos) {
-                 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             521 => function ($stackPos) {
-                 $this->semValue = null;
+                 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             522 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = null;
             },
             523 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             524 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             525 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = $this->semStack[$stackPos-(3-2)];
             },
             526 => function ($stackPos) {
-                 $this->semValue = new Expr\Error($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); $this->errorState = 2;
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             527 => function ($stackPos) {
-                 $this->semValue = new Expr\List_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Error($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); $this->errorState = 2;
             },
             528 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = new Expr\List_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             529 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             530 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(1-1)], null, false, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             531 => function ($stackPos) {
                  $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(1-1)], null, false, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             532 => function ($stackPos) {
-                 $this->semValue = null;
+                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(1-1)], null, false, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             533 => function ($stackPos) {
-                 $this->semValue = array();
+                 $this->semValue = null;
             },
             534 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = array();
             },
             535 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             536 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             537 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(3-3)], $this->semStack[$stackPos-(3-1)], false, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             538 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(1-1)], null, false, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(3-3)], $this->semStack[$stackPos-(3-1)], false, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             539 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(4-4)], $this->semStack[$stackPos-(4-1)], true, $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(1-1)], null, false, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             540 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(2-2)], null, true, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(4-4)], $this->semStack[$stackPos-(4-1)], true, $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             541 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(2-2)], null, false, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes, true, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(2-2)], null, true, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             542 => function ($stackPos) {
-                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(2-2)], null, false, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes, true, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             543 => function ($stackPos) {
                  $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             544 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             545 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)]);
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             546 => function ($stackPos) {
-                 $this->semValue = new Scalar\EncapsedStringPart($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = array($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)]);
             },
             547 => function ($stackPos) {
-                 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Scalar\EncapsedStringPart($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             548 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             549 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             550 => function ($stackPos) {
-                 $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             551 => function ($stackPos) {
-                 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             552 => function ($stackPos) {
                  $this->semValue = new Expr\Variable($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             553 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(6-2)], $this->semStack[$stackPos-(6-4)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             554 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
+                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(6-2)], $this->semStack[$stackPos-(6-4)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes);
             },
             555 => function ($stackPos) {
-                 $this->semValue = new Scalar\String_($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(3-2)];
             },
             556 => function ($stackPos) {
-                 $this->semValue = $this->parseNumString($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Scalar\String_($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             557 => function ($stackPos) {
+                 $this->semValue = $this->parseNumString($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+            },
+            558 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
         ];
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Parser/Php7.php b/vendor/nikic/php-parser/lib/PhpParser/Parser/Php7.php
index 75c8305fa0ad102e97c5c0fb72c0f188ca1ae9ed..cbfbd34aa2dcd8dbf44b52c7b828605b894035a1 100644
--- a/vendor/nikic/php-parser/lib/PhpParser/Parser/Php7.php
+++ b/vendor/nikic/php-parser/lib/PhpParser/Parser/Php7.php
@@ -17,21 +17,22 @@
  */
 class Php7 extends \PhpParser\ParserAbstract
 {
-    protected $tokenToSymbolMapSize = 394;
-    protected $actionTableSize = 964;
-    protected $gotoTableSize = 508;
+    protected $tokenToSymbolMapSize = 392;
+    protected $actionTableSize = 1162;
+    protected $gotoTableSize = 611;
 
-    protected $invalidSymbol = 159;
+    protected $invalidSymbol = 165;
     protected $errorSymbol = 1;
     protected $defaultAction = -32766;
     protected $unexpectedTokenRule = 32767;
 
-    protected $YY2TBLSTATE = 348;
-    protected $numNonLeafStates = 602;
+    protected $YY2TBLSTATE = 397;
+    protected $numNonLeafStates = 694;
 
     protected $symbolToName = array(
         "EOF",
         "error",
+        "T_THROW",
         "T_INCLUDE",
         "T_INCLUDE_ONCE",
         "T_EVAL",
@@ -127,6 +128,7 @@ class Php7 extends \PhpParser\ParserAbstract
         "T_ENDDECLARE",
         "T_AS",
         "T_SWITCH",
+        "T_MATCH",
         "T_ENDSWITCH",
         "T_CASE",
         "T_DEFAULT",
@@ -140,7 +142,6 @@ class Php7 extends \PhpParser\ParserAbstract
         "T_TRY",
         "T_CATCH",
         "T_FINALLY",
-        "T_THROW",
         "T_USE",
         "T_INSTEADOF",
         "T_GLOBAL",
@@ -161,6 +162,7 @@ class Php7 extends \PhpParser\ParserAbstract
         "T_EXTENDS",
         "T_IMPLEMENTS",
         "T_OBJECT_OPERATOR",
+        "T_NULLSAFE_OBJECT_OPERATOR",
         "T_LIST",
         "T_ARRAY",
         "T_CALLABLE",
@@ -180,566 +182,658 @@ class Php7 extends \PhpParser\ParserAbstract
         "T_DIR",
         "T_NS_SEPARATOR",
         "T_ELLIPSIS",
+        "T_NAME_FULLY_QUALIFIED",
+        "T_NAME_QUALIFIED",
+        "T_NAME_RELATIVE",
+        "T_ATTRIBUTE",
         "';'",
+        "']'",
         "'{'",
         "'}'",
         "'('",
         "')'",
         "'`'",
-        "']'",
         "'\"'",
         "'$'"
     );
 
     protected $tokenToSymbol = array(
-            0,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-          159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-          159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-          159,  159,  159,   54,  157,  159,  158,   53,   36,  159,
-          153,  154,   51,   48,    7,   49,   50,   52,  159,  159,
-          159,  159,  159,  159,  159,  159,  159,  159,   30,  150,
-           42,   15,   44,   29,   66,  159,  159,  159,  159,  159,
-          159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-          159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-          159,   68,  159,  156,   35,  159,  155,  159,  159,  159,
-          159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-          159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-          159,  159,  159,  151,   34,  152,   56,  159,  159,  159,
-          159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-          159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-          159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-          159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-          159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-          159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-          159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-          159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-          159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-          159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-          159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-          159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
-          159,  159,  159,  159,  159,  159,    1,    2,    3,    4,
-            5,    6,    8,    9,   10,   11,   12,   13,   14,   16,
+            0,  165,  165,  165,  165,  165,  165,  165,  165,  165,
+          165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
+          165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
+          165,  165,  165,   55,  163,  165,  164,   54,   37,  165,
+          160,  161,   52,   49,    8,   50,   51,   53,  165,  165,
+          165,  165,  165,  165,  165,  165,  165,  165,   31,  156,
+           43,   16,   45,   30,   67,  165,  165,  165,  165,  165,
+          165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
+          165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
+          165,   69,  165,  157,   36,  165,  162,  165,  165,  165,
+          165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
+          165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
+          165,  165,  165,  158,   35,  159,   57,  165,  165,  165,
+          165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
+          165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
+          165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
+          165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
+          165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
+          165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
+          165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
+          165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
+          165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
+          165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
+          165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
+          165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
+          165,  165,  165,  165,  165,  165,    1,    2,    3,    4,
+            5,    6,    7,    9,   10,   11,   12,   13,   14,   15,
            17,   18,   19,   20,   21,   22,   23,   24,   25,   26,
-           27,   28,   31,   32,   33,   37,   38,   39,   40,   41,
-           43,   45,   46,   47,   55,   57,   58,   59,   60,   61,
-           62,   63,   64,   65,   67,   69,   70,   71,   72,   73,
-           74,   75,   76,   77,   78,   79,   80,   81,   82,  159,
-          159,   83,   84,   85,   86,   87,   88,   89,   90,   91,
-           92,   93,   94,   95,   96,   97,   98,   99,  100,  101,
-          102,  103,  104,  105,  106,  107,  108,  109,  110,  111,
-          112,  113,  114,  115,  116,  117,  118,  119,  120,  121,
-          122,  123,  124,  125,  126,  127,  128,  129,  130,  131,
-          132,  133,  134,  135,  136,  137,  138,  139,  159,  159,
-          159,  159,  159,  159,  140,  141,  142,  143,  144,  145,
-          146,  147,  148,  149
+           27,   28,   29,   32,   33,   34,   38,   39,   40,   41,
+           42,   44,   46,   47,   48,   56,   58,   59,   60,   61,
+           62,   63,   64,   65,   66,   68,   70,   71,   72,   73,
+           74,   75,   76,   77,   78,   79,   80,   81,   82,   83,
+           84,   85,   86,   87,   88,   89,   90,   91,   92,   93,
+           94,   95,   96,   97,   98,   99,  100,  101,  102,  103,
+          104,  105,  106,  107,  108,  109,  110,  111,  112,  113,
+          114,  115,  116,  117,  118,  119,  120,  121,  122,  123,
+          124,  125,  126,  127,  128,  129,  130,  131,  132,  133,
+          134,  135,  136,  137,  138,  139,  140,  141,  142,  143,
+          144,  145,  146,  147,  148,  149,  150,  151,  152,  153,
+          154,  155
     );
 
     protected $action = array(
-          607,  608,  609,  610,  611,  685,  612,  613,  614,  650,
-          651,    0,   32,  103,  104,  105,  106,  107,  108,  109,
-          110,  111,  112,  113,  114,  115,-32767,-32767,-32767,-32767,
-           94,   95,   96,   97,   98,-32766,-32766,-32766,  687,  491,
-         -497,  904,  905,  906,  903,  902,  901,  904,  905,  906,
-          903,  902,  901,  615,  938,  940,-32766,    9,-32766,-32766,
-        -32766,-32766,-32766,-32766,-32766,-32766,-32766,  616,  617,  618,
-          619,  620,  621,  622,  333, 1104,  683,-32766,-32766,-32766,
-          846, 1103,  119,  623,  624,  625,  626,  627,  628,  629,
-          630,  631,  632,  633,  653,  654,  655,  656,  657,  645,
-          646,  647,  675,  648,  649,  634,  635,  636,  637,  638,
-          639,  640,  677,  678,  679,  680,  681,  682,  641,  642,
-          643,  644,  674,  665,  663,  664,  660,  661,  402,  652,
-          658,  659,  666,  667,  669,  668,  670,  671,   45,   46,
-          421,   47,   48,  662,  673,  672,   27,   49,   50,  233,
-           51,-32766,-32766,-32766,   96,   97,   98,   24,-32766,-32766,
-        -32766, -458,  261,  121, 1023,-32766,-32766,-32766, 1091, 1073,
-        -32766,-32766,-32766, 1039,-32766,-32766,-32766,-32766,-32766,-32766,
-         -496,-32766,-32766,-32766,   52,   53,-32766, -497,-32766,-32766,
-           54,  687,   55,  231,  232,   56,   57,   58,   59,   60,
-           61,   62,   63, 1016,   24,  242,   64,  369,-32766,-32766,
-        -32766,  226, 1040, 1041,  423, 1076, 1073, -493,  880,  508,
-         1039,  436, 1023, -458,  768, 1073,  239,  333, -500,-32766,
-         -500,-32766,-32766,-32766,-32766,  856,  253, -458,  276,  378,
-          372,  786,   68, 1073, -458,  685, -461,  278, 1126,  403,
-          289, 1127,  288,   99,  100,  101,  303,  252,  433,  434,
-          822,-32766,   69,  261,  237,  850,  851,  435,  436,  102,
-         1045, 1046, 1047, 1048, 1042, 1043,  256, 1016, -456, -456,
-          306,  444, 1049, 1044,  375,  133,  561, -239,  363,   66,
-          237,  268,  692,  273,  278,  422, -137, -137, -137,   -4,
-          768, 1073,  310,  278, 1035,  757,  687,  362,   37,   20,
-          424, -137,  425, -137,  426, -137,  427, -137,  127,  428,
-         -295,  278, -295,   38,   39,  370,  371, -496,  271,   40,
-          429,  277,  687,   65,  261, 1016,  302,  896,  430,  431,
-         -456, -456,  333, -494,  432,   44,   42,  743,  791,  373,
-          374, -457, -234,  562, -456, -456,  375,-32766,-32766,-32766,
-          882, -456, -456,  124, -493,   75,  850,  851,  333, -273,
-         -260,  422,  768,  770,  576, -137,  261,  125,-32766,  278,
-          823,  757,  857, 1073,   37,   20,  424,  240,  425, -178,
-          426,  589,  427,  393,  503,  428,  687,  235,  241,   38,
-           39,  370,  371,  125,  354,   40,  429,  260,  259,   65,
-          267,  687,  302, -457,  430,  431, -296, -177, -296,   24,
-          432,  305,  365,  700,  791,  373,  374, -457,  120,  118,
-           24, 1073,   30,  366, -457, 1039, -460,  850,  851,  687,
-          367,  691, 1073,  422,  291,  768, 1039,  333,  -83,  770,
-          576,   -4,  467,  757,  126,  368,   37,   20,  424,  -92,
-          425,  278,  426,  444,  427, 1016,  375,  428, -219, -219,
-         -219,   38,   39,  370,  371,  333, 1016,   40,  429,  850,
-          851,   65,  435,  436,  302,  236,  430,  431,  225,  708,
-         -494,  709,  432,  435,  436,  743,  791,  373,  374,  690,
-          387,  136, 1117,  578,   68,  413,  238,    8,   33,  278,
-         1053,  227,  708,  687,  709,   68,  422, -260,  535,   21,
-          278,  770,  576, -219,  550,  551,  757,  687,  116,   37,
-           20,  424,  117,  425,  358,  426, -178,  427,  132,  328,
-          428, -218, -218, -218,   38,   39,  370,  371,  687,  333,
-           40,  429,  122,  768,   65,  383,  384,  302,  123,  430,
-          431,   29,  234,  333, -177,  432,  528,  529,  743,  791,
-          373,  374,  129,  850,  851,  135,   76,   77,   78, 1092,
-          881,  599,  582,  254,  333,  137,  138,  782,  590,  593,
-          293,  767,  131,  252,  770,  576, -218,   31,  102,   79,
-           80,   81,   82,   83,   84,   85,   86,   87,   88,   89,
-           90,   91,   92,   93,   94,   95,   96,   97,   98,   99,
-          100,  101,   43,  252,  422,  558,  768,  687,  690,-32766,
-          471,  130,  476,  685,  757,  102,  553,   37,   20,  424,
-          526,  425,  688,  426,  272,  427,  910, 1016,  428,  792,
-         1128,  793,   38,   39,  370,  583,  269,  570,   40,  429,
-          536, 1052,   65,  275, 1055,  302, -415,  541,  270,  -81,
-           10,  391,  768,  432,  542,  554,  784,  594,    5,    0,
-           12,  577,    0,    0,  304,    0,    0,    0,    0,  336,
-          342,    0,    0,    0,    0,    0,    0,  422,    0,    0,
-            0,  584,  770,  576,    0,    0,    0,  757,    0,    0,
-           37,   20,  424,  343,  425,    0,  426,    0,  427,  768,
-            0,  428,    0,    0,    0,   38,   39,  370,  347,  387,
-          473,   40,  429,  359,  360,   65,  744,   35,  302,   36,
-          597,  598,  748,  422,  825,  809,  432,  816,  587,  876,
-          877,  806,  817,  757,  746,  804,   37,   20,  424,  885,
-          425,  888,  426,  889,  427,  768,  886,  428,  887,  893,
-         -485,   38,   39,  370,  579,  770,  576,   40,  429,  581,
-          585,   65,  586,  588,  302,  592,  286,  287,  352,  353,
-          422,  580,  432, 1123,  591, 1125,  703,  790,  702,  712,
-          757,  789,  713,   37,   20,  424,  710,  425, 1124,  426,
-          788,  427,  768, 1004,  428,  711,  777,  785,   38,   39,
-          370,  808,  576, -483,   40,  429,  775,  814,   65,  815,
-         1122,  302, 1074, 1067, 1081, 1086,  422, 1089, -237,  432,
-         -461, -460, -459,   23,   25,   28,  757,   34,   41,   37,
-           20,  424,   67,  425,   70,  426,   71,  427,   72,   73,
-          428,   74,  128,  134,   38,   39,  370,  139,  770,  576,
-           40,  429,  229,  230,   65,  246,  247,  302,  248,  249,
-          250,  251,  290,  422,  355,  432,  357, -427, -235, -234,
-           14,   15,   16,  757,   17,   19,   37,   20,  424,  325,
-          425,  404,  426,  406,  427,  409,  411,  428,  412,  419,
-          567,   38,   39,  370,  770,  576, 1027,   40,  429,  977,
-         1037,   65,  858, 1008,  302,-32766,-32766,-32766,  -92,   13,
-           18,   22,  432,  263,  324,  501,  522,  569,  981,  978,
-            0,  994,    0, 1036, 1065, 1066,-32766, 1080,-32766,-32766,
-        -32766,-32766,-32766,-32766,-32767,-32767,-32767,-32767,-32767, 1120,
-          532,  770,  576, 1054
+          130,  131,  132,  555,  133,  134,-32766,  704,  705,  706,
+          135,   36, -543, -552,  455,-32766, -543,-32766,-32766,-32766,
+         -552, 1152,  778,  927, -549,  969,  970,    0,-32766,-32766,
+        -32766, -549,-32766, 1219,-32766,  245,-32766,  962,-32766,-32766,
+        -32766,-32766,-32766,  461,-32766,-32766,-32766,-32766,-32766,-32766,
+        -32766,-32766,  124, -331,  707, -331,-32766,  388, 1031, 1032,
+         1033, 1030, 1029, 1028,-32766,  435,  430,    2,  261,  136,
+          371,  711,  712,  713,  714,  391,  789,  397, 1031, 1032,
+         1033, 1030, 1029, 1028,  715,  716,  717,  718,  719,  720,
+          721,  722,  723,  724,  725,  745,  556,  746,  747,  748,
+          749,  737,  738,  372,  373,  740,  741,  726,  727,  728,
+          730,  731,  732,  332,  771,  772,  773,  774,  775,  733,
+          734,  557,  558,  766,  757,  755,  756,  752,  753, -294,
+         -189,  559,  560,  751,  561,  562,  563,  564,  565,  566,
+         1235,  456,  783, -503,  889,  754,  567,  568,  928,  137,
+        -32766,-32766,-32766,  130,  131,  132,  555,  133,  134,  983,
+          704,  705,  706,  135,   36,-32766,-32766,-32766,-32766, -552,
+        -32766,-32766,-32766, -552, 1152,  547,  101,  102,  103,  583,
+         -549,-32766,-32766,-32766, -549,-32766,-32766,-32766,  245,-32766,
+           80,-32766,-32766,-32766,-32766,-32766,-32766,-32766,-32766,-32766,
+          959,  958,  957,-32766,-32766, -503, -503,  707, 1264,-32766,
+          388, 1265,-32766,-32766,-32766,  235,  784,-32766,  778,   19,
+         -503,  261,  136,  371,  711,  712,  713,  714,-32766,-32766,
+          397,  788, -503,-32766, -509,-32766,-32766,  715,  716,  717,
+          718,  719,  720,  721,  722,  723,  724,  725,  745,  556,
+          746,  747,  748,  749,  737,  738,  372,  373,  740,  741,
+          726,  727,  728,  730,  731,  732,  332,  771,  772,  773,
+          774,  775,  733,  734,  557,  558,  766,  757,  755,  756,
+          752,  753, -294, -189,  559,  560,  751,  561,  562,  563,
+          564,  565,  566,  309,   81,   82,   83,  139,  754,  567,
+          568,  681,  137,  729,  699,  700,  701,  702,  703, 1239,
+          704,  705,  706,  742,  743,   33, 1238,   84,   85,   86,
+           87,   88,   89,   90,   91,   92,   93,   94,   95,   96,
+           97,   98,   99,  100,  101,  102,  103,  104,  105,  106,
+           31,  263,-32766,-32766,-32766,  104,  105,  106,  577,  263,
+         1216,  126, -188,  107,  142,  440,  441,  707,-32766,-32766,
+        -32766,  107, -254,-32766,  247,-32766,-32766,-32766,-32766,-32766,
+        -32766,  708,  709,  710,  711,  712,  713,  714,  293,-32766,
+          776,-32766,-32766,-32766,-32766,-32766,  295,  715,  716,  717,
+          718,  719,  720,  721,  722,  723,  724,  725,  745,  768,
+          746,  747,  748,  749,  737,  738,  739,  767,  740,  741,
+          726,  727,  728,  730,  731,  732,  770,  771,  772,  773,
+          774,  775,  733,  734,  735,  736,  766,  757,  755,  756,
+          752,  753,  529,  311,  744,  750,  751,  758,  759,  761,
+          760,  762,  763,  234,-32766,-32766,-32766,  307,  754,  765,
+          764,   48,   49,   50,  486,   51,   52,  481,  397,   18,
+          321,   53,   54,  345,   55,-32766,  982,-32766,-32766,-32766,
+        -32766,-32766,-32766,-32767,-32767,-32767,-32767,-32767,  349,-32767,
+        -32767,-32767,-32767,   99,  100,  101,  102,  103,  814,  354,
+          815, 1191,  356, 1152,  871,  271,  408,  871,   56,   57,
+          409,  814,  410,  815,   58, -188,   59,  240,  241,   60,
+           61,   62,   63,   64,   65,   66,   67,-32766,   26,  262,
+           68,  412,  487,  411,  672,  967, 1185, 1186,  488, 1150,
+         1216, 1154, 1153, 1155, 1183,   40,   23,  489, 1009,  490,
+          -82,  491,  147,  492,  969,  970,  493,  494,  786,  429,
+          430,   42,   43,  413,  418,  415,  871,   44,  495,  391,
+          496,  497,  248,  344,  320, 1159, 1154, 1153, 1155,  793,
+          896,  498,  499,  500,  148, 1008,  861,  692,  787,  861,
+          967, 1254,  501,  502,  150, 1173, 1174, 1175, 1176, 1170,
+         1171,  281,  624,   24,   26,  -14,  151, 1177, 1172,  969,
+          970, 1154, 1153, 1155,  282,  -82, 1216, -502,  152,   69,
+         1183,  305,  306,  311,   34,  108,  109,  110,  111,  112,
+          113,  114,  115,  116,  117,  118,  119,  120,  154, -149,
+         -149, -149,  639,  640,  146,  376, 1159, 1159,  861,  615,
+          616,   32,  243,   35, -149, 1216, -149,  121, -149,  873,
+         -149,  667,  873,  122,  667,  242, 1067, 1069,  501,  502,
+          414, 1173, 1174, 1175, 1176, 1170, 1171, -501,  127, -502,
+         -502,  496,  497, 1177, 1172, -504,  128,  871,  424,  425,
+          847,  896, -107, -107, -502,   71,  442,  443,  306,  311,
+         -107,-32766,  432,  433,  -49,  141, -502, 1152, -508,  155,
+          156,  780,  157,  -84,-32766,-32766,-32766,  673,-32766,  -76,
+        -32766,  873,-32766,  667, -149,-32766, 1216, 1216, 1179,  282,
+        -32766,-32766,-32766,  -73,   73,  -71,-32766,-32766,  311, -501,
+         -501,  129,-32766,  388,  -70,  -69,-32766, -504, -504,  -68,
+        -32766,  -67, 1152,  -66, -501,  -65,  871,  -64,  275,-32766,
+        -32766,-32766, -504,-32766,  -45,-32766, -501,-32766,  -16,  861,
+        -32766,  145, -107,  264, -504,-32766,-32766,-32766,  682,   72,
+          244,-32766,-32766,-32766,  685,  782,  674,-32766,  388, 1152,
+          669,  871, -501,  870,  144,-32766,-32766,-32766,-32766,  272,
+        -32766,  282,-32766,  273,-32766,   73,   73,-32766, 1216,  311,
+          311,  276,-32766,-32766,-32766,  885,-32766,  246,-32766,-32766,
+          277,  677, 1152,  314,-32766,  388,   -4,  871,  263,-32766,
+        -32766,-32766,-32766,-32766,  107,-32766,  143,-32766,  861,  778,
+        -32766,  871,  873,-32766,  667,-32766,-32766,-32766,  625,  647,
+          871,-32766,-32766,-32766, -501, -501,  787,-32766,  388, 1152,
+         1037,-32766,  969,  970, 1266,-32766,-32766,-32766,-32766, -501,
+        -32766,  531,-32766,  861,-32766,  660,  871,-32766,  630,  535,
+          683, -501,-32766,-32766,-32766,  138,-32766,  642,-32766,-32766,
+         1023,  311, 1152,   20,-32766,  388,  437,  466,  631,-32766,
+        -32766,-32766,-32766,-32766,  643,-32766,  286,-32766, -506,  861,
+        -32766,  913,  407,  667,  613,-32766,-32766,-32766,-32766,  284,
+         -467,-32766,-32766,  861,   46,  283,  282,-32766,  388,  686,
+          897,  414,  861,  402,  898,-32766,  294,   38,  280, -232,
+         -232, -232,  496,  497, 1007,  414,  873,   26,  667, 1190,
+          786,  806,  896, -107, -107, 1192,  496,  497,  861, 1216,
+           47, -457,    8, 1183,   22,  847,  896, -107, -107,  347,
+         -506, -506,  541,    9, -231, -231, -231,  581, 1180,  887,
+          414,   39,  873,  848,  667,   -4,  289,  290,  689,  690,
+          852,  496,  497,  937,  914, 1261,  873, -506,  667, -232,
+          847,  896, -107, -107,  921,  873,  911,  667,  922,  850,
+          909, -537,  502,  123, 1173, 1174, 1175, 1176, 1170, 1171,
+         1012, 1015,  291,  292, 1016, 1013, 1177, 1172, 1014, 1020,
+         1263,  873,   30,  667, -231,  304,  798,  348,   71, 1205,
+         1223,  306,  311, 1257,  618, -535,  346,  668, -107,  125,
+         -107,  671,  675,  676,  678,  285,  679,  680, -107, -107,
+         -107, -107, -107, -107, -107,  684,  670, -257,  809,  808,
+          817,  895,  929,  816, 1262,  894,  892,  893, 1138,  880,
+          888,  878,  919,  920, 1260, 1217, 1206, 1224, 1230, 1233,
+            0, -509, -508, -507,    1,   27,   28,   37,   41,   45,
+           70,   74, -308, -255,   75,   76,   77,   78,   79,  140,
+          149,  153,  239,  310,  333,  334,  335,  336,  337,  338,
+          339,  340,  341,  342,  343,  403,  404,    0, -254,   12,
+           13,   14,   15,   17,  375,  457,  458,  465,  468,  469,
+          470,  471,  475,  476,  477,  484,  654, 1163, 1106, 1181,
+          984, 1142, -259,  -99,   11,   16,   25,  279,  374,  574,
+          578,  605,  659, 1110, 1158, 1107, 1236,    0, -471, 1123,
+            0, 1184
     );
 
     protected $actionCheck = array(
-            2,    3,    4,    5,    6,   78,    8,    9,   10,   11,
-           12,    0,   15,   16,   17,   18,   19,   20,   21,   22,
-           23,   24,   25,   26,   27,   28,   42,   43,   44,   45,
-           46,   47,   48,   49,   50,    8,    9,   10,   78,   79,
-            7,  114,  115,  116,  117,  118,  119,  114,  115,  116,
-          117,  118,  119,   55,   57,   58,   29,    7,   31,   32,
-           33,   34,   35,   36,    8,    9,   10,   69,   70,   71,
-           72,   73,   74,   75,  114,    1,   78,    8,    9,   10,
-            1,    7,   13,   85,   86,   87,   88,   89,   90,   91,
+            2,    3,    4,    5,    6,    7,  115,    9,   10,   11,
+           12,   13,  157,    1,   31,   73,  161,    9,   10,   11,
+            8,   79,   79,   31,    1,  134,  135,    0,   86,   87,
+           88,    8,   90,    1,   92,   37,   94,    1,   30,   97,
+           32,   33,   34,  101,  102,  103,  104,    9,   10,   11,
+          108,  109,   14,  105,   56,  107,  114,  115,  115,  116,
+          117,  118,  119,  120,  122,  105,  106,    8,   70,   71,
+           72,   73,   74,   75,   76,  115,    1,   79,  115,  116,
+          117,  118,  119,  120,   86,   87,   88,   89,   90,   91,
            92,   93,   94,   95,   96,   97,   98,   99,  100,  101,
           102,  103,  104,  105,  106,  107,  108,  109,  110,  111,
           112,  113,  114,  115,  116,  117,  118,  119,  120,  121,
-          122,  123,  124,  125,  126,  127,  128,  129,   30,  131,
-          132,  133,  134,  135,  136,  137,  138,  139,    2,    3,
-            4,    5,    6,  145,  146,  147,    7,   11,   12,   36,
-           14,    8,    9,   10,   48,   49,   50,   68,    8,    9,
-           10,   68,   29,    7,    1,    8,    9,   10,    1,   80,
-            8,    9,   29,   84,   31,   32,   33,   34,   35,   29,
-            7,   31,   32,   33,   48,   49,   29,  154,   31,   32,
-           54,   78,   56,   57,   58,   59,   60,   61,   62,   63,
-           64,   65,   66,  114,   68,   69,   70,   71,    8,    9,
-           10,   13,   76,   77,   78,    1,   80,    7,    1,   49,
-           84,  132,    1,  130,    1,   80,    7,  114,  154,   29,
-          156,   31,   32,   33,   34,    1,    7,  144,    7,  103,
-          104,    1,  153,   80,  151,   78,  153,  158,   78,  151,
-          114,   81,    7,   51,   52,   53,    7,   55,  122,  123,
-           30,    8,  149,   29,   36,  132,  133,  131,  132,   67,
-          134,  135,  136,  137,  138,  139,  140,  114,   68,   68,
-            7,  145,  146,  147,  148,   13,   78,  154,  125,  153,
-           36,  155,    1,  157,  158,   72,   73,   74,   75,    0,
-            1,   80,    7,  158,    1,   82,   78,    7,   85,   86,
-           87,   88,   89,   90,   91,   92,   93,   94,  151,   96,
-          103,  158,  105,  100,  101,  102,  103,  154,  111,  106,
-          107,   68,   78,  110,   29,  114,  113,  120,  115,  116,
-          130,  130,  114,    7,  121,   68,   68,  124,  125,  126,
-          127,   68,  154,  145,  144,  144,  148,    8,    9,   10,
-          152,  151,  151,   30,  154,  151,  132,  133,  114,  152,
-            7,   72,    1,  150,  151,  152,   29,  149,   29,  158,
-          150,   82,  154,   80,   85,   86,   87,   36,   89,    7,
-           91,  151,   93,  130,    1,   96,   78,   36,   36,  100,
-          101,  102,  103,  149,  105,  106,  107,  130,  130,  110,
-          111,   78,  113,  130,  115,  116,  103,    7,  105,   68,
-          121,  144,    7,  124,  125,  126,  127,  144,  151,  151,
-           68,   80,    7,    7,  151,   84,  153,  132,  133,   78,
-            7,  150,   80,   72,  145,    1,   84,  114,   30,  150,
-          151,  152,   83,   82,  151,    7,   85,   86,   87,  154,
-           89,  158,   91,  145,   93,  114,  148,   96,   97,   98,
-           99,  100,  101,  102,  103,  114,  114,  106,  107,  132,
-          133,  110,  131,  132,  113,   36,  115,  116,   95,  103,
-          154,  105,  121,  131,  132,  124,  125,  126,  127,   80,
-          148,   13,   83,  151,  153,  103,   36,  105,   13,  158,
-          141,   13,  103,   78,  105,  153,   72,  154,   73,   74,
-          158,  150,  151,  152,   73,   74,   82,   78,   15,   85,
-           86,   87,   15,   89,  148,   91,  154,   93,   98,   99,
-           96,   97,   98,   99,  100,  101,  102,  103,   78,  114,
-          106,  107,   15,    1,  110,  103,  104,  113,   15,  115,
-          116,  142,  143,  114,  154,  121,  108,  109,  124,  125,
-          126,  127,   15,  132,  133,   15,    8,    9,   10,  154,
-          150,  151,   30,   30,  114,   15,   15,   36,   30,   30,
-           34,   30,   30,   55,  150,  151,  152,   29,   67,   31,
-           32,   33,   34,   35,   36,   37,   38,   39,   40,   41,
-           42,   43,   44,   45,   46,   47,   48,   49,   50,   51,
-           52,   53,   68,   55,   72,   75,    1,   78,   80,   83,
-           83,   68,   87,   78,   82,   67,   92,   85,   86,   87,
-          111,   89,   78,   91,  112,   93,   80,  114,   96,  125,
-           81,  125,  100,  101,  102,   30,  128,   90,  106,  107,
-           88,  141,  110,  128,  141,  113,  144,   94,  129,   95,
-           95,   95,    1,  121,   97,   97,  149,  152,  144,   -1,
-          144,  151,   -1,   -1,  144,   -1,   -1,   -1,   -1,  148,
-          148,   -1,   -1,   -1,   -1,   -1,   -1,   72,   -1,   -1,
-           -1,   30,  150,  151,   -1,   -1,   -1,   82,   -1,   -1,
-           85,   86,   87,  148,   89,   -1,   91,   -1,   93,    1,
-           -1,   96,   -1,   -1,   -1,  100,  101,  102,  148,  148,
-          148,  106,  107,  148,  148,  110,  152,  150,  113,  150,
-          150,  150,  150,   72,  150,  150,  121,  150,   30,  150,
-          150,  150,  150,   82,  150,  150,   85,   86,   87,  150,
-           89,  150,   91,  150,   93,    1,  150,   96,  150,  150,
-          153,  100,  101,  102,  151,  150,  151,  106,  107,  151,
-          151,  110,  151,  151,  113,  151,  151,  151,  151,  151,
-           72,  151,  121,  152,   30,  152,  152,  152,  152,  152,
-           82,  152,  152,   85,   86,   87,  152,   89,  152,   91,
-          152,   93,    1,  152,   96,  152,  152,  152,  100,  101,
-          102,  150,  151,  153,  106,  107,  152,  152,  110,  152,
-          152,  113,  152,  152,  152,  152,   72,  152,  154,  121,
-          153,  153,  153,  153,  153,  153,   82,  153,  153,   85,
-           86,   87,  153,   89,  153,   91,  153,   93,  153,  153,
-           96,  153,  153,  153,  100,  101,  102,  153,  150,  151,
-          106,  107,  153,  153,  110,  153,  153,  113,  153,  153,
-          153,  153,  153,   72,  153,  121,  153,  155,  154,  154,
-          154,  154,  154,   82,  154,  154,   85,   86,   87,  154,
-           89,  154,   91,  154,   93,  154,  154,   96,  154,  154,
-          154,  100,  101,  102,  150,  151,  154,  106,  107,  154,
-          154,  110,  154,  154,  113,    8,    9,   10,  154,  154,
-          154,  154,  121,  154,  154,  154,  154,  154,  154,  154,
-           -1,  155,   -1,  156,  156,  156,   29,  156,   31,   32,
-           33,   34,   35,   36,   37,   38,   39,   40,   41,  156,
-          156,  150,  151,  157
+          122,  123,  124,  125,  126,  127,  128,  129,  130,    8,
+            8,  133,  134,  135,  136,  137,  138,  139,  140,  141,
+            1,  158,   79,   69,    1,  147,  148,  149,  156,  151,
+            9,   10,   11,    2,    3,    4,    5,    6,    7,  161,
+            9,   10,   11,   12,   13,    9,   10,   11,   73,  157,
+            9,   10,   11,  161,   79,   80,   49,   50,   51,   50,
+          157,   86,   87,   88,  161,   90,   30,   92,   37,   94,
+          158,   30,   97,   32,   33,   34,   35,  102,  103,  104,
+          118,  119,  120,  108,  109,  131,  132,   56,   79,  114,
+          115,   82,    9,   10,   11,   14,  153,  122,   79,    8,
+          146,   70,   71,   72,   73,   74,   75,   76,    9,   10,
+           79,  156,  158,   30,  160,   32,   33,   86,   87,   88,
+           89,   90,   91,   92,   93,   94,   95,   96,   97,   98,
+           99,  100,  101,  102,  103,  104,  105,  106,  107,  108,
+          109,  110,  111,  112,  113,  114,  115,  116,  117,  118,
+          119,  120,  121,  122,  123,  124,  125,  126,  127,  128,
+          129,  130,  161,  161,  133,  134,  135,  136,  137,  138,
+          139,  140,  141,   69,    9,   10,   11,  158,  147,  148,
+          149,  158,  151,    2,    3,    4,    5,    6,    7,    1,
+            9,   10,   11,   12,   13,   30,    8,   32,   33,   34,
+           35,   36,   37,   38,   39,   40,   41,   42,   43,   44,
+           45,   46,   47,   48,   49,   50,   51,   52,   53,   54,
+            8,   56,    9,   10,   11,   52,   53,   54,    1,   56,
+           81,    8,    8,   68,    8,  131,  132,   56,    9,   10,
+           11,   68,  161,   30,    8,   32,   33,   34,   35,   36,
+           37,   70,   71,   72,   73,   74,   75,   76,    8,   30,
+           79,   32,   33,   34,   35,   36,    8,   86,   87,   88,
+           89,   90,   91,   92,   93,   94,   95,   96,   97,   98,
+           99,  100,  101,  102,  103,  104,  105,  106,  107,  108,
+          109,  110,  111,  112,  113,  114,  115,  116,  117,  118,
+          119,  120,  121,  122,  123,  124,  125,  126,  127,  128,
+          129,  130,   84,  164,  133,  134,  135,  136,  137,  138,
+          139,  140,  141,   96,    9,   10,   11,    8,  147,  148,
+          149,    2,    3,    4,    5,    6,    7,  105,   79,  107,
+            8,   12,   13,    8,   15,   30,    1,   32,   33,   34,
+           35,   36,   37,   38,   39,   40,   41,   42,    8,   43,
+           44,   45,   46,   47,   48,   49,   50,   51,  105,    8,
+          107,  143,    8,   79,    1,   30,    8,    1,   49,   50,
+            8,  105,    8,  107,   55,  161,   57,   58,   59,   60,
+           61,   62,   63,   64,   65,   66,   67,    9,   69,   70,
+           71,   72,   73,    8,   31,  115,   77,   78,   79,  115,
+           81,  152,  153,  154,   85,   86,   87,   88,  159,   90,
+           31,   92,   14,   94,  134,  135,   97,   98,  152,  105,
+          106,  102,  103,  104,  105,  106,    1,  108,  109,  115,
+          116,  117,   37,  114,  115,    1,  152,  153,  154,    8,
+          126,  122,  123,  124,   14,  156,   83,  158,   81,   83,
+          115,   84,  133,  134,   14,  136,  137,  138,  139,  140,
+          141,  142,   74,   75,   69,   31,   14,  148,  149,  134,
+          135,  152,  153,  154,  155,   96,   81,   69,   14,  160,
+           85,  162,  163,  164,   16,   17,   18,   19,   20,   21,
+           22,   23,   24,   25,   26,   27,   28,   29,   14,   74,
+           75,   76,   74,   75,  100,  101,    1,    1,   83,  110,
+          111,  144,  145,   14,   89,   81,   91,   16,   93,  156,
+           95,  158,  156,   16,  158,   37,   58,   59,  133,  134,
+          105,  136,  137,  138,  139,  140,  141,   69,   16,  131,
+          132,  116,  117,  148,  149,   69,   16,    1,  105,  106,
+          125,  126,  127,  128,  146,  160,  105,  106,  163,  164,
+          126,   73,  127,  128,   31,   16,  158,   79,  160,   16,
+           16,   79,   16,   31,   86,   87,   88,   31,   90,   31,
+           92,  156,   94,  158,  159,   97,   81,   81,    1,  155,
+          102,  103,  104,   31,  160,   31,  108,  109,  164,  131,
+          132,   31,  114,  115,   31,   31,   73,  131,  132,   31,
+          122,   31,   79,   31,  146,   31,    1,   31,   30,   86,
+           87,   88,  146,   90,   31,   92,  158,   94,   31,   83,
+           97,   31,  126,   31,  158,  102,  103,  104,   31,  151,
+           37,  108,  109,   73,   31,  153,   31,  114,  115,   79,
+          158,    1,   69,   31,   31,  122,   86,   87,   88,   35,
+           90,  155,   92,   35,   94,  160,  160,   97,   81,  164,
+          164,   35,  102,  103,  104,   37,   73,   37,  108,  109,
+           35,   31,   79,   35,  114,  115,    0,    1,   56,   86,
+           87,   88,  122,   90,   68,   92,   69,   94,   83,   79,
+           97,    1,  156,  115,  158,  102,  103,  104,   89,   76,
+            1,  108,  109,   73,  131,  132,   81,  114,  115,   79,
+           81,   84,  134,  135,   82,  122,   86,   87,   88,  146,
+           90,   84,   92,   83,   94,   91,    1,   97,   95,   88,
+           31,  158,  102,  103,  104,  158,   73,   93,  108,  109,
+          121,  164,   79,   96,  114,  115,   96,   96,   99,   86,
+           87,   88,  122,   90,   99,   92,  113,   94,   69,   83,
+           97,  156,  126,  158,  112,  102,  103,  104,  115,  130,
+          146,  108,  109,   83,   69,  129,  155,  114,  115,  159,
+          126,  105,   83,  107,  126,  122,  129,  156,  112,   99,
+          100,  101,  116,  117,    1,  105,  156,   69,  158,  143,
+          152,  125,  126,  127,  128,  143,  116,  117,   83,   81,
+           69,  146,  146,   85,  146,  125,  126,  127,  128,  146,
+          131,  132,  150,  147,   99,  100,  101,  150,  157,  151,
+          105,  156,  156,  159,  158,  159,  131,  132,  156,  156,
+          156,  116,  117,  156,  156,  159,  156,  158,  158,  159,
+          125,  126,  127,  128,  156,  156,  156,  158,  156,  156,
+          156,  160,  134,  158,  136,  137,  138,  139,  140,  141,
+          156,  156,  131,  132,  156,  156,  148,  149,  156,  156,
+          159,  156,  158,  158,  159,  158,  157,  146,  160,  157,
+          157,  163,  164,  157,  157,  160,  158,  158,  105,  158,
+          107,  158,  158,  158,  158,  112,  158,  158,  115,  116,
+          117,  118,  119,  120,  121,  158,  158,  161,  159,  159,
+          159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
+          159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
+           -1,  160,  160,  160,  160,  160,  160,  160,  160,  160,
+          160,  160,  159,  161,  160,  160,  160,  160,  160,  160,
+          160,  160,  160,  160,  160,  160,  160,  160,  160,  160,
+          160,  160,  160,  160,  160,  160,  160,   -1,  161,  161,
+          161,  161,  161,  161,  161,  161,  161,  161,  161,  161,
+          161,  161,  161,  161,  161,  161,  161,  161,  161,  161,
+          161,  161,  161,  161,  161,  161,  161,  161,  161,  161,
+          161,  161,  161,  161,  161,  161,  161,   -1,  162,  162,
+           -1,  163
     );
 
     protected $actionBase = array(
-            0,  223,  299,  371,  444,  303,  208,  618,   -2,   -2,
-          -73,   -2,   -2,  625,  718,  718,  764,  718,  552,  671,
-          811,  811,  811,  228,  113,  113,  113,  254,  361,  -40,
-          361,  333,  449,  470,  435,  435,  435,  435,  435,  435,
-          435,  435,  435,  435,  435,  435,  435,  435,  435,  435,
-          435,  435,  435,  435,  435,  435,  435,  435,  435,  435,
-          435,  435,  435,  435,  435,  435,  435,  435,  435,  435,
-          435,  435,  435,  435,  435,  435,  435,  435,  435,  435,
-          435,  435,  435,  435,  435,  435,  435,  435,  435,  435,
-          435,  435,  435,  435,  435,  435,  435,  435,  435,  435,
-          435,  435,  435,  435,  435,  435,  435,  435,  435,  435,
-          435,  435,  435,  435,  435,  435,  435,  435,  435,  435,
-          435,  435,  435,  435,  435,  435,  435,  435,  435,  435,
-          435,  435,  435,  435,  435,  435,  435,  435,  435,  435,
-          291,  291,  230,  393,  495,  779,  784,  781,  776,  775,
-          780,  785,  498,  678,  680,  562,  681,  682,  683,  685,
-          782,  804,  777,  783,  568,  568,  568,  568,  568,  568,
-          568,  568,  568,  568,  568,  568,  568,  568,  568,  568,
-          568,  253,   69,  162,   56,   56,   56,   56,   56,   56,
-           56,   56,   56,   56,   56,   56,   56,   56,   56,   56,
-           56,   56,   56,   56,   56,   56,  349,  349,  349,  157,
-          210,  150,  200,  211,  143,   27,  917,  917,  917,  917,
-          917,  -16,  -16,  -16,  -16,  351,  351,  362,  217,   89,
-           89,   89,   89,   89,   89,   89,   89,   89,   89,   89,
-           89,   89,  163,  313,  106,  106,  133,  133,  133,  133,
-          133,  133,  221,  305,  234,  347,  369,  523,  806,  167,
-          167,  441,   93,  283,  202,  202,  202,  386,  547,  533,
-          533,  533,  533,  419,  419,  533,  533,  170,  214,   74,
-          211,  211,  277,  211,  211,  211,  409,  409,  409,  452,
-          318,  352,  546,  318,  619,  640,  577,  675,  578,  677,
-          278,  585,  145,  586,  145,  145,  145,  458,  445,  451,
-          774,  291,  522,  291,  291,  291,  291,  722,  291,  291,
-          291,  291,  291,  291,   98,  291,   79,  430,  230,  240,
-          240,  556,  240,  452,  538,  263,  635,  410,  425,  538,
-          538,  538,  636,  637,  336,  363,  198,  638,  382,  402,
-          173,   33,  549,  549,  555,  555,  566,  551,  549,  549,
-          549,  549,  549,  690,  690,  555,  548,  555,  566,  695,
-          555,  551,  551,  555,  555,  549,  555,  690,  551,  156,
-          415,  249,  273,  551,  551,  426,  528,  549,  535,  535,
-          433,  555,  219,  555,  139,  539,  690,  690,  539,  229,
-          551,  231,  590,  591,  529,  527,  553,  245,  553,  553,
-          300,  529,  553,  551,  553,  448,   50,  548,  295,  553,
-           11,  699,  701,  418,  703,  694,  705,  731,  706,  530,
-          524,  526,  719,  720,  708,  692,  691,  561,  582,  513,
-          517,  534,  554,  689,  581,  531,  531,  531,  554,  687,
-          531,  531,  531,  531,  531,  531,  531,  531,  787,  540,
-          545,  723,  537,  541,  576,  543,  623,  520,  582,  582,
-          584,  732,  786,  564,  722,  762,  709,  587,  557,  741,
-          725,  525,  542,  565,  726,  727,  745,  765,  628,  513,
-          766,  641,  563,  643,  582,  644,  531,  670,  617,  788,
-          789,  688,  791,  736,  747,  749,  580,  645,  569,  803,
-          646,  768,  629,  631,  589,  737,  684,  751,  647,  752,
-          754,  649,  592,  572,  734,  573,  733,  272,  729,  632,
-          650,  654,  656,  658,  661,  710,  594,  738,  544,  740,
-          735,  595,  597,  560,  663,  488,  599,  570,  571,  600,
-          714,  558,  550,  601,  602,  769,  664,  728,  604,  665,
-          756,  574,  581,  536,  532,  575,  567,  634,  755,  559,
-          605,  609,  611,  613,  674,  616,    0,    0,    0,    0,
+            0,   -2,  151,  555,  816,  830,  865,  379,  717,  622,
+          862,  676,  780,  780,  839,  780,  493,  745,  301,  301,
+          -57,  301,  301,  496,  496,  496,  618,  618,  618,  618,
+          -58,  -58,   95,  700,  733,  770,  663,  803,  803,  803,
+          803,  803,  803,  803,  803,  803,  803,  803,  803,  803,
+          803,  803,  803,  803,  803,  803,  803,  803,  803,  803,
+          803,  803,  803,  803,  803,  803,  803,  803,  803,  803,
+          803,  803,  803,  803,  803,  803,  803,  803,  803,  803,
+          803,  803,  803,  803,  803,  803,  803,  803,  803,  803,
+          803,  803,  803,  803,  803,  803,  803,  803,  803,  803,
+          803,  803,  803,  803,  803,  803,  803,  803,  803,  803,
+          803,  803,  803,  803,  803,  803,  803,  803,  803,  803,
+          803,  803,  803,  803,  803,  803,  803,  803,  803,  803,
+          803,  803,  803,  803,  803,  803,  803,  803,  803,  803,
+          803,  803,  803,  803,  803,  803,  803,  803,  803,  803,
+          803,  803,  803,  803,  803,  803,  803,  803,   75,   -8,
+          347,  629,  986,  992,  988,  993,  984,  983,  987,  989,
+          994,  915,  916,  753,  917,  918,  919,  920,  990,  877,
+          985,  991,  285,  285,  285,  285,  285,  285,  285,  285,
+          285,  285,  285,  285,  285,  285,  285,  285,  285,  285,
+          285,  285,  285,  508,   38,  219,  141,  141,  141,  141,
+          141,  141,  141,  141,  141,  141,  141,  141,  141,  141,
+          141,  141,  141,  141,  141,  141,  141,  141,  141,  141,
+          156,  156,  156,  203,  525,  525,    8,  598,  161,  868,
+          868,  868,  868,  868,  868,  868,  868,  868,  868,  349,
+          333,  435,  435,  435,  435,  435,  436,  436,  436,  436,
+          933,  564,  636,  635,  465,  -52,  127,  127,  718,  718,
+          759,  410,  410,  410,  444, -109, -109, -109,   74,  538,
+          396,  348,  414,  414,  414,  414,  414,  802,  998,  139,
+          139,  139,  139,  414,  414,  414,  606,  713,  713,  881,
+          293,  293,  293,  713,  383,  777,  497,  383,  497,  129,
+          793,   32,  -40, -145,  793,  829,  845,   23,   12,  788,
+          573,  788,  767,  863,  898,  995,   82,  789,  913,  795,
+          914,  224,  678,  981,  981,  981,  981,  981,  981,  981,
+          981,  981,  981,  981,  269,  982,   63,  269,  269,  269,
+          529,   63,  518,  558,   63,  778,  982,   75,  805,   75,
+           75,   75,   75,  944,   75,   75,   75,   75,   75,   75,
+          949,  727,  723,  692,  -17,   75,   -8,  143,  143,  419,
+           36,  143,  143,  143,  143,   75,   75,  565,  573,  762,
+          812,  581,  817,  344,  762,  762,  762,  509,  121,  201,
+          122,  352,  750,  750,  768,  769,  924,  924,  750,  765,
+          750,  769,  929,  750,  768,  768,  750,  924,  768,  761,
+          343,  488,  452,  470,  768,  768,  492,  924,  370,  768,
+          768,  750,  750,  750,  797,  768,  494,  750,  356,  346,
+          750,  750,  768,  768,  797,  786,   59,  779,  924,  924,
+          924,  797,  455,  779,  779,  822,  823,  792,  732,  439,
+          378,  561,  332,  768,  732,  732,  750,  481,  792,  732,
+          792,  732,  818,  732,  732,  732,  792,  732,  765,  484,
+          732,  768,  515,  211,  732,   27,  930,  931,  672,  934,
+          927,  935,  955,  936,  937,  879,  794,  798,  942,  928,
+          938,  926,  925,  752,  631,  637,  806,  764,  923,  756,
+          756,  756,  921,  756,  756,  756,  756,  756,  756,  756,
+          756,  631,  811,  813,  776,  781,  945,  652,  660,  796,
+          814,  996,  997,  944,  976,  939,  771,  679,  962,  946,
+          760,  867,  947,  948,  963,  977,  978,  826,  757,  861,
+          899,  869,  950,  883,  756,  930,  937,  928,  938,  926,
+          925,  716,  714,  710,  712,  708,  704,  694,  703,  730,
+          875,  841,  872,  949,  922,  631,  873,  958,  864,  964,
+          965,  878,  790,  772,  876,  900,  951,  952,  953,  884,
+          979,  885,  815,  959,  896,  966,  791,  901,  967,  968,
+          969,  970,  886,  902,  888,  824,  749,  932,  773,  903,
+          528,  766,  775,  956,  560,  943,  889,  904,  905,  971,
+          972,  973,  906,  907,  940,  827,  960,  784,  961,  957,
+          828,  838,  570,  754,  758,  582,  594,  908,  909,  941,
+          737,  763,  840,  842,  980,  910,  614,  843,  683,  911,
+          975,  684,  686,  774,  897,  808,  783,  787,  954,  743,
+          844,  912,  854,  855,  858,  974,  859,    0,    0,    0,
             0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
             0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-            0,    0,    0,  136,  136,  136,  136,   -2,   -2,   -2,
-            0,    0,   -2,    0,    0,  136,  136,  136,  136,  136,
-          136,  136,  136,  136,  136,  136,  136,  136,  136,  136,
-          136,  136,  136,  136,  136,  136,  136,  136,  136,  136,
-          136,  136,  136,  136,  136,  136,  136,  136,  136,  136,
-          136,  136,  136,  136,  136,  136,  136,  136,  136,  136,
-          136,  136,  136,  136,  136,  136,  136,  136,  136,  136,
-          136,  136,  136,  136,  136,  136,  136,  136,  136,  136,
-          136,  136,  136,  136,  136,  136,  136,  136,  136,  136,
-          136,  136,  136,  136,  136,  136,  136,  136,  136,  136,
-          136,  136,  136,  136,  136,  136,  136,  136,  136,  136,
-          136,  136,  136,  136,  136,  136,  136,  136,  136,  136,
-          136,  136,  136,  136,  136,  136,  136,  136,  136,  136,
-          136,  136,  136,  136,  136,  136,  136,  136,  136,  136,
-          136,  136,  568,  568,  568,  568,  568,  568,  568,  568,
-          568,  568,  568,  568,  568,  568,  568,  568,  568,  568,
-          568,  568,  568,  568,  568,  568,    0,    0,    0,    0,
+            0,    0,    0,    0,    0,  449,  449,  449,  449,  449,
+          449,  301,  301,  301,  301,  449,  449,  449,  449,  449,
+          449,  449,    0,    0,  301,    0,    0,  449,  449,  449,
+          449,  449,  449,  449,  449,  449,  449,  449,  449,  449,
+          449,  449,  449,  449,  449,  449,  449,  449,  449,  449,
+          449,  449,  449,  449,  449,  449,  449,  449,  449,  449,
+          449,  449,  449,  449,  449,  449,  449,  449,  449,  449,
+          449,  449,  449,  449,  449,  449,  449,  449,  449,  449,
+          449,  449,  449,  449,  449,  449,  449,  449,  449,  449,
+          449,  449,  449,  449,  449,  449,  449,  449,  449,  449,
+          449,  449,  449,  449,  449,  449,  449,  449,  449,  449,
+          449,  449,  449,  449,  449,  449,  449,  449,  449,  449,
+          449,  449,  449,  449,  449,  449,  449,  449,  449,  449,
+          449,  449,  449,  449,  449,  449,  449,  449,  449,  449,
+          449,  449,  449,  449,  449,  449,  449,  449,  449,  449,
+          449,  449,  449,  449,  449,  449,  449,  449,  449,  449,
+          449,  449,  285,  285,  285,  285,  285,  285,  285,  285,
+          285,  285,  285,  285,  285,  285,  285,  285,  285,  285,
+          285,  285,  285,  285,  285,  285,    0,    0,    0,    0,
             0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-            0,    0,    0,  568,  568,  568,  568,  568,  568,  568,
-          568,  568,  568,  568,  568,  568,  568,  568,  568,  568,
-          568,  568,  568,  568,  568,  568,  568,  568,  568,  568,
-          568,  568,   -3,  568,  568,   -3,  568,  568,  568,  568,
-          568,  568,  568,  202,  202,  202,  202,  318,  318,  318,
-          -67,  318,  318,  318,  318,  318,  318,  318,  318,  318,
-          318,  318,  318,  318,  318,  -67,  202,  202,  318,  318,
-          318,  318,  318,  318,  318,  318,  318,  318,  419,  419,
-          419,  145,  145,  318,    0,    0,    0,    0,    0,  549,
-          419,  318,  318,  318,  318,    0,    0,  318,  318,  548,
-          145,    0,    0,    0,    0,    0,    0,    0,  549,  549,
-          549,  548,    0,  549,  419,    0,  240,  291,  440,  440,
-          440,  440,    0,  549,    0,  549,    0,    0,    0,    0,
-            0,    0,  551,    0,  690,    0,    0,    0,    0,  555,
-            0,    0,    0,    0,    0,    0,    0,    0,  548,    0,
-            0,    0,    0,  548,    0,    0,  531,    0,  564,    0,
-            0,  531,  531,  531,  564,  564,    0,    0,    0,  564
+            0,    0,    0,    0,    0,    0,    0,  285,  285,  285,
+          285,  285,  285,  285,  285,  285,  285,  285,  285,  285,
+          285,  285,  285,  285,  285,  285,  285,  285,  285,  285,
+          285,  285,  285,  285,  285,  285,  285,  285,  414,  414,
+          285,    0,  285,  414,  414,  414,  414,  414,  414,  414,
+          414,  414,  414,  285,  285,  285,  285,  285,  285,  285,
+          293,  293,  293,  293,  761,  414,  414,  414,  414,  -37,
+          293,  293,  414,  414,  -37,  414,  414,  414,  761,  414,
+          414,  414,    0,    0,   63,  497,    0,    0,    0,    0,
+            0,  497,  497,  269,  269,  269,  269,    0,    0,    0,
+            0,    0,    0,    0,    0,    0,    0,    0,   63,  497,
+            0,   63,    0,  765,  414,  269,  761,  308,  414,    0,
+            0,    0,    0,   63,  765,   63,  497,  143,   75,  308,
+            0,  534,  534,  534,  534,    0,  573,  761,  761,  761,
+          761,  761,  761,  761,  761,  761,  761,  761,    0,  761,
+            0,    0,    0,    0,    0,    0,    0,    0,    0,  765,
+          768,    0,  924,    0,    0,    0,    0,  750,    0,    0,
+            0,    0,    0,    0,  750,  929,  768,  768,    0,    0,
+            0,    0,    0,    0,  765,    0,    0,    0,    0,    0,
+            0,    0,    0,  756,  790,    0,  790,    0,  756,  756,
+          756
     );
 
     protected $actionDefault = array(
-            3,32767,32767,32767,32767,32767,32767,32767,32767,   92,
+            3,32767,   99,32767,32767,32767,32767,32767,32767,32767,
+        32767,32767,32767,32767,32767,32767,32767,32767,32767,   97,
+        32767,32767,32767,32767,32767,32767,  555,  555,  555,  555,
+          236,   99,32767,32767,32767,32767,  431,  350,  350,  350,
+        32767,32767,  499,  499,  499,  499,  499,  499,32767,32767,
+        32767,32767,32767,32767,  431,32767,32767,32767,32767,32767,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
-        32767,32767,32767,32767,  510,  510,  510,   94,  499,32767,
-          499,32767,32767,32767,  314,  314,  314,32767,  454,  454,
-          454,  454,  454,  454,  454,32767,32767,32767,32767,32767,
-          394,32767,32767,32767,32767,32767,32767,32767,32767,32767,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
+        32767,32767,32767,32767,32767,32767,   97,32767,32767,32767,
+           35,    5,    6,    8,    9,   48,   15,32767,32767,32767,
+        32767,32767,   99,32767,32767,32767,32767,32767,32767,32767,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
-        32767,   92,32767,32767,32767,32767,32767,32767,32767,32767,
+        32767,  548,32767,32767,32767,32767,32767,32767,32767,32767,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
-        32767,32767,32767,32767,  506,32767,32767,32767,32767,32767,
+        32767,32767,  435,  414,  415,  417,  418,  349,  500,  554,
+          293,  551,  348,  142,  305,  295,  224,  296,  240,  241,
+          267,  345,  146,  379,  432,  381,  430,  434,  380,  355,
+          360,  361,  362,  363,  364,  365,  366,  367,  368,  369,
+          370,  371,  372,  353,  354,  433,  436,  437,  440,  441,
+          411,  410,  409,  377,32767,32767,  378,  352,  382,32767,
+        32767,32767,32767,32767,32767,32767,32767,   99,32767,  384,
+          383,  400,  401,  398,  399,  402,  403,  404,  405,  406,
+        32767,32767,32767,32767,32767,  328,  391,  392,  284,  284,
+          330,32767,32767,32767,  108,32767,32767,32767,  493,  408,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
-        32767,32767,32767,32767,  377,  378,  380,  381,  313,  455,
-          509,  259,  505,  312,  130,  270,  261,  211,  243,  310,
-          134,  342,  395,  344,  393,  397,  343,  319,  323,  324,
-          325,  326,  327,  328,  329,  330,  331,  332,  333,  334,
-          335,  317,  318,  396,  398,  399,  374,  373,  372,  340,
-          316,  341,  345,  316,  347,  346,  363,  364,  361,  362,
-          365,  366,  367,  368,  369,32767,32767,32767,32767,32767,
-        32767,32767,32767,32767,32767,32767,32767,32767,32767,   94,
-        32767,32767,32767,  293,  354,  355,  250,  250,  250,  250,
-          250,  250,32767,  250,32767,  250,32767,32767,32767,32767,
-        32767,32767,  448,  371,  349,  350,  348,32767,  426,32767,
-        32767,32767,32767,32767,  428,32767,   92,32767,32767,32767,
-          337,  339,  420,  508,  320,  507,32767,32767,   94,  414,
+        32767,32767,32767,   99,32767,   97,  495,  374,  376,  463,
+          386,  387,  385,  356,32767,  470,32767,   99,  472,32767,
+        32767,32767,32767,32767,32767,  494,32767,  501,  501,32767,
+          456,   97,32767,32767,32767,32767,  262,32767,32767,32767,
+        32767,  562,  456,  107,  107,  107,  107,  107,  107,  107,
+          107,  107,  107,  107,32767,  107,32767,32767,32767,   97,
+          185,32767,  250,  252,   99,  516,  190,32767,  475,32767,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
-          423,32767,32767,   92,32767,32767,   92,  174,  230,  232,
-          179,32767,  431,32767,32767,32767,32767,32767,32767,32767,
+        32767,  468,  190,  190,32767,32767,32767,32767,32767,32767,
+        32767,32767,32767,32767,32767,32767,32767,32767,  456,  396,
+          135,32767,  135,  501,  388,  389,  390,  458,  501,  501,
+          501,32767,32767,32767,  190,32767,  473,  473,   97,   97,
+           97,   97,  468,32767,  190,  190,32767,32767,  190,  108,
+           96,   96,   96,   96,  190,  190,   96,  100,   98,  190,
+          190,32767,32767,32767,  205,  190,   96,32767,   98,   98,
+        32767,32767,  190,  190,  205,  207,   98,  209,32767,  520,
+          521,  205,   98,  209,  209,  229,  229,  447,  286,   98,
+           96,   98,   98,  190,  286,  286,32767,   98,  447,  286,
+          447,  286,  192,  286,  286,  286,  447,  286,32767,   98,
+          286,  190,   96,   96,  286,32767,32767,32767,  458,32767,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
-        32767,32767,32767,  414,  359,  517,32767,  456,32767,  351,
-          352,  353,32767,32767,  456,  456,  456,32767,  456,32767,
-          456,  456,32767,32767,32767,32767,32767,  179,32767,32767,
-        32767,32767,   94,  429,  429,   92,   92,   92,   92,  424,
-        32767,  179,  179,32767,32767,32767,32767,32767,  179,   91,
-           91,   91,   91,  179,  179,   91,  194,32767,  192,  192,
-           91,32767,   93,32767,   93,  196,32767,  470,  196,   91,
-          179,   91,  216,  216,  405,  181,  252,   93,  252,  252,
-           93,  405,  252,  179,  252,   91,   91,32767,   91,  252,
-        32767,32767,32767,   85,32767,32767,32767,32767,32767,32767,
-        32767,32767,32767,32767,32767,32767,32767,32767,  416,32767,
-          436,32767,  449,  468,32767,  357,  358,  360,32767,  458,
-          382,  383,  384,  385,  386,  387,  388,  390,32767,  419,
-        32767,32767,32767,   87,  121,  269,32767,  515,   87,  417,
-        32767,  515,32767,32767,32767,32767,32767,32767,32767,32767,
-        32767,32767,   87,   87,32767,32767,32767,32767,32767,  495,
-        32767,  516,32767,  456,  418,32767,  356,  432,  475,32767,
-        32767,  457,32767,32767,32767,32767,   87,32767,32767,32767,
-        32767,32767,32767,32767,32767,32767,  436,32767,32767,32767,
-        32767,32767,32767,32767,  456,32767,32767,32767,32767,32767,
-        32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
-          456,32767,32767,  242,32767,32767,32767,  309,32767,32767,
-        32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
-        32767,   85,   60,32767,  289,32767,32767,32767,32767,32767,
-        32767,32767,32767,32767,32767,32767,  136,  136,    3,  272,
-            3,  272,  136,  136,  136,  272,  272,  136,  136,  136,
-          136,  136,  136,  136,  169,  224,  227,  216,  216,  281,
-          136,  136
+        32767,32767,32767,32767,32767,  488,32767,  505,  518,  394,
+          395,  397,  503,  419,  420,  421,  422,  423,  424,  425,
+          427,  550,32767,  462,32767,32767,32767,32767,  304,  560,
+        32767,  560,32767,32767,32767,32767,32767,32767,32767,32767,
+        32767,32767,32767,32767,32767,32767,32767,  561,32767,  501,
+        32767,32767,32767,32767,  393,    7,   74,   41,   42,   50,
+           56,  479,  480,  481,  482,  476,  477,  483,  478,32767,
+          484,  526,32767,32767,  502,  553,32767,32767,32767,32767,
+        32767,32767,  135,32767,32767,32767,32767,32767,32767,32767,
+        32767,32767,32767,32767,  488,32767,  133,32767,32767,32767,
+        32767,32767,32767,32767,32767,32767,32767,  501,32767,32767,
+        32767,  281,  283,32767,32767,32767,32767,32767,32767,32767,
+        32767,32767,32767,32767,32767,32767,32767,32767,32767,  501,
+        32767,32767,32767,  269,  271,32767,32767,32767,32767,32767,
+        32767,32767,32767,32767,32767,32767,32767,32767,  266,32767,
+        32767,  344,32767,32767,32767,32767,  324,32767,32767,32767,
+        32767,32767,32767,32767,32767,32767,32767,  148,  148,    3,
+            3,  307,  148,  148,  148,  307,  307,  148,  307,  307,
+          148,  148,  148,  148,  148,  148,  180,  244,  247,  229,
+          229,  148,  316,  148
     );
 
     protected $goto = array(
-          171,  144,  144,  144,  171,  152,  153,  152,  155,  187,
-          172,  168,  168,  168,  168,  169,  169,  169,  169,  169,
-          169,  169,  164,  165,  166,  167,  184,  182,  185,  445,
-          446,  334,  447,  450,  451,  452,  453,  454,  455,  456,
-          457,  924,  141,  145,  146,  147,  170,  148,  149,  143,
-          150,  151,  154,  181,  183,  186,  206,  209,  211,  212,
-          214,  215,  216,  217,  218,  219,  220,  221,  222,  223,
-          224,  244,  245,  264,  265,  266,  339,  340,  341,  496,
-          188,  189,  190,  191,  192,  193,  194,  195,  196,  197,
-          198,  199,  200,  201,  202,  156,  203,  157,  173,  174,
-          175,  207,  176,  158,  159,  160,  177,  161,  208,  142,
-          204,  162,  178,  205,  179,  180,  163,  563,  210,  463,
-          210,  516,  516, 1038,  572, 1038, 1038, 1038, 1038, 1038,
-         1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,  468,  468,
-          468,  514,  537,  468,  297,  489,  521,  489,  498,  274,
-          533,  534,  698,  483,  258,  468,  448,  448,  448,  725,
-          448,  448,  448,  448,  448,  448,  448,  448,  448,  448,
-          448,  448,  448,  449,  449,  449,  699,  449,  449,  449,
-          449,  449,  449,  449,  449,  449,  449,  449,  449,  449,
-         1114, 1114,  734,  725,  899,  725,  315,  319,  475,  499,
-          500,  502, 1083, 1084,  468,  468,  760, 1114,  761,  900,
-          482,  506,  468,  468,  468,  329,  330,  686,  481,  545,
-          495,  332,  510,  596,  523,  525,  294,  469,  538,  556,
-          559,  835,  566,  574,  831,  765,  729,  717,  864,  494,
-          807,  868,  490,  860,  716,  716,  810,  697, 1013, 1105,
-          726,  726,  726,  728,  715,  840, 1093,  800,  824,  805,
-          805,  803,  805,  595,  313,  460,  833,  828,  459,    3,
-            4,  907,  733,  539, 1009,  487,  317,  461,  459,  497,
-          892,  575,  972,  474,  843,  557,  890, 1129,  484,  485,
-          505,  517,  519,  520,  568,  801,  801,  801,  801,  465,
-          855,  795,  802, 1002,  787,  405, 1003,  799,  327,  571,
-          356, 1082,  530, 1014,  848,  346,  540,  350,   11,  337,
-          337,  280,  281,  283,  493,  344,  284,  345,  285,  348,
-          524,  351, 1015, 1069, 1113, 1113,  543,  301,  298,  299,
-          721,  560,  838,  838, 1100,  295,  865,  718,  600,  323,
-          544, 1113, 1010, 1017,  511, 1005,  869,  849,  849,  849,
-          849,  849,  849, 1017,  849,  849,  849,  720,  730, 1116,
-          714,  812,  849, 1088, 1088,  909,  465,  398,  513,  414,
-         1017, 1017, 1017, 1017,    0, 1079, 1017, 1017,    0,  701,
-            0,    0,    0,    0,    0, 1079,    0,    0,    0,    0,
-            0,  773, 1090, 1090,  774,  706,    0,  756,  751,  752,
-          766,    0,  707,  753,  704,  754,  755,  705,    0,  759,
-            0, 1075,    0,    0,    0,    0,    0, 1012,    0,    0,
-            0,  480,    0,    0,    0,    0,    0,    0,    0,    0,
-            0,    0,    0,    0,    0,  867,    0, 1077, 1077,  867,
+          190,  190,  655,  781,  663,  399,  629,  964,  971,  972,
+          393,  297,  298,  317,  549,  303,  398,  318,  400,  607,
+          361,  365,  534,  572,  576,  161,  161,  161,  161,  187,
+          187,  171,  173,  209,  191,  204,  187,  187,  187,  187,
+          187,  188,  188,  188,  188,  188,  188,  182,  183,  184,
+          185,  186,  206,  204,  207,  509,  510,  389,  511,  513,
+          514,  515,  516,  517,  518,  519,  520, 1053,  162,  163,
+          164,  189,  165,  166,  167,  160,  168,  169,  170,  172,
+          203,  205,  208,  230,  233,  236,  238,  249,  250,  251,
+          252,  253,  254,  255,  256,  257,  258,  259,  266,  267,
+          300,  301,  302,  394,  395,  396,  554,  210,  211,  212,
+          213,  214,  215,  216,  217,  218,  219,  220,  221,  222,
+          223,  224,  174,  225,  175,  192,  193,  194,  231,  182,
+          183,  184,  185,  186,  206, 1053,  195,  176,  177,  178,
+          196,  192,  179,  232,  197,  159,  198,  226,  180,  199,
+          227,  228,  181,  229,  200,  201,  202,  807,  611,  611,
+          804,  274,  274,  274,  274,  976,  973,  974,  592,  626,
+         1147,  594,  594,  571,  533,  526, 1182, 1182, 1182, 1182,
+         1182, 1182, 1182, 1182, 1182, 1182, 1250, 1250,  986,  328,
+          812, 1027,  860,  855,  856,  869, 1026,  813,  857,  810,
+          858,  859,  811,  803, 1251, 1251,  805, 1250,  863,  912,
+          936,  910,  910,  908,  910,  687,  363,  526, 1003, 1004,
+          533, 1253,  525,  945,  940, 1251,  542,  543,  820, 1148,
+          838,  370,  552,  832,  308,  288,  819,  573,  864,  795,
+          865, 1200, 1200,  785,  587,  588, 1200, 1200, 1200, 1200,
+         1200, 1200, 1200, 1200, 1200, 1200, 1151, 1151, 1151,  968,
+         1149, 1208, 1209,  968,  968,  472,  968,  968,  968,  779,
+          968,  968,  968, 1232, 1232, 1232, 1232, 1151, 1151, 1151,
+         1151, 1151,  785,   21,  785,  546, 1198, 1198, 1151, 1151,
+         1151, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198,
+         1198,  523,  523,  523,  325,  876,  512,  512,  392,  877,
+          582,  512,  512,  512,  512,  512,  512,  512,  512,  512,
+          512, 1240,  427,  906,  906,  906,  906,  387,  387,  387,
+          387,  602,  604,  427,  900,  907,  540,  904,  379,  662,
+          688,  606,  608,  933,    5,  627,    6,  539,  645,  649,
+          947,  653,  661,  943,  586,  377,  378,  800, 1019,  570,
+          635,  666,  636,  359,  381,  382,  383,  453,  646,  652,
+          652,  384,  658, 1017,  454,  323,  580,  595,  598,  599,
+          600,  601,  619,  620,  621,  665,  527,  537, 1267,  450,
+         1225, 1226,  527,  545,  537,  800,  628,  362, 1101,  528,
+          434,  521,  521,  521,  521, 1227, 1228, 1132,  890,  405,
+          575, 1133, 1136,  891, 1137,  444,  553,  445,  419,  419,
+          419,  830,  329,  330, 1258, 1259, 1222, 1222, 1222,  622,
+          623,  431,  637,  638, 1211,  439,  439,  550,  585,  881,
+         1041,  797,  319,  833,  821,  991,  439,  590,  995,  825,
+          828,  369,  822,  952, 1234, 1234, 1234, 1234,  915,  648,
+          824,  955,  632,  931,  473,  691,  474,  992,  818, 1144,
+          451,  996,  480,    0,  834, 1036, 1218,  917,    0,    0,
+         1143,    0,  905,    0,    0,    0,    0,    0,  528,    0,
+            0,  419,  419,  419,  419,  419,  419,  419,  419,  419,
+          419,  419,  800,  419, 1034,  837,    0,    0,    0,  994,
+            0,    0, 1220, 1220,  994,    0,    0,    0,    0,    0,
+            0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+            0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+            0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+            0,    0,    0,    0,    0,    0,    0, 1146,    0,    0,
+            0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+            0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+            0,    0,    0,    0,  270,  524,  524,    0,    0,    0,
             0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-            0,    0,    0,    0,    0,    0,    0,    0,  462,  478,
-            0,    0,    0,    0,    0,    0,    0,    0,    0,  462,
-            0,  478,    0,    0,  316,    0,    0,  466,  386,    0,
-          388,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-            0,    0,    0,    0,    0,  724,    0, 1121
+            0,    0,    0,    0,    0,    0,    0,    0,    0,  950,
+          950
     );
 
     protected $gotoCheck = array(
-           33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
-           33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
-           33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
-           33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
-           33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
-           33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
-           33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
-           33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
-           33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
-           33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
-           33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
-           33,   33,   33,   33,   33,   33,   33,   63,   56,   10,
-           56,   86,   86,   86,    8,   86,   86,   86,   86,   86,
-           86,   86,   86,   86,   86,   86,   86,   86,   10,   10,
-           10,   46,   46,   10,   80,   85,   73,   85,   97,  134,
-           73,   73,   17,   10,  134,   10,  135,  135,  135,   26,
-          135,  135,  135,  135,  135,  135,  135,  135,  135,  135,
-          135,  135,  135,  137,  137,  137,   18,  137,  137,  137,
-          137,  137,  137,  137,  137,  137,  137,  137,  137,  137,
-          148,  148,   36,   26,  111,   26,   49,   49,   49,   49,
-           49,   49,  141,  141,   10,   10,   55,  148,   55,  111,
-           10,   10,   10,   10,   10,   69,   69,    5,   39,   69,
-            2,   69,    2,   39,   39,   39,   69,   10,   39,   39,
-           39,   39,   39,   39,   39,   13,   14,   14,   14,   10,
-           40,   14,  136,   94,   26,   26,   14,   16,   92,  146,
-           26,   26,   26,   26,   26,   14,  143,   14,   16,   16,
-           16,   16,   16,   16,   52,   16,   16,   16,   75,   37,
-           37,   14,   14,   54,   14,   53,   65,   65,   75,    7,
-            7,    7,  118,   65,   88,    7,    7,   12,   65,   65,
-           68,   68,   68,   68,   68,   75,   75,   75,   75,   12,
-           90,   75,   75,   67,   67,   65,   67,   76,   76,   76,
-           89,  139,   24,   92,   91,   56,   56,   56,   65,   56,
-           56,   56,   56,   56,   56,   56,   56,   56,   56,   56,
-           56,   56,   92,   92,  147,  147,   12,   20,   80,   80,
-           30,   12,   85,   85,   85,   11,   96,   28,   82,   19,
-           23,  147,  127,   63,   15,  124,   99,   63,   63,   63,
-           63,   63,   63,   63,   63,   63,   63,   15,   32,  147,
-           15,   79,   63,    8,    8,  114,   12,   71,   72,  122,
-           63,   63,   63,   63,   -1,   97,   63,   63,   -1,   13,
-           -1,   -1,   -1,   -1,   -1,   97,   -1,   -1,   -1,   -1,
-           -1,   63,   97,   97,   63,   13,   -1,   13,   13,   13,
-           13,   -1,   13,   13,   13,   13,   13,   13,   -1,   13,
-           -1,   97,   -1,   -1,   -1,   -1,   -1,   12,   -1,   -1,
-           -1,    8,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-           -1,   -1,   -1,   -1,   -1,   97,   -1,   97,   97,   97,
+           41,   41,   71,    6,    8,   64,   64,  105,  105,  105,
+           64,   64,   64,   64,   64,   64,   64,   64,   64,   64,
+           57,   57,   57,   57,   57,   41,   41,   41,   41,   41,
+           41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
+           41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
+           41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
+           41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
+           41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
+           41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
+           41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
+           41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
+           41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
+           41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
+           41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
+           41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
+           41,   41,   41,   41,   41,   41,   41,   14,  107,  107,
+           25,   22,   22,   22,   22,  107,  107,  107,   54,   54,
+           19,   99,   99,  114,   74,   74,   99,   99,   99,   99,
+           99,   99,   99,   99,   99,   99,  164,  164,  111,   88,
+           14,  128,   14,   14,   14,   14,  128,   14,   14,   14,
+           14,   14,   14,   24,  165,  165,   26,  164,   14,   48,
+           24,   24,   24,   24,   24,   24,   74,   74,   14,   14,
+           74,  164,   24,   24,   24,  165,   74,   74,   34,   19,
+           44,   74,   74,   34,  151,  151,   34,   74,   63,   19,
+           63,  152,  152,   11,   74,   74,  152,  152,  152,  152,
+          152,  152,  152,  152,  152,  152,   71,   71,   71,   71,
+           19,   19,   19,   71,   71,   74,   71,   71,   71,    5,
+           71,   71,   71,    8,    8,    8,    8,   71,   71,   71,
+           71,   71,   11,   74,   11,  154,  153,  153,   71,   71,
+           71,  153,  153,  153,  153,  153,  153,  153,  153,  153,
+          153,   18,   18,   18,  161,   71,  155,  155,   12,   71,
+           12,  155,  155,  155,  155,  155,  155,  155,  155,  155,
+          155,  163,   18,   18,   18,   18,   18,   23,   23,   23,
+           23,   81,   81,   18,   18,   18,   47,   84,   84,   84,
+           47,   47,   47,   94,   45,   47,   45,    8,   47,   47,
+           47,   47,   47,   47,    8,   78,   78,   21,    7,    7,
+           78,    7,   78,   60,   78,   78,   78,   80,   78,    7,
+            7,   78,    7,    7,   80,   78,   77,   77,   77,   77,
+           77,   77,   77,   77,   77,   77,    8,    8,   13,  158,
+          158,  158,    8,   95,    8,   21,   62,    8,  135,   13,
+            8,   98,   98,   98,   98,  160,  160,   76,   76,  103,
+           98,   76,   76,   76,   76,    8,    8,    8,   22,   22,
+           22,    8,   88,   88,    8,    8,  114,  114,  114,   82,
+           82,   79,   82,   82,   13,  133,  133,    2,    2,   16,
+           16,   17,   28,   15,   15,   15,  133,   16,   15,   38,
+            8,   27,   36,   16,  114,  114,  114,  114,   15,   13,
+           16,  101,   16,   16,  139,   90,  139,  113,   16,  144,
+          141,  116,  139,   -1,   40,  131,  114,   87,   -1,   -1,
+           16,   -1,   15,   -1,   -1,   -1,   -1,   -1,   13,   -1,
+           -1,   22,   22,   22,   22,   22,   22,   22,   22,   22,
+           22,   22,   21,   22,   15,   15,   -1,   -1,   -1,  114,
+           -1,   -1,  114,  114,  114,   -1,   -1,   -1,   -1,   -1,
            -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-           -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,    8,    8,
-           -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,    8,
-           -1,    8,   -1,   -1,    8,   -1,   -1,    8,    8,   -1,
-            8,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-           -1,   -1,   -1,   -1,   -1,    8,   -1,    8
+           -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+           -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+           -1,   -1,   -1,   -1,   -1,   -1,   -1,   13,   -1,   -1,
+           -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+           -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+           -1,   -1,   -1,   -1,   23,   23,   23,   -1,   -1,   -1,
+           -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+           -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   98,
+           98
     );
 
     protected $gotoBase = array(
-            0,    0, -358,    0,    0,  207,    0,  274,  114,    0,
-         -148,   54,   10,   94, -144,  -40,  245,  150,  174,   48,
-           70,    0,    0,   -3,   25,    0, -108,    0,   44,    0,
-           52,    0,    3,  -23,    0,    0,  183, -331,    0, -359,
-          221,    0,    0,    0,    0,    0,  106,    0,    0,  157,
-            0,    0,  227,   45,   47,  191,   90,    0,    0,    0,
-            0,    0,    0,  111,    0,  -95,    0,  -26,   43, -193,
-            0,  -12,  -20, -435,    0,   26,   37,    0,    0,    4,
-         -259,    0,   20,    0,    0,  117, -104,    0,   31,   55,
-           46,   53,  -64,    0,  216,    0,   40,  143,    0,  -10,
-            0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-            0,  -34,    0,    0,    7,    0,    0,    0,   30,    0,
-            0,    0,  -32,    0,   -9,    0,    0,   -5,    0,    0,
-            0,    0,    0,    0, -119,  -69,  217,  -52,    0,   51,
-            0, -102,    0,  226,    0,    0,  223,   77,  -67,    0,
-            0
+            0,    0, -232,    0,    0,  249,   -6,  351,  -16,    0,
+            0,  -37,  -11,   79, -167,   22,    1,  148,   40, -188,
+            0,   83,  158,  324,  199,  156,  202,  132,  162,    0,
+            0,    0,    0,    0, -118,    0,  131,    0,  142,    0,
+           66,   -1,    0,    0,  211, -347,    0, -332,  192,    0,
+            0,    0,    0,    0,  130,    0,    0,  -23,    0,    0,
+          323,    0,  161,  225, -229,    0,    0,    0,    0,    0,
+            0,   -5,    0,    0, -198,    0,   30,   42, -109,  157,
+          -77, -122, -246,    0,   53,    0,    0,   67, -267,    0,
+           89,    0,    0,    0,  312,  352,    0,    0,  375,  -63,
+            0,  116,    0,  140,    0, -264,    0, -110,    0,    0,
+            0,  186,    0,  118,  165,    0,   62,    0,    0,    0,
+            0,    0,    0,    0,    0,    0,    0,    0,  -74,    0,
+            0,   64,    0,  405,    0,  135,    0,    0,    0,   -4,
+            0,   63,    0,    0,   65,    0,    0,    0,    0,    0,
+            0,  -71,    7,   52,  258,   72,    0,    0,   99,    0,
+           58,  276,    0,  292, -101,  -83,    0,    0
     );
 
     protected $gotoDefault = array(
-        -32768,  420,  603,    2,  604,  676,  684,  548,  437,  573,
-          438,  464,  335,  758,  913,  778,  740,  741,  742,  320,
-          361,  311,  318,  531,  518,  410,  727,  381,  719,  407,
-          722,  380,  731,  140,  549,  416,  735,    1,  737,  470,
-          769,  308,  745,  309,  552,  747,  477,  749,  750,  314,
-          321,  322,  917,  486,  515,  762,  213,  479,  763,  307,
-          764,  772,  331,  312,  392,  417,  326,  894,  504,  527,
-          376,  395,  512,  507,  488, 1024,  797,  401,  390,  811,
-          296,  819,  601,  827,  830,  439,  440,  399,  842,  400,
-          853,  847, 1032,  394,  859,  382,  866, 1064,  385,  870,
-          228,  873,  255,  546,  349,  878,  879,    6,  884,  564,
-          565,    7,  243,  415,  908,  547,  379,  923,  364,  991,
-          993,  472,  408, 1006,  389,  555,  418, 1011, 1068,  377,
-          441,  396,  282,  300,  257,  442,  458,  262,  443,  397,
-         1071, 1078,  338, 1094,  279,   26, 1106, 1115,  292,  492,
-          509
+        -32768,  485,  695,    4,  696,  769,  777,  569,  503,  664,
+          324,  596,  390,  331,  862, 1040,  551,  796, 1160, 1168,
+          428,  799,  312,  326,  844,  845,  846,  366,  351,  357,
+          364,  617,  597,  467,  831,  422,  823,  459,  826,  421,
+          835,  158,  386,  483,  839,    3,  841,  530,  872,  352,
+          849,  353,  641,  851,  536,  853,  854,  360,  367,  368,
+         1045,  544,  593,  866,  237,  538,  867,  350,  868,  875,
+          355,  358,  650,  438,  478,  380, 1021,  579,  614,  416,
+          447,  591,  603,  589,  902,  460,  436,  916,  327,  924,
+          693, 1052,  609,  462,  932,  610,  939,  942,  504,  505,
+          452,  954,  268,  463,  981,  633,  634,  966,  612,  979,
+          446,  985,  423,  993, 1204,  426,  997,  260, 1000,  269,
+          385,  401, 1005, 1006,    7, 1011,  656,  657,   10,  265,
+          482, 1035,  651,  420, 1051,  406, 1120, 1122,  532,  464,
+         1140, 1139,  644,  479, 1145, 1207,  417,  506,  448,  299,
+          507,  287,  315,  296,  522,  278,  316,  508,  449, 1213,
+         1221,  313,   29, 1241, 1252,  322,  548,  584
     );
 
     protected $ruleToNonTerminal = array(
@@ -750,52 +844,57 @@ class Php7 extends \PhpParser\ParserAbstract
             5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
             5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
             5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
-            5,    5,    5,    5,    6,    6,    6,    6,    6,    6,
-            6,    7,    7,    8,    9,   10,   10,   11,   12,   13,
-           13,   14,   14,   15,   15,    4,    4,    4,    4,    4,
-            4,    4,    4,    4,    4,    4,   20,   20,   21,   21,
-           21,   21,   23,   25,   25,   19,   27,   27,   24,   29,
-           29,   26,   26,   28,   28,   30,   30,   22,   31,   31,
-           32,   34,   35,   35,   36,   37,   37,   39,   38,   38,
-           38,   38,   40,   40,   40,   40,   40,   40,   40,   40,
-           40,   40,   40,   40,   40,   40,   40,   40,   40,   40,
-           40,   40,   40,   40,   40,   40,   40,   16,   16,   59,
-           59,   62,   62,   61,   60,   60,   53,   64,   64,   65,
-           65,   66,   66,   67,   67,   17,   18,   18,   18,   70,
-           70,   70,   71,   71,   74,   74,   72,   72,   76,   77,
-           77,   47,   47,   55,   55,   58,   58,   58,   57,   78,
-           78,   79,   48,   48,   48,   48,   80,   80,   81,   81,
-           82,   82,   45,   45,   41,   41,   83,   43,   43,   84,
-           42,   42,   44,   44,   54,   54,   54,   54,   68,   68,
-           87,   87,   88,   88,   88,   90,   90,   91,   91,   91,
-           89,   89,   69,   69,   69,   92,   92,   93,   93,   94,
-           94,   94,   50,   95,   95,   96,   51,   98,   98,   99,
-           99,  100,  100,   73,  101,  101,  101,  101,  101,  106,
-          106,  107,  107,  108,  108,  108,  108,  108,  109,  110,
-          110,  105,  105,  102,  102,  104,  104,  112,  112,  111,
-          111,  111,  111,  111,  111,  103,  113,  113,  115,  114,
-          114,   52,  116,  116,   46,   46,   33,   33,   33,   33,
-           33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
-           33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
-           33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
-           33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
-           33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
-           33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
-           33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
-           33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
-           33,   33,  123,  117,  117,  122,  122,  125,  126,  126,
-          127,  128,  128,  128,   75,   75,   63,   63,   63,  118,
-          118,  118,  130,  130,  119,  119,  121,  121,  121,  124,
-          124,  135,  135,  135,   86,  137,  137,  137,  120,  120,
-          120,  120,  120,  120,  120,  120,  120,  120,  120,  120,
-          120,  120,  120,  120,   49,   49,  133,  133,  133,  129,
-          129,  129,  138,  138,  138,  138,  138,  138,   56,   56,
-           56,   97,   97,   97,   97,  141,  140,  132,  132,  132,
-          132,  132,  132,  131,  131,  131,  139,  139,  139,  139,
-           85,  142,  142,  143,  143,  143,  143,  143,  143,  143,
-          136,  145,  145,  144,  144,  146,  146,  146,  146,  146,
-          146,  134,  134,  134,  134,  148,  149,  147,  147,  147,
-          147,  147,  147,  147,  150,  150,  150,  150
+            5,    5,    5,    5,    5,    6,    6,    6,    6,    6,
+            6,    6,    7,    7,    8,    9,   10,   10,   10,   11,
+           11,   12,   12,   13,   14,   14,   15,   15,   16,   16,
+           17,   17,   20,   20,   21,   22,   22,   23,   23,    4,
+            4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
+           28,   28,   29,   29,   31,   33,   33,   27,   35,   35,
+           32,   37,   37,   34,   34,   36,   36,   38,   38,   30,
+           39,   39,   40,   42,   43,   43,   44,   45,   45,   47,
+           46,   46,   46,   46,   48,   48,   48,   48,   48,   48,
+           48,   48,   48,   48,   48,   48,   48,   48,   48,   48,
+           48,   48,   48,   48,   48,   48,   48,   48,   24,   24,
+           67,   67,   70,   70,   69,   68,   68,   61,   73,   73,
+           74,   74,   75,   75,   76,   76,   25,   25,   26,   26,
+           26,   26,   79,   79,   79,   80,   80,   83,   83,   81,
+           81,   84,   85,   85,   55,   55,   63,   63,   66,   66,
+           66,   65,   86,   86,   87,   56,   56,   56,   56,   88,
+           88,   89,   89,   90,   90,   91,   92,   92,   93,   93,
+           94,   94,   53,   53,   49,   49,   96,   51,   51,   97,
+           50,   50,   52,   52,   62,   62,   62,   62,   77,   77,
+          100,  100,  102,  102,  102,  102,  101,  101,  101,  104,
+          104,  104,  105,  105,  107,  107,  107,  106,  106,  108,
+          108,  109,  109,  109,  103,  103,   78,   78,   78,   19,
+           19,  110,  110,  111,  111,  111,  111,   58,  112,  112,
+          113,   59,  115,  115,  116,  116,  117,  117,   82,  118,
+          118,  118,  118,  118,  123,  123,  124,  124,  125,  125,
+          125,  125,  125,  126,  127,  127,  122,  122,  119,  119,
+          121,  121,  129,  129,  128,  128,  128,  128,  128,  128,
+          120,  130,  130,  132,  131,  131,   60,   95,  133,  133,
+           54,   54,   41,   41,   41,   41,   41,   41,   41,   41,
+           41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
+           41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
+           41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
+           41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
+           41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
+           41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
+           41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
+           41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
+           41,   41,   41,   41,  140,  134,  134,  139,  139,  142,
+          143,  143,  144,  145,  145,  145,   18,   18,   71,   71,
+           71,   71,  135,  135,  135,  135,  147,  147,  136,  136,
+          138,  138,  138,  141,  141,  152,  152,  152,  152,  152,
+          152,  152,  152,  152,  153,  153,   99,  155,  155,  155,
+          155,  137,  137,  137,  137,  137,  137,  137,  137,   57,
+           57,  150,  150,  150,  150,  156,  156,  146,  146,  146,
+          157,  157,  157,  157,  157,  157,   72,   72,   64,   64,
+           64,   64,  114,  114,  114,  114,  160,  159,  149,  149,
+          149,  149,  149,  149,  149,  148,  148,  148,  158,  158,
+          158,  158,   98,  154,  162,  162,  161,  161,  163,  163,
+          163,  163,  163,  163,  163,  163,  151,  151,  151,  151,
+          165,  166,  164,  164,  164,  164,  164,  164,  164,  164,
+          167,  167,  167,  167
     );
 
     protected $ruleToLength = array(
@@ -807,51 +906,56 @@ class Php7 extends \PhpParser\ParserAbstract
             1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
             1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
             1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-            1,    1,    1,    1,    1,    1,    3,    1,    1,    1,
-            1,    0,    1,    0,    1,    1,    1,    1,    1,    3,
-            5,    4,    3,    4,    2,    3,    1,    1,    7,    8,
-            6,    7,    2,    3,    1,    2,    3,    1,    2,    3,
-            1,    1,    3,    1,    2,    1,    2,    2,    3,    1,
-            3,    2,    3,    1,    3,    2,    0,    1,    1,    1,
-            1,    1,    3,    7,   10,    5,    7,    9,    5,    3,
-            3,    3,    3,    3,    3,    1,    2,    5,    7,    9,
-            6,    5,    6,    3,    3,    2,    1,    1,    1,    0,
-            2,    1,    3,    8,    0,    4,    2,    1,    3,    0,
-            1,    0,    1,    3,    1,    8,    7,    6,    5,    1,
-            2,    2,    0,    2,    0,    2,    0,    2,    2,    1,
-            3,    1,    4,    1,    4,    1,    1,    4,    2,    1,
-            3,    3,    3,    4,    4,    5,    0,    2,    4,    3,
-            1,    1,    1,    4,    0,    2,    5,    0,    2,    6,
+            1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+            1,    1,    1,    1,    1,    1,    0,    1,    0,    1,
+            1,    2,    1,    3,    4,    1,    2,    0,    1,    1,
+            1,    1,    1,    3,    5,    4,    3,    4,    2,    3,
+            1,    1,    7,    6,    2,    3,    1,    2,    3,    1,
+            2,    3,    1,    1,    3,    1,    3,    1,    2,    2,
+            3,    1,    3,    2,    3,    1,    3,    2,    0,    1,
+            1,    1,    1,    1,    3,    7,   10,    5,    7,    9,
+            5,    3,    3,    3,    3,    3,    3,    1,    2,    5,
+            7,    9,    6,    5,    6,    3,    2,    1,    1,    1,
+            0,    2,    1,    3,    8,    0,    4,    2,    1,    3,
+            0,    1,    0,    1,    3,    1,    8,    9,    7,    8,
+            7,    6,    1,    2,    2,    0,    2,    0,    2,    0,
+            2,    2,    1,    3,    1,    4,    1,    4,    1,    1,
+            4,    2,    1,    3,    3,    3,    4,    4,    5,    0,
+            2,    4,    3,    1,    1,    7,    0,    2,    1,    3,
+            3,    4,    1,    4,    0,    2,    5,    0,    2,    6,
             0,    2,    0,    3,    1,    2,    1,    1,    2,    0,
-            1,    3,    4,    6,    4,    1,    2,    1,    1,    1,
-            0,    1,    0,    2,    2,    2,    4,    1,    3,    1,
-            2,    2,    2,    3,    1,    1,    2,    3,    1,    1,
-            3,    2,    0,    1,    4,    4,    9,    3,    1,    1,
-            3,    0,    2,    4,    5,    4,    4,    4,    3,    1,
-            1,    1,    1,    1,    1,    0,    1,    1,    2,    1,
-            1,    1,    1,    1,    1,    2,    1,    3,    1,    1,
-            3,    2,    3,    1,    0,    1,    1,    3,    3,    3,
-            4,    1,    2,    3,    3,    3,    3,    3,    3,    3,
-            3,    3,    3,    3,    3,    3,    2,    2,    2,    2,
+            1,    3,    0,    1,    1,    1,    6,    8,    6,    1,
+            2,    1,    1,    1,    1,    1,    1,    3,    3,    3,
+            3,    1,    2,    1,    0,    1,    0,    2,    2,    2,
+            4,    1,    3,    1,    2,    2,    3,    2,    3,    1,
+            1,    2,    3,    1,    1,    3,    2,    0,    1,    5,
+            5,   10,    3,    1,    1,    3,    0,    2,    4,    5,
+            4,    4,    4,    3,    1,    1,    1,    1,    1,    1,
+            0,    1,    1,    2,    1,    1,    1,    1,    1,    1,
+            2,    1,    3,    1,    1,    3,    2,    2,    3,    1,
+            0,    1,    1,    3,    3,    3,    4,    1,    1,    2,
             3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
-            3,    3,    3,    3,    3,    3,    3,    2,    2,    2,
-            2,    3,    3,    3,    3,    3,    3,    3,    3,    3,
-            3,    3,    5,    4,    3,    4,    4,    2,    2,    4,
-            2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
-            2,    1,    3,    2,    1,    2,    4,    2,    8,    9,
-            8,    9,    7,    3,    2,    0,    4,    2,    1,    3,
-            2,    2,    2,    4,    1,    1,    1,    2,    3,    1,
-            1,    1,    1,    1,    0,    3,    0,    1,    1,    0,
-            1,    1,    3,    3,    3,    4,    1,    1,    1,    1,
-            1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-            3,    2,    3,    3,    0,    1,    1,    3,    1,    1,
-            3,    1,    1,    4,    4,    4,    1,    4,    1,    1,
-            3,    1,    4,    2,    2,    1,    3,    1,    4,    4,
-            3,    3,    3,    1,    3,    1,    1,    3,    1,    1,
-            4,    3,    1,    1,    2,    1,    3,    4,    3,    0,
-            1,    1,    1,    3,    1,    3,    1,    4,    2,    2,
-            0,    2,    2,    1,    2,    1,    1,    1,    4,    3,
-            3,    3,    6,    3,    1,    1,    2,    1
+            3,    3,    3,    2,    2,    2,    2,    3,    3,    3,
+            3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
+            3,    3,    3,    3,    2,    2,    2,    2,    3,    3,
+            3,    3,    3,    3,    3,    3,    3,    3,    3,    5,
+            4,    3,    4,    4,    2,    2,    4,    2,    2,    2,
+            2,    2,    2,    2,    2,    2,    2,    2,    1,    3,
+            2,    1,    2,    4,    2,    2,    8,    9,    8,    9,
+            9,   10,    9,   10,    8,    3,    2,    0,    4,    2,
+            1,    3,    2,    2,    2,    4,    1,    1,    1,    1,
+            1,    1,    1,    1,    3,    1,    1,    1,    0,    3,
+            0,    1,    1,    0,    1,    1,    1,    1,    1,    1,
+            1,    1,    1,    1,    3,    3,    3,    4,    1,    1,
+            3,    1,    1,    1,    1,    1,    3,    2,    3,    0,
+            1,    1,    3,    1,    1,    1,    1,    1,    3,    1,
+            1,    4,    4,    1,    4,    4,    0,    1,    1,    1,
+            3,    3,    1,    4,    2,    2,    1,    3,    1,    4,
+            4,    3,    3,    3,    3,    1,    3,    1,    1,    3,
+            1,    1,    4,    1,    1,    1,    3,    1,    1,    2,
+            1,    3,    4,    3,    2,    0,    2,    2,    1,    2,
+            1,    1,    1,    4,    3,    3,    3,    3,    6,    3,
+            1,    1,    2,    1
     );
 
     protected function initReduceCallbacks() {
@@ -869,7 +973,7 @@ protected function initReduceCallbacks() {
                  $this->semValue = array();
             },
             4 => function ($stackPos) {
-                 $startAttributes = $this->lookaheadStartAttributes; if (isset($startAttributes['comments'])) { $nop = new Stmt\Nop($this->createZeroLengthAttributes($startAttributes)); } else { $nop = null; };
+                 $startAttributes = $this->lookaheadStartAttributes; if (isset($startAttributes['comments'])) { $nop = new Stmt\Nop($this->createCommentNopAttributes($startAttributes['comments'])); } else { $nop = null; };
             if ($nop !== null) { $this->semStack[$stackPos-(1-1)][] = $nop; } $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             5 => function ($stackPos) {
@@ -1101,7 +1205,7 @@ protected function initReduceCallbacks() {
                 $this->semValue = $this->semStack[$stackPos];
             },
             81 => function ($stackPos) {
-                 $this->semValue = new Node\Identifier($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                $this->semValue = $this->semStack[$stackPos];
             },
             82 => function ($stackPos) {
                  $this->semValue = new Node\Identifier($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
@@ -1113,136 +1217,136 @@ protected function initReduceCallbacks() {
                  $this->semValue = new Node\Identifier($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             85 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = new Node\Identifier($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             86 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             87 => function ($stackPos) {
                  $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             88 => function ($stackPos) {
-                 $this->semValue = new Expr\Variable(substr($this->semStack[$stackPos-(1-1)], 1), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             89 => function ($stackPos) {
-                 /* nothing */
+                 $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             90 => function ($stackPos) {
-                 /* nothing */
+                 $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             91 => function ($stackPos) {
-                 /* nothing */
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             92 => function ($stackPos) {
-                 $this->emitError(new Error('A trailing comma is not allowed here', $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes));
+                 $this->semValue = new Name(substr($this->semStack[$stackPos-(1-1)], 1), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             93 => function ($stackPos) {
-                $this->semValue = $this->semStack[$stackPos];
+                 $this->semValue = new Expr\Variable(substr($this->semStack[$stackPos-(1-1)], 1), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             94 => function ($stackPos) {
-                $this->semValue = $this->semStack[$stackPos];
+                 /* nothing */
             },
             95 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 /* nothing */
             },
             96 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 /* nothing */
             },
             97 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->emitError(new Error('A trailing comma is not allowed here', $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes));
             },
             98 => function ($stackPos) {
-                 $this->semValue = new Stmt\HaltCompiler($this->lexer->handleHaltCompiler(), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                $this->semValue = $this->semStack[$stackPos];
             },
             99 => function ($stackPos) {
-                 $this->semValue = new Stmt\Namespace_($this->semStack[$stackPos-(3-2)], null, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
-            $this->semValue->setAttribute('kind', Stmt\Namespace_::KIND_SEMICOLON);
-            $this->checkNamespace($this->semValue);
+                $this->semValue = $this->semStack[$stackPos];
             },
             100 => function ($stackPos) {
-                 $this->semValue = new Stmt\Namespace_($this->semStack[$stackPos-(5-2)], $this->semStack[$stackPos-(5-4)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
-            $this->semValue->setAttribute('kind', Stmt\Namespace_::KIND_BRACED);
-            $this->checkNamespace($this->semValue);
+                 $this->semValue = new Node\Attribute($this->semStack[$stackPos-(1-1)], [], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             101 => function ($stackPos) {
-                 $this->semValue = new Stmt\Namespace_(null, $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
-            $this->semValue->setAttribute('kind', Stmt\Namespace_::KIND_BRACED);
-            $this->checkNamespace($this->semValue);
+                 $this->semValue = new Node\Attribute($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             102 => function ($stackPos) {
-                 $this->semValue = new Stmt\Use_($this->semStack[$stackPos-(3-2)], Stmt\Use_::TYPE_NORMAL, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             103 => function ($stackPos) {
-                 $this->semValue = new Stmt\Use_($this->semStack[$stackPos-(4-3)], $this->semStack[$stackPos-(4-2)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             104 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = new Node\AttributeGroup($this->semStack[$stackPos-(4-2)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             105 => function ($stackPos) {
-                 $this->semValue = new Stmt\Const_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             106 => function ($stackPos) {
-                 $this->semValue = Stmt\Use_::TYPE_FUNCTION;
+                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             107 => function ($stackPos) {
-                 $this->semValue = Stmt\Use_::TYPE_CONSTANT;
+                 $this->semValue = [];
             },
             108 => function ($stackPos) {
-                 $this->semValue = new Stmt\GroupUse(new Name($this->semStack[$stackPos-(7-3)], $this->startAttributeStack[$stackPos-(7-3)] + $this->endAttributeStack[$stackPos-(7-3)]), $this->semStack[$stackPos-(7-6)], $this->semStack[$stackPos-(7-2)], $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             109 => function ($stackPos) {
-                 $this->semValue = new Stmt\GroupUse(new Name($this->semStack[$stackPos-(8-4)], $this->startAttributeStack[$stackPos-(8-4)] + $this->endAttributeStack[$stackPos-(8-4)]), $this->semStack[$stackPos-(8-7)], $this->semStack[$stackPos-(8-2)], $this->startAttributeStack[$stackPos-(8-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             110 => function ($stackPos) {
-                 $this->semValue = new Stmt\GroupUse(new Name($this->semStack[$stackPos-(6-2)], $this->startAttributeStack[$stackPos-(6-2)] + $this->endAttributeStack[$stackPos-(6-2)]), $this->semStack[$stackPos-(6-5)], Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             111 => function ($stackPos) {
-                 $this->semValue = new Stmt\GroupUse(new Name($this->semStack[$stackPos-(7-3)], $this->startAttributeStack[$stackPos-(7-3)] + $this->endAttributeStack[$stackPos-(7-3)]), $this->semStack[$stackPos-(7-6)], Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             112 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = new Stmt\HaltCompiler($this->lexer->handleHaltCompiler(), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             113 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = new Stmt\Namespace_($this->semStack[$stackPos-(3-2)], null, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+            $this->semValue->setAttribute('kind', Stmt\Namespace_::KIND_SEMICOLON);
+            $this->checkNamespace($this->semValue);
             },
             114 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = new Stmt\Namespace_($this->semStack[$stackPos-(5-2)], $this->semStack[$stackPos-(5-4)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
+            $this->semValue->setAttribute('kind', Stmt\Namespace_::KIND_BRACED);
+            $this->checkNamespace($this->semValue);
             },
             115 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = new Stmt\Namespace_(null, $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+            $this->semValue->setAttribute('kind', Stmt\Namespace_::KIND_BRACED);
+            $this->checkNamespace($this->semValue);
             },
             116 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = new Stmt\Use_($this->semStack[$stackPos-(3-2)], Stmt\Use_::TYPE_NORMAL, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             117 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = new Stmt\Use_($this->semStack[$stackPos-(4-3)], $this->semStack[$stackPos-(4-2)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             118 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             119 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = new Stmt\Const_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             120 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = Stmt\Use_::TYPE_FUNCTION;
             },
             121 => function ($stackPos) {
-                 $this->semValue = new Stmt\UseUse($this->semStack[$stackPos-(1-1)], null, Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); $this->checkUseUse($this->semValue, $stackPos-(1-1));
+                 $this->semValue = Stmt\Use_::TYPE_CONSTANT;
             },
             122 => function ($stackPos) {
-                 $this->semValue = new Stmt\UseUse($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); $this->checkUseUse($this->semValue, $stackPos-(3-3));
+                 $this->semValue = new Stmt\GroupUse($this->semStack[$stackPos-(7-3)], $this->semStack[$stackPos-(7-6)], $this->semStack[$stackPos-(7-2)], $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes);
             },
             123 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Stmt\GroupUse($this->semStack[$stackPos-(6-2)], $this->semStack[$stackPos-(6-5)], Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes);
             },
             124 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-2)];
+                 $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             125 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)]; $this->semValue->type = Stmt\Use_::TYPE_NORMAL;
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             126 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-2)]; $this->semValue->type = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             127 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(2-1)];
@@ -1254,1220 +1358,1371 @@ protected function initReduceCallbacks() {
                  $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             130 => function ($stackPos) {
-                 $this->semValue = new Node\Const_($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             131 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             132 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             133 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = new Stmt\UseUse($this->semStack[$stackPos-(1-1)], null, Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); $this->checkUseUse($this->semValue, $stackPos-(1-1));
             },
             134 => function ($stackPos) {
-                 $this->semValue = new Node\Const_($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Stmt\UseUse($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); $this->checkUseUse($this->semValue, $stackPos-(3-3));
             },
             135 => function ($stackPos) {
-                 if (is_array($this->semStack[$stackPos-(2-2)])) { $this->semValue = array_merge($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)]); } else { $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)]; };
+                 $this->semValue = new Stmt\UseUse($this->semStack[$stackPos-(1-1)], null, Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); $this->checkUseUse($this->semValue, $stackPos-(1-1));
             },
             136 => function ($stackPos) {
-                 $this->semValue = array();
+                 $this->semValue = new Stmt\UseUse($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); $this->checkUseUse($this->semValue, $stackPos-(3-3));
             },
             137 => function ($stackPos) {
-                 $startAttributes = $this->lookaheadStartAttributes; if (isset($startAttributes['comments'])) { $nop = new Stmt\Nop($this->createZeroLengthAttributes($startAttributes)); } else { $nop = null; };
-            if ($nop !== null) { $this->semStack[$stackPos-(1-1)][] = $nop; } $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = $this->semStack[$stackPos-(1-1)]; $this->semValue->type = Stmt\Use_::TYPE_NORMAL;
             },
             138 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = $this->semStack[$stackPos-(2-2)]; $this->semValue->type = $this->semStack[$stackPos-(2-1)];
             },
             139 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             140 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             141 => function ($stackPos) {
-                 throw new Error('__HALT_COMPILER() can only be used from the outermost scope', $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             142 => function ($stackPos) {
-
-        if ($this->semStack[$stackPos-(3-2)]) {
-            $this->semValue = $this->semStack[$stackPos-(3-2)]; $attrs = $this->startAttributeStack[$stackPos-(3-1)]; $stmts = $this->semValue; if (!empty($attrs['comments'])) {$stmts[0]->setAttribute('comments', array_merge($attrs['comments'], $stmts[0]->getAttribute('comments', []))); };
-        } else {
-            $startAttributes = $this->startAttributeStack[$stackPos-(3-1)]; if (isset($startAttributes['comments'])) { $this->semValue = new Stmt\Nop($startAttributes + $this->endAttributes); } else { $this->semValue = null; };
-            if (null === $this->semValue) { $this->semValue = array(); }
-        }
-
+                 $this->semValue = new Node\Const_($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             143 => function ($stackPos) {
-                 $this->semValue = new Stmt\If_($this->semStack[$stackPos-(7-3)], ['stmts' => is_array($this->semStack[$stackPos-(7-5)]) ? $this->semStack[$stackPos-(7-5)] : array($this->semStack[$stackPos-(7-5)]), 'elseifs' => $this->semStack[$stackPos-(7-6)], 'else' => $this->semStack[$stackPos-(7-7)]], $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             144 => function ($stackPos) {
-                 $this->semValue = new Stmt\If_($this->semStack[$stackPos-(10-3)], ['stmts' => $this->semStack[$stackPos-(10-6)], 'elseifs' => $this->semStack[$stackPos-(10-7)], 'else' => $this->semStack[$stackPos-(10-8)]], $this->startAttributeStack[$stackPos-(10-1)] + $this->endAttributes);
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             145 => function ($stackPos) {
-                 $this->semValue = new Stmt\While_($this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-5)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             146 => function ($stackPos) {
-                 $this->semValue = new Stmt\Do_($this->semStack[$stackPos-(7-5)], is_array($this->semStack[$stackPos-(7-2)]) ? $this->semStack[$stackPos-(7-2)] : array($this->semStack[$stackPos-(7-2)]), $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes);
+                 $this->semValue = new Node\Const_($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             147 => function ($stackPos) {
-                 $this->semValue = new Stmt\For_(['init' => $this->semStack[$stackPos-(9-3)], 'cond' => $this->semStack[$stackPos-(9-5)], 'loop' => $this->semStack[$stackPos-(9-7)], 'stmts' => $this->semStack[$stackPos-(9-9)]], $this->startAttributeStack[$stackPos-(9-1)] + $this->endAttributes);
+                 if (is_array($this->semStack[$stackPos-(2-2)])) { $this->semValue = array_merge($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)]); } else { $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)]; };
             },
             148 => function ($stackPos) {
-                 $this->semValue = new Stmt\Switch_($this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-5)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
+                 $this->semValue = array();
             },
             149 => function ($stackPos) {
-                 $this->semValue = new Stmt\Break_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $startAttributes = $this->lookaheadStartAttributes; if (isset($startAttributes['comments'])) { $nop = new Stmt\Nop($this->createCommentNopAttributes($startAttributes['comments'])); } else { $nop = null; };
+            if ($nop !== null) { $this->semStack[$stackPos-(1-1)][] = $nop; } $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             150 => function ($stackPos) {
-                 $this->semValue = new Stmt\Continue_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             151 => function ($stackPos) {
-                 $this->semValue = new Stmt\Return_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             152 => function ($stackPos) {
-                 $this->semValue = new Stmt\Global_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             153 => function ($stackPos) {
-                 $this->semValue = new Stmt\Static_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 throw new Error('__HALT_COMPILER() can only be used from the outermost scope', $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             154 => function ($stackPos) {
-                 $this->semValue = new Stmt\Echo_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+
+        if ($this->semStack[$stackPos-(3-2)]) {
+            $this->semValue = $this->semStack[$stackPos-(3-2)]; $attrs = $this->startAttributeStack[$stackPos-(3-1)]; $stmts = $this->semValue; if (!empty($attrs['comments'])) {$stmts[0]->setAttribute('comments', array_merge($attrs['comments'], $stmts[0]->getAttribute('comments', []))); };
+        } else {
+            $startAttributes = $this->startAttributeStack[$stackPos-(3-1)]; if (isset($startAttributes['comments'])) { $this->semValue = new Stmt\Nop($startAttributes + $this->endAttributes); } else { $this->semValue = null; };
+            if (null === $this->semValue) { $this->semValue = array(); }
+        }
+
             },
             155 => function ($stackPos) {
-                 $this->semValue = new Stmt\InlineHTML($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Stmt\If_($this->semStack[$stackPos-(7-3)], ['stmts' => is_array($this->semStack[$stackPos-(7-5)]) ? $this->semStack[$stackPos-(7-5)] : array($this->semStack[$stackPos-(7-5)]), 'elseifs' => $this->semStack[$stackPos-(7-6)], 'else' => $this->semStack[$stackPos-(7-7)]], $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes);
             },
             156 => function ($stackPos) {
-                 $this->semValue = new Stmt\Expression($this->semStack[$stackPos-(2-1)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Stmt\If_($this->semStack[$stackPos-(10-3)], ['stmts' => $this->semStack[$stackPos-(10-6)], 'elseifs' => $this->semStack[$stackPos-(10-7)], 'else' => $this->semStack[$stackPos-(10-8)]], $this->startAttributeStack[$stackPos-(10-1)] + $this->endAttributes);
             },
             157 => function ($stackPos) {
-                 $this->semValue = new Stmt\Unset_($this->semStack[$stackPos-(5-3)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
+                 $this->semValue = new Stmt\While_($this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-5)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
             },
             158 => function ($stackPos) {
-                 $this->semValue = new Stmt\Foreach_($this->semStack[$stackPos-(7-3)], $this->semStack[$stackPos-(7-5)][0], ['keyVar' => null, 'byRef' => $this->semStack[$stackPos-(7-5)][1], 'stmts' => $this->semStack[$stackPos-(7-7)]], $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes);
+                 $this->semValue = new Stmt\Do_($this->semStack[$stackPos-(7-5)], is_array($this->semStack[$stackPos-(7-2)]) ? $this->semStack[$stackPos-(7-2)] : array($this->semStack[$stackPos-(7-2)]), $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes);
             },
             159 => function ($stackPos) {
-                 $this->semValue = new Stmt\Foreach_($this->semStack[$stackPos-(9-3)], $this->semStack[$stackPos-(9-7)][0], ['keyVar' => $this->semStack[$stackPos-(9-5)], 'byRef' => $this->semStack[$stackPos-(9-7)][1], 'stmts' => $this->semStack[$stackPos-(9-9)]], $this->startAttributeStack[$stackPos-(9-1)] + $this->endAttributes);
+                 $this->semValue = new Stmt\For_(['init' => $this->semStack[$stackPos-(9-3)], 'cond' => $this->semStack[$stackPos-(9-5)], 'loop' => $this->semStack[$stackPos-(9-7)], 'stmts' => $this->semStack[$stackPos-(9-9)]], $this->startAttributeStack[$stackPos-(9-1)] + $this->endAttributes);
             },
             160 => function ($stackPos) {
-                 $this->semValue = new Stmt\Foreach_($this->semStack[$stackPos-(6-3)], new Expr\Error($this->startAttributeStack[$stackPos-(6-4)] + $this->endAttributeStack[$stackPos-(6-4)]), ['stmts' => $this->semStack[$stackPos-(6-6)]], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes);
+                 $this->semValue = new Stmt\Switch_($this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-5)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
             },
             161 => function ($stackPos) {
-                 $this->semValue = new Stmt\Declare_($this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-5)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
+                 $this->semValue = new Stmt\Break_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             162 => function ($stackPos) {
-                 $this->semValue = new Stmt\TryCatch($this->semStack[$stackPos-(6-3)], $this->semStack[$stackPos-(6-5)], $this->semStack[$stackPos-(6-6)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes); $this->checkTryCatch($this->semValue);
+                 $this->semValue = new Stmt\Continue_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             163 => function ($stackPos) {
-                 $this->semValue = new Stmt\Throw_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Stmt\Return_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             164 => function ($stackPos) {
-                 $this->semValue = new Stmt\Goto_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Stmt\Global_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             165 => function ($stackPos) {
-                 $this->semValue = new Stmt\Label($this->semStack[$stackPos-(2-1)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Stmt\Static_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             166 => function ($stackPos) {
-                 $this->semValue = array(); /* means: no statement */
+                 $this->semValue = new Stmt\Echo_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             167 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Stmt\InlineHTML($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             168 => function ($stackPos) {
-                 $startAttributes = $this->startAttributeStack[$stackPos-(1-1)]; if (isset($startAttributes['comments'])) { $this->semValue = new Stmt\Nop($startAttributes + $this->endAttributes); } else { $this->semValue = null; };
-            if ($this->semValue === null) $this->semValue = array(); /* means: no statement */
+
+        $e = $this->semStack[$stackPos-(2-1)];
+        if ($e instanceof Expr\Throw_) {
+            // For backwards-compatibility reasons, convert throw in statement position into
+            // Stmt\Throw_ rather than Stmt\Expression(Expr\Throw_).
+            $this->semValue = new Stmt\Throw_($e->expr, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+        } else {
+            $this->semValue = new Stmt\Expression($e, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+        }
+
             },
             169 => function ($stackPos) {
-                 $this->semValue = array();
+                 $this->semValue = new Stmt\Unset_($this->semStack[$stackPos-(5-3)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
             },
             170 => function ($stackPos) {
-                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = new Stmt\Foreach_($this->semStack[$stackPos-(7-3)], $this->semStack[$stackPos-(7-5)][0], ['keyVar' => null, 'byRef' => $this->semStack[$stackPos-(7-5)][1], 'stmts' => $this->semStack[$stackPos-(7-7)]], $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes);
             },
             171 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = new Stmt\Foreach_($this->semStack[$stackPos-(9-3)], $this->semStack[$stackPos-(9-7)][0], ['keyVar' => $this->semStack[$stackPos-(9-5)], 'byRef' => $this->semStack[$stackPos-(9-7)][1], 'stmts' => $this->semStack[$stackPos-(9-9)]], $this->startAttributeStack[$stackPos-(9-1)] + $this->endAttributes);
             },
             172 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = new Stmt\Foreach_($this->semStack[$stackPos-(6-3)], new Expr\Error($this->startAttributeStack[$stackPos-(6-4)] + $this->endAttributeStack[$stackPos-(6-4)]), ['stmts' => $this->semStack[$stackPos-(6-6)]], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes);
             },
             173 => function ($stackPos) {
-                 $this->semValue = new Stmt\Catch_($this->semStack[$stackPos-(8-3)], $this->semStack[$stackPos-(8-4)], $this->semStack[$stackPos-(8-7)], $this->startAttributeStack[$stackPos-(8-1)] + $this->endAttributes);
+                 $this->semValue = new Stmt\Declare_($this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-5)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
             },
             174 => function ($stackPos) {
-                 $this->semValue = null;
+                 $this->semValue = new Stmt\TryCatch($this->semStack[$stackPos-(6-3)], $this->semStack[$stackPos-(6-5)], $this->semStack[$stackPos-(6-6)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes); $this->checkTryCatch($this->semValue);
             },
             175 => function ($stackPos) {
-                 $this->semValue = new Stmt\Finally_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = new Stmt\Goto_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             176 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = new Stmt\Label($this->semStack[$stackPos-(2-1)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             177 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = array(); /* means: no statement */
             },
             178 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             179 => function ($stackPos) {
-                 $this->semValue = false;
+                 $startAttributes = $this->startAttributeStack[$stackPos-(1-1)]; if (isset($startAttributes['comments'])) { $this->semValue = new Stmt\Nop($startAttributes + $this->endAttributes); } else { $this->semValue = null; };
+            if ($this->semValue === null) $this->semValue = array(); /* means: no statement */
             },
             180 => function ($stackPos) {
-                 $this->semValue = true;
+                 $this->semValue = array();
             },
             181 => function ($stackPos) {
-                 $this->semValue = false;
+                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             182 => function ($stackPos) {
-                 $this->semValue = true;
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             183 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             184 => function ($stackPos) {
-                 $this->semValue = [];
+                 $this->semValue = new Stmt\Catch_($this->semStack[$stackPos-(8-3)], $this->semStack[$stackPos-(8-4)], $this->semStack[$stackPos-(8-7)], $this->startAttributeStack[$stackPos-(8-1)] + $this->endAttributes);
             },
             185 => function ($stackPos) {
-                 $this->semValue = new Stmt\Function_($this->semStack[$stackPos-(8-3)], ['byRef' => $this->semStack[$stackPos-(8-2)], 'params' => $this->semStack[$stackPos-(8-5)], 'returnType' => $this->semStack[$stackPos-(8-7)], 'stmts' => $this->semStack[$stackPos-(8-8)]], $this->startAttributeStack[$stackPos-(8-1)] + $this->endAttributes);
+                 $this->semValue = null;
             },
             186 => function ($stackPos) {
-                 $this->semValue = new Stmt\Class_($this->semStack[$stackPos-(7-2)], ['type' => $this->semStack[$stackPos-(7-1)], 'extends' => $this->semStack[$stackPos-(7-3)], 'implements' => $this->semStack[$stackPos-(7-4)], 'stmts' => $this->semStack[$stackPos-(7-6)]], $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes);
-            $this->checkClass($this->semValue, $stackPos-(7-2));
+                 $this->semValue = new Stmt\Finally_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             187 => function ($stackPos) {
-                 $this->semValue = new Stmt\Interface_($this->semStack[$stackPos-(6-2)], ['extends' => $this->semStack[$stackPos-(6-3)], 'stmts' => $this->semStack[$stackPos-(6-5)]], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes);
-            $this->checkInterface($this->semValue, $stackPos-(6-2));
+                 $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             188 => function ($stackPos) {
-                 $this->semValue = new Stmt\Trait_($this->semStack[$stackPos-(5-2)], ['stmts' => $this->semStack[$stackPos-(5-4)]], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             189 => function ($stackPos) {
-                 $this->semValue = 0;
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             190 => function ($stackPos) {
-                 $this->semValue = Stmt\Class_::MODIFIER_ABSTRACT;
+                 $this->semValue = false;
             },
             191 => function ($stackPos) {
-                 $this->semValue = Stmt\Class_::MODIFIER_FINAL;
+                 $this->semValue = true;
             },
             192 => function ($stackPos) {
-                 $this->semValue = null;
+                 $this->semValue = false;
             },
             193 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-2)];
+                 $this->semValue = true;
             },
             194 => function ($stackPos) {
-                 $this->semValue = array();
+                 $this->semValue = $this->semStack[$stackPos-(3-2)];
             },
             195 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-2)];
+                 $this->semValue = [];
             },
             196 => function ($stackPos) {
-                 $this->semValue = array();
+                 $this->semValue = new Stmt\Function_($this->semStack[$stackPos-(8-3)], ['byRef' => $this->semStack[$stackPos-(8-2)], 'params' => $this->semStack[$stackPos-(8-5)], 'returnType' => $this->semStack[$stackPos-(8-7)], 'stmts' => $this->semStack[$stackPos-(8-8)], 'attrGroups' => []], $this->startAttributeStack[$stackPos-(8-1)] + $this->endAttributes);
             },
             197 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-2)];
+                 $this->semValue = new Stmt\Function_($this->semStack[$stackPos-(9-4)], ['byRef' => $this->semStack[$stackPos-(9-3)], 'params' => $this->semStack[$stackPos-(9-6)], 'returnType' => $this->semStack[$stackPos-(9-8)], 'stmts' => $this->semStack[$stackPos-(9-9)], 'attrGroups' => $this->semStack[$stackPos-(9-1)]], $this->startAttributeStack[$stackPos-(9-1)] + $this->endAttributes);
             },
             198 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = new Stmt\Class_($this->semStack[$stackPos-(7-2)], ['type' => $this->semStack[$stackPos-(7-1)], 'extends' => $this->semStack[$stackPos-(7-3)], 'implements' => $this->semStack[$stackPos-(7-4)], 'stmts' => $this->semStack[$stackPos-(7-6)], 'attrGroups' => []], $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes);
+            $this->checkClass($this->semValue, $stackPos-(7-2));
             },
             199 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = new Stmt\Class_($this->semStack[$stackPos-(8-3)], ['type' => $this->semStack[$stackPos-(8-2)], 'extends' => $this->semStack[$stackPos-(8-4)], 'implements' => $this->semStack[$stackPos-(8-5)], 'stmts' => $this->semStack[$stackPos-(8-7)], 'attrGroups' => $this->semStack[$stackPos-(8-1)]], $this->startAttributeStack[$stackPos-(8-1)] + $this->endAttributes);
+            $this->checkClass($this->semValue, $stackPos-(8-3));
             },
             200 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = new Stmt\Interface_($this->semStack[$stackPos-(7-3)], ['extends' => $this->semStack[$stackPos-(7-4)], 'stmts' => $this->semStack[$stackPos-(7-6)], 'attrGroups' => $this->semStack[$stackPos-(7-1)]], $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes);
+            $this->checkInterface($this->semValue, $stackPos-(7-3));
             },
             201 => function ($stackPos) {
-                 $this->semValue = is_array($this->semStack[$stackPos-(1-1)]) ? $this->semStack[$stackPos-(1-1)] : array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = new Stmt\Trait_($this->semStack[$stackPos-(6-3)], ['stmts' => $this->semStack[$stackPos-(6-5)], 'attrGroups' => $this->semStack[$stackPos-(6-1)]], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes);
             },
             202 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(4-2)];
+                 $this->semValue = 0;
             },
             203 => function ($stackPos) {
-                 $this->semValue = is_array($this->semStack[$stackPos-(1-1)]) ? $this->semStack[$stackPos-(1-1)] : array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = Stmt\Class_::MODIFIER_ABSTRACT;
             },
             204 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(4-2)];
+                 $this->semValue = Stmt\Class_::MODIFIER_FINAL;
             },
             205 => function ($stackPos) {
-                 $this->semValue = is_array($this->semStack[$stackPos-(1-1)]) ? $this->semStack[$stackPos-(1-1)] : array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = null;
             },
             206 => function ($stackPos) {
-                 $this->semValue = null;
+                 $this->semValue = $this->semStack[$stackPos-(2-2)];
             },
             207 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(4-2)];
+                 $this->semValue = array();
             },
             208 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = $this->semStack[$stackPos-(2-2)];
             },
             209 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = array();
             },
             210 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = $this->semStack[$stackPos-(2-2)];
             },
             211 => function ($stackPos) {
-                 $this->semValue = new Stmt\DeclareDeclare($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             212 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             213 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(4-3)];
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             214 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(4-2)];
+                 $this->semValue = is_array($this->semStack[$stackPos-(1-1)]) ? $this->semStack[$stackPos-(1-1)] : array($this->semStack[$stackPos-(1-1)]);
             },
             215 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(5-3)];
+                 $this->semValue = $this->semStack[$stackPos-(4-2)];
             },
             216 => function ($stackPos) {
-                 $this->semValue = array();
+                 $this->semValue = is_array($this->semStack[$stackPos-(1-1)]) ? $this->semStack[$stackPos-(1-1)] : array($this->semStack[$stackPos-(1-1)]);
             },
             217 => function ($stackPos) {
-                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = $this->semStack[$stackPos-(4-2)];
             },
             218 => function ($stackPos) {
-                 $this->semValue = new Stmt\Case_($this->semStack[$stackPos-(4-2)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = is_array($this->semStack[$stackPos-(1-1)]) ? $this->semStack[$stackPos-(1-1)] : array($this->semStack[$stackPos-(1-1)]);
             },
             219 => function ($stackPos) {
-                 $this->semValue = new Stmt\Case_(null, $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = null;
             },
             220 => function ($stackPos) {
-                $this->semValue = $this->semStack[$stackPos];
+                 $this->semValue = $this->semStack[$stackPos-(4-2)];
             },
             221 => function ($stackPos) {
-                $this->semValue = $this->semStack[$stackPos];
+                 $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             222 => function ($stackPos) {
-                 $this->semValue = is_array($this->semStack[$stackPos-(1-1)]) ? $this->semStack[$stackPos-(1-1)] : array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             223 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(4-2)];
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             224 => function ($stackPos) {
-                 $this->semValue = array();
+                 $this->semValue = new Stmt\DeclareDeclare($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             225 => function ($stackPos) {
-                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = $this->semStack[$stackPos-(3-2)];
             },
             226 => function ($stackPos) {
-                 $this->semValue = new Stmt\ElseIf_($this->semStack[$stackPos-(5-3)], is_array($this->semStack[$stackPos-(5-5)]) ? $this->semStack[$stackPos-(5-5)] : array($this->semStack[$stackPos-(5-5)]), $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(4-3)];
             },
             227 => function ($stackPos) {
-                 $this->semValue = array();
+                 $this->semValue = $this->semStack[$stackPos-(4-2)];
             },
             228 => function ($stackPos) {
-                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = $this->semStack[$stackPos-(5-3)];
             },
             229 => function ($stackPos) {
-                 $this->semValue = new Stmt\ElseIf_($this->semStack[$stackPos-(6-3)], $this->semStack[$stackPos-(6-6)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes);
+                 $this->semValue = array();
             },
             230 => function ($stackPos) {
-                 $this->semValue = null;
+                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             231 => function ($stackPos) {
-                 $this->semValue = new Stmt\Else_(is_array($this->semStack[$stackPos-(2-2)]) ? $this->semStack[$stackPos-(2-2)] : array($this->semStack[$stackPos-(2-2)]), $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Stmt\Case_($this->semStack[$stackPos-(4-2)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             232 => function ($stackPos) {
-                 $this->semValue = null;
+                 $this->semValue = new Stmt\Case_(null, $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             233 => function ($stackPos) {
-                 $this->semValue = new Stmt\Else_($this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                $this->semValue = $this->semStack[$stackPos];
             },
             234 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)], false);
+                $this->semValue = $this->semStack[$stackPos];
             },
             235 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(2-2)], true);
+                 $this->semValue = new Expr\Match_($this->semStack[$stackPos-(7-3)], $this->semStack[$stackPos-(7-6)], $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes);
             },
             236 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)], false);
+                 $this->semValue = [];
             },
             237 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)], false);
+                 $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             238 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             239 => function ($stackPos) {
-                 $this->semValue = array();
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             240 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = new Node\MatchArm($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             241 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = new Node\MatchArm(null, $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             242 => function ($stackPos) {
-                 $this->semValue = new Node\Param($this->semStack[$stackPos-(4-4)], null, $this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-2)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); $this->checkParam($this->semValue);
+                 $this->semValue = is_array($this->semStack[$stackPos-(1-1)]) ? $this->semStack[$stackPos-(1-1)] : array($this->semStack[$stackPos-(1-1)]);
             },
             243 => function ($stackPos) {
-                 $this->semValue = new Node\Param($this->semStack[$stackPos-(6-4)], $this->semStack[$stackPos-(6-6)], $this->semStack[$stackPos-(6-1)], $this->semStack[$stackPos-(6-2)], $this->semStack[$stackPos-(6-3)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes); $this->checkParam($this->semValue);
+                 $this->semValue = $this->semStack[$stackPos-(4-2)];
             },
             244 => function ($stackPos) {
-                 $this->semValue = new Node\Param(new Expr\Error($this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes), null, $this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-2)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = array();
             },
             245 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             246 => function ($stackPos) {
-                 $this->semValue = new Node\NullableType($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Stmt\ElseIf_($this->semStack[$stackPos-(5-3)], is_array($this->semStack[$stackPos-(5-5)]) ? $this->semStack[$stackPos-(5-5)] : array($this->semStack[$stackPos-(5-5)]), $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
             },
             247 => function ($stackPos) {
-                 $this->semValue = $this->handleBuiltinTypes($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = array();
             },
             248 => function ($stackPos) {
-                 $this->semValue = new Node\Identifier('array', $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             249 => function ($stackPos) {
-                 $this->semValue = new Node\Identifier('callable', $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Stmt\ElseIf_($this->semStack[$stackPos-(6-3)], $this->semStack[$stackPos-(6-6)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes);
             },
             250 => function ($stackPos) {
                  $this->semValue = null;
             },
             251 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Stmt\Else_(is_array($this->semStack[$stackPos-(2-2)]) ? $this->semStack[$stackPos-(2-2)] : array($this->semStack[$stackPos-(2-2)]), $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             252 => function ($stackPos) {
                  $this->semValue = null;
             },
             253 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-2)];
+                 $this->semValue = new Stmt\Else_($this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             254 => function ($stackPos) {
-                 $this->semValue = null;
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)], false);
             },
             255 => function ($stackPos) {
-                 $this->semValue = array();
+                 $this->semValue = array($this->semStack[$stackPos-(2-2)], true);
             },
             256 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(4-2)];
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)], false);
             },
             257 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)], false);
             },
             258 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             259 => function ($stackPos) {
-                 $this->semValue = new Node\Arg($this->semStack[$stackPos-(1-1)], false, false, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = array();
             },
             260 => function ($stackPos) {
-                 $this->semValue = new Node\Arg($this->semStack[$stackPos-(2-2)], true, false, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             261 => function ($stackPos) {
-                 $this->semValue = new Node\Arg($this->semStack[$stackPos-(2-2)], false, true, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             262 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = 0;
             },
             263 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = Stmt\Class_::MODIFIER_PUBLIC;
             },
             264 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = Stmt\Class_::MODIFIER_PROTECTED;
             },
             265 => function ($stackPos) {
-                 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = Stmt\Class_::MODIFIER_PRIVATE;
             },
             266 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = new Node\Param($this->semStack[$stackPos-(6-6)], null, $this->semStack[$stackPos-(6-3)], $this->semStack[$stackPos-(6-4)], $this->semStack[$stackPos-(6-5)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes, $this->semStack[$stackPos-(6-2)], $this->semStack[$stackPos-(6-1)]);
+            $this->checkParam($this->semValue);
             },
             267 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = new Node\Param($this->semStack[$stackPos-(8-6)], $this->semStack[$stackPos-(8-8)], $this->semStack[$stackPos-(8-3)], $this->semStack[$stackPos-(8-4)], $this->semStack[$stackPos-(8-5)], $this->startAttributeStack[$stackPos-(8-1)] + $this->endAttributes, $this->semStack[$stackPos-(8-2)], $this->semStack[$stackPos-(8-1)]);
+            $this->checkParam($this->semValue);
             },
             268 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = new Node\Param(new Expr\Error($this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes), null, $this->semStack[$stackPos-(6-3)], $this->semStack[$stackPos-(6-4)], $this->semStack[$stackPos-(6-5)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes, $this->semStack[$stackPos-(6-2)], $this->semStack[$stackPos-(6-1)]);
             },
             269 => function ($stackPos) {
-                 $this->semValue = new Stmt\StaticVar($this->semStack[$stackPos-(1-1)], null, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             270 => function ($stackPos) {
-                 $this->semValue = new Stmt\StaticVar($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Node\NullableType($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             271 => function ($stackPos) {
-                 if ($this->semStack[$stackPos-(2-2)] !== null) { $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)]; }
+                 $this->semValue = new Node\UnionType($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             272 => function ($stackPos) {
-                 $this->semValue = array();
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             273 => function ($stackPos) {
-                 $startAttributes = $this->lookaheadStartAttributes; if (isset($startAttributes['comments'])) { $nop = new Stmt\Nop($this->createZeroLengthAttributes($startAttributes)); } else { $nop = null; };
-            if ($nop !== null) { $this->semStack[$stackPos-(1-1)][] = $nop; } $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Node\Name('static', $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             274 => function ($stackPos) {
-                 $attrs = $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes;
-            $this->semValue = new Stmt\Property($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $attrs, $this->semStack[$stackPos-(4-2)]); $this->checkProperty($this->semValue, $stackPos-(4-1));
+                 $this->semValue = $this->handleBuiltinTypes($this->semStack[$stackPos-(1-1)]);
             },
             275 => function ($stackPos) {
-                 $this->semValue = new Stmt\ClassConst($this->semStack[$stackPos-(4-3)], $this->semStack[$stackPos-(4-1)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); $this->checkClassConst($this->semValue, $stackPos-(4-1));
+                 $this->semValue = new Node\Identifier('array', $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             276 => function ($stackPos) {
-                 $this->semValue = new Stmt\ClassMethod($this->semStack[$stackPos-(9-4)], ['type' => $this->semStack[$stackPos-(9-1)], 'byRef' => $this->semStack[$stackPos-(9-3)], 'params' => $this->semStack[$stackPos-(9-6)], 'returnType' => $this->semStack[$stackPos-(9-8)], 'stmts' => $this->semStack[$stackPos-(9-9)]], $this->startAttributeStack[$stackPos-(9-1)] + $this->endAttributes);
-            $this->checkClassMethod($this->semValue, $stackPos-(9-1));
+                 $this->semValue = new Node\Identifier('callable', $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             277 => function ($stackPos) {
-                 $this->semValue = new Stmt\TraitUse($this->semStack[$stackPos-(3-2)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = array($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)]);
             },
             278 => function ($stackPos) {
-                 $this->semValue = null; /* will be skipped */
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             279 => function ($stackPos) {
-                 $this->semValue = array();
+                 $this->semValue = array($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)]);
             },
             280 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             281 => function ($stackPos) {
-                 $this->semValue = array();
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             282 => function ($stackPos) {
-                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = new Node\NullableType($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             283 => function ($stackPos) {
-                 $this->semValue = new Stmt\TraitUseAdaptation\Precedence($this->semStack[$stackPos-(4-1)][0], $this->semStack[$stackPos-(4-1)][1], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = new Node\UnionType($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             284 => function ($stackPos) {
-                 $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$stackPos-(5-1)][0], $this->semStack[$stackPos-(5-1)][1], $this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-4)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
+                 $this->semValue = null;
             },
             285 => function ($stackPos) {
-                 $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$stackPos-(4-1)][0], $this->semStack[$stackPos-(4-1)][1], $this->semStack[$stackPos-(4-3)], null, $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             286 => function ($stackPos) {
-                 $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$stackPos-(4-1)][0], $this->semStack[$stackPos-(4-1)][1], null, $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = null;
             },
             287 => function ($stackPos) {
-                 $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$stackPos-(4-1)][0], $this->semStack[$stackPos-(4-1)][1], null, $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(2-2)];
             },
             288 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)]);
+                 $this->semValue = null;
             },
             289 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = array();
             },
             290 => function ($stackPos) {
-                 $this->semValue = array(null, $this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = $this->semStack[$stackPos-(4-2)];
             },
             291 => function ($stackPos) {
-                 $this->semValue = null;
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             292 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             293 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Node\Arg($this->semStack[$stackPos-(1-1)], false, false, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             294 => function ($stackPos) {
-                 $this->semValue = 0;
+                 $this->semValue = new Node\Arg($this->semStack[$stackPos-(2-2)], true, false, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             295 => function ($stackPos) {
-                 $this->semValue = 0;
+                 $this->semValue = new Node\Arg($this->semStack[$stackPos-(2-2)], false, true, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             296 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Node\Arg($this->semStack[$stackPos-(3-3)], false, false, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes, $this->semStack[$stackPos-(3-1)]);
             },
             297 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             298 => function ($stackPos) {
-                 $this->checkModifier($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)], $stackPos-(2-2)); $this->semValue = $this->semStack[$stackPos-(2-1)] | $this->semStack[$stackPos-(2-2)];
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             299 => function ($stackPos) {
-                 $this->semValue = Stmt\Class_::MODIFIER_PUBLIC;
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             300 => function ($stackPos) {
-                 $this->semValue = Stmt\Class_::MODIFIER_PROTECTED;
+                 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             301 => function ($stackPos) {
-                 $this->semValue = Stmt\Class_::MODIFIER_PRIVATE;
+                 $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             302 => function ($stackPos) {
-                 $this->semValue = Stmt\Class_::MODIFIER_STATIC;
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             303 => function ($stackPos) {
-                 $this->semValue = Stmt\Class_::MODIFIER_ABSTRACT;
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             304 => function ($stackPos) {
-                 $this->semValue = Stmt\Class_::MODIFIER_FINAL;
+                 $this->semValue = new Stmt\StaticVar($this->semStack[$stackPos-(1-1)], null, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             305 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = new Stmt\StaticVar($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             306 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 if ($this->semStack[$stackPos-(2-2)] !== null) { $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)]; }
             },
             307 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = array();
             },
             308 => function ($stackPos) {
-                 $this->semValue = new Node\VarLikeIdentifier(substr($this->semStack[$stackPos-(1-1)], 1), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $startAttributes = $this->lookaheadStartAttributes; if (isset($startAttributes['comments'])) { $nop = new Stmt\Nop($this->createCommentNopAttributes($startAttributes['comments'])); } else { $nop = null; };
+            if ($nop !== null) { $this->semStack[$stackPos-(1-1)][] = $nop; } $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             309 => function ($stackPos) {
-                 $this->semValue = new Stmt\PropertyProperty($this->semStack[$stackPos-(1-1)], null, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Stmt\Property($this->semStack[$stackPos-(5-2)], $this->semStack[$stackPos-(5-4)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes, $this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-1)]);
+            $this->checkProperty($this->semValue, $stackPos-(5-2));
             },
             310 => function ($stackPos) {
-                 $this->semValue = new Stmt\PropertyProperty($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Stmt\ClassConst($this->semStack[$stackPos-(5-4)], $this->semStack[$stackPos-(5-2)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes, $this->semStack[$stackPos-(5-1)]);
+            $this->checkClassConst($this->semValue, $stackPos-(5-2));
             },
             311 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = new Stmt\ClassMethod($this->semStack[$stackPos-(10-5)], ['type' => $this->semStack[$stackPos-(10-2)], 'byRef' => $this->semStack[$stackPos-(10-4)], 'params' => $this->semStack[$stackPos-(10-7)], 'returnType' => $this->semStack[$stackPos-(10-9)], 'stmts' => $this->semStack[$stackPos-(10-10)], 'attrGroups' => $this->semStack[$stackPos-(10-1)]], $this->startAttributeStack[$stackPos-(10-1)] + $this->endAttributes);
+            $this->checkClassMethod($this->semValue, $stackPos-(10-2));
             },
             312 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = new Stmt\TraitUse($this->semStack[$stackPos-(3-2)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             313 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = null; /* will be skipped */
             },
             314 => function ($stackPos) {
                  $this->semValue = array();
             },
             315 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = $this->semStack[$stackPos-(3-2)];
             },
             316 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = array();
             },
             317 => function ($stackPos) {
-                 $this->semValue = new Expr\Assign($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             318 => function ($stackPos) {
-                 $this->semValue = new Expr\Assign($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Stmt\TraitUseAdaptation\Precedence($this->semStack[$stackPos-(4-1)][0], $this->semStack[$stackPos-(4-1)][1], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             319 => function ($stackPos) {
-                 $this->semValue = new Expr\Assign($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$stackPos-(5-1)][0], $this->semStack[$stackPos-(5-1)][1], $this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-4)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
             },
             320 => function ($stackPos) {
-                 $this->semValue = new Expr\AssignRef($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$stackPos-(4-1)][0], $this->semStack[$stackPos-(4-1)][1], $this->semStack[$stackPos-(4-3)], null, $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             321 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$stackPos-(4-1)][0], $this->semStack[$stackPos-(4-1)][1], null, $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             322 => function ($stackPos) {
-                 $this->semValue = new Expr\Clone_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$stackPos-(4-1)][0], $this->semStack[$stackPos-(4-1)][1], null, $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             323 => function ($stackPos) {
-                 $this->semValue = new Expr\AssignOp\Plus($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = array($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)]);
             },
             324 => function ($stackPos) {
-                 $this->semValue = new Expr\AssignOp\Minus($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             325 => function ($stackPos) {
-                 $this->semValue = new Expr\AssignOp\Mul($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = array(null, $this->semStack[$stackPos-(1-1)]);
             },
             326 => function ($stackPos) {
-                 $this->semValue = new Expr\AssignOp\Div($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = null;
             },
             327 => function ($stackPos) {
-                 $this->semValue = new Expr\AssignOp\Concat($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             328 => function ($stackPos) {
-                 $this->semValue = new Expr\AssignOp\Mod($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             329 => function ($stackPos) {
-                 $this->semValue = new Expr\AssignOp\BitwiseAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = 0;
             },
             330 => function ($stackPos) {
-                 $this->semValue = new Expr\AssignOp\BitwiseOr($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = 0;
             },
             331 => function ($stackPos) {
-                 $this->semValue = new Expr\AssignOp\BitwiseXor($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             332 => function ($stackPos) {
-                 $this->semValue = new Expr\AssignOp\ShiftLeft($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             333 => function ($stackPos) {
-                 $this->semValue = new Expr\AssignOp\ShiftRight($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->checkModifier($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)], $stackPos-(2-2)); $this->semValue = $this->semStack[$stackPos-(2-1)] | $this->semStack[$stackPos-(2-2)];
             },
             334 => function ($stackPos) {
-                 $this->semValue = new Expr\AssignOp\Pow($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = Stmt\Class_::MODIFIER_PUBLIC;
             },
             335 => function ($stackPos) {
-                 $this->semValue = new Expr\AssignOp\Coalesce($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = Stmt\Class_::MODIFIER_PROTECTED;
             },
             336 => function ($stackPos) {
-                 $this->semValue = new Expr\PostInc($this->semStack[$stackPos-(2-1)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = Stmt\Class_::MODIFIER_PRIVATE;
             },
             337 => function ($stackPos) {
-                 $this->semValue = new Expr\PreInc($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = Stmt\Class_::MODIFIER_STATIC;
             },
             338 => function ($stackPos) {
-                 $this->semValue = new Expr\PostDec($this->semStack[$stackPos-(2-1)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = Stmt\Class_::MODIFIER_ABSTRACT;
             },
             339 => function ($stackPos) {
-                 $this->semValue = new Expr\PreDec($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = Stmt\Class_::MODIFIER_FINAL;
             },
             340 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\BooleanOr($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             341 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\BooleanAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             342 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\LogicalOr($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             343 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\LogicalAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Node\VarLikeIdentifier(substr($this->semStack[$stackPos-(1-1)], 1), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             344 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\LogicalXor($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Stmt\PropertyProperty($this->semStack[$stackPos-(1-1)], null, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             345 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\BitwiseOr($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Stmt\PropertyProperty($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             346 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\BitwiseAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             347 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\BitwiseXor($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             348 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\Concat($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             349 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\Plus($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             350 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\Minus($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = array();
             },
             351 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\Mul($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             352 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\Div($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             353 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\Mod($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Assign($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             354 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\ShiftLeft($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Assign($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             355 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\ShiftRight($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Assign($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             356 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\Pow($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\AssignRef($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             357 => function ($stackPos) {
-                 $this->semValue = new Expr\UnaryPlus($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             358 => function ($stackPos) {
-                 $this->semValue = new Expr\UnaryMinus($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             359 => function ($stackPos) {
-                 $this->semValue = new Expr\BooleanNot($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Clone_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             360 => function ($stackPos) {
-                 $this->semValue = new Expr\BitwiseNot($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\AssignOp\Plus($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             361 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\Identical($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\AssignOp\Minus($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             362 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\NotIdentical($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\AssignOp\Mul($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             363 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\Equal($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\AssignOp\Div($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             364 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\NotEqual($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\AssignOp\Concat($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             365 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\Spaceship($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\AssignOp\Mod($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             366 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\Smaller($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\AssignOp\BitwiseAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             367 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\SmallerOrEqual($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\AssignOp\BitwiseOr($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             368 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\Greater($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\AssignOp\BitwiseXor($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             369 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\GreaterOrEqual($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\AssignOp\ShiftLeft($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             370 => function ($stackPos) {
-                 $this->semValue = new Expr\Instanceof_($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\AssignOp\ShiftRight($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             371 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
+                 $this->semValue = new Expr\AssignOp\Pow($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             372 => function ($stackPos) {
-                 $this->semValue = new Expr\Ternary($this->semStack[$stackPos-(5-1)], $this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-5)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\AssignOp\Coalesce($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             373 => function ($stackPos) {
-                 $this->semValue = new Expr\Ternary($this->semStack[$stackPos-(4-1)], null, $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\PostInc($this->semStack[$stackPos-(2-1)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             374 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\Coalesce($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\PreInc($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             375 => function ($stackPos) {
-                 $this->semValue = new Expr\Isset_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\PostDec($this->semStack[$stackPos-(2-1)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             376 => function ($stackPos) {
-                 $this->semValue = new Expr\Empty_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\PreDec($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             377 => function ($stackPos) {
-                 $this->semValue = new Expr\Include_($this->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_INCLUDE, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\BooleanOr($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             378 => function ($stackPos) {
-                 $this->semValue = new Expr\Include_($this->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_INCLUDE_ONCE, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\BooleanAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             379 => function ($stackPos) {
-                 $this->semValue = new Expr\Eval_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\LogicalOr($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             380 => function ($stackPos) {
-                 $this->semValue = new Expr\Include_($this->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_REQUIRE, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\LogicalAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             381 => function ($stackPos) {
-                 $this->semValue = new Expr\Include_($this->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_REQUIRE_ONCE, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\LogicalXor($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             382 => function ($stackPos) {
-                 $this->semValue = new Expr\Cast\Int_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\BitwiseOr($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             383 => function ($stackPos) {
-                 $attrs = $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes;
-            $attrs['kind'] = $this->getFloatCastKind($this->semStack[$stackPos-(2-1)]);
-            $this->semValue = new Expr\Cast\Double($this->semStack[$stackPos-(2-2)], $attrs);
+                 $this->semValue = new Expr\BinaryOp\BitwiseAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             384 => function ($stackPos) {
-                 $this->semValue = new Expr\Cast\String_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\BitwiseXor($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             385 => function ($stackPos) {
-                 $this->semValue = new Expr\Cast\Array_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\Concat($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             386 => function ($stackPos) {
-                 $this->semValue = new Expr\Cast\Object_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\Plus($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             387 => function ($stackPos) {
-                 $this->semValue = new Expr\Cast\Bool_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\Minus($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             388 => function ($stackPos) {
-                 $this->semValue = new Expr\Cast\Unset_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\Mul($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             389 => function ($stackPos) {
-                 $attrs = $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes;
-            $attrs['kind'] = strtolower($this->semStack[$stackPos-(2-1)]) === 'exit' ? Expr\Exit_::KIND_EXIT : Expr\Exit_::KIND_DIE;
-            $this->semValue = new Expr\Exit_($this->semStack[$stackPos-(2-2)], $attrs);
+                 $this->semValue = new Expr\BinaryOp\Div($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             390 => function ($stackPos) {
-                 $this->semValue = new Expr\ErrorSuppress($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\Mod($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             391 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Expr\BinaryOp\ShiftLeft($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             392 => function ($stackPos) {
-                 $this->semValue = new Expr\ShellExec($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\ShiftRight($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             393 => function ($stackPos) {
-                 $this->semValue = new Expr\Print_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\Pow($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             394 => function ($stackPos) {
-                 $this->semValue = new Expr\Yield_(null, null, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\UnaryPlus($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             395 => function ($stackPos) {
-                 $this->semValue = new Expr\Yield_($this->semStack[$stackPos-(2-2)], null, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\UnaryMinus($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             396 => function ($stackPos) {
-                 $this->semValue = new Expr\Yield_($this->semStack[$stackPos-(4-4)], $this->semStack[$stackPos-(4-2)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BooleanNot($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             397 => function ($stackPos) {
-                 $this->semValue = new Expr\YieldFrom($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BitwiseNot($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             398 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrowFunction(['static' => false, 'byRef' => $this->semStack[$stackPos-(8-2)], 'params' => $this->semStack[$stackPos-(8-4)], 'returnType' => $this->semStack[$stackPos-(8-6)], 'expr' => $this->semStack[$stackPos-(8-8)]], $this->startAttributeStack[$stackPos-(8-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\Identical($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             399 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrowFunction(['static' => true, 'byRef' => $this->semStack[$stackPos-(9-3)], 'params' => $this->semStack[$stackPos-(9-5)], 'returnType' => $this->semStack[$stackPos-(9-7)], 'expr' => $this->semStack[$stackPos-(9-9)]], $this->startAttributeStack[$stackPos-(9-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\NotIdentical($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             400 => function ($stackPos) {
-                 $this->semValue = new Expr\Closure(['static' => false, 'byRef' => $this->semStack[$stackPos-(8-2)], 'params' => $this->semStack[$stackPos-(8-4)], 'uses' => $this->semStack[$stackPos-(8-6)], 'returnType' => $this->semStack[$stackPos-(8-7)], 'stmts' => $this->semStack[$stackPos-(8-8)]], $this->startAttributeStack[$stackPos-(8-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\Equal($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             401 => function ($stackPos) {
-                 $this->semValue = new Expr\Closure(['static' => true, 'byRef' => $this->semStack[$stackPos-(9-3)], 'params' => $this->semStack[$stackPos-(9-5)], 'uses' => $this->semStack[$stackPos-(9-7)], 'returnType' => $this->semStack[$stackPos-(9-8)], 'stmts' => $this->semStack[$stackPos-(9-9)]], $this->startAttributeStack[$stackPos-(9-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\NotEqual($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             402 => function ($stackPos) {
-                 $this->semValue = array(new Stmt\Class_(null, ['type' => 0, 'extends' => $this->semStack[$stackPos-(7-3)], 'implements' => $this->semStack[$stackPos-(7-4)], 'stmts' => $this->semStack[$stackPos-(7-6)]], $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes), $this->semStack[$stackPos-(7-2)]);
-            $this->checkClass($this->semValue[0], -1);
+                 $this->semValue = new Expr\BinaryOp\Spaceship($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             403 => function ($stackPos) {
-                 $this->semValue = new Expr\New_($this->semStack[$stackPos-(3-2)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\Smaller($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             404 => function ($stackPos) {
-                 list($class, $ctorArgs) = $this->semStack[$stackPos-(2-2)]; $this->semValue = new Expr\New_($class, $ctorArgs, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\SmallerOrEqual($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             405 => function ($stackPos) {
-                 $this->semValue = array();
+                 $this->semValue = new Expr\BinaryOp\Greater($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             406 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(4-3)];
+                 $this->semValue = new Expr\BinaryOp\GreaterOrEqual($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             407 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = new Expr\Instanceof_($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             408 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = $this->semStack[$stackPos-(3-2)];
             },
             409 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = new Expr\Ternary($this->semStack[$stackPos-(5-1)], $this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-5)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
             },
             410 => function ($stackPos) {
-                 $this->semValue = new Expr\ClosureUse($this->semStack[$stackPos-(2-2)], $this->semStack[$stackPos-(2-1)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Ternary($this->semStack[$stackPos-(4-1)], null, $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             411 => function ($stackPos) {
-                 $this->semValue = new Expr\FuncCall($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\Coalesce($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             412 => function ($stackPos) {
-                 $this->semValue = new Expr\FuncCall($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Isset_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             413 => function ($stackPos) {
-                 $this->semValue = new Expr\StaticCall($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Empty_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             414 => function ($stackPos) {
-                 $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Include_($this->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_INCLUDE, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             415 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Expr\Include_($this->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_INCLUDE_ONCE, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             416 => function ($stackPos) {
-                 $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Eval_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             417 => function ($stackPos) {
-                 $this->semValue = new Name\FullyQualified($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Include_($this->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_REQUIRE, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             418 => function ($stackPos) {
-                 $this->semValue = new Name\Relative($this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Include_($this->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_REQUIRE_ONCE, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             419 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Expr\Cast\Int_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             420 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $attrs = $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes;
+            $attrs['kind'] = $this->getFloatCastKind($this->semStack[$stackPos-(2-1)]);
+            $this->semValue = new Expr\Cast\Double($this->semStack[$stackPos-(2-2)], $attrs);
             },
             421 => function ($stackPos) {
-                 $this->semValue = new Expr\Error($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); $this->errorState = 2;
+                 $this->semValue = new Expr\Cast\String_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             422 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Expr\Cast\Array_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             423 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Expr\Cast\Object_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             424 => function ($stackPos) {
-                 $this->semValue = null;
+                 $this->semValue = new Expr\Cast\Bool_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             425 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
+                 $this->semValue = new Expr\Cast\Unset_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             426 => function ($stackPos) {
-                 $this->semValue = array();
+                 $attrs = $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes;
+            $attrs['kind'] = strtolower($this->semStack[$stackPos-(2-1)]) === 'exit' ? Expr\Exit_::KIND_EXIT : Expr\Exit_::KIND_DIE;
+            $this->semValue = new Expr\Exit_($this->semStack[$stackPos-(2-2)], $attrs);
             },
             427 => function ($stackPos) {
-                 $this->semValue = array(new Scalar\EncapsedStringPart(Scalar\String_::parseEscapeSequences($this->semStack[$stackPos-(1-1)], '`'), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes));
+                 $this->semValue = new Expr\ErrorSuppress($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             428 => function ($stackPos) {
-                 foreach ($this->semStack[$stackPos-(1-1)] as $s) { if ($s instanceof Node\Scalar\EncapsedStringPart) { $s->value = Node\Scalar\String_::parseEscapeSequences($s->value, '`', true); } }; $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             429 => function ($stackPos) {
-                 $this->semValue = array();
+                 $this->semValue = new Expr\ShellExec($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             430 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Expr\Print_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             431 => function ($stackPos) {
-                 $this->semValue = new Expr\ConstFetch($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Yield_(null, null, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             432 => function ($stackPos) {
-                 $this->semValue = new Expr\ClassConstFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Yield_($this->semStack[$stackPos-(2-2)], null, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             433 => function ($stackPos) {
-                 $this->semValue = new Expr\ClassConstFetch($this->semStack[$stackPos-(3-1)], new Expr\Error($this->startAttributeStack[$stackPos-(3-3)] + $this->endAttributeStack[$stackPos-(3-3)]), $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); $this->errorState = 2;
+                 $this->semValue = new Expr\Yield_($this->semStack[$stackPos-(4-4)], $this->semStack[$stackPos-(4-2)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             434 => function ($stackPos) {
-                 $attrs = $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes; $attrs['kind'] = Expr\Array_::KIND_SHORT;
-            $this->semValue = new Expr\Array_($this->semStack[$stackPos-(3-2)], $attrs);
+                 $this->semValue = new Expr\YieldFrom($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             435 => function ($stackPos) {
-                 $attrs = $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes; $attrs['kind'] = Expr\Array_::KIND_LONG;
-            $this->semValue = new Expr\Array_($this->semStack[$stackPos-(4-3)], $attrs);
+                 $this->semValue = new Expr\Throw_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             436 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Expr\ArrowFunction(['static' => false, 'byRef' => $this->semStack[$stackPos-(8-2)], 'params' => $this->semStack[$stackPos-(8-4)], 'returnType' => $this->semStack[$stackPos-(8-6)], 'expr' => $this->semStack[$stackPos-(8-8)], 'attrGroups' => []], $this->startAttributeStack[$stackPos-(8-1)] + $this->endAttributes);
             },
             437 => function ($stackPos) {
-                 $attrs = $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes; $attrs['kind'] = ($this->semStack[$stackPos-(1-1)][0] === "'" || ($this->semStack[$stackPos-(1-1)][1] === "'" && ($this->semStack[$stackPos-(1-1)][0] === 'b' || $this->semStack[$stackPos-(1-1)][0] === 'B')) ? Scalar\String_::KIND_SINGLE_QUOTED : Scalar\String_::KIND_DOUBLE_QUOTED);
-            $this->semValue = new Scalar\String_(Scalar\String_::parse($this->semStack[$stackPos-(1-1)]), $attrs);
+                 $this->semValue = new Expr\ArrowFunction(['static' => true, 'byRef' => $this->semStack[$stackPos-(9-3)], 'params' => $this->semStack[$stackPos-(9-5)], 'returnType' => $this->semStack[$stackPos-(9-7)], 'expr' => $this->semStack[$stackPos-(9-9)], 'attrGroups' => []], $this->startAttributeStack[$stackPos-(9-1)] + $this->endAttributes);
             },
             438 => function ($stackPos) {
-                 $this->semValue = $this->parseLNumber($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Closure(['static' => false, 'byRef' => $this->semStack[$stackPos-(8-2)], 'params' => $this->semStack[$stackPos-(8-4)], 'uses' => $this->semStack[$stackPos-(8-6)], 'returnType' => $this->semStack[$stackPos-(8-7)], 'stmts' => $this->semStack[$stackPos-(8-8)], 'attrGroups' => []], $this->startAttributeStack[$stackPos-(8-1)] + $this->endAttributes);
             },
             439 => function ($stackPos) {
-                 $this->semValue = new Scalar\DNumber(Scalar\DNumber::parse($this->semStack[$stackPos-(1-1)]), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Closure(['static' => true, 'byRef' => $this->semStack[$stackPos-(9-3)], 'params' => $this->semStack[$stackPos-(9-5)], 'uses' => $this->semStack[$stackPos-(9-7)], 'returnType' => $this->semStack[$stackPos-(9-8)], 'stmts' => $this->semStack[$stackPos-(9-9)], 'attrGroups' => []], $this->startAttributeStack[$stackPos-(9-1)] + $this->endAttributes);
             },
             440 => function ($stackPos) {
-                 $this->semValue = new Scalar\MagicConst\Line($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\ArrowFunction(['static' => false, 'byRef' => $this->semStack[$stackPos-(9-3)], 'params' => $this->semStack[$stackPos-(9-5)], 'returnType' => $this->semStack[$stackPos-(9-7)], 'expr' => $this->semStack[$stackPos-(9-9)], 'attrGroups' => $this->semStack[$stackPos-(9-1)]], $this->startAttributeStack[$stackPos-(9-1)] + $this->endAttributes);
             },
             441 => function ($stackPos) {
-                 $this->semValue = new Scalar\MagicConst\File($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\ArrowFunction(['static' => true, 'byRef' => $this->semStack[$stackPos-(10-4)], 'params' => $this->semStack[$stackPos-(10-6)], 'returnType' => $this->semStack[$stackPos-(10-8)], 'expr' => $this->semStack[$stackPos-(10-10)], 'attrGroups' => $this->semStack[$stackPos-(10-1)]], $this->startAttributeStack[$stackPos-(10-1)] + $this->endAttributes);
             },
             442 => function ($stackPos) {
-                 $this->semValue = new Scalar\MagicConst\Dir($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Closure(['static' => false, 'byRef' => $this->semStack[$stackPos-(9-3)], 'params' => $this->semStack[$stackPos-(9-5)], 'uses' => $this->semStack[$stackPos-(9-7)], 'returnType' => $this->semStack[$stackPos-(9-8)], 'stmts' => $this->semStack[$stackPos-(9-9)], 'attrGroups' => $this->semStack[$stackPos-(9-1)]], $this->startAttributeStack[$stackPos-(9-1)] + $this->endAttributes);
             },
             443 => function ($stackPos) {
-                 $this->semValue = new Scalar\MagicConst\Class_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Closure(['static' => true, 'byRef' => $this->semStack[$stackPos-(10-4)], 'params' => $this->semStack[$stackPos-(10-6)], 'uses' => $this->semStack[$stackPos-(10-8)], 'returnType' => $this->semStack[$stackPos-(10-9)], 'stmts' => $this->semStack[$stackPos-(10-10)], 'attrGroups' => $this->semStack[$stackPos-(10-1)]], $this->startAttributeStack[$stackPos-(10-1)] + $this->endAttributes);
             },
             444 => function ($stackPos) {
-                 $this->semValue = new Scalar\MagicConst\Trait_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = array(new Stmt\Class_(null, ['type' => 0, 'extends' => $this->semStack[$stackPos-(8-4)], 'implements' => $this->semStack[$stackPos-(8-5)], 'stmts' => $this->semStack[$stackPos-(8-7)], 'attrGroups' => $this->semStack[$stackPos-(8-1)]], $this->startAttributeStack[$stackPos-(8-1)] + $this->endAttributes), $this->semStack[$stackPos-(8-3)]);
+            $this->checkClass($this->semValue[0], -1);
             },
             445 => function ($stackPos) {
-                 $this->semValue = new Scalar\MagicConst\Method($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\New_($this->semStack[$stackPos-(3-2)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             446 => function ($stackPos) {
-                 $this->semValue = new Scalar\MagicConst\Function_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 list($class, $ctorArgs) = $this->semStack[$stackPos-(2-2)]; $this->semValue = new Expr\New_($class, $ctorArgs, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             447 => function ($stackPos) {
-                 $this->semValue = new Scalar\MagicConst\Namespace_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = array();
             },
             448 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = $this->semStack[$stackPos-(4-3)];
             },
             449 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             450 => function ($stackPos) {
-                 $this->semValue = $this->parseDocString($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-2)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes, $this->startAttributeStack[$stackPos-(3-3)] + $this->endAttributeStack[$stackPos-(3-3)], true);
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             451 => function ($stackPos) {
-                 $this->semValue = $this->parseDocString($this->semStack[$stackPos-(2-1)], '', $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes, $this->startAttributeStack[$stackPos-(2-2)] + $this->endAttributeStack[$stackPos-(2-2)], true);
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             452 => function ($stackPos) {
-                 $attrs = $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes; $attrs['kind'] = Scalar\String_::KIND_DOUBLE_QUOTED;
-            foreach ($this->semStack[$stackPos-(3-2)] as $s) { if ($s instanceof Node\Scalar\EncapsedStringPart) { $s->value = Node\Scalar\String_::parseEscapeSequences($s->value, '"', true); } }; $this->semValue = new Scalar\Encapsed($this->semStack[$stackPos-(3-2)], $attrs);
+                 $this->semValue = new Expr\ClosureUse($this->semStack[$stackPos-(2-2)], $this->semStack[$stackPos-(2-1)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             453 => function ($stackPos) {
-                 $this->semValue = $this->parseDocString($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-2)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes, $this->startAttributeStack[$stackPos-(3-3)] + $this->endAttributeStack[$stackPos-(3-3)], true);
+                 $this->semValue = new Expr\FuncCall($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             454 => function ($stackPos) {
-                 $this->semValue = null;
+                 $this->semValue = new Expr\FuncCall($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             455 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Expr\StaticCall($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             456 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             457 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             458 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             459 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             460 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
+                 $this->semValue = new Name\FullyQualified(substr($this->semStack[$stackPos-(1-1)], 1), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             461 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Name\Relative(substr($this->semStack[$stackPos-(1-1)], 10), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             462 => function ($stackPos) {
-                 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             463 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             464 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(3-2)];
             },
             465 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Error($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); $this->errorState = 2;
             },
             466 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             467 => function ($stackPos) {
-                 $this->semValue = new Expr\MethodCall($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             468 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = null;
             },
             469 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = $this->semStack[$stackPos-(3-2)];
             },
             470 => function ($stackPos) {
-                 $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = array();
             },
             471 => function ($stackPos) {
-                 $this->semValue = substr($this->semStack[$stackPos-(1-1)], 1);
+                 $this->semValue = array(new Scalar\EncapsedStringPart(Scalar\String_::parseEscapeSequences($this->semStack[$stackPos-(1-1)], '`'), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes));
             },
             472 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(4-3)];
+                 foreach ($this->semStack[$stackPos-(1-1)] as $s) { if ($s instanceof Node\Scalar\EncapsedStringPart) { $s->value = Node\Scalar\String_::parseEscapeSequences($s->value, '`', true); } }; $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             473 => function ($stackPos) {
-                 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = array();
             },
             474 => function ($stackPos) {
-                 $this->semValue = new Expr\Error($this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); $this->errorState = 2;
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             475 => function ($stackPos) {
-                 $var = $this->semStack[$stackPos-(1-1)]; $this->semValue = \is_string($var) ? new Node\VarLikeIdentifier($var, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes) : $var;
+                 $this->semValue = new Expr\ConstFetch($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             476 => function ($stackPos) {
-                 $this->semValue = new Expr\StaticPropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Scalar\MagicConst\Line($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             477 => function ($stackPos) {
-                 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Scalar\MagicConst\File($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             478 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = new Scalar\MagicConst\Dir($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             479 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = new Scalar\MagicConst\Class_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             480 => function ($stackPos) {
-                 $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Scalar\MagicConst\Trait_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             481 => function ($stackPos) {
-                 $this->semValue = new Expr\StaticPropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Scalar\MagicConst\Method($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             482 => function ($stackPos) {
-                 $this->semValue = new Expr\StaticPropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Scalar\MagicConst\Function_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             483 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Scalar\MagicConst\Namespace_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             484 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
+                 $this->semValue = new Expr\ClassConstFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             485 => function ($stackPos) {
-                 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\ClassConstFetch($this->semStack[$stackPos-(3-1)], new Expr\Error($this->startAttributeStack[$stackPos-(3-3)] + $this->endAttributeStack[$stackPos-(3-3)]), $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); $this->errorState = 2;
             },
             486 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $attrs = $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes; $attrs['kind'] = Expr\Array_::KIND_SHORT;
+            $this->semValue = new Expr\Array_($this->semStack[$stackPos-(3-2)], $attrs);
             },
             487 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
+                 $attrs = $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes; $attrs['kind'] = Expr\Array_::KIND_LONG;
+            $this->semValue = new Expr\Array_($this->semStack[$stackPos-(4-3)], $attrs);
             },
             488 => function ($stackPos) {
-                 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             489 => function ($stackPos) {
-                 $this->semValue = new Expr\Error($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); $this->errorState = 2;
+                 $attrs = $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes; $attrs['kind'] = ($this->semStack[$stackPos-(1-1)][0] === "'" || ($this->semStack[$stackPos-(1-1)][1] === "'" && ($this->semStack[$stackPos-(1-1)][0] === 'b' || $this->semStack[$stackPos-(1-1)][0] === 'B')) ? Scalar\String_::KIND_SINGLE_QUOTED : Scalar\String_::KIND_DOUBLE_QUOTED);
+            $this->semValue = new Scalar\String_(Scalar\String_::parse($this->semStack[$stackPos-(1-1)]), $attrs);
             },
             490 => function ($stackPos) {
-                 $this->semValue = new Expr\List_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $attrs = $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes; $attrs['kind'] = Scalar\String_::KIND_DOUBLE_QUOTED;
+            foreach ($this->semStack[$stackPos-(3-2)] as $s) { if ($s instanceof Node\Scalar\EncapsedStringPart) { $s->value = Node\Scalar\String_::parseEscapeSequences($s->value, '"', true); } }; $this->semValue = new Scalar\Encapsed($this->semStack[$stackPos-(3-2)], $attrs);
             },
             491 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = $this->parseLNumber($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             492 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = new Scalar\DNumber(Scalar\DNumber::parse($this->semStack[$stackPos-(1-1)]), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             493 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(1-1)], null, false, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             494 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(2-2)], null, true, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             495 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(1-1)], null, false, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             496 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(3-3)], $this->semStack[$stackPos-(3-1)], false, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = $this->parseDocString($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-2)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes, $this->startAttributeStack[$stackPos-(3-3)] + $this->endAttributeStack[$stackPos-(3-3)], true);
             },
             497 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(4-4)], $this->semStack[$stackPos-(4-1)], true, $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = $this->parseDocString($this->semStack[$stackPos-(2-1)], '', $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes, $this->startAttributeStack[$stackPos-(2-2)] + $this->endAttributeStack[$stackPos-(2-2)], true);
             },
             498 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(3-3)], $this->semStack[$stackPos-(3-1)], false, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = $this->parseDocString($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-2)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes, $this->startAttributeStack[$stackPos-(3-3)] + $this->endAttributeStack[$stackPos-(3-3)], true);
             },
             499 => function ($stackPos) {
                  $this->semValue = null;
             },
             500 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)]; $end = count($this->semValue)-1; if ($this->semValue[$end] === null) array_pop($this->semValue);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             501 => function ($stackPos) {
-                $this->semValue = $this->semStack[$stackPos];
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             502 => function ($stackPos) {
-                 /* do nothing -- prevent default action of $$=$this->semStack[$1]. See $551. */
+                 $this->semValue = $this->semStack[$stackPos-(3-2)];
             },
             503 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             504 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             505 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(3-3)], $this->semStack[$stackPos-(3-1)], false, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             506 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(1-1)], null, false, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             507 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(4-4)], $this->semStack[$stackPos-(4-1)], true, $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             508 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(2-2)], null, true, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(3-2)];
             },
             509 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(2-2)], null, false, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes, true, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             510 => function ($stackPos) {
-                 $this->semValue = null;
+                 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             511 => function ($stackPos) {
-                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             512 => function ($stackPos) {
-                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             513 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             514 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)]);
+                 $this->semValue = new Expr\MethodCall($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             515 => function ($stackPos) {
-                 $this->semValue = new Scalar\EncapsedStringPart($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\NullsafeMethodCall($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             516 => function ($stackPos) {
-                 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = null;
             },
             517 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             518 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             519 => function ($stackPos) {
-                 $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             520 => function ($stackPos) {
-                 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             521 => function ($stackPos) {
-                 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\NullsafePropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             522 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(6-2)], $this->semStack[$stackPos-(6-4)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes);
+                 $this->semValue = substr($this->semStack[$stackPos-(1-1)], 1);
             },
             523 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
+                 $this->semValue = $this->semStack[$stackPos-(4-3)];
             },
             524 => function ($stackPos) {
-                 $this->semValue = new Scalar\String_($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             525 => function ($stackPos) {
-                 $this->semValue = $this->parseNumString($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Error($this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); $this->errorState = 2;
             },
             526 => function ($stackPos) {
-                 $this->semValue = $this->parseNumString('-' . $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $var = $this->semStack[$stackPos-(1-1)]; $this->semValue = \is_string($var) ? new Node\VarLikeIdentifier($var, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes) : $var;
             },
             527 => function ($stackPos) {
+                 $this->semValue = new Expr\StaticPropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+            },
+            528 => function ($stackPos) {
+                 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+            },
+            529 => function ($stackPos) {
+                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+            },
+            530 => function ($stackPos) {
+                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+            },
+            531 => function ($stackPos) {
+                 $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+            },
+            532 => function ($stackPos) {
+                 $this->semValue = new Expr\NullsafePropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+            },
+            533 => function ($stackPos) {
+                 $this->semValue = new Expr\StaticPropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+            },
+            534 => function ($stackPos) {
+                 $this->semValue = new Expr\StaticPropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+            },
+            535 => function ($stackPos) {
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+            },
+            536 => function ($stackPos) {
+                 $this->semValue = $this->semStack[$stackPos-(3-2)];
+            },
+            537 => function ($stackPos) {
+                 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+            },
+            538 => function ($stackPos) {
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+            },
+            539 => function ($stackPos) {
+                 $this->semValue = $this->semStack[$stackPos-(3-2)];
+            },
+            540 => function ($stackPos) {
+                 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+            },
+            541 => function ($stackPos) {
+                 $this->semValue = new Expr\Error($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); $this->errorState = 2;
+            },
+            542 => function ($stackPos) {
+                 $this->semValue = new Expr\List_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+            },
+            543 => function ($stackPos) {
+                 $this->semValue = $this->semStack[$stackPos-(1-1)]; $end = count($this->semValue)-1; if ($this->semValue[$end] === null) array_pop($this->semValue);
+            },
+            544 => function ($stackPos) {
+                $this->semValue = $this->semStack[$stackPos];
+            },
+            545 => function ($stackPos) {
+                 /* do nothing -- prevent default action of $$=$this->semStack[$1]. See $551. */
+            },
+            546 => function ($stackPos) {
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+            },
+            547 => function ($stackPos) {
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+            },
+            548 => function ($stackPos) {
+                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(1-1)], null, false, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+            },
+            549 => function ($stackPos) {
+                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(2-2)], null, true, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+            },
+            550 => function ($stackPos) {
+                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(1-1)], null, false, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+            },
+            551 => function ($stackPos) {
+                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(3-3)], $this->semStack[$stackPos-(3-1)], false, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+            },
+            552 => function ($stackPos) {
+                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(4-4)], $this->semStack[$stackPos-(4-1)], true, $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+            },
+            553 => function ($stackPos) {
+                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(3-3)], $this->semStack[$stackPos-(3-1)], false, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+            },
+            554 => function ($stackPos) {
+                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(2-2)], null, false, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes, true, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+            },
+            555 => function ($stackPos) {
+                 $this->semValue = null;
+            },
+            556 => function ($stackPos) {
+                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
+            },
+            557 => function ($stackPos) {
+                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
+            },
+            558 => function ($stackPos) {
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+            },
+            559 => function ($stackPos) {
+                 $this->semValue = array($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)]);
+            },
+            560 => function ($stackPos) {
+                 $this->semValue = new Scalar\EncapsedStringPart($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+            },
+            561 => function ($stackPos) {
+                 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+            },
+            562 => function ($stackPos) {
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+            },
+            563 => function ($stackPos) {
+                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+            },
+            564 => function ($stackPos) {
+                 $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+            },
+            565 => function ($stackPos) {
+                 $this->semValue = new Expr\NullsafePropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+            },
+            566 => function ($stackPos) {
+                 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+            },
+            567 => function ($stackPos) {
+                 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+            },
+            568 => function ($stackPos) {
+                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(6-2)], $this->semStack[$stackPos-(6-4)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes);
+            },
+            569 => function ($stackPos) {
+                 $this->semValue = $this->semStack[$stackPos-(3-2)];
+            },
+            570 => function ($stackPos) {
+                 $this->semValue = new Scalar\String_($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+            },
+            571 => function ($stackPos) {
+                 $this->semValue = $this->parseNumString($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+            },
+            572 => function ($stackPos) {
+                 $this->semValue = $this->parseNumString('-' . $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+            },
+            573 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
         ];
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Parser/Tokens.php b/vendor/nikic/php-parser/lib/PhpParser/Parser/Tokens.php
index 50c5bf5747ec882c947c35e49215896229ba1e4e..ed2062b46d0207d99cda31bb23184c56bbad2d0a 100644
--- a/vendor/nikic/php-parser/lib/PhpParser/Parser/Tokens.php
+++ b/vendor/nikic/php-parser/lib/PhpParser/Parser/Tokens.php
@@ -6,84 +6,84 @@
 final class Tokens
 {
     const YYERRTOK = 256;
-    const T_INCLUDE = 257;
-    const T_INCLUDE_ONCE = 258;
-    const T_EVAL = 259;
-    const T_REQUIRE = 260;
-    const T_REQUIRE_ONCE = 261;
-    const T_LOGICAL_OR = 262;
-    const T_LOGICAL_XOR = 263;
-    const T_LOGICAL_AND = 264;
-    const T_PRINT = 265;
-    const T_YIELD = 266;
-    const T_DOUBLE_ARROW = 267;
-    const T_YIELD_FROM = 268;
-    const T_PLUS_EQUAL = 269;
-    const T_MINUS_EQUAL = 270;
-    const T_MUL_EQUAL = 271;
-    const T_DIV_EQUAL = 272;
-    const T_CONCAT_EQUAL = 273;
-    const T_MOD_EQUAL = 274;
-    const T_AND_EQUAL = 275;
-    const T_OR_EQUAL = 276;
-    const T_XOR_EQUAL = 277;
-    const T_SL_EQUAL = 278;
-    const T_SR_EQUAL = 279;
-    const T_POW_EQUAL = 280;
-    const T_COALESCE_EQUAL = 281;
-    const T_COALESCE = 282;
-    const T_BOOLEAN_OR = 283;
-    const T_BOOLEAN_AND = 284;
-    const T_IS_EQUAL = 285;
-    const T_IS_NOT_EQUAL = 286;
-    const T_IS_IDENTICAL = 287;
-    const T_IS_NOT_IDENTICAL = 288;
-    const T_SPACESHIP = 289;
-    const T_IS_SMALLER_OR_EQUAL = 290;
-    const T_IS_GREATER_OR_EQUAL = 291;
-    const T_SL = 292;
-    const T_SR = 293;
-    const T_INSTANCEOF = 294;
-    const T_INC = 295;
-    const T_DEC = 296;
-    const T_INT_CAST = 297;
-    const T_DOUBLE_CAST = 298;
-    const T_STRING_CAST = 299;
-    const T_ARRAY_CAST = 300;
-    const T_OBJECT_CAST = 301;
-    const T_BOOL_CAST = 302;
-    const T_UNSET_CAST = 303;
-    const T_POW = 304;
-    const T_NEW = 305;
-    const T_CLONE = 306;
-    const T_EXIT = 307;
-    const T_IF = 308;
-    const T_ELSEIF = 309;
-    const T_ELSE = 310;
-    const T_ENDIF = 311;
-    const T_LNUMBER = 312;
-    const T_DNUMBER = 313;
-    const T_STRING = 314;
-    const T_STRING_VARNAME = 315;
-    const T_VARIABLE = 316;
-    const T_NUM_STRING = 317;
-    const T_INLINE_HTML = 318;
-    const T_CHARACTER = 319;
-    const T_BAD_CHARACTER = 320;
-    const T_ENCAPSED_AND_WHITESPACE = 321;
-    const T_CONSTANT_ENCAPSED_STRING = 322;
-    const T_ECHO = 323;
-    const T_DO = 324;
-    const T_WHILE = 325;
-    const T_ENDWHILE = 326;
-    const T_FOR = 327;
-    const T_ENDFOR = 328;
-    const T_FOREACH = 329;
-    const T_ENDFOREACH = 330;
-    const T_DECLARE = 331;
-    const T_ENDDECLARE = 332;
-    const T_AS = 333;
-    const T_SWITCH = 334;
+    const T_THROW = 257;
+    const T_INCLUDE = 258;
+    const T_INCLUDE_ONCE = 259;
+    const T_EVAL = 260;
+    const T_REQUIRE = 261;
+    const T_REQUIRE_ONCE = 262;
+    const T_LOGICAL_OR = 263;
+    const T_LOGICAL_XOR = 264;
+    const T_LOGICAL_AND = 265;
+    const T_PRINT = 266;
+    const T_YIELD = 267;
+    const T_DOUBLE_ARROW = 268;
+    const T_YIELD_FROM = 269;
+    const T_PLUS_EQUAL = 270;
+    const T_MINUS_EQUAL = 271;
+    const T_MUL_EQUAL = 272;
+    const T_DIV_EQUAL = 273;
+    const T_CONCAT_EQUAL = 274;
+    const T_MOD_EQUAL = 275;
+    const T_AND_EQUAL = 276;
+    const T_OR_EQUAL = 277;
+    const T_XOR_EQUAL = 278;
+    const T_SL_EQUAL = 279;
+    const T_SR_EQUAL = 280;
+    const T_POW_EQUAL = 281;
+    const T_COALESCE_EQUAL = 282;
+    const T_COALESCE = 283;
+    const T_BOOLEAN_OR = 284;
+    const T_BOOLEAN_AND = 285;
+    const T_IS_EQUAL = 286;
+    const T_IS_NOT_EQUAL = 287;
+    const T_IS_IDENTICAL = 288;
+    const T_IS_NOT_IDENTICAL = 289;
+    const T_SPACESHIP = 290;
+    const T_IS_SMALLER_OR_EQUAL = 291;
+    const T_IS_GREATER_OR_EQUAL = 292;
+    const T_SL = 293;
+    const T_SR = 294;
+    const T_INSTANCEOF = 295;
+    const T_INC = 296;
+    const T_DEC = 297;
+    const T_INT_CAST = 298;
+    const T_DOUBLE_CAST = 299;
+    const T_STRING_CAST = 300;
+    const T_ARRAY_CAST = 301;
+    const T_OBJECT_CAST = 302;
+    const T_BOOL_CAST = 303;
+    const T_UNSET_CAST = 304;
+    const T_POW = 305;
+    const T_NEW = 306;
+    const T_CLONE = 307;
+    const T_EXIT = 308;
+    const T_IF = 309;
+    const T_ELSEIF = 310;
+    const T_ELSE = 311;
+    const T_ENDIF = 312;
+    const T_LNUMBER = 313;
+    const T_DNUMBER = 314;
+    const T_STRING = 315;
+    const T_STRING_VARNAME = 316;
+    const T_VARIABLE = 317;
+    const T_NUM_STRING = 318;
+    const T_INLINE_HTML = 319;
+    const T_ENCAPSED_AND_WHITESPACE = 320;
+    const T_CONSTANT_ENCAPSED_STRING = 321;
+    const T_ECHO = 322;
+    const T_DO = 323;
+    const T_WHILE = 324;
+    const T_ENDWHILE = 325;
+    const T_FOR = 326;
+    const T_ENDFOR = 327;
+    const T_FOREACH = 328;
+    const T_ENDFOREACH = 329;
+    const T_DECLARE = 330;
+    const T_ENDDECLARE = 331;
+    const T_AS = 332;
+    const T_SWITCH = 333;
+    const T_MATCH = 334;
     const T_ENDSWITCH = 335;
     const T_CASE = 336;
     const T_DEFAULT = 337;
@@ -97,27 +97,27 @@ final class Tokens
     const T_TRY = 345;
     const T_CATCH = 346;
     const T_FINALLY = 347;
-    const T_THROW = 348;
-    const T_USE = 349;
-    const T_INSTEADOF = 350;
-    const T_GLOBAL = 351;
-    const T_STATIC = 352;
-    const T_ABSTRACT = 353;
-    const T_FINAL = 354;
-    const T_PRIVATE = 355;
-    const T_PROTECTED = 356;
-    const T_PUBLIC = 357;
-    const T_VAR = 358;
-    const T_UNSET = 359;
-    const T_ISSET = 360;
-    const T_EMPTY = 361;
-    const T_HALT_COMPILER = 362;
-    const T_CLASS = 363;
-    const T_TRAIT = 364;
-    const T_INTERFACE = 365;
-    const T_EXTENDS = 366;
-    const T_IMPLEMENTS = 367;
-    const T_OBJECT_OPERATOR = 368;
+    const T_USE = 348;
+    const T_INSTEADOF = 349;
+    const T_GLOBAL = 350;
+    const T_STATIC = 351;
+    const T_ABSTRACT = 352;
+    const T_FINAL = 353;
+    const T_PRIVATE = 354;
+    const T_PROTECTED = 355;
+    const T_PUBLIC = 356;
+    const T_VAR = 357;
+    const T_UNSET = 358;
+    const T_ISSET = 359;
+    const T_EMPTY = 360;
+    const T_HALT_COMPILER = 361;
+    const T_CLASS = 362;
+    const T_TRAIT = 363;
+    const T_INTERFACE = 364;
+    const T_EXTENDS = 365;
+    const T_IMPLEMENTS = 366;
+    const T_OBJECT_OPERATOR = 367;
+    const T_NULLSAFE_OBJECT_OPERATOR = 368;
     const T_LIST = 369;
     const T_ARRAY = 370;
     const T_CALLABLE = 371;
@@ -127,20 +127,18 @@ final class Tokens
     const T_FUNC_C = 375;
     const T_LINE = 376;
     const T_FILE = 377;
-    const T_COMMENT = 378;
-    const T_DOC_COMMENT = 379;
-    const T_OPEN_TAG = 380;
-    const T_OPEN_TAG_WITH_ECHO = 381;
-    const T_CLOSE_TAG = 382;
-    const T_WHITESPACE = 383;
-    const T_START_HEREDOC = 384;
-    const T_END_HEREDOC = 385;
-    const T_DOLLAR_OPEN_CURLY_BRACES = 386;
-    const T_CURLY_OPEN = 387;
-    const T_PAAMAYIM_NEKUDOTAYIM = 388;
-    const T_NAMESPACE = 389;
-    const T_NS_C = 390;
-    const T_DIR = 391;
-    const T_NS_SEPARATOR = 392;
-    const T_ELLIPSIS = 393;
+    const T_START_HEREDOC = 378;
+    const T_END_HEREDOC = 379;
+    const T_DOLLAR_OPEN_CURLY_BRACES = 380;
+    const T_CURLY_OPEN = 381;
+    const T_PAAMAYIM_NEKUDOTAYIM = 382;
+    const T_NAMESPACE = 383;
+    const T_NS_C = 384;
+    const T_DIR = 385;
+    const T_NS_SEPARATOR = 386;
+    const T_ELLIPSIS = 387;
+    const T_NAME_FULLY_QUALIFIED = 388;
+    const T_NAME_QUALIFIED = 389;
+    const T_NAME_RELATIVE = 390;
+    const T_ATTRIBUTE = 391;
 }
diff --git a/vendor/nikic/php-parser/lib/PhpParser/ParserAbstract.php b/vendor/nikic/php-parser/lib/PhpParser/ParserAbstract.php
index 975e17c6bb7e3dada824e9e12cc43c9ff0efc5c3..11c8568db921083bb362a8ddc19594a55224ee03 100644
--- a/vendor/nikic/php-parser/lib/PhpParser/ParserAbstract.php
+++ b/vendor/nikic/php-parser/lib/PhpParser/ParserAbstract.php
@@ -648,7 +648,7 @@ protected function fixupStartAttributes(Node $to, Node $from) {
     }
 
     protected function handleBuiltinTypes(Name $name) {
-        $scalarTypes = [
+        $builtinTypes = [
             'bool'     => true,
             'int'      => true,
             'float'    => true,
@@ -656,6 +656,9 @@ protected function handleBuiltinTypes(Name $name) {
             'iterable' => true,
             'void'     => true,
             'object'   => true,
+            'null'     => true,
+            'false'    => true,
+            'mixed'    => true,
         ];
 
         if (!$name->isUnqualified()) {
@@ -663,7 +666,7 @@ protected function handleBuiltinTypes(Name $name) {
         }
 
         $lowerName = $name->toLowerString();
-        if (!isset($scalarTypes[$lowerName])) {
+        if (!isset($builtinTypes[$lowerName])) {
             return $name;
         }
 
@@ -840,21 +843,29 @@ protected function parseDocString(
     }
 
     /**
-     * Create attributes for a zero-length node with the given start attributes.
+     * Create attributes for a zero-length common-capturing nop.
      *
-     * @param array $startAttributes
+     * @param Comment[] $comments
      * @return array
      */
-    protected function createZeroLengthAttributes(array $startAttributes) {
-        $attributes = $startAttributes;
-        if (isset($startAttributes['startLine'])) {
-            $attributes['endLine'] = $startAttributes['startLine'];
+    protected function createCommentNopAttributes(array $comments) {
+        $comment = $comments[count($comments) - 1];
+        $commentEndLine = $comment->getEndLine();
+        $commentEndFilePos = $comment->getEndFilePos();
+        $commentEndTokenPos = $comment->getEndTokenPos();
+
+        $attributes = ['comments' => $comments];
+        if (-1 !== $commentEndLine) {
+            $attributes['startLine'] = $commentEndLine;
+            $attributes['endLine'] = $commentEndLine;
         }
-        if (isset($startAttributes['startTokenPos'])) {
-            $attributes['endTokenPos'] = $startAttributes['startTokenPos'] - 1;
+        if (-1 !== $commentEndFilePos) {
+            $attributes['startFilePos'] = $commentEndFilePos + 1;
+            $attributes['endFilePos'] = $commentEndFilePos;
         }
-        if (isset($startAttributes['startFilePos'])) {
-            $attributes['endFilePos'] = $startAttributes['startFilePos'] - 1;
+        if (-1 !== $commentEndTokenPos) {
+            $attributes['startTokenPos'] = $commentEndTokenPos + 1;
+            $attributes['endTokenPos'] = $commentEndTokenPos;
         }
         return $attributes;
     }
@@ -887,13 +898,6 @@ protected function checkTryCatch(TryCatch $node) {
     }
 
     protected function checkNamespace(Namespace_ $node) {
-        if ($node->name && $node->name->isSpecialClassName()) {
-            $this->emitError(new Error(
-                sprintf('Cannot use \'%s\' as namespace name', $node->name),
-                $node->name->getAttributes()
-            ));
-        }
-
         if (null !== $node->stmts) {
             foreach ($node->stmts as $stmt) {
                 if ($stmt instanceof Namespace_) {
diff --git a/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinter/Standard.php b/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinter/Standard.php
index 78ee7d0032483fe4dc4e4bd9d5f3c7f1b0d9ba11..c44bda983341aba9ad3c8706f2ea78bafe55d781 100644
--- a/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinter/Standard.php
+++ b/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinter/Standard.php
@@ -18,7 +18,9 @@ class Standard extends PrettyPrinterAbstract
     // Special nodes
 
     protected function pParam(Node\Param $node) {
-        return ($node->type ? $this->p($node->type) . ' ' : '')
+        return $this->pAttrGroups($node->attrGroups, true)
+             . $this->pModifiers($node->flags)
+             . ($node->type ? $this->p($node->type) . ' ' : '')
              . ($node->byRef ? '&' : '')
              . ($node->variadic ? '...' : '')
              . $this->p($node->var)
@@ -26,7 +28,9 @@ protected function pParam(Node\Param $node) {
     }
 
     protected function pArg(Node\Arg $node) {
-        return ($node->byRef ? '&' : '') . ($node->unpack ? '...' : '') . $this->p($node->value);
+        return ($node->name ? $node->name->toString() . ': ' : '')
+             . ($node->byRef ? '&' : '') . ($node->unpack ? '...' : '')
+             . $this->p($node->value);
     }
 
     protected function pConst(Node\Const_ $node) {
@@ -37,6 +41,10 @@ protected function pNullableType(Node\NullableType $node) {
         return '?' . $this->p($node->type);
     }
 
+    protected function pUnionType(Node\UnionType $node) {
+        return $this->pImplode($node->types, '|');
+    }
+
     protected function pIdentifier(Node\Identifier $node) {
         return $node->name;
     }
@@ -45,6 +53,15 @@ protected function pVarLikeIdentifier(Node\VarLikeIdentifier $node) {
         return '$' . $node->name;
     }
 
+    protected function pAttribute(Node\Attribute $node) {
+        return $this->p($node->name)
+             . ($node->args ? '(' . $this->pCommaSeparated($node->args) . ')' : '');
+    }
+
+    protected function pAttributeGroup(Node\AttributeGroup $node) {
+        return '#[' . $this->pCommaSeparated($node->attrs) . ']';
+    }
+
     // Names
 
     protected function pName(Name $node) {
@@ -159,8 +176,13 @@ protected function pScalar_LNumber(Scalar\LNumber $node) {
             return (string) $node->value;
         }
 
-        $sign = $node->value < 0 ? '-' : '';
-        $str = (string) $node->value;
+        if ($node->value < 0) {
+            $sign = '-';
+            $str = (string) -$node->value;
+        } else {
+            $sign = '';
+            $str = (string) $node->value;
+        }
         switch ($kind) {
             case Scalar\LNumber::KIND_BIN:
                 return $sign . '0b' . base_convert($str, 10, 2);
@@ -375,7 +397,10 @@ protected function pExpr_BinaryOp_Coalesce(BinaryOp\Coalesce $node) {
     }
 
     protected function pExpr_Instanceof(Expr\Instanceof_ $node) {
-        return $this->pInfixOp(Expr\Instanceof_::class, $node->expr, ' instanceof ', $node->class);
+        list($precedence, $associativity) = $this->precedenceMap[Expr\Instanceof_::class];
+        return $this->pPrec($node->expr, $precedence, $associativity, -1)
+             . ' instanceof '
+             . $this->pNewVariable($node->class);
     }
 
     // Unary expressions
@@ -482,6 +507,11 @@ protected function pExpr_MethodCall(Expr\MethodCall $node) {
              . '(' . $this->pMaybeMultiline($node->args) . ')';
     }
 
+    protected function pExpr_NullsafeMethodCall(Expr\NullsafeMethodCall $node) {
+        return $this->pDereferenceLhs($node->var) . '?->' . $this->pObjectProperty($node->name)
+            . '(' . $this->pMaybeMultiline($node->args) . ')';
+    }
+
     protected function pExpr_StaticCall(Expr\StaticCall $node) {
         return $this->pDereferenceLhs($node->class) . '::'
              . ($node->name instanceof Expr
@@ -560,13 +590,17 @@ protected function pExpr_ConstFetch(Expr\ConstFetch $node) {
     }
 
     protected function pExpr_ClassConstFetch(Expr\ClassConstFetch $node) {
-        return $this->p($node->class) . '::' . $this->p($node->name);
+        return $this->pDereferenceLhs($node->class) . '::' . $this->p($node->name);
     }
 
     protected function pExpr_PropertyFetch(Expr\PropertyFetch $node) {
         return $this->pDereferenceLhs($node->var) . '->' . $this->pObjectProperty($node->name);
     }
 
+    protected function pExpr_NullsafePropertyFetch(Expr\NullsafePropertyFetch $node) {
+        return $this->pDereferenceLhs($node->var) . '?->' . $this->pObjectProperty($node->name);
+    }
+
     protected function pExpr_StaticPropertyFetch(Expr\StaticPropertyFetch $node) {
         return $this->pDereferenceLhs($node->class) . '::$' . $this->pObjectProperty($node->name);
     }
@@ -576,7 +610,8 @@ protected function pExpr_ShellExec(Expr\ShellExec $node) {
     }
 
     protected function pExpr_Closure(Expr\Closure $node) {
-        return ($node->static ? 'static ' : '')
+        return $this->pAttrGroups($node->attrGroups, true)
+             . ($node->static ? 'static ' : '')
              . 'function ' . ($node->byRef ? '&' : '')
              . '(' . $this->pCommaSeparated($node->params) . ')'
              . (!empty($node->uses) ? ' use(' . $this->pCommaSeparated($node->uses) . ')' : '')
@@ -584,8 +619,21 @@ protected function pExpr_Closure(Expr\Closure $node) {
              . ' {' . $this->pStmts($node->stmts) . $this->nl . '}';
     }
 
+    protected function pExpr_Match(Expr\Match_ $node) {
+        return 'match (' . $this->p($node->cond) . ') {'
+            . $this->pCommaSeparatedMultiline($node->arms, true)
+            . $this->nl
+            . '}';
+    }
+
+    protected function pMatchArm(Node\MatchArm $node) {
+        return ($node->conds ? $this->pCommaSeparated($node->conds) : 'default')
+            . ' => ' . $this->p($node->body);
+    }
+
     protected function pExpr_ArrowFunction(Expr\ArrowFunction $node) {
-        return ($node->static ? 'static ' : '')
+        return $this->pAttrGroups($node->attrGroups, true)
+            . ($node->static ? 'static ' : '')
             . 'fn' . ($node->byRef ? '&' : '')
             . '(' . $this->pCommaSeparated($node->params) . ')'
             . (null !== $node->returnType ? ': ' . $this->p($node->returnType) : '')
@@ -602,7 +650,8 @@ protected function pExpr_New(Expr\New_ $node) {
             $args = $node->args ? '(' . $this->pMaybeMultiline($node->args) . ')' : '';
             return 'new ' . $this->pClassCommon($node->class, $args);
         }
-        return 'new ' . $this->p($node->class) . '(' . $this->pMaybeMultiline($node->args) . ')';
+        return 'new ' . $this->pNewVariable($node->class)
+            . '(' . $this->pMaybeMultiline($node->args) . ')';
     }
 
     protected function pExpr_Clone(Expr\Clone_ $node) {
@@ -623,6 +672,10 @@ protected function pExpr_Exit(Expr\Exit_ $node) {
              . (null !== $node->expr ? '(' . $this->p($node->expr) . ')' : '');
     }
 
+    protected function pExpr_Throw(Expr\Throw_ $node) {
+        return 'throw ' . $this->p($node->expr);
+    }
+
     protected function pExpr_Yield(Expr\Yield_ $node) {
         if ($node->value === null) {
             return 'yield';
@@ -668,7 +721,8 @@ protected function pUseType($type) {
     }
 
     protected function pStmt_Interface(Stmt\Interface_ $node) {
-        return 'interface ' . $node->name
+        return $this->pAttrGroups($node->attrGroups)
+             . 'interface ' . $node->name
              . (!empty($node->extends) ? ' extends ' . $this->pCommaSeparated($node->extends) : '')
              . $this->nl . '{' . $this->pStmts($node->stmts) . $this->nl . '}';
     }
@@ -678,7 +732,8 @@ protected function pStmt_Class(Stmt\Class_ $node) {
     }
 
     protected function pStmt_Trait(Stmt\Trait_ $node) {
-        return 'trait ' . $node->name
+        return $this->pAttrGroups($node->attrGroups)
+             . 'trait ' . $node->name
              . $this->nl . '{' . $this->pStmts($node->stmts) . $this->nl . '}';
     }
 
@@ -703,7 +758,8 @@ protected function pStmt_TraitUseAdaptation_Alias(Stmt\TraitUseAdaptation\Alias
     }
 
     protected function pStmt_Property(Stmt\Property $node) {
-        return (0 === $node->flags ? 'var ' : $this->pModifiers($node->flags))
+        return $this->pAttrGroups($node->attrGroups)
+            . (0 === $node->flags ? 'var ' : $this->pModifiers($node->flags))
             . ($node->type ? $this->p($node->type) . ' ' : '')
             . $this->pCommaSeparated($node->props) . ';';
     }
@@ -714,9 +770,10 @@ protected function pStmt_PropertyProperty(Stmt\PropertyProperty $node) {
     }
 
     protected function pStmt_ClassMethod(Stmt\ClassMethod $node) {
-        return $this->pModifiers($node->flags)
+        return $this->pAttrGroups($node->attrGroups)
+             . $this->pModifiers($node->flags)
              . 'function ' . ($node->byRef ? '&' : '') . $node->name
-             . '(' . $this->pCommaSeparated($node->params) . ')'
+             . '(' . $this->pMaybeMultiline($node->params) . ')'
              . (null !== $node->returnType ? ' : ' . $this->p($node->returnType) : '')
              . (null !== $node->stmts
                 ? $this->nl . '{' . $this->pStmts($node->stmts) . $this->nl . '}'
@@ -724,12 +781,14 @@ protected function pStmt_ClassMethod(Stmt\ClassMethod $node) {
     }
 
     protected function pStmt_ClassConst(Stmt\ClassConst $node) {
-        return $this->pModifiers($node->flags)
+        return $this->pAttrGroups($node->attrGroups)
+             . $this->pModifiers($node->flags)
              . 'const ' . $this->pCommaSeparated($node->consts) . ';';
     }
 
     protected function pStmt_Function(Stmt\Function_ $node) {
-        return 'function ' . ($node->byRef ? '&' : '') . $node->name
+        return $this->pAttrGroups($node->attrGroups)
+             . 'function ' . ($node->byRef ? '&' : '') . $node->name
              . '(' . $this->pCommaSeparated($node->params) . ')'
              . (null !== $node->returnType ? ' : ' . $this->p($node->returnType) : '')
              . $this->nl . '{' . $this->pStmts($node->stmts) . $this->nl . '}';
@@ -808,8 +867,8 @@ protected function pStmt_TryCatch(Stmt\TryCatch $node) {
     }
 
     protected function pStmt_Catch(Stmt\Catch_ $node) {
-        return 'catch (' . $this->pImplode($node->types, '|') . ' '
-             . $this->p($node->var)
+        return 'catch (' . $this->pImplode($node->types, '|')
+             . ($node->var !== null ? ' ' . $this->p($node->var) : '')
              . ') {' . $this->pStmts($node->stmts) . $this->nl . '}';
     }
 
@@ -884,11 +943,12 @@ protected function pStmt_Nop(Stmt\Nop $node) {
     // Helpers
 
     protected function pClassCommon(Stmt\Class_ $node, $afterClassToken) {
-        return $this->pModifiers($node->flags)
-        . 'class' . $afterClassToken
-        . (null !== $node->extends ? ' extends ' . $this->p($node->extends) : '')
-        . (!empty($node->implements) ? ' implements ' . $this->pCommaSeparated($node->implements) : '')
-        . $this->nl . '{' . $this->pStmts($node->stmts) . $this->nl . '}';
+        return $this->pAttrGroups($node->attrGroups, $node->name === null)
+            . $this->pModifiers($node->flags)
+            . 'class' . $afterClassToken
+            . (null !== $node->extends ? ' extends ' . $this->p($node->extends) : '')
+            . (!empty($node->implements) ? ' implements ' . $this->pCommaSeparated($node->implements) : '')
+            . $this->nl . '{' . $this->pStmts($node->stmts) . $this->nl . '}';
     }
 
     protected function pObjectProperty($node) {
@@ -971,6 +1031,11 @@ protected function pCallLhs(Node $node) {
         }
     }
 
+    protected function pNewVariable(Node $node) {
+        // TODO: This is not fully accurate.
+        return $this->pDereferenceLhs($node);
+    }
+
     /**
      * @param Node[] $nodes
      * @return bool
@@ -984,11 +1049,21 @@ private function hasNodeWithComments(array $nodes) {
         return false;
     }
 
-    private function pMaybeMultiline(array $nodes, $trailingComma = false) {
+    private function pMaybeMultiline(array $nodes, bool $trailingComma = false) {
         if (!$this->hasNodeWithComments($nodes)) {
             return $this->pCommaSeparated($nodes);
         } else {
             return $this->pCommaSeparatedMultiline($nodes, $trailingComma) . $this->nl;
         }
     }
+
+    private function pAttrGroups(array $nodes, bool $inline = false): string {
+        $result = '';
+        $sep = $inline ? ' ' : $this->nl;
+        foreach ($nodes as $node) {
+            $result .= $this->p($node) . $sep;
+        }
+
+        return $result;
+    }
 }
diff --git a/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php b/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php
index 90f10c4624b8556006a5d39802de7b1d58036c42..bc85f76b45d33b5de052f3f60553ea4de5d8bf86 100644
--- a/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php
+++ b/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php
@@ -704,8 +704,10 @@ protected function pArray(
 
         $mapKey = $parentNodeType . '->' . $subNodeName;
         $insertStr = $this->listInsertionMap[$mapKey] ?? null;
+        $isStmtList = $subNodeName === 'stmts';
 
         $beforeFirstKeepOrReplace = true;
+        $skipRemovedNode = false;
         $delayedAdd = [];
         $lastElemIndentLevel = $this->indentLevel;
 
@@ -715,7 +717,7 @@ protected function pArray(
             $insertNewline = true;
         }
 
-        if ($subNodeName === 'stmts' && \count($origNodes) === 1 && \count($nodes) !== 1) {
+        if ($isStmtList && \count($origNodes) === 1 && \count($nodes) !== 1) {
             $startPos = $origNodes[0]->getStartTokenPos();
             $endPos = $origNodes[0]->getEndTokenPos();
             \assert($startPos >= 0 && $endPos >= 0);
@@ -754,14 +756,7 @@ protected function pArray(
 
                 $itemStartPos = $origArrItem->getStartTokenPos();
                 $itemEndPos = $origArrItem->getEndTokenPos();
-                \assert($itemStartPos >= 0 && $itemEndPos >= 0);
-
-                if ($itemEndPos < $itemStartPos) {
-                    // End can be before start for Nop nodes, because offsets refer to non-whitespace
-                    // locations, which for an "empty" node might result in an inverted order.
-                    assert($origArrItem instanceof Stmt\Nop);
-                    continue;
-                }
+                \assert($itemStartPos >= 0 && $itemEndPos >= 0 && $itemStartPos >= $pos);
 
                 $origIndentLevel = $this->indentLevel;
                 $lastElemIndentLevel = $this->origTokens->getIndentationBefore($itemStartPos) + $indentAdjustment;
@@ -769,19 +764,28 @@ protected function pArray(
 
                 $comments = $arrItem->getComments();
                 $origComments = $origArrItem->getComments();
-                $commentStartPos = $origComments ? $origComments[0]->getTokenPos() : $itemStartPos;
+                $commentStartPos = $origComments ? $origComments[0]->getStartTokenPos() : $itemStartPos;
                 \assert($commentStartPos >= 0);
 
-                $commentsChanged = $comments !== $origComments;
-                if ($commentsChanged) {
-                    // Remove old comments
-                    $itemStartPos = $commentStartPos;
+                if ($commentStartPos < $pos) {
+                    // Comments may be assigned to multiple nodes if they start at the same position.
+                    // Make sure we don't try to print them multiple times.
+                    $commentStartPos = $itemStartPos;
                 }
 
-                if (!empty($delayedAdd)) {
+                if ($skipRemovedNode) {
+                    if ($isStmtList && $this->origTokens->haveBracesInRange($pos, $itemStartPos)) {
+                        // We'd remove the brace of a code block.
+                        // TODO: Preserve formatting.
+                        $this->setIndentLevel($origIndentLevel);
+                        return null;
+                    }
+                } else {
                     $result .= $this->origTokens->getTokenCode(
                         $pos, $commentStartPos, $indentAdjustment);
+                }
 
+                if (!empty($delayedAdd)) {
                     /** @var Node $delayedAddNode */
                     foreach ($delayedAdd as $delayedAddNode) {
                         if ($insertNewline) {
@@ -800,19 +804,20 @@ protected function pArray(
                         }
                     }
 
-                    $result .= $this->origTokens->getTokenCode(
-                        $commentStartPos, $itemStartPos, $indentAdjustment);
-
                     $delayedAdd = [];
+                }
+
+                if ($comments !== $origComments) {
+                    if ($comments) {
+                        $result .= $this->pComments($comments) . $this->nl;
+                    }
                 } else {
                     $result .= $this->origTokens->getTokenCode(
-                        $pos, $itemStartPos, $indentAdjustment);
+                        $commentStartPos, $itemStartPos, $indentAdjustment);
                 }
 
-                if ($commentsChanged && $comments) {
-                    // Add new comments
-                    $result .= $this->pComments($comments) . $this->nl;
-                }
+                // If we had to remove anything, we have done so now.
+                $skipRemovedNode = false;
             } elseif ($diffType === DiffElem::TYPE_ADD) {
                 if (null === $insertStr) {
                     // We don't have insertion information for this list type
@@ -846,18 +851,34 @@ protected function pArray(
                     $result .= $insertStr;
                 }
             } elseif ($diffType === DiffElem::TYPE_REMOVE) {
-                if ($i === 0) {
-                    // TODO Handle removal at the start
-                    return null;
-                }
-
                 if (!$origArrItem instanceof Node) {
                     // We only support removal for nodes
                     return null;
                 }
 
+                $itemStartPos = $origArrItem->getStartTokenPos();
                 $itemEndPos = $origArrItem->getEndTokenPos();
-                \assert($itemEndPos >= 0);
+                \assert($itemStartPos >= 0 && $itemEndPos >= 0);
+
+                // Consider comments part of the node.
+                $origComments = $origArrItem->getComments();
+                if ($origComments) {
+                    $itemStartPos = $origComments[0]->getStartTokenPos();
+                }
+
+                if ($i === 0) {
+                    // If we're removing from the start, keep the tokens before the node and drop those after it,
+                    // instead of the other way around.
+                    $result .= $this->origTokens->getTokenCode(
+                        $pos, $itemStartPos, $indentAdjustment);
+                    $skipRemovedNode = true;
+                } else {
+                    if ($isStmtList && $this->origTokens->haveBracesInRange($pos, $itemStartPos)) {
+                        // We'd remove the brace of a code block.
+                        // TODO: Preserve formatting.
+                        return null;
+                    }
+                }
 
                 $pos = $itemEndPos + 1;
                 continue;
@@ -876,6 +897,11 @@ protected function pArray(
             $pos = $itemEndPos + 1;
         }
 
+        if ($skipRemovedNode) {
+            // TODO: Support removing single node.
+            return null;
+        }
+
         if (!empty($delayedAdd)) {
             if (!isset($this->emptyListInsertionMap[$mapKey])) {
                 return null;
@@ -1006,6 +1032,7 @@ protected function callLhsRequiresParens(Node $node) : bool {
             || $node instanceof Expr\ArrayDimFetch
             || $node instanceof Expr\FuncCall
             || $node instanceof Expr\MethodCall
+            || $node instanceof Expr\NullsafeMethodCall
             || $node instanceof Expr\StaticCall
             || $node instanceof Expr\Array_);
     }
@@ -1022,9 +1049,11 @@ protected function dereferenceLhsRequiresParens(Node $node) : bool {
             || $node instanceof Node\Name
             || $node instanceof Expr\ArrayDimFetch
             || $node instanceof Expr\PropertyFetch
+            || $node instanceof Expr\NullsafePropertyFetch
             || $node instanceof Expr\StaticPropertyFetch
             || $node instanceof Expr\FuncCall
             || $node instanceof Expr\MethodCall
+            || $node instanceof Expr\NullsafeMethodCall
             || $node instanceof Expr\StaticCall
             || $node instanceof Expr\Array_
             || $node instanceof Scalar\String_
@@ -1131,7 +1160,7 @@ protected function initializeFixupMap() {
             Expr\PostDec::class => ['var' => self::FIXUP_PREC_LEFT],
             Expr\Instanceof_::class => [
                 'expr' => self::FIXUP_PREC_LEFT,
-                'class' => self::FIXUP_PREC_RIGHT,
+                'class' => self::FIXUP_PREC_RIGHT, // TODO: FIXUP_NEW_VARIABLE
             ],
             Expr\Ternary::class => [
                 'cond' => self::FIXUP_PREC_LEFT,
@@ -1141,10 +1170,16 @@ protected function initializeFixupMap() {
             Expr\FuncCall::class => ['name' => self::FIXUP_CALL_LHS],
             Expr\StaticCall::class => ['class' => self::FIXUP_DEREF_LHS],
             Expr\ArrayDimFetch::class => ['var' => self::FIXUP_DEREF_LHS],
+            Expr\ClassConstFetch::class => ['var' => self::FIXUP_DEREF_LHS],
+            Expr\New_::class => ['class' => self::FIXUP_DEREF_LHS], // TODO: FIXUP_NEW_VARIABLE
             Expr\MethodCall::class => [
                 'var' => self::FIXUP_DEREF_LHS,
                 'name' => self::FIXUP_BRACED_NAME,
             ],
+            Expr\NullsafeMethodCall::class => [
+                'var' => self::FIXUP_DEREF_LHS,
+                'name' => self::FIXUP_BRACED_NAME,
+            ],
             Expr\StaticPropertyFetch::class => [
                 'class' => self::FIXUP_DEREF_LHS,
                 'name' => self::FIXUP_VAR_BRACED_NAME,
@@ -1153,6 +1188,10 @@ protected function initializeFixupMap() {
                 'var' => self::FIXUP_DEREF_LHS,
                 'name' => self::FIXUP_BRACED_NAME,
             ],
+            Expr\NullsafePropertyFetch::class => [
+                'var' => self::FIXUP_DEREF_LHS,
+                'name' => self::FIXUP_BRACED_NAME,
+            ],
             Scalar\Encapsed::class => [
                 'parts' => self::FIXUP_ENCAPSED,
             ],
@@ -1227,6 +1266,7 @@ protected function initializeRemovalMap() {
             'Param->type' => $stripRight,
             'Param->default' => $stripEquals,
             'Stmt_Break->num' => $stripBoth,
+            'Stmt_Catch->var' => $stripLeft,
             'Stmt_ClassMethod->returnType' => $stripColon,
             'Stmt_Class->extends' => ['left' => \T_EXTENDS],
             'Expr_PrintableNewAnonClass->extends' => ['left' => \T_EXTENDS],
@@ -1264,6 +1304,7 @@ protected function initializeInsertionMap() {
             'Param->type' => [null, false, null, ' '],
             'Param->default' => [null, false, ' = ', null],
             'Stmt_Break->num' => [\T_BREAK, false, ' ', null],
+            'Stmt_Catch->var' => [null, false, ' ', null],
             'Stmt_ClassMethod->returnType' => [')', false, ' : ', null],
             'Stmt_Class->extends' => [null, false, ' extends ', null],
             'Expr_PrintableNewAnonClass->extends' => [null, ' extends ', null],
@@ -1295,6 +1336,7 @@ protected function initializeListInsertionMap() {
             //'Expr_ShellExec->parts' => '', // TODO These need to be treated more carefully
             //'Scalar_Encapsed->parts' => '',
             'Stmt_Catch->types' => '|',
+            'UnionType->types' => '|',
             'Stmt_If->elseifs' => ' ',
             'Stmt_TryCatch->catches' => ' ',
 
@@ -1307,6 +1349,7 @@ protected function initializeListInsertionMap() {
             'Expr_Isset->vars' => ', ',
             'Expr_List->items' => ', ',
             'Expr_MethodCall->args' => ', ',
+            'Expr_NullsafeMethodCall->args' => ', ',
             'Expr_New->args' => ', ',
             'Expr_PrintableNewAnonClass->args' => ', ',
             'Expr_StaticCall->args' => ', ',
@@ -1324,12 +1367,15 @@ protected function initializeListInsertionMap() {
             'Stmt_Global->vars' => ', ',
             'Stmt_GroupUse->uses' => ', ',
             'Stmt_Interface->extends' => ', ',
+            'Stmt_Match->arms' => ', ',
             'Stmt_Property->props' => ', ',
             'Stmt_StaticVar->vars' => ', ',
             'Stmt_TraitUse->traits' => ', ',
             'Stmt_TraitUseAdaptation_Precedence->insteadof' => ', ',
             'Stmt_Unset->vars' => ', ',
             'Stmt_Use->uses' => ', ',
+            'MatchArm->conds' => ', ',
+            'AttributeGroup->attrs' => ', ',
 
             // statement lists
             'Expr_Closure->stmts' => "\n",
@@ -1350,6 +1396,17 @@ protected function initializeListInsertionMap() {
             'Stmt_Function->stmts' => "\n",
             'Stmt_If->stmts' => "\n",
             'Stmt_Namespace->stmts' => "\n",
+            'Stmt_Class->attrGroups' => "\n",
+            'Stmt_Interface->attrGroups' => "\n",
+            'Stmt_Trait->attrGroups' => "\n",
+            'Stmt_Function->attrGroups' => "\n",
+            'Stmt_ClassMethod->attrGroups' => "\n",
+            'Stmt_ClassConst->attrGroups' => "\n",
+            'Stmt_Property->attrGroups' => "\n",
+            'Expr_PrintableNewAnonClass->attrGroups' => ' ',
+            'Expr_Closure->attrGroups' => ' ',
+            'Expr_ArrowFunction->attrGroups' => ' ',
+            'Param->attrGroups' => ' ',
             'Stmt_Switch->cases' => "\n",
             'Stmt_TraitUse->adaptations' => "\n",
             'Stmt_TryCatch->stmts' => "\n",
@@ -1372,6 +1429,7 @@ protected function initializeEmptyListInsertionMap() {
             'Expr_Closure->params' => ['(', '', ''],
             'Expr_FuncCall->args' => ['(', '', ''],
             'Expr_MethodCall->args' => ['(', '', ''],
+            'Expr_NullsafeMethodCall->args' => ['(', '', ''],
             'Expr_New->args' => ['(', '', ''],
             'Expr_PrintableNewAnonClass->args' => ['(', '', ''],
             'Expr_PrintableNewAnonClass->implements' => [null, ' implements ', ''],
@@ -1396,6 +1454,7 @@ protected function initializeEmptyListInsertionMap() {
              * Stmt_TraitUseAdaptation_Precedence->insteadof
              * Stmt_Unset->vars
              * Stmt_Use->uses
+             * UnionType->types
              */
 
             /* TODO
@@ -1418,6 +1477,7 @@ protected function initializeModifierChangeMap() {
             'Stmt_ClassMethod->flags' => \T_FUNCTION,
             'Stmt_Class->flags' => \T_CLASS,
             'Stmt_Property->flags' => \T_VARIABLE,
+            'Param->flags' => \T_VARIABLE,
             //'Stmt_TraitUseAdaptation_Alias->newModifier' => 0, // TODO
         ];
 
diff --git a/vendor/nikic/php-parser/phpunit.xml.dist b/vendor/nikic/php-parser/phpunit.xml.dist
deleted file mode 100644
index 5271264cbf1c7e5b22b6068ea3a973237abfc1de..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/phpunit.xml.dist
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:noNamespaceSchemaLocation="vendor/phpunit/phpunit/phpunit.xsd"
-         backupGlobals="false"
-         colors="true"
-         beStrictAboutTestsThatDoNotTestAnything="false"
-         bootstrap="./test/bootstrap.php">
-    <testsuites>
-        <testsuite name="PHPParser Test Suite">
-            <directory>./test/</directory>
-        </testsuite>
-    </testsuites>
-
-    <filter>
-        <whitelist>
-            <directory suffix=".php">./lib/PhpParser/</directory>
-        </whitelist>
-    </filter>
-</phpunit>
diff --git a/vendor/nikic/php-parser/test/PhpParser/Builder/ClassTest.php b/vendor/nikic/php-parser/test/PhpParser/Builder/ClassTest.php
deleted file mode 100644
index 2cfa78723112737b7c69c4e40181a1510db76ad6..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/PhpParser/Builder/ClassTest.php
+++ /dev/null
@@ -1,153 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser\Builder;
-
-use PhpParser\Comment;
-use PhpParser\Node;
-use PhpParser\Node\Name;
-use PhpParser\Node\Stmt;
-
-class ClassTest extends \PHPUnit\Framework\TestCase
-{
-    protected function createClassBuilder($class) {
-        return new Class_($class);
-    }
-
-    public function testExtendsImplements() {
-        $node = $this->createClassBuilder('SomeLogger')
-            ->extend('BaseLogger')
-            ->implement('Namespaced\Logger', new Name('SomeInterface'))
-            ->implement('\Fully\Qualified', 'namespace\NamespaceRelative')
-            ->getNode()
-        ;
-
-        $this->assertEquals(
-            new Stmt\Class_('SomeLogger', [
-                'extends' => new Name('BaseLogger'),
-                'implements' => [
-                    new Name('Namespaced\Logger'),
-                    new Name('SomeInterface'),
-                    new Name\FullyQualified('Fully\Qualified'),
-                    new Name\Relative('NamespaceRelative'),
-                ],
-            ]),
-            $node
-        );
-    }
-
-    public function testAbstract() {
-        $node = $this->createClassBuilder('Test')
-            ->makeAbstract()
-            ->getNode()
-        ;
-
-        $this->assertEquals(
-            new Stmt\Class_('Test', [
-                'flags' => Stmt\Class_::MODIFIER_ABSTRACT
-            ]),
-            $node
-        );
-    }
-
-    public function testFinal() {
-        $node = $this->createClassBuilder('Test')
-            ->makeFinal()
-            ->getNode()
-        ;
-
-        $this->assertEquals(
-            new Stmt\Class_('Test', [
-                'flags' => Stmt\Class_::MODIFIER_FINAL
-            ]),
-            $node
-        );
-    }
-
-    public function testStatementOrder() {
-        $method = new Stmt\ClassMethod('testMethod');
-        $property = new Stmt\Property(
-            Stmt\Class_::MODIFIER_PUBLIC,
-            [new Stmt\PropertyProperty('testProperty')]
-        );
-        $const = new Stmt\ClassConst([
-            new Node\Const_('TEST_CONST', new Node\Scalar\String_('ABC'))
-        ]);
-        $use = new Stmt\TraitUse([new Name('SomeTrait')]);
-
-        $node = $this->createClassBuilder('Test')
-            ->addStmt($method)
-            ->addStmt($property)
-            ->addStmts([$const, $use])
-            ->getNode()
-        ;
-
-        $this->assertEquals(
-            new Stmt\Class_('Test', [
-                'stmts' => [$use, $const, $property, $method]
-            ]),
-            $node
-        );
-    }
-
-    public function testDocComment() {
-        $docComment = <<<'DOC'
-/**
- * Test
- */
-DOC;
-        $class = $this->createClassBuilder('Test')
-            ->setDocComment($docComment)
-            ->getNode();
-
-        $this->assertEquals(
-            new Stmt\Class_('Test', [], [
-                'comments' => [
-                    new Comment\Doc($docComment)
-                ]
-            ]),
-            $class
-        );
-
-        $class = $this->createClassBuilder('Test')
-            ->setDocComment(new Comment\Doc($docComment))
-            ->getNode();
-
-        $this->assertEquals(
-            new Stmt\Class_('Test', [], [
-                'comments' => [
-                    new Comment\Doc($docComment)
-                ]
-            ]),
-            $class
-        );
-    }
-
-    public function testInvalidStmtError() {
-        $this->expectException(\LogicException::class);
-        $this->expectExceptionMessage('Unexpected node of type "Stmt_Echo"');
-        $this->createClassBuilder('Test')
-            ->addStmt(new Stmt\Echo_([]))
-        ;
-    }
-
-    public function testInvalidDocComment() {
-        $this->expectException(\LogicException::class);
-        $this->expectExceptionMessage('Doc comment must be a string or an instance of PhpParser\Comment\Doc');
-        $this->createClassBuilder('Test')
-            ->setDocComment(new Comment('Test'));
-    }
-
-    public function testEmptyName() {
-        $this->expectException(\LogicException::class);
-        $this->expectExceptionMessage('Name cannot be empty');
-        $this->createClassBuilder('Test')
-            ->extend('');
-    }
-
-    public function testInvalidName() {
-        $this->expectException(\LogicException::class);
-        $this->expectExceptionMessage('Name must be a string or an instance of Node\Name');
-        $this->createClassBuilder('Test')
-            ->extend(['Foo']);
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/Builder/FunctionTest.php b/vendor/nikic/php-parser/test/PhpParser/Builder/FunctionTest.php
deleted file mode 100644
index c17045b83f39c399a99c971a343727fc8a3449d1..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/PhpParser/Builder/FunctionTest.php
+++ /dev/null
@@ -1,114 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser\Builder;
-
-use PhpParser\Comment;
-use PhpParser\Node;
-use PhpParser\Node\Expr\Print_;
-use PhpParser\Node\Expr\Variable;
-use PhpParser\Node\Scalar\String_;
-use PhpParser\Node\Stmt;
-
-class FunctionTest extends \PHPUnit\Framework\TestCase
-{
-    public function createFunctionBuilder($name) {
-        return new Function_($name);
-    }
-
-    public function testReturnByRef() {
-        $node = $this->createFunctionBuilder('test')
-            ->makeReturnByRef()
-            ->getNode()
-        ;
-
-        $this->assertEquals(
-            new Stmt\Function_('test', [
-                'byRef' => true
-            ]),
-            $node
-        );
-    }
-
-    public function testParams() {
-        $param1 = new Node\Param(new Variable('test1'));
-        $param2 = new Node\Param(new Variable('test2'));
-        $param3 = new Node\Param(new Variable('test3'));
-
-        $node = $this->createFunctionBuilder('test')
-            ->addParam($param1)
-            ->addParams([$param2, $param3])
-            ->getNode()
-        ;
-
-        $this->assertEquals(
-            new Stmt\Function_('test', [
-                'params' => [$param1, $param2, $param3]
-            ]),
-            $node
-        );
-    }
-
-    public function testStmts() {
-        $stmt1 = new Print_(new String_('test1'));
-        $stmt2 = new Print_(new String_('test2'));
-        $stmt3 = new Print_(new String_('test3'));
-
-        $node = $this->createFunctionBuilder('test')
-            ->addStmt($stmt1)
-            ->addStmts([$stmt2, $stmt3])
-            ->getNode()
-        ;
-
-        $this->assertEquals(
-            new Stmt\Function_('test', [
-                'stmts' => [
-                    new Stmt\Expression($stmt1),
-                    new Stmt\Expression($stmt2),
-                    new Stmt\Expression($stmt3),
-                ]
-            ]),
-            $node
-        );
-    }
-
-    public function testDocComment() {
-        $node = $this->createFunctionBuilder('test')
-            ->setDocComment('/** Test */')
-            ->getNode();
-
-        $this->assertEquals(new Stmt\Function_('test', [], [
-            'comments' => [new Comment\Doc('/** Test */')]
-        ]), $node);
-    }
-
-    public function testReturnType() {
-        $node = $this->createFunctionBuilder('test')
-            ->setReturnType('void')
-            ->getNode();
-
-        $this->assertEquals(new Stmt\Function_('test', [
-            'returnType' => 'void'
-        ], []), $node);
-    }
-
-    public function testInvalidNullableVoidType() {
-        $this->expectException(\LogicException::class);
-        $this->expectExceptionMessage('void type cannot be nullable');
-        $this->createFunctionBuilder('test')->setReturnType('?void');
-    }
-
-    public function testInvalidParamError() {
-        $this->expectException(\LogicException::class);
-        $this->expectExceptionMessage('Expected parameter node, got "Name"');
-        $this->createFunctionBuilder('test')
-            ->addParam(new Node\Name('foo'))
-        ;
-    }
-
-    public function testAddNonStmt() {
-        $this->expectException(\LogicException::class);
-        $this->expectExceptionMessage('Expected statement or expression node');
-        $this->createFunctionBuilder('test')
-            ->addStmt(new Node\Name('Test'));
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/Builder/InterfaceTest.php b/vendor/nikic/php-parser/test/PhpParser/Builder/InterfaceTest.php
deleted file mode 100644
index 7f7f56a2700f4cce8042c03e2638dda8cecc33ee..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/PhpParser/Builder/InterfaceTest.php
+++ /dev/null
@@ -1,102 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser\Builder;
-
-use PhpParser\Comment;
-use PhpParser\Node;
-use PhpParser\Node\Scalar\DNumber;
-use PhpParser\Node\Stmt;
-
-class InterfaceTest extends \PHPUnit\Framework\TestCase
-{
-    /** @var Interface_ */
-    protected $builder;
-
-    protected function setUp() {
-        $this->builder = new Interface_('Contract');
-    }
-
-    private function dump($node) {
-        $pp = new \PhpParser\PrettyPrinter\Standard;
-        return $pp->prettyPrint([$node]);
-    }
-
-    public function testEmpty() {
-        $contract = $this->builder->getNode();
-        $this->assertInstanceOf(Stmt\Interface_::class, $contract);
-        $this->assertEquals(new Node\Identifier('Contract'), $contract->name);
-    }
-
-    public function testExtending() {
-        $contract = $this->builder->extend('Space\Root1', 'Root2')->getNode();
-        $this->assertEquals(
-            new Stmt\Interface_('Contract', [
-                'extends' => [
-                    new Node\Name('Space\Root1'),
-                    new Node\Name('Root2')
-                ],
-            ]), $contract
-        );
-    }
-
-    public function testAddMethod() {
-        $method = new Stmt\ClassMethod('doSomething');
-        $contract = $this->builder->addStmt($method)->getNode();
-        $this->assertSame([$method], $contract->stmts);
-    }
-
-    public function testAddConst() {
-        $const = new Stmt\ClassConst([
-            new Node\Const_('SPEED_OF_LIGHT', new DNumber(299792458.0))
-        ]);
-        $contract = $this->builder->addStmt($const)->getNode();
-        $this->assertSame(299792458.0, $contract->stmts[0]->consts[0]->value->value);
-    }
-
-    public function testOrder() {
-        $const = new Stmt\ClassConst([
-            new Node\Const_('SPEED_OF_LIGHT', new DNumber(299792458))
-        ]);
-        $method = new Stmt\ClassMethod('doSomething');
-        $contract = $this->builder
-            ->addStmt($method)
-            ->addStmt($const)
-            ->getNode()
-        ;
-
-        $this->assertInstanceOf(Stmt\ClassConst::class, $contract->stmts[0]);
-        $this->assertInstanceOf(Stmt\ClassMethod::class, $contract->stmts[1]);
-    }
-
-    public function testDocComment() {
-        $node = $this->builder
-            ->setDocComment('/** Test */')
-            ->getNode();
-
-        $this->assertEquals(new Stmt\Interface_('Contract', [], [
-            'comments' => [new Comment\Doc('/** Test */')]
-        ]), $node);
-    }
-
-    public function testInvalidStmtError() {
-        $this->expectException(\LogicException::class);
-        $this->expectExceptionMessage('Unexpected node of type "Stmt_PropertyProperty"');
-        $this->builder->addStmt(new Stmt\PropertyProperty('invalid'));
-    }
-
-    public function testFullFunctional() {
-        $const = new Stmt\ClassConst([
-            new Node\Const_('SPEED_OF_LIGHT', new DNumber(299792458))
-        ]);
-        $method = new Stmt\ClassMethod('doSomething');
-        $contract = $this->builder
-            ->addStmt($method)
-            ->addStmt($const)
-            ->getNode()
-        ;
-
-        eval($this->dump($contract));
-
-        $this->assertTrue(interface_exists('Contract', false));
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/Builder/MethodTest.php b/vendor/nikic/php-parser/test/PhpParser/Builder/MethodTest.php
deleted file mode 100644
index 529f0354973e72ecb8e2ad27dcf4a3484a267503..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/PhpParser/Builder/MethodTest.php
+++ /dev/null
@@ -1,162 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser\Builder;
-
-use PhpParser\Comment;
-use PhpParser\Node;
-use PhpParser\Node\Expr\Print_;
-use PhpParser\Node\Expr\Variable;
-use PhpParser\Node\Scalar\String_;
-use PhpParser\Node\Stmt;
-
-class MethodTest extends \PHPUnit\Framework\TestCase
-{
-    public function createMethodBuilder($name) {
-        return new Method($name);
-    }
-
-    public function testModifiers() {
-        $node = $this->createMethodBuilder('test')
-            ->makePublic()
-            ->makeAbstract()
-            ->makeStatic()
-            ->getNode()
-        ;
-
-        $this->assertEquals(
-            new Stmt\ClassMethod('test', [
-                'flags' => Stmt\Class_::MODIFIER_PUBLIC
-                         | Stmt\Class_::MODIFIER_ABSTRACT
-                         | Stmt\Class_::MODIFIER_STATIC,
-                'stmts' => null,
-            ]),
-            $node
-        );
-
-        $node = $this->createMethodBuilder('test')
-            ->makeProtected()
-            ->makeFinal()
-            ->getNode()
-        ;
-
-        $this->assertEquals(
-            new Stmt\ClassMethod('test', [
-                'flags' => Stmt\Class_::MODIFIER_PROTECTED
-                         | Stmt\Class_::MODIFIER_FINAL
-            ]),
-            $node
-        );
-
-        $node = $this->createMethodBuilder('test')
-            ->makePrivate()
-            ->getNode()
-        ;
-
-        $this->assertEquals(
-            new Stmt\ClassMethod('test', [
-                'type' => Stmt\Class_::MODIFIER_PRIVATE
-            ]),
-            $node
-        );
-    }
-
-    public function testReturnByRef() {
-        $node = $this->createMethodBuilder('test')
-            ->makeReturnByRef()
-            ->getNode()
-        ;
-
-        $this->assertEquals(
-            new Stmt\ClassMethod('test', [
-                'byRef' => true
-            ]),
-            $node
-        );
-    }
-
-    public function testParams() {
-        $param1 = new Node\Param(new Variable('test1'));
-        $param2 = new Node\Param(new Variable('test2'));
-        $param3 = new Node\Param(new Variable('test3'));
-
-        $node = $this->createMethodBuilder('test')
-            ->addParam($param1)
-            ->addParams([$param2, $param3])
-            ->getNode()
-        ;
-
-        $this->assertEquals(
-            new Stmt\ClassMethod('test', [
-                'params' => [$param1, $param2, $param3]
-            ]),
-            $node
-        );
-    }
-
-    public function testStmts() {
-        $stmt1 = new Print_(new String_('test1'));
-        $stmt2 = new Print_(new String_('test2'));
-        $stmt3 = new Print_(new String_('test3'));
-
-        $node = $this->createMethodBuilder('test')
-            ->addStmt($stmt1)
-            ->addStmts([$stmt2, $stmt3])
-            ->getNode()
-        ;
-
-        $this->assertEquals(
-            new Stmt\ClassMethod('test', [
-                'stmts' => [
-                    new Stmt\Expression($stmt1),
-                    new Stmt\Expression($stmt2),
-                    new Stmt\Expression($stmt3),
-                ]
-            ]),
-            $node
-        );
-    }
-    public function testDocComment() {
-        $node = $this->createMethodBuilder('test')
-            ->setDocComment('/** Test */')
-            ->getNode();
-
-        $this->assertEquals(new Stmt\ClassMethod('test', [], [
-            'comments' => [new Comment\Doc('/** Test */')]
-        ]), $node);
-    }
-
-    public function testReturnType() {
-        $node = $this->createMethodBuilder('test')
-            ->setReturnType('bool')
-            ->getNode();
-        $this->assertEquals(new Stmt\ClassMethod('test', [
-            'returnType' => 'bool'
-        ], []), $node);
-    }
-
-    public function testAddStmtToAbstractMethodError() {
-        $this->expectException(\LogicException::class);
-        $this->expectExceptionMessage('Cannot add statements to an abstract method');
-        $this->createMethodBuilder('test')
-            ->makeAbstract()
-            ->addStmt(new Print_(new String_('test')))
-        ;
-    }
-
-    public function testMakeMethodWithStmtsAbstractError() {
-        $this->expectException(\LogicException::class);
-        $this->expectExceptionMessage('Cannot make method with statements abstract');
-        $this->createMethodBuilder('test')
-            ->addStmt(new Print_(new String_('test')))
-            ->makeAbstract()
-        ;
-    }
-
-    public function testInvalidParamError() {
-        $this->expectException(\LogicException::class);
-        $this->expectExceptionMessage('Expected parameter node, got "Name"');
-        $this->createMethodBuilder('test')
-            ->addParam(new Node\Name('foo'))
-        ;
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/Builder/NamespaceTest.php b/vendor/nikic/php-parser/test/PhpParser/Builder/NamespaceTest.php
deleted file mode 100644
index 689001bcbe4bc3f28af0718fcf7573c0e140ade6..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/PhpParser/Builder/NamespaceTest.php
+++ /dev/null
@@ -1,46 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser\Builder;
-
-use PhpParser\Comment\Doc;
-use PhpParser\Node;
-use PhpParser\Node\Stmt;
-
-class NamespaceTest extends \PHPUnit\Framework\TestCase
-{
-    protected function createNamespaceBuilder($fqn) {
-        return new Namespace_($fqn);
-    }
-
-    public function testCreation() {
-        $stmt1 = new Stmt\Class_('SomeClass');
-        $stmt2 = new Stmt\Interface_('SomeInterface');
-        $stmt3 = new Stmt\Function_('someFunction');
-        $docComment = new Doc('/** Test */');
-        $expected = new Stmt\Namespace_(
-            new Node\Name('Name\Space'),
-            [$stmt1, $stmt2, $stmt3],
-            ['comments' => [$docComment]]
-        );
-
-        $node = $this->createNamespaceBuilder('Name\Space')
-            ->addStmt($stmt1)
-            ->addStmts([$stmt2, $stmt3])
-            ->setDocComment($docComment)
-            ->getNode()
-        ;
-        $this->assertEquals($expected, $node);
-
-        $node = $this->createNamespaceBuilder(new Node\Name(['Name', 'Space']))
-            ->setDocComment($docComment)
-            ->addStmts([$stmt1, $stmt2])
-            ->addStmt($stmt3)
-            ->getNode()
-        ;
-        $this->assertEquals($expected, $node);
-
-        $node = $this->createNamespaceBuilder(null)->getNode();
-        $this->assertNull($node->name);
-        $this->assertEmpty($node->stmts);
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/Builder/ParamTest.php b/vendor/nikic/php-parser/test/PhpParser/Builder/ParamTest.php
deleted file mode 100644
index c9cbfcac0fdf7cd8bf3834a0e3d041fb10dd16df..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/PhpParser/Builder/ParamTest.php
+++ /dev/null
@@ -1,166 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser\Builder;
-
-use PhpParser\Node;
-use PhpParser\Node\Expr;
-use PhpParser\Node\Scalar;
-
-class ParamTest extends \PHPUnit\Framework\TestCase
-{
-    public function createParamBuilder($name) {
-        return new Param($name);
-    }
-
-    /**
-     * @dataProvider provideTestDefaultValues
-     */
-    public function testDefaultValues($value, $expectedValueNode) {
-        $node = $this->createParamBuilder('test')
-            ->setDefault($value)
-            ->getNode()
-        ;
-
-        $this->assertEquals($expectedValueNode, $node->default);
-    }
-
-    public function provideTestDefaultValues() {
-        return [
-            [
-                null,
-                new Expr\ConstFetch(new Node\Name('null'))
-            ],
-            [
-                true,
-                new Expr\ConstFetch(new Node\Name('true'))
-            ],
-            [
-                false,
-                new Expr\ConstFetch(new Node\Name('false'))
-            ],
-            [
-                31415,
-                new Scalar\LNumber(31415)
-            ],
-            [
-                3.1415,
-                new Scalar\DNumber(3.1415)
-            ],
-            [
-                'Hallo World',
-                new Scalar\String_('Hallo World')
-            ],
-            [
-                [1, 2, 3],
-                new Expr\Array_([
-                    new Expr\ArrayItem(new Scalar\LNumber(1)),
-                    new Expr\ArrayItem(new Scalar\LNumber(2)),
-                    new Expr\ArrayItem(new Scalar\LNumber(3)),
-                ])
-            ],
-            [
-                ['foo' => 'bar', 'bar' => 'foo'],
-                new Expr\Array_([
-                    new Expr\ArrayItem(
-                        new Scalar\String_('bar'),
-                        new Scalar\String_('foo')
-                    ),
-                    new Expr\ArrayItem(
-                        new Scalar\String_('foo'),
-                        new Scalar\String_('bar')
-                    ),
-                ])
-            ],
-            [
-                new Scalar\MagicConst\Dir,
-                new Scalar\MagicConst\Dir
-            ]
-        ];
-    }
-
-    /**
-     * @dataProvider provideTestTypes
-     */
-    public function testTypes($typeHint, $expectedType) {
-        $node = $this->createParamBuilder('test')
-            ->setTypeHint($typeHint)
-            ->getNode()
-        ;
-        $type = $node->type;
-
-        /* Manually implement comparison to avoid __toString stupidity */
-        if ($expectedType instanceof Node\NullableType) {
-            $this->assertInstanceOf(get_class($expectedType), $type);
-            $expectedType = $expectedType->type;
-            $type = $type->type;
-        }
-
-        $this->assertInstanceOf(get_class($expectedType), $type);
-        $this->assertEquals($expectedType, $type);
-    }
-
-    public function provideTestTypes() {
-        return [
-            ['array', new Node\Identifier('array')],
-            ['callable', new Node\Identifier('callable')],
-            ['bool', new Node\Identifier('bool')],
-            ['int', new Node\Identifier('int')],
-            ['float', new Node\Identifier('float')],
-            ['string', new Node\Identifier('string')],
-            ['iterable', new Node\Identifier('iterable')],
-            ['object', new Node\Identifier('object')],
-            ['Array', new Node\Identifier('array')],
-            ['CALLABLE', new Node\Identifier('callable')],
-            ['Some\Class', new Node\Name('Some\Class')],
-            ['\Foo', new Node\Name\FullyQualified('Foo')],
-            ['self', new Node\Name('self')],
-            ['?array', new Node\NullableType(new Node\Identifier('array'))],
-            ['?Some\Class', new Node\NullableType(new Node\Name('Some\Class'))],
-            [new Node\Name('Some\Class'), new Node\Name('Some\Class')],
-            [
-                new Node\NullableType(new Node\Identifier('int')),
-                new Node\NullableType(new Node\Identifier('int'))
-            ],
-            [
-                new Node\NullableType(new Node\Name('Some\Class')),
-                new Node\NullableType(new Node\Name('Some\Class'))
-            ],
-        ];
-    }
-
-    public function testVoidTypeError() {
-        $this->expectException(\LogicException::class);
-        $this->expectExceptionMessage('Parameter type cannot be void');
-        $this->createParamBuilder('test')->setType('void');
-    }
-
-    public function testInvalidTypeError() {
-        $this->expectException(\LogicException::class);
-        $this->expectExceptionMessage('Type must be a string, or an instance of Name, Identifier or NullableType');
-        $this->createParamBuilder('test')->setType(new \stdClass);
-    }
-
-    public function testByRef() {
-        $node = $this->createParamBuilder('test')
-            ->makeByRef()
-            ->getNode()
-        ;
-
-        $this->assertEquals(
-            new Node\Param(new Expr\Variable('test'), null, null, true),
-            $node
-        );
-    }
-
-    public function testVariadic() {
-        $node = $this->createParamBuilder('test')
-            ->makeVariadic()
-            ->getNode()
-        ;
-
-        $this->assertEquals(
-            new Node\Param(new Expr\Variable('test'), null, null, false, true),
-            $node
-        );
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/Builder/PropertyTest.php b/vendor/nikic/php-parser/test/PhpParser/Builder/PropertyTest.php
deleted file mode 100644
index a15cd43c769b9627e93f4f5d2f1ea666d300c2fc..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/PhpParser/Builder/PropertyTest.php
+++ /dev/null
@@ -1,147 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser\Builder;
-
-use PhpParser\Comment;
-use PhpParser\Node\Expr;
-use PhpParser\Node\Name;
-use PhpParser\Node\Scalar;
-use PhpParser\Node\Stmt;
-
-class PropertyTest extends \PHPUnit\Framework\TestCase
-{
-    public function createPropertyBuilder($name) {
-        return new Property($name);
-    }
-
-    public function testModifiers() {
-        $node = $this->createPropertyBuilder('test')
-            ->makePrivate()
-            ->makeStatic()
-            ->getNode()
-        ;
-
-        $this->assertEquals(
-            new Stmt\Property(
-                Stmt\Class_::MODIFIER_PRIVATE
-              | Stmt\Class_::MODIFIER_STATIC,
-                [
-                    new Stmt\PropertyProperty('test')
-                ]
-            ),
-            $node
-        );
-
-        $node = $this->createPropertyBuilder('test')
-            ->makeProtected()
-            ->getNode()
-        ;
-
-        $this->assertEquals(
-            new Stmt\Property(
-                Stmt\Class_::MODIFIER_PROTECTED,
-                [
-                    new Stmt\PropertyProperty('test')
-                ]
-            ),
-            $node
-        );
-
-        $node = $this->createPropertyBuilder('test')
-            ->makePublic()
-            ->getNode()
-        ;
-
-        $this->assertEquals(
-            new Stmt\Property(
-                Stmt\Class_::MODIFIER_PUBLIC,
-                [
-                    new Stmt\PropertyProperty('test')
-                ]
-            ),
-            $node
-        );
-    }
-
-    public function testDocComment() {
-        $node = $this->createPropertyBuilder('test')
-            ->setDocComment('/** Test */')
-            ->getNode();
-
-        $this->assertEquals(new Stmt\Property(
-            Stmt\Class_::MODIFIER_PUBLIC,
-            [
-                new Stmt\PropertyProperty('test')
-            ],
-            [
-                'comments' => [new Comment\Doc('/** Test */')]
-            ]
-        ), $node);
-    }
-
-    /**
-     * @dataProvider provideTestDefaultValues
-     */
-    public function testDefaultValues($value, $expectedValueNode) {
-        $node = $this->createPropertyBuilder('test')
-            ->setDefault($value)
-            ->getNode()
-        ;
-
-        $this->assertEquals($expectedValueNode, $node->props[0]->default);
-    }
-
-    public function provideTestDefaultValues() {
-        return [
-            [
-                null,
-                new Expr\ConstFetch(new Name('null'))
-            ],
-            [
-                true,
-                new Expr\ConstFetch(new Name('true'))
-            ],
-            [
-                false,
-                new Expr\ConstFetch(new Name('false'))
-            ],
-            [
-                31415,
-                new Scalar\LNumber(31415)
-            ],
-            [
-                3.1415,
-                new Scalar\DNumber(3.1415)
-            ],
-            [
-                'Hallo World',
-                new Scalar\String_('Hallo World')
-            ],
-            [
-                [1, 2, 3],
-                new Expr\Array_([
-                    new Expr\ArrayItem(new Scalar\LNumber(1)),
-                    new Expr\ArrayItem(new Scalar\LNumber(2)),
-                    new Expr\ArrayItem(new Scalar\LNumber(3)),
-                ])
-            ],
-            [
-                ['foo' => 'bar', 'bar' => 'foo'],
-                new Expr\Array_([
-                    new Expr\ArrayItem(
-                        new Scalar\String_('bar'),
-                        new Scalar\String_('foo')
-                    ),
-                    new Expr\ArrayItem(
-                        new Scalar\String_('foo'),
-                        new Scalar\String_('bar')
-                    ),
-                ])
-            ],
-            [
-                new Scalar\MagicConst\Dir,
-                new Scalar\MagicConst\Dir
-            ]
-        ];
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/Builder/TraitTest.php b/vendor/nikic/php-parser/test/PhpParser/Builder/TraitTest.php
deleted file mode 100644
index 4d99ef8870fe597fc6f299d98713153366c8f62b..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/PhpParser/Builder/TraitTest.php
+++ /dev/null
@@ -1,46 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser\Builder;
-
-use PhpParser\Comment;
-use PhpParser\Node\Name;
-use PhpParser\Node\Stmt;
-
-class TraitTest extends \PHPUnit\Framework\TestCase
-{
-    protected function createTraitBuilder($class) {
-        return new Trait_($class);
-    }
-
-    public function testStmtAddition() {
-        $method1 = new Stmt\ClassMethod('test1');
-        $method2 = new Stmt\ClassMethod('test2');
-        $method3 = new Stmt\ClassMethod('test3');
-        $prop = new Stmt\Property(Stmt\Class_::MODIFIER_PUBLIC, [
-            new Stmt\PropertyProperty('test')
-        ]);
-        $use = new Stmt\TraitUse([new Name('OtherTrait')]);
-        $trait = $this->createTraitBuilder('TestTrait')
-            ->setDocComment('/** Nice trait */')
-            ->addStmt($method1)
-            ->addStmts([$method2, $method3])
-            ->addStmt($prop)
-            ->addStmt($use)
-            ->getNode();
-        $this->assertEquals(new Stmt\Trait_('TestTrait', [
-            'stmts' => [$use, $prop, $method1, $method2, $method3]
-        ], [
-            'comments' => [
-                new Comment\Doc('/** Nice trait */')
-            ]
-        ]), $trait);
-    }
-
-    public function testInvalidStmtError() {
-        $this->expectException(\LogicException::class);
-        $this->expectExceptionMessage('Unexpected node of type "Stmt_Echo"');
-        $this->createTraitBuilder('Test')
-            ->addStmt(new Stmt\Echo_([]))
-        ;
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/Builder/TraitUseAdaptationTest.php b/vendor/nikic/php-parser/test/PhpParser/Builder/TraitUseAdaptationTest.php
deleted file mode 100644
index 4961ccfac971c547eb93d4ab57d3c46efa2a9c60..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/PhpParser/Builder/TraitUseAdaptationTest.php
+++ /dev/null
@@ -1,106 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser\Builder;
-
-use PhpParser\Node\Name;
-use PhpParser\Node\Stmt;
-use PhpParser\Node\Stmt\Class_;
-
-class TraitUseAdaptationTest extends \PHPUnit\Framework\TestCase
-{
-    protected function createTraitUseAdaptationBuilder($trait, $method) {
-        return new TraitUseAdaptation($trait, $method);
-    }
-
-    public function testAsMake() {
-        $builder = $this->createTraitUseAdaptationBuilder(null, 'foo');
-
-        $this->assertEquals(
-            new Stmt\TraitUseAdaptation\Alias(null, 'foo', null, 'bar'),
-            (clone $builder)->as('bar')->getNode()
-        );
-
-        $this->assertEquals(
-            new Stmt\TraitUseAdaptation\Alias(null, 'foo', Class_::MODIFIER_PUBLIC, null),
-            (clone $builder)->makePublic()->getNode()
-        );
-
-        $this->assertEquals(
-            new Stmt\TraitUseAdaptation\Alias(null, 'foo', Class_::MODIFIER_PROTECTED, null),
-            (clone $builder)->makeProtected()->getNode()
-        );
-
-        $this->assertEquals(
-            new Stmt\TraitUseAdaptation\Alias(null, 'foo', Class_::MODIFIER_PRIVATE, null),
-            (clone $builder)->makePrivate()->getNode()
-        );
-    }
-
-    public function testInsteadof() {
-        $node = $this->createTraitUseAdaptationBuilder('SomeTrait', 'foo')
-            ->insteadof('AnotherTrait')
-            ->getNode()
-        ;
-
-        $this->assertEquals(
-            new Stmt\TraitUseAdaptation\Precedence(
-                new Name('SomeTrait'),
-                'foo',
-                [new Name('AnotherTrait')]
-            ),
-            $node
-        );
-    }
-
-    public function testAsOnNotAlias() {
-        $this->expectException(\LogicException::class);
-        $this->expectExceptionMessage('Cannot set alias for not alias adaptation buider');
-        $this->createTraitUseAdaptationBuilder('Test', 'foo')
-            ->insteadof('AnotherTrait')
-            ->as('bar')
-        ;
-    }
-
-    public function testInsteadofOnNotPrecedence() {
-        $this->expectException(\LogicException::class);
-        $this->expectExceptionMessage('Cannot add overwritten traits for not precedence adaptation buider');
-        $this->createTraitUseAdaptationBuilder('Test', 'foo')
-            ->as('bar')
-            ->insteadof('AnotherTrait')
-        ;
-    }
-
-    public function testInsteadofWithoutTrait() {
-        $this->expectException(\LogicException::class);
-        $this->expectExceptionMessage('Precedence adaptation must have trait');
-        $this->createTraitUseAdaptationBuilder(null, 'foo')
-            ->insteadof('AnotherTrait')
-        ;
-    }
-
-    public function testMakeOnNotAlias() {
-        $this->expectException(\LogicException::class);
-        $this->expectExceptionMessage('Cannot set access modifier for not alias adaptation buider');
-        $this->createTraitUseAdaptationBuilder('Test', 'foo')
-            ->insteadof('AnotherTrait')
-            ->makePublic()
-        ;
-    }
-
-    public function testMultipleMake() {
-        $this->expectException(\LogicException::class);
-        $this->expectExceptionMessage('Multiple access type modifiers are not allowed');
-        $this->createTraitUseAdaptationBuilder(null, 'foo')
-            ->makePrivate()
-            ->makePublic()
-        ;
-    }
-
-    public function testUndefinedType() {
-        $this->expectException(\LogicException::class);
-        $this->expectExceptionMessage('Type of adaptation is not defined');
-        $this->createTraitUseAdaptationBuilder(null, 'foo')
-            ->getNode()
-        ;
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/Builder/TraitUseTest.php b/vendor/nikic/php-parser/test/PhpParser/Builder/TraitUseTest.php
deleted file mode 100644
index 8d20dfbd7c91bd5babb8ed82b0bb44bcab242393..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/PhpParser/Builder/TraitUseTest.php
+++ /dev/null
@@ -1,52 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser\Builder;
-
-use PhpParser\Node\Name;
-use PhpParser\Node\Stmt;
-
-class TraitUseTest extends \PHPUnit\Framework\TestCase
-{
-    protected function createTraitUseBuilder(...$traits) {
-        return new TraitUse(...$traits);
-    }
-
-    public function testAnd() {
-        $node = $this->createTraitUseBuilder('SomeTrait')
-            ->and('AnotherTrait')
-            ->getNode()
-        ;
-
-        $this->assertEquals(
-            new Stmt\TraitUse([
-                new Name('SomeTrait'),
-                new Name('AnotherTrait')
-            ]),
-            $node
-        );
-    }
-
-    public function testWith() {
-        $node = $this->createTraitUseBuilder('SomeTrait')
-            ->with(new Stmt\TraitUseAdaptation\Alias(null, 'foo', null, 'bar'))
-            ->with((new TraitUseAdaptation(null, 'test'))->as('baz'))
-            ->getNode()
-        ;
-
-        $this->assertEquals(
-            new Stmt\TraitUse([new Name('SomeTrait')], [
-                new Stmt\TraitUseAdaptation\Alias(null, 'foo', null, 'bar'),
-                new Stmt\TraitUseAdaptation\Alias(null, 'test', null, 'baz')
-            ]),
-            $node
-        );
-    }
-
-    public function testInvalidAdaptationNode() {
-        $this->expectException(\LogicException::class);
-        $this->expectExceptionMessage('Adaptation must have type TraitUseAdaptation');
-        $this->createTraitUseBuilder('Test')
-            ->with(new Stmt\Echo_([]))
-        ;
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/Builder/UseTest.php b/vendor/nikic/php-parser/test/PhpParser/Builder/UseTest.php
deleted file mode 100644
index f17da59b425b35c6e55ba8a560b71dc28615e882..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/PhpParser/Builder/UseTest.php
+++ /dev/null
@@ -1,36 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser\Builder;
-
-use PhpParser\Builder;
-use PhpParser\Node\Name;
-use PhpParser\Node\Stmt;
-
-class UseTest extends \PHPUnit\Framework\TestCase
-{
-    protected function createUseBuilder($name, $type = Stmt\Use_::TYPE_NORMAL) {
-        return new Builder\Use_($name, $type);
-    }
-
-    public function testCreation() {
-        $node = $this->createUseBuilder('Foo\Bar')->getNode();
-        $this->assertEquals(new Stmt\Use_([
-            new Stmt\UseUse(new Name('Foo\Bar'), null)
-        ]), $node);
-
-        $node = $this->createUseBuilder(new Name('Foo\Bar'))->as('XYZ')->getNode();
-        $this->assertEquals(new Stmt\Use_([
-            new Stmt\UseUse(new Name('Foo\Bar'), 'XYZ')
-        ]), $node);
-
-        $node = $this->createUseBuilder('foo\bar', Stmt\Use_::TYPE_FUNCTION)->as('foo')->getNode();
-        $this->assertEquals(new Stmt\Use_([
-            new Stmt\UseUse(new Name('foo\bar'), 'foo')
-        ], Stmt\Use_::TYPE_FUNCTION), $node);
-
-        $node = $this->createUseBuilder('foo\BAR', Stmt\Use_::TYPE_CONSTANT)->as('FOO')->getNode();
-        $this->assertEquals(new Stmt\Use_([
-            new Stmt\UseUse(new Name('foo\BAR'), 'FOO')
-        ], Stmt\Use_::TYPE_CONSTANT), $node);
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/BuilderFactoryTest.php b/vendor/nikic/php-parser/test/PhpParser/BuilderFactoryTest.php
deleted file mode 100644
index a80e1c58144ec21604e9c18d113ba3b832dfb048..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/PhpParser/BuilderFactoryTest.php
+++ /dev/null
@@ -1,327 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser;
-
-use PhpParser\Node\Arg;
-use PhpParser\Node\Expr;
-use PhpParser\Node\Expr\BinaryOp\Concat;
-use PhpParser\Node\Identifier;
-use PhpParser\Node\Name;
-use PhpParser\Node\Scalar\LNumber;
-use PhpParser\Node\Scalar\String_;
-
-class BuilderFactoryTest extends \PHPUnit\Framework\TestCase
-{
-    /**
-     * @dataProvider provideTestFactory
-     */
-    public function testFactory($methodName, $className) {
-        $factory = new BuilderFactory;
-        $this->assertInstanceOf($className, $factory->$methodName('test'));
-    }
-
-    public function provideTestFactory() {
-        return [
-            ['namespace',   Builder\Namespace_::class],
-            ['class',       Builder\Class_::class],
-            ['interface',   Builder\Interface_::class],
-            ['trait',       Builder\Trait_::class],
-            ['method',      Builder\Method::class],
-            ['function',    Builder\Function_::class],
-            ['property',    Builder\Property::class],
-            ['param',       Builder\Param::class],
-            ['use',         Builder\Use_::class],
-            ['useFunction', Builder\Use_::class],
-            ['useConst',    Builder\Use_::class],
-        ];
-    }
-
-    public function testVal() {
-        // This method is a wrapper around BuilderHelpers::normalizeValue(),
-        // which is already tested elsewhere
-        $factory = new BuilderFactory();
-        $this->assertEquals(
-            new String_("foo"),
-            $factory->val("foo")
-        );
-    }
-
-    public function testConcat() {
-        $factory = new BuilderFactory();
-        $varA = new Expr\Variable('a');
-        $varB = new Expr\Variable('b');
-        $varC = new Expr\Variable('c');
-
-        $this->assertEquals(
-            new Concat($varA, $varB),
-            $factory->concat($varA, $varB)
-        );
-        $this->assertEquals(
-            new Concat(new Concat($varA, $varB), $varC),
-            $factory->concat($varA, $varB, $varC)
-        );
-        $this->assertEquals(
-            new Concat(new Concat(new String_("a"), $varB), new String_("c")),
-            $factory->concat("a", $varB, "c")
-        );
-    }
-
-    public function testConcatOneError() {
-        $this->expectException(\LogicException::class);
-        $this->expectExceptionMessage('Expected at least two expressions');
-        (new BuilderFactory())->concat("a");
-    }
-
-    public function testConcatInvalidExpr() {
-        $this->expectException(\LogicException::class);
-        $this->expectExceptionMessage('Expected string or Expr');
-        (new BuilderFactory())->concat("a", 42);
-    }
-
-    public function testArgs() {
-        $factory = new BuilderFactory();
-        $unpack = new Arg(new Expr\Variable('c'), false, true);
-        $this->assertEquals(
-            [
-                new Arg(new Expr\Variable('a')),
-                new Arg(new String_('b')),
-                $unpack
-            ],
-            $factory->args([new Expr\Variable('a'), 'b', $unpack])
-        );
-    }
-
-    public function testCalls() {
-        $factory = new BuilderFactory();
-
-        // Simple function call
-        $this->assertEquals(
-            new Expr\FuncCall(
-                new Name('var_dump'),
-                [new Arg(new String_('str'))]
-            ),
-            $factory->funcCall('var_dump', ['str'])
-        );
-        // Dynamic function call
-        $this->assertEquals(
-            new Expr\FuncCall(new Expr\Variable('fn')),
-            $factory->funcCall(new Expr\Variable('fn'))
-        );
-
-        // Simple method call
-        $this->assertEquals(
-            new Expr\MethodCall(
-                new Expr\Variable('obj'),
-                new Identifier('method'),
-                [new Arg(new LNumber(42))]
-            ),
-            $factory->methodCall(new Expr\Variable('obj'), 'method', [42])
-        );
-        // Explicitly pass Identifier node
-        $this->assertEquals(
-            new Expr\MethodCall(
-                new Expr\Variable('obj'),
-                new Identifier('method')
-            ),
-            $factory->methodCall(new Expr\Variable('obj'), new Identifier('method'))
-        );
-        // Dynamic method call
-        $this->assertEquals(
-            new Expr\MethodCall(
-                new Expr\Variable('obj'),
-                new Expr\Variable('method')
-            ),
-            $factory->methodCall(new Expr\Variable('obj'), new Expr\Variable('method'))
-        );
-
-        // Simple static method call
-        $this->assertEquals(
-            new Expr\StaticCall(
-                new Name\FullyQualified('Foo'),
-                new Identifier('bar'),
-                [new Arg(new Expr\Variable('baz'))]
-            ),
-            $factory->staticCall('\Foo', 'bar', [new Expr\Variable('baz')])
-        );
-        // Dynamic static method call
-        $this->assertEquals(
-            new Expr\StaticCall(
-                new Expr\Variable('foo'),
-                new Expr\Variable('bar')
-            ),
-            $factory->staticCall(new Expr\Variable('foo'), new Expr\Variable('bar'))
-        );
-
-        // Simple new call
-        $this->assertEquals(
-            new Expr\New_(new Name\FullyQualified('stdClass')),
-            $factory->new('\stdClass')
-        );
-        // Dynamic new call
-        $this->assertEquals(
-            new Expr\New_(
-                new Expr\Variable('foo'),
-                [new Arg(new String_('bar'))]
-            ),
-            $factory->new(new Expr\Variable('foo'), ['bar'])
-        );
-    }
-
-    public function testConstFetches() {
-        $factory = new BuilderFactory();
-        $this->assertEquals(
-            new Expr\ConstFetch(new Name('FOO')),
-            $factory->constFetch('FOO')
-        );
-        $this->assertEquals(
-            new Expr\ClassConstFetch(new Name('Foo'), new Identifier('BAR')),
-            $factory->classConstFetch('Foo', 'BAR')
-        );
-        $this->assertEquals(
-            new Expr\ClassConstFetch(new Expr\Variable('foo'), new Identifier('BAR')),
-            $factory->classConstFetch(new Expr\Variable('foo'), 'BAR')
-        );
-    }
-
-    public function testVar() {
-        $factory = new BuilderFactory();
-        $this->assertEquals(
-            new Expr\Variable("foo"),
-            $factory->var("foo")
-        );
-        $this->assertEquals(
-            new Expr\Variable(new Expr\Variable("foo")),
-            $factory->var($factory->var("foo"))
-        );
-    }
-
-    public function testPropertyFetch() {
-        $f = new BuilderFactory();
-        $this->assertEquals(
-            new Expr\PropertyFetch(new Expr\Variable('foo'), 'bar'),
-            $f->propertyFetch($f->var('foo'), 'bar')
-        );
-        $this->assertEquals(
-            new Expr\PropertyFetch(new Expr\Variable('foo'), 'bar'),
-            $f->propertyFetch($f->var('foo'), new Identifier('bar'))
-        );
-        $this->assertEquals(
-            new Expr\PropertyFetch(new Expr\Variable('foo'), new Expr\Variable('bar')),
-            $f->propertyFetch($f->var('foo'), $f->var('bar'))
-        );
-    }
-
-    public function testInvalidIdentifier() {
-        $this->expectException(\LogicException::class);
-        $this->expectExceptionMessage('Expected string or instance of Node\Identifier');
-        (new BuilderFactory())->classConstFetch('Foo', new Expr\Variable('foo'));
-    }
-
-    public function testInvalidIdentifierOrExpr() {
-        $this->expectException(\LogicException::class);
-        $this->expectExceptionMessage('Expected string or instance of Node\Identifier or Node\Expr');
-        (new BuilderFactory())->staticCall('Foo', new Name('bar'));
-    }
-
-    public function testInvalidNameOrExpr() {
-        $this->expectException(\LogicException::class);
-        $this->expectExceptionMessage('Name must be a string or an instance of Node\Name or Node\Expr');
-        (new BuilderFactory())->funcCall(new Node\Stmt\Return_());
-    }
-
-    public function testInvalidVar() {
-        $this->expectException(\LogicException::class);
-        $this->expectExceptionMessage('Variable name must be string or Expr');
-        (new BuilderFactory())->var(new Node\Stmt\Return_());
-    }
-
-    public function testIntegration() {
-        $factory = new BuilderFactory;
-        $node = $factory->namespace('Name\Space')
-            ->addStmt($factory->use('Foo\Bar\SomeOtherClass'))
-            ->addStmt($factory->use('Foo\Bar')->as('A'))
-            ->addStmt($factory->useFunction('strlen'))
-            ->addStmt($factory->useConst('PHP_VERSION'))
-            ->addStmt($factory
-                ->class('SomeClass')
-                ->extend('SomeOtherClass')
-                ->implement('A\Few', '\Interfaces')
-                ->makeAbstract()
-
-                ->addStmt($factory->useTrait('FirstTrait'))
-
-                ->addStmt($factory->useTrait('SecondTrait', 'ThirdTrait')
-                    ->and('AnotherTrait')
-                    ->with($factory->traitUseAdaptation('foo')->as('bar'))
-                    ->with($factory->traitUseAdaptation('AnotherTrait', 'baz')->as('test'))
-                    ->with($factory->traitUseAdaptation('AnotherTrait', 'func')->insteadof('SecondTrait')))
-
-                ->addStmt($factory->method('firstMethod'))
-
-                ->addStmt($factory->method('someMethod')
-                    ->makePublic()
-                    ->makeAbstract()
-                    ->addParam($factory->param('someParam')->setType('SomeClass'))
-                    ->setDocComment('/**
-                                      * This method does something.
-                                      *
-                                      * @param SomeClass And takes a parameter
-                                      */'))
-
-                ->addStmt($factory->method('anotherMethod')
-                    ->makeProtected()
-                    ->addParam($factory->param('someParam')->setDefault('test'))
-                    ->addStmt(new Expr\Print_(new Expr\Variable('someParam'))))
-
-                ->addStmt($factory->property('someProperty')->makeProtected())
-                ->addStmt($factory->property('anotherProperty')
-                    ->makePrivate()
-                    ->setDefault([1, 2, 3])))
-            ->getNode()
-        ;
-
-        $expected = <<<'EOC'
-<?php
-
-namespace Name\Space;
-
-use Foo\Bar\SomeOtherClass;
-use Foo\Bar as A;
-use function strlen;
-use const PHP_VERSION;
-abstract class SomeClass extends SomeOtherClass implements A\Few, \Interfaces
-{
-    use FirstTrait;
-    use SecondTrait, ThirdTrait, AnotherTrait {
-        foo as bar;
-        AnotherTrait::baz as test;
-        AnotherTrait::func insteadof SecondTrait;
-    }
-    protected $someProperty;
-    private $anotherProperty = array(1, 2, 3);
-    function firstMethod()
-    {
-    }
-    /**
-     * This method does something.
-     *
-     * @param SomeClass And takes a parameter
-     */
-    public abstract function someMethod(SomeClass $someParam);
-    protected function anotherMethod($someParam = 'test')
-    {
-        print $someParam;
-    }
-}
-EOC;
-
-        $stmts = [$node];
-        $prettyPrinter = new PrettyPrinter\Standard();
-        $generated = $prettyPrinter->prettyPrintFile($stmts);
-
-        $this->assertEquals(
-            str_replace("\r\n", "\n", $expected),
-            str_replace("\r\n", "\n", $generated)
-        );
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/CodeParsingTest.php b/vendor/nikic/php-parser/test/PhpParser/CodeParsingTest.php
deleted file mode 100644
index 24e93dd522074967950c9cb4969e20fdeb4f7621..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/PhpParser/CodeParsingTest.php
+++ /dev/null
@@ -1,119 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser;
-
-use PhpParser\Node\Expr;
-use PhpParser\Node\Stmt;
-
-class CodeParsingTest extends CodeTestAbstract
-{
-    /**
-     * @dataProvider provideTestParse
-     */
-    public function testParse($name, $code, $expected, $modeLine) {
-        if (null !== $modeLine) {
-            $modes = array_fill_keys(explode(',', $modeLine), true);
-        } else {
-            $modes = [];
-        }
-
-        list($parser5, $parser7) = $this->createParsers($modes);
-        list($stmts5, $output5) = $this->getParseOutput($parser5, $code, $modes);
-        list($stmts7, $output7) = $this->getParseOutput($parser7, $code, $modes);
-
-        if (isset($modes['php5'])) {
-            $this->assertSame($expected, $output5, $name);
-            $this->assertNotSame($expected, $output7, $name);
-        } elseif (isset($modes['php7'])) {
-            $this->assertNotSame($expected, $output5, $name);
-            $this->assertSame($expected, $output7, $name);
-        } else {
-            $this->assertSame($expected, $output5, $name);
-            $this->assertSame($expected, $output7, $name);
-        }
-
-        $this->checkAttributes($stmts5);
-        $this->checkAttributes($stmts7);
-    }
-
-    public function createParsers(array $modes) {
-        $lexer = new Lexer\Emulative(['usedAttributes' => [
-            'startLine', 'endLine',
-            'startFilePos', 'endFilePos',
-            'startTokenPos', 'endTokenPos',
-            'comments'
-        ]]);
-
-        return [
-            new Parser\Php5($lexer),
-            new Parser\Php7($lexer),
-        ];
-    }
-
-    // Must be public for updateTests.php
-    public function getParseOutput(Parser $parser, $code, array $modes) {
-        $dumpPositions = isset($modes['positions']);
-
-        $errors = new ErrorHandler\Collecting;
-        $stmts = $parser->parse($code, $errors);
-
-        $output = '';
-        foreach ($errors->getErrors() as $error) {
-            $output .= $this->formatErrorMessage($error, $code) . "\n";
-        }
-
-        if (null !== $stmts) {
-            $dumper = new NodeDumper(['dumpComments' => true, 'dumpPositions' => $dumpPositions]);
-            $output .= $dumper->dump($stmts, $code);
-        }
-
-        return [$stmts, canonicalize($output)];
-    }
-
-    public function provideTestParse() {
-        return $this->getTests(__DIR__ . '/../code/parser', 'test');
-    }
-
-    private function formatErrorMessage(Error $e, $code) {
-        if ($e->hasColumnInfo()) {
-            return $e->getMessageWithColumnInfo($code);
-        }
-
-        return $e->getMessage();
-    }
-
-    private function checkAttributes($stmts) {
-        if ($stmts === null) {
-            return;
-        }
-
-        $traverser = new NodeTraverser();
-        $traverser->addVisitor(new class extends NodeVisitorAbstract {
-            public function enterNode(Node $node) {
-                $startLine = $node->getStartLine();
-                $endLine = $node->getEndLine();
-                $startFilePos = $node->getStartFilePos();
-                $endFilePos = $node->getEndFilePos();
-                $startTokenPos = $node->getStartTokenPos();
-                $endTokenPos = $node->getEndTokenPos();
-                if ($startLine < 0 || $endLine < 0 ||
-                    $startFilePos < 0 || $endFilePos < 0 ||
-                    $startTokenPos < 0 || $endTokenPos < 0
-                ) {
-                    throw new \Exception('Missing location information on ' . $node->getType());
-                }
-
-                if ($endLine < $startLine ||
-                    $endFilePos < $startFilePos ||
-                    $endTokenPos < $startTokenPos
-                ) {
-                    // Nops and error can have inverted order, if they are empty
-                    if (!$node instanceof Stmt\Nop && !$node instanceof Expr\Error) {
-                        throw new \Exception('End < start on ' . $node->getType());
-                    }
-                }
-            }
-        });
-        $traverser->traverse($stmts);
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/CodeTestAbstract.php b/vendor/nikic/php-parser/test/PhpParser/CodeTestAbstract.php
deleted file mode 100644
index f5f408755cbb473052a878da2a82b5b9ee49b8e9..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/PhpParser/CodeTestAbstract.php
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser;
-
-abstract class CodeTestAbstract extends \PHPUnit\Framework\TestCase
-{
-    protected function getTests($directory, $fileExtension, $chunksPerTest = 2) {
-        $parser = new CodeTestParser;
-        $allTests = [];
-        foreach (filesInDir($directory, $fileExtension) as $fileName => $fileContents) {
-            list($name, $tests) = $parser->parseTest($fileContents, $chunksPerTest);
-
-            // first part is the name
-            $name .= ' (' . $fileName . ')';
-            $shortName = ltrim(str_replace($directory, '', $fileName), '/\\');
-
-            // multiple sections possible with always two forming a pair
-            foreach ($tests as $i => list($mode, $parts)) {
-                $dataSetName = $shortName . (count($parts) > 1 ? '#' . $i : '');
-                $allTests[$dataSetName] = array_merge([$name], $parts, [$mode]);
-            }
-        }
-
-        return $allTests;
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/CodeTestParser.php b/vendor/nikic/php-parser/test/PhpParser/CodeTestParser.php
deleted file mode 100644
index f63dc926536d1405564f9d87fc3cc3c6ca87aea3..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/PhpParser/CodeTestParser.php
+++ /dev/null
@@ -1,68 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser;
-
-class CodeTestParser
-{
-    public function parseTest($code, $chunksPerTest) {
-        $code = canonicalize($code);
-
-        // evaluate @@{expr}@@ expressions
-        $code = preg_replace_callback(
-            '/@@\{(.*?)\}@@/',
-            function($matches) {
-                return eval('return ' . $matches[1] . ';');
-            },
-            $code
-        );
-
-        // parse sections
-        $parts = preg_split("/\n-----(?:\n|$)/", $code);
-
-        // first part is the name
-        $name = array_shift($parts);
-
-        // multiple sections possible with always two forming a pair
-        $chunks = array_chunk($parts, $chunksPerTest);
-        $tests = [];
-        foreach ($chunks as $i => $chunk) {
-            $lastPart = array_pop($chunk);
-            list($lastPart, $mode) = $this->extractMode($lastPart);
-            $tests[] = [$mode, array_merge($chunk, [$lastPart])];
-        }
-
-        return [$name, $tests];
-    }
-
-    public function reconstructTest($name, array $tests) {
-        $result = $name;
-        foreach ($tests as list($mode, $parts)) {
-            $lastPart = array_pop($parts);
-            foreach ($parts as $part) {
-                $result .= "\n-----\n$part";
-            }
-
-            $result .= "\n-----\n";
-            if (null !== $mode) {
-                $result .= "!!$mode\n";
-            }
-            $result .= $lastPart;
-        }
-        return $result;
-    }
-
-    private function extractMode($expected) {
-        $firstNewLine = strpos($expected, "\n");
-        if (false === $firstNewLine) {
-            $firstNewLine = strlen($expected);
-        }
-
-        $firstLine = substr($expected, 0, $firstNewLine);
-        if (0 !== strpos($firstLine, '!!')) {
-            return [$expected, null];
-        }
-
-        $expected = (string) substr($expected, $firstNewLine + 1);
-        return [$expected, substr($firstLine, 2)];
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/CommentTest.php b/vendor/nikic/php-parser/test/PhpParser/CommentTest.php
deleted file mode 100644
index 409841aae193bcc099cf7bca1d08afa742ce41bc..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/PhpParser/CommentTest.php
+++ /dev/null
@@ -1,74 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser;
-
-class CommentTest extends \PHPUnit\Framework\TestCase
-{
-    public function testGetSet() {
-        $comment = new Comment('/* Some comment */', 1, 10, 2);
-
-        $this->assertSame('/* Some comment */', $comment->getText());
-        $this->assertSame('/* Some comment */', (string) $comment);
-        $this->assertSame(1, $comment->getLine());
-        $this->assertSame(10, $comment->getFilePos());
-        $this->assertSame(2, $comment->getTokenPos());
-    }
-
-    /**
-     * @dataProvider provideTestReformatting
-     */
-    public function testReformatting($commentText, $reformattedText) {
-        $comment = new Comment($commentText);
-        $this->assertSame($reformattedText, $comment->getReformattedText());
-    }
-
-    public function provideTestReformatting() {
-        return [
-            ['// Some text' . "\n", '// Some text'],
-            ['/* Some text */', '/* Some text */'],
-            [
-                '/**
-     * Some text.
-     * Some more text.
-     */',
-                '/**
- * Some text.
- * Some more text.
- */'
-            ],
-            [
-                '/*
-        Some text.
-        Some more text.
-    */',
-                '/*
-    Some text.
-    Some more text.
-*/'
-            ],
-            [
-                '/* Some text.
-       More text.
-       Even more text. */',
-                '/* Some text.
-   More text.
-   Even more text. */'
-            ],
-            [
-                '/* Some text.
-       More text.
-         Indented text. */',
-                '/* Some text.
-   More text.
-     Indented text. */',
-            ],
-            // invalid comment -> no reformatting
-            [
-                'hallo
-    world',
-                'hallo
-    world',
-            ],
-        ];
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/ConstExprEvaluatorTest.php b/vendor/nikic/php-parser/test/PhpParser/ConstExprEvaluatorTest.php
deleted file mode 100644
index 02d992e5992afb5f8a25a4816e26ee827f7a8b56..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/PhpParser/ConstExprEvaluatorTest.php
+++ /dev/null
@@ -1,130 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser;
-
-use PhpParser\Node\Expr;
-use PhpParser\Node\Scalar;
-
-class ConstExprEvaluatorTest extends \PHPUnit\Framework\TestCase
-{
-    /** @dataProvider provideTestEvaluate */
-    public function testEvaluate($exprString, $expected) {
-        $parser = new Parser\Php7(new Lexer());
-        $expr = $parser->parse('<?php ' . $exprString . ';')[0]->expr;
-        $evaluator = new ConstExprEvaluator();
-        $this->assertSame($expected, $evaluator->evaluateDirectly($expr));
-    }
-
-    public function provideTestEvaluate() {
-        return [
-            ['1', 1],
-            ['1.0', 1.0],
-            ['"foo"', "foo"],
-            ['[0, 1]', [0, 1]],
-            ['["foo" => "bar"]', ["foo" => "bar"]],
-            ['NULL', null],
-            ['False', false],
-            ['true', true],
-            ['+1', 1],
-            ['-1', -1],
-            ['~0', -1],
-            ['!true', false],
-            ['[0][0]', 0],
-            ['"a"[0]', "a"],
-            ['true ? 1 : (1/0)', 1],
-            ['false ? (1/0) : 1', 1],
-            ['42 ?: (1/0)', 42],
-            ['false ?: 42', 42],
-            ['false ?? 42', false],
-            ['null ?? 42', 42],
-            ['[0][0] ?? 42', 0],
-            ['[][0] ?? 42', 42],
-            ['0b11 & 0b10', 0b10],
-            ['0b11 | 0b10', 0b11],
-            ['0b11 ^ 0b10', 0b01],
-            ['1 << 2', 4],
-            ['4 >> 2', 1],
-            ['"a" . "b"', "ab"],
-            ['4 + 2', 6],
-            ['4 - 2', 2],
-            ['4 * 2', 8],
-            ['4 / 2', 2],
-            ['4 % 2', 0],
-            ['4 ** 2', 16],
-            ['1 == 1.0', true],
-            ['1 != 1.0', false],
-            ['1 < 2.0', true],
-            ['1 <= 2.0', true],
-            ['1 > 2.0', false],
-            ['1 >= 2.0', false],
-            ['1 <=> 2.0', -1],
-            ['1 === 1.0', false],
-            ['1 !== 1.0', true],
-            ['true && true', true],
-            ['true and true', true],
-            ['false && (1/0)', false],
-            ['false and (1/0)', false],
-            ['false || false', false],
-            ['false or false', false],
-            ['true || (1/0)', true],
-            ['true or (1/0)', true],
-            ['true xor false', true],
-        ];
-    }
-
-    public function testEvaluateFails() {
-        $this->expectException(ConstExprEvaluationException::class);
-        $this->expectExceptionMessage('Expression of type Expr_Variable cannot be evaluated');
-        $evaluator = new ConstExprEvaluator();
-        $evaluator->evaluateDirectly(new Expr\Variable('a'));
-    }
-
-    public function testEvaluateFallback() {
-        $evaluator = new ConstExprEvaluator(function(Expr $expr) {
-            if ($expr instanceof Scalar\MagicConst\Line) {
-                return 42;
-            }
-            throw new ConstExprEvaluationException();
-        });
-        $expr = new Expr\BinaryOp\Plus(
-            new Scalar\LNumber(8),
-            new Scalar\MagicConst\Line()
-        );
-        $this->assertSame(50, $evaluator->evaluateDirectly($expr));
-    }
-
-    /**
-     * @dataProvider provideTestEvaluateSilently
-     */
-    public function testEvaluateSilently($expr, $exception, $msg) {
-        $evaluator = new ConstExprEvaluator();
-
-        try {
-            $evaluator->evaluateSilently($expr);
-        } catch (ConstExprEvaluationException $e) {
-            $this->assertSame(
-                'An error occurred during constant expression evaluation',
-                $e->getMessage()
-            );
-
-            $prev = $e->getPrevious();
-            $this->assertInstanceOf($exception, $prev);
-            $this->assertSame($msg, $prev->getMessage());
-        }
-    }
-
-    public function provideTestEvaluateSilently() {
-        return [
-            [
-                new Expr\BinaryOp\Mod(new Scalar\LNumber(42), new Scalar\LNumber(0)),
-                \Error::class,
-                'Modulo by zero'
-            ],
-            [
-                new Expr\BinaryOp\Div(new Scalar\LNumber(42), new Scalar\LNumber(0)),
-                \ErrorException::class,
-                'Division by zero'
-            ],
-        ];
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/ErrorHandler/CollectingTest.php b/vendor/nikic/php-parser/test/PhpParser/ErrorHandler/CollectingTest.php
deleted file mode 100644
index a20101a8b627e3e158053e1bfb7effd711119ff6..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/PhpParser/ErrorHandler/CollectingTest.php
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser\ErrorHandler;
-
-use PhpParser\Error;
-
-class CollectingTest extends \PHPUnit\Framework\TestCase
-{
-    public function testHandleError() {
-        $errorHandler = new Collecting();
-        $this->assertFalse($errorHandler->hasErrors());
-        $this->assertEmpty($errorHandler->getErrors());
-
-        $errorHandler->handleError($e1 = new Error('Test 1'));
-        $errorHandler->handleError($e2 = new Error('Test 2'));
-        $this->assertTrue($errorHandler->hasErrors());
-        $this->assertSame([$e1, $e2], $errorHandler->getErrors());
-
-        $errorHandler->clearErrors();
-        $this->assertFalse($errorHandler->hasErrors());
-        $this->assertEmpty($errorHandler->getErrors());
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/ErrorHandler/ThrowingTest.php b/vendor/nikic/php-parser/test/PhpParser/ErrorHandler/ThrowingTest.php
deleted file mode 100644
index be641ec7a947f306cf4ed480b6afb9a90653dfd4..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/PhpParser/ErrorHandler/ThrowingTest.php
+++ /dev/null
@@ -1,15 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser\ErrorHandler;
-
-use PhpParser\Error;
-
-class ThrowingTest extends \PHPUnit\Framework\TestCase
-{
-    public function testHandleError() {
-        $this->expectException(Error::class);
-        $this->expectExceptionMessage('Test');
-        $errorHandler = new Throwing();
-        $errorHandler->handleError(new Error('Test'));
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/ErrorTest.php b/vendor/nikic/php-parser/test/PhpParser/ErrorTest.php
deleted file mode 100644
index cc2d3fa5c8d39efa6a8d9a203b2b9f0d31ad8f25..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/PhpParser/ErrorTest.php
+++ /dev/null
@@ -1,104 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser;
-
-class ErrorTest extends \PHPUnit\Framework\TestCase
-{
-    public function testConstruct() {
-        $attributes = [
-            'startLine' => 10,
-            'endLine' => 11,
-        ];
-        $error = new Error('Some error', $attributes);
-
-        $this->assertSame('Some error', $error->getRawMessage());
-        $this->assertSame($attributes, $error->getAttributes());
-        $this->assertSame(10, $error->getStartLine());
-        $this->assertSame(11, $error->getEndLine());
-        $this->assertSame('Some error on line 10', $error->getMessage());
-
-        return $error;
-    }
-
-    /**
-     * @depends testConstruct
-     */
-    public function testSetMessageAndLine(Error $error) {
-        $error->setRawMessage('Some other error');
-        $this->assertSame('Some other error', $error->getRawMessage());
-
-        $error->setStartLine(15);
-        $this->assertSame(15, $error->getStartLine());
-        $this->assertSame('Some other error on line 15', $error->getMessage());
-    }
-
-    public function testUnknownLine() {
-        $error = new Error('Some error');
-
-        $this->assertSame(-1, $error->getStartLine());
-        $this->assertSame(-1, $error->getEndLine());
-        $this->assertSame('Some error on unknown line', $error->getMessage());
-    }
-
-    /** @dataProvider provideTestColumnInfo */
-    public function testColumnInfo($code, $startPos, $endPos, $startColumn, $endColumn) {
-        $error = new Error('Some error', [
-            'startFilePos' => $startPos,
-            'endFilePos' => $endPos,
-        ]);
-
-        $this->assertTrue($error->hasColumnInfo());
-        $this->assertSame($startColumn, $error->getStartColumn($code));
-        $this->assertSame($endColumn, $error->getEndColumn($code));
-
-    }
-
-    public function provideTestColumnInfo() {
-        return [
-            // Error at "bar"
-            ["<?php foo bar baz", 10, 12, 11, 13],
-            ["<?php\nfoo bar baz", 10, 12, 5, 7],
-            ["<?php foo\nbar baz", 10, 12, 1, 3],
-            ["<?php foo bar\nbaz", 10, 12, 11, 13],
-            ["<?php\r\nfoo bar baz", 11, 13, 5, 7],
-            // Error at "baz"
-            ["<?php foo bar baz", 14, 16, 15, 17],
-            ["<?php foo bar\nbaz", 14, 16, 1, 3],
-            // Error at string literal
-            ["<?php foo 'bar\nbaz' xyz", 10, 18, 11, 4],
-            ["<?php\nfoo 'bar\nbaz' xyz", 10, 18, 5, 4],
-            ["<?php foo\n'\nbarbaz\n'\nxyz", 10, 19, 1, 1],
-            // Error over full string
-            ["<?php", 0, 4, 1, 5],
-            ["<?\nphp", 0, 5, 1, 3],
-        ];
-    }
-
-    public function testNoColumnInfo() {
-        $error = new Error('Some error', 3);
-
-        $this->assertFalse($error->hasColumnInfo());
-        try {
-            $error->getStartColumn('');
-            $this->fail('Expected RuntimeException');
-        } catch (\RuntimeException $e) {
-            $this->assertSame('Error does not have column information', $e->getMessage());
-        }
-        try {
-            $error->getEndColumn('');
-            $this->fail('Expected RuntimeException');
-        } catch (\RuntimeException $e) {
-            $this->assertSame('Error does not have column information', $e->getMessage());
-        }
-    }
-
-    public function testInvalidPosInfo() {
-        $this->expectException(\RuntimeException::class);
-        $this->expectExceptionMessage('Invalid position information');
-        $error = new Error('Some error', [
-            'startFilePos' => 10,
-            'endFilePos' => 11,
-        ]);
-        $error->getStartColumn('code');
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/Internal/DifferTest.php b/vendor/nikic/php-parser/test/PhpParser/Internal/DifferTest.php
deleted file mode 100644
index 6fac3fd365723e39d03bbdc44f21cda910d71f4c..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/PhpParser/Internal/DifferTest.php
+++ /dev/null
@@ -1,65 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser\Internal;
-
-class DifferTest extends \PHPUnit\Framework\TestCase
-{
-    private function formatDiffString(array $diff) {
-        $diffStr = '';
-        foreach ($diff as $diffElem) {
-            switch ($diffElem->type) {
-                case DiffElem::TYPE_KEEP:
-                    $diffStr .= $diffElem->old;
-                    break;
-                case DiffElem::TYPE_REMOVE:
-                    $diffStr .= '-' . $diffElem->old;
-                    break;
-                case DiffElem::TYPE_ADD:
-                    $diffStr .= '+' . $diffElem->new;
-                    break;
-                case DiffElem::TYPE_REPLACE:
-                    $diffStr .= '/' . $diffElem->old . $diffElem->new;
-                    break;
-                default:
-                    assert(false);
-                    break;
-            }
-        }
-        return $diffStr;
-    }
-
-    /** @dataProvider provideTestDiff */
-    public function testDiff($oldStr, $newStr, $expectedDiffStr) {
-        $differ = new Differ(function($a, $b) { return $a === $b; });
-        $diff = $differ->diff(str_split($oldStr), str_split($newStr));
-        $this->assertSame($expectedDiffStr, $this->formatDiffString($diff));
-    }
-
-    public function provideTestDiff() {
-        return [
-            ['abc', 'abc', 'abc'],
-            ['abc', 'abcdef', 'abc+d+e+f'],
-            ['abcdef', 'abc', 'abc-d-e-f'],
-            ['abcdef', 'abcxyzdef', 'abc+x+y+zdef'],
-            ['axyzb', 'ab', 'a-x-y-zb'],
-            ['abcdef', 'abxyef', 'ab-c-d+x+yef'],
-            ['abcdef', 'cdefab', '-a-bcdef+a+b'],
-        ];
-    }
-
-    /** @dataProvider provideTestDiffWithReplacements */
-    public function testDiffWithReplacements($oldStr, $newStr, $expectedDiffStr) {
-        $differ = new Differ(function($a, $b) { return $a === $b; });
-        $diff = $differ->diffWithReplacements(str_split($oldStr), str_split($newStr));
-        $this->assertSame($expectedDiffStr, $this->formatDiffString($diff));
-    }
-
-    public function provideTestDiffWithReplacements() {
-        return [
-            ['abcde', 'axyze', 'a/bx/cy/dze'],
-            ['abcde', 'xbcdy', '/axbcd/ey'],
-            ['abcde', 'axye', 'a-b-c-d+x+ye'],
-            ['abcde', 'axyzue', 'a-b-c-d+x+y+z+ue'],
-        ];
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/JsonDecoderTest.php b/vendor/nikic/php-parser/test/PhpParser/JsonDecoderTest.php
deleted file mode 100644
index d5cb05973e247b5b6f381f8ad9b7fc5766735244..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/PhpParser/JsonDecoderTest.php
+++ /dev/null
@@ -1,43 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser;
-
-class JsonDecoderTest extends \PHPUnit\Framework\TestCase
-{
-    public function testRoundTrip() {
-        $code = <<<'PHP'
-<?php
-// comment
-/** doc comment */
-function functionName(&$a = 0, $b = 1.0) {
-    echo 'Foo';
-}
-PHP;
-
-        $parser = new Parser\Php7(new Lexer());
-        $stmts = $parser->parse($code);
-        $json = json_encode($stmts);
-
-        $jsonDecoder = new JsonDecoder();
-        $decodedStmts = $jsonDecoder->decode($json);
-        $this->assertEquals($stmts, $decodedStmts);
-    }
-
-    /** @dataProvider provideTestDecodingError */
-    public function testDecodingError($json, $expectedMessage) {
-        $jsonDecoder = new JsonDecoder();
-        $this->expectException(\RuntimeException::class);
-        $this->expectExceptionMessage($expectedMessage);
-        $jsonDecoder->decode($json);
-    }
-
-    public function provideTestDecodingError() {
-        return [
-            ['???', 'JSON decoding error: Syntax error'],
-            ['{"nodeType":123}', 'Node type must be a string'],
-            ['{"nodeType":"Name","attributes":123}', 'Attributes must be an array'],
-            ['{"nodeType":"Comment"}', 'Comment must have text'],
-            ['{"nodeType":"xxx"}', 'Unknown node type "xxx"'],
-        ];
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/Lexer/EmulativeTest.php b/vendor/nikic/php-parser/test/PhpParser/Lexer/EmulativeTest.php
deleted file mode 100644
index a53c379b796dd978b1976b70898000636b338c15..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/PhpParser/Lexer/EmulativeTest.php
+++ /dev/null
@@ -1,210 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser\Lexer;
-
-use PhpParser\ErrorHandler;
-use PhpParser\LexerTest;
-use PhpParser\Parser\Tokens;
-
-class EmulativeTest extends LexerTest
-{
-    protected function getLexer(array $options = []) {
-        return new Emulative($options);
-    }
-
-    /**
-     * @dataProvider provideTestReplaceKeywords
-     */
-    public function testReplaceKeywords($keyword, $expectedToken) {
-        $lexer = $this->getLexer();
-        $lexer->startLexing('<?php ' . $keyword);
-
-        $this->assertSame($expectedToken, $lexer->getNextToken());
-        $this->assertSame(0, $lexer->getNextToken());
-    }
-
-    /**
-     * @dataProvider provideTestReplaceKeywords
-     */
-    public function testNoReplaceKeywordsAfterObjectOperator(string $keyword) {
-        $lexer = $this->getLexer();
-        $lexer->startLexing('<?php ->' . $keyword);
-
-        $this->assertSame(Tokens::T_OBJECT_OPERATOR, $lexer->getNextToken());
-        $this->assertSame(Tokens::T_STRING, $lexer->getNextToken());
-        $this->assertSame(0, $lexer->getNextToken());
-    }
-
-    /**
-     * @dataProvider provideTestReplaceKeywords
-     */
-    public function testNoReplaceKeywordsAfterObjectOperatorWithSpaces(string $keyword) {
-        $lexer = $this->getLexer();
-        $lexer->startLexing('<?php ->    ' . $keyword);
-
-        $this->assertSame(Tokens::T_OBJECT_OPERATOR, $lexer->getNextToken());
-        $this->assertSame(Tokens::T_STRING, $lexer->getNextToken());
-        $this->assertSame(0, $lexer->getNextToken());
-    }
-
-    public function provideTestReplaceKeywords() {
-        return [
-            // PHP 7.4
-            ['fn',            Tokens::T_FN],
-
-            // PHP 5.5
-            ['finally',       Tokens::T_FINALLY],
-            ['yield',         Tokens::T_YIELD],
-
-            // PHP 5.4
-            ['callable',      Tokens::T_CALLABLE],
-            ['insteadof',     Tokens::T_INSTEADOF],
-            ['trait',         Tokens::T_TRAIT],
-            ['__TRAIT__',     Tokens::T_TRAIT_C],
-
-            // PHP 5.3
-            ['__DIR__',       Tokens::T_DIR],
-            ['goto',          Tokens::T_GOTO],
-            ['namespace',     Tokens::T_NAMESPACE],
-            ['__NAMESPACE__', Tokens::T_NS_C],
-        ];
-    }
-
-    /**
-     * @dataProvider provideTestLexNewFeatures
-     */
-    public function testLexNewFeatures($code, array $expectedTokens) {
-        $lexer = $this->getLexer();
-        $lexer->startLexing('<?php ' . $code);
-
-        $tokens = [];
-        while (0 !== $token = $lexer->getNextToken($text)) {
-            $tokens[] = [$token, $text];
-        }
-        $this->assertSame($expectedTokens, $tokens);
-    }
-
-    /**
-     * @dataProvider provideTestLexNewFeatures
-     */
-    public function testLeaveStuffAloneInStrings($code) {
-        $stringifiedToken = '"' . addcslashes($code, '"\\') . '"';
-
-        $lexer = $this->getLexer();
-        $lexer->startLexing('<?php ' . $stringifiedToken);
-
-        $this->assertSame(Tokens::T_CONSTANT_ENCAPSED_STRING, $lexer->getNextToken($text));
-        $this->assertSame($stringifiedToken, $text);
-        $this->assertSame(0, $lexer->getNextToken());
-    }
-
-    /**
-     * @dataProvider provideTestLexNewFeatures
-     */
-    public function testErrorAfterEmulation($code) {
-        $errorHandler = new ErrorHandler\Collecting;
-        $lexer = $this->getLexer();
-        $lexer->startLexing('<?php ' . $code . "\0", $errorHandler);
-
-        $errors = $errorHandler->getErrors();
-        $this->assertCount(1, $errors);
-
-        $error = $errors[0];
-        $this->assertSame('Unexpected null byte', $error->getRawMessage());
-
-        $attrs = $error->getAttributes();
-        $expPos = strlen('<?php ' . $code);
-        $expLine = 1 + substr_count('<?php ' . $code, "\n");
-        $this->assertSame($expPos, $attrs['startFilePos']);
-        $this->assertSame($expPos, $attrs['endFilePos']);
-        $this->assertSame($expLine, $attrs['startLine']);
-        $this->assertSame($expLine, $attrs['endLine']);
-    }
-
-    public function provideTestLexNewFeatures() {
-        return [
-            // PHP 7.4
-            ['??=', [
-                [Tokens::T_COALESCE_EQUAL, '??='],
-            ]],
-            ['yield from', [
-                [Tokens::T_YIELD_FROM, 'yield from'],
-            ]],
-            ["yield\r\nfrom", [
-                [Tokens::T_YIELD_FROM, "yield\r\nfrom"],
-            ]],
-            ['...', [
-                [Tokens::T_ELLIPSIS, '...'],
-            ]],
-            ['**', [
-                [Tokens::T_POW, '**'],
-            ]],
-            ['**=', [
-                [Tokens::T_POW_EQUAL, '**='],
-            ]],
-            ['??', [
-                [Tokens::T_COALESCE, '??'],
-            ]],
-            ['<=>', [
-                [Tokens::T_SPACESHIP, '<=>'],
-            ]],
-            ['0b1010110', [
-                [Tokens::T_LNUMBER, '0b1010110'],
-            ]],
-            ['0b1011010101001010110101010010101011010101010101101011001110111100', [
-                [Tokens::T_DNUMBER, '0b1011010101001010110101010010101011010101010101101011001110111100'],
-            ]],
-            ['\\', [
-                [Tokens::T_NS_SEPARATOR, '\\'],
-            ]],
-            ["<<<'NOWDOC'\nNOWDOC;\n", [
-                [Tokens::T_START_HEREDOC, "<<<'NOWDOC'\n"],
-                [Tokens::T_END_HEREDOC, 'NOWDOC'],
-                [ord(';'), ';'],
-            ]],
-            ["<<<'NOWDOC'\nFoobar\nNOWDOC;\n", [
-                [Tokens::T_START_HEREDOC, "<<<'NOWDOC'\n"],
-                [Tokens::T_ENCAPSED_AND_WHITESPACE, "Foobar\n"],
-                [Tokens::T_END_HEREDOC, 'NOWDOC'],
-                [ord(';'), ';'],
-            ]],
-
-            // Flexible heredoc/nowdoc
-            ["<<<LABEL\nLABEL,", [
-                [Tokens::T_START_HEREDOC, "<<<LABEL\n"],
-                [Tokens::T_END_HEREDOC, "LABEL"],
-                [ord(','), ','],
-            ]],
-            ["<<<LABEL\n    LABEL,", [
-                [Tokens::T_START_HEREDOC, "<<<LABEL\n"],
-                [Tokens::T_END_HEREDOC, "    LABEL"],
-                [ord(','), ','],
-            ]],
-            ["<<<LABEL\n    Foo\n  LABEL;", [
-                [Tokens::T_START_HEREDOC, "<<<LABEL\n"],
-                [Tokens::T_ENCAPSED_AND_WHITESPACE, "    Foo\n"],
-                [Tokens::T_END_HEREDOC, "  LABEL"],
-                [ord(';'), ';'],
-            ]],
-            ["<<<A\n A,<<<A\n A,", [
-                [Tokens::T_START_HEREDOC, "<<<A\n"],
-                [Tokens::T_END_HEREDOC, " A"],
-                [ord(','), ','],
-                [Tokens::T_START_HEREDOC, "<<<A\n"],
-                [Tokens::T_END_HEREDOC, " A"],
-                [ord(','), ','],
-            ]],
-            ["<<<LABEL\nLABELNOPE\nLABEL\n", [
-                [Tokens::T_START_HEREDOC, "<<<LABEL\n"],
-                [Tokens::T_ENCAPSED_AND_WHITESPACE, "LABELNOPE\n"],
-                [Tokens::T_END_HEREDOC, "LABEL"],
-            ]],
-            // Interpretation changed
-            ["<<<LABEL\n    LABEL\nLABEL\n", [
-                [Tokens::T_START_HEREDOC, "<<<LABEL\n"],
-                [Tokens::T_END_HEREDOC, "    LABEL"],
-                [Tokens::T_STRING, "LABEL"],
-            ]],
-        ];
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/LexerTest.php b/vendor/nikic/php-parser/test/PhpParser/LexerTest.php
deleted file mode 100644
index f24c64d5126d842959428412ccc8c74eb3c4504e..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/PhpParser/LexerTest.php
+++ /dev/null
@@ -1,263 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser;
-
-use PhpParser\Parser\Tokens;
-
-class LexerTest extends \PHPUnit\Framework\TestCase
-{
-    /* To allow overwriting in parent class */
-    protected function getLexer(array $options = []) {
-        return new Lexer($options);
-    }
-
-    /**
-     * @dataProvider provideTestError
-     */
-    public function testError($code, $messages) {
-        if (defined('HHVM_VERSION')) {
-            $this->markTestSkipped('HHVM does not throw warnings from token_get_all()');
-        }
-
-        $errorHandler = new ErrorHandler\Collecting();
-        $lexer = $this->getLexer(['usedAttributes' => [
-            'comments', 'startLine', 'endLine', 'startFilePos', 'endFilePos'
-        ]]);
-        $lexer->startLexing($code, $errorHandler);
-        $errors = $errorHandler->getErrors();
-
-        $this->assertCount(count($messages), $errors);
-        for ($i = 0; $i < count($messages); $i++) {
-            $this->assertSame($messages[$i], $errors[$i]->getMessageWithColumnInfo($code));
-        }
-    }
-
-    public function provideTestError() {
-        return [
-            ["<?php /*", ["Unterminated comment from 1:7 to 1:9"]],
-            ["<?php \1", ["Unexpected character \"\1\" (ASCII 1) from 1:7 to 1:7"]],
-            ["<?php \0", ["Unexpected null byte from 1:7 to 1:7"]],
-            // Error with potentially emulated token
-            ["<?php ?? \0", ["Unexpected null byte from 1:10 to 1:10"]],
-            ["<?php\n\0\1 foo /* bar", [
-                "Unexpected null byte from 2:1 to 2:1",
-                "Unexpected character \"\1\" (ASCII 1) from 2:2 to 2:2",
-                "Unterminated comment from 2:8 to 2:14"
-            ]],
-        ];
-    }
-
-    /**
-     * @dataProvider provideTestLex
-     */
-    public function testLex($code, $options, $tokens) {
-        $lexer = $this->getLexer($options);
-        $lexer->startLexing($code);
-        while ($id = $lexer->getNextToken($value, $startAttributes, $endAttributes)) {
-            $token = array_shift($tokens);
-
-            $this->assertSame($token[0], $id);
-            $this->assertSame($token[1], $value);
-            $this->assertEquals($token[2], $startAttributes);
-            $this->assertEquals($token[3], $endAttributes);
-        }
-    }
-
-    public function provideTestLex() {
-        return [
-            // tests conversion of closing PHP tag and drop of whitespace and opening tags
-            [
-                '<?php tokens ?>plaintext',
-                [],
-                [
-                    [
-                        Tokens::T_STRING, 'tokens',
-                        ['startLine' => 1], ['endLine' => 1]
-                    ],
-                    [
-                        ord(';'), '?>',
-                        ['startLine' => 1], ['endLine' => 1]
-                    ],
-                    [
-                        Tokens::T_INLINE_HTML, 'plaintext',
-                        ['startLine' => 1, 'hasLeadingNewline' => false],
-                        ['endLine' => 1]
-                    ],
-                ]
-            ],
-            // tests line numbers
-            [
-                '<?php' . "\n" . '$ token /** doc' . "\n" . 'comment */ $',
-                [],
-                [
-                    [
-                        ord('$'), '$',
-                        ['startLine' => 2], ['endLine' => 2]
-                    ],
-                    [
-                        Tokens::T_STRING, 'token',
-                        ['startLine' => 2], ['endLine' => 2]
-                    ],
-                    [
-                        ord('$'), '$',
-                        [
-                            'startLine' => 3,
-                            'comments' => [
-                                new Comment\Doc('/** doc' . "\n" . 'comment */', 2, 14, 5),
-                            ]
-                        ],
-                        ['endLine' => 3]
-                    ],
-                ]
-            ],
-            // tests comment extraction
-            [
-                '<?php /* comment */ // comment' . "\n" . '/** docComment 1 *//** docComment 2 */ token',
-                [],
-                [
-                    [
-                        Tokens::T_STRING, 'token',
-                        [
-                            'startLine' => 2,
-                            'comments' => [
-                                new Comment('/* comment */', 1, 6, 1),
-                                new Comment('// comment' . "\n", 1, 20, 3),
-                                new Comment\Doc('/** docComment 1 */', 2, 31, 4),
-                                new Comment\Doc('/** docComment 2 */', 2, 50, 5),
-                            ],
-                        ],
-                        ['endLine' => 2]
-                    ],
-                ]
-            ],
-            // tests differing start and end line
-            [
-                '<?php "foo' . "\n" . 'bar"',
-                [],
-                [
-                    [
-                        Tokens::T_CONSTANT_ENCAPSED_STRING, '"foo' . "\n" . 'bar"',
-                        ['startLine' => 1], ['endLine' => 2]
-                    ],
-                ]
-            ],
-            // tests exact file offsets
-            [
-                '<?php "a";' . "\n" . '// foo' . "\n" . '"b";',
-                ['usedAttributes' => ['startFilePos', 'endFilePos']],
-                [
-                    [
-                        Tokens::T_CONSTANT_ENCAPSED_STRING, '"a"',
-                        ['startFilePos' => 6], ['endFilePos' => 8]
-                    ],
-                    [
-                        ord(';'), ';',
-                        ['startFilePos' => 9], ['endFilePos' => 9]
-                    ],
-                    [
-                        Tokens::T_CONSTANT_ENCAPSED_STRING, '"b"',
-                        ['startFilePos' => 18], ['endFilePos' => 20]
-                    ],
-                    [
-                        ord(';'), ';',
-                        ['startFilePos' => 21], ['endFilePos' => 21]
-                    ],
-                ]
-            ],
-            // tests token offsets
-            [
-                '<?php "a";' . "\n" . '// foo' . "\n" . '"b";',
-                ['usedAttributes' => ['startTokenPos', 'endTokenPos']],
-                [
-                    [
-                        Tokens::T_CONSTANT_ENCAPSED_STRING, '"a"',
-                        ['startTokenPos' => 1], ['endTokenPos' => 1]
-                    ],
-                    [
-                        ord(';'), ';',
-                        ['startTokenPos' => 2], ['endTokenPos' => 2]
-                    ],
-                    [
-                        Tokens::T_CONSTANT_ENCAPSED_STRING, '"b"',
-                        ['startTokenPos' => 5], ['endTokenPos' => 5]
-                    ],
-                    [
-                        ord(';'), ';',
-                        ['startTokenPos' => 6], ['endTokenPos' => 6]
-                    ],
-                ]
-            ],
-            // tests all attributes being disabled
-            [
-                '<?php /* foo */ $bar;',
-                ['usedAttributes' => []],
-                [
-                    [
-                        Tokens::T_VARIABLE, '$bar',
-                        [], []
-                    ],
-                    [
-                        ord(';'), ';',
-                        [], []
-                    ]
-                ]
-            ],
-            // tests no tokens
-            [
-                '',
-                [],
-                []
-            ],
-        ];
-    }
-
-    /**
-     * @dataProvider provideTestHaltCompiler
-     */
-    public function testHandleHaltCompiler($code, $remaining) {
-        $lexer = $this->getLexer();
-        $lexer->startLexing($code);
-
-        while (Tokens::T_HALT_COMPILER !== $lexer->getNextToken());
-
-        $this->assertSame($remaining, $lexer->handleHaltCompiler());
-        $this->assertSame(0, $lexer->getNextToken());
-    }
-
-    public function provideTestHaltCompiler() {
-        return [
-            ['<?php ... __halt_compiler();Remaining Text', 'Remaining Text'],
-            ['<?php ... __halt_compiler ( ) ;Remaining Text', 'Remaining Text'],
-            ['<?php ... __halt_compiler() ?>Remaining Text', 'Remaining Text'],
-            //array('<?php ... __halt_compiler();' . "\0", "\0"),
-            //array('<?php ... __halt_compiler /* */ ( ) ;Remaining Text', 'Remaining Text'),
-        ];
-    }
-
-    public function testHandleHaltCompilerError() {
-        $this->expectException(Error::class);
-        $this->expectExceptionMessage('__HALT_COMPILER must be followed by "();"');
-        $lexer = $this->getLexer();
-        $lexer->startLexing('<?php ... __halt_compiler invalid ();');
-
-        while (Tokens::T_HALT_COMPILER !== $lexer->getNextToken());
-        $lexer->handleHaltCompiler();
-    }
-
-    public function testGetTokens() {
-        $code = '<?php "a";' . "\n" . '// foo' . "\n" . '"b";';
-        $expectedTokens = [
-            [T_OPEN_TAG, '<?php ', 1],
-            [T_CONSTANT_ENCAPSED_STRING, '"a"', 1],
-            ';',
-            [T_WHITESPACE, "\n", 1],
-            [T_COMMENT, '// foo' . "\n", 2],
-            [T_CONSTANT_ENCAPSED_STRING, '"b"', 3],
-            ';',
-        ];
-
-        $lexer = $this->getLexer();
-        $lexer->startLexing($code);
-        $this->assertSame($expectedTokens, $lexer->getTokens());
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/NameContextTest.php b/vendor/nikic/php-parser/test/PhpParser/NameContextTest.php
deleted file mode 100644
index ee8458b67ec4c10dcf83e2f77f7a147d03ce6db3..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/PhpParser/NameContextTest.php
+++ /dev/null
@@ -1,65 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser;
-
-use PhpParser\Node\Name;
-use PhpParser\Node\Stmt\Use_;
-
-class NameContextTest extends \PHPUnit\Framework\TestCase
-{
-    /**
-     * @dataProvider provideTestGetPossibleNames
-     */
-    public function testGetPossibleNames($type, $name, $expectedPossibleNames) {
-        $nameContext = new NameContext(new ErrorHandler\Throwing());
-        $nameContext->startNamespace(new Name('NS'));
-        $nameContext->addAlias(new Name('Foo'), 'Foo', Use_::TYPE_NORMAL);
-        $nameContext->addAlias(new Name('Foo\Bar'), 'Alias', Use_::TYPE_NORMAL);
-        $nameContext->addAlias(new Name('Foo\fn'), 'fn', Use_::TYPE_FUNCTION);
-        $nameContext->addAlias(new Name('Foo\CN'), 'CN', Use_::TYPE_CONSTANT);
-
-        $possibleNames = $nameContext->getPossibleNames($name, $type);
-        $possibleNames = array_map(function (Name $name) {
-            return $name->toCodeString();
-        }, $possibleNames);
-
-        $this->assertSame($expectedPossibleNames, $possibleNames);
-
-        // Here the last name is always the shortest one
-        $expectedShortName = $expectedPossibleNames[count($expectedPossibleNames) - 1];
-        $this->assertSame(
-            $expectedShortName,
-            $nameContext->getShortName($name, $type)->toCodeString()
-        );
-    }
-
-    public function provideTestGetPossibleNames() {
-        return [
-            [Use_::TYPE_NORMAL, 'Test', ['\Test']],
-            [Use_::TYPE_NORMAL, 'Test\Namespaced', ['\Test\Namespaced']],
-            [Use_::TYPE_NORMAL, 'NS\Test', ['\NS\Test', 'Test']],
-            [Use_::TYPE_NORMAL, 'ns\Test', ['\ns\Test', 'Test']],
-            [Use_::TYPE_NORMAL, 'NS\Foo\Bar', ['\NS\Foo\Bar']],
-            [Use_::TYPE_NORMAL, 'ns\foo\Bar', ['\ns\foo\Bar']],
-            [Use_::TYPE_NORMAL, 'Foo', ['\Foo', 'Foo']],
-            [Use_::TYPE_NORMAL, 'Foo\Bar', ['\Foo\Bar', 'Foo\Bar', 'Alias']],
-            [Use_::TYPE_NORMAL, 'Foo\Bar\Baz', ['\Foo\Bar\Baz', 'Foo\Bar\Baz', 'Alias\Baz']],
-            [Use_::TYPE_NORMAL, 'Foo\fn\Bar', ['\Foo\fn\Bar', 'Foo\fn\Bar']],
-            [Use_::TYPE_FUNCTION, 'Foo\fn\bar', ['\Foo\fn\bar', 'Foo\fn\bar']],
-            [Use_::TYPE_FUNCTION, 'Foo\fn', ['\Foo\fn', 'Foo\fn', 'fn']],
-            [Use_::TYPE_FUNCTION, 'Foo\FN', ['\Foo\FN', 'Foo\FN', 'fn']],
-            [Use_::TYPE_CONSTANT, 'Foo\CN\BAR', ['\Foo\CN\BAR', 'Foo\CN\BAR']],
-            [Use_::TYPE_CONSTANT, 'Foo\CN', ['\Foo\CN', 'Foo\CN', 'CN']],
-            [Use_::TYPE_CONSTANT, 'foo\CN', ['\foo\CN', 'Foo\CN', 'CN']],
-            [Use_::TYPE_CONSTANT, 'foo\cn', ['\foo\cn', 'Foo\cn']],
-            // self/parent/static must not be fully qualified
-            [Use_::TYPE_NORMAL, 'self', ['self']],
-            [Use_::TYPE_NORMAL, 'parent', ['parent']],
-            [Use_::TYPE_NORMAL, 'static', ['static']],
-            // true/false/null do not need to be fully qualified, even in namespaces
-            [Use_::TYPE_CONSTANT, 'true', ['\true', 'true']],
-            [Use_::TYPE_CONSTANT, 'false', ['\false', 'false']],
-            [Use_::TYPE_CONSTANT, 'null', ['\null', 'null']],
-        ];
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/Node/IdentifierTest.php b/vendor/nikic/php-parser/test/PhpParser/Node/IdentifierTest.php
deleted file mode 100644
index 2bd58fc8d018aee12642b58ad147c8f25f75c9a3..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/PhpParser/Node/IdentifierTest.php
+++ /dev/null
@@ -1,29 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser\Node;
-
-class IdentifierTest extends \PHPUnit\Framework\TestCase
-{
-    public function testToString() {
-        $identifier = new Identifier('Foo');
-
-        $this->assertSame('Foo', (string) $identifier);
-        $this->assertSame('Foo', $identifier->toString());
-        $this->assertSame('foo', $identifier->toLowerString());
-    }
-
-    /** @dataProvider provideTestIsSpecialClassName */
-    public function testIsSpecialClassName($identifier, $expected) {
-        $identifier = new Identifier($identifier);
-        $this->assertSame($expected, $identifier->isSpecialClassName());
-    }
-
-    public function provideTestIsSpecialClassName() {
-        return [
-            ['self', true],
-            ['PARENT', true],
-            ['Static', true],
-            ['other', false],
-        ];
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/Node/NameTest.php b/vendor/nikic/php-parser/test/PhpParser/Node/NameTest.php
deleted file mode 100644
index 5e69ebba3cb35c4c0177cca6e4bd00cbe20a3299..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/PhpParser/Node/NameTest.php
+++ /dev/null
@@ -1,157 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser\Node;
-
-class NameTest extends \PHPUnit\Framework\TestCase
-{
-    public function testConstruct() {
-        $name = new Name(['foo', 'bar']);
-        $this->assertSame(['foo', 'bar'], $name->parts);
-
-        $name = new Name('foo\bar');
-        $this->assertSame(['foo', 'bar'], $name->parts);
-
-        $name = new Name($name);
-        $this->assertSame(['foo', 'bar'], $name->parts);
-    }
-
-    public function testGet() {
-        $name = new Name('foo');
-        $this->assertSame('foo', $name->getFirst());
-        $this->assertSame('foo', $name->getLast());
-
-        $name = new Name('foo\bar');
-        $this->assertSame('foo', $name->getFirst());
-        $this->assertSame('bar', $name->getLast());
-    }
-
-    public function testToString() {
-        $name = new Name('Foo\Bar');
-
-        $this->assertSame('Foo\Bar', (string) $name);
-        $this->assertSame('Foo\Bar', $name->toString());
-        $this->assertSame('foo\bar', $name->toLowerString());
-    }
-
-    public function testSlice() {
-        $name = new Name('foo\bar\baz');
-        $this->assertEquals(new Name('foo\bar\baz'), $name->slice(0));
-        $this->assertEquals(new Name('bar\baz'), $name->slice(1));
-        $this->assertNull($name->slice(3));
-        $this->assertEquals(new Name('foo\bar\baz'), $name->slice(-3));
-        $this->assertEquals(new Name('bar\baz'), $name->slice(-2));
-        $this->assertEquals(new Name('foo\bar'), $name->slice(0, -1));
-        $this->assertNull($name->slice(0, -3));
-        $this->assertEquals(new Name('bar'), $name->slice(1, -1));
-        $this->assertNull($name->slice(1, -2));
-        $this->assertEquals(new Name('bar'), $name->slice(-2, 1));
-        $this->assertEquals(new Name('bar'), $name->slice(-2, -1));
-        $this->assertNull($name->slice(-2, -2));
-    }
-
-    public function testSliceOffsetTooLarge() {
-        $this->expectException(\OutOfBoundsException::class);
-        $this->expectExceptionMessage('Offset 4 is out of bounds');
-        (new Name('foo\bar\baz'))->slice(4);
-    }
-
-    public function testSliceOffsetTooSmall() {
-        $this->expectException(\OutOfBoundsException::class);
-        $this->expectExceptionMessage('Offset -4 is out of bounds');
-        (new Name('foo\bar\baz'))->slice(-4);
-    }
-
-    public function testSliceLengthTooLarge() {
-        $this->expectException(\OutOfBoundsException::class);
-        $this->expectExceptionMessage('Length 4 is out of bounds');
-        (new Name('foo\bar\baz'))->slice(0, 4);
-    }
-
-    public function testSliceLengthTooSmall() {
-        $this->expectException(\OutOfBoundsException::class);
-        $this->expectExceptionMessage('Length -4 is out of bounds');
-        (new Name('foo\bar\baz'))->slice(0, -4);
-    }
-
-    public function testConcat() {
-        $this->assertEquals(new Name('foo\bar\baz'), Name::concat('foo', 'bar\baz'));
-        $this->assertEquals(
-            new Name\FullyQualified('foo\bar'),
-            Name\FullyQualified::concat(['foo'], new Name('bar'))
-        );
-
-        $attributes = ['foo' => 'bar'];
-        $this->assertEquals(
-            new Name\Relative('foo\bar\baz', $attributes),
-            Name\Relative::concat(new Name\FullyQualified('foo\bar'), 'baz', $attributes)
-        );
-
-        $this->assertEquals(new Name('foo'), Name::concat(null, 'foo'));
-        $this->assertEquals(new Name('foo'), Name::concat('foo', null));
-        $this->assertNull(Name::concat(null, null));
-    }
-
-    public function testNameTypes() {
-        $name = new Name('foo');
-        $this->assertTrue($name->isUnqualified());
-        $this->assertFalse($name->isQualified());
-        $this->assertFalse($name->isFullyQualified());
-        $this->assertFalse($name->isRelative());
-        $this->assertSame('foo', $name->toCodeString());
-
-        $name = new Name('foo\bar');
-        $this->assertFalse($name->isUnqualified());
-        $this->assertTrue($name->isQualified());
-        $this->assertFalse($name->isFullyQualified());
-        $this->assertFalse($name->isRelative());
-        $this->assertSame('foo\bar', $name->toCodeString());
-
-        $name = new Name\FullyQualified('foo');
-        $this->assertFalse($name->isUnqualified());
-        $this->assertFalse($name->isQualified());
-        $this->assertTrue($name->isFullyQualified());
-        $this->assertFalse($name->isRelative());
-        $this->assertSame('\foo', $name->toCodeString());
-
-        $name = new Name\Relative('foo');
-        $this->assertFalse($name->isUnqualified());
-        $this->assertFalse($name->isQualified());
-        $this->assertFalse($name->isFullyQualified());
-        $this->assertTrue($name->isRelative());
-        $this->assertSame('namespace\foo', $name->toCodeString());
-    }
-
-    public function testInvalidArg() {
-        $this->expectException(\InvalidArgumentException::class);
-        $this->expectExceptionMessage('Expected string, array of parts or Name instance');
-        Name::concat('foo', new \stdClass);
-    }
-
-    public function testInvalidEmptyString() {
-        $this->expectException(\InvalidArgumentException::class);
-        $this->expectExceptionMessage('Name cannot be empty');
-        new Name('');
-    }
-
-    public function testInvalidEmptyArray() {
-        $this->expectException(\InvalidArgumentException::class);
-        $this->expectExceptionMessage('Name cannot be empty');
-        new Name([]);
-    }
-
-    /** @dataProvider provideTestIsSpecialClassName */
-    public function testIsSpecialClassName($name, $expected) {
-        $name = new Name($name);
-        $this->assertSame($expected, $name->isSpecialClassName());
-    }
-
-    public function provideTestIsSpecialClassName() {
-        return [
-            ['self', true],
-            ['PARENT', true],
-            ['Static', true],
-            ['self\not', false],
-            ['not\self', false],
-        ];
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/Node/Scalar/MagicConstTest.php b/vendor/nikic/php-parser/test/PhpParser/Node/Scalar/MagicConstTest.php
deleted file mode 100644
index c8ae433b00b4c68d8880789a9f75b089ba2a5bdf..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/PhpParser/Node/Scalar/MagicConstTest.php
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser\Node\Scalar;
-
-class MagicConstTest extends \PHPUnit\Framework\TestCase
-{
-    /**
-     * @dataProvider provideTestGetName
-     */
-    public function testGetName(MagicConst $magicConst, $name) {
-        $this->assertSame($name, $magicConst->getName());
-    }
-
-    public function provideTestGetName() {
-        return [
-            [new MagicConst\Class_, '__CLASS__'],
-            [new MagicConst\Dir, '__DIR__'],
-            [new MagicConst\File, '__FILE__'],
-            [new MagicConst\Function_, '__FUNCTION__'],
-            [new MagicConst\Line, '__LINE__'],
-            [new MagicConst\Method, '__METHOD__'],
-            [new MagicConst\Namespace_, '__NAMESPACE__'],
-            [new MagicConst\Trait_, '__TRAIT__'],
-        ];
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/Node/Scalar/StringTest.php b/vendor/nikic/php-parser/test/PhpParser/Node/Scalar/StringTest.php
deleted file mode 100644
index 814a7758fc32ea82f8a0a87d93ea6d37b206c09c..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/PhpParser/Node/Scalar/StringTest.php
+++ /dev/null
@@ -1,61 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser\Node\Scalar;
-
-class StringTest extends \PHPUnit\Framework\TestCase
-{
-    /**
-     * @dataProvider provideTestParseEscapeSequences
-     */
-    public function testParseEscapeSequences($expected, $string, $quote) {
-        $this->assertSame(
-            $expected,
-            String_::parseEscapeSequences($string, $quote)
-        );
-    }
-
-    /**
-     * @dataProvider provideTestParse
-     */
-    public function testCreate($expected, $string) {
-        $this->assertSame(
-            $expected,
-            String_::parse($string)
-        );
-    }
-
-    public function provideTestParseEscapeSequences() {
-        return [
-            ['"',              '\\"',              '"'],
-            ['\\"',            '\\"',              '`'],
-            ['\\"\\`',         '\\"\\`',           null],
-            ["\\\$\n\r\t\f\v", '\\\\\$\n\r\t\f\v', null],
-            ["\x1B",           '\e',               null],
-            [chr(255),         '\xFF',             null],
-            [chr(255),         '\377',             null],
-            [chr(0),           '\400',             null],
-            ["\0",             '\0',               null],
-            ['\xFF',           '\\\\xFF',          null],
-        ];
-    }
-
-    public function provideTestParse() {
-        $tests = [
-            ['A', '\'A\''],
-            ['A', 'b\'A\''],
-            ['A', '"A"'],
-            ['A', 'b"A"'],
-            ['\\', '\'\\\\\''],
-            ['\'', '\'\\\'\''],
-        ];
-
-        foreach ($this->provideTestParseEscapeSequences() as $i => $test) {
-            // skip second and third tests, they aren't for double quotes
-            if ($i !== 1 && $i !== 2) {
-                $tests[] = [$test[0], '"' . $test[1] . '"'];
-            }
-        }
-
-        return $tests;
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/Node/Stmt/ClassConstTest.php b/vendor/nikic/php-parser/test/PhpParser/Node/Stmt/ClassConstTest.php
deleted file mode 100644
index 9a1b4697ca99cae5e7b4020dbfdeafea6ed7e658..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/PhpParser/Node/Stmt/ClassConstTest.php
+++ /dev/null
@@ -1,34 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser\Node\Stmt;
-
-class ClassConstTest extends \PHPUnit\Framework\TestCase
-{
-    /**
-     * @dataProvider provideModifiers
-     */
-    public function testModifiers($modifier) {
-        $node = new ClassConst(
-            [], // invalid
-            constant('PhpParser\Node\Stmt\Class_::MODIFIER_' . strtoupper($modifier))
-        );
-
-        $this->assertTrue($node->{'is' . $modifier}());
-    }
-
-    public function testNoModifiers() {
-        $node = new ClassConst([], 0);
-
-        $this->assertTrue($node->isPublic());
-        $this->assertFalse($node->isProtected());
-        $this->assertFalse($node->isPrivate());
-    }
-
-    public function provideModifiers() {
-        return [
-            ['public'],
-            ['protected'],
-            ['private'],
-        ];
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/Node/Stmt/ClassMethodTest.php b/vendor/nikic/php-parser/test/PhpParser/Node/Stmt/ClassMethodTest.php
deleted file mode 100644
index 51c5f1c2cfa6f1918ca560f6b1ce7e902281d6bd..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/PhpParser/Node/Stmt/ClassMethodTest.php
+++ /dev/null
@@ -1,123 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser\Node\Stmt;
-
-use PhpParser\Node\Expr\Variable;
-use PhpParser\Node\Name;
-use PhpParser\Node\Param;
-
-class ClassMethodTest extends \PHPUnit\Framework\TestCase
-{
-    /**
-     * @dataProvider provideModifiers
-     */
-    public function testModifiers($modifier) {
-        $node = new ClassMethod('foo', [
-            'type' => constant('PhpParser\Node\Stmt\Class_::MODIFIER_' . strtoupper($modifier))
-        ]);
-
-        $this->assertTrue($node->{'is' . $modifier}());
-    }
-
-    public function testNoModifiers() {
-        $node = new ClassMethod('foo', ['type' => 0]);
-
-        $this->assertTrue($node->isPublic());
-        $this->assertFalse($node->isProtected());
-        $this->assertFalse($node->isPrivate());
-        $this->assertFalse($node->isAbstract());
-        $this->assertFalse($node->isFinal());
-        $this->assertFalse($node->isStatic());
-        $this->assertFalse($node->isMagic());
-    }
-
-    public function provideModifiers() {
-        return [
-            ['public'],
-            ['protected'],
-            ['private'],
-            ['abstract'],
-            ['final'],
-            ['static'],
-        ];
-    }
-
-    /**
-     * Checks that implicit public modifier detection for method is working
-     *
-     * @dataProvider implicitPublicModifiers
-     *
-     * @param string $modifier Node type modifier
-     */
-    public function testImplicitPublic(string $modifier)
-    {
-        $node = new ClassMethod('foo', [
-            'type' => constant('PhpParser\Node\Stmt\Class_::MODIFIER_' . strtoupper($modifier))
-        ]);
-
-        $this->assertTrue($node->isPublic(), 'Node should be implicitly public');
-    }
-
-    public function implicitPublicModifiers() {
-        return [
-            ['abstract'],
-            ['final'],
-            ['static'],
-        ];
-    }
-
-    /**
-     * @dataProvider provideMagics
-     *
-     * @param string $name Node name
-     */
-    public function testMagic(string $name) {
-        $node = new ClassMethod($name);
-        $this->assertTrue($node->isMagic(), 'Method should be magic');
-    }
-
-    public function provideMagics() {
-        return [
-             ['__construct'],
-             ['__DESTRUCT'],
-             ['__caLL'],
-             ['__callstatic'],
-             ['__get'],
-             ['__set'],
-             ['__isset'],
-             ['__unset'],
-             ['__sleep'],
-             ['__wakeup'],
-             ['__tostring'],
-             ['__set_state'],
-             ['__clone'],
-             ['__invoke'],
-             ['__debuginfo'],
-        ];
-    }
-
-    public function testFunctionLike() {
-        $param = new Param(new Variable('a'));
-        $type = new Name('Foo');
-        $return = new Return_(new Variable('a'));
-        $method = new ClassMethod('test', [
-            'byRef' => false,
-            'params' => [$param],
-            'returnType' => $type,
-            'stmts' => [$return],
-        ]);
-
-        $this->assertFalse($method->returnsByRef());
-        $this->assertSame([$param], $method->getParams());
-        $this->assertSame($type, $method->getReturnType());
-        $this->assertSame([$return], $method->getStmts());
-
-        $method = new ClassMethod('test', [
-            'byRef' => true,
-            'stmts' => null,
-        ]);
-
-        $this->assertTrue($method->returnsByRef());
-        $this->assertNull($method->getStmts());
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/Node/Stmt/ClassTest.php b/vendor/nikic/php-parser/test/PhpParser/Node/Stmt/ClassTest.php
deleted file mode 100644
index 9b7c7de1cc4442ba74a7e295061cef24cc4bf22a..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/PhpParser/Node/Stmt/ClassTest.php
+++ /dev/null
@@ -1,59 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser\Node\Stmt;
-
-class ClassTest extends \PHPUnit\Framework\TestCase
-{
-    public function testIsAbstract() {
-        $class = new Class_('Foo', ['type' => Class_::MODIFIER_ABSTRACT]);
-        $this->assertTrue($class->isAbstract());
-
-        $class = new Class_('Foo');
-        $this->assertFalse($class->isAbstract());
-    }
-
-    public function testIsFinal() {
-        $class = new Class_('Foo', ['type' => Class_::MODIFIER_FINAL]);
-        $this->assertTrue($class->isFinal());
-
-        $class = new Class_('Foo');
-        $this->assertFalse($class->isFinal());
-    }
-
-    public function testGetMethods() {
-        $methods = [
-            new ClassMethod('foo'),
-            new ClassMethod('bar'),
-            new ClassMethod('fooBar'),
-        ];
-        $class = new Class_('Foo', [
-            'stmts' => [
-                new TraitUse([]),
-                $methods[0],
-                new ClassConst([]),
-                $methods[1],
-                new Property(0, []),
-                $methods[2],
-            ]
-        ]);
-
-        $this->assertSame($methods, $class->getMethods());
-    }
-
-    public function testGetMethod() {
-        $methodConstruct = new ClassMethod('__CONSTRUCT');
-        $methodTest = new ClassMethod('test');
-        $class = new Class_('Foo', [
-            'stmts' => [
-                new ClassConst([]),
-                $methodConstruct,
-                new Property(0, []),
-                $methodTest,
-            ]
-        ]);
-
-        $this->assertSame($methodConstruct, $class->getMethod('__construct'));
-        $this->assertSame($methodTest, $class->getMethod('test'));
-        $this->assertNull($class->getMethod('nonExisting'));
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/Node/Stmt/InterfaceTest.php b/vendor/nikic/php-parser/test/PhpParser/Node/Stmt/InterfaceTest.php
deleted file mode 100644
index da6e8eb6fed37143f0189c7228f596ad9d298955..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/PhpParser/Node/Stmt/InterfaceTest.php
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser\Node\Stmt;
-
-use PhpParser\Node;
-
-class InterfaceTest extends \PHPUnit\Framework\TestCase
-{
-    public function testGetMethods() {
-        $methods = [
-            new ClassMethod('foo'),
-            new ClassMethod('bar'),
-        ];
-        $interface = new Class_('Foo', [
-            'stmts' => [
-                new Node\Stmt\ClassConst([new Node\Const_('C1', new Node\Scalar\String_('C1'))]),
-                $methods[0],
-                new Node\Stmt\ClassConst([new Node\Const_('C2', new Node\Scalar\String_('C2'))]),
-                $methods[1],
-                new Node\Stmt\ClassConst([new Node\Const_('C3', new Node\Scalar\String_('C3'))]),
-            ]
-        ]);
-
-        $this->assertSame($methods, $interface->getMethods());
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/Node/Stmt/PropertyTest.php b/vendor/nikic/php-parser/test/PhpParser/Node/Stmt/PropertyTest.php
deleted file mode 100644
index e5d69fba5de027402baee0c16fc96737c2333f24..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/PhpParser/Node/Stmt/PropertyTest.php
+++ /dev/null
@@ -1,44 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser\Node\Stmt;
-
-class PropertyTest extends \PHPUnit\Framework\TestCase
-{
-    /**
-     * @dataProvider provideModifiers
-     */
-    public function testModifiers($modifier) {
-        $node = new Property(
-            constant('PhpParser\Node\Stmt\Class_::MODIFIER_' . strtoupper($modifier)),
-            [] // invalid
-        );
-
-        $this->assertTrue($node->{'is' . $modifier}());
-    }
-
-    public function testNoModifiers() {
-        $node = new Property(0, []);
-
-        $this->assertTrue($node->isPublic());
-        $this->assertFalse($node->isProtected());
-        $this->assertFalse($node->isPrivate());
-        $this->assertFalse($node->isStatic());
-    }
-
-    public function testStaticImplicitlyPublic() {
-        $node = new Property(Class_::MODIFIER_STATIC, []);
-        $this->assertTrue($node->isPublic());
-        $this->assertFalse($node->isProtected());
-        $this->assertFalse($node->isPrivate());
-        $this->assertTrue($node->isStatic());
-    }
-
-    public function provideModifiers() {
-        return [
-            ['public'],
-            ['protected'],
-            ['private'],
-            ['static'],
-        ];
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/NodeAbstractTest.php b/vendor/nikic/php-parser/test/PhpParser/NodeAbstractTest.php
deleted file mode 100644
index 071b8f2a3a66ffc7c3f0e8e300de59a342b45243..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/PhpParser/NodeAbstractTest.php
+++ /dev/null
@@ -1,325 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser;
-
-class DummyNode extends NodeAbstract
-{
-    public $subNode1;
-    public $subNode2;
-
-    public function __construct($subNode1, $subNode2, $attributes) {
-        parent::__construct($attributes);
-        $this->subNode1 = $subNode1;
-        $this->subNode2 = $subNode2;
-    }
-
-    public function getSubNodeNames() : array {
-        return ['subNode1', 'subNode2'];
-    }
-
-    // This method is only overwritten because the node is located in an unusual namespace
-    public function getType() : string {
-        return 'Dummy';
-    }
-}
-
-class NodeAbstractTest extends \PHPUnit\Framework\TestCase
-{
-    public function provideNodes() {
-        $attributes = [
-            'startLine' => 10,
-            'endLine' => 11,
-            'startTokenPos' => 12,
-            'endTokenPos' => 13,
-            'startFilePos' => 14,
-            'endFilePos' => 15,
-            'comments'  => [
-                new Comment('// Comment' . "\n"),
-                new Comment\Doc('/** doc comment */'),
-            ],
-        ];
-
-        $node = new DummyNode('value1', 'value2', $attributes);
-        $node->notSubNode = 'value3';
-
-        return [
-            [$attributes, $node],
-        ];
-    }
-
-    /**
-     * @dataProvider provideNodes
-     */
-    public function testConstruct(array $attributes, Node $node) {
-        $this->assertSame('Dummy', $node->getType());
-        $this->assertSame(['subNode1', 'subNode2'], $node->getSubNodeNames());
-        $this->assertSame(10, $node->getLine());
-        $this->assertSame(10, $node->getStartLine());
-        $this->assertSame(11, $node->getEndLine());
-        $this->assertSame(12, $node->getStartTokenPos());
-        $this->assertSame(13, $node->getEndTokenPos());
-        $this->assertSame(14, $node->getStartFilePos());
-        $this->assertSame(15, $node->getEndFilePos());
-        $this->assertSame('/** doc comment */', $node->getDocComment()->getText());
-        $this->assertSame('value1', $node->subNode1);
-        $this->assertSame('value2', $node->subNode2);
-        $this->assertObjectHasAttribute('subNode1', $node);
-        $this->assertObjectHasAttribute('subNode2', $node);
-        $this->assertObjectNotHasAttribute('subNode3', $node);
-        $this->assertSame($attributes, $node->getAttributes());
-        $this->assertSame($attributes['comments'], $node->getComments());
-
-        return $node;
-    }
-
-    /**
-     * @dataProvider provideNodes
-     */
-    public function testGetDocComment(array $attributes, Node $node) {
-        $this->assertSame('/** doc comment */', $node->getDocComment()->getText());
-        $comments = $node->getComments();
-
-        array_pop($comments); // remove doc comment
-        $node->setAttribute('comments', $comments);
-        $this->assertNull($node->getDocComment());
-
-        array_pop($comments); // remove comment
-        $node->setAttribute('comments', $comments);
-        $this->assertNull($node->getDocComment());
-    }
-
-    public function testSetDocComment() {
-        $node = new DummyNode(null, null, []);
-
-        // Add doc comment to node without comments
-        $docComment = new Comment\Doc('/** doc */');
-        $node->setDocComment($docComment);
-        $this->assertSame($docComment, $node->getDocComment());
-
-        // Replace it
-        $docComment = new Comment\Doc('/** doc 2 */');
-        $node->setDocComment($docComment);
-        $this->assertSame($docComment, $node->getDocComment());
-
-        // Add docmment to node with other comments
-        $c1 = new Comment('/* foo */');
-        $c2 = new Comment('/* bar */');
-        $docComment = new Comment\Doc('/** baz */');
-        $node->setAttribute('comments', [$c1, $c2]);
-        $node->setDocComment($docComment);
-        $this->assertSame([$c1, $c2, $docComment], $node->getAttribute('comments'));
-    }
-
-    /**
-     * @dataProvider provideNodes
-     */
-    public function testChange(array $attributes, Node $node) {
-        // direct modification
-        $node->subNode = 'newValue';
-        $this->assertSame('newValue', $node->subNode);
-
-        // indirect modification
-        $subNode =& $node->subNode;
-        $subNode = 'newNewValue';
-        $this->assertSame('newNewValue', $node->subNode);
-
-        // removal
-        unset($node->subNode);
-        $this->assertObjectNotHasAttribute('subNode', $node);
-    }
-
-    /**
-     * @dataProvider provideNodes
-     */
-    public function testIteration(array $attributes, Node $node) {
-        // Iteration is simple object iteration over properties,
-        // not over subnodes
-        $i = 0;
-        foreach ($node as $key => $value) {
-            if ($i === 0) {
-                $this->assertSame('subNode1', $key);
-                $this->assertSame('value1', $value);
-            } elseif ($i === 1) {
-                $this->assertSame('subNode2', $key);
-                $this->assertSame('value2', $value);
-            } elseif ($i === 2) {
-                $this->assertSame('notSubNode', $key);
-                $this->assertSame('value3', $value);
-            } else {
-                throw new \Exception;
-            }
-            $i++;
-        }
-        $this->assertSame(3, $i);
-    }
-
-    public function testAttributes() {
-        /** @var $node Node */
-        $node = $this->getMockForAbstractClass(NodeAbstract::class);
-
-        $this->assertEmpty($node->getAttributes());
-
-        $node->setAttribute('key', 'value');
-        $this->assertTrue($node->hasAttribute('key'));
-        $this->assertSame('value', $node->getAttribute('key'));
-
-        $this->assertFalse($node->hasAttribute('doesNotExist'));
-        $this->assertNull($node->getAttribute('doesNotExist'));
-        $this->assertSame('default', $node->getAttribute('doesNotExist', 'default'));
-
-        $node->setAttribute('null', null);
-        $this->assertTrue($node->hasAttribute('null'));
-        $this->assertNull($node->getAttribute('null'));
-        $this->assertNull($node->getAttribute('null', 'default'));
-
-        $this->assertSame(
-            [
-                'key'  => 'value',
-                'null' => null,
-            ],
-            $node->getAttributes()
-        );
-
-        $node->setAttributes(
-            [
-                'a' => 'b',
-                'c' => null,
-            ]
-        );
-        $this->assertSame(
-            [
-                'a' => 'b',
-                'c' => null,
-            ],
-            $node->getAttributes()
-        );
-    }
-
-    public function testJsonSerialization() {
-        $code = <<<'PHP'
-<?php
-// comment
-/** doc comment */
-function functionName(&$a = 0, $b = 1.0) {
-    echo 'Foo';
-}
-PHP;
-        $expected = <<<'JSON'
-[
-    {
-        "nodeType": "Stmt_Function",
-        "byRef": false,
-        "name": {
-            "nodeType": "Identifier",
-            "name": "functionName",
-            "attributes": {
-                "startLine": 4,
-                "endLine": 4
-            }
-        },
-        "params": [
-            {
-                "nodeType": "Param",
-                "type": null,
-                "byRef": true,
-                "variadic": false,
-                "var": {
-                    "nodeType": "Expr_Variable",
-                    "name": "a",
-                    "attributes": {
-                        "startLine": 4,
-                        "endLine": 4
-                    }
-                },
-                "default": {
-                    "nodeType": "Scalar_LNumber",
-                    "value": 0,
-                    "attributes": {
-                        "startLine": 4,
-                        "endLine": 4,
-                        "kind": 10
-                    }
-                },
-                "attributes": {
-                    "startLine": 4,
-                    "endLine": 4
-                }
-            },
-            {
-                "nodeType": "Param",
-                "type": null,
-                "byRef": false,
-                "variadic": false,
-                "var": {
-                    "nodeType": "Expr_Variable",
-                    "name": "b",
-                    "attributes": {
-                        "startLine": 4,
-                        "endLine": 4
-                    }
-                },
-                "default": {
-                    "nodeType": "Scalar_DNumber",
-                    "value": 1,
-                    "attributes": {
-                        "startLine": 4,
-                        "endLine": 4
-                    }
-                },
-                "attributes": {
-                    "startLine": 4,
-                    "endLine": 4
-                }
-            }
-        ],
-        "returnType": null,
-        "stmts": [
-            {
-                "nodeType": "Stmt_Echo",
-                "exprs": [
-                    {
-                        "nodeType": "Scalar_String",
-                        "value": "Foo",
-                        "attributes": {
-                            "startLine": 5,
-                            "endLine": 5,
-                            "kind": 1
-                        }
-                    }
-                ],
-                "attributes": {
-                    "startLine": 5,
-                    "endLine": 5
-                }
-            }
-        ],
-        "attributes": {
-            "startLine": 4,
-            "comments": [
-                {
-                    "nodeType": "Comment",
-                    "text": "\/\/ comment\n",
-                    "line": 2,
-                    "filePos": 6,
-                    "tokenPos": 1
-                },
-                {
-                    "nodeType": "Comment_Doc",
-                    "text": "\/** doc comment *\/",
-                    "line": 3,
-                    "filePos": 17,
-                    "tokenPos": 2
-                }
-            ],
-            "endLine": 6
-        }
-    }
-]
-JSON;
-
-        $parser = new Parser\Php7(new Lexer());
-        $stmts = $parser->parse(canonicalize($code));
-        $json = json_encode($stmts, JSON_PRETTY_PRINT);
-        $this->assertEquals(canonicalize($expected), canonicalize($json));
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/NodeDumperTest.php b/vendor/nikic/php-parser/test/PhpParser/NodeDumperTest.php
deleted file mode 100644
index 036c3d1ee55ec09d5d5ed281d8ef3383a8754ae6..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/PhpParser/NodeDumperTest.php
+++ /dev/null
@@ -1,106 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser;
-
-class NodeDumperTest extends \PHPUnit\Framework\TestCase
-{
-    private function canonicalize($string) {
-        return str_replace("\r\n", "\n", $string);
-    }
-
-    /**
-     * @dataProvider provideTestDump
-     */
-    public function testDump($node, $dump) {
-        $dumper = new NodeDumper;
-
-        $this->assertSame($this->canonicalize($dump), $this->canonicalize($dumper->dump($node)));
-    }
-
-    public function provideTestDump() {
-        return [
-            [
-                [],
-'array(
-)'
-            ],
-            [
-                ['Foo', 'Bar', 'Key' => 'FooBar'],
-'array(
-    0: Foo
-    1: Bar
-    Key: FooBar
-)'
-            ],
-            [
-                new Node\Name(['Hallo', 'World']),
-'Name(
-    parts: array(
-        0: Hallo
-        1: World
-    )
-)'
-            ],
-            [
-                new Node\Expr\Array_([
-                    new Node\Expr\ArrayItem(new Node\Scalar\String_('Foo'))
-                ]),
-'Expr_Array(
-    items: array(
-        0: Expr_ArrayItem(
-            key: null
-            value: Scalar_String(
-                value: Foo
-            )
-            byRef: false
-            unpack: false
-        )
-    )
-)'
-            ],
-        ];
-    }
-
-    public function testDumpWithPositions() {
-        $parser = (new ParserFactory)->create(
-            ParserFactory::ONLY_PHP7,
-            new Lexer(['usedAttributes' => ['startLine', 'endLine', 'startFilePos', 'endFilePos']])
-        );
-        $dumper = new NodeDumper(['dumpPositions' => true]);
-
-        $code = "<?php\n\$a = 1;\necho \$a;";
-        $expected = <<<'OUT'
-array(
-    0: Stmt_Expression[2:1 - 2:7](
-        expr: Expr_Assign[2:1 - 2:6](
-            var: Expr_Variable[2:1 - 2:2](
-                name: a
-            )
-            expr: Scalar_LNumber[2:6 - 2:6](
-                value: 1
-            )
-        )
-    )
-    1: Stmt_Echo[3:1 - 3:8](
-        exprs: array(
-            0: Expr_Variable[3:6 - 3:7](
-                name: a
-            )
-        )
-    )
-)
-OUT;
-
-        $stmts = $parser->parse($code);
-        $dump = $dumper->dump($stmts, $code);
-
-        $this->assertSame($this->canonicalize($expected), $this->canonicalize($dump));
-    }
-
-    public function testError() {
-        $this->expectException(\InvalidArgumentException::class);
-        $this->expectExceptionMessage('Can only dump nodes and arrays.');
-        $dumper = new NodeDumper;
-        $dumper->dump(new \stdClass);
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/NodeFinderTest.php b/vendor/nikic/php-parser/test/PhpParser/NodeFinderTest.php
deleted file mode 100644
index 909738a738b2035dcba09697391945b7dba9e8e5..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/PhpParser/NodeFinderTest.php
+++ /dev/null
@@ -1,59 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser;
-
-use PhpParser\Node\Expr;
-
-class NodeFinderTest extends \PHPUnit\Framework\TestCase
-{
-    private function getStmtsAndVars() {
-        $assign = new Expr\Assign(new Expr\Variable('a'), new Expr\BinaryOp\Concat(
-            new Expr\Variable('b'), new Expr\Variable('c')
-        ));
-        $stmts = [new Node\Stmt\Expression($assign)];
-        $vars = [$assign->var, $assign->expr->left, $assign->expr->right];
-        return [$stmts, $vars];
-    }
-
-    public function testFind() {
-        $finder = new NodeFinder;
-        list($stmts, $vars) = $this->getStmtsAndVars();
-        $varFilter = function(Node $node) {
-            return $node instanceof Expr\Variable;
-        };
-        $this->assertSame($vars, $finder->find($stmts, $varFilter));
-        $this->assertSame($vars, $finder->find($stmts[0], $varFilter));
-
-        $noneFilter = function () { return false; };
-        $this->assertSame([], $finder->find($stmts, $noneFilter));
-    }
-
-    public function testFindInstanceOf() {
-        $finder = new NodeFinder;
-        list($stmts, $vars) = $this->getStmtsAndVars();
-        $this->assertSame($vars, $finder->findInstanceOf($stmts, Expr\Variable::class));
-        $this->assertSame($vars, $finder->findInstanceOf($stmts[0], Expr\Variable::class));
-        $this->assertSame([], $finder->findInstanceOf($stmts, Expr\BinaryOp\Mul::class));
-    }
-
-    public function testFindFirst() {
-        $finder = new NodeFinder;
-        list($stmts, $vars) = $this->getStmtsAndVars();
-        $varFilter = function(Node $node) {
-            return $node instanceof Expr\Variable;
-        };
-        $this->assertSame($vars[0], $finder->findFirst($stmts, $varFilter));
-        $this->assertSame($vars[0], $finder->findFirst($stmts[0], $varFilter));
-
-        $noneFilter = function () { return false; };
-        $this->assertNull($finder->findFirst($stmts, $noneFilter));
-    }
-
-    public function testFindFirstInstanceOf() {
-        $finder = new NodeFinder;
-        list($stmts, $vars) = $this->getStmtsAndVars();
-        $this->assertSame($vars[0], $finder->findFirstInstanceOf($stmts, Expr\Variable::class));
-        $this->assertSame($vars[0], $finder->findFirstInstanceOf($stmts[0], Expr\Variable::class));
-        $this->assertNull($finder->findFirstInstanceOf($stmts, Expr\BinaryOp\Mul::class));
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/NodeTraverserTest.php b/vendor/nikic/php-parser/test/PhpParser/NodeTraverserTest.php
deleted file mode 100644
index 2daa9ceaf0c0d2fcc098eec8bc02bb71d7926149..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/PhpParser/NodeTraverserTest.php
+++ /dev/null
@@ -1,344 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser;
-
-use PhpParser\Node\Expr;
-use PhpParser\Node\Scalar\String_;
-
-class NodeTraverserTest extends \PHPUnit\Framework\TestCase
-{
-    public function testNonModifying() {
-        $str1Node = new String_('Foo');
-        $str2Node = new String_('Bar');
-        $echoNode = new Node\Stmt\Echo_([$str1Node, $str2Node]);
-        $stmts    = [$echoNode];
-
-        $visitor = $this->getMockBuilder(NodeVisitor::class)->getMock();
-
-        $visitor->expects($this->at(0))->method('beforeTraverse')->with($stmts);
-        $visitor->expects($this->at(1))->method('enterNode')->with($echoNode);
-        $visitor->expects($this->at(2))->method('enterNode')->with($str1Node);
-        $visitor->expects($this->at(3))->method('leaveNode')->with($str1Node);
-        $visitor->expects($this->at(4))->method('enterNode')->with($str2Node);
-        $visitor->expects($this->at(5))->method('leaveNode')->with($str2Node);
-        $visitor->expects($this->at(6))->method('leaveNode')->with($echoNode);
-        $visitor->expects($this->at(7))->method('afterTraverse')->with($stmts);
-
-        $traverser = new NodeTraverser;
-        $traverser->addVisitor($visitor);
-
-        $this->assertEquals($stmts, $traverser->traverse($stmts));
-    }
-
-    public function testModifying() {
-        $str1Node  = new String_('Foo');
-        $str2Node  = new String_('Bar');
-        $printNode = new Expr\Print_($str1Node);
-
-        // first visitor changes the node, second verifies the change
-        $visitor1 = $this->getMockBuilder(NodeVisitor::class)->getMock();
-        $visitor2 = $this->getMockBuilder(NodeVisitor::class)->getMock();
-
-        // replace empty statements with string1 node
-        $visitor1->expects($this->at(0))->method('beforeTraverse')->with([])
-                 ->willReturn([$str1Node]);
-        $visitor2->expects($this->at(0))->method('beforeTraverse')->with([$str1Node]);
-
-        // replace string1 node with print node
-        $visitor1->expects($this->at(1))->method('enterNode')->with($str1Node)
-                 ->willReturn($printNode);
-        $visitor2->expects($this->at(1))->method('enterNode')->with($printNode);
-
-        // replace string1 node with string2 node
-        $visitor1->expects($this->at(2))->method('enterNode')->with($str1Node)
-                 ->willReturn($str2Node);
-        $visitor2->expects($this->at(2))->method('enterNode')->with($str2Node);
-
-        // replace string2 node with string1 node again
-        $visitor1->expects($this->at(3))->method('leaveNode')->with($str2Node)
-                 ->willReturn($str1Node);
-        $visitor2->expects($this->at(3))->method('leaveNode')->with($str1Node);
-
-        // replace print node with string1 node again
-        $visitor1->expects($this->at(4))->method('leaveNode')->with($printNode)
-                 ->willReturn($str1Node);
-        $visitor2->expects($this->at(4))->method('leaveNode')->with($str1Node);
-
-        // replace string1 node with empty statements again
-        $visitor1->expects($this->at(5))->method('afterTraverse')->with([$str1Node])
-                 ->willReturn([]);
-        $visitor2->expects($this->at(5))->method('afterTraverse')->with([]);
-
-        $traverser = new NodeTraverser;
-        $traverser->addVisitor($visitor1);
-        $traverser->addVisitor($visitor2);
-
-        // as all operations are reversed we end where we start
-        $this->assertEquals([], $traverser->traverse([]));
-    }
-
-    public function testRemove() {
-        $str1Node = new String_('Foo');
-        $str2Node = new String_('Bar');
-
-        $visitor = $this->getMockBuilder(NodeVisitor::class)->getMock();
-
-        // remove the string1 node, leave the string2 node
-        $visitor->expects($this->at(2))->method('leaveNode')->with($str1Node)
-                ->willReturn(NodeTraverser::REMOVE_NODE);
-
-        $traverser = new NodeTraverser;
-        $traverser->addVisitor($visitor);
-
-        $this->assertEquals([$str2Node], $traverser->traverse([$str1Node, $str2Node]));
-    }
-
-    public function testMerge() {
-        $strStart  = new String_('Start');
-        $strMiddle = new String_('End');
-        $strEnd    = new String_('Middle');
-        $strR1     = new String_('Replacement 1');
-        $strR2     = new String_('Replacement 2');
-
-        $visitor = $this->getMockBuilder(NodeVisitor::class)->getMock();
-
-        // replace strMiddle with strR1 and strR2 by merge
-        $visitor->expects($this->at(4))->method('leaveNode')->with($strMiddle)
-                ->willReturn([$strR1, $strR2]);
-
-        $traverser = new NodeTraverser;
-        $traverser->addVisitor($visitor);
-
-        $this->assertEquals(
-            [$strStart, $strR1, $strR2, $strEnd],
-            $traverser->traverse([$strStart, $strMiddle, $strEnd])
-        );
-    }
-
-    public function testInvalidDeepArray() {
-        $this->expectException(\LogicException::class);
-        $this->expectExceptionMessage('Invalid node structure: Contains nested arrays');
-        $strNode = new String_('Foo');
-        $stmts = [[[$strNode]]];
-
-        $traverser = new NodeTraverser;
-        $this->assertEquals($stmts, $traverser->traverse($stmts));
-    }
-
-    public function testDontTraverseChildren() {
-        $strNode = new String_('str');
-        $printNode = new Expr\Print_($strNode);
-        $varNode = new Expr\Variable('foo');
-        $mulNode = new Expr\BinaryOp\Mul($varNode, $varNode);
-        $negNode = new Expr\UnaryMinus($mulNode);
-        $stmts = [$printNode, $negNode];
-
-        $visitor1 = $this->getMockBuilder(NodeVisitor::class)->getMock();
-        $visitor2 = $this->getMockBuilder(NodeVisitor::class)->getMock();
-
-        $visitor1->expects($this->at(1))->method('enterNode')->with($printNode)
-            ->willReturn(NodeTraverser::DONT_TRAVERSE_CHILDREN);
-        $visitor2->expects($this->at(1))->method('enterNode')->with($printNode);
-
-        $visitor1->expects($this->at(2))->method('leaveNode')->with($printNode);
-        $visitor2->expects($this->at(2))->method('leaveNode')->with($printNode);
-
-        $visitor1->expects($this->at(3))->method('enterNode')->with($negNode);
-        $visitor2->expects($this->at(3))->method('enterNode')->with($negNode);
-
-        $visitor1->expects($this->at(4))->method('enterNode')->with($mulNode);
-        $visitor2->expects($this->at(4))->method('enterNode')->with($mulNode)
-            ->willReturn(NodeTraverser::DONT_TRAVERSE_CHILDREN);
-
-        $visitor1->expects($this->at(5))->method('leaveNode')->with($mulNode);
-        $visitor2->expects($this->at(5))->method('leaveNode')->with($mulNode);
-
-        $visitor1->expects($this->at(6))->method('leaveNode')->with($negNode);
-        $visitor2->expects($this->at(6))->method('leaveNode')->with($negNode);
-
-        $traverser = new NodeTraverser;
-        $traverser->addVisitor($visitor1);
-        $traverser->addVisitor($visitor2);
-
-        $this->assertEquals($stmts, $traverser->traverse($stmts));
-    }
-
-    public function testDontTraverseCurrentAndChildren() {
-        // print 'str'; -($foo * $foo);
-        $strNode = new String_('str');
-        $printNode = new Expr\Print_($strNode);
-        $varNode = new Expr\Variable('foo');
-        $mulNode = new Expr\BinaryOp\Mul($varNode, $varNode);
-        $divNode = new Expr\BinaryOp\Div($varNode, $varNode);
-        $negNode = new Expr\UnaryMinus($mulNode);
-        $stmts = [$printNode, $negNode];
-
-        $visitor1 = $this->getMockBuilder(NodeVisitor::class)->getMock();
-        $visitor2 = $this->getMockBuilder(NodeVisitor::class)->getMock();
-
-        $visitor1->expects($this->at(1))->method('enterNode')->with($printNode)
-            ->willReturn(NodeTraverser::DONT_TRAVERSE_CURRENT_AND_CHILDREN);
-        $visitor1->expects($this->at(2))->method('leaveNode')->with($printNode);
-
-        $visitor1->expects($this->at(3))->method('enterNode')->with($negNode);
-        $visitor2->expects($this->at(1))->method('enterNode')->with($negNode);
-
-        $visitor1->expects($this->at(4))->method('enterNode')->with($mulNode)
-            ->willReturn(NodeTraverser::DONT_TRAVERSE_CURRENT_AND_CHILDREN);
-        $visitor1->expects($this->at(5))->method('leaveNode')->with($mulNode)->willReturn($divNode);
-
-        $visitor1->expects($this->at(6))->method('leaveNode')->with($negNode);
-        $visitor2->expects($this->at(2))->method('leaveNode')->with($negNode);
-
-        $traverser = new NodeTraverser;
-        $traverser->addVisitor($visitor1);
-        $traverser->addVisitor($visitor2);
-
-        $resultStmts = $traverser->traverse($stmts);
-
-        $this->assertInstanceOf(Expr\BinaryOp\Div::class, $resultStmts[1]->expr);
-    }
-
-    public function testStopTraversal() {
-        $varNode1 = new Expr\Variable('a');
-        $varNode2 = new Expr\Variable('b');
-        $varNode3 = new Expr\Variable('c');
-        $mulNode = new Expr\BinaryOp\Mul($varNode1, $varNode2);
-        $printNode = new Expr\Print_($varNode3);
-        $stmts = [$mulNode, $printNode];
-
-        // From enterNode() with array parent
-        $visitor = $this->getMockBuilder(NodeVisitor::class)->getMock();
-        $visitor->expects($this->at(1))->method('enterNode')->with($mulNode)
-            ->willReturn(NodeTraverser::STOP_TRAVERSAL);
-        $visitor->expects($this->at(2))->method('afterTraverse');
-        $traverser = new NodeTraverser;
-        $traverser->addVisitor($visitor);
-        $this->assertEquals($stmts, $traverser->traverse($stmts));
-
-        // From enterNode with Node parent
-        $visitor = $this->getMockBuilder(NodeVisitor::class)->getMock();
-        $visitor->expects($this->at(2))->method('enterNode')->with($varNode1)
-            ->willReturn(NodeTraverser::STOP_TRAVERSAL);
-        $visitor->expects($this->at(3))->method('afterTraverse');
-        $traverser = new NodeTraverser;
-        $traverser->addVisitor($visitor);
-        $this->assertEquals($stmts, $traverser->traverse($stmts));
-
-        // From leaveNode with Node parent
-        $visitor = $this->getMockBuilder(NodeVisitor::class)->getMock();
-        $visitor->expects($this->at(3))->method('leaveNode')->with($varNode1)
-            ->willReturn(NodeTraverser::STOP_TRAVERSAL);
-        $visitor->expects($this->at(4))->method('afterTraverse');
-        $traverser = new NodeTraverser;
-        $traverser->addVisitor($visitor);
-        $this->assertEquals($stmts, $traverser->traverse($stmts));
-
-        // From leaveNode with array parent
-        $visitor = $this->getMockBuilder(NodeVisitor::class)->getMock();
-        $visitor->expects($this->at(6))->method('leaveNode')->with($mulNode)
-            ->willReturn(NodeTraverser::STOP_TRAVERSAL);
-        $visitor->expects($this->at(7))->method('afterTraverse');
-        $traverser = new NodeTraverser;
-        $traverser->addVisitor($visitor);
-        $this->assertEquals($stmts, $traverser->traverse($stmts));
-
-        // Check that pending array modifications are still carried out
-        $visitor = $this->getMockBuilder(NodeVisitor::class)->getMock();
-        $visitor->expects($this->at(6))->method('leaveNode')->with($mulNode)
-            ->willReturn(NodeTraverser::REMOVE_NODE);
-        $visitor->expects($this->at(7))->method('enterNode')->with($printNode)
-            ->willReturn(NodeTraverser::STOP_TRAVERSAL);
-        $visitor->expects($this->at(8))->method('afterTraverse');
-        $traverser = new NodeTraverser;
-        $traverser->addVisitor($visitor);
-        $this->assertEquals([$printNode], $traverser->traverse($stmts));
-
-    }
-
-    public function testRemovingVisitor() {
-        $visitor1 = $this->getMockBuilder(NodeVisitor::class)->getMock();
-        $visitor2 = $this->getMockBuilder(NodeVisitor::class)->getMock();
-        $visitor3 = $this->getMockBuilder(NodeVisitor::class)->getMock();
-
-        $traverser = new NodeTraverser;
-        $traverser->addVisitor($visitor1);
-        $traverser->addVisitor($visitor2);
-        $traverser->addVisitor($visitor3);
-
-        $preExpected = [$visitor1, $visitor2, $visitor3];
-        $this->assertAttributeSame($preExpected, 'visitors', $traverser, 'The appropriate visitors have not been added');
-
-        $traverser->removeVisitor($visitor2);
-
-        $postExpected = [0 => $visitor1, 2 => $visitor3];
-        $this->assertAttributeSame($postExpected, 'visitors', $traverser, 'The appropriate visitors are not present after removal');
-    }
-
-    public function testNoCloneNodes() {
-        $stmts = [new Node\Stmt\Echo_([new String_('Foo'), new String_('Bar')])];
-
-        $traverser = new NodeTraverser;
-
-        $this->assertSame($stmts, $traverser->traverse($stmts));
-    }
-
-    /**
-     * @dataProvider provideTestInvalidReturn
-     */
-    public function testInvalidReturn($visitor, $message) {
-        $this->expectException(\LogicException::class);
-        $this->expectExceptionMessage($message);
-
-        $stmts = [new Node\Stmt\Expression(new Node\Scalar\LNumber(42))];
-
-        $traverser = new NodeTraverser();
-        $traverser->addVisitor($visitor);
-        $traverser->traverse($stmts);
-    }
-
-    public function provideTestInvalidReturn() {
-        $visitor1 = $this->getMockBuilder(NodeVisitor::class)->getMock();
-        $visitor1->expects($this->at(1))->method('enterNode')
-            ->willReturn('foobar');
-
-        $visitor2 = $this->getMockBuilder(NodeVisitor::class)->getMock();
-        $visitor2->expects($this->at(2))->method('enterNode')
-            ->willReturn('foobar');
-
-        $visitor3 = $this->getMockBuilder(NodeVisitor::class)->getMock();
-        $visitor3->expects($this->at(3))->method('leaveNode')
-            ->willReturn('foobar');
-
-        $visitor4 = $this->getMockBuilder(NodeVisitor::class)->getMock();
-        $visitor4->expects($this->at(4))->method('leaveNode')
-            ->willReturn('foobar');
-
-        $visitor5 = $this->getMockBuilder(NodeVisitor::class)->getMock();
-        $visitor5->expects($this->at(3))->method('leaveNode')
-            ->willReturn([new Node\Scalar\DNumber(42.0)]);
-
-        $visitor6 = $this->getMockBuilder(NodeVisitor::class)->getMock();
-        $visitor6->expects($this->at(4))->method('leaveNode')
-            ->willReturn(false);
-
-        $visitor7 = $this->getMockBuilder(NodeVisitor::class)->getMock();
-        $visitor7->expects($this->at(1))->method('enterNode')
-            ->willReturn(new Node\Scalar\LNumber(42));
-
-        $visitor8 = $this->getMockBuilder(NodeVisitor::class)->getMock();
-        $visitor8->expects($this->at(2))->method('enterNode')
-            ->willReturn(new Node\Stmt\Return_());
-
-        return [
-            [$visitor1, 'enterNode() returned invalid value of type string'],
-            [$visitor2, 'enterNode() returned invalid value of type string'],
-            [$visitor3, 'leaveNode() returned invalid value of type string'],
-            [$visitor4, 'leaveNode() returned invalid value of type string'],
-            [$visitor5, 'leaveNode() may only return an array if the parent structure is an array'],
-            [$visitor6, 'bool(false) return from leaveNode() no longer supported. Return NodeTraverser::REMOVE_NODE instead'],
-            [$visitor7, 'Trying to replace statement (Stmt_Expression) with expression (Scalar_LNumber). Are you missing a Stmt_Expression wrapper?'],
-            [$visitor8, 'Trying to replace expression (Scalar_LNumber) with statement (Stmt_Return)'],
-        ];
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/NodeVisitor/FindingVisitorTest.php b/vendor/nikic/php-parser/test/PhpParser/NodeVisitor/FindingVisitorTest.php
deleted file mode 100644
index 27cb6dd4801bef527f4cf1811061a03b3ca45279..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/PhpParser/NodeVisitor/FindingVisitorTest.php
+++ /dev/null
@@ -1,53 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser\NodeVisitor;
-
-use PhpParser\Node;
-use PhpParser\Node\Expr;
-use PhpParser\NodeTraverser;
-
-class FindingVisitorTest extends \PHPUnit\Framework\TestCase
-{
-    public function testFindVariables() {
-        $traverser = new NodeTraverser();
-        $visitor = new FindingVisitor(function(Node $node) {
-            return $node instanceof Node\Expr\Variable;
-        });
-        $traverser->addVisitor($visitor);
-
-        $assign = new Expr\Assign(new Expr\Variable('a'), new Expr\BinaryOp\Concat(
-            new Expr\Variable('b'), new Expr\Variable('c')
-        ));
-        $stmts = [new Node\Stmt\Expression($assign)];
-
-        $traverser->traverse($stmts);
-        $this->assertSame([
-            $assign->var,
-            $assign->expr->left,
-            $assign->expr->right,
-        ], $visitor->getFoundNodes());
-    }
-
-    public function testFindAll() {
-        $traverser = new NodeTraverser();
-        $visitor = new FindingVisitor(function(Node $node) {
-            return true; // All nodes
-        });
-        $traverser->addVisitor($visitor);
-
-        $assign = new Expr\Assign(new Expr\Variable('a'), new Expr\BinaryOp\Concat(
-            new Expr\Variable('b'), new Expr\Variable('c')
-        ));
-        $stmts = [new Node\Stmt\Expression($assign)];
-
-        $traverser->traverse($stmts);
-        $this->assertSame([
-            $stmts[0],
-            $assign,
-            $assign->var,
-            $assign->expr,
-            $assign->expr->left,
-            $assign->expr->right,
-        ], $visitor->getFoundNodes());
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/NodeVisitor/FirstFindingVisitorTest.php b/vendor/nikic/php-parser/test/PhpParser/NodeVisitor/FirstFindingVisitorTest.php
deleted file mode 100644
index 9ae8932f92372874ee0d58d42558005090a6ee06..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/PhpParser/NodeVisitor/FirstFindingVisitorTest.php
+++ /dev/null
@@ -1,38 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser\NodeVisitor;
-
-use PhpParser\Node;
-use PhpParser\Node\Expr;
-use PhpParser\NodeTraverser;
-
-class FirstFindingVisitorTest extends \PHPUnit\Framework\TestCase
-{
-    public function testFindFirstVariable() {
-        $traverser = new NodeTraverser();
-        $visitor = new FirstFindingVisitor(function(Node $node) {
-            return $node instanceof Node\Expr\Variable;
-        });
-        $traverser->addVisitor($visitor);
-
-        $assign = new Expr\Assign(new Expr\Variable('a'), new Expr\Variable('b'));
-        $stmts = [new Node\Stmt\Expression($assign)];
-
-        $traverser->traverse($stmts);
-        $this->assertSame($assign->var, $visitor->getFoundNode());
-    }
-
-    public function testFindNone() {
-        $traverser = new NodeTraverser();
-        $visitor = new FirstFindingVisitor(function(Node $node) {
-            return $node instanceof Node\Expr\BinaryOp;
-        });
-        $traverser->addVisitor($visitor);
-
-        $assign = new Expr\Assign(new Expr\Variable('a'), new Expr\Variable('b'));
-        $stmts = [new Node\Stmt\Expression($assign)];
-
-        $traverser->traverse($stmts);
-        $this->assertNull($visitor->getFoundNode());
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/NodeVisitor/NameResolverTest.php b/vendor/nikic/php-parser/test/PhpParser/NodeVisitor/NameResolverTest.php
deleted file mode 100644
index 571eaaea39e2e6ec256b9b7fcf35d61c50b0cfe0..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/PhpParser/NodeVisitor/NameResolverTest.php
+++ /dev/null
@@ -1,505 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser\NodeVisitor;
-
-use PhpParser;
-use PhpParser\Node;
-use PhpParser\Node\Expr;
-use PhpParser\Node\Name;
-use PhpParser\Node\Stmt;
-
-class NameResolverTest extends \PHPUnit\Framework\TestCase
-{
-    private function canonicalize($string) {
-        return str_replace("\r\n", "\n", $string);
-    }
-
-    /**
-     * @covers \PhpParser\NodeVisitor\NameResolver
-     */
-    public function testResolveNames() {
-        $code = <<<'EOC'
-<?php
-
-namespace Foo {
-    use Hallo as Hi;
-
-    new Bar();
-    new Hi();
-    new Hi\Bar();
-    new \Bar();
-    new namespace\Bar();
-
-    bar();
-    hi();
-    Hi\bar();
-    foo\bar();
-    \bar();
-    namespace\bar();
-}
-namespace {
-    use Hallo as Hi;
-
-    new Bar();
-    new Hi();
-    new Hi\Bar();
-    new \Bar();
-    new namespace\Bar();
-
-    bar();
-    hi();
-    Hi\bar();
-    foo\bar();
-    \bar();
-    namespace\bar();
-}
-namespace Bar {
-    use function foo\bar as baz;
-    use const foo\BAR as BAZ;
-    use foo as bar;
-
-    bar();
-    baz();
-    bar\foo();
-    baz\foo();
-    BAR();
-    BAZ();
-    BAR\FOO();
-    BAZ\FOO();
-
-    bar;
-    baz;
-    bar\foo;
-    baz\foo;
-    BAR;
-    BAZ;
-    BAR\FOO;
-    BAZ\FOO;
-}
-namespace Baz {
-    use A\T\{B\C, D\E};
-    use function X\T\{b\c, d\e};
-    use const Y\T\{B\C, D\E};
-    use Z\T\{G, function f, const K};
-
-    new C;
-    new E;
-    new C\D;
-    new E\F;
-    new G;
-
-    c();
-    e();
-    f();
-    C;
-    E;
-    K;
-
-    class ClassWithTypeProperties
-    {
-        public float $php = 7.4;
-        public ?Foo $person;
-        protected static ?bool $probability;
-    }
-}
-EOC;
-        $expectedCode = <<<'EOC'
-namespace Foo {
-    use Hallo as Hi;
-    new \Foo\Bar();
-    new \Hallo();
-    new \Hallo\Bar();
-    new \Bar();
-    new \Foo\Bar();
-    bar();
-    hi();
-    \Hallo\bar();
-    \Foo\foo\bar();
-    \bar();
-    \Foo\bar();
-}
-namespace {
-    use Hallo as Hi;
-    new \Bar();
-    new \Hallo();
-    new \Hallo\Bar();
-    new \Bar();
-    new \Bar();
-    \bar();
-    \hi();
-    \Hallo\bar();
-    \foo\bar();
-    \bar();
-    \bar();
-}
-namespace Bar {
-    use function foo\bar as baz;
-    use const foo\BAR as BAZ;
-    use foo as bar;
-    bar();
-    \foo\bar();
-    \foo\foo();
-    \Bar\baz\foo();
-    BAR();
-    \foo\bar();
-    \foo\FOO();
-    \Bar\BAZ\FOO();
-    bar;
-    baz;
-    \foo\foo;
-    \Bar\baz\foo;
-    BAR;
-    \foo\BAR;
-    \foo\FOO;
-    \Bar\BAZ\FOO;
-}
-namespace Baz {
-    use A\T\{B\C, D\E};
-    use function X\T\{b\c, d\e};
-    use const Y\T\{B\C, D\E};
-    use Z\T\{G, function f, const K};
-    new \A\T\B\C();
-    new \A\T\D\E();
-    new \A\T\B\C\D();
-    new \A\T\D\E\F();
-    new \Z\T\G();
-    \X\T\b\c();
-    \X\T\d\e();
-    \Z\T\f();
-    \Y\T\B\C;
-    \Y\T\D\E;
-    \Z\T\K;
-    class ClassWithTypeProperties
-    {
-        public float $php = 7.4;
-        public ?\Baz\Foo $person;
-        protected static ?bool $probability;
-    }
-}
-EOC;
-
-        $parser        = new PhpParser\Parser\Php7(new PhpParser\Lexer\Emulative);
-        $prettyPrinter = new PhpParser\PrettyPrinter\Standard;
-        $traverser     = new PhpParser\NodeTraverser;
-        $traverser->addVisitor(new NameResolver);
-
-        $stmts = $parser->parse($code);
-        $stmts = $traverser->traverse($stmts);
-
-        $this->assertSame(
-            $this->canonicalize($expectedCode),
-            $prettyPrinter->prettyPrint($stmts)
-        );
-    }
-
-    /**
-     * @covers \PhpParser\NodeVisitor\NameResolver
-     */
-    public function testResolveLocations() {
-        $code = <<<'EOC'
-<?php
-namespace NS;
-
-class A extends B implements C, D {
-    use E, F, G {
-        f as private g;
-        E::h as i;
-        E::j insteadof F, G;
-    }
-}
-
-interface A extends C, D {
-    public function a(A $a) : A;
-}
-
-function f(A $a) : A {}
-function f2(array $a) : array {}
-function(A $a) : A {};
-
-function fn3(?A $a) : ?A {}
-function fn4(?array $a) : ?array {}
-
-A::b();
-A::$b;
-A::B;
-new A;
-$a instanceof A;
-
-namespace\a();
-namespace\A;
-
-try {
-    $someThing;
-} catch (A $a) {
-    $someThingElse;
-}
-EOC;
-        $expectedCode = <<<'EOC'
-namespace NS;
-
-class A extends \NS\B implements \NS\C, \NS\D
-{
-    use \NS\E, \NS\F, \NS\G {
-        f as private g;
-        \NS\E::h as i;
-        \NS\E::j insteadof \NS\F, \NS\G;
-    }
-}
-interface A extends \NS\C, \NS\D
-{
-    public function a(\NS\A $a) : \NS\A;
-}
-function f(\NS\A $a) : \NS\A
-{
-}
-function f2(array $a) : array
-{
-}
-function (\NS\A $a) : \NS\A {
-};
-function fn3(?\NS\A $a) : ?\NS\A
-{
-}
-function fn4(?array $a) : ?array
-{
-}
-\NS\A::b();
-\NS\A::$b;
-\NS\A::B;
-new \NS\A();
-$a instanceof \NS\A;
-\NS\a();
-\NS\A;
-try {
-    $someThing;
-} catch (\NS\A $a) {
-    $someThingElse;
-}
-EOC;
-
-        $parser        = new PhpParser\Parser\Php7(new PhpParser\Lexer\Emulative);
-        $prettyPrinter = new PhpParser\PrettyPrinter\Standard;
-        $traverser     = new PhpParser\NodeTraverser;
-        $traverser->addVisitor(new NameResolver);
-
-        $stmts = $parser->parse($code);
-        $stmts = $traverser->traverse($stmts);
-
-        $this->assertSame(
-            $this->canonicalize($expectedCode),
-            $prettyPrinter->prettyPrint($stmts)
-        );
-    }
-
-    public function testNoResolveSpecialName() {
-        $stmts = [new Node\Expr\New_(new Name('self'))];
-
-        $traverser = new PhpParser\NodeTraverser;
-        $traverser->addVisitor(new NameResolver);
-
-        $this->assertEquals($stmts, $traverser->traverse($stmts));
-    }
-
-    public function testAddDeclarationNamespacedName() {
-        $nsStmts = [
-            new Stmt\Class_('A'),
-            new Stmt\Interface_('B'),
-            new Stmt\Function_('C'),
-            new Stmt\Const_([
-                new Node\Const_('D', new Node\Scalar\LNumber(42))
-            ]),
-            new Stmt\Trait_('E'),
-            new Expr\New_(new Stmt\Class_(null)),
-        ];
-
-        $traverser = new PhpParser\NodeTraverser;
-        $traverser->addVisitor(new NameResolver);
-
-        $stmts = $traverser->traverse([new Stmt\Namespace_(new Name('NS'), $nsStmts)]);
-        $this->assertSame('NS\\A', (string) $stmts[0]->stmts[0]->namespacedName);
-        $this->assertSame('NS\\B', (string) $stmts[0]->stmts[1]->namespacedName);
-        $this->assertSame('NS\\C', (string) $stmts[0]->stmts[2]->namespacedName);
-        $this->assertSame('NS\\D', (string) $stmts[0]->stmts[3]->consts[0]->namespacedName);
-        $this->assertSame('NS\\E', (string) $stmts[0]->stmts[4]->namespacedName);
-        $this->assertObjectNotHasAttribute('namespacedName', $stmts[0]->stmts[5]->class);
-
-        $stmts = $traverser->traverse([new Stmt\Namespace_(null, $nsStmts)]);
-        $this->assertSame('A',     (string) $stmts[0]->stmts[0]->namespacedName);
-        $this->assertSame('B',     (string) $stmts[0]->stmts[1]->namespacedName);
-        $this->assertSame('C',     (string) $stmts[0]->stmts[2]->namespacedName);
-        $this->assertSame('D',     (string) $stmts[0]->stmts[3]->consts[0]->namespacedName);
-        $this->assertSame('E',     (string) $stmts[0]->stmts[4]->namespacedName);
-        $this->assertObjectNotHasAttribute('namespacedName', $stmts[0]->stmts[5]->class);
-    }
-
-    public function testAddRuntimeResolvedNamespacedName() {
-        $stmts = [
-            new Stmt\Namespace_(new Name('NS'), [
-                new Expr\FuncCall(new Name('foo')),
-                new Expr\ConstFetch(new Name('FOO')),
-            ]),
-            new Stmt\Namespace_(null, [
-                new Expr\FuncCall(new Name('foo')),
-                new Expr\ConstFetch(new Name('FOO')),
-            ]),
-        ];
-
-        $traverser = new PhpParser\NodeTraverser;
-        $traverser->addVisitor(new NameResolver);
-        $stmts = $traverser->traverse($stmts);
-
-        $this->assertSame('NS\\foo', (string) $stmts[0]->stmts[0]->name->getAttribute('namespacedName'));
-        $this->assertSame('NS\\FOO', (string) $stmts[0]->stmts[1]->name->getAttribute('namespacedName'));
-
-        $this->assertFalse($stmts[1]->stmts[0]->name->hasAttribute('namespacedName'));
-        $this->assertFalse($stmts[1]->stmts[1]->name->hasAttribute('namespacedName'));
-    }
-
-    /**
-     * @dataProvider provideTestError
-     */
-    public function testError(Node $stmt, $errorMsg) {
-        $this->expectException(\PhpParser\Error::class);
-        $this->expectExceptionMessage($errorMsg);
-
-        $traverser = new PhpParser\NodeTraverser;
-        $traverser->addVisitor(new NameResolver);
-        $traverser->traverse([$stmt]);
-    }
-
-    public function provideTestError() {
-        return [
-            [
-                new Stmt\Use_([
-                    new Stmt\UseUse(new Name('A\B'), 'B', 0, ['startLine' => 1]),
-                    new Stmt\UseUse(new Name('C\D'), 'B', 0, ['startLine' => 2]),
-                ], Stmt\Use_::TYPE_NORMAL),
-                'Cannot use C\D as B because the name is already in use on line 2'
-            ],
-            [
-                new Stmt\Use_([
-                    new Stmt\UseUse(new Name('a\b'), 'b', 0, ['startLine' => 1]),
-                    new Stmt\UseUse(new Name('c\d'), 'B', 0, ['startLine' => 2]),
-                ], Stmt\Use_::TYPE_FUNCTION),
-                'Cannot use function c\d as B because the name is already in use on line 2'
-            ],
-            [
-                new Stmt\Use_([
-                    new Stmt\UseUse(new Name('A\B'), 'B', 0, ['startLine' => 1]),
-                    new Stmt\UseUse(new Name('C\D'), 'B', 0, ['startLine' => 2]),
-                ], Stmt\Use_::TYPE_CONSTANT),
-                'Cannot use const C\D as B because the name is already in use on line 2'
-            ],
-            [
-                new Expr\New_(new Name\FullyQualified('self', ['startLine' => 3])),
-                "'\\self' is an invalid class name on line 3"
-            ],
-            [
-                new Expr\New_(new Name\Relative('self', ['startLine' => 3])),
-                "'\\self' is an invalid class name on line 3"
-            ],
-            [
-                new Expr\New_(new Name\FullyQualified('PARENT', ['startLine' => 3])),
-                "'\\PARENT' is an invalid class name on line 3"
-            ],
-            [
-                new Expr\New_(new Name\Relative('STATIC', ['startLine' => 3])),
-                "'\\STATIC' is an invalid class name on line 3"
-            ],
-        ];
-    }
-
-    public function testClassNameIsCaseInsensitive()
-    {
-        $source = <<<'EOC'
-<?php
-namespace Foo;
-use Bar\Baz;
-$test = new baz();
-EOC;
-
-        $parser = new PhpParser\Parser\Php7(new PhpParser\Lexer\Emulative);
-        $stmts = $parser->parse($source);
-
-        $traverser = new PhpParser\NodeTraverser;
-        $traverser->addVisitor(new NameResolver);
-
-        $stmts = $traverser->traverse($stmts);
-        $stmt = $stmts[0];
-
-        $assign = $stmt->stmts[1]->expr;
-        $this->assertSame(['Bar', 'Baz'], $assign->expr->class->parts);
-    }
-
-    public function testSpecialClassNamesAreCaseInsensitive() {
-        $source = <<<'EOC'
-<?php
-namespace Foo;
-
-class Bar
-{
-    public static function method()
-    {
-        SELF::method();
-        PARENT::method();
-        STATIC::method();
-    }
-}
-EOC;
-
-        $parser = new PhpParser\Parser\Php7(new PhpParser\Lexer\Emulative);
-        $stmts = $parser->parse($source);
-
-        $traverser = new PhpParser\NodeTraverser;
-        $traverser->addVisitor(new NameResolver);
-
-        $stmts = $traverser->traverse($stmts);
-        $classStmt = $stmts[0];
-        $methodStmt = $classStmt->stmts[0]->stmts[0];
-
-        $this->assertSame('SELF', (string) $methodStmt->stmts[0]->expr->class);
-        $this->assertSame('PARENT', (string) $methodStmt->stmts[1]->expr->class);
-        $this->assertSame('STATIC', (string) $methodStmt->stmts[2]->expr->class);
-    }
-
-    public function testAddOriginalNames() {
-        $traverser = new PhpParser\NodeTraverser;
-        $traverser->addVisitor(new NameResolver(null, ['preserveOriginalNames' => true]));
-
-        $n1 = new Name('Bar');
-        $n2 = new Name('bar');
-        $origStmts = [
-            new Stmt\Namespace_(new Name('Foo'), [
-                new Expr\ClassConstFetch($n1, 'FOO'),
-                new Expr\FuncCall($n2),
-            ])
-        ];
-
-        $stmts = $traverser->traverse($origStmts);
-
-        $this->assertSame($n1, $stmts[0]->stmts[0]->class->getAttribute('originalName'));
-        $this->assertSame($n2, $stmts[0]->stmts[1]->name->getAttribute('originalName'));
-    }
-
-    public function testAttributeOnlyMode() {
-        $traverser = new PhpParser\NodeTraverser;
-        $traverser->addVisitor(new NameResolver(null, ['replaceNodes' => false]));
-
-        $n1 = new Name('Bar');
-        $n2 = new Name('bar');
-        $origStmts = [
-            new Stmt\Namespace_(new Name('Foo'), [
-                new Expr\ClassConstFetch($n1, 'FOO'),
-                new Expr\FuncCall($n2),
-            ])
-        ];
-
-        $traverser->traverse($origStmts);
-
-        $this->assertEquals(
-            new Name\FullyQualified('Foo\Bar'), $n1->getAttribute('resolvedName'));
-        $this->assertFalse($n2->hasAttribute('resolvedName'));
-        $this->assertEquals(
-            new Name\FullyQualified('Foo\bar'), $n2->getAttribute('namespacedName'));
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/Parser/MultipleTest.php b/vendor/nikic/php-parser/test/PhpParser/Parser/MultipleTest.php
deleted file mode 100644
index f89e7bf6280b56781797c035484f6cd26aaf50a7..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/PhpParser/Parser/MultipleTest.php
+++ /dev/null
@@ -1,94 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser\Parser;
-
-use PhpParser\Error;
-use PhpParser\Lexer;
-use PhpParser\Node\Expr;
-use PhpParser\Node\Scalar\LNumber;
-use PhpParser\Node\Stmt;
-use PhpParser\ParserTest;
-
-class MultipleTest extends ParserTest
-{
-    // This provider is for the generic parser tests, just pick an arbitrary order here
-    protected function getParser(Lexer $lexer) {
-        return new Multiple([new Php5($lexer), new Php7($lexer)]);
-    }
-
-    private function getPrefer7() {
-        $lexer = new Lexer(['usedAttributes' => []]);
-        return new Multiple([new Php7($lexer), new Php5($lexer)]);
-    }
-
-    private function getPrefer5() {
-        $lexer = new Lexer(['usedAttributes' => []]);
-        return new Multiple([new Php5($lexer), new Php7($lexer)]);
-    }
-
-    /** @dataProvider provideTestParse */
-    public function testParse($code, Multiple $parser, $expected) {
-        $this->assertEquals($expected, $parser->parse($code));
-    }
-
-    public function provideTestParse() {
-        return [
-            [
-                // PHP 7 only code
-                '<?php class Test { function function() {} }',
-                $this->getPrefer5(),
-                [
-                    new Stmt\Class_('Test', ['stmts' => [
-                        new Stmt\ClassMethod('function')
-                    ]]),
-                ]
-            ],
-            [
-                // PHP 5 only code
-                '<?php global $$a->b;',
-                $this->getPrefer7(),
-                [
-                    new Stmt\Global_([
-                        new Expr\Variable(new Expr\PropertyFetch(new Expr\Variable('a'), 'b'))
-                    ])
-                ]
-            ],
-            [
-                // Different meaning (PHP 5)
-                '<?php $$a[0];',
-                $this->getPrefer5(),
-                [
-                    new Stmt\Expression(new Expr\Variable(
-                        new Expr\ArrayDimFetch(new Expr\Variable('a'), LNumber::fromString('0'))
-                    ))
-                ]
-            ],
-            [
-                // Different meaning (PHP 7)
-                '<?php $$a[0];',
-                $this->getPrefer7(),
-                [
-                    new Stmt\Expression(new Expr\ArrayDimFetch(
-                        new Expr\Variable(new Expr\Variable('a')), LNumber::fromString('0')
-                    ))
-                ]
-            ],
-        ];
-    }
-
-    public function testThrownError() {
-        $this->expectException(Error::class);
-        $this->expectExceptionMessage('FAIL A');
-
-        $parserA = $this->getMockBuilder(\PhpParser\Parser::class)->getMock();
-        $parserA->expects($this->at(0))
-            ->method('parse')->willThrowException(new Error('FAIL A'));
-
-        $parserB = $this->getMockBuilder(\PhpParser\Parser::class)->getMock();
-        $parserB->expects($this->at(0))
-            ->method('parse')->willThrowException(new Error('FAIL B'));
-
-        $parser = new Multiple([$parserA, $parserB]);
-        $parser->parse('dummy');
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/Parser/Php5Test.php b/vendor/nikic/php-parser/test/PhpParser/Parser/Php5Test.php
deleted file mode 100644
index 4386b5129a5cc258a87f85041f1098d4aba0327c..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/PhpParser/Parser/Php5Test.php
+++ /dev/null
@@ -1,13 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser\Parser;
-
-use PhpParser\Lexer;
-use PhpParser\ParserTest;
-
-class Php5Test extends ParserTest
-{
-    protected function getParser(Lexer $lexer) {
-        return new Php5($lexer);
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/Parser/Php7Test.php b/vendor/nikic/php-parser/test/PhpParser/Parser/Php7Test.php
deleted file mode 100644
index 22a4c5190cf923a3f17f0e0ea47580e28db99028..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/PhpParser/Parser/Php7Test.php
+++ /dev/null
@@ -1,13 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser\Parser;
-
-use PhpParser\Lexer;
-use PhpParser\ParserTest;
-
-class Php7Test extends ParserTest
-{
-    protected function getParser(Lexer $lexer) {
-        return new Php7($lexer);
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/ParserFactoryTest.php b/vendor/nikic/php-parser/test/PhpParser/ParserFactoryTest.php
deleted file mode 100644
index d50981f2a1297d425ebf704600d35158bcae678c..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/PhpParser/ParserFactoryTest.php
+++ /dev/null
@@ -1,36 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser;
-
-/* This test is very weak, because PHPUnit's assertEquals assertion is way too slow dealing with the
- * large objects involved here. So we just do some basic instanceof tests instead. */
-
-class ParserFactoryTest extends \PHPUnit\Framework\TestCase
-{
-    /** @dataProvider provideTestCreate */
-    public function testCreate($kind, $lexer, $expected) {
-        $this->assertInstanceOf($expected, (new ParserFactory)->create($kind, $lexer));
-    }
-
-    public function provideTestCreate() {
-        $lexer = new Lexer();
-        return [
-            [
-                ParserFactory::PREFER_PHP7, $lexer,
-                Parser\Multiple::class
-            ],
-            [
-                ParserFactory::PREFER_PHP5, null,
-                Parser\Multiple::class
-            ],
-            [
-                ParserFactory::ONLY_PHP7, null,
-                Parser\Php7::class
-            ],
-            [
-                ParserFactory::ONLY_PHP5, $lexer,
-                Parser\Php5::class
-            ]
-        ];
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/ParserTest.php b/vendor/nikic/php-parser/test/PhpParser/ParserTest.php
deleted file mode 100644
index 0f7f1b79f200038aa279ff23dec13271c1f85295..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/PhpParser/ParserTest.php
+++ /dev/null
@@ -1,183 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser;
-
-use PhpParser\Node\Expr;
-use PhpParser\Node\Scalar;
-use PhpParser\Node\Scalar\String_;
-use PhpParser\Node\Stmt;
-
-abstract class ParserTest extends \PHPUnit\Framework\TestCase
-{
-    /** @returns Parser */
-    abstract protected function getParser(Lexer $lexer);
-
-    public function testParserThrowsSyntaxError() {
-        $this->expectException(Error::class);
-        $this->expectExceptionMessage('Syntax error, unexpected EOF on line 1');
-        $parser = $this->getParser(new Lexer());
-        $parser->parse('<?php foo');
-    }
-
-    public function testParserThrowsSpecialError() {
-        $this->expectException(Error::class);
-        $this->expectExceptionMessage('Cannot use foo as self because \'self\' is a special class name on line 1');
-        $parser = $this->getParser(new Lexer());
-        $parser->parse('<?php use foo as self;');
-    }
-
-    public function testParserThrowsLexerError() {
-        $this->expectException(Error::class);
-        $this->expectExceptionMessage('Unterminated comment on line 1');
-        $parser = $this->getParser(new Lexer());
-        $parser->parse('<?php /*');
-    }
-
-    public function testAttributeAssignment() {
-        $lexer = new Lexer([
-            'usedAttributes' => [
-                'comments', 'startLine', 'endLine',
-                'startTokenPos', 'endTokenPos',
-            ]
-        ]);
-
-        $code = <<<'EOC'
-<?php
-/** Doc comment */
-function test($a) {
-    // Line
-    // Comments
-    echo $a;
-}
-EOC;
-        $code = canonicalize($code);
-
-        $parser = $this->getParser($lexer);
-        $stmts = $parser->parse($code);
-
-        /** @var Stmt\Function_ $fn */
-        $fn = $stmts[0];
-        $this->assertInstanceOf(Stmt\Function_::class, $fn);
-        $this->assertEquals([
-            'comments' => [
-                new Comment\Doc('/** Doc comment */', 2, 6, 1),
-            ],
-            'startLine' => 3,
-            'endLine' => 7,
-            'startTokenPos' => 3,
-            'endTokenPos' => 21,
-        ], $fn->getAttributes());
-
-        $param = $fn->params[0];
-        $this->assertInstanceOf(Node\Param::class, $param);
-        $this->assertEquals([
-            'startLine' => 3,
-            'endLine' => 3,
-            'startTokenPos' => 7,
-            'endTokenPos' => 7,
-        ], $param->getAttributes());
-
-        /** @var Stmt\Echo_ $echo */
-        $echo = $fn->stmts[0];
-        $this->assertInstanceOf(Stmt\Echo_::class, $echo);
-        $this->assertEquals([
-            'comments' => [
-                new Comment("// Line\n", 4, 49, 12),
-                new Comment("// Comments\n", 5, 61, 14),
-            ],
-            'startLine' => 6,
-            'endLine' => 6,
-            'startTokenPos' => 16,
-            'endTokenPos' => 19,
-        ], $echo->getAttributes());
-
-        /** @var \PhpParser\Node\Expr\Variable $var */
-        $var = $echo->exprs[0];
-        $this->assertInstanceOf(Expr\Variable::class, $var);
-        $this->assertEquals([
-            'startLine' => 6,
-            'endLine' => 6,
-            'startTokenPos' => 18,
-            'endTokenPos' => 18,
-        ], $var->getAttributes());
-    }
-
-    public function testInvalidToken() {
-        $this->expectException(\RangeException::class);
-        $this->expectExceptionMessage('The lexer returned an invalid token (id=999, value=foobar)');
-        $lexer = new InvalidTokenLexer;
-        $parser = $this->getParser($lexer);
-        $parser->parse('dummy');
-    }
-
-    /**
-     * @dataProvider provideTestExtraAttributes
-     */
-    public function testExtraAttributes($code, $expectedAttributes) {
-        $parser = $this->getParser(new Lexer\Emulative);
-        $stmts = $parser->parse("<?php $code;");
-        $node = $stmts[0] instanceof Stmt\Expression ? $stmts[0]->expr : $stmts[0];
-        $attributes = $node->getAttributes();
-        foreach ($expectedAttributes as $name => $value) {
-            $this->assertSame($value, $attributes[$name]);
-        }
-    }
-
-    public function provideTestExtraAttributes() {
-        return [
-            ['0', ['kind' => Scalar\LNumber::KIND_DEC]],
-            ['9', ['kind' => Scalar\LNumber::KIND_DEC]],
-            ['07', ['kind' => Scalar\LNumber::KIND_OCT]],
-            ['0xf', ['kind' => Scalar\LNumber::KIND_HEX]],
-            ['0XF', ['kind' => Scalar\LNumber::KIND_HEX]],
-            ['0b1', ['kind' => Scalar\LNumber::KIND_BIN]],
-            ['0B1', ['kind' => Scalar\LNumber::KIND_BIN]],
-            ['[]', ['kind' => Expr\Array_::KIND_SHORT]],
-            ['array()', ['kind' => Expr\Array_::KIND_LONG]],
-            ["'foo'", ['kind' => String_::KIND_SINGLE_QUOTED]],
-            ["b'foo'", ['kind' => String_::KIND_SINGLE_QUOTED]],
-            ["B'foo'", ['kind' => String_::KIND_SINGLE_QUOTED]],
-            ['"foo"', ['kind' => String_::KIND_DOUBLE_QUOTED]],
-            ['b"foo"', ['kind' => String_::KIND_DOUBLE_QUOTED]],
-            ['B"foo"', ['kind' => String_::KIND_DOUBLE_QUOTED]],
-            ['"foo$bar"', ['kind' => String_::KIND_DOUBLE_QUOTED]],
-            ['b"foo$bar"', ['kind' => String_::KIND_DOUBLE_QUOTED]],
-            ['B"foo$bar"', ['kind' => String_::KIND_DOUBLE_QUOTED]],
-            ["<<<'STR'\nSTR\n", ['kind' => String_::KIND_NOWDOC, 'docLabel' => 'STR', 'docIndentation' => '']],
-            ["<<<STR\nSTR\n", ['kind' => String_::KIND_HEREDOC, 'docLabel' => 'STR', 'docIndentation' => '']],
-            ["<<<\"STR\"\nSTR\n", ['kind' => String_::KIND_HEREDOC, 'docLabel' => 'STR', 'docIndentation' => '']],
-            ["b<<<'STR'\nSTR\n", ['kind' => String_::KIND_NOWDOC, 'docLabel' => 'STR', 'docIndentation' => '']],
-            ["B<<<'STR'\nSTR\n", ['kind' => String_::KIND_NOWDOC, 'docLabel' => 'STR', 'docIndentation' => '']],
-            ["<<< \t 'STR'\nSTR\n", ['kind' => String_::KIND_NOWDOC, 'docLabel' => 'STR', 'docIndentation' => '']],
-            ["<<<'\xff'\n\xff\n", ['kind' => String_::KIND_NOWDOC, 'docLabel' => "\xff", 'docIndentation' => '']],
-            ["<<<\"STR\"\n\$a\nSTR\n", ['kind' => String_::KIND_HEREDOC, 'docLabel' => 'STR', 'docIndentation' => '']],
-            ["b<<<\"STR\"\n\$a\nSTR\n", ['kind' => String_::KIND_HEREDOC, 'docLabel' => 'STR', 'docIndentation' => '']],
-            ["B<<<\"STR\"\n\$a\nSTR\n", ['kind' => String_::KIND_HEREDOC, 'docLabel' => 'STR', 'docIndentation' => '']],
-            ["<<< \t \"STR\"\n\$a\nSTR\n", ['kind' => String_::KIND_HEREDOC, 'docLabel' => 'STR', 'docIndentation' => '']],
-            ["<<<STR\n    STR\n", ['kind' => String_::KIND_HEREDOC, 'docLabel' => 'STR', 'docIndentation' => '    ']],
-            ["<<<STR\n\tSTR\n", ['kind' => String_::KIND_HEREDOC, 'docLabel' => 'STR', 'docIndentation' => "\t"]],
-            ["<<<'STR'\n    Foo\n  STR\n", ['kind' => String_::KIND_NOWDOC, 'docLabel' => 'STR', 'docIndentation' => '  ']],
-            ["die", ['kind' => Expr\Exit_::KIND_DIE]],
-            ["die('done')", ['kind' => Expr\Exit_::KIND_DIE]],
-            ["exit", ['kind' => Expr\Exit_::KIND_EXIT]],
-            ["exit(1)", ['kind' => Expr\Exit_::KIND_EXIT]],
-            ["?>Foo", ['hasLeadingNewline' => false]],
-            ["?>\nFoo", ['hasLeadingNewline' => true]],
-            ["namespace Foo;", ['kind' => Stmt\Namespace_::KIND_SEMICOLON]],
-            ["namespace Foo {}", ['kind' => Stmt\Namespace_::KIND_BRACED]],
-            ["namespace {}", ['kind' => Stmt\Namespace_::KIND_BRACED]],
-            ["(float) 5.0", ['kind' => Expr\Cast\Double::KIND_FLOAT]],
-            ["(double) 5.0", ['kind' => Expr\Cast\Double::KIND_DOUBLE]],
-            ["(real) 5.0", ['kind' => Expr\Cast\Double::KIND_REAL]],
-            [" (  REAL )  5.0", ['kind' => Expr\Cast\Double::KIND_REAL]],
-        ];
-    }
-}
-
-class InvalidTokenLexer extends Lexer
-{
-    public function getNextToken(&$value = null, &$startAttributes = null, &$endAttributes = null) : int {
-        $value = 'foobar';
-        return 999;
-    }
-}
diff --git a/vendor/nikic/php-parser/test/PhpParser/PrettyPrinterTest.php b/vendor/nikic/php-parser/test/PhpParser/PrettyPrinterTest.php
deleted file mode 100644
index e5b8a1aeae608675cdc47a16c569f9ac4900317b..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/PhpParser/PrettyPrinterTest.php
+++ /dev/null
@@ -1,307 +0,0 @@
-<?php declare(strict_types=1);
-
-namespace PhpParser;
-
-use PhpParser\Node\Expr;
-use PhpParser\Node\Name;
-use PhpParser\Node\Scalar\DNumber;
-use PhpParser\Node\Scalar\Encapsed;
-use PhpParser\Node\Scalar\EncapsedStringPart;
-use PhpParser\Node\Scalar\LNumber;
-use PhpParser\Node\Scalar\String_;
-use PhpParser\Node\Stmt;
-use PhpParser\PrettyPrinter\Standard;
-
-class PrettyPrinterTest extends CodeTestAbstract
-{
-    protected function doTestPrettyPrintMethod($method, $name, $code, $expected, $modeLine) {
-        $lexer = new Lexer\Emulative;
-        $parser5 = new Parser\Php5($lexer);
-        $parser7 = new Parser\Php7($lexer);
-
-        list($version, $options) = $this->parseModeLine($modeLine);
-        $prettyPrinter = new Standard($options);
-
-        try {
-            $output5 = canonicalize($prettyPrinter->$method($parser5->parse($code)));
-        } catch (Error $e) {
-            $output5 = null;
-            if ('php7' !== $version) {
-                throw $e;
-            }
-        }
-
-        try {
-            $output7 = canonicalize($prettyPrinter->$method($parser7->parse($code)));
-        } catch (Error $e) {
-            $output7 = null;
-            if ('php5' !== $version) {
-                throw $e;
-            }
-        }
-
-        if ('php5' === $version) {
-            $this->assertSame($expected, $output5, $name);
-            $this->assertNotSame($expected, $output7, $name);
-        } elseif ('php7' === $version) {
-            $this->assertSame($expected, $output7, $name);
-            $this->assertNotSame($expected, $output5, $name);
-        } else {
-            $this->assertSame($expected, $output5, $name);
-            $this->assertSame($expected, $output7, $name);
-        }
-    }
-
-    /**
-     * @dataProvider provideTestPrettyPrint
-     * @covers \PhpParser\PrettyPrinter\Standard<extended>
-     */
-    public function testPrettyPrint($name, $code, $expected, $mode) {
-        $this->doTestPrettyPrintMethod('prettyPrint', $name, $code, $expected, $mode);
-    }
-
-    /**
-     * @dataProvider provideTestPrettyPrintFile
-     * @covers \PhpParser\PrettyPrinter\Standard<extended>
-     */
-    public function testPrettyPrintFile($name, $code, $expected, $mode) {
-        $this->doTestPrettyPrintMethod('prettyPrintFile', $name, $code, $expected, $mode);
-    }
-
-    public function provideTestPrettyPrint() {
-        return $this->getTests(__DIR__ . '/../code/prettyPrinter', 'test');
-    }
-
-    public function provideTestPrettyPrintFile() {
-        return $this->getTests(__DIR__ . '/../code/prettyPrinter', 'file-test');
-    }
-
-    public function testPrettyPrintExpr() {
-        $prettyPrinter = new Standard;
-        $expr = new Expr\BinaryOp\Mul(
-            new Expr\BinaryOp\Plus(new Expr\Variable('a'), new Expr\Variable('b')),
-            new Expr\Variable('c')
-        );
-        $this->assertEquals('($a + $b) * $c', $prettyPrinter->prettyPrintExpr($expr));
-
-        $expr = new Expr\Closure([
-            'stmts' => [new Stmt\Return_(new String_("a\nb"))]
-        ]);
-        $this->assertEquals("function () {\n    return 'a\nb';\n}", $prettyPrinter->prettyPrintExpr($expr));
-    }
-
-    public function testCommentBeforeInlineHTML() {
-        $prettyPrinter = new PrettyPrinter\Standard;
-        $comment = new Comment\Doc("/**\n * This is a comment\n */");
-        $stmts = [new Stmt\InlineHTML('Hello World!', ['comments' => [$comment]])];
-        $expected = "<?php\n\n/**\n * This is a comment\n */\n?>\nHello World!";
-        $this->assertSame($expected, $prettyPrinter->prettyPrintFile($stmts));
-    }
-
-    private function parseModeLine($modeLine) {
-        $parts = explode(' ', (string) $modeLine, 2);
-        $version = $parts[0] ?? 'both';
-        $options = isset($parts[1]) ? json_decode($parts[1], true) : [];
-        return [$version, $options];
-    }
-
-    public function testArraySyntaxDefault() {
-        $prettyPrinter = new Standard(['shortArraySyntax' => true]);
-        $expr = new Expr\Array_([
-            new Expr\ArrayItem(new String_('val'), new String_('key'))
-        ]);
-        $expected = "['key' => 'val']";
-        $this->assertSame($expected, $prettyPrinter->prettyPrintExpr($expr));
-    }
-
-    /**
-     * @dataProvider provideTestKindAttributes
-     */
-    public function testKindAttributes($node, $expected) {
-        $prttyPrinter = new PrettyPrinter\Standard;
-        $result = $prttyPrinter->prettyPrintExpr($node);
-        $this->assertSame($expected, $result);
-    }
-
-    public function provideTestKindAttributes() {
-        $nowdoc = ['kind' => String_::KIND_NOWDOC, 'docLabel' => 'STR'];
-        $heredoc = ['kind' => String_::KIND_HEREDOC, 'docLabel' => 'STR'];
-        return [
-            // Defaults to single quoted
-            [new String_('foo'), "'foo'"],
-            // Explicit single/double quoted
-            [new String_('foo', ['kind' => String_::KIND_SINGLE_QUOTED]), "'foo'"],
-            [new String_('foo', ['kind' => String_::KIND_DOUBLE_QUOTED]), '"foo"'],
-            // Fallback from doc string if no label
-            [new String_('foo', ['kind' => String_::KIND_NOWDOC]), "'foo'"],
-            [new String_('foo', ['kind' => String_::KIND_HEREDOC]), '"foo"'],
-            // Fallback if string contains label
-            [new String_("A\nB\nC", ['kind' => String_::KIND_NOWDOC, 'docLabel' => 'A']), "'A\nB\nC'"],
-            [new String_("A\nB\nC", ['kind' => String_::KIND_NOWDOC, 'docLabel' => 'B']), "'A\nB\nC'"],
-            [new String_("A\nB\nC", ['kind' => String_::KIND_NOWDOC, 'docLabel' => 'C']), "'A\nB\nC'"],
-            [new String_("STR;", ['kind' => String_::KIND_NOWDOC, 'docLabel' => 'STR']), "'STR;'"],
-            // Doc string if label not contained (or not in ending position)
-            [new String_("foo", $nowdoc), "<<<'STR'\nfoo\nSTR\n"],
-            [new String_("foo", $heredoc), "<<<STR\nfoo\nSTR\n"],
-            [new String_("STRx", $nowdoc), "<<<'STR'\nSTRx\nSTR\n"],
-            [new String_("xSTR", $nowdoc), "<<<'STR'\nxSTR\nSTR\n"],
-            // Empty doc string variations (encapsed variant does not occur naturally)
-            [new String_("", $nowdoc), "<<<'STR'\nSTR\n"],
-            [new String_("", $heredoc), "<<<STR\nSTR\n"],
-            [new Encapsed([new EncapsedStringPart('')], $heredoc), "<<<STR\nSTR\n"],
-            // Encapsed doc string variations
-            [new Encapsed([new EncapsedStringPart('foo')], $heredoc), "<<<STR\nfoo\nSTR\n"],
-            [new Encapsed([new EncapsedStringPart('foo'), new Expr\Variable('y')], $heredoc), "<<<STR\nfoo{\$y}\nSTR\n"],
-            [new Encapsed([new EncapsedStringPart("\nSTR"), new Expr\Variable('y')], $heredoc), "<<<STR\n\nSTR{\$y}\nSTR\n"],
-            [new Encapsed([new EncapsedStringPart("\nSTR"), new Expr\Variable('y')], $heredoc), "<<<STR\n\nSTR{\$y}\nSTR\n"],
-            [new Encapsed([new Expr\Variable('y'), new EncapsedStringPart("STR\n")], $heredoc), "<<<STR\n{\$y}STR\n\nSTR\n"],
-            // Encapsed doc string fallback
-            [new Encapsed([new Expr\Variable('y'), new EncapsedStringPart("\nSTR")], $heredoc), '"{$y}\\nSTR"'],
-            [new Encapsed([new EncapsedStringPart("STR\n"), new Expr\Variable('y')], $heredoc), '"STR\\n{$y}"'],
-            [new Encapsed([new EncapsedStringPart("STR")], $heredoc), '"STR"'],
-        ];
-    }
-
-    /** @dataProvider provideTestUnnaturalLiterals */
-    public function testUnnaturalLiterals($node, $expected) {
-        $prttyPrinter = new PrettyPrinter\Standard;
-        $result = $prttyPrinter->prettyPrintExpr($node);
-        $this->assertSame($expected, $result);
-    }
-
-    public function provideTestUnnaturalLiterals() {
-        return [
-            [new LNumber(-1), '-1'],
-            [new LNumber(-PHP_INT_MAX - 1), '(-' . PHP_INT_MAX . '-1)'],
-            [new LNumber(-1, ['kind' => LNumber::KIND_BIN]), '-0b1'],
-            [new LNumber(-1, ['kind' => LNumber::KIND_OCT]), '-01'],
-            [new LNumber(-1, ['kind' => LNumber::KIND_HEX]), '-0x1'],
-            [new DNumber(\INF), '\INF'],
-            [new DNumber(-\INF), '-\INF'],
-            [new DNumber(-\NAN), '\NAN'],
-        ];
-    }
-
-    public function testPrettyPrintWithError() {
-        $this->expectException(\LogicException::class);
-        $this->expectExceptionMessage('Cannot pretty-print AST with Error nodes');
-        $stmts = [new Stmt\Expression(
-            new Expr\PropertyFetch(new Expr\Variable('a'), new Expr\Error())
-        )];
-        $prettyPrinter = new PrettyPrinter\Standard;
-        $prettyPrinter->prettyPrint($stmts);
-    }
-
-    public function testPrettyPrintWithErrorInClassConstFetch() {
-        $this->expectException(\LogicException::class);
-        $this->expectExceptionMessage('Cannot pretty-print AST with Error nodes');
-        $stmts = [new Stmt\Expression(
-            new Expr\ClassConstFetch(new Name('Foo'), new Expr\Error())
-        )];
-        $prettyPrinter = new PrettyPrinter\Standard;
-        $prettyPrinter->prettyPrint($stmts);
-    }
-
-    public function testPrettyPrintEncapsedStringPart() {
-        $this->expectException(\LogicException::class);
-        $this->expectExceptionMessage('Cannot directly print EncapsedStringPart');
-        $expr = new Node\Scalar\EncapsedStringPart('foo');
-        $prettyPrinter = new PrettyPrinter\Standard;
-        $prettyPrinter->prettyPrintExpr($expr);
-    }
-
-    /**
-     * @dataProvider provideTestFormatPreservingPrint
-     * @covers \PhpParser\PrettyPrinter\Standard<extended>
-     */
-    public function testFormatPreservingPrint($name, $code, $modification, $expected, $modeLine) {
-        $lexer = new Lexer\Emulative([
-            'usedAttributes' => [
-                'comments',
-                'startLine', 'endLine',
-                'startTokenPos', 'endTokenPos',
-            ],
-        ]);
-
-        $parser = new Parser\Php7($lexer);
-        $traverser = new NodeTraverser();
-        $traverser->addVisitor(new NodeVisitor\CloningVisitor());
-
-        $printer = new PrettyPrinter\Standard();
-
-        $oldStmts = $parser->parse($code);
-        $oldTokens = $lexer->getTokens();
-
-        $newStmts = $traverser->traverse($oldStmts);
-
-        /** @var callable $fn */
-        eval(<<<CODE
-use PhpParser\Comment;
-use PhpParser\Node;
-use PhpParser\Node\Expr;
-use PhpParser\Node\Scalar;
-use PhpParser\Node\Stmt;
-\$fn = function(&\$stmts) { $modification };
-CODE
-        );
-        $fn($newStmts);
-
-        $newCode = $printer->printFormatPreserving($newStmts, $oldStmts, $oldTokens);
-        $this->assertSame(canonicalize($expected), canonicalize($newCode), $name);
-    }
-
-    public function provideTestFormatPreservingPrint() {
-        return $this->getTests(__DIR__ . '/../code/formatPreservation', 'test', 3);
-    }
-
-    /**
-     * @dataProvider provideTestRoundTripPrint
-     * @covers \PhpParser\PrettyPrinter\Standard<extended>
-     */
-    public function testRoundTripPrint($name, $code, $expected, $modeLine) {
-        /**
-         * This test makes sure that the format-preserving pretty printer round-trips for all
-         * the pretty printer tests (i.e. returns the input if no changes occurred).
-         */
-
-        list($version) = $this->parseModeLine($modeLine);
-
-        $lexer = new Lexer\Emulative([
-            'usedAttributes' => [
-                'comments',
-                'startLine', 'endLine',
-                'startTokenPos', 'endTokenPos',
-            ],
-        ]);
-
-        $parserClass = $version === 'php5' ? Parser\Php5::class : Parser\Php7::class;
-        /** @var Parser $parser */
-        $parser = new $parserClass($lexer);
-
-        $traverser = new NodeTraverser();
-        $traverser->addVisitor(new NodeVisitor\CloningVisitor());
-
-        $printer = new PrettyPrinter\Standard();
-
-        try {
-            $oldStmts = $parser->parse($code);
-        } catch (Error $e) {
-            // Can't do a format-preserving print on a file with errors
-            return;
-        }
-
-        $oldTokens = $lexer->getTokens();
-
-        $newStmts = $traverser->traverse($oldStmts);
-
-        $newCode = $printer->printFormatPreserving($newStmts, $oldStmts, $oldTokens);
-        $this->assertSame(canonicalize($code), canonicalize($newCode), $name);
-    }
-
-    public function provideTestRoundTripPrint() {
-        return array_merge(
-            $this->getTests(__DIR__ . '/../code/prettyPrinter', 'test'),
-            $this->getTests(__DIR__ . '/../code/parser', 'test')
-        );
-    }
-}
diff --git a/vendor/nikic/php-parser/test/bootstrap.php b/vendor/nikic/php-parser/test/bootstrap.php
deleted file mode 100644
index 0bfa9d0ad7ca1086275897039242357106d93407..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/bootstrap.php
+++ /dev/null
@@ -1,31 +0,0 @@
-<?php
-
-namespace PhpParser;
-
-require __DIR__ . '/../vendor/autoload.php';
-
-function canonicalize($str) {
-    // normalize EOL style
-    $str = str_replace("\r\n", "\n", $str);
-
-    // trim newlines at end
-    $str = rtrim($str, "\n");
-
-    // remove trailing whitespace on all lines
-    $lines = explode("\n", $str);
-    $lines = array_map(function($line) {
-        return rtrim($line, " \t");
-    }, $lines);
-    return implode("\n", $lines);
-}
-
-function filesInDir($directory, $fileExtension) {
-    $directory = realpath($directory);
-    $it = new \RecursiveDirectoryIterator($directory);
-    $it = new \RecursiveIteratorIterator($it, \RecursiveIteratorIterator::LEAVES_ONLY);
-    $it = new \RegexIterator($it, '(\.' . preg_quote($fileExtension) . '$)');
-    foreach ($it as $file) {
-        $fileName = $file->getPathname();
-        yield $fileName => file_get_contents($fileName);
-    }
-}
diff --git a/vendor/nikic/php-parser/test/code/formatPreservation/addingPropertyType.test b/vendor/nikic/php-parser/test/code/formatPreservation/addingPropertyType.test
deleted file mode 100644
index 2ef332b27eb4f652b958eae225a904f219c12f17..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/formatPreservation/addingPropertyType.test
+++ /dev/null
@@ -1,39 +0,0 @@
-Adding property type
------
-<?php
-
-class A
-{
-
-    public $a
-    = 1;
-}
------
-$stmts[0]->stmts[0]->type = new Node\Identifier('string');
------
-<?php
-
-class A
-{
-
-    public string $a
-    = 1;
-}
------
-<?php
-
-class A
-{
-    public
-        $b;
-}
------
-$stmts[0]->stmts[0]->type = new Node\Identifier('int');
------
-<?php
-
-class A
-{
-    public
-        int $b;
-}
diff --git a/vendor/nikic/php-parser/test/code/formatPreservation/anonClasses.test b/vendor/nikic/php-parser/test/code/formatPreservation/anonClasses.test
deleted file mode 100644
index b7896f22fba9131c600f8feefdb8b4da9448981d..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/formatPreservation/anonClasses.test
+++ /dev/null
@@ -1,28 +0,0 @@
-Anonymous classes
------
-<?php
-new class
-($x)
-  extends X
-{ };
------
-$new = $stmts[0]->expr;
-$new->class->extends = null;
-$new->args[] = new Expr\Variable('y');
------
-<?php
-new class
-($x, $y)
-{ };
------
-<?php
-new class
-{};
------
-// Ignore name assigned to anon class
-$new = $stmts[0]->expr;
-$new->class->name = new Node\Identifier('Anon1');
------
-<?php
-new class
-{};
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/formatPreservation/array_spread.test b/vendor/nikic/php-parser/test/code/formatPreservation/array_spread.test
deleted file mode 100644
index ce83e1651a9b66d6612dec9fd5797c85b55e32cb..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/formatPreservation/array_spread.test
+++ /dev/null
@@ -1,29 +0,0 @@
-Array spread
------
-<?php
-$items = [
-...$value
-];
------
-$array = $stmts[0]->expr->expr;
-$array->items[] = new Expr\ArrayItem(new Expr\Variable('b'));
------
-<?php
-$items = [
-...$value, $b
-];
------
-<?php
-$items =
-[
-... $value
-];
------
-$array = $stmts[0]->expr->expr;
-$array->items[] = new Expr\ArrayItem(new Expr\Variable('c'), null, false, [], true);
------
-<?php
-$items =
-[
-... $value, ...$c
-];
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/formatPreservation/arrow_function.test b/vendor/nikic/php-parser/test/code/formatPreservation/arrow_function.test
deleted file mode 100644
index eeff36f7bb322b68a407c3a60d0042b35808e222..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/formatPreservation/arrow_function.test
+++ /dev/null
@@ -1,97 +0,0 @@
-Arrow function
------
-<?php
-fn($a)
-=>
-$a;
------
-$stmts[0]->expr->expr = new Expr\Variable('b');
------
-<?php
-fn($a)
-=>
-$b;
------
-<?php
-fn(
-$a
-) => $a;
------
-$stmts[0]->expr->params[] = new Node\Param(new Expr\Variable('b'));
------
-<?php
-fn(
-$a, $b
-) => $a;
------
-<?php
-fn(
-$a
-)
-=>
-$a;
------
-// TODO: Format preserving currently not supported
-$stmts[0]->expr->params = [];
------
-<?php
-fn() => $a;
------
-<?php
-fn($a)
-: int
-=> $a;
------
-$stmts[0]->expr->returnType = new Node\Identifier('bool');
------
-<?php
-fn($a)
-: bool
-=> $a;
------
-<?php
-fn($a)
-: int
-=> $a;
------
-$stmts[0]->expr->returnType = null;
------
-<?php
-fn($a)
-=> $a;
------
-<?php
-fn($a)
-: int
-=> $a;
-
-static fn($a)
-: int
-=> $a;
------
-// TODO: Format preserving currently not supported
-$stmts[0]->expr->static = true;
-$stmts[1]->expr->static = false;
------
-<?php
-static fn($a): int => $a;
-
-fn($a): int => $a;
------
-<?php
-fn($a)
-: int
-=> $a;
-
-fn&($a)
-: int
-=> $a;
------
-// TODO: Format preserving currently not supported
-$stmts[0]->expr->byRef = true;
-$stmts[1]->expr->byRef = false;
------
-<?php
-fn&($a): int => $a;
-
-fn($a): int => $a;
diff --git a/vendor/nikic/php-parser/test/code/formatPreservation/basic.test b/vendor/nikic/php-parser/test/code/formatPreservation/basic.test
deleted file mode 100644
index 48db7803cbf23d412aeb66ce96a3f9e447577100..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/formatPreservation/basic.test
+++ /dev/null
@@ -1,190 +0,0 @@
-abc1
------
-<?php
-echo
-    1
-        +
-            2
-                +
-                    3;
------
-$stmts[0]->exprs[0]->left->right->value = 42;
------
-<?php
-echo
-    1
-        +
-            42
-                +
-                    3;
------
-<?php
-function foo($a)
-    { return $a; }
------
-$stmts[0]->name = new Node\Identifier('bar');
------
-<?php
-function bar($a)
-    { return $a; }
------
-<?php
-function
-foo() {
-    call(
-        $bar
-    );
-}
------
-// This triggers a fallback
-$stmts[0]->byRef = true;
------
-<?php
-function &foo()
-{
-    call(
-        $bar
-    );
-}
------
-<?php
-function
-foo() {
-echo "Start
-End";
-}
------
-// This triggers a fallback
-$stmts[0]->byRef = true;
------
-<?php
-function &foo()
-{
-    echo "Start
-End";
-}
------
-<?php
-function test() {
-    call1(
-        $bar
-    );
-}
-call2(
-    $foo
-);
------
-$tmp = $stmts[0]->stmts[0];
-$stmts[0]->stmts[0] = $stmts[1];
-$stmts[1] = $tmp;
------
-<?php
-function test() {
-    call2(
-        $foo
-    );
-}
-call1(
-    $bar
-);
------
-<?php
-x;
-function test() {
-    call1(
-        $bar
-    );
-}
-call2(
-    $foo
-);
------
-$tmp = $stmts[1]->stmts[0];
-$stmts[1]->stmts[0] = $stmts[2];
-$stmts[2] = $tmp;
-// Same test, but also removing first statement, triggering fallback
-array_splice($stmts, 0, 1, []);
------
-<?php
-
-function test() {
-    call2(
-        $foo
-    );
-}
-call1(
-    $bar
-);
------
-<?php
-    echo 1;
------
-$stmts[0] = new Stmt\Expression(
-    new Expr\Assign(new Expr\Variable('a'), new Expr\Variable('b')));
------
-<?php
-    $a = $b;
------
-<?php
-echo$a;
------
-$stmts[0]->exprs[0] = new Expr\ConstFetch(new Node\Name('C'));
------
-<?php
-echo C;
------
-<?php
-function foo() {
-    foo();
-    /*
-     * bar
-     */
-    baz();
-}
-
-{
-    $x;
-}
------
-$tmp = $stmts[0];
-$stmts[0] = $stmts[1];
-$stmts[1] = $tmp;
-/* TODO This used to do two replacement operations, but with the node list diffing this is a
- * remove, keep, add (which probably makes more sense). As such, this currently triggers a
- * fallback. */
------
-<?php
-
-$x;
-function foo() {
-    foo();
-    /*
-     * bar
-     */
-    baz();
-}
------
-<?php
-echo "${foo}bar";
-echo "${foo['baz']}bar";
------
-$stmts[0]->exprs[0]->parts[0] = new Expr\Variable('bar');
-$stmts[1]->exprs[0]->parts[0] = new Expr\Variable('bar');
------
-<?php
-echo "{$bar}bar";
-echo "{$bar}bar";
------
-<?php
-[$a
-,$b
-,
-,] = $b;
------
-/* Nothing */
------
-<?php
-[$a
-,$b
-,
-,] = $b;
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/formatPreservation/blockConversion.test b/vendor/nikic/php-parser/test/code/formatPreservation/blockConversion.test
deleted file mode 100644
index 4c3c1e30e901cd08e4d7fbec0def863042d710a6..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/formatPreservation/blockConversion.test
+++ /dev/null
@@ -1,29 +0,0 @@
-It may be necessary to convert a single statement into a block
------
-<?php
-
-if
-($a) $b;
------
-// TODO Avoid fallback
-$stmts[0]->stmts[] = new Stmt\Expression(new Expr\Variable('c'));
------
-<?php
-
-if ($a) {
-    $b;
-    $c;
-}
------
-<?php
-
-if
-($a) {$b;}
------
-$stmts[0]->stmts[] = new Stmt\Expression(new Expr\Variable('c'));
------
-<?php
-
-if
-($a) {$b;
-$c;}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/formatPreservation/comments.test b/vendor/nikic/php-parser/test/code/formatPreservation/comments.test
deleted file mode 100644
index 61f21e2f56333a74aea25704bcfe2f9245c775be..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/formatPreservation/comments.test
+++ /dev/null
@@ -1,52 +0,0 @@
-Comment changes
------
-<?php
-// Test
-foo();
------
-$stmts[0]->setAttribute('comments', []);
------
-<?php
-foo();
------
-<?php
-$foo;
-
-
-/* bar */
-$baz;
------
-$comments = $stmts[1]->getComments();
-$comments[] = new Comment("// foo");
-$stmts[1]->setAttribute('comments', $comments);
------
-<?php
-$foo;
-
-
-/* bar */
-// foo
-$baz;
------
-<?php
-class Test {
-    /**
-     * @expectedException \FooException
-     */
-    public function test() {
-        // some code
-    }
-}
------
-$method = $stmts[0]->stmts[0];
-$method->setAttribute('comments', [new Comment\Doc("/**\n *\n */")]);
------
-<?php
-class Test {
-    /**
-     *
-     */
-    public function test() {
-        // some code
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/formatPreservation/emptyListInsertion.test b/vendor/nikic/php-parser/test/code/formatPreservation/emptyListInsertion.test
deleted file mode 100644
index ad3137bf68b30492c1697a8eb078c582839f7375..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/formatPreservation/emptyListInsertion.test
+++ /dev/null
@@ -1,110 +0,0 @@
-Inserting into an empty list
------
-<?php
-class
-Test {}
-
-interface
-Test {}
------
-$stmts[0]->implements[] = new Node\Name('Iface');
-$stmts[0]->implements[] = new Node\Name('Iface2');
-$stmts[1]->extends[] = new Node\Name('Iface');
-$stmts[1]->extends[] = new Node\Name('Iface2');
------
-<?php
-class
-Test implements Iface, Iface2 {}
-
-interface
-Test extends Iface, Iface2 {}
------
-<?php
-function test
-() {}
-
-class Test {
-    public function
-    test
-    () {}
-}
-
-function
-() {};
-
-fn()
-=> 42;
------
-$stmts[0]->params[] = new Node\Param(new Node\Expr\Variable('a'));
-$stmts[0]->params[] = new Node\Param(new Node\Expr\Variable('b'));
-$stmts[1]->stmts[0]->params[] = new Node\Param(new Node\Expr\Variable('a'));
-$stmts[1]->stmts[0]->params[] = new Node\Param(new Node\Expr\Variable('b'));
-$stmts[2]->expr->params[] = new Node\Param(new Node\Expr\Variable('a'));
-$stmts[2]->expr->params[] = new Node\Param(new Node\Expr\Variable('b'));
-$stmts[2]->expr->uses[] = new Node\Expr\Variable('c');
-$stmts[2]->expr->uses[] = new Node\Expr\Variable('d');
-$stmts[3]->expr->params[] = new Node\Param(new Node\Expr\Variable('a'));
-$stmts[3]->expr->params[] = new Node\Param(new Node\Expr\Variable('b'));
------
-<?php
-function test
-($a, $b) {}
-
-class Test {
-    public function
-    test
-    ($a, $b) {}
-}
-
-function
-($a, $b) use($c, $d) {};
-
-fn($a, $b)
-=> 42;
------
-<?php
-foo
-();
-
-$foo->
-bar();
-
-Foo
-::bar ();
-
-new
-Foo
-();
-
-new class
-()
-extends Foo {};
------
-$stmts[0]->expr->args[] = new Node\Expr\Variable('a');
-$stmts[0]->expr->args[] = new Node\Expr\Variable('b');
-$stmts[1]->expr->args[] = new Node\Expr\Variable('a');
-$stmts[1]->expr->args[] = new Node\Expr\Variable('b');
-$stmts[2]->expr->args[] = new Node\Expr\Variable('a');
-$stmts[2]->expr->args[] = new Node\Expr\Variable('b');
-$stmts[3]->expr->args[] = new Node\Expr\Variable('a');
-$stmts[3]->expr->args[] = new Node\Expr\Variable('b');
-$stmts[4]->expr->args[] = new Node\Expr\Variable('a');
-$stmts[4]->expr->args[] = new Node\Expr\Variable('b');
------
-<?php
-foo
-($a, $b);
-
-$foo->
-bar($a, $b);
-
-Foo
-::bar ($a, $b);
-
-new
-Foo
-($a, $b);
-
-new class
-($a, $b)
-extends Foo {};
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/formatPreservation/fixup.test b/vendor/nikic/php-parser/test/code/formatPreservation/fixup.test
deleted file mode 100644
index e8870ae56b2a76338b5b8d5b650060d8abd9096a..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/formatPreservation/fixup.test
+++ /dev/null
@@ -1,67 +0,0 @@
-Fixup for precedence and some special syntax
------
-<?php
-$a ** $b  *  $c;
-$a  +  $b * $c;
-$a * $b  +  $c;
-$a  ?  $b  :  $c;
-($a ** $b)  *  $c;
-( $a ** $b )  *  $c;
-!$a = $b;
------
-// Parens necessary
-$stmts[0]->expr->left = new Expr\BinaryOp\Plus(new Expr\Variable('a'), new Expr\Variable('b'));
-// The parens here are "correct", because add is left assoc
-$stmts[1]->expr->right = new Expr\BinaryOp\Plus(new Expr\Variable('b'), new Expr\Variable('c'));
-// No parens necessary
-$stmts[2]->expr->left = new Expr\BinaryOp\Plus(new Expr\Variable('a'), new Expr\Variable('b'));
-// Parens for RHS not strictly necessary due to assign speciality
-$stmts[3]->expr->cond = new Expr\Assign(new Expr\Variable('a'), new Expr\Variable('b'));
-$stmts[3]->expr->if = new Expr\Assign(new Expr\Variable('a'), new Expr\Variable('b'));
-$stmts[3]->expr->else = new Expr\Assign(new Expr\Variable('a'), new Expr\Variable('b'));
-// Already has parens
-$stmts[4]->expr->left = new Expr\BinaryOp\Plus(new Expr\Variable('a'), new Expr\Variable('b'));
-$stmts[5]->expr->left = new Expr\BinaryOp\Plus(new Expr\Variable('a'), new Expr\Variable('b'));
------
-<?php
-($a + $b)  *  $c;
-$a  +  ($b + $c);
-$a + $b  +  $c;
-($a = $b)  ?  $a = $b  :  ($a = $b);
-($a + $b)  *  $c;
-( $a + $b )  *  $c;
-!$a = $b;
------
-<?php
-foo ();
-foo ();
-$foo -> bar;
-$foo -> bar;
-$foo -> bar;
-$foo -> bar;
-$foo -> bar;
-self :: $foo;
-self :: $foo;
------
-$stmts[0]->expr->name = new Expr\Variable('a');
-$stmts[1]->expr->name = new Expr\BinaryOp\Concat(new Expr\Variable('a'), new Expr\Variable('b'));
-$stmts[2]->expr->var = new Expr\Variable('bar');
-$stmts[3]->expr->var = new Expr\BinaryOp\Concat(new Expr\Variable('a'), new Expr\Variable('b'));
-$stmts[4]->expr->name = new Node\Identifier('foo');
-// In this case the braces are not strictly necessary. However, on PHP 5 they may be required
-// depending on where the property fetch node itself occurs.
-$stmts[5]->expr->name = new Expr\Variable('bar');
-$stmts[6]->expr->name = new Expr\BinaryOp\Concat(new Expr\Variable('a'), new Expr\Variable('b'));
-$stmts[7]->expr->name = new Node\VarLikeIdentifier('bar');
-$stmts[8]->expr->name = new Expr\BinaryOp\Concat(new Expr\Variable('a'), new Expr\Variable('b'));
------
-<?php
-$a ();
-($a . $b) ();
-$bar -> bar;
-($a . $b) -> bar;
-$foo -> foo;
-$foo -> {$bar};
-$foo -> {$a . $b};
-self :: $bar;
-self :: ${$a . $b};
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/formatPreservation/inlineHtml.test b/vendor/nikic/php-parser/test/code/formatPreservation/inlineHtml.test
deleted file mode 100644
index 7494e53597adc83b8d4e03ac8798175c90648bff..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/formatPreservation/inlineHtml.test
+++ /dev/null
@@ -1,54 +0,0 @@
-Handling of inline HTML
------
-<?php
-
-function test() {
-    ?>Foo<?php
-}
------
-$stmts[0]->setAttribute('origNode', null);
------
-<?php
-
-function test()
-{
-    ?>Foo<?php
-}
------
-<?php
-
-function test() {
-    foo();
-    ?>Bar<?php
-    baz();
-}
------
-// TODO Fix broken result
-$stmts[0]->stmts[2] = $stmts[0]->stmts[1];
------
-<?php
-
-function test() {
-    foo();
-    ?>Bar<?php
-    Bar
-}
------
-<?php
-
-function test() {
-    foo();
-    ?>Bar<?php
-    baz();
-}
------
-// TODO Fix broken result
-$stmts[0]->stmts[1] = $stmts[0]->stmts[2];
------
-<?php
-
-function test() {
-    foo();<?php
-    baz();
-    baz();
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/formatPreservation/insertionOfNullable.test b/vendor/nikic/php-parser/test/code/formatPreservation/insertionOfNullable.test
deleted file mode 100644
index 79effd11c3248f75f2cb2a2ea17da4345fcebaf1..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/formatPreservation/insertionOfNullable.test
+++ /dev/null
@@ -1,176 +0,0 @@
-Insertion of a nullable node
------
-<?php
-
-// TODO: The result spacing isn't always optimal. We may want to skip whitespace in some cases.
-
-function
-foo(
-$x,
-&$y
-)
-{}
-
-$foo
-[
-];
-
-[
-    $value
-];
-
-function
-()
-{};
-
-$x
-?
-:
-$y;
-
-yield
-$v  ;
-yield  ;
-
-break
-;
-continue
-;
-return
-;
-
-class
-X
-{
-    public
-    function y()
-    {}
-
-    private
-        $x
-    ;
-}
-
-foreach (
-    $x
-    as
-    $y
-) {}
-
-static
-$var
-;
-
-try {
-} catch (X
-$y) {
-}
-
-if ($cond) { // Foo
-} elseif ($cond2) { // Bar
-}
------
-$stmts[0]->returnType = new Node\Name('Foo');
-$stmts[0]->params[0]->type = new Node\Identifier('int');
-$stmts[0]->params[1]->type = new Node\Identifier('array');
-$stmts[0]->params[1]->default = new Expr\ConstFetch(new Node\Name('null'));
-$stmts[1]->expr->dim = new Expr\Variable('a');
-$stmts[2]->expr->items[0]->key = new Scalar\String_('X');
-$stmts[3]->expr->returnType = new Node\Name('Bar');
-$stmts[4]->expr->if = new Expr\Variable('z');
-$stmts[5]->expr->key = new Expr\Variable('k');
-$stmts[6]->expr->value = new Expr\Variable('v');
-$stmts[7]->num = new Scalar\LNumber(2);
-$stmts[8]->num = new Scalar\LNumber(2);
-$stmts[9]->expr = new Expr\Variable('x');
-$stmts[10]->extends = new Node\Name\FullyQualified('Bar');
-$stmts[10]->stmts[0]->returnType = new Node\Name('Y');
-$stmts[10]->stmts[1]->props[0]->default = new Scalar\DNumber(42.0);
-$stmts[11]->keyVar = new Expr\Variable('z');
-$stmts[12]->vars[0]->default = new Scalar\String_('abc');
-$stmts[13]->finally = new Stmt\Finally_([]);
-$stmts[14]->else = new Stmt\Else_([]);
------
-<?php
-
-// TODO: The result spacing isn't always optimal. We may want to skip whitespace in some cases.
-
-function
-foo(
-int $x,
-array &$y = null
-) : Foo
-{}
-
-$foo
-[$a
-];
-
-[
-    'X' => $value
-];
-
-function
-() : Bar
-{};
-
-$x
-? $z
-:
-$y;
-
-yield
-$k => $v  ;
-yield $v  ;
-
-break 2
-;
-continue 2
-;
-return $x
-;
-
-class
-X extends \Bar
-{
-    public
-    function y() : Y
-    {}
-
-    private
-        $x = 42.0
-    ;
-}
-
-foreach (
-    $x
-    as
-    $z => $y
-) {}
-
-static
-$var = 'abc'
-;
-
-try {
-} catch (X
-$y) {
-} finally {
-}
-
-if ($cond) { // Foo
-} elseif ($cond2) { // Bar
-} else {
-}
------
-<?php
-
-namespace
-{ echo 42; }
------
-$stmts[0]->name = new Node\Name('Foo');
------
-<?php
-
-namespace Foo
-{ echo 42; }
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/formatPreservation/listInsertion.test b/vendor/nikic/php-parser/test/code/formatPreservation/listInsertion.test
deleted file mode 100644
index 9211958d7db57e849620ff6dc50ef86868fa9da3..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/formatPreservation/listInsertion.test
+++ /dev/null
@@ -1,309 +0,0 @@
-Insertion into list nodes
------
-<?php
-$foo;
-
-$bar;
------
-$stmts[] = new Stmt\Expression(new Expr\Variable('baz'));
------
-<?php
-$foo;
-
-$bar;
-$baz;
------
-<?php
-
-function test() {
-    $foo;
-
-    $bar;
-}
------
-$stmts[0]->stmts[] = new Stmt\Expression(new Expr\Variable('baz'));
------
-<?php
-
-function test() {
-    $foo;
-
-    $bar;
-    $baz;
-}
------
-<?php
-
-function test(Foo     $param1) {}
------
-$stmts[0]->params[] = new Node\Param(new Expr\Variable('param2'));
------
-<?php
-
-function test(Foo     $param1, $param2) {}
------
-<?php
-
-try {
-    /* stuff */
-} catch
-(Foo $x) {}
------
-$stmts[0]->catches[0]->types[] = new Node\Name('Bar');
------
-<?php
-
-try {
-    /* stuff */
-} catch
-(Foo|Bar $x) {}
------
-<?php
-
-function test(Foo     $param1) {}
------
-array_unshift($stmts[0]->params, new Node\Param(new Expr\Variable('param0')));
------
-<?php
-
-function test($param0, Foo     $param1) {}
------
-<?php
-
-function test() {}
------
-$stmts[0]->params[] = new Node\Param(new Expr\Variable('param0'));
------
-<?php
-
-function test($param0) {}
------
-<?php
-
-if ($cond) {
-} elseif ($cond2) {
-}
------
-$stmts[0]->elseifs[] = new Stmt\ElseIf_(new Expr\Variable('cond3'), []);
------
-<?php
-
-if ($cond) {
-} elseif ($cond2) {
-} elseif ($cond3) {
-}
------
-<?php
-
-try {
-} catch (Foo $foo) {
-}
------
-$stmts[0]->catches[] = new Stmt\Catch_([new Node\Name('Bar')], new Expr\Variable('bar'), []);
------
-<?php
-
-try {
-} catch (Foo $foo) {
-} catch (Bar $bar) {
-}
------
-<?php
-$foo; $bar;
------
-$node = new Stmt\Expression(new Expr\Variable('baz'));
-$node->setAttribute('comments', [new Comment('// Test')]);
-$stmts[] = $node;
------
-<?php
-$foo; $bar;
-// Test
-$baz;
------
-<?php
-function test() {
-    $foo; $bar;
-}
------
-$node = new Stmt\Expression(new Expr\Variable('baz'));
-$node->setAttribute('comments', [new Comment('// Test'), new Comment('// Test 2')]);
-$stmts[0]->stmts[] = $node;
------
-<?php
-function test() {
-    $foo; $bar;
-    // Test
-    // Test 2
-    $baz;
-}
------
-<?php
-namespace
-Foo;
------
-$stmts[0]->name->parts[0] = 'Xyz';
------
-<?php
-namespace
-Xyz;
------
-<?php
-function test() {
-    $foo; $bar;
-}
------
-$node = new Stmt\Expression(new Expr\Variable('baz'));
-array_unshift($stmts[0]->stmts, $node);
------
-<?php
-function test() {
-    $baz;
-    $foo; $bar;
-}
------
-<?php
-function test() {
-    $foo; $bar;
-}
------
-$node = new Stmt\Expression(new Expr\Variable('baz'));
-$node->setAttribute('comments', [new Comment('// Test')]);
-array_unshift($stmts[0]->stmts, $node);
------
-<?php
-function test() {
-    // Test
-    $baz;
-    $foo; $bar;
-}
------
-<?php
-function test() {
-
-    // Foo bar
-    $foo; $bar;
-}
------
-$node = new Stmt\Expression(new Expr\Variable('baz'));
-$node->setAttribute('comments', [new Comment('// Test')]);
-array_unshift($stmts[0]->stmts, $node);
------
-<?php
-function test() {
-
-    // Test
-    $baz;
-    // Foo bar
-    $foo; $bar;
-}
------
-<?php
-function test() {
-
-    // Foo bar
-    $foo; $bar;
-}
------
-$node = new Stmt\Expression(new Expr\Variable('baz'));
-$node->setAttribute('comments', [new Comment('// Test')]);
-array_unshift($stmts[0]->stmts, $node);
-$stmts[0]->stmts[1]->setAttribute('comments', [new Comment('// Bar foo')]);
------
-<?php
-function test() {
-
-    // Test
-    $baz;
-    // Bar foo
-    $foo; $bar;
-}
------
-<?php
-function test() {
-
-    // Foo bar
-    $foo; $bar;
-}
------
-$node = new Stmt\Expression(new Expr\Variable('baz'));
-$node->setAttribute('comments', [new Comment('// Test')]);
-array_unshift($stmts[0]->stmts, $node);
-$stmts[0]->stmts[1]->setAttribute('comments', []);
------
-<?php
-function test() {
-
-    // Test
-    $baz;
-    $foo; $bar;
-}
------
-<?php
-function test() {
-
-    // Foo bar
-    $foo; $bar;
-}
------
-array_unshift(
-    $stmts[0]->stmts,
-    new Stmt\Expression(new Expr\Variable('a')),
-    new Stmt\Expression(new Expr\Variable('b')));
------
-<?php
-function test() {
-
-    $a;
-    $b;
-    // Foo bar
-    $foo; $bar;
-}
------
-<?php
-function test() {}
------
-/* Insertion into empty list not handled yet */
-$stmts[0]->stmts = [
-    new Stmt\Expression(new Expr\Variable('a')),
-    new Stmt\Expression(new Expr\Variable('b')),
-];
------
-<?php
-function test()
-{
-    $a;
-    $b;
-}
------
-<?php
-$array = [
-    1,
-    2,
-    3,
-];
------
-array_unshift($stmts[0]->expr->expr->items, new Expr\ArrayItem(new Scalar\LNumber(42)));
-$stmts[0]->expr->expr->items[] = new Expr\ArrayItem(new Scalar\LNumber(24));
------
-<?php
-$array = [
-    42,
-    1,
-    2,
-    3,
-    24,
-];
------
-<?php
-$array = [
-    1, 2,
-    3,
-];
------
-$stmts[0]->expr->expr->items[] = new Expr\ArrayItem(new Scalar\LNumber(24));
------
-<?php
-$array = [
-    1, 2,
-    3, 24,
-];
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/formatPreservation/listInsertionIndentation.test b/vendor/nikic/php-parser/test/code/formatPreservation/listInsertionIndentation.test
deleted file mode 100644
index ffcc6cfb5b912aa723ecc70f7b5ce1411dd8b497..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/formatPreservation/listInsertionIndentation.test
+++ /dev/null
@@ -1,17 +0,0 @@
-Check correct indentation use when inserting into list node
------
-<?php
-$this->foo = new Foo;
-$this->foo->a()
-          ->b();
------
-$outerCall = $stmts[1]->expr;
-$innerCall = $outerCall->var;
-$var = $innerCall->var;
-$stmts[1]->expr = $innerCall;
-$stmts[2] = new Stmt\Expression(new Expr\MethodCall($var, $outerCall->name));
------
-<?php
-$this->foo = new Foo;
-$this->foo->a();
-$this->foo->b();
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/formatPreservation/listRemoval.test b/vendor/nikic/php-parser/test/code/formatPreservation/listRemoval.test
deleted file mode 100644
index 0ac423901b2c2756562f4898708596d94bc4cb25..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/formatPreservation/listRemoval.test
+++ /dev/null
@@ -1,41 +0,0 @@
-Removing from list nodes
------
-<?php $foo; $bar; $baz;
------
-array_splice($stmts, 1, 1, []);
------
-<?php $foo; $baz;
------
-<?php
-function foo(
-    $a,
-    $b,
-    $c
-) {}
------
-array_pop($stmts[0]->params);
------
-<?php
-function foo(
-    $a,
-    $b
-) {}
------
-<?php
-function foo(
-    $a,
-    $b,
-    $c
-) {}
------
-array_pop($stmts[0]->params);
-$stmts[0]->params[] = new Node\Param(new Expr\Variable('x'));
-$stmts[0]->params[] = new Node\Param(new Expr\Variable('y'));
------
-<?php
-function foo(
-    $a,
-    $b,
-    $x,
-    $y
-) {}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/formatPreservation/modifierChange.test b/vendor/nikic/php-parser/test/code/formatPreservation/modifierChange.test
deleted file mode 100644
index 06dba62dce9495f46fccd795de3fec7211d03f16..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/formatPreservation/modifierChange.test
+++ /dev/null
@@ -1,33 +0,0 @@
-Modifier change
------
-<?php
-class Foo {}
-abstract class Bar {
-    const
-    FOO = 42;
-
-    var $foo
-    = 24;
-
-    public function
-    foo() {}
-}
------
-$stmts[0]->flags = Stmt\Class_::MODIFIER_ABSTRACT;
-$stmts[1]->flags = 0;
-$stmts[1]->stmts[0]->flags = Stmt\Class_::MODIFIER_PRIVATE;
-$stmts[1]->stmts[1]->flags = Stmt\Class_::MODIFIER_PROTECTED;
-$stmts[1]->stmts[2]->flags |= Stmt\Class_::MODIFIER_FINAL;
------
-<?php
-abstract class Foo {}
-class Bar {
-    private const
-    FOO = 42;
-
-    protected $foo
-    = 24;
-
-    public final function
-    foo() {}
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/formatPreservation/nopCommentAtEnd.test b/vendor/nikic/php-parser/test/code/formatPreservation/nopCommentAtEnd.test
deleted file mode 100644
index 059b5f113b39aa601638563a9189f927419e26de..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/formatPreservation/nopCommentAtEnd.test
+++ /dev/null
@@ -1,11 +0,0 @@
-Nop statement with comment at end (#513)
------
-<?php
-$foo;
-$bar;
------
-$stmts[1] = new Stmt\Nop(['comments' => [new Comment('//Some comment here')]]);
------
-<?php
-$foo;
-//Some comment here
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/formatPreservation/removalViaNull.test b/vendor/nikic/php-parser/test/code/formatPreservation/removalViaNull.test
deleted file mode 100644
index da6fdaa9ff293640ff161350219e10d2ad66a3c6..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/formatPreservation/removalViaNull.test
+++ /dev/null
@@ -1,194 +0,0 @@
-Removing subnodes by setting them to null
------
-<?php
-function
-foo (
-    Bar $foo
-        = null,
-    Foo $bar) : baz
-{}
-
-function
-()
-: int
-{};
-
-class
-Foo
-extends
-Bar
-{
-    public
-    function
-    foo() : ?X {}
-
-    public
-      $prop = 'x'
-    ;
-
-    use T {
-        T
-        ::
-        x
-        as
-        public
-        y
-        ;
-    }
-}
-
-$foo [ $bar ];
-exit ( $bar );
-$foo
-? $bar :
-$baz;
-[ $a => $b
-, $c => $d];
-
-yield
-$foo
-=>
-$bar;
-yield
-$bar;
-
-break
-2
-;
-continue
-2
-;
-
-foreach(
-    $array
-as
-    $key
- =>
-    $value
-) {}
-
-if
-($x)
-{
-}
-
-else {}
-
-return
-$val
-;
-static
-  $x
-  =
-  $y
-;
-
-try {} catch
-  (X $y)
-  {}
-finally
-{}
------
-$stmts[0]->returnType = null;
-$stmts[0]->params[0]->default = null;
-$stmts[0]->params[1]->type = null;
-$stmts[1]->expr->returnType = null;
-$stmts[2]->extends = null;
-$stmts[2]->stmts[0]->returnType = null;
-$stmts[2]->stmts[1]->props[0]->default = null;
-$stmts[2]->stmts[2]->adaptations[0]->newName = null;
-$stmts[3]->expr->dim = null;
-$stmts[4]->expr->expr = null;
-$stmts[5]->expr->if = null;
-$stmts[6]->expr->items[1]->key = null;
-$stmts[7]->expr->key = null;
-$stmts[8]->expr->value = null;
-$stmts[9]->num = null;
-$stmts[10]->num = null;
-$stmts[11]->keyVar = null;
-$stmts[12]->else = null;
-$stmts[13]->expr = null;
-$stmts[14]->vars[0]->default = null;
-$stmts[15]->finally = null;
------
-<?php
-function
-foo (
-    Bar $foo,
-    $bar)
-{}
-
-function
-()
-{};
-
-class
-Foo
-{
-    public
-    function
-    foo() {}
-
-    public
-      $prop
-    ;
-
-    use T {
-        T
-        ::
-        x
-        as
-        public
-        ;
-    }
-}
-
-$foo [];
-exit ();
-$foo
-?:
-$baz;
-[ $a => $b
-, $d];
-
-yield
-$bar;
-yield;
-
-break;
-continue;
-
-foreach(
-    $array
-as
-    $value
-) {}
-
-if
-($x)
-{
-}
-
-return;
-static
-  $x
-;
-
-try {} catch
-  (X $y)
-  {}
------
-<?php
-
-namespace
-A
-    {
-    }
------
-$stmts[0]->name = null;
------
-<?php
-
-namespace
-    {
-    }
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/formatPreservation/removingPropertyType.test b/vendor/nikic/php-parser/test/code/formatPreservation/removingPropertyType.test
deleted file mode 100644
index 37b174c10de034897e7358ed423a7296d47e4d70..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/formatPreservation/removingPropertyType.test
+++ /dev/null
@@ -1,22 +0,0 @@
-Removing property type
------
-<?php
-
-class B
-{
-
-    public
-    ?float
-    $b;
-}
------
-$stmts[0]->stmts[0]->type = null;
------
-<?php
-
-class B
-{
-
-    public
-    $b;
-}
diff --git a/vendor/nikic/php-parser/test/code/formatPreservation/traitAlias.test b/vendor/nikic/php-parser/test/code/formatPreservation/traitAlias.test
deleted file mode 100644
index 8774bb6f351770e415dd2485299ff3f312649980..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/formatPreservation/traitAlias.test
+++ /dev/null
@@ -1,19 +0,0 @@
-Trait alias
------
-<?php
-class X {
-    use T {
-        exit
-            as die;
-    }
-}
------
-/* do nothing */
------
-<?php
-class X {
-    use T {
-        exit
-            as die;
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/blockComments.test b/vendor/nikic/php-parser/test/code/parser/blockComments.test
deleted file mode 100644
index 8cfe166d744ee070ecc1c67fd679b128713493e3..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/blockComments.test
+++ /dev/null
@@ -1,36 +0,0 @@
-Comments on blocks
------
-<?php
-
-// foo
-{
-    // bar
-    {
-        // baz
-        $a;
-    }
-}
-
-// empty
-{}
------
-array(
-    0: Stmt_Expression(
-        expr: Expr_Variable(
-            name: a
-            comments: array(
-                0: // baz
-            )
-        )
-        comments: array(
-            0: // foo
-            1: // bar
-            2: // baz
-        )
-    )
-    1: Stmt_Nop(
-        comments: array(
-            0: // empty
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/commentAtEndOfClass.test b/vendor/nikic/php-parser/test/code/parser/commentAtEndOfClass.test
deleted file mode 100644
index 8096b73bd73e2c90bf3f3933b442c438dea4766a..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/commentAtEndOfClass.test
+++ /dev/null
@@ -1,38 +0,0 @@
-Comment at end of class (#509)
------
-<?php
-class MyClass {
-    protected $a;
-    // my comment
-}
------
-array(
-    0: Stmt_Class(
-        flags: 0
-        name: Identifier(
-            name: MyClass
-        )
-        extends: null
-        implements: array(
-        )
-        stmts: array(
-            0: Stmt_Property(
-                flags: MODIFIER_PROTECTED (2)
-                type: null
-                props: array(
-                    0: Stmt_PropertyProperty(
-                        name: VarLikeIdentifier(
-                            name: a
-                        )
-                        default: null
-                    )
-                )
-            )
-            1: Stmt_Nop(
-                comments: array(
-                    0: // my comment
-                )
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/comments.test b/vendor/nikic/php-parser/test/code/parser/comments.test
deleted file mode 100644
index 90b6b1f0798ed36dea6b865fccf143f41e647c8b..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/comments.test
+++ /dev/null
@@ -1,108 +0,0 @@
-Comments
------
-<?php
-
-/** doc 1 */
-/* foobar 1 */
-// foo 1
-// bar 1
-$var;
-
-if ($cond) {
-    /** doc 2 */
-    /* foobar 2 */
-    // foo 2
-    // bar 2
-}
-
-/** doc 3 */
-/* foobar 3 */
-// foo 3
-// bar 3
------
-array(
-    0: Stmt_Expression(
-        expr: Expr_Variable(
-            name: var
-            comments: array(
-                0: /** doc 1 */
-                1: /* foobar 1 */
-                2: // foo 1
-                3: // bar 1
-            )
-        )
-        comments: array(
-            0: /** doc 1 */
-            1: /* foobar 1 */
-            2: // foo 1
-            3: // bar 1
-        )
-    )
-    1: Stmt_If(
-        cond: Expr_Variable(
-            name: cond
-        )
-        stmts: array(
-            0: Stmt_Nop(
-                comments: array(
-                    0: /** doc 2 */
-                    1: /* foobar 2 */
-                    2: // foo 2
-                    3: // bar 2
-                )
-            )
-        )
-        elseifs: array(
-        )
-        else: null
-    )
-    2: Stmt_Nop(
-        comments: array(
-            0: /** doc 3 */
-            1: /* foobar 3 */
-            2: // foo 3
-            3: // bar 3
-        )
-    )
-)
------
-<?php
-
-/** doc */
-/* foobar */
-// foo
-// bar
-
-?>
------
-array(
-    0: Stmt_Nop(
-        comments: array(
-            0: /** doc */
-            1: /* foobar */
-            2: // foo
-            3: // bar
-        )
-    )
-)
------
-<?php
-
-// comment
-if (42) {}
------
-array(
-    0: Stmt_If(
-        cond: Scalar_LNumber(
-            value: 42
-        )
-        stmts: array(
-        )
-        elseifs: array(
-        )
-        else: null
-        comments: array(
-            0: // comment
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/errorHandling/eofError.test b/vendor/nikic/php-parser/test/code/parser/errorHandling/eofError.test
deleted file mode 100644
index 012841def0d8b7e773937de474f5261cbd140572..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/errorHandling/eofError.test
+++ /dev/null
@@ -1,36 +0,0 @@
-Error positions
------
-<?php foo
------
-Syntax error, unexpected EOF from 1:10 to 1:10
-array(
-    0: Stmt_Expression(
-        expr: Expr_ConstFetch(
-            name: Name(
-                parts: array(
-                    0: foo
-                )
-            )
-        )
-    )
-)
------
-<?php foo /* bar */
------
-Syntax error, unexpected EOF from 1:20 to 1:20
-array(
-    0: Stmt_Expression(
-        expr: Expr_ConstFetch(
-            name: Name(
-                parts: array(
-                    0: foo
-                )
-            )
-        )
-    )
-    1: Stmt_Nop(
-        comments: array(
-            0: /* bar */
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/errorHandling/lexerErrors.test b/vendor/nikic/php-parser/test/code/parser/errorHandling/lexerErrors.test
deleted file mode 100644
index 163b743adefe995c7a0c37e53c7cab381146af3d..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/errorHandling/lexerErrors.test
+++ /dev/null
@@ -1,140 +0,0 @@
-Lexer errors
------
-<?php
-
-$a = 42;
-/*
-$b = 24;
------
-Unterminated comment from 4:1 to 5:9
-array(
-    0: Stmt_Expression(
-        expr: Expr_Assign(
-            var: Expr_Variable(
-                name: a
-            )
-            expr: Scalar_LNumber(
-                value: 42
-            )
-        )
-    )
-    1: Stmt_Nop(
-        comments: array(
-            0: /*
-            $b = 24;
-        )
-    )
-)
------
-<?php
-
-$a = 42;
-@@{ "\1" }@@
-$b = 24;
------
-Unexpected character "" (ASCII 1) from 4:1 to 4:1
-array(
-    0: Stmt_Expression(
-        expr: Expr_Assign(
-            var: Expr_Variable(
-                name: a
-            )
-            expr: Scalar_LNumber(
-                value: 42
-            )
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_Assign(
-            var: Expr_Variable(
-                name: b
-            )
-            expr: Scalar_LNumber(
-                value: 24
-            )
-        )
-    )
-)
------
-<?php
-
-$a = 42;
-@@{ "\0" }@@
-$b = 24;
------
-Unexpected null byte from 4:1 to 4:1
-array(
-    0: Stmt_Expression(
-        expr: Expr_Assign(
-            var: Expr_Variable(
-                name: a
-            )
-            expr: Scalar_LNumber(
-                value: 42
-            )
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_Assign(
-            var: Expr_Variable(
-                name: b
-            )
-            expr: Scalar_LNumber(
-                value: 24
-            )
-        )
-    )
-)
------
-<?php
-
-$a = 1;
-@@{ "\1" }@@
-$b = 2;
-@@{ "\2" }@@
-$c = 3;
------
-Unexpected character "@@{ "\1" }@@" (ASCII 1) from 4:1 to 4:1
-Unexpected character "@@{ "\2" }@@" (ASCII 2) from 6:1 to 6:1
-array(
-    0: Stmt_Expression(
-        expr: Expr_Assign(
-            var: Expr_Variable(
-                name: a
-            )
-            expr: Scalar_LNumber(
-                value: 1
-            )
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_Assign(
-            var: Expr_Variable(
-                name: b
-            )
-            expr: Scalar_LNumber(
-                value: 2
-            )
-        )
-    )
-    2: Stmt_Expression(
-        expr: Expr_Assign(
-            var: Expr_Variable(
-                name: c
-            )
-            expr: Scalar_LNumber(
-                value: 3
-            )
-        )
-    )
-)
------
-<?php
-
-if ($b) {
-    $a = 1;
-    /* unterminated
-}
------
-Unterminated comment from 5:5 to 6:2
-Syntax error, unexpected EOF from 6:2 to 6:2
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/errorHandling/recovery.test b/vendor/nikic/php-parser/test/code/parser/errorHandling/recovery.test
deleted file mode 100644
index a9fd49d0d657b41531a7626c81b8fac4a01f87ab..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/errorHandling/recovery.test
+++ /dev/null
@@ -1,1417 +0,0 @@
-Error recovery
------
-<?php
-
-foo()
-bar()
-baz()
------
-Syntax error, unexpected T_STRING from 4:1 to 4:3
-Syntax error, unexpected T_STRING from 5:1 to 5:3
-Syntax error, unexpected EOF from 5:6 to 5:6
-array(
-    0: Stmt_Expression(
-        expr: Expr_FuncCall(
-            name: Name(
-                parts: array(
-                    0: foo
-                )
-            )
-            args: array(
-            )
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_FuncCall(
-            name: Name(
-                parts: array(
-                    0: bar
-                )
-            )
-            args: array(
-            )
-        )
-    )
-    2: Stmt_Expression(
-        expr: Expr_FuncCall(
-            name: Name(
-                parts: array(
-                    0: baz
-                )
-            )
-            args: array(
-            )
-        )
-    )
-)
------
-<?php
-
-foo()
-bar();
-baz();
------
-Syntax error, unexpected T_STRING from 4:1 to 4:3
-array(
-    0: Stmt_Expression(
-        expr: Expr_FuncCall(
-            name: Name(
-                parts: array(
-                    0: foo
-                )
-            )
-            args: array(
-            )
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_FuncCall(
-            name: Name(
-                parts: array(
-                    0: bar
-                )
-            )
-            args: array(
-            )
-        )
-    )
-    2: Stmt_Expression(
-        expr: Expr_FuncCall(
-            name: Name(
-                parts: array(
-                    0: baz
-                )
-            )
-            args: array(
-            )
-        )
-    )
-)
------
-<?php
-
-foo();
-bar()
-baz();
------
-Syntax error, unexpected T_STRING from 5:1 to 5:3
-array(
-    0: Stmt_Expression(
-        expr: Expr_FuncCall(
-            name: Name(
-                parts: array(
-                    0: foo
-                )
-            )
-            args: array(
-            )
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_FuncCall(
-            name: Name(
-                parts: array(
-                    0: bar
-                )
-            )
-            args: array(
-            )
-        )
-    )
-    2: Stmt_Expression(
-        expr: Expr_FuncCall(
-            name: Name(
-                parts: array(
-                    0: baz
-                )
-            )
-            args: array(
-            )
-        )
-    )
-)
------
-<?php
-abc;
-1 + ;
------
-Syntax error, unexpected ';' from 3:5 to 3:5
-array(
-    0: Stmt_Expression(
-        expr: Expr_ConstFetch(
-            name: Name(
-                parts: array(
-                    0: abc
-                )
-            )
-        )
-    )
-    1: Stmt_Expression(
-        expr: Scalar_LNumber(
-            value: 1
-        )
-    )
-)
------
-<?php
-function test() {
-    1 +
-}
------
-Syntax error, unexpected '}' from 4:1 to 4:1
-array(
-    0: Stmt_Function(
-        byRef: false
-        name: Identifier(
-            name: test
-        )
-        params: array(
-        )
-        returnType: null
-        stmts: array(
-            0: Stmt_Expression(
-                expr: Scalar_LNumber(
-                    value: 1
-                )
-            )
-        )
-    )
-)
------
-<?php
-
-$i = 0;
-while
-
-$j = 1;
-$k = 2;
------
-Syntax error, unexpected T_VARIABLE, expecting '(' from 6:1 to 6:2
-array(
-    0: Stmt_Expression(
-        expr: Expr_Assign(
-            var: Expr_Variable(
-                name: i
-            )
-            expr: Scalar_LNumber(
-                value: 0
-            )
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_Assign(
-            var: Expr_Variable(
-                name: j
-            )
-            expr: Scalar_LNumber(
-                value: 1
-            )
-        )
-    )
-    2: Stmt_Expression(
-        expr: Expr_Assign(
-            var: Expr_Variable(
-                name: k
-            )
-            expr: Scalar_LNumber(
-                value: 2
-            )
-        )
-    )
-)
------
-<?php
-
-$i = 0;
-while () {
-    $j = 1;
-}
-$k = 2;
-// The output here drops the loop - would require Error node to handle this
------
-Syntax error, unexpected ')' from 4:8 to 4:8
-array(
-    0: Stmt_Expression(
-        expr: Expr_Assign(
-            var: Expr_Variable(
-                name: i
-            )
-            expr: Scalar_LNumber(
-                value: 0
-            )
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_Assign(
-            var: Expr_Variable(
-                name: j
-            )
-            expr: Scalar_LNumber(
-                value: 1
-            )
-        )
-    )
-    2: Stmt_Expression(
-        expr: Expr_Assign(
-            var: Expr_Variable(
-                name: k
-            )
-            expr: Scalar_LNumber(
-                value: 2
-            )
-        )
-    )
-    3: Stmt_Nop(
-        comments: array(
-            0: // The output here drops the loop - would require Error node to handle this
-        )
-    )
-)
------
-<?php
-// Can't recover this yet, as the '}' for the inner_statement_list
-// is always required.
-
-$i = 0;
-while (true) {
-    $i = 1;
-    $i = 2;
------
-Syntax error, unexpected EOF from 8:12 to 8:12
------
-<?php
-$foo->
-;
------
-!!positions
-Syntax error, unexpected ';', expecting T_STRING or T_VARIABLE or '{' or '$' from 3:1 to 3:1
-array(
-    0: Stmt_Expression[2:1 - 3:1](
-        expr: Expr_PropertyFetch[2:1 - 2:6](
-            var: Expr_Variable[2:1 - 2:4](
-                name: foo
-            )
-            name: Expr_Error[3:1 - 2:6](
-            )
-        )
-    )
-)
------
-<?php
-function foo() {
-    $bar->
-}
------
-!!positions
-Syntax error, unexpected '}', expecting T_STRING or T_VARIABLE or '{' or '$' from 4:1 to 4:1
-array(
-    0: Stmt_Function[2:1 - 4:1](
-        byRef: false
-        name: Identifier[2:10 - 2:12](
-            name: foo
-        )
-        params: array(
-        )
-        returnType: null
-        stmts: array(
-            0: Stmt_Expression[3:5 - 3:10](
-                expr: Expr_PropertyFetch[3:5 - 3:10](
-                    var: Expr_Variable[3:5 - 3:8](
-                        name: bar
-                    )
-                    name: Expr_Error[4:1 - 3:10](
-                    )
-                )
-            )
-        )
-    )
-)
------
-<?php
-new T
------
-Syntax error, unexpected EOF from 2:6 to 2:6
-array(
-    0: Stmt_Expression(
-        expr: Expr_New(
-            class: Name(
-                parts: array(
-                    0: T
-                )
-            )
-            args: array(
-            )
-        )
-    )
-)
------
-<?php
-new
------
-!!php7,positions
-Syntax error, unexpected EOF from 2:4 to 2:4
-array(
-    0: Stmt_Expression[2:1 - 2:3](
-        expr: Expr_New[2:1 - 2:3](
-            class: Expr_Error[2:4 - 2:3](
-            )
-            args: array(
-            )
-        )
-    )
-)
------
-<?php
-$foo instanceof
------
-!!php7
-Syntax error, unexpected EOF from 2:16 to 2:16
-array(
-    0: Stmt_Expression(
-        expr: Expr_Instanceof(
-            expr: Expr_Variable(
-                name: foo
-            )
-            class: Expr_Error(
-            )
-        )
-    )
-)
------
-<?php
-$
------
-!!php7
-Syntax error, unexpected EOF, expecting T_VARIABLE or '{' or '$' from 2:2 to 2:2
-array(
-    0: Stmt_Expression(
-        expr: Expr_Variable(
-            name: Expr_Error(
-            )
-        )
-    )
-)
------
-<?php
-Foo::$
------
-!!php7
-Syntax error, unexpected EOF, expecting T_VARIABLE or '{' or '$' from 2:7 to 2:7
-array(
-    0: Stmt_Expression(
-        expr: Expr_StaticPropertyFetch(
-            class: Name(
-                parts: array(
-                    0: Foo
-                )
-            )
-            name: Expr_Error(
-            )
-        )
-    )
-)
------
-<?php
-Foo::
------
-!!php7
-Syntax error, unexpected EOF from 2:6 to 2:6
-array(
-    0: Stmt_Expression(
-        expr: Expr_ClassConstFetch(
-            class: Name(
-                parts: array(
-                    0: Foo
-                )
-            )
-            name: Expr_Error(
-            )
-        )
-    )
-)
------
-<?php
-namespace Foo
-use A
-use function a
-use A\{B}
-const A = 1
-break
-break 2
-continue
-continue 2
-return
-return 2
-echo $a
-unset($a)
-throw $x
-goto label
------
-!!php7
-Syntax error, unexpected T_USE, expecting ';' or '{' from 3:1 to 3:3
-Syntax error, unexpected T_USE, expecting ';' from 5:1 to 5:3
-Syntax error, unexpected T_CONST, expecting ';' from 6:1 to 6:5
-Syntax error, unexpected T_BREAK, expecting ';' from 7:1 to 7:5
-Syntax error, unexpected T_THROW, expecting ';' from 15:1 to 15:5
-array(
-    0: Stmt_Namespace(
-        name: Name(
-            parts: array(
-                0: Foo
-            )
-        )
-        stmts: array(
-            0: Stmt_Use(
-                type: TYPE_NORMAL (1)
-                uses: array(
-                    0: Stmt_UseUse(
-                        type: TYPE_UNKNOWN (0)
-                        name: Name(
-                            parts: array(
-                                0: A
-                            )
-                        )
-                        alias: null
-                    )
-                )
-            )
-            1: Stmt_Use(
-                type: TYPE_FUNCTION (2)
-                uses: array(
-                    0: Stmt_UseUse(
-                        type: TYPE_UNKNOWN (0)
-                        name: Name(
-                            parts: array(
-                                0: a
-                            )
-                        )
-                        alias: null
-                    )
-                )
-            )
-            2: Stmt_GroupUse(
-                type: TYPE_UNKNOWN (0)
-                prefix: Name(
-                    parts: array(
-                        0: A
-                    )
-                )
-                uses: array(
-                    0: Stmt_UseUse(
-                        type: TYPE_NORMAL (1)
-                        name: Name(
-                            parts: array(
-                                0: B
-                            )
-                        )
-                        alias: null
-                    )
-                )
-            )
-            3: Stmt_Const(
-                consts: array(
-                    0: Const(
-                        name: Identifier(
-                            name: A
-                        )
-                        value: Scalar_LNumber(
-                            value: 1
-                        )
-                    )
-                )
-            )
-            4: Stmt_Break(
-                num: null
-            )
-            5: Stmt_Break(
-                num: Scalar_LNumber(
-                    value: 2
-                )
-            )
-            6: Stmt_Continue(
-                num: null
-            )
-            7: Stmt_Continue(
-                num: Scalar_LNumber(
-                    value: 2
-                )
-            )
-            8: Stmt_Return(
-                expr: null
-            )
-            9: Stmt_Return(
-                expr: Scalar_LNumber(
-                    value: 2
-                )
-            )
-            10: Stmt_Echo(
-                exprs: array(
-                    0: Expr_Variable(
-                        name: a
-                    )
-                )
-            )
-            11: Stmt_Unset(
-                vars: array(
-                    0: Expr_Variable(
-                        name: a
-                    )
-                )
-            )
-            12: Stmt_Throw(
-                expr: Expr_Variable(
-                    name: x
-                )
-            )
-            13: Stmt_Goto(
-                name: Identifier(
-                    name: label
-                )
-            )
-        )
-    )
-)
------
-<?php
-
-use A\{B, };
-use function A\{b, };
-use A, ;
-const A = 42, ;
-
-class X implements Y, {
-    use A, ;
-    use A, {
-        A::b insteadof C, ;
-    }
-    const A = 42, ;
-    public $x, ;
-}
-interface I extends J, {}
-
-unset($x, );
-isset($x, );
-
-declare(a=42, );
-
-function foo($a, ) {}
-foo($a, );
-global $a, ;
-static $a, ;
-echo $a, ;
-
-for ($a, ; $b, ; $c, );
-function ($a, ) use ($b, ) {};
------
-!!php7
-A trailing comma is not allowed here from 5:6 to 5:6
-A trailing comma is not allowed here from 6:13 to 6:13
-A trailing comma is not allowed here from 8:21 to 8:21
-A trailing comma is not allowed here from 9:10 to 9:10
-A trailing comma is not allowed here from 10:10 to 10:10
-A trailing comma is not allowed here from 11:25 to 11:25
-A trailing comma is not allowed here from 13:17 to 13:17
-A trailing comma is not allowed here from 14:14 to 14:14
-A trailing comma is not allowed here from 16:22 to 16:22
-A trailing comma is not allowed here from 21:13 to 21:13
-A trailing comma is not allowed here from 23:16 to 23:16
-A trailing comma is not allowed here from 25:10 to 25:10
-A trailing comma is not allowed here from 26:10 to 26:10
-A trailing comma is not allowed here from 27:8 to 27:8
-A trailing comma is not allowed here from 29:8 to 29:8
-A trailing comma is not allowed here from 29:14 to 29:14
-A trailing comma is not allowed here from 29:20 to 29:20
-A trailing comma is not allowed here from 30:13 to 30:13
-A trailing comma is not allowed here from 30:24 to 30:24
-array(
-    0: Stmt_GroupUse(
-        type: TYPE_UNKNOWN (0)
-        prefix: Name(
-            parts: array(
-                0: A
-            )
-        )
-        uses: array(
-            0: Stmt_UseUse(
-                type: TYPE_NORMAL (1)
-                name: Name(
-                    parts: array(
-                        0: B
-                    )
-                )
-                alias: null
-            )
-        )
-    )
-    1: Stmt_GroupUse(
-        type: TYPE_FUNCTION (2)
-        prefix: Name(
-            parts: array(
-                0: A
-            )
-        )
-        uses: array(
-            0: Stmt_UseUse(
-                type: TYPE_UNKNOWN (0)
-                name: Name(
-                    parts: array(
-                        0: b
-                    )
-                )
-                alias: null
-            )
-        )
-    )
-    2: Stmt_Use(
-        type: TYPE_NORMAL (1)
-        uses: array(
-            0: Stmt_UseUse(
-                type: TYPE_UNKNOWN (0)
-                name: Name(
-                    parts: array(
-                        0: A
-                    )
-                )
-                alias: null
-            )
-        )
-    )
-    3: Stmt_Const(
-        consts: array(
-            0: Const(
-                name: Identifier(
-                    name: A
-                )
-                value: Scalar_LNumber(
-                    value: 42
-                )
-            )
-        )
-    )
-    4: Stmt_Class(
-        flags: 0
-        name: Identifier(
-            name: X
-        )
-        extends: null
-        implements: array(
-            0: Name(
-                parts: array(
-                    0: Y
-                )
-            )
-        )
-        stmts: array(
-            0: Stmt_TraitUse(
-                traits: array(
-                    0: Name(
-                        parts: array(
-                            0: A
-                        )
-                    )
-                )
-                adaptations: array(
-                )
-            )
-            1: Stmt_TraitUse(
-                traits: array(
-                    0: Name(
-                        parts: array(
-                            0: A
-                        )
-                    )
-                )
-                adaptations: array(
-                    0: Stmt_TraitUseAdaptation_Precedence(
-                        trait: Name(
-                            parts: array(
-                                0: A
-                            )
-                        )
-                        method: Identifier(
-                            name: b
-                        )
-                        insteadof: array(
-                            0: Name(
-                                parts: array(
-                                    0: C
-                                )
-                            )
-                        )
-                    )
-                )
-            )
-            2: Stmt_ClassConst(
-                flags: 0
-                consts: array(
-                    0: Const(
-                        name: Identifier(
-                            name: A
-                        )
-                        value: Scalar_LNumber(
-                            value: 42
-                        )
-                    )
-                )
-            )
-            3: Stmt_Property(
-                flags: MODIFIER_PUBLIC (1)
-                type: null
-                props: array(
-                    0: Stmt_PropertyProperty(
-                        name: VarLikeIdentifier(
-                            name: x
-                        )
-                        default: null
-                    )
-                )
-            )
-        )
-    )
-    5: Stmt_Interface(
-        name: Identifier(
-            name: I
-        )
-        extends: array(
-            0: Name(
-                parts: array(
-                    0: J
-                )
-            )
-        )
-        stmts: array(
-        )
-    )
-    6: Stmt_Unset(
-        vars: array(
-            0: Expr_Variable(
-                name: x
-            )
-        )
-    )
-    7: Stmt_Expression(
-        expr: Expr_Isset(
-            vars: array(
-                0: Expr_Variable(
-                    name: x
-                )
-            )
-        )
-    )
-    8: Stmt_Declare(
-        declares: array(
-            0: Stmt_DeclareDeclare(
-                key: Identifier(
-                    name: a
-                )
-                value: Scalar_LNumber(
-                    value: 42
-                )
-            )
-        )
-        stmts: null
-    )
-    9: Stmt_Function(
-        byRef: false
-        name: Identifier(
-            name: foo
-        )
-        params: array(
-            0: Param(
-                type: null
-                byRef: false
-                variadic: false
-                var: Expr_Variable(
-                    name: a
-                )
-                default: null
-            )
-        )
-        returnType: null
-        stmts: array(
-        )
-    )
-    10: Stmt_Expression(
-        expr: Expr_FuncCall(
-            name: Name(
-                parts: array(
-                    0: foo
-                )
-            )
-            args: array(
-                0: Arg(
-                    value: Expr_Variable(
-                        name: a
-                    )
-                    byRef: false
-                    unpack: false
-                )
-            )
-        )
-    )
-    11: Stmt_Global(
-        vars: array(
-            0: Expr_Variable(
-                name: a
-            )
-        )
-    )
-    12: Stmt_Static(
-        vars: array(
-            0: Stmt_StaticVar(
-                var: Expr_Variable(
-                    name: a
-                )
-                default: null
-            )
-        )
-    )
-    13: Stmt_Echo(
-        exprs: array(
-            0: Expr_Variable(
-                name: a
-            )
-        )
-    )
-    14: Stmt_For(
-        init: array(
-            0: Expr_Variable(
-                name: a
-            )
-        )
-        cond: array(
-            0: Expr_Variable(
-                name: b
-            )
-        )
-        loop: array(
-            0: Expr_Variable(
-                name: c
-            )
-        )
-        stmts: array(
-        )
-    )
-    15: Stmt_Expression(
-        expr: Expr_Closure(
-            static: false
-            byRef: false
-            params: array(
-                0: Param(
-                    type: null
-                    byRef: false
-                    variadic: false
-                    var: Expr_Variable(
-                        name: a
-                    )
-                    default: null
-                )
-            )
-            uses: array(
-                0: Expr_ClosureUse(
-                    var: Expr_Variable(
-                        name: b
-                    )
-                    byRef: false
-                )
-            )
-            returnType: null
-            stmts: array(
-            )
-        )
-    )
-)
------
-<?php
-
-foo(Bar::);
------
-!!php7,positions
-Syntax error, unexpected ')' from 3:10 to 3:10
-array(
-    0: Stmt_Expression[3:1 - 3:11](
-        expr: Expr_FuncCall[3:1 - 3:10](
-            name: Name[3:1 - 3:3](
-                parts: array(
-                    0: foo
-                )
-            )
-            args: array(
-                0: Arg[3:5 - 3:9](
-                    value: Expr_ClassConstFetch[3:5 - 3:9](
-                        class: Name[3:5 - 3:7](
-                            parts: array(
-                                0: Bar
-                            )
-                        )
-                        name: Expr_Error[3:10 - 3:9](
-                        )
-                    )
-                    byRef: false
-                    unpack: false
-                )
-            )
-        )
-    )
-)
------
-<?php
-
-class Foo {
-    publi $foo;
-    public $bar;
-}
------
-!!php7
-Syntax error, unexpected T_STRING from 4:5 to 4:9
-array(
-    0: Stmt_Class(
-        flags: 0
-        name: Identifier(
-            name: Foo
-        )
-        extends: null
-        implements: array(
-        )
-        stmts: array(
-            0: Stmt_Property(
-                flags: MODIFIER_PUBLIC (1)
-                type: null
-                props: array(
-                    0: Stmt_PropertyProperty(
-                        name: VarLikeIdentifier(
-                            name: bar
-                        )
-                        default: null
-                    )
-                )
-            )
-        )
-    )
-)
------
-<?php
-
-foreach ($foo) { $bar; }
-foreach ($foo as ) { $bar; }
------
-!!php7
-Syntax error, unexpected ')' from 3:14 to 3:14
-Syntax error, unexpected ')' from 4:18 to 4:18
-array(
-    0: Stmt_Foreach(
-        expr: Expr_Variable(
-            name: foo
-        )
-        keyVar: null
-        byRef: false
-        valueVar: Expr_Error(
-        )
-        stmts: array(
-            0: Stmt_Expression(
-                expr: Expr_Variable(
-                    name: bar
-                )
-            )
-        )
-    )
-    1: Stmt_Foreach(
-        expr: Expr_Variable(
-            name: foo
-        )
-        keyVar: null
-        byRef: false
-        valueVar: Expr_Error(
-        )
-        stmts: array(
-            0: Stmt_Expression(
-                expr: Expr_Variable(
-                    name: bar
-                )
-            )
-        )
-    )
-)
------
-<?php
-
-function foo(Type) {
-    $foo;
-}
-
-function foo(Type1 $foo, Type2) {
-    $bar;
-}
-
-function foo(...) {
-    $baz;
-}
-
-function foo(&) {
-    $qux;
-}
-
-function foo(Bar)
-
-class Bar {
-    function foo(Baz)
-}
-
-function(Foo);
------
-!!php7
-Syntax error, unexpected ')', expecting T_VARIABLE from 3:18 to 3:18
-Syntax error, unexpected ')', expecting T_VARIABLE from 7:31 to 7:31
-Syntax error, unexpected ')', expecting T_VARIABLE from 11:17 to 11:17
-Syntax error, unexpected ')', expecting T_VARIABLE from 15:15 to 15:15
-Syntax error, unexpected ')', expecting T_VARIABLE from 19:17 to 19:17
-Syntax error, unexpected ')', expecting T_VARIABLE from 22:21 to 22:21
-Syntax error, unexpected ')', expecting T_VARIABLE from 25:13 to 25:13
-array(
-    0: Stmt_Function(
-        byRef: false
-        name: Identifier(
-            name: foo
-        )
-        params: array(
-            0: Param(
-                type: Name(
-                    parts: array(
-                        0: Type
-                    )
-                )
-                byRef: false
-                variadic: false
-                var: Expr_Error(
-                )
-                default: null
-            )
-        )
-        returnType: null
-        stmts: array(
-            0: Stmt_Expression(
-                expr: Expr_Variable(
-                    name: foo
-                )
-            )
-        )
-    )
-    1: Stmt_Function(
-        byRef: false
-        name: Identifier(
-            name: foo
-        )
-        params: array(
-            0: Param(
-                type: Name(
-                    parts: array(
-                        0: Type1
-                    )
-                )
-                byRef: false
-                variadic: false
-                var: Expr_Variable(
-                    name: foo
-                )
-                default: null
-            )
-            1: Param(
-                type: Name(
-                    parts: array(
-                        0: Type2
-                    )
-                )
-                byRef: false
-                variadic: false
-                var: Expr_Error(
-                )
-                default: null
-            )
-        )
-        returnType: null
-        stmts: array(
-            0: Stmt_Expression(
-                expr: Expr_Variable(
-                    name: bar
-                )
-            )
-        )
-    )
-    2: Stmt_Function(
-        byRef: false
-        name: Identifier(
-            name: foo
-        )
-        params: array(
-            0: Param(
-                type: null
-                byRef: false
-                variadic: true
-                var: Expr_Error(
-                )
-                default: null
-            )
-        )
-        returnType: null
-        stmts: array(
-            0: Stmt_Expression(
-                expr: Expr_Variable(
-                    name: baz
-                )
-            )
-        )
-    )
-    3: Stmt_Function(
-        byRef: false
-        name: Identifier(
-            name: foo
-        )
-        params: array(
-            0: Param(
-                type: null
-                byRef: true
-                variadic: false
-                var: Expr_Error(
-                )
-                default: null
-            )
-        )
-        returnType: null
-        stmts: array(
-            0: Stmt_Expression(
-                expr: Expr_Variable(
-                    name: qux
-                )
-            )
-        )
-    )
-    4: Stmt_Function(
-        byRef: false
-        name: Identifier(
-            name: foo
-        )
-        params: array(
-            0: Param(
-                type: Name(
-                    parts: array(
-                        0: Bar
-                    )
-                )
-                byRef: false
-                variadic: false
-                var: Expr_Error(
-                )
-                default: null
-            )
-        )
-        returnType: null
-        stmts: array(
-        )
-    )
-    5: Stmt_Class(
-        flags: 0
-        name: Identifier(
-            name: Bar
-        )
-        extends: null
-        implements: array(
-        )
-        stmts: array(
-            0: Stmt_ClassMethod(
-                flags: 0
-                byRef: false
-                name: Identifier(
-                    name: foo
-                )
-                params: array(
-                    0: Param(
-                        type: Name(
-                            parts: array(
-                                0: Baz
-                            )
-                        )
-                        byRef: false
-                        variadic: false
-                        var: Expr_Error(
-                        )
-                        default: null
-                    )
-                )
-                returnType: null
-                stmts: array(
-                )
-            )
-        )
-    )
-    6: Stmt_Expression(
-        expr: Expr_Closure(
-            static: false
-            byRef: false
-            params: array(
-                0: Param(
-                    type: Name(
-                        parts: array(
-                            0: Foo
-                        )
-                    )
-                    byRef: false
-                    variadic: false
-                    var: Expr_Error(
-                    )
-                    default: null
-                )
-            )
-            uses: array(
-            )
-            returnType: null
-            stmts: array(
-            )
-        )
-    )
-)
------
-<?php
-$array = [
-    $this->value $oopsAnotherValue->get()
-];
-$array = [
-    $value $oopsAnotherValue
-];
-$array = [
-    'key' => $value $oopsAnotherValue
-];
------
-!!php7
-Syntax error, unexpected T_VARIABLE, expecting ',' or ')' or ']' from 3:18 to 3:34
-Syntax error, unexpected T_VARIABLE, expecting ',' or ')' or ']' from 6:12 to 6:28
-Syntax error, unexpected T_VARIABLE, expecting ',' or ')' or ']' from 9:21 to 9:37
-array(
-    0: Stmt_Expression(
-        expr: Expr_Assign(
-            var: Expr_Variable(
-                name: array
-            )
-            expr: Expr_Array(
-                items: array(
-                    0: Expr_ArrayItem(
-                        key: null
-                        value: Expr_PropertyFetch(
-                            var: Expr_Variable(
-                                name: this
-                            )
-                            name: Identifier(
-                                name: value
-                            )
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                    1: Expr_ArrayItem(
-                        key: null
-                        value: Expr_MethodCall(
-                            var: Expr_Variable(
-                                name: oopsAnotherValue
-                            )
-                            name: Identifier(
-                                name: get
-                            )
-                            args: array(
-                            )
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                )
-            )
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_Assign(
-            var: Expr_Variable(
-                name: array
-            )
-            expr: Expr_Array(
-                items: array(
-                    0: Expr_ArrayItem(
-                        key: null
-                        value: Expr_Variable(
-                            name: value
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                    1: Expr_ArrayItem(
-                        key: null
-                        value: Expr_Variable(
-                            name: oopsAnotherValue
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                )
-            )
-        )
-    )
-    2: Stmt_Expression(
-        expr: Expr_Assign(
-            var: Expr_Variable(
-                name: array
-            )
-            expr: Expr_Array(
-                items: array(
-                    0: Expr_ArrayItem(
-                        key: Scalar_String(
-                            value: key
-                        )
-                        value: Expr_Variable(
-                            name: value
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                    1: Expr_ArrayItem(
-                        key: null
-                        value: Expr_Variable(
-                            name: oopsAnotherValue
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                )
-            )
-        )
-    )
-)
------
-<?php
-function foo() :
-{
-    return $a;
-}
------
-!!php7
-Syntax error, unexpected '{' from 3:1 to 3:1
-array(
-    0: Stmt_Function(
-        byRef: false
-        name: Identifier(
-            name: foo
-        )
-        params: array(
-        )
-        returnType: null
-        stmts: array(
-            0: Stmt_Return(
-                expr: Expr_Variable(
-                    name: a
-                )
-            )
-        )
-    )
-)
------
-<?php
-$a = ["a "thing"];
------
-!!php7
-Syntax error, unexpected T_STRING, expecting ',' or ')' or ']' from 2:11 to 2:15
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/arrayDef.test b/vendor/nikic/php-parser/test/code/parser/expr/arrayDef.test
deleted file mode 100644
index 0339a56761b7c3cccd34b0f59c975be2fd8dafd7..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/arrayDef.test
+++ /dev/null
@@ -1,173 +0,0 @@
-Array definitions
------
-<?php
-
-array();
-array('a');
-array('a', );
-array('a', 'b');
-array('a', &$b, 'c' => 'd', 'e' => &$f);
-
-// short array syntax
-[];
-[1, 2, 3];
-['a' => 'b'];
------
-array(
-    0: Stmt_Expression(
-        expr: Expr_Array(
-            items: array(
-            )
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_Array(
-            items: array(
-                0: Expr_ArrayItem(
-                    key: null
-                    value: Scalar_String(
-                        value: a
-                    )
-                    byRef: false
-                    unpack: false
-                )
-            )
-        )
-    )
-    2: Stmt_Expression(
-        expr: Expr_Array(
-            items: array(
-                0: Expr_ArrayItem(
-                    key: null
-                    value: Scalar_String(
-                        value: a
-                    )
-                    byRef: false
-                    unpack: false
-                )
-            )
-        )
-    )
-    3: Stmt_Expression(
-        expr: Expr_Array(
-            items: array(
-                0: Expr_ArrayItem(
-                    key: null
-                    value: Scalar_String(
-                        value: a
-                    )
-                    byRef: false
-                    unpack: false
-                )
-                1: Expr_ArrayItem(
-                    key: null
-                    value: Scalar_String(
-                        value: b
-                    )
-                    byRef: false
-                    unpack: false
-                )
-            )
-        )
-    )
-    4: Stmt_Expression(
-        expr: Expr_Array(
-            items: array(
-                0: Expr_ArrayItem(
-                    key: null
-                    value: Scalar_String(
-                        value: a
-                    )
-                    byRef: false
-                    unpack: false
-                )
-                1: Expr_ArrayItem(
-                    key: null
-                    value: Expr_Variable(
-                        name: b
-                    )
-                    byRef: true
-                    unpack: false
-                )
-                2: Expr_ArrayItem(
-                    key: Scalar_String(
-                        value: c
-                    )
-                    value: Scalar_String(
-                        value: d
-                    )
-                    byRef: false
-                    unpack: false
-                )
-                3: Expr_ArrayItem(
-                    key: Scalar_String(
-                        value: e
-                    )
-                    value: Expr_Variable(
-                        name: f
-                    )
-                    byRef: true
-                    unpack: false
-                )
-            )
-        )
-    )
-    5: Stmt_Expression(
-        expr: Expr_Array(
-            items: array(
-            )
-            comments: array(
-                0: // short array syntax
-            )
-        )
-        comments: array(
-            0: // short array syntax
-        )
-    )
-    6: Stmt_Expression(
-        expr: Expr_Array(
-            items: array(
-                0: Expr_ArrayItem(
-                    key: null
-                    value: Scalar_LNumber(
-                        value: 1
-                    )
-                    byRef: false
-                    unpack: false
-                )
-                1: Expr_ArrayItem(
-                    key: null
-                    value: Scalar_LNumber(
-                        value: 2
-                    )
-                    byRef: false
-                    unpack: false
-                )
-                2: Expr_ArrayItem(
-                    key: null
-                    value: Scalar_LNumber(
-                        value: 3
-                    )
-                    byRef: false
-                    unpack: false
-                )
-            )
-        )
-    )
-    7: Stmt_Expression(
-        expr: Expr_Array(
-            items: array(
-                0: Expr_ArrayItem(
-                    key: Scalar_String(
-                        value: a
-                    )
-                    value: Scalar_String(
-                        value: b
-                    )
-                    byRef: false
-                    unpack: false
-                )
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/arrayDestructuring.test b/vendor/nikic/php-parser/test/code/parser/expr/arrayDestructuring.test
deleted file mode 100644
index cfec0d13b1084ce556f3322785ee45fba08b38be..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/arrayDestructuring.test
+++ /dev/null
@@ -1,164 +0,0 @@
-Array destructuring
------
-<?php
-
-[$a, $b] = [$c, $d];
-[, $a, , , $b, ,] = $foo;
-[, [[$a]], $b] = $bar;
-['a' => $b, 'b' => $a] = $baz;
------
-!!php7
-array(
-    0: Stmt_Expression(
-        expr: Expr_Assign(
-            var: Expr_Array(
-                items: array(
-                    0: Expr_ArrayItem(
-                        key: null
-                        value: Expr_Variable(
-                            name: a
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                    1: Expr_ArrayItem(
-                        key: null
-                        value: Expr_Variable(
-                            name: b
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                )
-            )
-            expr: Expr_Array(
-                items: array(
-                    0: Expr_ArrayItem(
-                        key: null
-                        value: Expr_Variable(
-                            name: c
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                    1: Expr_ArrayItem(
-                        key: null
-                        value: Expr_Variable(
-                            name: d
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                )
-            )
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_Assign(
-            var: Expr_Array(
-                items: array(
-                    0: null
-                    1: Expr_ArrayItem(
-                        key: null
-                        value: Expr_Variable(
-                            name: a
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                    2: null
-                    3: null
-                    4: Expr_ArrayItem(
-                        key: null
-                        value: Expr_Variable(
-                            name: b
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                    5: null
-                )
-            )
-            expr: Expr_Variable(
-                name: foo
-            )
-        )
-    )
-    2: Stmt_Expression(
-        expr: Expr_Assign(
-            var: Expr_Array(
-                items: array(
-                    0: null
-                    1: Expr_ArrayItem(
-                        key: null
-                        value: Expr_Array(
-                            items: array(
-                                0: Expr_ArrayItem(
-                                    key: null
-                                    value: Expr_Array(
-                                        items: array(
-                                            0: Expr_ArrayItem(
-                                                key: null
-                                                value: Expr_Variable(
-                                                    name: a
-                                                )
-                                                byRef: false
-                                                unpack: false
-                                            )
-                                        )
-                                    )
-                                    byRef: false
-                                    unpack: false
-                                )
-                            )
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                    2: Expr_ArrayItem(
-                        key: null
-                        value: Expr_Variable(
-                            name: b
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                )
-            )
-            expr: Expr_Variable(
-                name: bar
-            )
-        )
-    )
-    3: Stmt_Expression(
-        expr: Expr_Assign(
-            var: Expr_Array(
-                items: array(
-                    0: Expr_ArrayItem(
-                        key: Scalar_String(
-                            value: a
-                        )
-                        value: Expr_Variable(
-                            name: b
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                    1: Expr_ArrayItem(
-                        key: Scalar_String(
-                            value: b
-                        )
-                        value: Expr_Variable(
-                            name: a
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                )
-            )
-            expr: Expr_Variable(
-                name: baz
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/arraySpread.test b/vendor/nikic/php-parser/test/code/parser/expr/arraySpread.test
deleted file mode 100644
index ed2edce3de9fb08b190cf72eada003a7e5d0df05..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/arraySpread.test
+++ /dev/null
@@ -1,432 +0,0 @@
-Spread array
------
-<?php
-$array = [1, 2, 3];
-
-function getArr() {
-	return [4, 5];
-}
-
-function arrGen() {
-	for($i = 11; $i < 15; $i++) {
-		yield $i;
-	}
-}
-
-[...[]];
-[...[1, 2, 3]];
-[...$array];
-[...getArr()];
-[...arrGen()];
-[...new ArrayIterator(['a', 'b', 'c'])];
-[0, ...$array, ...getArr(), 6, 7, 8, 9, 10, ...arrGen()];
-[0, ...$array, ...$array, 'end'];
------
-array(
-    0: Stmt_Expression(
-        expr: Expr_Assign(
-            var: Expr_Variable(
-                name: array
-            )
-            expr: Expr_Array(
-                items: array(
-                    0: Expr_ArrayItem(
-                        key: null
-                        value: Scalar_LNumber(
-                            value: 1
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                    1: Expr_ArrayItem(
-                        key: null
-                        value: Scalar_LNumber(
-                            value: 2
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                    2: Expr_ArrayItem(
-                        key: null
-                        value: Scalar_LNumber(
-                            value: 3
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                )
-            )
-        )
-    )
-    1: Stmt_Function(
-        byRef: false
-        name: Identifier(
-            name: getArr
-        )
-        params: array(
-        )
-        returnType: null
-        stmts: array(
-            0: Stmt_Return(
-                expr: Expr_Array(
-                    items: array(
-                        0: Expr_ArrayItem(
-                            key: null
-                            value: Scalar_LNumber(
-                                value: 4
-                            )
-                            byRef: false
-                            unpack: false
-                        )
-                        1: Expr_ArrayItem(
-                            key: null
-                            value: Scalar_LNumber(
-                                value: 5
-                            )
-                            byRef: false
-                            unpack: false
-                        )
-                    )
-                )
-            )
-        )
-    )
-    2: Stmt_Function(
-        byRef: false
-        name: Identifier(
-            name: arrGen
-        )
-        params: array(
-        )
-        returnType: null
-        stmts: array(
-            0: Stmt_For(
-                init: array(
-                    0: Expr_Assign(
-                        var: Expr_Variable(
-                            name: i
-                        )
-                        expr: Scalar_LNumber(
-                            value: 11
-                        )
-                    )
-                )
-                cond: array(
-                    0: Expr_BinaryOp_Smaller(
-                        left: Expr_Variable(
-                            name: i
-                        )
-                        right: Scalar_LNumber(
-                            value: 15
-                        )
-                    )
-                )
-                loop: array(
-                    0: Expr_PostInc(
-                        var: Expr_Variable(
-                            name: i
-                        )
-                    )
-                )
-                stmts: array(
-                    0: Stmt_Expression(
-                        expr: Expr_Yield(
-                            key: null
-                            value: Expr_Variable(
-                                name: i
-                            )
-                        )
-                    )
-                )
-            )
-        )
-    )
-    3: Stmt_Expression(
-        expr: Expr_Array(
-            items: array(
-                0: Expr_ArrayItem(
-                    key: null
-                    value: Expr_Array(
-                        items: array(
-                        )
-                    )
-                    byRef: false
-                    unpack: true
-                )
-            )
-        )
-    )
-    4: Stmt_Expression(
-        expr: Expr_Array(
-            items: array(
-                0: Expr_ArrayItem(
-                    key: null
-                    value: Expr_Array(
-                        items: array(
-                            0: Expr_ArrayItem(
-                                key: null
-                                value: Scalar_LNumber(
-                                    value: 1
-                                )
-                                byRef: false
-                                unpack: false
-                            )
-                            1: Expr_ArrayItem(
-                                key: null
-                                value: Scalar_LNumber(
-                                    value: 2
-                                )
-                                byRef: false
-                                unpack: false
-                            )
-                            2: Expr_ArrayItem(
-                                key: null
-                                value: Scalar_LNumber(
-                                    value: 3
-                                )
-                                byRef: false
-                                unpack: false
-                            )
-                        )
-                    )
-                    byRef: false
-                    unpack: true
-                )
-            )
-        )
-    )
-    5: Stmt_Expression(
-        expr: Expr_Array(
-            items: array(
-                0: Expr_ArrayItem(
-                    key: null
-                    value: Expr_Variable(
-                        name: array
-                    )
-                    byRef: false
-                    unpack: true
-                )
-            )
-        )
-    )
-    6: Stmt_Expression(
-        expr: Expr_Array(
-            items: array(
-                0: Expr_ArrayItem(
-                    key: null
-                    value: Expr_FuncCall(
-                        name: Name(
-                            parts: array(
-                                0: getArr
-                            )
-                        )
-                        args: array(
-                        )
-                    )
-                    byRef: false
-                    unpack: true
-                )
-            )
-        )
-    )
-    7: Stmt_Expression(
-        expr: Expr_Array(
-            items: array(
-                0: Expr_ArrayItem(
-                    key: null
-                    value: Expr_FuncCall(
-                        name: Name(
-                            parts: array(
-                                0: arrGen
-                            )
-                        )
-                        args: array(
-                        )
-                    )
-                    byRef: false
-                    unpack: true
-                )
-            )
-        )
-    )
-    8: Stmt_Expression(
-        expr: Expr_Array(
-            items: array(
-                0: Expr_ArrayItem(
-                    key: null
-                    value: Expr_New(
-                        class: Name(
-                            parts: array(
-                                0: ArrayIterator
-                            )
-                        )
-                        args: array(
-                            0: Arg(
-                                value: Expr_Array(
-                                    items: array(
-                                        0: Expr_ArrayItem(
-                                            key: null
-                                            value: Scalar_String(
-                                                value: a
-                                            )
-                                            byRef: false
-                                            unpack: false
-                                        )
-                                        1: Expr_ArrayItem(
-                                            key: null
-                                            value: Scalar_String(
-                                                value: b
-                                            )
-                                            byRef: false
-                                            unpack: false
-                                        )
-                                        2: Expr_ArrayItem(
-                                            key: null
-                                            value: Scalar_String(
-                                                value: c
-                                            )
-                                            byRef: false
-                                            unpack: false
-                                        )
-                                    )
-                                )
-                                byRef: false
-                                unpack: false
-                            )
-                        )
-                    )
-                    byRef: false
-                    unpack: true
-                )
-            )
-        )
-    )
-    9: Stmt_Expression(
-        expr: Expr_Array(
-            items: array(
-                0: Expr_ArrayItem(
-                    key: null
-                    value: Scalar_LNumber(
-                        value: 0
-                    )
-                    byRef: false
-                    unpack: false
-                )
-                1: Expr_ArrayItem(
-                    key: null
-                    value: Expr_Variable(
-                        name: array
-                    )
-                    byRef: false
-                    unpack: true
-                )
-                2: Expr_ArrayItem(
-                    key: null
-                    value: Expr_FuncCall(
-                        name: Name(
-                            parts: array(
-                                0: getArr
-                            )
-                        )
-                        args: array(
-                        )
-                    )
-                    byRef: false
-                    unpack: true
-                )
-                3: Expr_ArrayItem(
-                    key: null
-                    value: Scalar_LNumber(
-                        value: 6
-                    )
-                    byRef: false
-                    unpack: false
-                )
-                4: Expr_ArrayItem(
-                    key: null
-                    value: Scalar_LNumber(
-                        value: 7
-                    )
-                    byRef: false
-                    unpack: false
-                )
-                5: Expr_ArrayItem(
-                    key: null
-                    value: Scalar_LNumber(
-                        value: 8
-                    )
-                    byRef: false
-                    unpack: false
-                )
-                6: Expr_ArrayItem(
-                    key: null
-                    value: Scalar_LNumber(
-                        value: 9
-                    )
-                    byRef: false
-                    unpack: false
-                )
-                7: Expr_ArrayItem(
-                    key: null
-                    value: Scalar_LNumber(
-                        value: 10
-                    )
-                    byRef: false
-                    unpack: false
-                )
-                8: Expr_ArrayItem(
-                    key: null
-                    value: Expr_FuncCall(
-                        name: Name(
-                            parts: array(
-                                0: arrGen
-                            )
-                        )
-                        args: array(
-                        )
-                    )
-                    byRef: false
-                    unpack: true
-                )
-            )
-        )
-    )
-    10: Stmt_Expression(
-        expr: Expr_Array(
-            items: array(
-                0: Expr_ArrayItem(
-                    key: null
-                    value: Scalar_LNumber(
-                        value: 0
-                    )
-                    byRef: false
-                    unpack: false
-                )
-                1: Expr_ArrayItem(
-                    key: null
-                    value: Expr_Variable(
-                        name: array
-                    )
-                    byRef: false
-                    unpack: true
-                )
-                2: Expr_ArrayItem(
-                    key: null
-                    value: Expr_Variable(
-                        name: array
-                    )
-                    byRef: false
-                    unpack: true
-                )
-                3: Expr_ArrayItem(
-                    key: null
-                    value: Scalar_String(
-                        value: end
-                    )
-                    byRef: false
-                    unpack: false
-                )
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/arrow_function.test b/vendor/nikic/php-parser/test/code/parser/expr/arrow_function.test
deleted file mode 100644
index 1beec451e4282bc4777336e62c113a8ced749fc7..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/arrow_function.test
+++ /dev/null
@@ -1,145 +0,0 @@
-Arrow Functions
------
-<?php
-fn(bool $a) => $a;
-fn($x = 42) => $x;
-static fn(&$x) => $x;
-fn&($x) => $x;
-fn($x, ...$rest) => $rest;
-fn(): int => $x;
------
-!!php7
-array(
-    0: Stmt_Expression(
-        expr: Expr_ArrowFunction(
-            static: false
-            byRef: false
-            params: array(
-                0: Param(
-                    type: Identifier(
-                        name: bool
-                    )
-                    byRef: false
-                    variadic: false
-                    var: Expr_Variable(
-                        name: a
-                    )
-                    default: null
-                )
-            )
-            returnType: null
-            expr: Expr_Variable(
-                name: a
-            )
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_ArrowFunction(
-            static: false
-            byRef: false
-            params: array(
-                0: Param(
-                    type: null
-                    byRef: false
-                    variadic: false
-                    var: Expr_Variable(
-                        name: x
-                    )
-                    default: Scalar_LNumber(
-                        value: 42
-                    )
-                )
-            )
-            returnType: null
-            expr: Expr_Variable(
-                name: x
-            )
-        )
-    )
-    2: Stmt_Expression(
-        expr: Expr_ArrowFunction(
-            static: true
-            byRef: false
-            params: array(
-                0: Param(
-                    type: null
-                    byRef: true
-                    variadic: false
-                    var: Expr_Variable(
-                        name: x
-                    )
-                    default: null
-                )
-            )
-            returnType: null
-            expr: Expr_Variable(
-                name: x
-            )
-        )
-    )
-    3: Stmt_Expression(
-        expr: Expr_ArrowFunction(
-            static: false
-            byRef: true
-            params: array(
-                0: Param(
-                    type: null
-                    byRef: false
-                    variadic: false
-                    var: Expr_Variable(
-                        name: x
-                    )
-                    default: null
-                )
-            )
-            returnType: null
-            expr: Expr_Variable(
-                name: x
-            )
-        )
-    )
-    4: Stmt_Expression(
-        expr: Expr_ArrowFunction(
-            static: false
-            byRef: false
-            params: array(
-                0: Param(
-                    type: null
-                    byRef: false
-                    variadic: false
-                    var: Expr_Variable(
-                        name: x
-                    )
-                    default: null
-                )
-                1: Param(
-                    type: null
-                    byRef: false
-                    variadic: true
-                    var: Expr_Variable(
-                        name: rest
-                    )
-                    default: null
-                )
-            )
-            returnType: null
-            expr: Expr_Variable(
-                name: rest
-            )
-        )
-    )
-    5: Stmt_Expression(
-        expr: Expr_ArrowFunction(
-            static: false
-            byRef: false
-            params: array(
-            )
-            returnType: Identifier(
-                name: int
-            )
-            expr: Expr_Variable(
-                name: x
-            )
-        )
-    )
-)
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/assign.test b/vendor/nikic/php-parser/test/code/parser/expr/assign.test
deleted file mode 100644
index 423f48af2f960e5d75608608f76168e06f3a991b..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/assign.test
+++ /dev/null
@@ -1,381 +0,0 @@
-Assignments
------
-<?php
-// simple assign
-$a = $b;
-
-// combined assign
-$a &= $b;
-$a |= $b;
-$a ^= $b;
-$a .= $b;
-$a /= $b;
-$a -= $b;
-$a %= $b;
-$a *= $b;
-$a += $b;
-$a <<= $b;
-$a >>= $b;
-$a **= $b;
-$a ??= $b;
-
-// chained assign
-$a = $b *= $c **= $d;
-
-// by ref assign
-$a =& $b;
-
-// list() assign
-list($a) = $b;
-list($a, , $b) = $c;
-list($a, list(, $c), $d) = $e;
-
-// inc/dec
-++$a;
-$a++;
---$a;
-$a--;
------
-array(
-    0: Stmt_Expression(
-        expr: Expr_Assign(
-            var: Expr_Variable(
-                name: a
-                comments: array(
-                    0: // simple assign
-                )
-            )
-            expr: Expr_Variable(
-                name: b
-            )
-            comments: array(
-                0: // simple assign
-            )
-        )
-        comments: array(
-            0: // simple assign
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_AssignOp_BitwiseAnd(
-            var: Expr_Variable(
-                name: a
-                comments: array(
-                    0: // combined assign
-                )
-            )
-            expr: Expr_Variable(
-                name: b
-            )
-            comments: array(
-                0: // combined assign
-            )
-        )
-        comments: array(
-            0: // combined assign
-        )
-    )
-    2: Stmt_Expression(
-        expr: Expr_AssignOp_BitwiseOr(
-            var: Expr_Variable(
-                name: a
-            )
-            expr: Expr_Variable(
-                name: b
-            )
-        )
-    )
-    3: Stmt_Expression(
-        expr: Expr_AssignOp_BitwiseXor(
-            var: Expr_Variable(
-                name: a
-            )
-            expr: Expr_Variable(
-                name: b
-            )
-        )
-    )
-    4: Stmt_Expression(
-        expr: Expr_AssignOp_Concat(
-            var: Expr_Variable(
-                name: a
-            )
-            expr: Expr_Variable(
-                name: b
-            )
-        )
-    )
-    5: Stmt_Expression(
-        expr: Expr_AssignOp_Div(
-            var: Expr_Variable(
-                name: a
-            )
-            expr: Expr_Variable(
-                name: b
-            )
-        )
-    )
-    6: Stmt_Expression(
-        expr: Expr_AssignOp_Minus(
-            var: Expr_Variable(
-                name: a
-            )
-            expr: Expr_Variable(
-                name: b
-            )
-        )
-    )
-    7: Stmt_Expression(
-        expr: Expr_AssignOp_Mod(
-            var: Expr_Variable(
-                name: a
-            )
-            expr: Expr_Variable(
-                name: b
-            )
-        )
-    )
-    8: Stmt_Expression(
-        expr: Expr_AssignOp_Mul(
-            var: Expr_Variable(
-                name: a
-            )
-            expr: Expr_Variable(
-                name: b
-            )
-        )
-    )
-    9: Stmt_Expression(
-        expr: Expr_AssignOp_Plus(
-            var: Expr_Variable(
-                name: a
-            )
-            expr: Expr_Variable(
-                name: b
-            )
-        )
-    )
-    10: Stmt_Expression(
-        expr: Expr_AssignOp_ShiftLeft(
-            var: Expr_Variable(
-                name: a
-            )
-            expr: Expr_Variable(
-                name: b
-            )
-        )
-    )
-    11: Stmt_Expression(
-        expr: Expr_AssignOp_ShiftRight(
-            var: Expr_Variable(
-                name: a
-            )
-            expr: Expr_Variable(
-                name: b
-            )
-        )
-    )
-    12: Stmt_Expression(
-        expr: Expr_AssignOp_Pow(
-            var: Expr_Variable(
-                name: a
-            )
-            expr: Expr_Variable(
-                name: b
-            )
-        )
-    )
-    13: Stmt_Expression(
-        expr: Expr_AssignOp_Coalesce(
-            var: Expr_Variable(
-                name: a
-            )
-            expr: Expr_Variable(
-                name: b
-            )
-        )
-    )
-    14: Stmt_Expression(
-        expr: Expr_Assign(
-            var: Expr_Variable(
-                name: a
-                comments: array(
-                    0: // chained assign
-                )
-            )
-            expr: Expr_AssignOp_Mul(
-                var: Expr_Variable(
-                    name: b
-                )
-                expr: Expr_AssignOp_Pow(
-                    var: Expr_Variable(
-                        name: c
-                    )
-                    expr: Expr_Variable(
-                        name: d
-                    )
-                )
-            )
-            comments: array(
-                0: // chained assign
-            )
-        )
-        comments: array(
-            0: // chained assign
-        )
-    )
-    15: Stmt_Expression(
-        expr: Expr_AssignRef(
-            var: Expr_Variable(
-                name: a
-                comments: array(
-                    0: // by ref assign
-                )
-            )
-            expr: Expr_Variable(
-                name: b
-            )
-            comments: array(
-                0: // by ref assign
-            )
-        )
-        comments: array(
-            0: // by ref assign
-        )
-    )
-    16: Stmt_Expression(
-        expr: Expr_Assign(
-            var: Expr_List(
-                items: array(
-                    0: Expr_ArrayItem(
-                        key: null
-                        value: Expr_Variable(
-                            name: a
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                )
-                comments: array(
-                    0: // list() assign
-                )
-            )
-            expr: Expr_Variable(
-                name: b
-            )
-            comments: array(
-                0: // list() assign
-            )
-        )
-        comments: array(
-            0: // list() assign
-        )
-    )
-    17: Stmt_Expression(
-        expr: Expr_Assign(
-            var: Expr_List(
-                items: array(
-                    0: Expr_ArrayItem(
-                        key: null
-                        value: Expr_Variable(
-                            name: a
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                    1: null
-                    2: Expr_ArrayItem(
-                        key: null
-                        value: Expr_Variable(
-                            name: b
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                )
-            )
-            expr: Expr_Variable(
-                name: c
-            )
-        )
-    )
-    18: Stmt_Expression(
-        expr: Expr_Assign(
-            var: Expr_List(
-                items: array(
-                    0: Expr_ArrayItem(
-                        key: null
-                        value: Expr_Variable(
-                            name: a
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                    1: Expr_ArrayItem(
-                        key: null
-                        value: Expr_List(
-                            items: array(
-                                0: null
-                                1: Expr_ArrayItem(
-                                    key: null
-                                    value: Expr_Variable(
-                                        name: c
-                                    )
-                                    byRef: false
-                                    unpack: false
-                                )
-                            )
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                    2: Expr_ArrayItem(
-                        key: null
-                        value: Expr_Variable(
-                            name: d
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                )
-            )
-            expr: Expr_Variable(
-                name: e
-            )
-        )
-    )
-    19: Stmt_Expression(
-        expr: Expr_PreInc(
-            var: Expr_Variable(
-                name: a
-            )
-            comments: array(
-                0: // inc/dec
-            )
-        )
-        comments: array(
-            0: // inc/dec
-        )
-    )
-    20: Stmt_Expression(
-        expr: Expr_PostInc(
-            var: Expr_Variable(
-                name: a
-            )
-        )
-    )
-    21: Stmt_Expression(
-        expr: Expr_PreDec(
-            var: Expr_Variable(
-                name: a
-            )
-        )
-    )
-    22: Stmt_Expression(
-        expr: Expr_PostDec(
-            var: Expr_Variable(
-                name: a
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/assignNewByRef.test b/vendor/nikic/php-parser/test/code/parser/expr/assignNewByRef.test
deleted file mode 100644
index a66d943a4219baf5a02243fbc01c8207d30a1c8d..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/assignNewByRef.test
+++ /dev/null
@@ -1,43 +0,0 @@
-Assigning new by reference (PHP 5 only)
------
-<?php
-$a =& new B;
------
-!!php5
-array(
-    0: Stmt_Expression(
-        expr: Expr_AssignRef(
-            var: Expr_Variable(
-                name: a
-            )
-            expr: Expr_New(
-                class: Name(
-                    parts: array(
-                        0: B
-                    )
-                )
-                args: array(
-                )
-            )
-        )
-    )
-)
------
-<?php
-$a =& new B;
------
-!!php7
-Syntax error, unexpected T_NEW from 2:7 to 2:9
-array(
-    0: Stmt_Expression(
-        expr: Expr_New(
-            class: Name(
-                parts: array(
-                    0: B
-                )
-            )
-            args: array(
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/cast.test b/vendor/nikic/php-parser/test/code/parser/expr/cast.test
deleted file mode 100644
index a875bb47fe958bdec1bbf96573863d3aec30e71d..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/cast.test
+++ /dev/null
@@ -1,94 +0,0 @@
-Casts
------
-<?php
-(array)   $a;
-(bool)    $a;
-(boolean) $a;
-(real)    $a;
-(double)  $a;
-(float)   $a;
-(int)     $a;
-(integer) $a;
-(object)  $a;
-(string)  $a;
-(unset)   $a;
------
-array(
-    0: Stmt_Expression(
-        expr: Expr_Cast_Array(
-            expr: Expr_Variable(
-                name: a
-            )
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_Cast_Bool(
-            expr: Expr_Variable(
-                name: a
-            )
-        )
-    )
-    2: Stmt_Expression(
-        expr: Expr_Cast_Bool(
-            expr: Expr_Variable(
-                name: a
-            )
-        )
-    )
-    3: Stmt_Expression(
-        expr: Expr_Cast_Double(
-            expr: Expr_Variable(
-                name: a
-            )
-        )
-    )
-    4: Stmt_Expression(
-        expr: Expr_Cast_Double(
-            expr: Expr_Variable(
-                name: a
-            )
-        )
-    )
-    5: Stmt_Expression(
-        expr: Expr_Cast_Double(
-            expr: Expr_Variable(
-                name: a
-            )
-        )
-    )
-    6: Stmt_Expression(
-        expr: Expr_Cast_Int(
-            expr: Expr_Variable(
-                name: a
-            )
-        )
-    )
-    7: Stmt_Expression(
-        expr: Expr_Cast_Int(
-            expr: Expr_Variable(
-                name: a
-            )
-        )
-    )
-    8: Stmt_Expression(
-        expr: Expr_Cast_Object(
-            expr: Expr_Variable(
-                name: a
-            )
-        )
-    )
-    9: Stmt_Expression(
-        expr: Expr_Cast_String(
-            expr: Expr_Variable(
-                name: a
-            )
-        )
-    )
-    10: Stmt_Expression(
-        expr: Expr_Cast_Unset(
-            expr: Expr_Variable(
-                name: a
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/clone.test b/vendor/nikic/php-parser/test/code/parser/expr/clone.test
deleted file mode 100644
index 418eb0e658344352a7599a9124d0f2808695e7ff..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/clone.test
+++ /dev/null
@@ -1,15 +0,0 @@
-Clone
------
-<?php
-
-clone $a;
------
-array(
-    0: Stmt_Expression(
-        expr: Expr_Clone(
-            expr: Expr_Variable(
-                name: a
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/closure.test b/vendor/nikic/php-parser/test/code/parser/expr/closure.test
deleted file mode 100644
index c88de78b496196ea10e810a397b36803831d3ea8..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/closure.test
+++ /dev/null
@@ -1,176 +0,0 @@
-Closures
------
-<?php
-function($a) { $a; };
-function($a) use($b) {};
-function() use($a, &$b) {};
-function &($a) {};
-static function() {};
-function($a) : array {};
-function() use($a) : \Foo\Bar {};
------
-array(
-    0: Stmt_Expression(
-        expr: Expr_Closure(
-            static: false
-            byRef: false
-            params: array(
-                0: Param(
-                    type: null
-                    byRef: false
-                    variadic: false
-                    var: Expr_Variable(
-                        name: a
-                    )
-                    default: null
-                )
-            )
-            uses: array(
-            )
-            returnType: null
-            stmts: array(
-                0: Stmt_Expression(
-                    expr: Expr_Variable(
-                        name: a
-                    )
-                )
-            )
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_Closure(
-            static: false
-            byRef: false
-            params: array(
-                0: Param(
-                    type: null
-                    byRef: false
-                    variadic: false
-                    var: Expr_Variable(
-                        name: a
-                    )
-                    default: null
-                )
-            )
-            uses: array(
-                0: Expr_ClosureUse(
-                    var: Expr_Variable(
-                        name: b
-                    )
-                    byRef: false
-                )
-            )
-            returnType: null
-            stmts: array(
-            )
-        )
-    )
-    2: Stmt_Expression(
-        expr: Expr_Closure(
-            static: false
-            byRef: false
-            params: array(
-            )
-            uses: array(
-                0: Expr_ClosureUse(
-                    var: Expr_Variable(
-                        name: a
-                    )
-                    byRef: false
-                )
-                1: Expr_ClosureUse(
-                    var: Expr_Variable(
-                        name: b
-                    )
-                    byRef: true
-                )
-            )
-            returnType: null
-            stmts: array(
-            )
-        )
-    )
-    3: Stmt_Expression(
-        expr: Expr_Closure(
-            static: false
-            byRef: true
-            params: array(
-                0: Param(
-                    type: null
-                    byRef: false
-                    variadic: false
-                    var: Expr_Variable(
-                        name: a
-                    )
-                    default: null
-                )
-            )
-            uses: array(
-            )
-            returnType: null
-            stmts: array(
-            )
-        )
-    )
-    4: Stmt_Expression(
-        expr: Expr_Closure(
-            static: true
-            byRef: false
-            params: array(
-            )
-            uses: array(
-            )
-            returnType: null
-            stmts: array(
-            )
-        )
-    )
-    5: Stmt_Expression(
-        expr: Expr_Closure(
-            static: false
-            byRef: false
-            params: array(
-                0: Param(
-                    type: null
-                    byRef: false
-                    variadic: false
-                    var: Expr_Variable(
-                        name: a
-                    )
-                    default: null
-                )
-            )
-            uses: array(
-            )
-            returnType: Identifier(
-                name: array
-            )
-            stmts: array(
-            )
-        )
-    )
-    6: Stmt_Expression(
-        expr: Expr_Closure(
-            static: false
-            byRef: false
-            params: array(
-            )
-            uses: array(
-                0: Expr_ClosureUse(
-                    var: Expr_Variable(
-                        name: a
-                    )
-                    byRef: false
-                )
-            )
-            returnType: Name_FullyQualified(
-                parts: array(
-                    0: Foo
-                    1: Bar
-                )
-            )
-            stmts: array(
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/comparison.test b/vendor/nikic/php-parser/test/code/parser/expr/comparison.test
deleted file mode 100644
index 011692f0649952ae45093ea60b2501ea96a2792a..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/comparison.test
+++ /dev/null
@@ -1,129 +0,0 @@
-Comparison operators
------
-<?php
-$a < $b;
-$a <= $b;
-$a > $b;
-$a >= $b;
-$a == $b;
-$a === $b;
-$a != $b;
-$a !== $b;
-$a <=> $b;
-$a instanceof B;
-$a instanceof $b;
------
-array(
-    0: Stmt_Expression(
-        expr: Expr_BinaryOp_Smaller(
-            left: Expr_Variable(
-                name: a
-            )
-            right: Expr_Variable(
-                name: b
-            )
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_BinaryOp_SmallerOrEqual(
-            left: Expr_Variable(
-                name: a
-            )
-            right: Expr_Variable(
-                name: b
-            )
-        )
-    )
-    2: Stmt_Expression(
-        expr: Expr_BinaryOp_Greater(
-            left: Expr_Variable(
-                name: a
-            )
-            right: Expr_Variable(
-                name: b
-            )
-        )
-    )
-    3: Stmt_Expression(
-        expr: Expr_BinaryOp_GreaterOrEqual(
-            left: Expr_Variable(
-                name: a
-            )
-            right: Expr_Variable(
-                name: b
-            )
-        )
-    )
-    4: Stmt_Expression(
-        expr: Expr_BinaryOp_Equal(
-            left: Expr_Variable(
-                name: a
-            )
-            right: Expr_Variable(
-                name: b
-            )
-        )
-    )
-    5: Stmt_Expression(
-        expr: Expr_BinaryOp_Identical(
-            left: Expr_Variable(
-                name: a
-            )
-            right: Expr_Variable(
-                name: b
-            )
-        )
-    )
-    6: Stmt_Expression(
-        expr: Expr_BinaryOp_NotEqual(
-            left: Expr_Variable(
-                name: a
-            )
-            right: Expr_Variable(
-                name: b
-            )
-        )
-    )
-    7: Stmt_Expression(
-        expr: Expr_BinaryOp_NotIdentical(
-            left: Expr_Variable(
-                name: a
-            )
-            right: Expr_Variable(
-                name: b
-            )
-        )
-    )
-    8: Stmt_Expression(
-        expr: Expr_BinaryOp_Spaceship(
-            left: Expr_Variable(
-                name: a
-            )
-            right: Expr_Variable(
-                name: b
-            )
-        )
-    )
-    9: Stmt_Expression(
-        expr: Expr_Instanceof(
-            expr: Expr_Variable(
-                name: a
-            )
-            class: Name(
-                parts: array(
-                    0: B
-                )
-            )
-        )
-    )
-    10: Stmt_Expression(
-        expr: Expr_Instanceof(
-            expr: Expr_Variable(
-                name: a
-            )
-            class: Expr_Variable(
-                name: b
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/constant_expr.test b/vendor/nikic/php-parser/test/code/parser/expr/constant_expr.test
deleted file mode 100644
index 0f9815f94e8a30f9dfab43a5a3e672d1f8a40731..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/constant_expr.test
+++ /dev/null
@@ -1,694 +0,0 @@
-Expressions in static scalar context
------
-<?php
-
-const T_1 = 1 << 1;
-const T_2 = 1 / 2;
-const T_3 = 1.5 + 1.5;
-const T_4 = "foo" . "bar";
-const T_5 = (1.5 + 1.5) * 2;
-const T_6 = "foo" . 2 . 3 . 4.0;
-const T_7 = __LINE__;
-const T_8 = <<<ENDOFSTRING
-This is a test string
-ENDOFSTRING;
-const T_9 = ~-1;
-const T_10 = (-1?:1) + (0?2:3);
-const T_11 = 1 && 0;
-const T_12 = 1 and 1;
-const T_13 = 0 || 0;
-const T_14 = 1 or 0;
-const T_15 = 1 xor 1;
-const T_16 = 1 xor 0;
-const T_17 = 1 < 0;
-const T_18 = 0 <= 0;
-const T_19 = 1 > 0;
-const T_20 = 1 >= 0;
-const T_21 = 1 === 1;
-const T_22 = 1 !== 1;
-const T_23 = 0 != "0";
-const T_24 = 1 == "1";
-const T_25 = 1 + 2 * 3;
-const T_26 = "1" + 2 + "3";
-const T_27 = 2 ** 3;
-const T_28 = [1, 2, 3][1];
-const T_29 = 12 - 13;
-const T_30 = 12 ^ 13;
-const T_31 = 12 & 13;
-const T_32 = 12 | 13;
-const T_33 = 12 % 3;
-const T_34 = 100 >> 4;
-const T_35 = !false;
------
-array(
-    0: Stmt_Const(
-        consts: array(
-            0: Const(
-                name: Identifier(
-                    name: T_1
-                )
-                value: Expr_BinaryOp_ShiftLeft(
-                    left: Scalar_LNumber(
-                        value: 1
-                    )
-                    right: Scalar_LNumber(
-                        value: 1
-                    )
-                )
-            )
-        )
-    )
-    1: Stmt_Const(
-        consts: array(
-            0: Const(
-                name: Identifier(
-                    name: T_2
-                )
-                value: Expr_BinaryOp_Div(
-                    left: Scalar_LNumber(
-                        value: 1
-                    )
-                    right: Scalar_LNumber(
-                        value: 2
-                    )
-                )
-            )
-        )
-    )
-    2: Stmt_Const(
-        consts: array(
-            0: Const(
-                name: Identifier(
-                    name: T_3
-                )
-                value: Expr_BinaryOp_Plus(
-                    left: Scalar_DNumber(
-                        value: 1.5
-                    )
-                    right: Scalar_DNumber(
-                        value: 1.5
-                    )
-                )
-            )
-        )
-    )
-    3: Stmt_Const(
-        consts: array(
-            0: Const(
-                name: Identifier(
-                    name: T_4
-                )
-                value: Expr_BinaryOp_Concat(
-                    left: Scalar_String(
-                        value: foo
-                    )
-                    right: Scalar_String(
-                        value: bar
-                    )
-                )
-            )
-        )
-    )
-    4: Stmt_Const(
-        consts: array(
-            0: Const(
-                name: Identifier(
-                    name: T_5
-                )
-                value: Expr_BinaryOp_Mul(
-                    left: Expr_BinaryOp_Plus(
-                        left: Scalar_DNumber(
-                            value: 1.5
-                        )
-                        right: Scalar_DNumber(
-                            value: 1.5
-                        )
-                    )
-                    right: Scalar_LNumber(
-                        value: 2
-                    )
-                )
-            )
-        )
-    )
-    5: Stmt_Const(
-        consts: array(
-            0: Const(
-                name: Identifier(
-                    name: T_6
-                )
-                value: Expr_BinaryOp_Concat(
-                    left: Expr_BinaryOp_Concat(
-                        left: Expr_BinaryOp_Concat(
-                            left: Scalar_String(
-                                value: foo
-                            )
-                            right: Scalar_LNumber(
-                                value: 2
-                            )
-                        )
-                        right: Scalar_LNumber(
-                            value: 3
-                        )
-                    )
-                    right: Scalar_DNumber(
-                        value: 4
-                    )
-                )
-            )
-        )
-    )
-    6: Stmt_Const(
-        consts: array(
-            0: Const(
-                name: Identifier(
-                    name: T_7
-                )
-                value: Scalar_MagicConst_Line(
-                )
-            )
-        )
-    )
-    7: Stmt_Const(
-        consts: array(
-            0: Const(
-                name: Identifier(
-                    name: T_8
-                )
-                value: Scalar_String(
-                    value: This is a test string
-                )
-            )
-        )
-    )
-    8: Stmt_Const(
-        consts: array(
-            0: Const(
-                name: Identifier(
-                    name: T_9
-                )
-                value: Expr_BitwiseNot(
-                    expr: Expr_UnaryMinus(
-                        expr: Scalar_LNumber(
-                            value: 1
-                        )
-                    )
-                )
-            )
-        )
-    )
-    9: Stmt_Const(
-        consts: array(
-            0: Const(
-                name: Identifier(
-                    name: T_10
-                )
-                value: Expr_BinaryOp_Plus(
-                    left: Expr_Ternary(
-                        cond: Expr_UnaryMinus(
-                            expr: Scalar_LNumber(
-                                value: 1
-                            )
-                        )
-                        if: null
-                        else: Scalar_LNumber(
-                            value: 1
-                        )
-                    )
-                    right: Expr_Ternary(
-                        cond: Scalar_LNumber(
-                            value: 0
-                        )
-                        if: Scalar_LNumber(
-                            value: 2
-                        )
-                        else: Scalar_LNumber(
-                            value: 3
-                        )
-                    )
-                )
-            )
-        )
-    )
-    10: Stmt_Const(
-        consts: array(
-            0: Const(
-                name: Identifier(
-                    name: T_11
-                )
-                value: Expr_BinaryOp_BooleanAnd(
-                    left: Scalar_LNumber(
-                        value: 1
-                    )
-                    right: Scalar_LNumber(
-                        value: 0
-                    )
-                )
-            )
-        )
-    )
-    11: Stmt_Const(
-        consts: array(
-            0: Const(
-                name: Identifier(
-                    name: T_12
-                )
-                value: Expr_BinaryOp_LogicalAnd(
-                    left: Scalar_LNumber(
-                        value: 1
-                    )
-                    right: Scalar_LNumber(
-                        value: 1
-                    )
-                )
-            )
-        )
-    )
-    12: Stmt_Const(
-        consts: array(
-            0: Const(
-                name: Identifier(
-                    name: T_13
-                )
-                value: Expr_BinaryOp_BooleanOr(
-                    left: Scalar_LNumber(
-                        value: 0
-                    )
-                    right: Scalar_LNumber(
-                        value: 0
-                    )
-                )
-            )
-        )
-    )
-    13: Stmt_Const(
-        consts: array(
-            0: Const(
-                name: Identifier(
-                    name: T_14
-                )
-                value: Expr_BinaryOp_LogicalOr(
-                    left: Scalar_LNumber(
-                        value: 1
-                    )
-                    right: Scalar_LNumber(
-                        value: 0
-                    )
-                )
-            )
-        )
-    )
-    14: Stmt_Const(
-        consts: array(
-            0: Const(
-                name: Identifier(
-                    name: T_15
-                )
-                value: Expr_BinaryOp_LogicalXor(
-                    left: Scalar_LNumber(
-                        value: 1
-                    )
-                    right: Scalar_LNumber(
-                        value: 1
-                    )
-                )
-            )
-        )
-    )
-    15: Stmt_Const(
-        consts: array(
-            0: Const(
-                name: Identifier(
-                    name: T_16
-                )
-                value: Expr_BinaryOp_LogicalXor(
-                    left: Scalar_LNumber(
-                        value: 1
-                    )
-                    right: Scalar_LNumber(
-                        value: 0
-                    )
-                )
-            )
-        )
-    )
-    16: Stmt_Const(
-        consts: array(
-            0: Const(
-                name: Identifier(
-                    name: T_17
-                )
-                value: Expr_BinaryOp_Smaller(
-                    left: Scalar_LNumber(
-                        value: 1
-                    )
-                    right: Scalar_LNumber(
-                        value: 0
-                    )
-                )
-            )
-        )
-    )
-    17: Stmt_Const(
-        consts: array(
-            0: Const(
-                name: Identifier(
-                    name: T_18
-                )
-                value: Expr_BinaryOp_SmallerOrEqual(
-                    left: Scalar_LNumber(
-                        value: 0
-                    )
-                    right: Scalar_LNumber(
-                        value: 0
-                    )
-                )
-            )
-        )
-    )
-    18: Stmt_Const(
-        consts: array(
-            0: Const(
-                name: Identifier(
-                    name: T_19
-                )
-                value: Expr_BinaryOp_Greater(
-                    left: Scalar_LNumber(
-                        value: 1
-                    )
-                    right: Scalar_LNumber(
-                        value: 0
-                    )
-                )
-            )
-        )
-    )
-    19: Stmt_Const(
-        consts: array(
-            0: Const(
-                name: Identifier(
-                    name: T_20
-                )
-                value: Expr_BinaryOp_GreaterOrEqual(
-                    left: Scalar_LNumber(
-                        value: 1
-                    )
-                    right: Scalar_LNumber(
-                        value: 0
-                    )
-                )
-            )
-        )
-    )
-    20: Stmt_Const(
-        consts: array(
-            0: Const(
-                name: Identifier(
-                    name: T_21
-                )
-                value: Expr_BinaryOp_Identical(
-                    left: Scalar_LNumber(
-                        value: 1
-                    )
-                    right: Scalar_LNumber(
-                        value: 1
-                    )
-                )
-            )
-        )
-    )
-    21: Stmt_Const(
-        consts: array(
-            0: Const(
-                name: Identifier(
-                    name: T_22
-                )
-                value: Expr_BinaryOp_NotIdentical(
-                    left: Scalar_LNumber(
-                        value: 1
-                    )
-                    right: Scalar_LNumber(
-                        value: 1
-                    )
-                )
-            )
-        )
-    )
-    22: Stmt_Const(
-        consts: array(
-            0: Const(
-                name: Identifier(
-                    name: T_23
-                )
-                value: Expr_BinaryOp_NotEqual(
-                    left: Scalar_LNumber(
-                        value: 0
-                    )
-                    right: Scalar_String(
-                        value: 0
-                    )
-                )
-            )
-        )
-    )
-    23: Stmt_Const(
-        consts: array(
-            0: Const(
-                name: Identifier(
-                    name: T_24
-                )
-                value: Expr_BinaryOp_Equal(
-                    left: Scalar_LNumber(
-                        value: 1
-                    )
-                    right: Scalar_String(
-                        value: 1
-                    )
-                )
-            )
-        )
-    )
-    24: Stmt_Const(
-        consts: array(
-            0: Const(
-                name: Identifier(
-                    name: T_25
-                )
-                value: Expr_BinaryOp_Plus(
-                    left: Scalar_LNumber(
-                        value: 1
-                    )
-                    right: Expr_BinaryOp_Mul(
-                        left: Scalar_LNumber(
-                            value: 2
-                        )
-                        right: Scalar_LNumber(
-                            value: 3
-                        )
-                    )
-                )
-            )
-        )
-    )
-    25: Stmt_Const(
-        consts: array(
-            0: Const(
-                name: Identifier(
-                    name: T_26
-                )
-                value: Expr_BinaryOp_Plus(
-                    left: Expr_BinaryOp_Plus(
-                        left: Scalar_String(
-                            value: 1
-                        )
-                        right: Scalar_LNumber(
-                            value: 2
-                        )
-                    )
-                    right: Scalar_String(
-                        value: 3
-                    )
-                )
-            )
-        )
-    )
-    26: Stmt_Const(
-        consts: array(
-            0: Const(
-                name: Identifier(
-                    name: T_27
-                )
-                value: Expr_BinaryOp_Pow(
-                    left: Scalar_LNumber(
-                        value: 2
-                    )
-                    right: Scalar_LNumber(
-                        value: 3
-                    )
-                )
-            )
-        )
-    )
-    27: Stmt_Const(
-        consts: array(
-            0: Const(
-                name: Identifier(
-                    name: T_28
-                )
-                value: Expr_ArrayDimFetch(
-                    var: Expr_Array(
-                        items: array(
-                            0: Expr_ArrayItem(
-                                key: null
-                                value: Scalar_LNumber(
-                                    value: 1
-                                )
-                                byRef: false
-                                unpack: false
-                            )
-                            1: Expr_ArrayItem(
-                                key: null
-                                value: Scalar_LNumber(
-                                    value: 2
-                                )
-                                byRef: false
-                                unpack: false
-                            )
-                            2: Expr_ArrayItem(
-                                key: null
-                                value: Scalar_LNumber(
-                                    value: 3
-                                )
-                                byRef: false
-                                unpack: false
-                            )
-                        )
-                    )
-                    dim: Scalar_LNumber(
-                        value: 1
-                    )
-                )
-            )
-        )
-    )
-    28: Stmt_Const(
-        consts: array(
-            0: Const(
-                name: Identifier(
-                    name: T_29
-                )
-                value: Expr_BinaryOp_Minus(
-                    left: Scalar_LNumber(
-                        value: 12
-                    )
-                    right: Scalar_LNumber(
-                        value: 13
-                    )
-                )
-            )
-        )
-    )
-    29: Stmt_Const(
-        consts: array(
-            0: Const(
-                name: Identifier(
-                    name: T_30
-                )
-                value: Expr_BinaryOp_BitwiseXor(
-                    left: Scalar_LNumber(
-                        value: 12
-                    )
-                    right: Scalar_LNumber(
-                        value: 13
-                    )
-                )
-            )
-        )
-    )
-    30: Stmt_Const(
-        consts: array(
-            0: Const(
-                name: Identifier(
-                    name: T_31
-                )
-                value: Expr_BinaryOp_BitwiseAnd(
-                    left: Scalar_LNumber(
-                        value: 12
-                    )
-                    right: Scalar_LNumber(
-                        value: 13
-                    )
-                )
-            )
-        )
-    )
-    31: Stmt_Const(
-        consts: array(
-            0: Const(
-                name: Identifier(
-                    name: T_32
-                )
-                value: Expr_BinaryOp_BitwiseOr(
-                    left: Scalar_LNumber(
-                        value: 12
-                    )
-                    right: Scalar_LNumber(
-                        value: 13
-                    )
-                )
-            )
-        )
-    )
-    32: Stmt_Const(
-        consts: array(
-            0: Const(
-                name: Identifier(
-                    name: T_33
-                )
-                value: Expr_BinaryOp_Mod(
-                    left: Scalar_LNumber(
-                        value: 12
-                    )
-                    right: Scalar_LNumber(
-                        value: 3
-                    )
-                )
-            )
-        )
-    )
-    33: Stmt_Const(
-        consts: array(
-            0: Const(
-                name: Identifier(
-                    name: T_34
-                )
-                value: Expr_BinaryOp_ShiftRight(
-                    left: Scalar_LNumber(
-                        value: 100
-                    )
-                    right: Scalar_LNumber(
-                        value: 4
-                    )
-                )
-            )
-        )
-    )
-    34: Stmt_Const(
-        consts: array(
-            0: Const(
-                name: Identifier(
-                    name: T_35
-                )
-                value: Expr_BooleanNot(
-                    expr: Expr_ConstFetch(
-                        name: Name(
-                            parts: array(
-                                0: false
-                            )
-                        )
-                    )
-                )
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/errorSuppress.test b/vendor/nikic/php-parser/test/code/parser/expr/errorSuppress.test
deleted file mode 100644
index 7f099988abedf7855e753a23d18e8bd3f5f2f031..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/errorSuppress.test
+++ /dev/null
@@ -1,14 +0,0 @@
-Error suppression
------
-<?php
-@$a;
------
-array(
-    0: Stmt_Expression(
-        expr: Expr_ErrorSuppress(
-            expr: Expr_Variable(
-                name: a
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/exit.test b/vendor/nikic/php-parser/test/code/parser/expr/exit.test
deleted file mode 100644
index c880921f30dfdae6e6233f804684328f698d4c2d..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/exit.test
+++ /dev/null
@@ -1,46 +0,0 @@
-Exit
------
-<?php
-exit;
-exit();
-exit('Die!');
-die;
-die();
-die('Exit!');
------
-array(
-    0: Stmt_Expression(
-        expr: Expr_Exit(
-            expr: null
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_Exit(
-            expr: null
-        )
-    )
-    2: Stmt_Expression(
-        expr: Expr_Exit(
-            expr: Scalar_String(
-                value: Die!
-            )
-        )
-    )
-    3: Stmt_Expression(
-        expr: Expr_Exit(
-            expr: null
-        )
-    )
-    4: Stmt_Expression(
-        expr: Expr_Exit(
-            expr: null
-        )
-    )
-    5: Stmt_Expression(
-        expr: Expr_Exit(
-            expr: Scalar_String(
-                value: Exit!
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/args.test b/vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/args.test
deleted file mode 100644
index 24ca03105df742ca13d33512d9cf663f2c4e94bb..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/args.test
+++ /dev/null
@@ -1,109 +0,0 @@
-Arguments
------
-<?php
-
-f();
-f($a);
-f($a, $b);
-f(&$a);
-f($a, ...$b);
------
-array(
-    0: Stmt_Expression(
-        expr: Expr_FuncCall(
-            name: Name(
-                parts: array(
-                    0: f
-                )
-            )
-            args: array(
-            )
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_FuncCall(
-            name: Name(
-                parts: array(
-                    0: f
-                )
-            )
-            args: array(
-                0: Arg(
-                    value: Expr_Variable(
-                        name: a
-                    )
-                    byRef: false
-                    unpack: false
-                )
-            )
-        )
-    )
-    2: Stmt_Expression(
-        expr: Expr_FuncCall(
-            name: Name(
-                parts: array(
-                    0: f
-                )
-            )
-            args: array(
-                0: Arg(
-                    value: Expr_Variable(
-                        name: a
-                    )
-                    byRef: false
-                    unpack: false
-                )
-                1: Arg(
-                    value: Expr_Variable(
-                        name: b
-                    )
-                    byRef: false
-                    unpack: false
-                )
-            )
-        )
-    )
-    3: Stmt_Expression(
-        expr: Expr_FuncCall(
-            name: Name(
-                parts: array(
-                    0: f
-                )
-            )
-            args: array(
-                0: Arg(
-                    value: Expr_Variable(
-                        name: a
-                    )
-                    byRef: true
-                    unpack: false
-                )
-            )
-        )
-    )
-    4: Stmt_Expression(
-        expr: Expr_FuncCall(
-            name: Name(
-                parts: array(
-                    0: f
-                )
-            )
-            args: array(
-                0: Arg(
-                    value: Expr_Variable(
-                        name: a
-                    )
-                    byRef: false
-                    unpack: false
-                )
-                1: Arg(
-                    value: Expr_Variable(
-                        name: b
-                    )
-                    byRef: false
-                    unpack: true
-                )
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/constFetch.test b/vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/constFetch.test
deleted file mode 100644
index d00084bafa6e8098c9dce6e35b2c435a59011c91..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/constFetch.test
+++ /dev/null
@@ -1,43 +0,0 @@
-Constant fetches
------
-<?php
-
-A;
-A::B;
-A::class;
------
-array(
-    0: Stmt_Expression(
-        expr: Expr_ConstFetch(
-            name: Name(
-                parts: array(
-                    0: A
-                )
-            )
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_ClassConstFetch(
-            class: Name(
-                parts: array(
-                    0: A
-                )
-            )
-            name: Identifier(
-                name: B
-            )
-        )
-    )
-    2: Stmt_Expression(
-        expr: Expr_ClassConstFetch(
-            class: Name(
-                parts: array(
-                    0: A
-                )
-            )
-            name: Identifier(
-                name: class
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/constantDeref.test b/vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/constantDeref.test
deleted file mode 100644
index 557532f1b75ccb777b3acd7718fd9359231a3934..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/constantDeref.test
+++ /dev/null
@@ -1,265 +0,0 @@
-Array/string dereferencing
------
-<?php
-
-"abc"[2];
-"abc"[2][0][0];
-
-[1, 2, 3][2];
-[1, 2, 3][2][0][0];
-
-array(1, 2, 3)[2];
-array(1, 2, 3)[2][0][0];
-
-FOO[0];
-Foo::BAR[1];
-$foo::BAR[2][1][0];
------
-array(
-    0: Stmt_Expression(
-        expr: Expr_ArrayDimFetch(
-            var: Scalar_String(
-                value: abc
-            )
-            dim: Scalar_LNumber(
-                value: 2
-            )
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_ArrayDimFetch(
-            var: Expr_ArrayDimFetch(
-                var: Expr_ArrayDimFetch(
-                    var: Scalar_String(
-                        value: abc
-                    )
-                    dim: Scalar_LNumber(
-                        value: 2
-                    )
-                )
-                dim: Scalar_LNumber(
-                    value: 0
-                )
-            )
-            dim: Scalar_LNumber(
-                value: 0
-            )
-        )
-    )
-    2: Stmt_Expression(
-        expr: Expr_ArrayDimFetch(
-            var: Expr_Array(
-                items: array(
-                    0: Expr_ArrayItem(
-                        key: null
-                        value: Scalar_LNumber(
-                            value: 1
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                    1: Expr_ArrayItem(
-                        key: null
-                        value: Scalar_LNumber(
-                            value: 2
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                    2: Expr_ArrayItem(
-                        key: null
-                        value: Scalar_LNumber(
-                            value: 3
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                )
-            )
-            dim: Scalar_LNumber(
-                value: 2
-            )
-        )
-    )
-    3: Stmt_Expression(
-        expr: Expr_ArrayDimFetch(
-            var: Expr_ArrayDimFetch(
-                var: Expr_ArrayDimFetch(
-                    var: Expr_Array(
-                        items: array(
-                            0: Expr_ArrayItem(
-                                key: null
-                                value: Scalar_LNumber(
-                                    value: 1
-                                )
-                                byRef: false
-                                unpack: false
-                            )
-                            1: Expr_ArrayItem(
-                                key: null
-                                value: Scalar_LNumber(
-                                    value: 2
-                                )
-                                byRef: false
-                                unpack: false
-                            )
-                            2: Expr_ArrayItem(
-                                key: null
-                                value: Scalar_LNumber(
-                                    value: 3
-                                )
-                                byRef: false
-                                unpack: false
-                            )
-                        )
-                    )
-                    dim: Scalar_LNumber(
-                        value: 2
-                    )
-                )
-                dim: Scalar_LNumber(
-                    value: 0
-                )
-            )
-            dim: Scalar_LNumber(
-                value: 0
-            )
-        )
-    )
-    4: Stmt_Expression(
-        expr: Expr_ArrayDimFetch(
-            var: Expr_Array(
-                items: array(
-                    0: Expr_ArrayItem(
-                        key: null
-                        value: Scalar_LNumber(
-                            value: 1
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                    1: Expr_ArrayItem(
-                        key: null
-                        value: Scalar_LNumber(
-                            value: 2
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                    2: Expr_ArrayItem(
-                        key: null
-                        value: Scalar_LNumber(
-                            value: 3
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                )
-            )
-            dim: Scalar_LNumber(
-                value: 2
-            )
-        )
-    )
-    5: Stmt_Expression(
-        expr: Expr_ArrayDimFetch(
-            var: Expr_ArrayDimFetch(
-                var: Expr_ArrayDimFetch(
-                    var: Expr_Array(
-                        items: array(
-                            0: Expr_ArrayItem(
-                                key: null
-                                value: Scalar_LNumber(
-                                    value: 1
-                                )
-                                byRef: false
-                                unpack: false
-                            )
-                            1: Expr_ArrayItem(
-                                key: null
-                                value: Scalar_LNumber(
-                                    value: 2
-                                )
-                                byRef: false
-                                unpack: false
-                            )
-                            2: Expr_ArrayItem(
-                                key: null
-                                value: Scalar_LNumber(
-                                    value: 3
-                                )
-                                byRef: false
-                                unpack: false
-                            )
-                        )
-                    )
-                    dim: Scalar_LNumber(
-                        value: 2
-                    )
-                )
-                dim: Scalar_LNumber(
-                    value: 0
-                )
-            )
-            dim: Scalar_LNumber(
-                value: 0
-            )
-        )
-    )
-    6: Stmt_Expression(
-        expr: Expr_ArrayDimFetch(
-            var: Expr_ConstFetch(
-                name: Name(
-                    parts: array(
-                        0: FOO
-                    )
-                )
-            )
-            dim: Scalar_LNumber(
-                value: 0
-            )
-        )
-    )
-    7: Stmt_Expression(
-        expr: Expr_ArrayDimFetch(
-            var: Expr_ClassConstFetch(
-                class: Name(
-                    parts: array(
-                        0: Foo
-                    )
-                )
-                name: Identifier(
-                    name: BAR
-                )
-            )
-            dim: Scalar_LNumber(
-                value: 1
-            )
-        )
-    )
-    8: Stmt_Expression(
-        expr: Expr_ArrayDimFetch(
-            var: Expr_ArrayDimFetch(
-                var: Expr_ArrayDimFetch(
-                    var: Expr_ClassConstFetch(
-                        class: Expr_Variable(
-                            name: foo
-                        )
-                        name: Identifier(
-                            name: BAR
-                        )
-                    )
-                    dim: Scalar_LNumber(
-                        value: 2
-                    )
-                )
-                dim: Scalar_LNumber(
-                    value: 1
-                )
-            )
-            dim: Scalar_LNumber(
-                value: 0
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/funcCall.test b/vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/funcCall.test
deleted file mode 100644
index 4a82651403aac219b62383c709f0c16f97f76d18..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/funcCall.test
+++ /dev/null
@@ -1,158 +0,0 @@
-Function calls
------
-<?php
-
-// function name variations
-a();
-$a();
-${'a'}();
-$$a();
-$$$a();
-$a['b']();
-$a{'b'}();
-$a->b['c']();
-
-// array dereferencing
-a()['b'];
------
-array(
-    0: Stmt_Expression(
-        expr: Expr_FuncCall(
-            name: Name(
-                parts: array(
-                    0: a
-                )
-                comments: array(
-                    0: // function name variations
-                )
-            )
-            args: array(
-            )
-            comments: array(
-                0: // function name variations
-            )
-        )
-        comments: array(
-            0: // function name variations
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_FuncCall(
-            name: Expr_Variable(
-                name: a
-            )
-            args: array(
-            )
-        )
-    )
-    2: Stmt_Expression(
-        expr: Expr_FuncCall(
-            name: Expr_Variable(
-                name: Scalar_String(
-                    value: a
-                )
-            )
-            args: array(
-            )
-        )
-    )
-    3: Stmt_Expression(
-        expr: Expr_FuncCall(
-            name: Expr_Variable(
-                name: Expr_Variable(
-                    name: a
-                )
-            )
-            args: array(
-            )
-        )
-    )
-    4: Stmt_Expression(
-        expr: Expr_FuncCall(
-            name: Expr_Variable(
-                name: Expr_Variable(
-                    name: Expr_Variable(
-                        name: a
-                    )
-                )
-            )
-            args: array(
-            )
-        )
-    )
-    5: Stmt_Expression(
-        expr: Expr_FuncCall(
-            name: Expr_ArrayDimFetch(
-                var: Expr_Variable(
-                    name: a
-                )
-                dim: Scalar_String(
-                    value: b
-                )
-            )
-            args: array(
-            )
-        )
-    )
-    6: Stmt_Expression(
-        expr: Expr_FuncCall(
-            name: Expr_ArrayDimFetch(
-                var: Expr_Variable(
-                    name: a
-                )
-                dim: Scalar_String(
-                    value: b
-                )
-            )
-            args: array(
-            )
-        )
-    )
-    7: Stmt_Expression(
-        expr: Expr_FuncCall(
-            name: Expr_ArrayDimFetch(
-                var: Expr_PropertyFetch(
-                    var: Expr_Variable(
-                        name: a
-                    )
-                    name: Identifier(
-                        name: b
-                    )
-                )
-                dim: Scalar_String(
-                    value: c
-                )
-            )
-            args: array(
-            )
-        )
-    )
-    8: Stmt_Expression(
-        expr: Expr_ArrayDimFetch(
-            var: Expr_FuncCall(
-                name: Name(
-                    parts: array(
-                        0: a
-                    )
-                    comments: array(
-                        0: // array dereferencing
-                    )
-                )
-                args: array(
-                )
-                comments: array(
-                    0: // array dereferencing
-                )
-            )
-            dim: Scalar_String(
-                value: b
-            )
-            comments: array(
-                0: // array dereferencing
-            )
-        )
-        comments: array(
-            0: // array dereferencing
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/newDeref.test b/vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/newDeref.test
deleted file mode 100644
index a4b7a7240b97706436e7a4d4b8534ac649685b9b..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/newDeref.test
+++ /dev/null
@@ -1,82 +0,0 @@
-New expression dereferencing
------
-<?php
-
-(new A)->b;
-(new A)->b();
-(new A)['b'];
-(new A)['b']['c'];
------
-array(
-    0: Stmt_Expression(
-        expr: Expr_PropertyFetch(
-            var: Expr_New(
-                class: Name(
-                    parts: array(
-                        0: A
-                    )
-                )
-                args: array(
-                )
-            )
-            name: Identifier(
-                name: b
-            )
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_MethodCall(
-            var: Expr_New(
-                class: Name(
-                    parts: array(
-                        0: A
-                    )
-                )
-                args: array(
-                )
-            )
-            name: Identifier(
-                name: b
-            )
-            args: array(
-            )
-        )
-    )
-    2: Stmt_Expression(
-        expr: Expr_ArrayDimFetch(
-            var: Expr_New(
-                class: Name(
-                    parts: array(
-                        0: A
-                    )
-                )
-                args: array(
-                )
-            )
-            dim: Scalar_String(
-                value: b
-            )
-        )
-    )
-    3: Stmt_Expression(
-        expr: Expr_ArrayDimFetch(
-            var: Expr_ArrayDimFetch(
-                var: Expr_New(
-                    class: Name(
-                        parts: array(
-                            0: A
-                        )
-                    )
-                    args: array(
-                    )
-                )
-                dim: Scalar_String(
-                    value: b
-                )
-            )
-            dim: Scalar_String(
-                value: c
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/objectAccess.test b/vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/objectAccess.test
deleted file mode 100644
index 2d1808b0581ce204bda89d7f937740341c5a70a9..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/objectAccess.test
+++ /dev/null
@@ -1,184 +0,0 @@
-Object access
------
-<?php
-
-// property fetch variations
-$a->b;
-$a->b['c'];
-$a->b{'c'};
-
-// method call variations
-$a->b();
-$a->{'b'}();
-$a->$b();
-$a->$b['c']();
-
-// array dereferencing
-$a->b()['c'];
-$a->b(){'c'}; // invalid PHP: drop Support?
------
-!!php5
-array(
-    0: Stmt_Expression(
-        expr: Expr_PropertyFetch(
-            var: Expr_Variable(
-                name: a
-                comments: array(
-                    0: // property fetch variations
-                )
-            )
-            name: Identifier(
-                name: b
-            )
-            comments: array(
-                0: // property fetch variations
-            )
-        )
-        comments: array(
-            0: // property fetch variations
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_ArrayDimFetch(
-            var: Expr_PropertyFetch(
-                var: Expr_Variable(
-                    name: a
-                )
-                name: Identifier(
-                    name: b
-                )
-            )
-            dim: Scalar_String(
-                value: c
-            )
-        )
-    )
-    2: Stmt_Expression(
-        expr: Expr_ArrayDimFetch(
-            var: Expr_PropertyFetch(
-                var: Expr_Variable(
-                    name: a
-                )
-                name: Identifier(
-                    name: b
-                )
-            )
-            dim: Scalar_String(
-                value: c
-            )
-        )
-    )
-    3: Stmt_Expression(
-        expr: Expr_MethodCall(
-            var: Expr_Variable(
-                name: a
-                comments: array(
-                    0: // method call variations
-                )
-            )
-            name: Identifier(
-                name: b
-            )
-            args: array(
-            )
-            comments: array(
-                0: // method call variations
-            )
-        )
-        comments: array(
-            0: // method call variations
-        )
-    )
-    4: Stmt_Expression(
-        expr: Expr_MethodCall(
-            var: Expr_Variable(
-                name: a
-            )
-            name: Scalar_String(
-                value: b
-            )
-            args: array(
-            )
-        )
-    )
-    5: Stmt_Expression(
-        expr: Expr_MethodCall(
-            var: Expr_Variable(
-                name: a
-            )
-            name: Expr_Variable(
-                name: b
-            )
-            args: array(
-            )
-        )
-    )
-    6: Stmt_Expression(
-        expr: Expr_MethodCall(
-            var: Expr_Variable(
-                name: a
-            )
-            name: Expr_ArrayDimFetch(
-                var: Expr_Variable(
-                    name: b
-                )
-                dim: Scalar_String(
-                    value: c
-                )
-            )
-            args: array(
-            )
-        )
-    )
-    7: Stmt_Expression(
-        expr: Expr_ArrayDimFetch(
-            var: Expr_MethodCall(
-                var: Expr_Variable(
-                    name: a
-                    comments: array(
-                        0: // array dereferencing
-                    )
-                )
-                name: Identifier(
-                    name: b
-                )
-                args: array(
-                )
-                comments: array(
-                    0: // array dereferencing
-                )
-            )
-            dim: Scalar_String(
-                value: c
-            )
-            comments: array(
-                0: // array dereferencing
-            )
-        )
-        comments: array(
-            0: // array dereferencing
-        )
-    )
-    8: Stmt_Expression(
-        expr: Expr_ArrayDimFetch(
-            var: Expr_MethodCall(
-                var: Expr_Variable(
-                    name: a
-                )
-                name: Identifier(
-                    name: b
-                )
-                args: array(
-                )
-            )
-            dim: Scalar_String(
-                value: c
-            )
-        )
-    )
-    9: Stmt_Nop(
-        comments: array(
-            0: // invalid PHP: drop Support?
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/simpleArrayAccess.test b/vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/simpleArrayAccess.test
deleted file mode 100644
index 133771b75d37b75007209773a71ca98d01358d45..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/simpleArrayAccess.test
+++ /dev/null
@@ -1,72 +0,0 @@
-Simple array access
------
-<?php
-
-$a['b'];
-$a['b']['c'];
-$a[] = $b;
-$a{'b'};
-${$a}['b'];
------
-array(
-    0: Stmt_Expression(
-        expr: Expr_ArrayDimFetch(
-            var: Expr_Variable(
-                name: a
-            )
-            dim: Scalar_String(
-                value: b
-            )
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_ArrayDimFetch(
-            var: Expr_ArrayDimFetch(
-                var: Expr_Variable(
-                    name: a
-                )
-                dim: Scalar_String(
-                    value: b
-                )
-            )
-            dim: Scalar_String(
-                value: c
-            )
-        )
-    )
-    2: Stmt_Expression(
-        expr: Expr_Assign(
-            var: Expr_ArrayDimFetch(
-                var: Expr_Variable(
-                    name: a
-                )
-                dim: null
-            )
-            expr: Expr_Variable(
-                name: b
-            )
-        )
-    )
-    3: Stmt_Expression(
-        expr: Expr_ArrayDimFetch(
-            var: Expr_Variable(
-                name: a
-            )
-            dim: Scalar_String(
-                value: b
-            )
-        )
-    )
-    4: Stmt_Expression(
-        expr: Expr_ArrayDimFetch(
-            var: Expr_Variable(
-                name: Expr_Variable(
-                    name: a
-                )
-            )
-            dim: Scalar_String(
-                value: b
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/staticCall.test b/vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/staticCall.test
deleted file mode 100644
index a34a3e4bcd783c783ca167d361d06e1abeeacd9b..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/staticCall.test
+++ /dev/null
@@ -1,214 +0,0 @@
-Static calls
------
-<?php
-
-// method name variations
-A::b();
-A::{'b'}();
-A::$b();
-A::$b['c']();
-A::$b['c']['d']();
-
-// array dereferencing
-A::b()['c'];
-
-// class name variations
-static::b();
-$a::b();
-${'a'}::b();
-$a['b']::c();
------
-!!php5
-array(
-    0: Stmt_Expression(
-        expr: Expr_StaticCall(
-            class: Name(
-                parts: array(
-                    0: A
-                )
-                comments: array(
-                    0: // method name variations
-                )
-            )
-            name: Identifier(
-                name: b
-            )
-            args: array(
-            )
-            comments: array(
-                0: // method name variations
-            )
-        )
-        comments: array(
-            0: // method name variations
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_StaticCall(
-            class: Name(
-                parts: array(
-                    0: A
-                )
-            )
-            name: Scalar_String(
-                value: b
-            )
-            args: array(
-            )
-        )
-    )
-    2: Stmt_Expression(
-        expr: Expr_StaticCall(
-            class: Name(
-                parts: array(
-                    0: A
-                )
-            )
-            name: Expr_Variable(
-                name: b
-            )
-            args: array(
-            )
-        )
-    )
-    3: Stmt_Expression(
-        expr: Expr_StaticCall(
-            class: Name(
-                parts: array(
-                    0: A
-                )
-            )
-            name: Expr_ArrayDimFetch(
-                var: Expr_Variable(
-                    name: b
-                )
-                dim: Scalar_String(
-                    value: c
-                )
-            )
-            args: array(
-            )
-        )
-    )
-    4: Stmt_Expression(
-        expr: Expr_StaticCall(
-            class: Name(
-                parts: array(
-                    0: A
-                )
-            )
-            name: Expr_ArrayDimFetch(
-                var: Expr_ArrayDimFetch(
-                    var: Expr_Variable(
-                        name: b
-                    )
-                    dim: Scalar_String(
-                        value: c
-                    )
-                )
-                dim: Scalar_String(
-                    value: d
-                )
-            )
-            args: array(
-            )
-        )
-    )
-    5: Stmt_Expression(
-        expr: Expr_ArrayDimFetch(
-            var: Expr_StaticCall(
-                class: Name(
-                    parts: array(
-                        0: A
-                    )
-                    comments: array(
-                        0: // array dereferencing
-                    )
-                )
-                name: Identifier(
-                    name: b
-                )
-                args: array(
-                )
-                comments: array(
-                    0: // array dereferencing
-                )
-            )
-            dim: Scalar_String(
-                value: c
-            )
-            comments: array(
-                0: // array dereferencing
-            )
-        )
-        comments: array(
-            0: // array dereferencing
-        )
-    )
-    6: Stmt_Expression(
-        expr: Expr_StaticCall(
-            class: Name(
-                parts: array(
-                    0: static
-                )
-                comments: array(
-                    0: // class name variations
-                )
-            )
-            name: Identifier(
-                name: b
-            )
-            args: array(
-            )
-            comments: array(
-                0: // class name variations
-            )
-        )
-        comments: array(
-            0: // class name variations
-        )
-    )
-    7: Stmt_Expression(
-        expr: Expr_StaticCall(
-            class: Expr_Variable(
-                name: a
-            )
-            name: Identifier(
-                name: b
-            )
-            args: array(
-            )
-        )
-    )
-    8: Stmt_Expression(
-        expr: Expr_StaticCall(
-            class: Expr_Variable(
-                name: Scalar_String(
-                    value: a
-                )
-            )
-            name: Identifier(
-                name: b
-            )
-            args: array(
-            )
-        )
-    )
-    9: Stmt_Expression(
-        expr: Expr_StaticCall(
-            class: Expr_ArrayDimFetch(
-                var: Expr_Variable(
-                    name: a
-                )
-                dim: Scalar_String(
-                    value: b
-                )
-            )
-            name: Identifier(
-                name: c
-            )
-            args: array(
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/staticPropertyFetch.test b/vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/staticPropertyFetch.test
deleted file mode 100644
index a1de3c8c1260834d20735d8acd53e9a150a135bf..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/fetchAndCall/staticPropertyFetch.test
+++ /dev/null
@@ -1,113 +0,0 @@
-Static property fetches
------
-<?php
-
-// property name variations
-A::$b;
-A::$$b;
-A::${'b'};
-
-// array access
-A::$b['c'];
-A::$b{'c'};
-
-// class name variations can be found in staticCall.test
------
-array(
-    0: Stmt_Expression(
-        expr: Expr_StaticPropertyFetch(
-            class: Name(
-                parts: array(
-                    0: A
-                )
-                comments: array(
-                    0: // property name variations
-                )
-            )
-            name: VarLikeIdentifier(
-                name: b
-            )
-            comments: array(
-                0: // property name variations
-            )
-        )
-        comments: array(
-            0: // property name variations
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_StaticPropertyFetch(
-            class: Name(
-                parts: array(
-                    0: A
-                )
-            )
-            name: Expr_Variable(
-                name: b
-            )
-        )
-    )
-    2: Stmt_Expression(
-        expr: Expr_StaticPropertyFetch(
-            class: Name(
-                parts: array(
-                    0: A
-                )
-            )
-            name: Scalar_String(
-                value: b
-            )
-        )
-    )
-    3: Stmt_Expression(
-        expr: Expr_ArrayDimFetch(
-            var: Expr_StaticPropertyFetch(
-                class: Name(
-                    parts: array(
-                        0: A
-                    )
-                    comments: array(
-                        0: // array access
-                    )
-                )
-                name: VarLikeIdentifier(
-                    name: b
-                )
-                comments: array(
-                    0: // array access
-                )
-            )
-            dim: Scalar_String(
-                value: c
-            )
-            comments: array(
-                0: // array access
-            )
-        )
-        comments: array(
-            0: // array access
-        )
-    )
-    4: Stmt_Expression(
-        expr: Expr_ArrayDimFetch(
-            var: Expr_StaticPropertyFetch(
-                class: Name(
-                    parts: array(
-                        0: A
-                    )
-                )
-                name: VarLikeIdentifier(
-                    name: b
-                )
-            )
-            dim: Scalar_String(
-                value: c
-            )
-        )
-    )
-    5: Stmt_Nop(
-        comments: array(
-            0: // class name variations can be found in staticCall.test
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/includeAndEval.test b/vendor/nikic/php-parser/test/code/parser/expr/includeAndEval.test
deleted file mode 100644
index 0ab189081a7c0b075cdeef9c39ad2fff21edcd21..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/includeAndEval.test
+++ /dev/null
@@ -1,50 +0,0 @@
-Include and eval
------
-<?php
-include 'A.php';
-include_once 'A.php';
-require 'A.php';
-require_once 'A.php';
-eval('A');
------
-array(
-    0: Stmt_Expression(
-        expr: Expr_Include(
-            expr: Scalar_String(
-                value: A.php
-            )
-            type: TYPE_INCLUDE (1)
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_Include(
-            expr: Scalar_String(
-                value: A.php
-            )
-            type: TYPE_INCLUDE_ONCE (2)
-        )
-    )
-    2: Stmt_Expression(
-        expr: Expr_Include(
-            expr: Scalar_String(
-                value: A.php
-            )
-            type: TYPE_REQUIRE (3)
-        )
-    )
-    3: Stmt_Expression(
-        expr: Expr_Include(
-            expr: Scalar_String(
-                value: A.php
-            )
-            type: TYPE_REQUIRE_ONCE (4)
-        )
-    )
-    4: Stmt_Expression(
-        expr: Expr_Eval(
-            expr: Scalar_String(
-                value: A
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/issetAndEmpty.test b/vendor/nikic/php-parser/test/code/parser/expr/issetAndEmpty.test
deleted file mode 100644
index 989b3a5547829dae07396854b28f6662e2a4903c..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/issetAndEmpty.test
+++ /dev/null
@@ -1,88 +0,0 @@
-isset() and empty()
------
-<?php
-isset($a);
-isset($a, $b, $c);
-
-empty($a);
-empty(foo());
-empty(array(1, 2, 3));
------
-array(
-    0: Stmt_Expression(
-        expr: Expr_Isset(
-            vars: array(
-                0: Expr_Variable(
-                    name: a
-                )
-            )
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_Isset(
-            vars: array(
-                0: Expr_Variable(
-                    name: a
-                )
-                1: Expr_Variable(
-                    name: b
-                )
-                2: Expr_Variable(
-                    name: c
-                )
-            )
-        )
-    )
-    2: Stmt_Expression(
-        expr: Expr_Empty(
-            expr: Expr_Variable(
-                name: a
-            )
-        )
-    )
-    3: Stmt_Expression(
-        expr: Expr_Empty(
-            expr: Expr_FuncCall(
-                name: Name(
-                    parts: array(
-                        0: foo
-                    )
-                )
-                args: array(
-                )
-            )
-        )
-    )
-    4: Stmt_Expression(
-        expr: Expr_Empty(
-            expr: Expr_Array(
-                items: array(
-                    0: Expr_ArrayItem(
-                        key: null
-                        value: Scalar_LNumber(
-                            value: 1
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                    1: Expr_ArrayItem(
-                        key: null
-                        value: Scalar_LNumber(
-                            value: 2
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                    2: Expr_ArrayItem(
-                        key: null
-                        value: Scalar_LNumber(
-                            value: 3
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                )
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/listReferences.test b/vendor/nikic/php-parser/test/code/parser/expr/listReferences.test
deleted file mode 100644
index 436d45ffa350b7880e2cdc0f0a25f3f550a4b10d..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/listReferences.test
+++ /dev/null
@@ -1,92 +0,0 @@
-List reference assignments (PHP 7.3)
------
-<?php
-
-list(&$v) = $x;
-list('k' => &$v) = $x;
-[&$v] = $x;
-['k' => &$v] = $x;
------
-!!php7
-array(
-    0: Stmt_Expression(
-        expr: Expr_Assign(
-            var: Expr_List(
-                items: array(
-                    0: Expr_ArrayItem(
-                        key: null
-                        value: Expr_Variable(
-                            name: v
-                        )
-                        byRef: true
-                        unpack: false
-                    )
-                )
-            )
-            expr: Expr_Variable(
-                name: x
-            )
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_Assign(
-            var: Expr_List(
-                items: array(
-                    0: Expr_ArrayItem(
-                        key: Scalar_String(
-                            value: k
-                        )
-                        value: Expr_Variable(
-                            name: v
-                        )
-                        byRef: true
-                        unpack: false
-                    )
-                )
-            )
-            expr: Expr_Variable(
-                name: x
-            )
-        )
-    )
-    2: Stmt_Expression(
-        expr: Expr_Assign(
-            var: Expr_Array(
-                items: array(
-                    0: Expr_ArrayItem(
-                        key: null
-                        value: Expr_Variable(
-                            name: v
-                        )
-                        byRef: true
-                        unpack: false
-                    )
-                )
-            )
-            expr: Expr_Variable(
-                name: x
-            )
-        )
-    )
-    3: Stmt_Expression(
-        expr: Expr_Assign(
-            var: Expr_Array(
-                items: array(
-                    0: Expr_ArrayItem(
-                        key: Scalar_String(
-                            value: k
-                        )
-                        value: Expr_Variable(
-                            name: v
-                        )
-                        byRef: true
-                        unpack: false
-                    )
-                )
-            )
-            expr: Expr_Variable(
-                name: x
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/listWithKeys.test b/vendor/nikic/php-parser/test/code/parser/expr/listWithKeys.test
deleted file mode 100644
index e2eeedf0d9e350f6e20f5aba079b6fb53723ba16..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/listWithKeys.test
+++ /dev/null
@@ -1,84 +0,0 @@
-List destructing with keys
------
-<?php
-
-list('a' => $b) = ['a' => 'b'];
-list('a' => list($b => $c), 'd' => $e) = $x;
------
-!!php7
-array(
-    0: Stmt_Expression(
-        expr: Expr_Assign(
-            var: Expr_List(
-                items: array(
-                    0: Expr_ArrayItem(
-                        key: Scalar_String(
-                            value: a
-                        )
-                        value: Expr_Variable(
-                            name: b
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                )
-            )
-            expr: Expr_Array(
-                items: array(
-                    0: Expr_ArrayItem(
-                        key: Scalar_String(
-                            value: a
-                        )
-                        value: Scalar_String(
-                            value: b
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                )
-            )
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_Assign(
-            var: Expr_List(
-                items: array(
-                    0: Expr_ArrayItem(
-                        key: Scalar_String(
-                            value: a
-                        )
-                        value: Expr_List(
-                            items: array(
-                                0: Expr_ArrayItem(
-                                    key: Expr_Variable(
-                                        name: b
-                                    )
-                                    value: Expr_Variable(
-                                        name: c
-                                    )
-                                    byRef: false
-                                    unpack: false
-                                )
-                            )
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                    1: Expr_ArrayItem(
-                        key: Scalar_String(
-                            value: d
-                        )
-                        value: Expr_Variable(
-                            name: e
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                )
-            )
-            expr: Expr_Variable(
-                name: x
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/logic.test b/vendor/nikic/php-parser/test/code/parser/expr/logic.test
deleted file mode 100644
index 6b434565f6b0d7c604d4f8ca5158c018e12e2bfa..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/logic.test
+++ /dev/null
@@ -1,190 +0,0 @@
-Logical operators
------
-<?php
-
-// boolean ops
-$a && $b;
-$a || $b;
-!$a;
-!!$a;
-
-// logical ops
-$a and $b;
-$a or $b;
-$a xor $b;
-
-// precedence
-$a && $b || $c && $d;
-$a && ($b || $c) && $d;
-
-$a = $b || $c;
-$a = $b or $c;
------
-array(
-    0: Stmt_Expression(
-        expr: Expr_BinaryOp_BooleanAnd(
-            left: Expr_Variable(
-                name: a
-                comments: array(
-                    0: // boolean ops
-                )
-            )
-            right: Expr_Variable(
-                name: b
-            )
-            comments: array(
-                0: // boolean ops
-            )
-        )
-        comments: array(
-            0: // boolean ops
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_BinaryOp_BooleanOr(
-            left: Expr_Variable(
-                name: a
-            )
-            right: Expr_Variable(
-                name: b
-            )
-        )
-    )
-    2: Stmt_Expression(
-        expr: Expr_BooleanNot(
-            expr: Expr_Variable(
-                name: a
-            )
-        )
-    )
-    3: Stmt_Expression(
-        expr: Expr_BooleanNot(
-            expr: Expr_BooleanNot(
-                expr: Expr_Variable(
-                    name: a
-                )
-            )
-        )
-    )
-    4: Stmt_Expression(
-        expr: Expr_BinaryOp_LogicalAnd(
-            left: Expr_Variable(
-                name: a
-                comments: array(
-                    0: // logical ops
-                )
-            )
-            right: Expr_Variable(
-                name: b
-            )
-            comments: array(
-                0: // logical ops
-            )
-        )
-        comments: array(
-            0: // logical ops
-        )
-    )
-    5: Stmt_Expression(
-        expr: Expr_BinaryOp_LogicalOr(
-            left: Expr_Variable(
-                name: a
-            )
-            right: Expr_Variable(
-                name: b
-            )
-        )
-    )
-    6: Stmt_Expression(
-        expr: Expr_BinaryOp_LogicalXor(
-            left: Expr_Variable(
-                name: a
-            )
-            right: Expr_Variable(
-                name: b
-            )
-        )
-    )
-    7: Stmt_Expression(
-        expr: Expr_BinaryOp_BooleanOr(
-            left: Expr_BinaryOp_BooleanAnd(
-                left: Expr_Variable(
-                    name: a
-                    comments: array(
-                        0: // precedence
-                    )
-                )
-                right: Expr_Variable(
-                    name: b
-                )
-                comments: array(
-                    0: // precedence
-                )
-            )
-            right: Expr_BinaryOp_BooleanAnd(
-                left: Expr_Variable(
-                    name: c
-                )
-                right: Expr_Variable(
-                    name: d
-                )
-            )
-            comments: array(
-                0: // precedence
-            )
-        )
-        comments: array(
-            0: // precedence
-        )
-    )
-    8: Stmt_Expression(
-        expr: Expr_BinaryOp_BooleanAnd(
-            left: Expr_BinaryOp_BooleanAnd(
-                left: Expr_Variable(
-                    name: a
-                )
-                right: Expr_BinaryOp_BooleanOr(
-                    left: Expr_Variable(
-                        name: b
-                    )
-                    right: Expr_Variable(
-                        name: c
-                    )
-                )
-            )
-            right: Expr_Variable(
-                name: d
-            )
-        )
-    )
-    9: Stmt_Expression(
-        expr: Expr_Assign(
-            var: Expr_Variable(
-                name: a
-            )
-            expr: Expr_BinaryOp_BooleanOr(
-                left: Expr_Variable(
-                    name: b
-                )
-                right: Expr_Variable(
-                    name: c
-                )
-            )
-        )
-    )
-    10: Stmt_Expression(
-        expr: Expr_BinaryOp_LogicalOr(
-            left: Expr_Assign(
-                var: Expr_Variable(
-                    name: a
-                )
-                expr: Expr_Variable(
-                    name: b
-                )
-            )
-            right: Expr_Variable(
-                name: c
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/math.test b/vendor/nikic/php-parser/test/code/parser/expr/math.test
deleted file mode 100644
index 8399400c0650916992977e2328faaba8b5be0343..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/math.test
+++ /dev/null
@@ -1,313 +0,0 @@
-Mathematical operators
------
-<?php
-
-// unary ops
-~$a;
-+$a;
--$a;
-
-// binary ops
-$a & $b;
-$a | $b;
-$a ^ $b;
-$a . $b;
-$a / $b;
-$a - $b;
-$a % $b;
-$a * $b;
-$a + $b;
-$a << $b;
-$a >> $b;
-$a ** $b;
-
-// associativity
-$a * $b * $c;
-$a * ($b * $c);
-
-// precedence
-$a + $b * $c;
-($a + $b) * $c;
-
-// pow is special
-$a ** $b ** $c;
-($a ** $b) ** $c;
------
-array(
-    0: Stmt_Expression(
-        expr: Expr_BitwiseNot(
-            expr: Expr_Variable(
-                name: a
-            )
-            comments: array(
-                0: // unary ops
-            )
-        )
-        comments: array(
-            0: // unary ops
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_UnaryPlus(
-            expr: Expr_Variable(
-                name: a
-            )
-        )
-    )
-    2: Stmt_Expression(
-        expr: Expr_UnaryMinus(
-            expr: Expr_Variable(
-                name: a
-            )
-        )
-    )
-    3: Stmt_Expression(
-        expr: Expr_BinaryOp_BitwiseAnd(
-            left: Expr_Variable(
-                name: a
-                comments: array(
-                    0: // binary ops
-                )
-            )
-            right: Expr_Variable(
-                name: b
-            )
-            comments: array(
-                0: // binary ops
-            )
-        )
-        comments: array(
-            0: // binary ops
-        )
-    )
-    4: Stmt_Expression(
-        expr: Expr_BinaryOp_BitwiseOr(
-            left: Expr_Variable(
-                name: a
-            )
-            right: Expr_Variable(
-                name: b
-            )
-        )
-    )
-    5: Stmt_Expression(
-        expr: Expr_BinaryOp_BitwiseXor(
-            left: Expr_Variable(
-                name: a
-            )
-            right: Expr_Variable(
-                name: b
-            )
-        )
-    )
-    6: Stmt_Expression(
-        expr: Expr_BinaryOp_Concat(
-            left: Expr_Variable(
-                name: a
-            )
-            right: Expr_Variable(
-                name: b
-            )
-        )
-    )
-    7: Stmt_Expression(
-        expr: Expr_BinaryOp_Div(
-            left: Expr_Variable(
-                name: a
-            )
-            right: Expr_Variable(
-                name: b
-            )
-        )
-    )
-    8: Stmt_Expression(
-        expr: Expr_BinaryOp_Minus(
-            left: Expr_Variable(
-                name: a
-            )
-            right: Expr_Variable(
-                name: b
-            )
-        )
-    )
-    9: Stmt_Expression(
-        expr: Expr_BinaryOp_Mod(
-            left: Expr_Variable(
-                name: a
-            )
-            right: Expr_Variable(
-                name: b
-            )
-        )
-    )
-    10: Stmt_Expression(
-        expr: Expr_BinaryOp_Mul(
-            left: Expr_Variable(
-                name: a
-            )
-            right: Expr_Variable(
-                name: b
-            )
-        )
-    )
-    11: Stmt_Expression(
-        expr: Expr_BinaryOp_Plus(
-            left: Expr_Variable(
-                name: a
-            )
-            right: Expr_Variable(
-                name: b
-            )
-        )
-    )
-    12: Stmt_Expression(
-        expr: Expr_BinaryOp_ShiftLeft(
-            left: Expr_Variable(
-                name: a
-            )
-            right: Expr_Variable(
-                name: b
-            )
-        )
-    )
-    13: Stmt_Expression(
-        expr: Expr_BinaryOp_ShiftRight(
-            left: Expr_Variable(
-                name: a
-            )
-            right: Expr_Variable(
-                name: b
-            )
-        )
-    )
-    14: Stmt_Expression(
-        expr: Expr_BinaryOp_Pow(
-            left: Expr_Variable(
-                name: a
-            )
-            right: Expr_Variable(
-                name: b
-            )
-        )
-    )
-    15: Stmt_Expression(
-        expr: Expr_BinaryOp_Mul(
-            left: Expr_BinaryOp_Mul(
-                left: Expr_Variable(
-                    name: a
-                    comments: array(
-                        0: // associativity
-                    )
-                )
-                right: Expr_Variable(
-                    name: b
-                )
-                comments: array(
-                    0: // associativity
-                )
-            )
-            right: Expr_Variable(
-                name: c
-            )
-            comments: array(
-                0: // associativity
-            )
-        )
-        comments: array(
-            0: // associativity
-        )
-    )
-    16: Stmt_Expression(
-        expr: Expr_BinaryOp_Mul(
-            left: Expr_Variable(
-                name: a
-            )
-            right: Expr_BinaryOp_Mul(
-                left: Expr_Variable(
-                    name: b
-                )
-                right: Expr_Variable(
-                    name: c
-                )
-            )
-        )
-    )
-    17: Stmt_Expression(
-        expr: Expr_BinaryOp_Plus(
-            left: Expr_Variable(
-                name: a
-                comments: array(
-                    0: // precedence
-                )
-            )
-            right: Expr_BinaryOp_Mul(
-                left: Expr_Variable(
-                    name: b
-                )
-                right: Expr_Variable(
-                    name: c
-                )
-            )
-            comments: array(
-                0: // precedence
-            )
-        )
-        comments: array(
-            0: // precedence
-        )
-    )
-    18: Stmt_Expression(
-        expr: Expr_BinaryOp_Mul(
-            left: Expr_BinaryOp_Plus(
-                left: Expr_Variable(
-                    name: a
-                )
-                right: Expr_Variable(
-                    name: b
-                )
-            )
-            right: Expr_Variable(
-                name: c
-            )
-        )
-    )
-    19: Stmt_Expression(
-        expr: Expr_BinaryOp_Pow(
-            left: Expr_Variable(
-                name: a
-                comments: array(
-                    0: // pow is special
-                )
-            )
-            right: Expr_BinaryOp_Pow(
-                left: Expr_Variable(
-                    name: b
-                )
-                right: Expr_Variable(
-                    name: c
-                )
-            )
-            comments: array(
-                0: // pow is special
-            )
-        )
-        comments: array(
-            0: // pow is special
-        )
-    )
-    20: Stmt_Expression(
-        expr: Expr_BinaryOp_Pow(
-            left: Expr_BinaryOp_Pow(
-                left: Expr_Variable(
-                    name: a
-                )
-                right: Expr_Variable(
-                    name: b
-                )
-            )
-            right: Expr_Variable(
-                name: c
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/new.test b/vendor/nikic/php-parser/test/code/parser/expr/new.test
deleted file mode 100644
index 2735bfe932db5643177748e236d5babf0e141771..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/new.test
+++ /dev/null
@@ -1,187 +0,0 @@
-New
------
-<?php
-
-new A;
-new A($b);
-
-// class name variations
-new $a();
-new $a['b']();
-new A::$b();
-// DNCR object access
-new $a->b();
-new $a->b->c();
-new $a->b['c']();
-new $a->b{'c'}();
-
-// test regression introduces by new dereferencing syntax
-(new A);
------
-array(
-    0: Stmt_Expression(
-        expr: Expr_New(
-            class: Name(
-                parts: array(
-                    0: A
-                )
-            )
-            args: array(
-            )
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_New(
-            class: Name(
-                parts: array(
-                    0: A
-                )
-            )
-            args: array(
-                0: Arg(
-                    value: Expr_Variable(
-                        name: b
-                    )
-                    byRef: false
-                    unpack: false
-                )
-            )
-        )
-    )
-    2: Stmt_Expression(
-        expr: Expr_New(
-            class: Expr_Variable(
-                name: a
-            )
-            args: array(
-            )
-            comments: array(
-                0: // class name variations
-            )
-        )
-        comments: array(
-            0: // class name variations
-        )
-    )
-    3: Stmt_Expression(
-        expr: Expr_New(
-            class: Expr_ArrayDimFetch(
-                var: Expr_Variable(
-                    name: a
-                )
-                dim: Scalar_String(
-                    value: b
-                )
-            )
-            args: array(
-            )
-        )
-    )
-    4: Stmt_Expression(
-        expr: Expr_New(
-            class: Expr_StaticPropertyFetch(
-                class: Name(
-                    parts: array(
-                        0: A
-                    )
-                )
-                name: VarLikeIdentifier(
-                    name: b
-                )
-            )
-            args: array(
-            )
-        )
-    )
-    5: Stmt_Expression(
-        expr: Expr_New(
-            class: Expr_PropertyFetch(
-                var: Expr_Variable(
-                    name: a
-                )
-                name: Identifier(
-                    name: b
-                )
-            )
-            args: array(
-            )
-            comments: array(
-                0: // DNCR object access
-            )
-        )
-        comments: array(
-            0: // DNCR object access
-        )
-    )
-    6: Stmt_Expression(
-        expr: Expr_New(
-            class: Expr_PropertyFetch(
-                var: Expr_PropertyFetch(
-                    var: Expr_Variable(
-                        name: a
-                    )
-                    name: Identifier(
-                        name: b
-                    )
-                )
-                name: Identifier(
-                    name: c
-                )
-            )
-            args: array(
-            )
-        )
-    )
-    7: Stmt_Expression(
-        expr: Expr_New(
-            class: Expr_ArrayDimFetch(
-                var: Expr_PropertyFetch(
-                    var: Expr_Variable(
-                        name: a
-                    )
-                    name: Identifier(
-                        name: b
-                    )
-                )
-                dim: Scalar_String(
-                    value: c
-                )
-            )
-            args: array(
-            )
-        )
-    )
-    8: Stmt_Expression(
-        expr: Expr_New(
-            class: Expr_ArrayDimFetch(
-                var: Expr_PropertyFetch(
-                    var: Expr_Variable(
-                        name: a
-                    )
-                    name: Identifier(
-                        name: b
-                    )
-                )
-                dim: Scalar_String(
-                    value: c
-                )
-            )
-            args: array(
-            )
-        )
-    )
-    9: Stmt_Expression(
-        expr: Expr_New(
-            class: Name(
-                parts: array(
-                    0: A
-                )
-            )
-            args: array(
-            )
-        )
-        comments: array(
-            0: // test regression introduces by new dereferencing syntax
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/newWithoutClass.test b/vendor/nikic/php-parser/test/code/parser/expr/newWithoutClass.test
deleted file mode 100644
index 318f9301f9f302bbaeb32e2b4393f9f98c5e33ea..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/newWithoutClass.test
+++ /dev/null
@@ -1,25 +0,0 @@
-New without a class
------
-<?php
-new;
------
-!!php5
-Syntax error, unexpected ';' from 2:4 to 2:4
-array(
-)
------
-<?php
-new;
------
-!!php7
-Syntax error, unexpected ';' from 2:4 to 2:4
-array(
-    0: Stmt_Expression(
-        expr: Expr_New(
-            class: Expr_Error(
-            )
-            args: array(
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/print.test b/vendor/nikic/php-parser/test/code/parser/expr/print.test
deleted file mode 100644
index 84ed7775b184c7afc1a24815cfd91fb9599a9a56..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/print.test
+++ /dev/null
@@ -1,14 +0,0 @@
-Print
------
-<?php
-print $a;
------
-array(
-    0: Stmt_Expression(
-        expr: Expr_Print(
-            expr: Expr_Variable(
-                name: a
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/shellExec.test b/vendor/nikic/php-parser/test/code/parser/expr/shellExec.test
deleted file mode 100644
index 115d9f0a36e4f1acb1b0224d1822d0fa8cef3f74..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/shellExec.test
+++ /dev/null
@@ -1,56 +0,0 @@
-Shell execution
------
-<?php
-``;
-`test`;
-`test $A`;
-`test \``;
-`test \"`;
------
-array(
-    0: Stmt_Expression(
-        expr: Expr_ShellExec(
-            parts: array(
-            )
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_ShellExec(
-            parts: array(
-                0: Scalar_EncapsedStringPart(
-                    value: test
-                )
-            )
-        )
-    )
-    2: Stmt_Expression(
-        expr: Expr_ShellExec(
-            parts: array(
-                0: Scalar_EncapsedStringPart(
-                    value: test
-                )
-                1: Expr_Variable(
-                    name: A
-                )
-            )
-        )
-    )
-    3: Stmt_Expression(
-        expr: Expr_ShellExec(
-            parts: array(
-                0: Scalar_EncapsedStringPart(
-                    value: test `
-                )
-            )
-        )
-    )
-    4: Stmt_Expression(
-        expr: Expr_ShellExec(
-            parts: array(
-                0: Scalar_EncapsedStringPart(
-                    value: test \"
-                )
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/ternaryAndCoalesce.test b/vendor/nikic/php-parser/test/code/parser/expr/ternaryAndCoalesce.test
deleted file mode 100644
index ea1010caa1779567f4eb3df449cf0ee3cd633cf0..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/ternaryAndCoalesce.test
+++ /dev/null
@@ -1,174 +0,0 @@
-Ternary operator
------
-<?php
-
-// ternary
-$a ? $b : $c;
-$a ?: $c;
-
-// precedence
-$a ? $b : $c ? $d : $e;
-$a ? $b : ($c ? $d : $e);
-
-// null coalesce
-$a ?? $b;
-$a ?? $b ?? $c;
-$a ?? $b ? $c : $d;
-$a && $b ?? $c;
------
-array(
-    0: Stmt_Expression(
-        expr: Expr_Ternary(
-            cond: Expr_Variable(
-                name: a
-                comments: array(
-                    0: // ternary
-                )
-            )
-            if: Expr_Variable(
-                name: b
-            )
-            else: Expr_Variable(
-                name: c
-            )
-            comments: array(
-                0: // ternary
-            )
-        )
-        comments: array(
-            0: // ternary
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_Ternary(
-            cond: Expr_Variable(
-                name: a
-            )
-            if: null
-            else: Expr_Variable(
-                name: c
-            )
-        )
-    )
-    2: Stmt_Expression(
-        expr: Expr_Ternary(
-            cond: Expr_Ternary(
-                cond: Expr_Variable(
-                    name: a
-                    comments: array(
-                        0: // precedence
-                    )
-                )
-                if: Expr_Variable(
-                    name: b
-                )
-                else: Expr_Variable(
-                    name: c
-                )
-                comments: array(
-                    0: // precedence
-                )
-            )
-            if: Expr_Variable(
-                name: d
-            )
-            else: Expr_Variable(
-                name: e
-            )
-            comments: array(
-                0: // precedence
-            )
-        )
-        comments: array(
-            0: // precedence
-        )
-    )
-    3: Stmt_Expression(
-        expr: Expr_Ternary(
-            cond: Expr_Variable(
-                name: a
-            )
-            if: Expr_Variable(
-                name: b
-            )
-            else: Expr_Ternary(
-                cond: Expr_Variable(
-                    name: c
-                )
-                if: Expr_Variable(
-                    name: d
-                )
-                else: Expr_Variable(
-                    name: e
-                )
-            )
-        )
-    )
-    4: Stmt_Expression(
-        expr: Expr_BinaryOp_Coalesce(
-            left: Expr_Variable(
-                name: a
-                comments: array(
-                    0: // null coalesce
-                )
-            )
-            right: Expr_Variable(
-                name: b
-            )
-            comments: array(
-                0: // null coalesce
-            )
-        )
-        comments: array(
-            0: // null coalesce
-        )
-    )
-    5: Stmt_Expression(
-        expr: Expr_BinaryOp_Coalesce(
-            left: Expr_Variable(
-                name: a
-            )
-            right: Expr_BinaryOp_Coalesce(
-                left: Expr_Variable(
-                    name: b
-                )
-                right: Expr_Variable(
-                    name: c
-                )
-            )
-        )
-    )
-    6: Stmt_Expression(
-        expr: Expr_Ternary(
-            cond: Expr_BinaryOp_Coalesce(
-                left: Expr_Variable(
-                    name: a
-                )
-                right: Expr_Variable(
-                    name: b
-                )
-            )
-            if: Expr_Variable(
-                name: c
-            )
-            else: Expr_Variable(
-                name: d
-            )
-        )
-    )
-    7: Stmt_Expression(
-        expr: Expr_BinaryOp_Coalesce(
-            left: Expr_BinaryOp_BooleanAnd(
-                left: Expr_Variable(
-                    name: a
-                )
-                right: Expr_Variable(
-                    name: b
-                )
-            )
-            right: Expr_Variable(
-                name: c
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/trailingCommas.test b/vendor/nikic/php-parser/test/code/parser/expr/trailingCommas.test
deleted file mode 100644
index 11092d98169e017089ce901032b9c7749adb07b1..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/trailingCommas.test
+++ /dev/null
@@ -1,140 +0,0 @@
-PHP 7.3 trailing comma additions
------
-<?php
-
-foo($a, $b, );
-$foo->bar($a, $b, );
-Foo::bar($a, $b, );
-new Foo($a, $b, );
-unset($a, $b, );
-isset($a, $b, );
------
-!!php7
-array(
-    0: Stmt_Expression(
-        expr: Expr_FuncCall(
-            name: Name(
-                parts: array(
-                    0: foo
-                )
-            )
-            args: array(
-                0: Arg(
-                    value: Expr_Variable(
-                        name: a
-                    )
-                    byRef: false
-                    unpack: false
-                )
-                1: Arg(
-                    value: Expr_Variable(
-                        name: b
-                    )
-                    byRef: false
-                    unpack: false
-                )
-            )
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_MethodCall(
-            var: Expr_Variable(
-                name: foo
-            )
-            name: Identifier(
-                name: bar
-            )
-            args: array(
-                0: Arg(
-                    value: Expr_Variable(
-                        name: a
-                    )
-                    byRef: false
-                    unpack: false
-                )
-                1: Arg(
-                    value: Expr_Variable(
-                        name: b
-                    )
-                    byRef: false
-                    unpack: false
-                )
-            )
-        )
-    )
-    2: Stmt_Expression(
-        expr: Expr_StaticCall(
-            class: Name(
-                parts: array(
-                    0: Foo
-                )
-            )
-            name: Identifier(
-                name: bar
-            )
-            args: array(
-                0: Arg(
-                    value: Expr_Variable(
-                        name: a
-                    )
-                    byRef: false
-                    unpack: false
-                )
-                1: Arg(
-                    value: Expr_Variable(
-                        name: b
-                    )
-                    byRef: false
-                    unpack: false
-                )
-            )
-        )
-    )
-    3: Stmt_Expression(
-        expr: Expr_New(
-            class: Name(
-                parts: array(
-                    0: Foo
-                )
-            )
-            args: array(
-                0: Arg(
-                    value: Expr_Variable(
-                        name: a
-                    )
-                    byRef: false
-                    unpack: false
-                )
-                1: Arg(
-                    value: Expr_Variable(
-                        name: b
-                    )
-                    byRef: false
-                    unpack: false
-                )
-            )
-        )
-    )
-    4: Stmt_Unset(
-        vars: array(
-            0: Expr_Variable(
-                name: a
-            )
-            1: Expr_Variable(
-                name: b
-            )
-        )
-    )
-    5: Stmt_Expression(
-        expr: Expr_Isset(
-            vars: array(
-                0: Expr_Variable(
-                    name: a
-                )
-                1: Expr_Variable(
-                    name: b
-                )
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/uvs/globalNonSimpleVarError.test b/vendor/nikic/php-parser/test/code/parser/expr/uvs/globalNonSimpleVarError.test
deleted file mode 100644
index 5ae4f958e297cea75c3971c0cc718f5bbf54b03f..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/uvs/globalNonSimpleVarError.test
+++ /dev/null
@@ -1,27 +0,0 @@
-Non-simple variables are forbidden in PHP 7
------
-<?php
-global $$foo->bar;
------
-!!php7
-Syntax error, unexpected T_OBJECT_OPERATOR, expecting ';' from 2:13 to 2:14
-array(
-    0: Stmt_Global(
-        vars: array(
-            0: Expr_Variable(
-                name: Expr_Variable(
-                    name: foo
-                )
-            )
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_ConstFetch(
-            name: Name(
-                parts: array(
-                    0: bar
-                )
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/uvs/indirectCall.test b/vendor/nikic/php-parser/test/code/parser/expr/uvs/indirectCall.test
deleted file mode 100644
index 39db60c0356de60c64302141e4d6b594cdf220fb..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/uvs/indirectCall.test
+++ /dev/null
@@ -1,511 +0,0 @@
-UVS indirect calls
------
-<?php
-
-id('var_dump')(1);
-id('id')('var_dump')(2);
-id()()('var_dump')(4);
-id(['udef', 'id'])[1]()('var_dump')(5);
-(function($x) { return $x; })('id')('var_dump')(8);
-($f = function($x = null) use (&$f) {
-    return $x ?: $f;
-})()()()('var_dump')(9);
-[$obj, 'id']()('id')($id)('var_dump')(10);
-'id'()('id')('var_dump')(12);
-('i' . 'd')()('var_dump')(13);
-'\id'('var_dump')(14);
------
-!!php7
-array(
-    0: Stmt_Expression(
-        expr: Expr_FuncCall(
-            name: Expr_FuncCall(
-                name: Name(
-                    parts: array(
-                        0: id
-                    )
-                )
-                args: array(
-                    0: Arg(
-                        value: Scalar_String(
-                            value: var_dump
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                )
-            )
-            args: array(
-                0: Arg(
-                    value: Scalar_LNumber(
-                        value: 1
-                    )
-                    byRef: false
-                    unpack: false
-                )
-            )
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_FuncCall(
-            name: Expr_FuncCall(
-                name: Expr_FuncCall(
-                    name: Name(
-                        parts: array(
-                            0: id
-                        )
-                    )
-                    args: array(
-                        0: Arg(
-                            value: Scalar_String(
-                                value: id
-                            )
-                            byRef: false
-                            unpack: false
-                        )
-                    )
-                )
-                args: array(
-                    0: Arg(
-                        value: Scalar_String(
-                            value: var_dump
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                )
-            )
-            args: array(
-                0: Arg(
-                    value: Scalar_LNumber(
-                        value: 2
-                    )
-                    byRef: false
-                    unpack: false
-                )
-            )
-        )
-    )
-    2: Stmt_Expression(
-        expr: Expr_FuncCall(
-            name: Expr_FuncCall(
-                name: Expr_FuncCall(
-                    name: Expr_FuncCall(
-                        name: Name(
-                            parts: array(
-                                0: id
-                            )
-                        )
-                        args: array(
-                        )
-                    )
-                    args: array(
-                    )
-                )
-                args: array(
-                    0: Arg(
-                        value: Scalar_String(
-                            value: var_dump
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                )
-            )
-            args: array(
-                0: Arg(
-                    value: Scalar_LNumber(
-                        value: 4
-                    )
-                    byRef: false
-                    unpack: false
-                )
-            )
-        )
-    )
-    3: Stmt_Expression(
-        expr: Expr_FuncCall(
-            name: Expr_FuncCall(
-                name: Expr_FuncCall(
-                    name: Expr_ArrayDimFetch(
-                        var: Expr_FuncCall(
-                            name: Name(
-                                parts: array(
-                                    0: id
-                                )
-                            )
-                            args: array(
-                                0: Arg(
-                                    value: Expr_Array(
-                                        items: array(
-                                            0: Expr_ArrayItem(
-                                                key: null
-                                                value: Scalar_String(
-                                                    value: udef
-                                                )
-                                                byRef: false
-                                                unpack: false
-                                            )
-                                            1: Expr_ArrayItem(
-                                                key: null
-                                                value: Scalar_String(
-                                                    value: id
-                                                )
-                                                byRef: false
-                                                unpack: false
-                                            )
-                                        )
-                                    )
-                                    byRef: false
-                                    unpack: false
-                                )
-                            )
-                        )
-                        dim: Scalar_LNumber(
-                            value: 1
-                        )
-                    )
-                    args: array(
-                    )
-                )
-                args: array(
-                    0: Arg(
-                        value: Scalar_String(
-                            value: var_dump
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                )
-            )
-            args: array(
-                0: Arg(
-                    value: Scalar_LNumber(
-                        value: 5
-                    )
-                    byRef: false
-                    unpack: false
-                )
-            )
-        )
-    )
-    4: Stmt_Expression(
-        expr: Expr_FuncCall(
-            name: Expr_FuncCall(
-                name: Expr_FuncCall(
-                    name: Expr_Closure(
-                        static: false
-                        byRef: false
-                        params: array(
-                            0: Param(
-                                type: null
-                                byRef: false
-                                variadic: false
-                                var: Expr_Variable(
-                                    name: x
-                                )
-                                default: null
-                            )
-                        )
-                        uses: array(
-                        )
-                        returnType: null
-                        stmts: array(
-                            0: Stmt_Return(
-                                expr: Expr_Variable(
-                                    name: x
-                                )
-                            )
-                        )
-                    )
-                    args: array(
-                        0: Arg(
-                            value: Scalar_String(
-                                value: id
-                            )
-                            byRef: false
-                            unpack: false
-                        )
-                    )
-                )
-                args: array(
-                    0: Arg(
-                        value: Scalar_String(
-                            value: var_dump
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                )
-            )
-            args: array(
-                0: Arg(
-                    value: Scalar_LNumber(
-                        value: 8
-                    )
-                    byRef: false
-                    unpack: false
-                )
-            )
-        )
-    )
-    5: Stmt_Expression(
-        expr: Expr_FuncCall(
-            name: Expr_FuncCall(
-                name: Expr_FuncCall(
-                    name: Expr_FuncCall(
-                        name: Expr_FuncCall(
-                            name: Expr_Assign(
-                                var: Expr_Variable(
-                                    name: f
-                                )
-                                expr: Expr_Closure(
-                                    static: false
-                                    byRef: false
-                                    params: array(
-                                        0: Param(
-                                            type: null
-                                            byRef: false
-                                            variadic: false
-                                            var: Expr_Variable(
-                                                name: x
-                                            )
-                                            default: Expr_ConstFetch(
-                                                name: Name(
-                                                    parts: array(
-                                                        0: null
-                                                    )
-                                                )
-                                            )
-                                        )
-                                    )
-                                    uses: array(
-                                        0: Expr_ClosureUse(
-                                            var: Expr_Variable(
-                                                name: f
-                                            )
-                                            byRef: true
-                                        )
-                                    )
-                                    returnType: null
-                                    stmts: array(
-                                        0: Stmt_Return(
-                                            expr: Expr_Ternary(
-                                                cond: Expr_Variable(
-                                                    name: x
-                                                )
-                                                if: null
-                                                else: Expr_Variable(
-                                                    name: f
-                                                )
-                                            )
-                                        )
-                                    )
-                                )
-                            )
-                            args: array(
-                            )
-                        )
-                        args: array(
-                        )
-                    )
-                    args: array(
-                    )
-                )
-                args: array(
-                    0: Arg(
-                        value: Scalar_String(
-                            value: var_dump
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                )
-            )
-            args: array(
-                0: Arg(
-                    value: Scalar_LNumber(
-                        value: 9
-                    )
-                    byRef: false
-                    unpack: false
-                )
-            )
-        )
-    )
-    6: Stmt_Expression(
-        expr: Expr_FuncCall(
-            name: Expr_FuncCall(
-                name: Expr_FuncCall(
-                    name: Expr_FuncCall(
-                        name: Expr_FuncCall(
-                            name: Expr_Array(
-                                items: array(
-                                    0: Expr_ArrayItem(
-                                        key: null
-                                        value: Expr_Variable(
-                                            name: obj
-                                        )
-                                        byRef: false
-                                        unpack: false
-                                    )
-                                    1: Expr_ArrayItem(
-                                        key: null
-                                        value: Scalar_String(
-                                            value: id
-                                        )
-                                        byRef: false
-                                        unpack: false
-                                    )
-                                )
-                            )
-                            args: array(
-                            )
-                        )
-                        args: array(
-                            0: Arg(
-                                value: Scalar_String(
-                                    value: id
-                                )
-                                byRef: false
-                                unpack: false
-                            )
-                        )
-                    )
-                    args: array(
-                        0: Arg(
-                            value: Expr_Variable(
-                                name: id
-                            )
-                            byRef: false
-                            unpack: false
-                        )
-                    )
-                )
-                args: array(
-                    0: Arg(
-                        value: Scalar_String(
-                            value: var_dump
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                )
-            )
-            args: array(
-                0: Arg(
-                    value: Scalar_LNumber(
-                        value: 10
-                    )
-                    byRef: false
-                    unpack: false
-                )
-            )
-        )
-    )
-    7: Stmt_Expression(
-        expr: Expr_FuncCall(
-            name: Expr_FuncCall(
-                name: Expr_FuncCall(
-                    name: Expr_FuncCall(
-                        name: Scalar_String(
-                            value: id
-                        )
-                        args: array(
-                        )
-                    )
-                    args: array(
-                        0: Arg(
-                            value: Scalar_String(
-                                value: id
-                            )
-                            byRef: false
-                            unpack: false
-                        )
-                    )
-                )
-                args: array(
-                    0: Arg(
-                        value: Scalar_String(
-                            value: var_dump
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                )
-            )
-            args: array(
-                0: Arg(
-                    value: Scalar_LNumber(
-                        value: 12
-                    )
-                    byRef: false
-                    unpack: false
-                )
-            )
-        )
-    )
-    8: Stmt_Expression(
-        expr: Expr_FuncCall(
-            name: Expr_FuncCall(
-                name: Expr_FuncCall(
-                    name: Expr_BinaryOp_Concat(
-                        left: Scalar_String(
-                            value: i
-                        )
-                        right: Scalar_String(
-                            value: d
-                        )
-                    )
-                    args: array(
-                    )
-                )
-                args: array(
-                    0: Arg(
-                        value: Scalar_String(
-                            value: var_dump
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                )
-            )
-            args: array(
-                0: Arg(
-                    value: Scalar_LNumber(
-                        value: 13
-                    )
-                    byRef: false
-                    unpack: false
-                )
-            )
-        )
-    )
-    9: Stmt_Expression(
-        expr: Expr_FuncCall(
-            name: Expr_FuncCall(
-                name: Scalar_String(
-                    value: \id
-                )
-                args: array(
-                    0: Arg(
-                        value: Scalar_String(
-                            value: var_dump
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                )
-            )
-            args: array(
-                0: Arg(
-                    value: Scalar_LNumber(
-                        value: 14
-                    )
-                    byRef: false
-                    unpack: false
-                )
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/uvs/isset.test b/vendor/nikic/php-parser/test/code/parser/expr/uvs/isset.test
deleted file mode 100644
index 828fd9b1f5feab34efcc998e0a6509def8978732..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/uvs/isset.test
+++ /dev/null
@@ -1,87 +0,0 @@
-UVS isset() on temporaries
------
-<?php
-
-isset(([0, 1] + [])[0]);
-isset(['a' => 'b']->a);
-isset("str"->a);
------
-!!php7
-array(
-    0: Stmt_Expression(
-        expr: Expr_Isset(
-            vars: array(
-                0: Expr_ArrayDimFetch(
-                    var: Expr_BinaryOp_Plus(
-                        left: Expr_Array(
-                            items: array(
-                                0: Expr_ArrayItem(
-                                    key: null
-                                    value: Scalar_LNumber(
-                                        value: 0
-                                    )
-                                    byRef: false
-                                    unpack: false
-                                )
-                                1: Expr_ArrayItem(
-                                    key: null
-                                    value: Scalar_LNumber(
-                                        value: 1
-                                    )
-                                    byRef: false
-                                    unpack: false
-                                )
-                            )
-                        )
-                        right: Expr_Array(
-                            items: array(
-                            )
-                        )
-                    )
-                    dim: Scalar_LNumber(
-                        value: 0
-                    )
-                )
-            )
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_Isset(
-            vars: array(
-                0: Expr_PropertyFetch(
-                    var: Expr_Array(
-                        items: array(
-                            0: Expr_ArrayItem(
-                                key: Scalar_String(
-                                    value: a
-                                )
-                                value: Scalar_String(
-                                    value: b
-                                )
-                                byRef: false
-                                unpack: false
-                            )
-                        )
-                    )
-                    name: Identifier(
-                        name: a
-                    )
-                )
-            )
-        )
-    )
-    2: Stmt_Expression(
-        expr: Expr_Isset(
-            vars: array(
-                0: Expr_PropertyFetch(
-                    var: Scalar_String(
-                        value: str
-                    )
-                    name: Identifier(
-                        name: a
-                    )
-                )
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/uvs/misc.test b/vendor/nikic/php-parser/test/code/parser/expr/uvs/misc.test
deleted file mode 100644
index 801eb37c06a5f798e0bc1fe0c2fa3c3356c79314..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/uvs/misc.test
+++ /dev/null
@@ -1,129 +0,0 @@
-Uniform variable syntax in PHP 7 (misc)
------
-<?php
-
-A::A[0];
-A::A[0][1][2];
-"string"->length();
-(clone $obj)->b[0](1);
-[0, 1][0] = 1;
------
-!!php7
-array(
-    0: Stmt_Expression(
-        expr: Expr_ArrayDimFetch(
-            var: Expr_ClassConstFetch(
-                class: Name(
-                    parts: array(
-                        0: A
-                    )
-                )
-                name: Identifier(
-                    name: A
-                )
-            )
-            dim: Scalar_LNumber(
-                value: 0
-            )
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_ArrayDimFetch(
-            var: Expr_ArrayDimFetch(
-                var: Expr_ArrayDimFetch(
-                    var: Expr_ClassConstFetch(
-                        class: Name(
-                            parts: array(
-                                0: A
-                            )
-                        )
-                        name: Identifier(
-                            name: A
-                        )
-                    )
-                    dim: Scalar_LNumber(
-                        value: 0
-                    )
-                )
-                dim: Scalar_LNumber(
-                    value: 1
-                )
-            )
-            dim: Scalar_LNumber(
-                value: 2
-            )
-        )
-    )
-    2: Stmt_Expression(
-        expr: Expr_MethodCall(
-            var: Scalar_String(
-                value: string
-            )
-            name: Identifier(
-                name: length
-            )
-            args: array(
-            )
-        )
-    )
-    3: Stmt_Expression(
-        expr: Expr_FuncCall(
-            name: Expr_ArrayDimFetch(
-                var: Expr_PropertyFetch(
-                    var: Expr_Clone(
-                        expr: Expr_Variable(
-                            name: obj
-                        )
-                    )
-                    name: Identifier(
-                        name: b
-                    )
-                )
-                dim: Scalar_LNumber(
-                    value: 0
-                )
-            )
-            args: array(
-                0: Arg(
-                    value: Scalar_LNumber(
-                        value: 1
-                    )
-                    byRef: false
-                    unpack: false
-                )
-            )
-        )
-    )
-    4: Stmt_Expression(
-        expr: Expr_Assign(
-            var: Expr_ArrayDimFetch(
-                var: Expr_Array(
-                    items: array(
-                        0: Expr_ArrayItem(
-                            key: null
-                            value: Scalar_LNumber(
-                                value: 0
-                            )
-                            byRef: false
-                            unpack: false
-                        )
-                        1: Expr_ArrayItem(
-                            key: null
-                            value: Scalar_LNumber(
-                                value: 1
-                            )
-                            byRef: false
-                            unpack: false
-                        )
-                    )
-                )
-                dim: Scalar_LNumber(
-                    value: 0
-                )
-            )
-            expr: Scalar_LNumber(
-                value: 1
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/uvs/new.test b/vendor/nikic/php-parser/test/code/parser/expr/uvs/new.test
deleted file mode 100644
index 5e1caf2fc2c56cc90dc790d522d7ed4f66dca91e..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/uvs/new.test
+++ /dev/null
@@ -1,119 +0,0 @@
-UVS new expressions
------
-<?php
-new $className;
-new $array['className'];
-new $array{'className'};
-new $obj->className;
-new Test::$className;
-new $test::$className;
-new $weird[0]->foo::$className;
------
-!!php7
-array(
-    0: Stmt_Expression(
-        expr: Expr_New(
-            class: Expr_Variable(
-                name: className
-            )
-            args: array(
-            )
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_New(
-            class: Expr_ArrayDimFetch(
-                var: Expr_Variable(
-                    name: array
-                )
-                dim: Scalar_String(
-                    value: className
-                )
-            )
-            args: array(
-            )
-        )
-    )
-    2: Stmt_Expression(
-        expr: Expr_New(
-            class: Expr_ArrayDimFetch(
-                var: Expr_Variable(
-                    name: array
-                )
-                dim: Scalar_String(
-                    value: className
-                )
-            )
-            args: array(
-            )
-        )
-    )
-    3: Stmt_Expression(
-        expr: Expr_New(
-            class: Expr_PropertyFetch(
-                var: Expr_Variable(
-                    name: obj
-                )
-                name: Identifier(
-                    name: className
-                )
-            )
-            args: array(
-            )
-        )
-    )
-    4: Stmt_Expression(
-        expr: Expr_New(
-            class: Expr_StaticPropertyFetch(
-                class: Name(
-                    parts: array(
-                        0: Test
-                    )
-                )
-                name: VarLikeIdentifier(
-                    name: className
-                )
-            )
-            args: array(
-            )
-        )
-    )
-    5: Stmt_Expression(
-        expr: Expr_New(
-            class: Expr_StaticPropertyFetch(
-                class: Expr_Variable(
-                    name: test
-                )
-                name: VarLikeIdentifier(
-                    name: className
-                )
-            )
-            args: array(
-            )
-        )
-    )
-    6: Stmt_Expression(
-        expr: Expr_New(
-            class: Expr_StaticPropertyFetch(
-                class: Expr_PropertyFetch(
-                    var: Expr_ArrayDimFetch(
-                        var: Expr_Variable(
-                            name: weird
-                        )
-                        dim: Scalar_LNumber(
-                            value: 0
-                        )
-                    )
-                    name: Identifier(
-                        name: foo
-                    )
-                )
-                name: VarLikeIdentifier(
-                    name: className
-                )
-            )
-            args: array(
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/uvs/staticProperty.test b/vendor/nikic/php-parser/test/code/parser/expr/uvs/staticProperty.test
deleted file mode 100644
index bf3547ca764922a4f48ba05a074744db12a1e39d..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/uvs/staticProperty.test
+++ /dev/null
@@ -1,123 +0,0 @@
-UVS static access
------
-<?php
-A::$b;
-$A::$b;
-'A'::$b;
-('A' . '')::$b;
-'A'[0]::$b;
-A::$$b;
-A::$$c[1];
-A::$A::$b;
------
-!!php7
-array(
-    0: Stmt_Expression(
-        expr: Expr_StaticPropertyFetch(
-            class: Name(
-                parts: array(
-                    0: A
-                )
-            )
-            name: VarLikeIdentifier(
-                name: b
-            )
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_StaticPropertyFetch(
-            class: Expr_Variable(
-                name: A
-            )
-            name: VarLikeIdentifier(
-                name: b
-            )
-        )
-    )
-    2: Stmt_Expression(
-        expr: Expr_StaticPropertyFetch(
-            class: Scalar_String(
-                value: A
-            )
-            name: VarLikeIdentifier(
-                name: b
-            )
-        )
-    )
-    3: Stmt_Expression(
-        expr: Expr_StaticPropertyFetch(
-            class: Expr_BinaryOp_Concat(
-                left: Scalar_String(
-                    value: A
-                )
-                right: Scalar_String(
-                    value:
-                )
-            )
-            name: VarLikeIdentifier(
-                name: b
-            )
-        )
-    )
-    4: Stmt_Expression(
-        expr: Expr_StaticPropertyFetch(
-            class: Expr_ArrayDimFetch(
-                var: Scalar_String(
-                    value: A
-                )
-                dim: Scalar_LNumber(
-                    value: 0
-                )
-            )
-            name: VarLikeIdentifier(
-                name: b
-            )
-        )
-    )
-    5: Stmt_Expression(
-        expr: Expr_StaticPropertyFetch(
-            class: Name(
-                parts: array(
-                    0: A
-                )
-            )
-            name: Expr_Variable(
-                name: b
-            )
-        )
-    )
-    6: Stmt_Expression(
-        expr: Expr_ArrayDimFetch(
-            var: Expr_StaticPropertyFetch(
-                class: Name(
-                    parts: array(
-                        0: A
-                    )
-                )
-                name: Expr_Variable(
-                    name: c
-                )
-            )
-            dim: Scalar_LNumber(
-                value: 1
-            )
-        )
-    )
-    7: Stmt_Expression(
-        expr: Expr_StaticPropertyFetch(
-            class: Expr_StaticPropertyFetch(
-                class: Name(
-                    parts: array(
-                        0: A
-                    )
-                )
-                name: VarLikeIdentifier(
-                    name: A
-                )
-            )
-            name: VarLikeIdentifier(
-                name: b
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/expr/variable.test b/vendor/nikic/php-parser/test/code/parser/expr/variable.test
deleted file mode 100644
index c30326cc5e6fcc3f71327b18c4fbc756114db5e9..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/expr/variable.test
+++ /dev/null
@@ -1,67 +0,0 @@
-Variable syntaxes
------
-<?php
-
-$a;
-${'a'};
-${foo()};
-$$a;
-$$$a;
-$$a['b'];
------
-!!php5
-array(
-    0: Stmt_Expression(
-        expr: Expr_Variable(
-            name: a
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_Variable(
-            name: Scalar_String(
-                value: a
-            )
-        )
-    )
-    2: Stmt_Expression(
-        expr: Expr_Variable(
-            name: Expr_FuncCall(
-                name: Name(
-                    parts: array(
-                        0: foo
-                    )
-                )
-                args: array(
-                )
-            )
-        )
-    )
-    3: Stmt_Expression(
-        expr: Expr_Variable(
-            name: Expr_Variable(
-                name: a
-            )
-        )
-    )
-    4: Stmt_Expression(
-        expr: Expr_Variable(
-            name: Expr_Variable(
-                name: Expr_Variable(
-                    name: a
-                )
-            )
-        )
-    )
-    5: Stmt_Expression(
-        expr: Expr_Variable(
-            name: Expr_ArrayDimFetch(
-                var: Expr_Variable(
-                    name: a
-                )
-                dim: Scalar_String(
-                    value: b
-                )
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/nopPositions.test b/vendor/nikic/php-parser/test/code/parser/nopPositions.test
deleted file mode 100644
index a981329be3757c1f72ca4f90baaa586f40909565..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/nopPositions.test
+++ /dev/null
@@ -1,13 +0,0 @@
-Positions for leading nop statement
------
-<?php
-/* Comment */
------
-!!positions
-array(
-    0: Stmt_Nop[2:14 - 2:13](
-        comments: array(
-            0: /* Comment */
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/scalar/constantString.test b/vendor/nikic/php-parser/test/code/parser/scalar/constantString.test
deleted file mode 100644
index 4084bdd03c088f24d5aa828e58660725323b55ae..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/scalar/constantString.test
+++ /dev/null
@@ -1,86 +0,0 @@
-Constant string syntaxes
------
-<?php
-
-'';
-"";
-b'';
-b"";
-'Hi';
-b'Hi';
-B'Hi';
-"Hi";
-b"Hi";
-B"Hi";
-'!\'!\\!\a!';
-"!\"!\\!\$!\n!\r!\t!\f!\v!\e!\a";
-"!\xFF!\377!\400!\0!";
------
-array(
-    0: Stmt_Expression(
-        expr: Scalar_String(
-            value:
-        )
-    )
-    1: Stmt_Expression(
-        expr: Scalar_String(
-            value:
-        )
-    )
-    2: Stmt_Expression(
-        expr: Scalar_String(
-            value:
-        )
-    )
-    3: Stmt_Expression(
-        expr: Scalar_String(
-            value:
-        )
-    )
-    4: Stmt_Expression(
-        expr: Scalar_String(
-            value: Hi
-        )
-    )
-    5: Stmt_Expression(
-        expr: Scalar_String(
-            value: Hi
-        )
-    )
-    6: Stmt_Expression(
-        expr: Scalar_String(
-            value: Hi
-        )
-    )
-    7: Stmt_Expression(
-        expr: Scalar_String(
-            value: Hi
-        )
-    )
-    8: Stmt_Expression(
-        expr: Scalar_String(
-            value: Hi
-        )
-    )
-    9: Stmt_Expression(
-        expr: Scalar_String(
-            value: Hi
-        )
-    )
-    10: Stmt_Expression(
-        expr: Scalar_String(
-            value: !'!\!\a!
-        )
-    )
-    11: Stmt_Expression(
-        expr: Scalar_String(
-            value: !"!\!$!
-        !@@{ "\r" }@@!@@{ "\t" }@@!@@{ "\f" }@@!@@{ "\v" }@@!@@{ chr(27) /* "\e" */ }@@!\a
-        )
-    )
-    12: Stmt_Expression(
-        expr: Scalar_String(
-            value: !@@{ chr(255) }@@!@@{ chr(255) }@@!@@{ chr(0) }@@!@@{ chr(0) }@@!
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/scalar/docString.test b/vendor/nikic/php-parser/test/code/parser/scalar/docString.test
deleted file mode 100644
index 2775be75fd0ab41ec0b0f562d2e545dece592c9a..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/scalar/docString.test
+++ /dev/null
@@ -1,115 +0,0 @@
-Nowdoc and heredoc strings
------
-<?php
-
-// empty strings
-<<<'EOS'
-EOS;
-<<<EOS
-EOS;
-
-// constant encapsed strings
-<<<'EOS'
-Test '" $a \n
-EOS;
-<<<EOS
-Test '" \$a \n
-EOS;
-
-// encapsed strings
-<<<EOS
-Test $a
-EOS;
-<<<EOS
-Test $a and $b->c test
-EOS;
-
-b<<<EOS
-Binary
-EOS;
-
------
-array(
-    0: Stmt_Expression(
-        expr: Scalar_String(
-            value:
-            comments: array(
-                0: // empty strings
-            )
-        )
-        comments: array(
-            0: // empty strings
-        )
-    )
-    1: Stmt_Expression(
-        expr: Scalar_String(
-            value:
-        )
-    )
-    2: Stmt_Expression(
-        expr: Scalar_String(
-            value: Test '" $a \n
-            comments: array(
-                0: // constant encapsed strings
-            )
-        )
-        comments: array(
-            0: // constant encapsed strings
-        )
-    )
-    3: Stmt_Expression(
-        expr: Scalar_String(
-            value: Test '" $a
-
-        )
-    )
-    4: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Scalar_EncapsedStringPart(
-                    value: Test
-                )
-                1: Expr_Variable(
-                    name: a
-                )
-            )
-            comments: array(
-                0: // encapsed strings
-            )
-        )
-        comments: array(
-            0: // encapsed strings
-        )
-    )
-    5: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Scalar_EncapsedStringPart(
-                    value: Test
-                )
-                1: Expr_Variable(
-                    name: a
-                )
-                2: Scalar_EncapsedStringPart(
-                    value:  and
-                )
-                3: Expr_PropertyFetch(
-                    var: Expr_Variable(
-                        name: b
-                    )
-                    name: Identifier(
-                        name: c
-                    )
-                )
-                4: Scalar_EncapsedStringPart(
-                    value:  test
-                )
-            )
-        )
-    )
-    6: Stmt_Expression(
-        expr: Scalar_String(
-            value: Binary
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/scalar/docStringNewlines.test b/vendor/nikic/php-parser/test/code/parser/scalar/docStringNewlines.test
deleted file mode 100644
index 9eae2338f07952f16d0838736371fc01ce5b3514..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/scalar/docStringNewlines.test
+++ /dev/null
@@ -1,77 +0,0 @@
-Trailing newlines in doc strings
------
-<?php
-
-<<<'EOF'@@{ "\n\n" }@@EOF;
-<<<'EOF'@@{ "\n\n\n" }@@EOF;
-<<<'EOF'@@{ "\nFoo\n\n" }@@EOF;
-<<<EOF@@{ "\n\$var\n\n" }@@EOF;
-
-<<<'EOF'@@{ "\r\n\r\n" }@@EOF;
-<<<'EOF'@@{ "\r\n\r\n\r\n" }@@EOF;
-<<<'EOF'@@{ "\r\nFoo\r\n\r\n" }@@EOF;
-<<<EOF@@{ "\r\n\$var\r\n\r\n" }@@EOF;
-
------
-array(
-    0: Stmt_Expression(
-        expr: Scalar_String(
-            value:
-        )
-    )
-    1: Stmt_Expression(
-        expr: Scalar_String(
-            value:
-
-        )
-    )
-    2: Stmt_Expression(
-        expr: Scalar_String(
-            value: Foo
-
-        )
-    )
-    3: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Expr_Variable(
-                    name: var
-                )
-                1: Scalar_EncapsedStringPart(
-                    value:
-
-                )
-            )
-        )
-    )
-    4: Stmt_Expression(
-        expr: Scalar_String(
-            value:
-        )
-    )
-    5: Stmt_Expression(
-        expr: Scalar_String(
-            value:
-
-        )
-    )
-    6: Stmt_Expression(
-        expr: Scalar_String(
-            value: Foo
-
-        )
-    )
-    7: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Expr_Variable(
-                    name: var
-                )
-                1: Scalar_EncapsedStringPart(
-                    value:
-
-                )
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/scalar/encapsedNegVarOffset.test b/vendor/nikic/php-parser/test/code/parser/scalar/encapsedNegVarOffset.test
deleted file mode 100644
index 27a9056fcfb82910db3cac9ab1c971aad3397e8b..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/scalar/encapsedNegVarOffset.test
+++ /dev/null
@@ -1,82 +0,0 @@
-Encapsed string negative var offsets
------
-<?php
-"$a[-0]";
-"$a[-1]";
-"$a[-0x0]";
-"$a[-00]";
-"$a[@@{ -PHP_INT_MAX - 1 }@@]";
------
-!!php7
-array(
-    0: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Expr_ArrayDimFetch(
-                    var: Expr_Variable(
-                        name: a
-                    )
-                    dim: Scalar_String(
-                        value: -0
-                    )
-                )
-            )
-        )
-    )
-    1: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Expr_ArrayDimFetch(
-                    var: Expr_Variable(
-                        name: a
-                    )
-                    dim: Scalar_LNumber(
-                        value: -1
-                    )
-                )
-            )
-        )
-    )
-    2: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Expr_ArrayDimFetch(
-                    var: Expr_Variable(
-                        name: a
-                    )
-                    dim: Scalar_String(
-                        value: -0x0
-                    )
-                )
-            )
-        )
-    )
-    3: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Expr_ArrayDimFetch(
-                    var: Expr_Variable(
-                        name: a
-                    )
-                    dim: Scalar_String(
-                        value: -00
-                    )
-                )
-            )
-        )
-    )
-    4: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Expr_ArrayDimFetch(
-                    var: Expr_Variable(
-                        name: a
-                    )
-                    dim: Scalar_LNumber(
-                        value: @@{ -PHP_INT_MAX - 1 }@@
-                    )
-                )
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/scalar/encapsedString.test b/vendor/nikic/php-parser/test/code/parser/scalar/encapsedString.test
deleted file mode 100644
index 57be611ee0b9acd06b711da4b9a8fdbd6b08360e..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/scalar/encapsedString.test
+++ /dev/null
@@ -1,344 +0,0 @@
-Encapsed strings
------
-<?php
-
-"$A";
-"$A->B";
-"$A[B]";
-"$A[0]";
-"$A[1234]";
-"$A[9223372036854775808]";
-"$A[000]";
-"$A[0x0]";
-"$A[0b0]";
-"$A[$B]";
-"{$A}";
-"{$A['B']}";
-"${A}";
-"${A['B']}";
-"${$A}";
-"\{$A}";
-"\{ $A }";
-"\\{$A}";
-"\\{ $A }";
-"{$$A}[B]";
-"$$A[B]";
-"A $B C";
-b"$A";
-B"$A";
------
-array(
-    0: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Expr_Variable(
-                    name: A
-                )
-            )
-        )
-    )
-    1: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Expr_PropertyFetch(
-                    var: Expr_Variable(
-                        name: A
-                    )
-                    name: Identifier(
-                        name: B
-                    )
-                )
-            )
-        )
-    )
-    2: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Expr_ArrayDimFetch(
-                    var: Expr_Variable(
-                        name: A
-                    )
-                    dim: Scalar_String(
-                        value: B
-                    )
-                )
-            )
-        )
-    )
-    3: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Expr_ArrayDimFetch(
-                    var: Expr_Variable(
-                        name: A
-                    )
-                    dim: Scalar_LNumber(
-                        value: 0
-                    )
-                )
-            )
-        )
-    )
-    4: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Expr_ArrayDimFetch(
-                    var: Expr_Variable(
-                        name: A
-                    )
-                    dim: Scalar_LNumber(
-                        value: 1234
-                    )
-                )
-            )
-        )
-    )
-    5: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Expr_ArrayDimFetch(
-                    var: Expr_Variable(
-                        name: A
-                    )
-                    dim: Scalar_String(
-                        value: 9223372036854775808
-                    )
-                )
-            )
-        )
-    )
-    6: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Expr_ArrayDimFetch(
-                    var: Expr_Variable(
-                        name: A
-                    )
-                    dim: Scalar_String(
-                        value: 000
-                    )
-                )
-            )
-        )
-    )
-    7: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Expr_ArrayDimFetch(
-                    var: Expr_Variable(
-                        name: A
-                    )
-                    dim: Scalar_String(
-                        value: 0x0
-                    )
-                )
-            )
-        )
-    )
-    8: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Expr_ArrayDimFetch(
-                    var: Expr_Variable(
-                        name: A
-                    )
-                    dim: Scalar_String(
-                        value: 0b0
-                    )
-                )
-            )
-        )
-    )
-    9: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Expr_ArrayDimFetch(
-                    var: Expr_Variable(
-                        name: A
-                    )
-                    dim: Expr_Variable(
-                        name: B
-                    )
-                )
-            )
-        )
-    )
-    10: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Expr_Variable(
-                    name: A
-                )
-            )
-        )
-    )
-    11: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Expr_ArrayDimFetch(
-                    var: Expr_Variable(
-                        name: A
-                    )
-                    dim: Scalar_String(
-                        value: B
-                    )
-                )
-            )
-        )
-    )
-    12: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Expr_Variable(
-                    name: A
-                )
-            )
-        )
-    )
-    13: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Expr_ArrayDimFetch(
-                    var: Expr_Variable(
-                        name: A
-                    )
-                    dim: Scalar_String(
-                        value: B
-                    )
-                )
-            )
-        )
-    )
-    14: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Expr_Variable(
-                    name: Expr_Variable(
-                        name: A
-                    )
-                )
-            )
-        )
-    )
-    15: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Scalar_EncapsedStringPart(
-                    value: \{
-                )
-                1: Expr_Variable(
-                    name: A
-                )
-                2: Scalar_EncapsedStringPart(
-                    value: }
-                )
-            )
-        )
-    )
-    16: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Scalar_EncapsedStringPart(
-                    value: \{
-                )
-                1: Expr_Variable(
-                    name: A
-                )
-                2: Scalar_EncapsedStringPart(
-                    value:  }
-                )
-            )
-        )
-    )
-    17: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Scalar_EncapsedStringPart(
-                    value: \
-                )
-                1: Expr_Variable(
-                    name: A
-                )
-            )
-        )
-    )
-    18: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Scalar_EncapsedStringPart(
-                    value: \{
-                )
-                1: Expr_Variable(
-                    name: A
-                )
-                2: Scalar_EncapsedStringPart(
-                    value:  }
-                )
-            )
-        )
-    )
-    19: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Expr_Variable(
-                    name: Expr_Variable(
-                        name: A
-                    )
-                )
-                1: Scalar_EncapsedStringPart(
-                    value: [B]
-                )
-            )
-        )
-    )
-    20: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Scalar_EncapsedStringPart(
-                    value: $
-                )
-                1: Expr_ArrayDimFetch(
-                    var: Expr_Variable(
-                        name: A
-                    )
-                    dim: Scalar_String(
-                        value: B
-                    )
-                )
-            )
-        )
-    )
-    21: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Scalar_EncapsedStringPart(
-                    value: A
-                )
-                1: Expr_Variable(
-                    name: B
-                )
-                2: Scalar_EncapsedStringPart(
-                    value:  C
-                )
-            )
-        )
-    )
-    22: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Expr_Variable(
-                    name: A
-                )
-            )
-        )
-    )
-    23: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Expr_Variable(
-                    name: A
-                )
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/scalar/flexibleDocString.test b/vendor/nikic/php-parser/test/code/parser/scalar/flexibleDocString.test
deleted file mode 100644
index 17d728dd0e2cf2b7b00391579430ba1f616c0092..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/scalar/flexibleDocString.test
+++ /dev/null
@@ -1,361 +0,0 @@
-Flexible heredoc/nowdoc (PHP 7.3)
------
-<?php
-
-$ary = [
-    <<<FOO
-Test
-FOO,
-    <<<'BAR'
-    Test
-    BAR,
-];
-
-<<<'END'
- END;
-
-<<<END
-
-  END;
-
-<<<END
-@@{ " " }@@
-  END;
-
-<<<'END'
-     a
-    b
-
-   c
-
-  d
- e
- END;
-
-<<<END
-	    a
-	   b
-	  $test
-	 d
-	e
-	END;
-
-<<<'END'
-
-    a
-
-   b
-
-  c
-
- d
-
-e
-
-END;
-
-<<<END
-	a\r\n
-\ta\n
-   b\r\n
-  $test\n
- d\r\n
-e\n
-END;
-
-<<<BAR
- $one-
- BAR;
-
-<<<BAR
- $two -
- BAR;
-
-<<<BAR
- $three	-
- BAR;
-
-<<<BAR
- $four-$four
- BAR;
-
-<<<BAR
- $five-$five-
- BAR;
-
-<<<BAR
- $six-$six-$six
- BAR;
-
-<<<BAR
- $seven
- -
- BAR;
-
-<<<BAR
- $eight
-  -
- BAR;
-
-<<<BAR
-$nine
-BAR;
-
-<<<BAR
- -
- BAR;
-
-<<<BAR
-  -
- BAR;
------
-array(
-    0: Stmt_Expression(
-        expr: Expr_Assign(
-            var: Expr_Variable(
-                name: ary
-            )
-            expr: Expr_Array(
-                items: array(
-                    0: Expr_ArrayItem(
-                        key: null
-                        value: Scalar_String(
-                            value: Test
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                    1: Expr_ArrayItem(
-                        key: null
-                        value: Scalar_String(
-                            value: Test
-                        )
-                        byRef: false
-                        unpack: false
-                    )
-                )
-            )
-        )
-    )
-    1: Stmt_Expression(
-        expr: Scalar_String(
-            value:
-        )
-    )
-    2: Stmt_Expression(
-        expr: Scalar_String(
-            value:
-        )
-    )
-    3: Stmt_Expression(
-        expr: Scalar_String(
-            value:
-        )
-    )
-    4: Stmt_Expression(
-        expr: Scalar_String(
-            value:     a
-           b
-
-          c
-
-         d
-        e
-        )
-    )
-    5: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Scalar_EncapsedStringPart(
-                    value:     a
-                   b
-
-                )
-                1: Expr_Variable(
-                    name: test
-                )
-                2: Scalar_EncapsedStringPart(
-                    value:
-                 d
-                e
-                )
-            )
-        )
-    )
-    6: Stmt_Expression(
-        expr: Scalar_String(
-            value:
-            a
-
-           b
-
-          c
-
-         d
-
-        e
-
-        )
-    )
-    7: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Scalar_EncapsedStringPart(
-                    value: 	a
-
-                @@{ "\t" }@@a
-
-                   b
-
-
-                )
-                1: Expr_Variable(
-                    name: test
-                )
-                2: Scalar_EncapsedStringPart(
-                    value:
-
-                 d
-
-                e
-
-                )
-            )
-        )
-    )
-    8: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Expr_Variable(
-                    name: one
-                )
-                1: Scalar_EncapsedStringPart(
-                    value: -
-                )
-            )
-        )
-    )
-    9: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Expr_Variable(
-                    name: two
-                )
-                1: Scalar_EncapsedStringPart(
-                    value:  -
-                )
-            )
-        )
-    )
-    10: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Expr_Variable(
-                    name: three
-                )
-                1: Scalar_EncapsedStringPart(
-                    value: 	-
-                )
-            )
-        )
-    )
-    11: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Expr_Variable(
-                    name: four
-                )
-                1: Scalar_EncapsedStringPart(
-                    value: -
-                )
-                2: Expr_Variable(
-                    name: four
-                )
-            )
-        )
-    )
-    12: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Expr_Variable(
-                    name: five
-                )
-                1: Scalar_EncapsedStringPart(
-                    value: -
-                )
-                2: Expr_Variable(
-                    name: five
-                )
-                3: Scalar_EncapsedStringPart(
-                    value: -
-                )
-            )
-        )
-    )
-    13: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Expr_Variable(
-                    name: six
-                )
-                1: Scalar_EncapsedStringPart(
-                    value: -
-                )
-                2: Expr_Variable(
-                    name: six
-                )
-                3: Scalar_EncapsedStringPart(
-                    value: -
-                )
-                4: Expr_Variable(
-                    name: six
-                )
-            )
-        )
-    )
-    14: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Expr_Variable(
-                    name: seven
-                )
-                1: Scalar_EncapsedStringPart(
-                    value:
-                -
-                )
-            )
-        )
-    )
-    15: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Expr_Variable(
-                    name: eight
-                )
-                1: Scalar_EncapsedStringPart(
-                    value:
-                 -
-                )
-            )
-        )
-    )
-    16: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Expr_Variable(
-                    name: nine
-                )
-            )
-        )
-    )
-    17: Stmt_Expression(
-        expr: Scalar_String(
-            value: -
-        )
-    )
-    18: Stmt_Expression(
-        expr: Scalar_String(
-            value:  -
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/scalar/flexibleDocStringErrors.test b/vendor/nikic/php-parser/test/code/parser/scalar/flexibleDocStringErrors.test
deleted file mode 100644
index 25b7484b240f335c42e627d17b45d5bbacc2f37d..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/scalar/flexibleDocStringErrors.test
+++ /dev/null
@@ -1,117 +0,0 @@
-Error conditions for flexible doc strings
------
-<?php
-
-<<<A
- @@{ "\t" }@@A;
-
-<<<A
-    FooBar
- @@{ "\t" }@@A;
-
-echo <<<END
-@@{ "\t" }@@   X
-@@{ "\t\t" }@@END;
-
-echo <<<END
-      a
-     b
-    c
-     END;
-
-<<<END
-\ta
-@@{ "\t" }@@END;
-
-<<<TEST
-  Foo
-$var
-  TEST;
-
-<<<TEST
-$var
- TEST;
-
-echo <<<END
- a
-$a
- END;
------
-Invalid indentation - tabs and spaces cannot be mixed from 4:1 to 4:3
-Invalid indentation - tabs and spaces cannot be mixed from 8:1 to 8:3
-Invalid indentation - tabs and spaces cannot be mixed from 10:6 to 12:5
-Invalid body indentation level (expecting an indentation level of at least 5) from 14:6 to 18:8
-Invalid body indentation level (expecting an indentation level of at least 1) from 20:1 to 22:4
-Invalid body indentation level (expecting an indentation level of at least 2) from 25:1 to 26:0
-Invalid body indentation level (expecting an indentation level of at least 1) from 30:1 to 30:4
-Invalid body indentation level (expecting an indentation level of at least 1) from 34:1 to 35:0
-array(
-    0: Stmt_Expression(
-        expr: Scalar_String(
-            value:
-        )
-    )
-    1: Stmt_Expression(
-        expr: Scalar_String(
-            value:     FooBar
-        )
-    )
-    2: Stmt_Echo(
-        exprs: array(
-            0: Scalar_String(
-                value:   X
-            )
-        )
-    )
-    3: Stmt_Echo(
-        exprs: array(
-            0: Scalar_String(
-                value:  a
-            b
-            c
-            )
-        )
-    )
-    4: Stmt_Expression(
-        expr: Scalar_String(
-            value: 	a
-        )
-    )
-    5: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Scalar_EncapsedStringPart(
-                    value: Foo
-
-                )
-                1: Expr_Variable(
-                    name: var
-                )
-            )
-        )
-    )
-    6: Stmt_Expression(
-        expr: Scalar_Encapsed(
-            parts: array(
-                0: Expr_Variable(
-                    name: var
-                )
-            )
-        )
-    )
-    7: Stmt_Echo(
-        exprs: array(
-            0: Scalar_Encapsed(
-                parts: array(
-                    0: Scalar_EncapsedStringPart(
-                        value: a
-
-                    )
-                    1: Expr_Variable(
-                        name: a
-                    )
-                )
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/scalar/float.test b/vendor/nikic/php-parser/test/code/parser/scalar/float.test
deleted file mode 100644
index eb9f5b7262ae98464cd23ce7783a8320ad8b0ad5..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/scalar/float.test
+++ /dev/null
@@ -1,108 +0,0 @@
-Different float syntaxes
------
-<?php
-
-0.0;
-0.;
-.0;
-0e0;
-0E0;
-0e+0;
-0e-0;
-30.20e10;
-300.200e100;
-1e10000;
-
-// various integer -> float overflows
-// (all are actually the same number, just in different representations)
-18446744073709551615;
-0xFFFFFFFFFFFFFFFF;
-01777777777777777777777;
-0177777777777777777777787;
-0b1111111111111111111111111111111111111111111111111111111111111111;
------
-array(
-    0: Stmt_Expression(
-        expr: Scalar_DNumber(
-            value: 0
-        )
-    )
-    1: Stmt_Expression(
-        expr: Scalar_DNumber(
-            value: 0
-        )
-    )
-    2: Stmt_Expression(
-        expr: Scalar_DNumber(
-            value: 0
-        )
-    )
-    3: Stmt_Expression(
-        expr: Scalar_DNumber(
-            value: 0
-        )
-    )
-    4: Stmt_Expression(
-        expr: Scalar_DNumber(
-            value: 0
-        )
-    )
-    5: Stmt_Expression(
-        expr: Scalar_DNumber(
-            value: 0
-        )
-    )
-    6: Stmt_Expression(
-        expr: Scalar_DNumber(
-            value: 0
-        )
-    )
-    7: Stmt_Expression(
-        expr: Scalar_DNumber(
-            value: 302000000000
-        )
-    )
-    8: Stmt_Expression(
-        expr: Scalar_DNumber(
-            value: 3.002E+102
-        )
-    )
-    9: Stmt_Expression(
-        expr: Scalar_DNumber(
-            value: INF
-        )
-    )
-    10: Stmt_Expression(
-        expr: Scalar_DNumber(
-            value: 1.844674407371E+19
-            comments: array(
-                0: // various integer -> float overflows
-                1: // (all are actually the same number, just in different representations)
-            )
-        )
-        comments: array(
-            0: // various integer -> float overflows
-            1: // (all are actually the same number, just in different representations)
-        )
-    )
-    11: Stmt_Expression(
-        expr: Scalar_DNumber(
-            value: 1.844674407371E+19
-        )
-    )
-    12: Stmt_Expression(
-        expr: Scalar_DNumber(
-            value: 1.844674407371E+19
-        )
-    )
-    13: Stmt_Expression(
-        expr: Scalar_DNumber(
-            value: 1.844674407371E+19
-        )
-    )
-    14: Stmt_Expression(
-        expr: Scalar_DNumber(
-            value: 1.844674407371E+19
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/scalar/int.test b/vendor/nikic/php-parser/test/code/parser/scalar/int.test
deleted file mode 100644
index b65858dbbc6622f125a01bfe402e03488c95f6e1..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/scalar/int.test
+++ /dev/null
@@ -1,61 +0,0 @@
-Different integer syntaxes
------
-<?php
-
-0;
-1;
-@@{ PHP_INT_MAX     }@@;
-@@{ PHP_INT_MAX + 1 }@@;
-0xFFF;
-0xfff;
-0XfFf;
-0777;
-0b111000111000;
------
-array(
-    0: Stmt_Expression(
-        expr: Scalar_LNumber(
-            value: 0
-        )
-    )
-    1: Stmt_Expression(
-        expr: Scalar_LNumber(
-            value: 1
-        )
-    )
-    2: Stmt_Expression(
-        expr: Scalar_LNumber(
-            value: @@{ PHP_INT_MAX }@@
-        )
-    )
-    3: Stmt_Expression(
-        expr: Scalar_DNumber(
-            value: @@{ PHP_INT_MAX + 1 }@@
-        )
-    )
-    4: Stmt_Expression(
-        expr: Scalar_LNumber(
-            value: 4095
-        )
-    )
-    5: Stmt_Expression(
-        expr: Scalar_LNumber(
-            value: 4095
-        )
-    )
-    6: Stmt_Expression(
-        expr: Scalar_LNumber(
-            value: 4095
-        )
-    )
-    7: Stmt_Expression(
-        expr: Scalar_LNumber(
-            value: 511
-        )
-    )
-    8: Stmt_Expression(
-        expr: Scalar_LNumber(
-            value: 3640
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/scalar/invalidOctal.test b/vendor/nikic/php-parser/test/code/parser/scalar/invalidOctal.test
deleted file mode 100644
index cd0cbfba0f37e9f19108bc3cbc78b1990eda25ba..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/scalar/invalidOctal.test
+++ /dev/null
@@ -1,26 +0,0 @@
-Invalid octal literals
------
-<?php
-0787;
------
-!!php7
-Invalid numeric literal from 2:1 to 2:4
-array(
-    0: Stmt_Expression(
-        expr: Scalar_LNumber(
-            value: 0
-        )
-    )
-)
------
-<?php
-0787;
------
-!!php5
-array(
-    0: Stmt_Expression(
-        expr: Scalar_LNumber(
-            value: 7
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/scalar/magicConst.test b/vendor/nikic/php-parser/test/code/parser/scalar/magicConst.test
deleted file mode 100644
index 520ea1776c1dd592bc260ee9fcb9f091b1c607c3..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/scalar/magicConst.test
+++ /dev/null
@@ -1,47 +0,0 @@
-Magic constants
------
-<?php
-
-__CLASS__;
-__DIR__;
-__FILE__;
-__FUNCTION__;
-__LINE__;
-__METHOD__;
-__NAMESPACE__;
-__TRAIT__;
------
-array(
-    0: Stmt_Expression(
-        expr: Scalar_MagicConst_Class(
-        )
-    )
-    1: Stmt_Expression(
-        expr: Scalar_MagicConst_Dir(
-        )
-    )
-    2: Stmt_Expression(
-        expr: Scalar_MagicConst_File(
-        )
-    )
-    3: Stmt_Expression(
-        expr: Scalar_MagicConst_Function(
-        )
-    )
-    4: Stmt_Expression(
-        expr: Scalar_MagicConst_Line(
-        )
-    )
-    5: Stmt_Expression(
-        expr: Scalar_MagicConst_Method(
-        )
-    )
-    6: Stmt_Expression(
-        expr: Scalar_MagicConst_Namespace(
-        )
-    )
-    7: Stmt_Expression(
-        expr: Scalar_MagicConst_Trait(
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/scalar/unicodeEscape.test b/vendor/nikic/php-parser/test/code/parser/scalar/unicodeEscape.test
deleted file mode 100644
index 95d982955c641f77c541b79454b2ee4ee5c09d86..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/scalar/unicodeEscape.test
+++ /dev/null
@@ -1,26 +0,0 @@
-Unicode escape sequence
------
-<?php
-
-"\u{0}";
-"\u{114}";
-"\u{1F602}";
------
-!!php7
-array(
-    0: Stmt_Expression(
-        expr: Scalar_String(
-            value: @@{"\0"}@@
-        )
-    )
-    1: Stmt_Expression(
-        expr: Scalar_String(
-            value: Ĕ
-        )
-    )
-    2: Stmt_Expression(
-        expr: Scalar_String(
-            value: @@{"\xF0\x9F\x98\x82"}@@
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/semiReserved.test b/vendor/nikic/php-parser/test/code/parser/semiReserved.test
deleted file mode 100644
index 70cf063dfcf87efcfdcf9a63bc2a67a65c22c9c1..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/semiReserved.test
+++ /dev/null
@@ -1,490 +0,0 @@
-Valid usages of reserved keywords as identifiers
------
-<?php
-
-class Test {
-    function array() {}
-    function public() {}
-
-    static function list() {}
-    static function protected() {}
-
-    public $class;
-    public $private;
-
-    const TRAIT = 3, FINAL = 4;
-
-    const __CLASS__ = 1, __TRAIT__ = 2, __FUNCTION__ = 3, __METHOD__ = 4, __LINE__ = 5,
-          __FILE__ = 6, __DIR__ = 7, __NAMESPACE__ = 8;
-    // __halt_compiler does not work
-}
-
-$t = new Test;
-$t->array();
-$t->public();
-
-Test::list();
-Test::protected();
-
-$t->class;
-$t->private;
-
-Test::TRAIT;
-Test::FINAL;
-
-class Foo {
-    use TraitA, TraitB {
-        TraitA::catch insteadof namespace\TraitB;
-        TraitA::list as foreach;
-        TraitB::throw as protected public;
-        TraitB::self as protected;
-        exit as die;
-        \TraitC::exit as bye;
-        namespace\TraitC::exit as byebye;
-        TraitA::
-            //
-            /** doc comment */
-            #
-        catch /* comment */
-            // comment
-            # comment
-        insteadof TraitB;
-    }
-}
------
-array(
-    0: Stmt_Class(
-        flags: 0
-        name: Identifier(
-            name: Test
-        )
-        extends: null
-        implements: array(
-        )
-        stmts: array(
-            0: Stmt_ClassMethod(
-                flags: 0
-                byRef: false
-                name: Identifier(
-                    name: array
-                )
-                params: array(
-                )
-                returnType: null
-                stmts: array(
-                )
-            )
-            1: Stmt_ClassMethod(
-                flags: 0
-                byRef: false
-                name: Identifier(
-                    name: public
-                )
-                params: array(
-                )
-                returnType: null
-                stmts: array(
-                )
-            )
-            2: Stmt_ClassMethod(
-                flags: MODIFIER_STATIC (8)
-                byRef: false
-                name: Identifier(
-                    name: list
-                )
-                params: array(
-                )
-                returnType: null
-                stmts: array(
-                )
-            )
-            3: Stmt_ClassMethod(
-                flags: MODIFIER_STATIC (8)
-                byRef: false
-                name: Identifier(
-                    name: protected
-                )
-                params: array(
-                )
-                returnType: null
-                stmts: array(
-                )
-            )
-            4: Stmt_Property(
-                flags: MODIFIER_PUBLIC (1)
-                type: null
-                props: array(
-                    0: Stmt_PropertyProperty(
-                        name: VarLikeIdentifier(
-                            name: class
-                        )
-                        default: null
-                    )
-                )
-            )
-            5: Stmt_Property(
-                flags: MODIFIER_PUBLIC (1)
-                type: null
-                props: array(
-                    0: Stmt_PropertyProperty(
-                        name: VarLikeIdentifier(
-                            name: private
-                        )
-                        default: null
-                    )
-                )
-            )
-            6: Stmt_ClassConst(
-                flags: 0
-                consts: array(
-                    0: Const(
-                        name: Identifier(
-                            name: TRAIT
-                        )
-                        value: Scalar_LNumber(
-                            value: 3
-                        )
-                    )
-                    1: Const(
-                        name: Identifier(
-                            name: FINAL
-                        )
-                        value: Scalar_LNumber(
-                            value: 4
-                        )
-                    )
-                )
-            )
-            7: Stmt_ClassConst(
-                flags: 0
-                consts: array(
-                    0: Const(
-                        name: Identifier(
-                            name: __CLASS__
-                        )
-                        value: Scalar_LNumber(
-                            value: 1
-                        )
-                    )
-                    1: Const(
-                        name: Identifier(
-                            name: __TRAIT__
-                        )
-                        value: Scalar_LNumber(
-                            value: 2
-                        )
-                    )
-                    2: Const(
-                        name: Identifier(
-                            name: __FUNCTION__
-                        )
-                        value: Scalar_LNumber(
-                            value: 3
-                        )
-                    )
-                    3: Const(
-                        name: Identifier(
-                            name: __METHOD__
-                        )
-                        value: Scalar_LNumber(
-                            value: 4
-                        )
-                    )
-                    4: Const(
-                        name: Identifier(
-                            name: __LINE__
-                        )
-                        value: Scalar_LNumber(
-                            value: 5
-                        )
-                    )
-                    5: Const(
-                        name: Identifier(
-                            name: __FILE__
-                        )
-                        value: Scalar_LNumber(
-                            value: 6
-                        )
-                    )
-                    6: Const(
-                        name: Identifier(
-                            name: __DIR__
-                        )
-                        value: Scalar_LNumber(
-                            value: 7
-                        )
-                    )
-                    7: Const(
-                        name: Identifier(
-                            name: __NAMESPACE__
-                        )
-                        value: Scalar_LNumber(
-                            value: 8
-                        )
-                    )
-                )
-            )
-            8: Stmt_Nop(
-                comments: array(
-                    0: // __halt_compiler does not work
-                )
-            )
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_Assign(
-            var: Expr_Variable(
-                name: t
-            )
-            expr: Expr_New(
-                class: Name(
-                    parts: array(
-                        0: Test
-                    )
-                )
-                args: array(
-                )
-            )
-        )
-    )
-    2: Stmt_Expression(
-        expr: Expr_MethodCall(
-            var: Expr_Variable(
-                name: t
-            )
-            name: Identifier(
-                name: array
-            )
-            args: array(
-            )
-        )
-    )
-    3: Stmt_Expression(
-        expr: Expr_MethodCall(
-            var: Expr_Variable(
-                name: t
-            )
-            name: Identifier(
-                name: public
-            )
-            args: array(
-            )
-        )
-    )
-    4: Stmt_Expression(
-        expr: Expr_StaticCall(
-            class: Name(
-                parts: array(
-                    0: Test
-                )
-            )
-            name: Identifier(
-                name: list
-            )
-            args: array(
-            )
-        )
-    )
-    5: Stmt_Expression(
-        expr: Expr_StaticCall(
-            class: Name(
-                parts: array(
-                    0: Test
-                )
-            )
-            name: Identifier(
-                name: protected
-            )
-            args: array(
-            )
-        )
-    )
-    6: Stmt_Expression(
-        expr: Expr_PropertyFetch(
-            var: Expr_Variable(
-                name: t
-            )
-            name: Identifier(
-                name: class
-            )
-        )
-    )
-    7: Stmt_Expression(
-        expr: Expr_PropertyFetch(
-            var: Expr_Variable(
-                name: t
-            )
-            name: Identifier(
-                name: private
-            )
-        )
-    )
-    8: Stmt_Expression(
-        expr: Expr_ClassConstFetch(
-            class: Name(
-                parts: array(
-                    0: Test
-                )
-            )
-            name: Identifier(
-                name: TRAIT
-            )
-        )
-    )
-    9: Stmt_Expression(
-        expr: Expr_ClassConstFetch(
-            class: Name(
-                parts: array(
-                    0: Test
-                )
-            )
-            name: Identifier(
-                name: FINAL
-            )
-        )
-    )
-    10: Stmt_Class(
-        flags: 0
-        name: Identifier(
-            name: Foo
-        )
-        extends: null
-        implements: array(
-        )
-        stmts: array(
-            0: Stmt_TraitUse(
-                traits: array(
-                    0: Name(
-                        parts: array(
-                            0: TraitA
-                        )
-                    )
-                    1: Name(
-                        parts: array(
-                            0: TraitB
-                        )
-                    )
-                )
-                adaptations: array(
-                    0: Stmt_TraitUseAdaptation_Precedence(
-                        trait: Name(
-                            parts: array(
-                                0: TraitA
-                            )
-                        )
-                        method: Identifier(
-                            name: catch
-                        )
-                        insteadof: array(
-                            0: Name_Relative(
-                                parts: array(
-                                    0: TraitB
-                                )
-                            )
-                        )
-                    )
-                    1: Stmt_TraitUseAdaptation_Alias(
-                        trait: Name(
-                            parts: array(
-                                0: TraitA
-                            )
-                        )
-                        method: Identifier(
-                            name: list
-                        )
-                        newModifier: null
-                        newName: Identifier(
-                            name: foreach
-                        )
-                    )
-                    2: Stmt_TraitUseAdaptation_Alias(
-                        trait: Name(
-                            parts: array(
-                                0: TraitB
-                            )
-                        )
-                        method: Identifier(
-                            name: throw
-                        )
-                        newModifier: MODIFIER_PROTECTED (2)
-                        newName: Identifier(
-                            name: public
-                        )
-                    )
-                    3: Stmt_TraitUseAdaptation_Alias(
-                        trait: Name(
-                            parts: array(
-                                0: TraitB
-                            )
-                        )
-                        method: Identifier(
-                            name: self
-                        )
-                        newModifier: MODIFIER_PROTECTED (2)
-                        newName: null
-                    )
-                    4: Stmt_TraitUseAdaptation_Alias(
-                        trait: null
-                        method: Identifier(
-                            name: exit
-                        )
-                        newModifier: null
-                        newName: Identifier(
-                            name: die
-                        )
-                    )
-                    5: Stmt_TraitUseAdaptation_Alias(
-                        trait: Name_FullyQualified(
-                            parts: array(
-                                0: TraitC
-                            )
-                        )
-                        method: Identifier(
-                            name: exit
-                        )
-                        newModifier: null
-                        newName: Identifier(
-                            name: bye
-                        )
-                    )
-                    6: Stmt_TraitUseAdaptation_Alias(
-                        trait: Name_Relative(
-                            parts: array(
-                                0: TraitC
-                            )
-                        )
-                        method: Identifier(
-                            name: exit
-                        )
-                        newModifier: null
-                        newName: Identifier(
-                            name: byebye
-                        )
-                    )
-                    7: Stmt_TraitUseAdaptation_Precedence(
-                        trait: Name(
-                            parts: array(
-                                0: TraitA
-                            )
-                        )
-                        method: Identifier(
-                            name: catch
-                            comments: array(
-                                0: //
-                                1: /** doc comment */
-                                2: #
-                            )
-                        )
-                        insteadof: array(
-                            0: Name(
-                                parts: array(
-                                    0: TraitB
-                                )
-                            )
-                        )
-                    )
-                )
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/blocklessStatement.test b/vendor/nikic/php-parser/test/code/parser/stmt/blocklessStatement.test
deleted file mode 100644
index abf586465bd8bd349f4fafde567d52c1c612e98b..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/blocklessStatement.test
+++ /dev/null
@@ -1,130 +0,0 @@
-Blockless statements for if/for/etc
------
-<?php
-
-if ($a) $A;
-elseif ($b) $B;
-else $C;
-
-for (;;) $foo;
-
-foreach ($a as $b) $AB;
-
-while ($a) $A;
-
-do $A; while ($a);
-
-declare (a='b') $C;
------
-array(
-    0: Stmt_If(
-        cond: Expr_Variable(
-            name: a
-        )
-        stmts: array(
-            0: Stmt_Expression(
-                expr: Expr_Variable(
-                    name: A
-                )
-            )
-        )
-        elseifs: array(
-            0: Stmt_ElseIf(
-                cond: Expr_Variable(
-                    name: b
-                )
-                stmts: array(
-                    0: Stmt_Expression(
-                        expr: Expr_Variable(
-                            name: B
-                        )
-                    )
-                )
-            )
-        )
-        else: Stmt_Else(
-            stmts: array(
-                0: Stmt_Expression(
-                    expr: Expr_Variable(
-                        name: C
-                    )
-                )
-            )
-        )
-    )
-    1: Stmt_For(
-        init: array(
-        )
-        cond: array(
-        )
-        loop: array(
-        )
-        stmts: array(
-            0: Stmt_Expression(
-                expr: Expr_Variable(
-                    name: foo
-                )
-            )
-        )
-    )
-    2: Stmt_Foreach(
-        expr: Expr_Variable(
-            name: a
-        )
-        keyVar: null
-        byRef: false
-        valueVar: Expr_Variable(
-            name: b
-        )
-        stmts: array(
-            0: Stmt_Expression(
-                expr: Expr_Variable(
-                    name: AB
-                )
-            )
-        )
-    )
-    3: Stmt_While(
-        cond: Expr_Variable(
-            name: a
-        )
-        stmts: array(
-            0: Stmt_Expression(
-                expr: Expr_Variable(
-                    name: A
-                )
-            )
-        )
-    )
-    4: Stmt_Do(
-        stmts: array(
-            0: Stmt_Expression(
-                expr: Expr_Variable(
-                    name: A
-                )
-            )
-        )
-        cond: Expr_Variable(
-            name: a
-        )
-    )
-    5: Stmt_Declare(
-        declares: array(
-            0: Stmt_DeclareDeclare(
-                key: Identifier(
-                    name: a
-                )
-                value: Scalar_String(
-                    value: b
-                )
-            )
-        )
-        stmts: array(
-            0: Stmt_Expression(
-                expr: Expr_Variable(
-                    name: C
-                )
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/class/abstract.test b/vendor/nikic/php-parser/test/code/parser/stmt/class/abstract.test
deleted file mode 100644
index 01a82e5194f3207f57afdf1f0ee38ecf75a0ce71..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/class/abstract.test
+++ /dev/null
@@ -1,45 +0,0 @@
-Abstract class
------
-<?php
-
-abstract class A {
-    public function a() {}
-    abstract public function b();
-}
------
-array(
-    0: Stmt_Class(
-        flags: MODIFIER_ABSTRACT (16)
-        name: Identifier(
-            name: A
-        )
-        extends: null
-        implements: array(
-        )
-        stmts: array(
-            0: Stmt_ClassMethod(
-                flags: MODIFIER_PUBLIC (1)
-                byRef: false
-                name: Identifier(
-                    name: a
-                )
-                params: array(
-                )
-                returnType: null
-                stmts: array(
-                )
-            )
-            1: Stmt_ClassMethod(
-                flags: MODIFIER_PUBLIC | MODIFIER_ABSTRACT (17)
-                byRef: false
-                name: Identifier(
-                    name: b
-                )
-                params: array(
-                )
-                returnType: null
-                stmts: null
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/class/anonymous.test b/vendor/nikic/php-parser/test/code/parser/stmt/class/anonymous.test
deleted file mode 100644
index 9aaaff9382943b55ef47b376ebc55a557ce8a125..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/class/anonymous.test
+++ /dev/null
@@ -1,214 +0,0 @@
-Anonymous classes
------
-<?php
-
-new class {
-    public function test() {}
-};
-new class extends A implements B, C {};
-new class() {
-    public $foo;
-};
-new class($a, $b) extends A {
-    use T;
-};
-
-class A {
-    public function test() {
-        return new class($this) extends A {
-            const A = 'B';
-        };
-    }
-}
------
-array(
-    0: Stmt_Expression(
-        expr: Expr_New(
-            class: Stmt_Class(
-                flags: 0
-                name: null
-                extends: null
-                implements: array(
-                )
-                stmts: array(
-                    0: Stmt_ClassMethod(
-                        flags: MODIFIER_PUBLIC (1)
-                        byRef: false
-                        name: Identifier(
-                            name: test
-                        )
-                        params: array(
-                        )
-                        returnType: null
-                        stmts: array(
-                        )
-                    )
-                )
-            )
-            args: array(
-            )
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_New(
-            class: Stmt_Class(
-                flags: 0
-                name: null
-                extends: Name(
-                    parts: array(
-                        0: A
-                    )
-                )
-                implements: array(
-                    0: Name(
-                        parts: array(
-                            0: B
-                        )
-                    )
-                    1: Name(
-                        parts: array(
-                            0: C
-                        )
-                    )
-                )
-                stmts: array(
-                )
-            )
-            args: array(
-            )
-        )
-    )
-    2: Stmt_Expression(
-        expr: Expr_New(
-            class: Stmt_Class(
-                flags: 0
-                name: null
-                extends: null
-                implements: array(
-                )
-                stmts: array(
-                    0: Stmt_Property(
-                        flags: MODIFIER_PUBLIC (1)
-                        type: null
-                        props: array(
-                            0: Stmt_PropertyProperty(
-                                name: VarLikeIdentifier(
-                                    name: foo
-                                )
-                                default: null
-                            )
-                        )
-                    )
-                )
-            )
-            args: array(
-            )
-        )
-    )
-    3: Stmt_Expression(
-        expr: Expr_New(
-            class: Stmt_Class(
-                flags: 0
-                name: null
-                extends: Name(
-                    parts: array(
-                        0: A
-                    )
-                )
-                implements: array(
-                )
-                stmts: array(
-                    0: Stmt_TraitUse(
-                        traits: array(
-                            0: Name(
-                                parts: array(
-                                    0: T
-                                )
-                            )
-                        )
-                        adaptations: array(
-                        )
-                    )
-                )
-            )
-            args: array(
-                0: Arg(
-                    value: Expr_Variable(
-                        name: a
-                    )
-                    byRef: false
-                    unpack: false
-                )
-                1: Arg(
-                    value: Expr_Variable(
-                        name: b
-                    )
-                    byRef: false
-                    unpack: false
-                )
-            )
-        )
-    )
-    4: Stmt_Class(
-        flags: 0
-        name: Identifier(
-            name: A
-        )
-        extends: null
-        implements: array(
-        )
-        stmts: array(
-            0: Stmt_ClassMethod(
-                flags: MODIFIER_PUBLIC (1)
-                byRef: false
-                name: Identifier(
-                    name: test
-                )
-                params: array(
-                )
-                returnType: null
-                stmts: array(
-                    0: Stmt_Return(
-                        expr: Expr_New(
-                            class: Stmt_Class(
-                                flags: 0
-                                name: null
-                                extends: Name(
-                                    parts: array(
-                                        0: A
-                                    )
-                                )
-                                implements: array(
-                                )
-                                stmts: array(
-                                    0: Stmt_ClassConst(
-                                        flags: 0
-                                        consts: array(
-                                            0: Const(
-                                                name: Identifier(
-                                                    name: A
-                                                )
-                                                value: Scalar_String(
-                                                    value: B
-                                                )
-                                            )
-                                        )
-                                    )
-                                )
-                            )
-                            args: array(
-                                0: Arg(
-                                    value: Expr_Variable(
-                                        name: this
-                                    )
-                                    byRef: false
-                                    unpack: false
-                                )
-                            )
-                        )
-                    )
-                )
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/class/conditional.test b/vendor/nikic/php-parser/test/code/parser/stmt/class/conditional.test
deleted file mode 100644
index 40a93508b067bf23cb99da7c071c4a45cf0757c9..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/class/conditional.test
+++ /dev/null
@@ -1,35 +0,0 @@
-Conditional class definition
------
-<?php
-
-if (true) {
-    class A {}
-}
------
-array(
-    0: Stmt_If(
-        cond: Expr_ConstFetch(
-            name: Name(
-                parts: array(
-                    0: true
-                )
-            )
-        )
-        stmts: array(
-            0: Stmt_Class(
-                flags: 0
-                name: Identifier(
-                    name: A
-                )
-                extends: null
-                implements: array(
-                )
-                stmts: array(
-                )
-            )
-        )
-        elseifs: array(
-        )
-        else: null
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/class/constModifierErrors.test b/vendor/nikic/php-parser/test/code/parser/stmt/class/constModifierErrors.test
deleted file mode 100644
index a6aa7972185a025145f08da92cc100e718551559..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/class/constModifierErrors.test
+++ /dev/null
@@ -1,137 +0,0 @@
-Invalid class constant modifiers
------
-<?php
-class A {
-    static const X = 1;
-}
------
-!!php7
-Cannot use 'static' as constant modifier from 3:5 to 3:10
-array(
-    0: Stmt_Class(
-        flags: 0
-        name: Identifier(
-            name: A
-        )
-        extends: null
-        implements: array(
-        )
-        stmts: array(
-            0: Stmt_ClassConst(
-                flags: MODIFIER_STATIC (8)
-                consts: array(
-                    0: Const(
-                        name: Identifier(
-                            name: X
-                        )
-                        value: Scalar_LNumber(
-                            value: 1
-                        )
-                    )
-                )
-            )
-        )
-    )
-)
------
-<?php
-class A {
-    abstract const X = 1;
-}
------
-!!php7
-Cannot use 'abstract' as constant modifier from 3:5 to 3:12
-array(
-    0: Stmt_Class(
-        flags: 0
-        name: Identifier(
-            name: A
-        )
-        extends: null
-        implements: array(
-        )
-        stmts: array(
-            0: Stmt_ClassConst(
-                flags: MODIFIER_ABSTRACT (16)
-                consts: array(
-                    0: Const(
-                        name: Identifier(
-                            name: X
-                        )
-                        value: Scalar_LNumber(
-                            value: 1
-                        )
-                    )
-                )
-            )
-        )
-    )
-)
------
-<?php
-class A {
-    final const X = 1;
-}
------
-!!php7
-Cannot use 'final' as constant modifier from 3:5 to 3:9
-array(
-    0: Stmt_Class(
-        flags: 0
-        name: Identifier(
-            name: A
-        )
-        extends: null
-        implements: array(
-        )
-        stmts: array(
-            0: Stmt_ClassConst(
-                flags: MODIFIER_FINAL (32)
-                consts: array(
-                    0: Const(
-                        name: Identifier(
-                            name: X
-                        )
-                        value: Scalar_LNumber(
-                            value: 1
-                        )
-                    )
-                )
-            )
-        )
-    )
-)
------
-<?php
-class A {
-    public public const X = 1;
-}
------
-!!php7
-Multiple access type modifiers are not allowed from 3:12 to 3:17
-array(
-    0: Stmt_Class(
-        flags: 0
-        name: Identifier(
-            name: A
-        )
-        extends: null
-        implements: array(
-        )
-        stmts: array(
-            0: Stmt_ClassConst(
-                flags: MODIFIER_PUBLIC (1)
-                consts: array(
-                    0: Const(
-                        name: Identifier(
-                            name: X
-                        )
-                        value: Scalar_LNumber(
-                            value: 1
-                        )
-                    )
-                )
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/class/constModifiers.test b/vendor/nikic/php-parser/test/code/parser/stmt/class/constModifiers.test
deleted file mode 100644
index 24d72198114c97acaecc99d1220dbf7c9b5f1c3d..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/class/constModifiers.test
+++ /dev/null
@@ -1,77 +0,0 @@
-Class constant modifiers
------
-<?php
-
-class Foo {
-    const A = 1;
-    public const B = 2;
-    protected const C = 3;
-    private const D = 4;
-}
------
-!!php7
-array(
-    0: Stmt_Class(
-        flags: 0
-        name: Identifier(
-            name: Foo
-        )
-        extends: null
-        implements: array(
-        )
-        stmts: array(
-            0: Stmt_ClassConst(
-                flags: 0
-                consts: array(
-                    0: Const(
-                        name: Identifier(
-                            name: A
-                        )
-                        value: Scalar_LNumber(
-                            value: 1
-                        )
-                    )
-                )
-            )
-            1: Stmt_ClassConst(
-                flags: MODIFIER_PUBLIC (1)
-                consts: array(
-                    0: Const(
-                        name: Identifier(
-                            name: B
-                        )
-                        value: Scalar_LNumber(
-                            value: 2
-                        )
-                    )
-                )
-            )
-            2: Stmt_ClassConst(
-                flags: MODIFIER_PROTECTED (2)
-                consts: array(
-                    0: Const(
-                        name: Identifier(
-                            name: C
-                        )
-                        value: Scalar_LNumber(
-                            value: 3
-                        )
-                    )
-                )
-            )
-            3: Stmt_ClassConst(
-                flags: MODIFIER_PRIVATE (4)
-                consts: array(
-                    0: Const(
-                        name: Identifier(
-                            name: D
-                        )
-                        value: Scalar_LNumber(
-                            value: 4
-                        )
-                    )
-                )
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/class/final.test b/vendor/nikic/php-parser/test/code/parser/stmt/class/final.test
deleted file mode 100644
index ecb7a5c3d646c1aecd96ae2e34ebb0580fb863d4..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/class/final.test
+++ /dev/null
@@ -1,19 +0,0 @@
-Final class
------
-<?php
-
-final class A {}
------
-array(
-    0: Stmt_Class(
-        flags: MODIFIER_FINAL (32)
-        name: Identifier(
-            name: A
-        )
-        extends: null
-        implements: array(
-        )
-        stmts: array(
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/class/implicitPublic.test b/vendor/nikic/php-parser/test/code/parser/stmt/class/implicitPublic.test
deleted file mode 100644
index 92737af7add6f1a8f55787c2acda533f9f53601c..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/class/implicitPublic.test
+++ /dev/null
@@ -1,110 +0,0 @@
-Implicitly public properties and methods
------
-<?php
-
-abstract class A {
-    var $a;
-    static $b;
-    abstract function c();
-    final function d() {}
-    static function e() {}
-    final static function f() {}
-    function g() {}
-}
------
-array(
-    0: Stmt_Class(
-        flags: MODIFIER_ABSTRACT (16)
-        name: Identifier(
-            name: A
-        )
-        extends: null
-        implements: array(
-        )
-        stmts: array(
-            0: Stmt_Property(
-                flags: 0
-                type: null
-                props: array(
-                    0: Stmt_PropertyProperty(
-                        name: VarLikeIdentifier(
-                            name: a
-                        )
-                        default: null
-                    )
-                )
-            )
-            1: Stmt_Property(
-                flags: MODIFIER_STATIC (8)
-                type: null
-                props: array(
-                    0: Stmt_PropertyProperty(
-                        name: VarLikeIdentifier(
-                            name: b
-                        )
-                        default: null
-                    )
-                )
-            )
-            2: Stmt_ClassMethod(
-                flags: MODIFIER_ABSTRACT (16)
-                byRef: false
-                name: Identifier(
-                    name: c
-                )
-                params: array(
-                )
-                returnType: null
-                stmts: null
-            )
-            3: Stmt_ClassMethod(
-                flags: MODIFIER_FINAL (32)
-                byRef: false
-                name: Identifier(
-                    name: d
-                )
-                params: array(
-                )
-                returnType: null
-                stmts: array(
-                )
-            )
-            4: Stmt_ClassMethod(
-                flags: MODIFIER_STATIC (8)
-                byRef: false
-                name: Identifier(
-                    name: e
-                )
-                params: array(
-                )
-                returnType: null
-                stmts: array(
-                )
-            )
-            5: Stmt_ClassMethod(
-                flags: MODIFIER_STATIC | MODIFIER_FINAL (40)
-                byRef: false
-                name: Identifier(
-                    name: f
-                )
-                params: array(
-                )
-                returnType: null
-                stmts: array(
-                )
-            )
-            6: Stmt_ClassMethod(
-                flags: 0
-                byRef: false
-                name: Identifier(
-                    name: g
-                )
-                params: array(
-                )
-                returnType: null
-                stmts: array(
-                )
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/class/interface.test b/vendor/nikic/php-parser/test/code/parser/stmt/class/interface.test
deleted file mode 100644
index 7ac15970dd4f09c6b20fca0123945b783cc1750f..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/class/interface.test
+++ /dev/null
@@ -1,40 +0,0 @@
-Interface
------
-<?php
-
-interface A extends C, D {
-    public function a();
-}
------
-array(
-    0: Stmt_Interface(
-        name: Identifier(
-            name: A
-        )
-        extends: array(
-            0: Name(
-                parts: array(
-                    0: C
-                )
-            )
-            1: Name(
-                parts: array(
-                    0: D
-                )
-            )
-        )
-        stmts: array(
-            0: Stmt_ClassMethod(
-                flags: MODIFIER_PUBLIC (1)
-                byRef: false
-                name: Identifier(
-                    name: a
-                )
-                params: array(
-                )
-                returnType: null
-                stmts: null
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/class/modifier.test b/vendor/nikic/php-parser/test/code/parser/stmt/class/modifier.test
deleted file mode 100644
index 797ef4e83e670567d30de6ebccbc227adc05ecdb..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/class/modifier.test
+++ /dev/null
@@ -1,254 +0,0 @@
-Invalid modifier combination
------
-<?php class A { public public $a; }
------
-Multiple access type modifiers are not allowed from 1:24 to 1:29
-array(
-    0: Stmt_Class(
-        flags: 0
-        name: Identifier(
-            name: A
-        )
-        extends: null
-        implements: array(
-        )
-        stmts: array(
-            0: Stmt_Property(
-                flags: MODIFIER_PUBLIC (1)
-                type: null
-                props: array(
-                    0: Stmt_PropertyProperty(
-                        name: VarLikeIdentifier(
-                            name: a
-                        )
-                        default: null
-                    )
-                )
-            )
-        )
-    )
-)
------
-<?php class A { public protected $a; }
------
-Multiple access type modifiers are not allowed from 1:24 to 1:32
-array(
-    0: Stmt_Class(
-        flags: 0
-        name: Identifier(
-            name: A
-        )
-        extends: null
-        implements: array(
-        )
-        stmts: array(
-            0: Stmt_Property(
-                flags: MODIFIER_PUBLIC | MODIFIER_PROTECTED (3)
-                type: null
-                props: array(
-                    0: Stmt_PropertyProperty(
-                        name: VarLikeIdentifier(
-                            name: a
-                        )
-                        default: null
-                    )
-                )
-            )
-        )
-    )
-)
------
-<?php class A { abstract abstract function a(); }
------
-Multiple abstract modifiers are not allowed from 1:26 to 1:33
-array(
-    0: Stmt_Class(
-        flags: 0
-        name: Identifier(
-            name: A
-        )
-        extends: null
-        implements: array(
-        )
-        stmts: array(
-            0: Stmt_ClassMethod(
-                flags: MODIFIER_ABSTRACT (16)
-                byRef: false
-                name: Identifier(
-                    name: a
-                )
-                params: array(
-                )
-                returnType: null
-                stmts: null
-            )
-        )
-    )
-)
------
-<?php class A { static static $a; }
------
-Multiple static modifiers are not allowed from 1:24 to 1:29
-array(
-    0: Stmt_Class(
-        flags: 0
-        name: Identifier(
-            name: A
-        )
-        extends: null
-        implements: array(
-        )
-        stmts: array(
-            0: Stmt_Property(
-                flags: MODIFIER_STATIC (8)
-                type: null
-                props: array(
-                    0: Stmt_PropertyProperty(
-                        name: VarLikeIdentifier(
-                            name: a
-                        )
-                        default: null
-                    )
-                )
-            )
-        )
-    )
-)
------
-<?php class A { final final function a() {} }
------
-Multiple final modifiers are not allowed from 1:23 to 1:27
-array(
-    0: Stmt_Class(
-        flags: 0
-        name: Identifier(
-            name: A
-        )
-        extends: null
-        implements: array(
-        )
-        stmts: array(
-            0: Stmt_ClassMethod(
-                flags: MODIFIER_FINAL (32)
-                byRef: false
-                name: Identifier(
-                    name: a
-                )
-                params: array(
-                )
-                returnType: null
-                stmts: array(
-                )
-            )
-        )
-    )
-)
------
-<?php class A { abstract final function a(); }
------
-Cannot use the final modifier on an abstract class member from 1:26 to 1:30
-array(
-    0: Stmt_Class(
-        flags: 0
-        name: Identifier(
-            name: A
-        )
-        extends: null
-        implements: array(
-        )
-        stmts: array(
-            0: Stmt_ClassMethod(
-                flags: MODIFIER_ABSTRACT | MODIFIER_FINAL (48)
-                byRef: false
-                name: Identifier(
-                    name: a
-                )
-                params: array(
-                )
-                returnType: null
-                stmts: null
-            )
-        )
-    )
-)
------
-<?php abstract final class A { }
-// Type in the partial parse could conceivably be any of 0, 16 or 32
------
-Syntax error, unexpected T_FINAL, expecting T_CLASS from 1:16 to 1:20
-array(
-    0: Stmt_Class(
-        flags: MODIFIER_FINAL (32)
-        name: Identifier(
-            name: A
-        )
-        extends: null
-        implements: array(
-        )
-        stmts: array(
-        )
-    )
-    1: Stmt_Nop(
-        comments: array(
-            0: // Type in the partial parse could conceivably be any of 0, 16 or 32
-        )
-    )
-)
------
-<?php class A { abstract $a; }
------
-Properties cannot be declared abstract from 1:17 to 1:24
-array(
-    0: Stmt_Class(
-        flags: 0
-        name: Identifier(
-            name: A
-        )
-        extends: null
-        implements: array(
-        )
-        stmts: array(
-            0: Stmt_Property(
-                flags: MODIFIER_ABSTRACT (16)
-                type: null
-                props: array(
-                    0: Stmt_PropertyProperty(
-                        name: VarLikeIdentifier(
-                            name: a
-                        )
-                        default: null
-                    )
-                )
-            )
-        )
-    )
-)
------
-<?php class A { final $a; }
------
-Properties cannot be declared final from 1:17 to 1:21
-array(
-    0: Stmt_Class(
-        flags: 0
-        name: Identifier(
-            name: A
-        )
-        extends: null
-        implements: array(
-        )
-        stmts: array(
-            0: Stmt_Property(
-                flags: MODIFIER_FINAL (32)
-                type: null
-                props: array(
-                    0: Stmt_PropertyProperty(
-                        name: VarLikeIdentifier(
-                            name: a
-                        )
-                        default: null
-                    )
-                )
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/class/name.test b/vendor/nikic/php-parser/test/code/parser/stmt/class/name.test
deleted file mode 100644
index 40cb2fe27e1b678469a5fbc97940f4cdd75e2efa..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/class/name.test
+++ /dev/null
@@ -1,266 +0,0 @@
-Invalid class name
------
-<?php class self {}
------
-Cannot use 'self' as class name as it is reserved from 1:13 to 1:16
-array(
-    0: Stmt_Class(
-        flags: 0
-        name: Identifier(
-            name: self
-        )
-        extends: null
-        implements: array(
-        )
-        stmts: array(
-        )
-    )
-)
------
-<?php class PARENT {}
------
-Cannot use 'PARENT' as class name as it is reserved from 1:13 to 1:18
-array(
-    0: Stmt_Class(
-        flags: 0
-        name: Identifier(
-            name: PARENT
-        )
-        extends: null
-        implements: array(
-        )
-        stmts: array(
-        )
-    )
-)
------
-<?php class static {}
------
-Syntax error, unexpected T_STATIC, expecting T_STRING from 1:13 to 1:18
-array(
-)
------
-<?php class A extends self {}
------
-Cannot use 'self' as class name as it is reserved from 1:23 to 1:26
-array(
-    0: Stmt_Class(
-        flags: 0
-        name: Identifier(
-            name: A
-        )
-        extends: Name(
-            parts: array(
-                0: self
-            )
-        )
-        implements: array(
-        )
-        stmts: array(
-        )
-    )
-)
------
-<?php class A extends PARENT {}
------
-Cannot use 'PARENT' as class name as it is reserved from 1:23 to 1:28
-array(
-    0: Stmt_Class(
-        flags: 0
-        name: Identifier(
-            name: A
-        )
-        extends: Name(
-            parts: array(
-                0: PARENT
-            )
-        )
-        implements: array(
-        )
-        stmts: array(
-        )
-    )
-)
------
-<?php class A extends static {}
------
-Cannot use 'static' as class name as it is reserved from 1:23 to 1:28
-array(
-    0: Stmt_Class(
-        flags: 0
-        name: Identifier(
-            name: A
-        )
-        extends: Name(
-            parts: array(
-                0: static
-            )
-        )
-        implements: array(
-        )
-        stmts: array(
-        )
-    )
-)
------
-<?php class A implements self {}
------
-Cannot use 'self' as interface name as it is reserved from 1:26 to 1:29
-array(
-    0: Stmt_Class(
-        flags: 0
-        name: Identifier(
-            name: A
-        )
-        extends: null
-        implements: array(
-            0: Name(
-                parts: array(
-                    0: self
-                )
-            )
-        )
-        stmts: array(
-        )
-    )
-)
------
-<?php class A implements PARENT {}
------
-Cannot use 'PARENT' as interface name as it is reserved from 1:26 to 1:31
-array(
-    0: Stmt_Class(
-        flags: 0
-        name: Identifier(
-            name: A
-        )
-        extends: null
-        implements: array(
-            0: Name(
-                parts: array(
-                    0: PARENT
-                )
-            )
-        )
-        stmts: array(
-        )
-    )
-)
------
-<?php class A implements static {}
------
-Cannot use 'static' as interface name as it is reserved from 1:26 to 1:31
-array(
-    0: Stmt_Class(
-        flags: 0
-        name: Identifier(
-            name: A
-        )
-        extends: null
-        implements: array(
-            0: Name(
-                parts: array(
-                    0: static
-                )
-            )
-        )
-        stmts: array(
-        )
-    )
-)
------
-<?php interface self {}
------
-Cannot use 'self' as class name as it is reserved from 1:17 to 1:20
-array(
-    0: Stmt_Interface(
-        name: Identifier(
-            name: self
-        )
-        extends: array(
-        )
-        stmts: array(
-        )
-    )
-)
------
-<?php interface PARENT {}
------
-Cannot use 'PARENT' as class name as it is reserved from 1:17 to 1:22
-array(
-    0: Stmt_Interface(
-        name: Identifier(
-            name: PARENT
-        )
-        extends: array(
-        )
-        stmts: array(
-        )
-    )
-)
------
-<?php interface static {}
------
-Syntax error, unexpected T_STATIC, expecting T_STRING from 1:17 to 1:22
-array(
-)
------
-<?php interface A extends self {}
------
-Cannot use 'self' as interface name as it is reserved from 1:27 to 1:30
-array(
-    0: Stmt_Interface(
-        name: Identifier(
-            name: A
-        )
-        extends: array(
-            0: Name(
-                parts: array(
-                    0: self
-                )
-            )
-        )
-        stmts: array(
-        )
-    )
-)
------
-<?php interface A extends PARENT {}
------
-Cannot use 'PARENT' as interface name as it is reserved from 1:27 to 1:32
-array(
-    0: Stmt_Interface(
-        name: Identifier(
-            name: A
-        )
-        extends: array(
-            0: Name(
-                parts: array(
-                    0: PARENT
-                )
-            )
-        )
-        stmts: array(
-        )
-    )
-)
------
-<?php interface A extends static {}
------
-Cannot use 'static' as interface name as it is reserved from 1:27 to 1:32
-array(
-    0: Stmt_Interface(
-        name: Identifier(
-            name: A
-        )
-        extends: array(
-            0: Name(
-                parts: array(
-                    0: static
-                )
-            )
-        )
-        stmts: array(
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/class/php4Style.test b/vendor/nikic/php-parser/test/code/parser/stmt/class/php4Style.test
deleted file mode 100644
index 8906ef132576a23985d02b69bd033eb6a317000d..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/class/php4Style.test
+++ /dev/null
@@ -1,59 +0,0 @@
-PHP 4 style declarations
------
-<?php
-
-class A {
-    var $foo;
-    function bar() {}
-    static abstract function baz() {}
-}
------
-array(
-    0: Stmt_Class(
-        flags: 0
-        name: Identifier(
-            name: A
-        )
-        extends: null
-        implements: array(
-        )
-        stmts: array(
-            0: Stmt_Property(
-                flags: 0
-                type: null
-                props: array(
-                    0: Stmt_PropertyProperty(
-                        name: VarLikeIdentifier(
-                            name: foo
-                        )
-                        default: null
-                    )
-                )
-            )
-            1: Stmt_ClassMethod(
-                flags: 0
-                byRef: false
-                name: Identifier(
-                    name: bar
-                )
-                params: array(
-                )
-                returnType: null
-                stmts: array(
-                )
-            )
-            2: Stmt_ClassMethod(
-                flags: MODIFIER_ABSTRACT | MODIFIER_STATIC (24)
-                byRef: false
-                name: Identifier(
-                    name: baz
-                )
-                params: array(
-                )
-                returnType: null
-                stmts: array(
-                )
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/class/propertyTypes.test b/vendor/nikic/php-parser/test/code/parser/stmt/class/propertyTypes.test
deleted file mode 100644
index 55955f3f9bd377978568ecb482a3d13ecfba3ef7..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/class/propertyTypes.test
+++ /dev/null
@@ -1,70 +0,0 @@
-Class declaration
------
-<?php
-
-class A {
-    public string $a;
-    protected static D $b;
-    private ?float $c;
-}
------
-!!php7
-array(
-    0: Stmt_Class(
-        flags: 0
-        name: Identifier(
-            name: A
-        )
-        extends: null
-        implements: array(
-        )
-        stmts: array(
-            0: Stmt_Property(
-                flags: MODIFIER_PUBLIC (1)
-                type: Identifier(
-                    name: string
-                )
-                props: array(
-                    0: Stmt_PropertyProperty(
-                        name: VarLikeIdentifier(
-                            name: a
-                        )
-                        default: null
-                    )
-                )
-            )
-            1: Stmt_Property(
-                flags: MODIFIER_PROTECTED | MODIFIER_STATIC (10)
-                type: Name(
-                    parts: array(
-                        0: D
-                    )
-                )
-                props: array(
-                    0: Stmt_PropertyProperty(
-                        name: VarLikeIdentifier(
-                            name: b
-                        )
-                        default: null
-                    )
-                )
-            )
-            2: Stmt_Property(
-                flags: MODIFIER_PRIVATE (4)
-                type: NullableType(
-                    type: Identifier(
-                        name: float
-                    )
-                )
-                props: array(
-                    0: Stmt_PropertyProperty(
-                        name: VarLikeIdentifier(
-                            name: c
-                        )
-                        default: null
-                    )
-                )
-            )
-        )
-    )
-)
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/class/simple.test b/vendor/nikic/php-parser/test/code/parser/stmt/class/simple.test
deleted file mode 100644
index c0bd53f3c9ecc71482b53ae0b9118a828751f23f..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/class/simple.test
+++ /dev/null
@@ -1,185 +0,0 @@
-Class declaration
------
-<?php
-
-class A extends B implements C, D {
-    const A = 'B', C = 'D';
-
-    public $a = 'b', $c = 'd';
-    protected $e;
-    private $f;
-
-    public function a() {}
-    public static function b($a) {}
-    public final function c() : B {}
-    protected function d() {}
-    private function e() {}
-}
------
-array(
-    0: Stmt_Class(
-        flags: 0
-        name: Identifier(
-            name: A
-        )
-        extends: Name(
-            parts: array(
-                0: B
-            )
-        )
-        implements: array(
-            0: Name(
-                parts: array(
-                    0: C
-                )
-            )
-            1: Name(
-                parts: array(
-                    0: D
-                )
-            )
-        )
-        stmts: array(
-            0: Stmt_ClassConst(
-                flags: 0
-                consts: array(
-                    0: Const(
-                        name: Identifier(
-                            name: A
-                        )
-                        value: Scalar_String(
-                            value: B
-                        )
-                    )
-                    1: Const(
-                        name: Identifier(
-                            name: C
-                        )
-                        value: Scalar_String(
-                            value: D
-                        )
-                    )
-                )
-            )
-            1: Stmt_Property(
-                flags: MODIFIER_PUBLIC (1)
-                type: null
-                props: array(
-                    0: Stmt_PropertyProperty(
-                        name: VarLikeIdentifier(
-                            name: a
-                        )
-                        default: Scalar_String(
-                            value: b
-                        )
-                    )
-                    1: Stmt_PropertyProperty(
-                        name: VarLikeIdentifier(
-                            name: c
-                        )
-                        default: Scalar_String(
-                            value: d
-                        )
-                    )
-                )
-            )
-            2: Stmt_Property(
-                flags: MODIFIER_PROTECTED (2)
-                type: null
-                props: array(
-                    0: Stmt_PropertyProperty(
-                        name: VarLikeIdentifier(
-                            name: e
-                        )
-                        default: null
-                    )
-                )
-            )
-            3: Stmt_Property(
-                flags: MODIFIER_PRIVATE (4)
-                type: null
-                props: array(
-                    0: Stmt_PropertyProperty(
-                        name: VarLikeIdentifier(
-                            name: f
-                        )
-                        default: null
-                    )
-                )
-            )
-            4: Stmt_ClassMethod(
-                flags: MODIFIER_PUBLIC (1)
-                byRef: false
-                name: Identifier(
-                    name: a
-                )
-                params: array(
-                )
-                returnType: null
-                stmts: array(
-                )
-            )
-            5: Stmt_ClassMethod(
-                flags: MODIFIER_PUBLIC | MODIFIER_STATIC (9)
-                byRef: false
-                name: Identifier(
-                    name: b
-                )
-                params: array(
-                    0: Param(
-                        type: null
-                        byRef: false
-                        variadic: false
-                        var: Expr_Variable(
-                            name: a
-                        )
-                        default: null
-                    )
-                )
-                returnType: null
-                stmts: array(
-                )
-            )
-            6: Stmt_ClassMethod(
-                flags: MODIFIER_PUBLIC | MODIFIER_FINAL (33)
-                byRef: false
-                name: Identifier(
-                    name: c
-                )
-                params: array(
-                )
-                returnType: Name(
-                    parts: array(
-                        0: B
-                    )
-                )
-                stmts: array(
-                )
-            )
-            7: Stmt_ClassMethod(
-                flags: MODIFIER_PROTECTED (2)
-                byRef: false
-                name: Identifier(
-                    name: d
-                )
-                params: array(
-                )
-                returnType: null
-                stmts: array(
-                )
-            )
-            8: Stmt_ClassMethod(
-                flags: MODIFIER_PRIVATE (4)
-                byRef: false
-                name: Identifier(
-                    name: e
-                )
-                params: array(
-                )
-                returnType: null
-                stmts: array(
-                )
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/class/staticMethod.test b/vendor/nikic/php-parser/test/code/parser/stmt/class/staticMethod.test
deleted file mode 100644
index 0540930e4f753f401ac06d2aa352f5370a389e9f..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/class/staticMethod.test
+++ /dev/null
@@ -1,175 +0,0 @@
-Some special methods cannot be static
------
-<?php class A { static function __construct() {} }
------
-Constructor __construct() cannot be static from 1:17 to 1:22
-array(
-    0: Stmt_Class(
-        flags: 0
-        name: Identifier(
-            name: A
-        )
-        extends: null
-        implements: array(
-        )
-        stmts: array(
-            0: Stmt_ClassMethod(
-                flags: MODIFIER_STATIC (8)
-                byRef: false
-                name: Identifier(
-                    name: __construct
-                )
-                params: array(
-                )
-                returnType: null
-                stmts: array(
-                )
-            )
-        )
-    )
-)
------
-<?php class A { static function __destruct() {} }
------
-Destructor __destruct() cannot be static from 1:17 to 1:22
-array(
-    0: Stmt_Class(
-        flags: 0
-        name: Identifier(
-            name: A
-        )
-        extends: null
-        implements: array(
-        )
-        stmts: array(
-            0: Stmt_ClassMethod(
-                flags: MODIFIER_STATIC (8)
-                byRef: false
-                name: Identifier(
-                    name: __destruct
-                )
-                params: array(
-                )
-                returnType: null
-                stmts: array(
-                )
-            )
-        )
-    )
-)
------
-<?php class A { static function __clone() {} }
------
-Clone method __clone() cannot be static from 1:17 to 1:22
-array(
-    0: Stmt_Class(
-        flags: 0
-        name: Identifier(
-            name: A
-        )
-        extends: null
-        implements: array(
-        )
-        stmts: array(
-            0: Stmt_ClassMethod(
-                flags: MODIFIER_STATIC (8)
-                byRef: false
-                name: Identifier(
-                    name: __clone
-                )
-                params: array(
-                )
-                returnType: null
-                stmts: array(
-                )
-            )
-        )
-    )
-)
------
-<?php class A { static function __CONSTRUCT() {} }
------
-Constructor __CONSTRUCT() cannot be static from 1:17 to 1:22
-array(
-    0: Stmt_Class(
-        flags: 0
-        name: Identifier(
-            name: A
-        )
-        extends: null
-        implements: array(
-        )
-        stmts: array(
-            0: Stmt_ClassMethod(
-                flags: MODIFIER_STATIC (8)
-                byRef: false
-                name: Identifier(
-                    name: __CONSTRUCT
-                )
-                params: array(
-                )
-                returnType: null
-                stmts: array(
-                )
-            )
-        )
-    )
-)
------
-<?php class A { static function __Destruct() {} }
------
-Destructor __Destruct() cannot be static from 1:17 to 1:22
-array(
-    0: Stmt_Class(
-        flags: 0
-        name: Identifier(
-            name: A
-        )
-        extends: null
-        implements: array(
-        )
-        stmts: array(
-            0: Stmt_ClassMethod(
-                flags: MODIFIER_STATIC (8)
-                byRef: false
-                name: Identifier(
-                    name: __Destruct
-                )
-                params: array(
-                )
-                returnType: null
-                stmts: array(
-                )
-            )
-        )
-    )
-)
------
-<?php class A { static function __cLoNe() {} }
------
-Clone method __cLoNe() cannot be static from 1:17 to 1:22
-array(
-    0: Stmt_Class(
-        flags: 0
-        name: Identifier(
-            name: A
-        )
-        extends: null
-        implements: array(
-        )
-        stmts: array(
-            0: Stmt_ClassMethod(
-                flags: MODIFIER_STATIC (8)
-                byRef: false
-                name: Identifier(
-                    name: __cLoNe
-                )
-                params: array(
-                )
-                returnType: null
-                stmts: array(
-                )
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/class/trait.test b/vendor/nikic/php-parser/test/code/parser/stmt/class/trait.test
deleted file mode 100644
index bda3cc56d71d272f966cb93d69c3c555bcbcc141..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/class/trait.test
+++ /dev/null
@@ -1,188 +0,0 @@
-Traits
------
-<?php
-
-trait A {
-    public function a() {}
-}
-
-class B {
-    use C;
-    use D {
-        a as protected b;
-        c as d;
-        e as private;
-    }
-    use E, F, G {
-        E::a insteadof F, G;
-        E::b as protected c;
-        E::d as e;
-        E::f as private;
-    }
-}
------
-array(
-    0: Stmt_Trait(
-        name: Identifier(
-            name: A
-        )
-        stmts: array(
-            0: Stmt_ClassMethod(
-                flags: MODIFIER_PUBLIC (1)
-                byRef: false
-                name: Identifier(
-                    name: a
-                )
-                params: array(
-                )
-                returnType: null
-                stmts: array(
-                )
-            )
-        )
-    )
-    1: Stmt_Class(
-        flags: 0
-        name: Identifier(
-            name: B
-        )
-        extends: null
-        implements: array(
-        )
-        stmts: array(
-            0: Stmt_TraitUse(
-                traits: array(
-                    0: Name(
-                        parts: array(
-                            0: C
-                        )
-                    )
-                )
-                adaptations: array(
-                )
-            )
-            1: Stmt_TraitUse(
-                traits: array(
-                    0: Name(
-                        parts: array(
-                            0: D
-                        )
-                    )
-                )
-                adaptations: array(
-                    0: Stmt_TraitUseAdaptation_Alias(
-                        trait: null
-                        method: Identifier(
-                            name: a
-                        )
-                        newModifier: MODIFIER_PROTECTED (2)
-                        newName: Identifier(
-                            name: b
-                        )
-                    )
-                    1: Stmt_TraitUseAdaptation_Alias(
-                        trait: null
-                        method: Identifier(
-                            name: c
-                        )
-                        newModifier: null
-                        newName: Identifier(
-                            name: d
-                        )
-                    )
-                    2: Stmt_TraitUseAdaptation_Alias(
-                        trait: null
-                        method: Identifier(
-                            name: e
-                        )
-                        newModifier: MODIFIER_PRIVATE (4)
-                        newName: null
-                    )
-                )
-            )
-            2: Stmt_TraitUse(
-                traits: array(
-                    0: Name(
-                        parts: array(
-                            0: E
-                        )
-                    )
-                    1: Name(
-                        parts: array(
-                            0: F
-                        )
-                    )
-                    2: Name(
-                        parts: array(
-                            0: G
-                        )
-                    )
-                )
-                adaptations: array(
-                    0: Stmt_TraitUseAdaptation_Precedence(
-                        trait: Name(
-                            parts: array(
-                                0: E
-                            )
-                        )
-                        method: Identifier(
-                            name: a
-                        )
-                        insteadof: array(
-                            0: Name(
-                                parts: array(
-                                    0: F
-                                )
-                            )
-                            1: Name(
-                                parts: array(
-                                    0: G
-                                )
-                            )
-                        )
-                    )
-                    1: Stmt_TraitUseAdaptation_Alias(
-                        trait: Name(
-                            parts: array(
-                                0: E
-                            )
-                        )
-                        method: Identifier(
-                            name: b
-                        )
-                        newModifier: MODIFIER_PROTECTED (2)
-                        newName: Identifier(
-                            name: c
-                        )
-                    )
-                    2: Stmt_TraitUseAdaptation_Alias(
-                        trait: Name(
-                            parts: array(
-                                0: E
-                            )
-                        )
-                        method: Identifier(
-                            name: d
-                        )
-                        newModifier: null
-                        newName: Identifier(
-                            name: e
-                        )
-                    )
-                    3: Stmt_TraitUseAdaptation_Alias(
-                        trait: Name(
-                            parts: array(
-                                0: E
-                            )
-                        )
-                        method: Identifier(
-                            name: f
-                        )
-                        newModifier: MODIFIER_PRIVATE (4)
-                        newName: null
-                    )
-                )
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/const.test b/vendor/nikic/php-parser/test/code/parser/stmt/const.test
deleted file mode 100644
index e6c4db84ffdec7286a1bb5d38f91dc8e6e7ada74..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/const.test
+++ /dev/null
@@ -1,48 +0,0 @@
-Global constants
------
-<?php
-
-const A = 0, B = 1.0, C = 'A', D = E;
------
-array(
-    0: Stmt_Const(
-        consts: array(
-            0: Const(
-                name: Identifier(
-                    name: A
-                )
-                value: Scalar_LNumber(
-                    value: 0
-                )
-            )
-            1: Const(
-                name: Identifier(
-                    name: B
-                )
-                value: Scalar_DNumber(
-                    value: 1
-                )
-            )
-            2: Const(
-                name: Identifier(
-                    name: C
-                )
-                value: Scalar_String(
-                    value: A
-                )
-            )
-            3: Const(
-                name: Identifier(
-                    name: D
-                )
-                value: Expr_ConstFetch(
-                    name: Name(
-                        parts: array(
-                            0: E
-                        )
-                    )
-                )
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/controlFlow.test b/vendor/nikic/php-parser/test/code/parser/stmt/controlFlow.test
deleted file mode 100644
index d9c9fcf353a6102b20d200012667a1705edd7977..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/controlFlow.test
+++ /dev/null
@@ -1,59 +0,0 @@
-Control flow statements
------
-<?php
-
-break;
-break 2;
-
-continue;
-continue 2;
-
-return;
-return $a;
-
-throw $e;
-
-label:
-goto label;
------
-array(
-    0: Stmt_Break(
-        num: null
-    )
-    1: Stmt_Break(
-        num: Scalar_LNumber(
-            value: 2
-        )
-    )
-    2: Stmt_Continue(
-        num: null
-    )
-    3: Stmt_Continue(
-        num: Scalar_LNumber(
-            value: 2
-        )
-    )
-    4: Stmt_Return(
-        expr: null
-    )
-    5: Stmt_Return(
-        expr: Expr_Variable(
-            name: a
-        )
-    )
-    6: Stmt_Throw(
-        expr: Expr_Variable(
-            name: e
-        )
-    )
-    7: Stmt_Label(
-        name: Identifier(
-            name: label
-        )
-    )
-    8: Stmt_Goto(
-        name: Identifier(
-            name: label
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/declare.test b/vendor/nikic/php-parser/test/code/parser/stmt/declare.test
deleted file mode 100644
index f044d24f9164a48cf56dcf5b880eba5ee0501924..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/declare.test
+++ /dev/null
@@ -1,70 +0,0 @@
-Declare
------
-<?php
-
-declare (X='Y');
-
-declare (A='B', C='D') {}
-
-declare (A='B', C='D'):
-enddeclare;
------
-array(
-    0: Stmt_Declare(
-        declares: array(
-            0: Stmt_DeclareDeclare(
-                key: Identifier(
-                    name: X
-                )
-                value: Scalar_String(
-                    value: Y
-                )
-            )
-        )
-        stmts: null
-    )
-    1: Stmt_Declare(
-        declares: array(
-            0: Stmt_DeclareDeclare(
-                key: Identifier(
-                    name: A
-                )
-                value: Scalar_String(
-                    value: B
-                )
-            )
-            1: Stmt_DeclareDeclare(
-                key: Identifier(
-                    name: C
-                )
-                value: Scalar_String(
-                    value: D
-                )
-            )
-        )
-        stmts: array(
-        )
-    )
-    2: Stmt_Declare(
-        declares: array(
-            0: Stmt_DeclareDeclare(
-                key: Identifier(
-                    name: A
-                )
-                value: Scalar_String(
-                    value: B
-                )
-            )
-            1: Stmt_DeclareDeclare(
-                key: Identifier(
-                    name: C
-                )
-                value: Scalar_String(
-                    value: D
-                )
-            )
-        )
-        stmts: array(
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/echo.test b/vendor/nikic/php-parser/test/code/parser/stmt/echo.test
deleted file mode 100644
index 1d03eae5d0962ba1312c5e92d2bef535bf526a90..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/echo.test
+++ /dev/null
@@ -1,32 +0,0 @@
-Echo
------
-<?php
-
-echo 'Hallo World!';
-echo 'Hallo', ' ', 'World', '!';
------
-array(
-    0: Stmt_Echo(
-        exprs: array(
-            0: Scalar_String(
-                value: Hallo World!
-            )
-        )
-    )
-    1: Stmt_Echo(
-        exprs: array(
-            0: Scalar_String(
-                value: Hallo
-            )
-            1: Scalar_String(
-                value:
-            )
-            2: Scalar_String(
-                value: World
-            )
-            3: Scalar_String(
-                value: !
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/function/builtinTypeDeclarations.test b/vendor/nikic/php-parser/test/code/parser/stmt/function/builtinTypeDeclarations.test
deleted file mode 100644
index b90fd019aaaa21ca32119c03121fad5ccea3c6ec..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/function/builtinTypeDeclarations.test
+++ /dev/null
@@ -1,87 +0,0 @@
-Scalar type declarations
------
-<?php
-function test(bool $a, Int $b, FLOAT $c, StRiNg $d, iterable $e, object $f) : void {}
------
-!!php7
-array(
-    0: Stmt_Function(
-        byRef: false
-        name: Identifier(
-            name: test
-        )
-        params: array(
-            0: Param(
-                type: Identifier(
-                    name: bool
-                )
-                byRef: false
-                variadic: false
-                var: Expr_Variable(
-                    name: a
-                )
-                default: null
-            )
-            1: Param(
-                type: Identifier(
-                    name: int
-                )
-                byRef: false
-                variadic: false
-                var: Expr_Variable(
-                    name: b
-                )
-                default: null
-            )
-            2: Param(
-                type: Identifier(
-                    name: float
-                )
-                byRef: false
-                variadic: false
-                var: Expr_Variable(
-                    name: c
-                )
-                default: null
-            )
-            3: Param(
-                type: Identifier(
-                    name: string
-                )
-                byRef: false
-                variadic: false
-                var: Expr_Variable(
-                    name: d
-                )
-                default: null
-            )
-            4: Param(
-                type: Identifier(
-                    name: iterable
-                )
-                byRef: false
-                variadic: false
-                var: Expr_Variable(
-                    name: e
-                )
-                default: null
-            )
-            5: Param(
-                type: Identifier(
-                    name: object
-                )
-                byRef: false
-                variadic: false
-                var: Expr_Variable(
-                    name: f
-                )
-                default: null
-            )
-        )
-        returnType: Identifier(
-            name: void
-        )
-        stmts: array(
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/function/byRef.test b/vendor/nikic/php-parser/test/code/parser/stmt/function/byRef.test
deleted file mode 100644
index 4b276e734d81fdd386edc5d6e4501f1881eb55fe..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/function/byRef.test
+++ /dev/null
@@ -1,49 +0,0 @@
-Return and pass by ref
------
-<?php
-
-function a(&$b) {}
-function &a($b) {}
------
-array(
-    0: Stmt_Function(
-        byRef: false
-        name: Identifier(
-            name: a
-        )
-        params: array(
-            0: Param(
-                type: null
-                byRef: true
-                variadic: false
-                var: Expr_Variable(
-                    name: b
-                )
-                default: null
-            )
-        )
-        returnType: null
-        stmts: array(
-        )
-    )
-    1: Stmt_Function(
-        byRef: true
-        name: Identifier(
-            name: a
-        )
-        params: array(
-            0: Param(
-                type: null
-                byRef: false
-                variadic: false
-                var: Expr_Variable(
-                    name: b
-                )
-                default: null
-            )
-        )
-        returnType: null
-        stmts: array(
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/function/conditional.test b/vendor/nikic/php-parser/test/code/parser/stmt/function/conditional.test
deleted file mode 100644
index 8495aad1f0617991386b678cb48e16331397c1ba..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/function/conditional.test
+++ /dev/null
@@ -1,35 +0,0 @@
-Conditional function definition
------
-<?php
-
-if (true) {
-    function A() {}
-}
------
-array(
-    0: Stmt_If(
-        cond: Expr_ConstFetch(
-            name: Name(
-                parts: array(
-                    0: true
-                )
-            )
-        )
-        stmts: array(
-            0: Stmt_Function(
-                byRef: false
-                name: Identifier(
-                    name: A
-                )
-                params: array(
-                )
-                returnType: null
-                stmts: array(
-                )
-            )
-        )
-        elseifs: array(
-        )
-        else: null
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/function/defaultValues.test b/vendor/nikic/php-parser/test/code/parser/stmt/function/defaultValues.test
deleted file mode 100644
index 505cddfdc7c7ae702e308583913cd7d0895d4633..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/function/defaultValues.test
+++ /dev/null
@@ -1,173 +0,0 @@
-Default values (static scalar tests)
------
-<?php
-
-function a(
-    $b = null,
-    $c = 'foo',
-    $d = A::B,
-    $f = +1,
-    $g = -1.0,
-    $h = array(),
-    $i = [],
-    $j = ['foo'],
-    $k = ['foo', 'bar' => 'baz']
-) {}
------
-array(
-    0: Stmt_Function(
-        byRef: false
-        name: Identifier(
-            name: a
-        )
-        params: array(
-            0: Param(
-                type: null
-                byRef: false
-                variadic: false
-                var: Expr_Variable(
-                    name: b
-                )
-                default: Expr_ConstFetch(
-                    name: Name(
-                        parts: array(
-                            0: null
-                        )
-                    )
-                )
-            )
-            1: Param(
-                type: null
-                byRef: false
-                variadic: false
-                var: Expr_Variable(
-                    name: c
-                )
-                default: Scalar_String(
-                    value: foo
-                )
-            )
-            2: Param(
-                type: null
-                byRef: false
-                variadic: false
-                var: Expr_Variable(
-                    name: d
-                )
-                default: Expr_ClassConstFetch(
-                    class: Name(
-                        parts: array(
-                            0: A
-                        )
-                    )
-                    name: Identifier(
-                        name: B
-                    )
-                )
-            )
-            3: Param(
-                type: null
-                byRef: false
-                variadic: false
-                var: Expr_Variable(
-                    name: f
-                )
-                default: Expr_UnaryPlus(
-                    expr: Scalar_LNumber(
-                        value: 1
-                    )
-                )
-            )
-            4: Param(
-                type: null
-                byRef: false
-                variadic: false
-                var: Expr_Variable(
-                    name: g
-                )
-                default: Expr_UnaryMinus(
-                    expr: Scalar_DNumber(
-                        value: 1
-                    )
-                )
-            )
-            5: Param(
-                type: null
-                byRef: false
-                variadic: false
-                var: Expr_Variable(
-                    name: h
-                )
-                default: Expr_Array(
-                    items: array(
-                    )
-                )
-            )
-            6: Param(
-                type: null
-                byRef: false
-                variadic: false
-                var: Expr_Variable(
-                    name: i
-                )
-                default: Expr_Array(
-                    items: array(
-                    )
-                )
-            )
-            7: Param(
-                type: null
-                byRef: false
-                variadic: false
-                var: Expr_Variable(
-                    name: j
-                )
-                default: Expr_Array(
-                    items: array(
-                        0: Expr_ArrayItem(
-                            key: null
-                            value: Scalar_String(
-                                value: foo
-                            )
-                            byRef: false
-                            unpack: false
-                        )
-                    )
-                )
-            )
-            8: Param(
-                type: null
-                byRef: false
-                variadic: false
-                var: Expr_Variable(
-                    name: k
-                )
-                default: Expr_Array(
-                    items: array(
-                        0: Expr_ArrayItem(
-                            key: null
-                            value: Scalar_String(
-                                value: foo
-                            )
-                            byRef: false
-                            unpack: false
-                        )
-                        1: Expr_ArrayItem(
-                            key: Scalar_String(
-                                value: bar
-                            )
-                            value: Scalar_String(
-                                value: baz
-                            )
-                            byRef: false
-                            unpack: false
-                        )
-                    )
-                )
-            )
-        )
-        returnType: null
-        stmts: array(
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/function/nullableTypes.test b/vendor/nikic/php-parser/test/code/parser/stmt/function/nullableTypes.test
deleted file mode 100644
index 8bf2d31dab15f39808338da43eb30211cd165801..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/function/nullableTypes.test
+++ /dev/null
@@ -1,55 +0,0 @@
-Nullable types
------
-<?php
-
-function test(?Foo $bar, ?string $foo) : ?Baz {
-}
------
-!!php7
-array(
-    0: Stmt_Function(
-        byRef: false
-        name: Identifier(
-            name: test
-        )
-        params: array(
-            0: Param(
-                type: NullableType(
-                    type: Name(
-                        parts: array(
-                            0: Foo
-                        )
-                    )
-                )
-                byRef: false
-                variadic: false
-                var: Expr_Variable(
-                    name: bar
-                )
-                default: null
-            )
-            1: Param(
-                type: NullableType(
-                    type: Identifier(
-                        name: string
-                    )
-                )
-                byRef: false
-                variadic: false
-                var: Expr_Variable(
-                    name: foo
-                )
-                default: null
-            )
-        )
-        returnType: NullableType(
-            type: Name(
-                parts: array(
-                    0: Baz
-                )
-            )
-        )
-        stmts: array(
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/function/returnTypes.test b/vendor/nikic/php-parser/test/code/parser/stmt/function/returnTypes.test
deleted file mode 100644
index 8b71595e7ea2a04e7d213d0f122223a651cda70a..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/function/returnTypes.test
+++ /dev/null
@@ -1,64 +0,0 @@
-Return type declarations
------
-<?php
-
-function test1() {}
-function test2() : array {}
-function test3() : callable {}
-function test4() : Foo\Bar {}
------
-array(
-    0: Stmt_Function(
-        byRef: false
-        name: Identifier(
-            name: test1
-        )
-        params: array(
-        )
-        returnType: null
-        stmts: array(
-        )
-    )
-    1: Stmt_Function(
-        byRef: false
-        name: Identifier(
-            name: test2
-        )
-        params: array(
-        )
-        returnType: Identifier(
-            name: array
-        )
-        stmts: array(
-        )
-    )
-    2: Stmt_Function(
-        byRef: false
-        name: Identifier(
-            name: test3
-        )
-        params: array(
-        )
-        returnType: Identifier(
-            name: callable
-        )
-        stmts: array(
-        )
-    )
-    3: Stmt_Function(
-        byRef: false
-        name: Identifier(
-            name: test4
-        )
-        params: array(
-        )
-        returnType: Name(
-            parts: array(
-                0: Foo
-                1: Bar
-            )
-        )
-        stmts: array(
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/function/specialVars.test b/vendor/nikic/php-parser/test/code/parser/stmt/function/specialVars.test
deleted file mode 100644
index 10a9e0796eea1d3a50c51d8bfac580b159077d23..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/function/specialVars.test
+++ /dev/null
@@ -1,57 +0,0 @@
-Special function variables
------
-<?php
-
-function a() {
-    global $a, ${'b'}, $$c;
-    static $c, $d = 'e';
-}
------
-array(
-    0: Stmt_Function(
-        byRef: false
-        name: Identifier(
-            name: a
-        )
-        params: array(
-        )
-        returnType: null
-        stmts: array(
-            0: Stmt_Global(
-                vars: array(
-                    0: Expr_Variable(
-                        name: a
-                    )
-                    1: Expr_Variable(
-                        name: Scalar_String(
-                            value: b
-                        )
-                    )
-                    2: Expr_Variable(
-                        name: Expr_Variable(
-                            name: c
-                        )
-                    )
-                )
-            )
-            1: Stmt_Static(
-                vars: array(
-                    0: Stmt_StaticVar(
-                        var: Expr_Variable(
-                            name: c
-                        )
-                        default: null
-                    )
-                    1: Stmt_StaticVar(
-                        var: Expr_Variable(
-                            name: d
-                        )
-                        default: Scalar_String(
-                            value: e
-                        )
-                    )
-                )
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/function/typeDeclarations.test b/vendor/nikic/php-parser/test/code/parser/stmt/function/typeDeclarations.test
deleted file mode 100644
index 8327cf32cd59fc473d193ae75caf4f679d394956..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/function/typeDeclarations.test
+++ /dev/null
@@ -1,63 +0,0 @@
-Type hints
------
-<?php
-
-function a($b, array $c, callable $d, E $f) {}
------
-array(
-    0: Stmt_Function(
-        byRef: false
-        name: Identifier(
-            name: a
-        )
-        params: array(
-            0: Param(
-                type: null
-                byRef: false
-                variadic: false
-                var: Expr_Variable(
-                    name: b
-                )
-                default: null
-            )
-            1: Param(
-                type: Identifier(
-                    name: array
-                )
-                byRef: false
-                variadic: false
-                var: Expr_Variable(
-                    name: c
-                )
-                default: null
-            )
-            2: Param(
-                type: Identifier(
-                    name: callable
-                )
-                byRef: false
-                variadic: false
-                var: Expr_Variable(
-                    name: d
-                )
-                default: null
-            )
-            3: Param(
-                type: Name(
-                    parts: array(
-                        0: E
-                    )
-                )
-                byRef: false
-                variadic: false
-                var: Expr_Variable(
-                    name: f
-                )
-                default: null
-            )
-        )
-        returnType: null
-        stmts: array(
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/function/variadic.test b/vendor/nikic/php-parser/test/code/parser/stmt/function/variadic.test
deleted file mode 100644
index afbcf68fb2b5cbe81286d97b3edb8231cec41e3c..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/function/variadic.test
+++ /dev/null
@@ -1,134 +0,0 @@
-Variadic functions
------
-<?php
-function test($a, ... $b) {}
-function test($a, &... $b) {}
-function test($a, Type ... $b) {}
-function test($a, Type &... $b) {}
------
-array(
-    0: Stmt_Function(
-        byRef: false
-        name: Identifier(
-            name: test
-        )
-        params: array(
-            0: Param(
-                type: null
-                byRef: false
-                variadic: false
-                var: Expr_Variable(
-                    name: a
-                )
-                default: null
-            )
-            1: Param(
-                type: null
-                byRef: false
-                variadic: true
-                var: Expr_Variable(
-                    name: b
-                )
-                default: null
-            )
-        )
-        returnType: null
-        stmts: array(
-        )
-    )
-    1: Stmt_Function(
-        byRef: false
-        name: Identifier(
-            name: test
-        )
-        params: array(
-            0: Param(
-                type: null
-                byRef: false
-                variadic: false
-                var: Expr_Variable(
-                    name: a
-                )
-                default: null
-            )
-            1: Param(
-                type: null
-                byRef: true
-                variadic: true
-                var: Expr_Variable(
-                    name: b
-                )
-                default: null
-            )
-        )
-        returnType: null
-        stmts: array(
-        )
-    )
-    2: Stmt_Function(
-        byRef: false
-        name: Identifier(
-            name: test
-        )
-        params: array(
-            0: Param(
-                type: null
-                byRef: false
-                variadic: false
-                var: Expr_Variable(
-                    name: a
-                )
-                default: null
-            )
-            1: Param(
-                type: Name(
-                    parts: array(
-                        0: Type
-                    )
-                )
-                byRef: false
-                variadic: true
-                var: Expr_Variable(
-                    name: b
-                )
-                default: null
-            )
-        )
-        returnType: null
-        stmts: array(
-        )
-    )
-    3: Stmt_Function(
-        byRef: false
-        name: Identifier(
-            name: test
-        )
-        params: array(
-            0: Param(
-                type: null
-                byRef: false
-                variadic: false
-                var: Expr_Variable(
-                    name: a
-                )
-                default: null
-            )
-            1: Param(
-                type: Name(
-                    parts: array(
-                        0: Type
-                    )
-                )
-                byRef: true
-                variadic: true
-                var: Expr_Variable(
-                    name: b
-                )
-                default: null
-            )
-        )
-        returnType: null
-        stmts: array(
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/function/variadicDefaultValue.test b/vendor/nikic/php-parser/test/code/parser/stmt/function/variadicDefaultValue.test
deleted file mode 100644
index 0431f39ac1fa11f76979932b69cae1a4f4bc3525..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/function/variadicDefaultValue.test
+++ /dev/null
@@ -1,31 +0,0 @@
-Invalid variadic function
------
-<?php
-function foo(...$foo = []) {}
------
-Variadic parameter cannot have a default value from 2:24 to 2:25
-array(
-    0: Stmt_Function(
-        byRef: false
-        name: Identifier(
-            name: foo
-        )
-        params: array(
-            0: Param(
-                type: null
-                byRef: false
-                variadic: true
-                var: Expr_Variable(
-                    name: foo
-                )
-                default: Expr_Array(
-                    items: array(
-                    )
-                )
-            )
-        )
-        returnType: null
-        stmts: array(
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/generator/basic.test b/vendor/nikic/php-parser/test/code/parser/stmt/generator/basic.test
deleted file mode 100644
index 78ea9c09ee5fffe5a78f5994207c8ef01fc2cfed..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/generator/basic.test
+++ /dev/null
@@ -1,319 +0,0 @@
-Generators (yield expression)
------
-<?php
-
-function gen() {
-    // statements
-    yield;
-    yield $value;
-    yield $key => $value;
-
-    // expressions
-    $data = yield;
-    $data = (yield $value);
-    $data = (yield $key => $value);
-
-    // yield in language constructs with their own parentheses
-    if (yield $foo); elseif (yield $foo);
-    if (yield $foo): elseif (yield $foo): endif;
-    while (yield $foo);
-    do {} while (yield $foo);
-    switch (yield $foo) {}
-    die(yield $foo);
-
-    // yield in function calls
-    func(yield $foo);
-    $foo->func(yield $foo);
-    new Foo(yield $foo);
-
-    yield from $foo;
-    yield from $foo and yield from $bar;
-    yield from $foo + $bar;
-}
------
-array(
-    0: Stmt_Function(
-        byRef: false
-        name: Identifier(
-            name: gen
-        )
-        params: array(
-        )
-        returnType: null
-        stmts: array(
-            0: Stmt_Expression(
-                expr: Expr_Yield(
-                    key: null
-                    value: null
-                    comments: array(
-                        0: // statements
-                    )
-                )
-                comments: array(
-                    0: // statements
-                )
-            )
-            1: Stmt_Expression(
-                expr: Expr_Yield(
-                    key: null
-                    value: Expr_Variable(
-                        name: value
-                    )
-                )
-            )
-            2: Stmt_Expression(
-                expr: Expr_Yield(
-                    key: Expr_Variable(
-                        name: key
-                    )
-                    value: Expr_Variable(
-                        name: value
-                    )
-                )
-            )
-            3: Stmt_Expression(
-                expr: Expr_Assign(
-                    var: Expr_Variable(
-                        name: data
-                        comments: array(
-                            0: // expressions
-                        )
-                    )
-                    expr: Expr_Yield(
-                        key: null
-                        value: null
-                    )
-                    comments: array(
-                        0: // expressions
-                    )
-                )
-                comments: array(
-                    0: // expressions
-                )
-            )
-            4: Stmt_Expression(
-                expr: Expr_Assign(
-                    var: Expr_Variable(
-                        name: data
-                    )
-                    expr: Expr_Yield(
-                        key: null
-                        value: Expr_Variable(
-                            name: value
-                        )
-                    )
-                )
-            )
-            5: Stmt_Expression(
-                expr: Expr_Assign(
-                    var: Expr_Variable(
-                        name: data
-                    )
-                    expr: Expr_Yield(
-                        key: Expr_Variable(
-                            name: key
-                        )
-                        value: Expr_Variable(
-                            name: value
-                        )
-                    )
-                )
-            )
-            6: Stmt_If(
-                cond: Expr_Yield(
-                    key: null
-                    value: Expr_Variable(
-                        name: foo
-                    )
-                )
-                stmts: array(
-                )
-                elseifs: array(
-                    0: Stmt_ElseIf(
-                        cond: Expr_Yield(
-                            key: null
-                            value: Expr_Variable(
-                                name: foo
-                            )
-                        )
-                        stmts: array(
-                        )
-                    )
-                )
-                else: null
-                comments: array(
-                    0: // yield in language constructs with their own parentheses
-                )
-            )
-            7: Stmt_If(
-                cond: Expr_Yield(
-                    key: null
-                    value: Expr_Variable(
-                        name: foo
-                    )
-                )
-                stmts: array(
-                )
-                elseifs: array(
-                    0: Stmt_ElseIf(
-                        cond: Expr_Yield(
-                            key: null
-                            value: Expr_Variable(
-                                name: foo
-                            )
-                        )
-                        stmts: array(
-                        )
-                    )
-                )
-                else: null
-            )
-            8: Stmt_While(
-                cond: Expr_Yield(
-                    key: null
-                    value: Expr_Variable(
-                        name: foo
-                    )
-                )
-                stmts: array(
-                )
-            )
-            9: Stmt_Do(
-                stmts: array(
-                )
-                cond: Expr_Yield(
-                    key: null
-                    value: Expr_Variable(
-                        name: foo
-                    )
-                )
-            )
-            10: Stmt_Switch(
-                cond: Expr_Yield(
-                    key: null
-                    value: Expr_Variable(
-                        name: foo
-                    )
-                )
-                cases: array(
-                )
-            )
-            11: Stmt_Expression(
-                expr: Expr_Exit(
-                    expr: Expr_Yield(
-                        key: null
-                        value: Expr_Variable(
-                            name: foo
-                        )
-                    )
-                )
-            )
-            12: Stmt_Expression(
-                expr: Expr_FuncCall(
-                    name: Name(
-                        parts: array(
-                            0: func
-                        )
-                        comments: array(
-                            0: // yield in function calls
-                        )
-                    )
-                    args: array(
-                        0: Arg(
-                            value: Expr_Yield(
-                                key: null
-                                value: Expr_Variable(
-                                    name: foo
-                                )
-                            )
-                            byRef: false
-                            unpack: false
-                        )
-                    )
-                    comments: array(
-                        0: // yield in function calls
-                    )
-                )
-                comments: array(
-                    0: // yield in function calls
-                )
-            )
-            13: Stmt_Expression(
-                expr: Expr_MethodCall(
-                    var: Expr_Variable(
-                        name: foo
-                    )
-                    name: Identifier(
-                        name: func
-                    )
-                    args: array(
-                        0: Arg(
-                            value: Expr_Yield(
-                                key: null
-                                value: Expr_Variable(
-                                    name: foo
-                                )
-                            )
-                            byRef: false
-                            unpack: false
-                        )
-                    )
-                )
-            )
-            14: Stmt_Expression(
-                expr: Expr_New(
-                    class: Name(
-                        parts: array(
-                            0: Foo
-                        )
-                    )
-                    args: array(
-                        0: Arg(
-                            value: Expr_Yield(
-                                key: null
-                                value: Expr_Variable(
-                                    name: foo
-                                )
-                            )
-                            byRef: false
-                            unpack: false
-                        )
-                    )
-                )
-            )
-            15: Stmt_Expression(
-                expr: Expr_YieldFrom(
-                    expr: Expr_Variable(
-                        name: foo
-                    )
-                )
-            )
-            16: Stmt_Expression(
-                expr: Expr_BinaryOp_LogicalAnd(
-                    left: Expr_YieldFrom(
-                        expr: Expr_Variable(
-                            name: foo
-                        )
-                    )
-                    right: Expr_YieldFrom(
-                        expr: Expr_Variable(
-                            name: bar
-                        )
-                    )
-                )
-            )
-            17: Stmt_Expression(
-                expr: Expr_YieldFrom(
-                    expr: Expr_BinaryOp_Plus(
-                        left: Expr_Variable(
-                            name: foo
-                        )
-                        right: Expr_Variable(
-                            name: bar
-                        )
-                    )
-                )
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/generator/yieldPrecedence.test b/vendor/nikic/php-parser/test/code/parser/stmt/generator/yieldPrecedence.test
deleted file mode 100644
index ce2b6374d65962a89130acfb276167c05262a64f..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/generator/yieldPrecedence.test
+++ /dev/null
@@ -1,253 +0,0 @@
-Yield operator precedence
------
-<?php
-
-function gen() {
-    yield "a" . "b";
-    yield "a" or die;
-    yield "k" => "a" . "b";
-    yield "k" => "a" or die;
-    var_dump([yield "k" => "a" . "b"]);
-    yield yield "k1" => yield "k2" => "a" . "b";
-    yield yield "k1" => (yield "k2") => "a" . "b";
-    var_dump([yield "k1" => yield "k2" => "a" . "b"]);
-    var_dump([yield "k1" => (yield "k2") => "a" . "b"]);
-}
------
-!!php7
-array(
-    0: Stmt_Function(
-        byRef: false
-        name: Identifier(
-            name: gen
-        )
-        params: array(
-        )
-        returnType: null
-        stmts: array(
-            0: Stmt_Expression(
-                expr: Expr_Yield(
-                    key: null
-                    value: Expr_BinaryOp_Concat(
-                        left: Scalar_String(
-                            value: a
-                        )
-                        right: Scalar_String(
-                            value: b
-                        )
-                    )
-                )
-            )
-            1: Stmt_Expression(
-                expr: Expr_BinaryOp_LogicalOr(
-                    left: Expr_Yield(
-                        key: null
-                        value: Scalar_String(
-                            value: a
-                        )
-                    )
-                    right: Expr_Exit(
-                        expr: null
-                    )
-                )
-            )
-            2: Stmt_Expression(
-                expr: Expr_Yield(
-                    key: Scalar_String(
-                        value: k
-                    )
-                    value: Expr_BinaryOp_Concat(
-                        left: Scalar_String(
-                            value: a
-                        )
-                        right: Scalar_String(
-                            value: b
-                        )
-                    )
-                )
-            )
-            3: Stmt_Expression(
-                expr: Expr_BinaryOp_LogicalOr(
-                    left: Expr_Yield(
-                        key: Scalar_String(
-                            value: k
-                        )
-                        value: Scalar_String(
-                            value: a
-                        )
-                    )
-                    right: Expr_Exit(
-                        expr: null
-                    )
-                )
-            )
-            4: Stmt_Expression(
-                expr: Expr_FuncCall(
-                    name: Name(
-                        parts: array(
-                            0: var_dump
-                        )
-                    )
-                    args: array(
-                        0: Arg(
-                            value: Expr_Array(
-                                items: array(
-                                    0: Expr_ArrayItem(
-                                        key: null
-                                        value: Expr_Yield(
-                                            key: Scalar_String(
-                                                value: k
-                                            )
-                                            value: Expr_BinaryOp_Concat(
-                                                left: Scalar_String(
-                                                    value: a
-                                                )
-                                                right: Scalar_String(
-                                                    value: b
-                                                )
-                                            )
-                                        )
-                                        byRef: false
-                                        unpack: false
-                                    )
-                                )
-                            )
-                            byRef: false
-                            unpack: false
-                        )
-                    )
-                )
-            )
-            5: Stmt_Expression(
-                expr: Expr_Yield(
-                    key: null
-                    value: Expr_Yield(
-                        key: Scalar_String(
-                            value: k1
-                        )
-                        value: Expr_Yield(
-                            key: Scalar_String(
-                                value: k2
-                            )
-                            value: Expr_BinaryOp_Concat(
-                                left: Scalar_String(
-                                    value: a
-                                )
-                                right: Scalar_String(
-                                    value: b
-                                )
-                            )
-                        )
-                    )
-                )
-            )
-            6: Stmt_Expression(
-                expr: Expr_Yield(
-                    key: Expr_Yield(
-                        key: Scalar_String(
-                            value: k1
-                        )
-                        value: Expr_Yield(
-                            key: null
-                            value: Scalar_String(
-                                value: k2
-                            )
-                        )
-                    )
-                    value: Expr_BinaryOp_Concat(
-                        left: Scalar_String(
-                            value: a
-                        )
-                        right: Scalar_String(
-                            value: b
-                        )
-                    )
-                )
-            )
-            7: Stmt_Expression(
-                expr: Expr_FuncCall(
-                    name: Name(
-                        parts: array(
-                            0: var_dump
-                        )
-                    )
-                    args: array(
-                        0: Arg(
-                            value: Expr_Array(
-                                items: array(
-                                    0: Expr_ArrayItem(
-                                        key: null
-                                        value: Expr_Yield(
-                                            key: Scalar_String(
-                                                value: k1
-                                            )
-                                            value: Expr_Yield(
-                                                key: Scalar_String(
-                                                    value: k2
-                                                )
-                                                value: Expr_BinaryOp_Concat(
-                                                    left: Scalar_String(
-                                                        value: a
-                                                    )
-                                                    right: Scalar_String(
-                                                        value: b
-                                                    )
-                                                )
-                                            )
-                                        )
-                                        byRef: false
-                                        unpack: false
-                                    )
-                                )
-                            )
-                            byRef: false
-                            unpack: false
-                        )
-                    )
-                )
-            )
-            8: Stmt_Expression(
-                expr: Expr_FuncCall(
-                    name: Name(
-                        parts: array(
-                            0: var_dump
-                        )
-                    )
-                    args: array(
-                        0: Arg(
-                            value: Expr_Array(
-                                items: array(
-                                    0: Expr_ArrayItem(
-                                        key: Expr_Yield(
-                                            key: Scalar_String(
-                                                value: k1
-                                            )
-                                            value: Expr_Yield(
-                                                key: null
-                                                value: Scalar_String(
-                                                    value: k2
-                                                )
-                                            )
-                                        )
-                                        value: Expr_BinaryOp_Concat(
-                                            left: Scalar_String(
-                                                value: a
-                                            )
-                                            right: Scalar_String(
-                                                value: b
-                                            )
-                                        )
-                                        byRef: false
-                                        unpack: false
-                                    )
-                                )
-                            )
-                            byRef: false
-                            unpack: false
-                        )
-                    )
-                )
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/generator/yieldUnaryPrecedence.test b/vendor/nikic/php-parser/test/code/parser/stmt/generator/yieldUnaryPrecedence.test
deleted file mode 100644
index 6b77d3357a9dda41e6ee0f52b618202e4449c4ad..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/generator/yieldUnaryPrecedence.test
+++ /dev/null
@@ -1,56 +0,0 @@
-Yield with unary operator argument
------
-<?php
-
-function gen() {
-    yield +1;
-    yield -1;
-    yield * -1;
-}
------
-array(
-    0: Stmt_Function(
-        byRef: false
-        name: Identifier(
-            name: gen
-        )
-        params: array(
-        )
-        returnType: null
-        stmts: array(
-            0: Stmt_Expression(
-                expr: Expr_Yield(
-                    key: null
-                    value: Expr_UnaryPlus(
-                        expr: Scalar_LNumber(
-                            value: 1
-                        )
-                    )
-                )
-            )
-            1: Stmt_Expression(
-                expr: Expr_Yield(
-                    key: null
-                    value: Expr_UnaryMinus(
-                        expr: Scalar_LNumber(
-                            value: 1
-                        )
-                    )
-                )
-            )
-            2: Stmt_Expression(
-                expr: Expr_BinaryOp_Mul(
-                    left: Expr_Yield(
-                        key: null
-                        value: null
-                    )
-                    right: Expr_UnaryMinus(
-                        expr: Scalar_LNumber(
-                            value: 1
-                        )
-                    )
-                )
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/haltCompiler.test b/vendor/nikic/php-parser/test/code/parser/stmt/haltCompiler.test
deleted file mode 100644
index 112946ea7c7e6085d773e5960ffd1afb95c3bfa4..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/haltCompiler.test
+++ /dev/null
@@ -1,61 +0,0 @@
-__halt_compiler
------
-<?php
-
-$a;
-__halt_compiler()
-?>
-Hallo World!
------
-array(
-    0: Stmt_Expression(
-        expr: Expr_Variable(
-            name: a
-        )
-    )
-    1: Stmt_HaltCompiler(
-        remaining: Hallo World!
-    )
-)
------
-<?php
-
-$a;
-__halt_compiler();Hallo World!
------
-array(
-    0: Stmt_Expression(
-        expr: Expr_Variable(
-            name: a
-        )
-    )
-    1: Stmt_HaltCompiler(
-        remaining: Hallo World!
-    )
-)
------
-<?php
-
-namespace A;
-$a;
-__halt_compiler();
------
-array(
-    0: Stmt_Namespace(
-        name: Name(
-            parts: array(
-                0: A
-            )
-        )
-        stmts: array(
-            0: Stmt_Expression(
-                expr: Expr_Variable(
-                    name: a
-                )
-            )
-        )
-    )
-    1: Stmt_HaltCompiler(
-        remaining:
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/haltCompilerInvalidSyntax.test b/vendor/nikic/php-parser/test/code/parser/stmt/haltCompilerInvalidSyntax.test
deleted file mode 100644
index 381019a9bfcc82640c7787e1bd8010c0ffa5f2e9..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/haltCompilerInvalidSyntax.test
+++ /dev/null
@@ -1,6 +0,0 @@
-Invalid __halt_compiler() syntax
------
-<?php
-__halt_compiler()
------
-__HALT_COMPILER must be followed by "();" on line 2
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/haltCompilerOffset.test b/vendor/nikic/php-parser/test/code/parser/stmt/haltCompilerOffset.test
deleted file mode 100644
index 16b902938de02ed4c2e2812d6201f17bdc812462..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/haltCompilerOffset.test
+++ /dev/null
@@ -1,36 +0,0 @@
-Use of __HALT_COMPILER_OFFSET__ constant
------
-<?php
-
-var_dump(__HALT_COMPILER_OFFSET__);
-__halt_compiler();
-Foo
------
-array(
-    0: Stmt_Expression(
-        expr: Expr_FuncCall(
-            name: Name(
-                parts: array(
-                    0: var_dump
-                )
-            )
-            args: array(
-                0: Arg(
-                    value: Expr_ConstFetch(
-                        name: Name(
-                            parts: array(
-                                0: __HALT_COMPILER_OFFSET__
-                            )
-                        )
-                    )
-                    byRef: false
-                    unpack: false
-                )
-            )
-        )
-    )
-    1: Stmt_HaltCompiler(
-        remaining:
-    Foo
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/haltCompilerOutermostScope.test b/vendor/nikic/php-parser/test/code/parser/stmt/haltCompilerOutermostScope.test
deleted file mode 100644
index fddb6191d325ffe98072bf2fad7e1a92f2ccd7d3..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/haltCompilerOutermostScope.test
+++ /dev/null
@@ -1,8 +0,0 @@
-__halt_compiler can only be used from outermost scope
------
-<?php
-if (true) {
-    __halt_compiler();
-}
------
-__HALT_COMPILER() can only be used from the outermost scope from 3:5 to 3:19
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/hashbang.test b/vendor/nikic/php-parser/test/code/parser/stmt/hashbang.test
deleted file mode 100644
index 60eff65216f25aacc736d1dc998b15386f8e809b..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/hashbang.test
+++ /dev/null
@@ -1,26 +0,0 @@
-Hashbang line
------
-#!/usr/bin/env php
-<?php
-
-echo "foobar";
-
-?>
-#!/usr/bin/env php
------
-array(
-    0: Stmt_InlineHTML(
-        value: #!/usr/bin/env php
-
-    )
-    1: Stmt_Echo(
-        exprs: array(
-            0: Scalar_String(
-                value: foobar
-            )
-        )
-    )
-    2: Stmt_InlineHTML(
-        value: #!/usr/bin/env php
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/if.test b/vendor/nikic/php-parser/test/code/parser/stmt/if.test
deleted file mode 100644
index e054c897667791de1254c0f15ca33c38961f0d1e..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/if.test
+++ /dev/null
@@ -1,103 +0,0 @@
-If/Elseif/Else
------
-<?php
-
-if      ($a) {}
-elseif  ($b) {}
-elseif  ($c) {}
-else         {}
-
-if ($a) {} // without else
-
-if      ($a):
-elseif  ($b):
-elseif  ($c):
-else        :
-endif;
-
-if ($a): endif; // without else
------
-array(
-    0: Stmt_If(
-        cond: Expr_Variable(
-            name: a
-        )
-        stmts: array(
-        )
-        elseifs: array(
-            0: Stmt_ElseIf(
-                cond: Expr_Variable(
-                    name: b
-                )
-                stmts: array(
-                )
-            )
-            1: Stmt_ElseIf(
-                cond: Expr_Variable(
-                    name: c
-                )
-                stmts: array(
-                )
-            )
-        )
-        else: Stmt_Else(
-            stmts: array(
-            )
-        )
-    )
-    1: Stmt_If(
-        cond: Expr_Variable(
-            name: a
-        )
-        stmts: array(
-        )
-        elseifs: array(
-        )
-        else: null
-    )
-    2: Stmt_If(
-        cond: Expr_Variable(
-            name: a
-        )
-        stmts: array(
-        )
-        elseifs: array(
-            0: Stmt_ElseIf(
-                cond: Expr_Variable(
-                    name: b
-                )
-                stmts: array(
-                )
-            )
-            1: Stmt_ElseIf(
-                cond: Expr_Variable(
-                    name: c
-                )
-                stmts: array(
-                )
-            )
-        )
-        else: Stmt_Else(
-            stmts: array(
-            )
-        )
-        comments: array(
-            0: // without else
-        )
-    )
-    3: Stmt_If(
-        cond: Expr_Variable(
-            name: a
-        )
-        stmts: array(
-        )
-        elseifs: array(
-        )
-        else: null
-    )
-    4: Stmt_Nop(
-        comments: array(
-            0: // without else
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/inlineHTML.test b/vendor/nikic/php-parser/test/code/parser/stmt/inlineHTML.test
deleted file mode 100644
index a7e543cfcd5660ed5754dd38976f4871633ed183..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/inlineHTML.test
+++ /dev/null
@@ -1,33 +0,0 @@
-Inline HTML
------
-<?php
-$a;
-?>
-B
-<?php
-$c;
-?>
-<?php
-$d;
------
-array(
-    0: Stmt_Expression(
-        expr: Expr_Variable(
-            name: a
-        )
-    )
-    1: Stmt_InlineHTML(
-        value: B
-
-    )
-    2: Stmt_Expression(
-        expr: Expr_Variable(
-            name: c
-        )
-    )
-    3: Stmt_Expression(
-        expr: Expr_Variable(
-            name: d
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/loop/do.test b/vendor/nikic/php-parser/test/code/parser/stmt/loop/do.test
deleted file mode 100644
index 76c808108203b9140d807c698575c421f98cc992..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/loop/do.test
+++ /dev/null
@@ -1,17 +0,0 @@
-Do loop
------
-<?php
-
-do {
-
-} while ($a);
------
-array(
-    0: Stmt_Do(
-        stmts: array(
-        )
-        cond: Expr_Variable(
-            name: a
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/loop/for.test b/vendor/nikic/php-parser/test/code/parser/stmt/loop/for.test
deleted file mode 100644
index c942d311e667a2544e810c383087079e847a4c5c..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/loop/for.test
+++ /dev/null
@@ -1,110 +0,0 @@
-For loop
------
-<?php
-
-// "classical" loop
-for ($i = 0; $i < $c; ++$i) {}
-
-// multiple expressions
-for ($a, $b; $c, $d; $e, $f) {}
-
-// infinite loop
-for (;;) {}
-
-// alternative syntax
-for (;;):
-endfor;
------
-array(
-    0: Stmt_For(
-        init: array(
-            0: Expr_Assign(
-                var: Expr_Variable(
-                    name: i
-                )
-                expr: Scalar_LNumber(
-                    value: 0
-                )
-            )
-        )
-        cond: array(
-            0: Expr_BinaryOp_Smaller(
-                left: Expr_Variable(
-                    name: i
-                )
-                right: Expr_Variable(
-                    name: c
-                )
-            )
-        )
-        loop: array(
-            0: Expr_PreInc(
-                var: Expr_Variable(
-                    name: i
-                )
-            )
-        )
-        stmts: array(
-        )
-        comments: array(
-            0: // "classical" loop
-        )
-    )
-    1: Stmt_For(
-        init: array(
-            0: Expr_Variable(
-                name: a
-            )
-            1: Expr_Variable(
-                name: b
-            )
-        )
-        cond: array(
-            0: Expr_Variable(
-                name: c
-            )
-            1: Expr_Variable(
-                name: d
-            )
-        )
-        loop: array(
-            0: Expr_Variable(
-                name: e
-            )
-            1: Expr_Variable(
-                name: f
-            )
-        )
-        stmts: array(
-        )
-        comments: array(
-            0: // multiple expressions
-        )
-    )
-    2: Stmt_For(
-        init: array(
-        )
-        cond: array(
-        )
-        loop: array(
-        )
-        stmts: array(
-        )
-        comments: array(
-            0: // infinite loop
-        )
-    )
-    3: Stmt_For(
-        init: array(
-        )
-        cond: array(
-        )
-        loop: array(
-        )
-        stmts: array(
-        )
-        comments: array(
-            0: // alternative syntax
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/loop/foreach.test b/vendor/nikic/php-parser/test/code/parser/stmt/loop/foreach.test
deleted file mode 100644
index 2dc802fc0c17d2040d3dc3fe30cc18d6373d93d1..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/loop/foreach.test
+++ /dev/null
@@ -1,168 +0,0 @@
-Foreach loop
------
-<?php
-
-// foreach on variable
-foreach ($a as $b)  {}
-foreach ($a as &$b) {}
-foreach ($a as $b => $c) {}
-foreach ($a as $b => &$c) {}
-foreach ($a as list($a, $b)) {}
-foreach ($a as $a => list($b, , $c)) {}
-
-// foreach on expression
-foreach (array() as $b) {}
-
-// alternative syntax
-foreach ($a as $b):
-endforeach;
------
-array(
-    0: Stmt_Foreach(
-        expr: Expr_Variable(
-            name: a
-        )
-        keyVar: null
-        byRef: false
-        valueVar: Expr_Variable(
-            name: b
-        )
-        stmts: array(
-        )
-        comments: array(
-            0: // foreach on variable
-        )
-    )
-    1: Stmt_Foreach(
-        expr: Expr_Variable(
-            name: a
-        )
-        keyVar: null
-        byRef: true
-        valueVar: Expr_Variable(
-            name: b
-        )
-        stmts: array(
-        )
-    )
-    2: Stmt_Foreach(
-        expr: Expr_Variable(
-            name: a
-        )
-        keyVar: Expr_Variable(
-            name: b
-        )
-        byRef: false
-        valueVar: Expr_Variable(
-            name: c
-        )
-        stmts: array(
-        )
-    )
-    3: Stmt_Foreach(
-        expr: Expr_Variable(
-            name: a
-        )
-        keyVar: Expr_Variable(
-            name: b
-        )
-        byRef: true
-        valueVar: Expr_Variable(
-            name: c
-        )
-        stmts: array(
-        )
-    )
-    4: Stmt_Foreach(
-        expr: Expr_Variable(
-            name: a
-        )
-        keyVar: null
-        byRef: false
-        valueVar: Expr_List(
-            items: array(
-                0: Expr_ArrayItem(
-                    key: null
-                    value: Expr_Variable(
-                        name: a
-                    )
-                    byRef: false
-                    unpack: false
-                )
-                1: Expr_ArrayItem(
-                    key: null
-                    value: Expr_Variable(
-                        name: b
-                    )
-                    byRef: false
-                    unpack: false
-                )
-            )
-        )
-        stmts: array(
-        )
-    )
-    5: Stmt_Foreach(
-        expr: Expr_Variable(
-            name: a
-        )
-        keyVar: Expr_Variable(
-            name: a
-        )
-        byRef: false
-        valueVar: Expr_List(
-            items: array(
-                0: Expr_ArrayItem(
-                    key: null
-                    value: Expr_Variable(
-                        name: b
-                    )
-                    byRef: false
-                    unpack: false
-                )
-                1: null
-                2: Expr_ArrayItem(
-                    key: null
-                    value: Expr_Variable(
-                        name: c
-                    )
-                    byRef: false
-                    unpack: false
-                )
-            )
-        )
-        stmts: array(
-        )
-    )
-    6: Stmt_Foreach(
-        expr: Expr_Array(
-            items: array(
-            )
-        )
-        keyVar: null
-        byRef: false
-        valueVar: Expr_Variable(
-            name: b
-        )
-        stmts: array(
-        )
-        comments: array(
-            0: // foreach on expression
-        )
-    )
-    7: Stmt_Foreach(
-        expr: Expr_Variable(
-            name: a
-        )
-        keyVar: null
-        byRef: false
-        valueVar: Expr_Variable(
-            name: b
-        )
-        stmts: array(
-        )
-        comments: array(
-            0: // alternative syntax
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/loop/while.test b/vendor/nikic/php-parser/test/code/parser/stmt/loop/while.test
deleted file mode 100644
index 65f6b2336f5c6126fdef30a31afa44896884b82c..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/loop/while.test
+++ /dev/null
@@ -1,25 +0,0 @@
-While loop
------
-<?php
-
-while ($a) {}
-
-while ($a):
-endwhile;
------
-array(
-    0: Stmt_While(
-        cond: Expr_Variable(
-            name: a
-        )
-        stmts: array(
-        )
-    )
-    1: Stmt_While(
-        cond: Expr_Variable(
-            name: a
-        )
-        stmts: array(
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/multiCatch.test b/vendor/nikic/php-parser/test/code/parser/stmt/multiCatch.test
deleted file mode 100644
index f7cfb3c6b86650ef99039567f9c53c0cf85b1440..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/multiCatch.test
+++ /dev/null
@@ -1,75 +0,0 @@
-Try/catch with multiple classes
------
-<?php
-try {
-    $x;
-} catch (X|Y $e1) {
-    $y;
-} catch (\A|B\C $e2) {
-    $z;
-}
------
-!!php7
-array(
-    0: Stmt_TryCatch(
-        stmts: array(
-            0: Stmt_Expression(
-                expr: Expr_Variable(
-                    name: x
-                )
-            )
-        )
-        catches: array(
-            0: Stmt_Catch(
-                types: array(
-                    0: Name(
-                        parts: array(
-                            0: X
-                        )
-                    )
-                    1: Name(
-                        parts: array(
-                            0: Y
-                        )
-                    )
-                )
-                var: Expr_Variable(
-                    name: e1
-                )
-                stmts: array(
-                    0: Stmt_Expression(
-                        expr: Expr_Variable(
-                            name: y
-                        )
-                    )
-                )
-            )
-            1: Stmt_Catch(
-                types: array(
-                    0: Name_FullyQualified(
-                        parts: array(
-                            0: A
-                        )
-                    )
-                    1: Name(
-                        parts: array(
-                            0: B
-                            1: C
-                        )
-                    )
-                )
-                var: Expr_Variable(
-                    name: e2
-                )
-                stmts: array(
-                    0: Stmt_Expression(
-                        expr: Expr_Variable(
-                            name: z
-                        )
-                    )
-                )
-            )
-        )
-        finally: null
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/namespace/alias.test b/vendor/nikic/php-parser/test/code/parser/stmt/namespace/alias.test
deleted file mode 100644
index ef3f4256cfbab0233defd158bb9a6b31d7f715bc..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/namespace/alias.test
+++ /dev/null
@@ -1,178 +0,0 @@
-Aliases (use)
------
-<?php
-
-use A\B;
-use C\D as E;
-use F\G as H, J;
-
-// evil alias notation - Do Not Use!
-use \A;
-use \A as B;
-
-// function and constant aliases
-use function foo\bar;
-use function foo\bar as baz;
-use const foo\BAR;
-use const foo\BAR as BAZ;
------
-array(
-    0: Stmt_Use(
-        type: TYPE_NORMAL (1)
-        uses: array(
-            0: Stmt_UseUse(
-                type: TYPE_UNKNOWN (0)
-                name: Name(
-                    parts: array(
-                        0: A
-                        1: B
-                    )
-                )
-                alias: null
-            )
-        )
-    )
-    1: Stmt_Use(
-        type: TYPE_NORMAL (1)
-        uses: array(
-            0: Stmt_UseUse(
-                type: TYPE_UNKNOWN (0)
-                name: Name(
-                    parts: array(
-                        0: C
-                        1: D
-                    )
-                )
-                alias: Identifier(
-                    name: E
-                )
-            )
-        )
-    )
-    2: Stmt_Use(
-        type: TYPE_NORMAL (1)
-        uses: array(
-            0: Stmt_UseUse(
-                type: TYPE_UNKNOWN (0)
-                name: Name(
-                    parts: array(
-                        0: F
-                        1: G
-                    )
-                )
-                alias: Identifier(
-                    name: H
-                )
-            )
-            1: Stmt_UseUse(
-                type: TYPE_UNKNOWN (0)
-                name: Name(
-                    parts: array(
-                        0: J
-                    )
-                )
-                alias: null
-            )
-        )
-    )
-    3: Stmt_Use(
-        type: TYPE_NORMAL (1)
-        uses: array(
-            0: Stmt_UseUse(
-                type: TYPE_UNKNOWN (0)
-                name: Name(
-                    parts: array(
-                        0: A
-                    )
-                )
-                alias: null
-            )
-        )
-        comments: array(
-            0: // evil alias notation - Do Not Use!
-        )
-    )
-    4: Stmt_Use(
-        type: TYPE_NORMAL (1)
-        uses: array(
-            0: Stmt_UseUse(
-                type: TYPE_UNKNOWN (0)
-                name: Name(
-                    parts: array(
-                        0: A
-                    )
-                )
-                alias: Identifier(
-                    name: B
-                )
-            )
-        )
-    )
-    5: Stmt_Use(
-        type: TYPE_FUNCTION (2)
-        uses: array(
-            0: Stmt_UseUse(
-                type: TYPE_UNKNOWN (0)
-                name: Name(
-                    parts: array(
-                        0: foo
-                        1: bar
-                    )
-                )
-                alias: null
-            )
-        )
-        comments: array(
-            0: // function and constant aliases
-        )
-    )
-    6: Stmt_Use(
-        type: TYPE_FUNCTION (2)
-        uses: array(
-            0: Stmt_UseUse(
-                type: TYPE_UNKNOWN (0)
-                name: Name(
-                    parts: array(
-                        0: foo
-                        1: bar
-                    )
-                )
-                alias: Identifier(
-                    name: baz
-                )
-            )
-        )
-    )
-    7: Stmt_Use(
-        type: TYPE_CONSTANT (3)
-        uses: array(
-            0: Stmt_UseUse(
-                type: TYPE_UNKNOWN (0)
-                name: Name(
-                    parts: array(
-                        0: foo
-                        1: BAR
-                    )
-                )
-                alias: null
-            )
-        )
-    )
-    8: Stmt_Use(
-        type: TYPE_CONSTANT (3)
-        uses: array(
-            0: Stmt_UseUse(
-                type: TYPE_UNKNOWN (0)
-                name: Name(
-                    parts: array(
-                        0: foo
-                        1: BAR
-                    )
-                )
-                alias: Identifier(
-                    name: BAZ
-                )
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/namespace/braced.test b/vendor/nikic/php-parser/test/code/parser/stmt/namespace/braced.test
deleted file mode 100644
index a057352f413525e46afab8be3a0106b8c8549e9b..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/namespace/braced.test
+++ /dev/null
@@ -1,46 +0,0 @@
-Braced namespaces
------
-<?php
-
-namespace Foo\Bar {
-    foo;
-}
-namespace {
-    bar;
-}
------
-array(
-    0: Stmt_Namespace(
-        name: Name(
-            parts: array(
-                0: Foo
-                1: Bar
-            )
-        )
-        stmts: array(
-            0: Stmt_Expression(
-                expr: Expr_ConstFetch(
-                    name: Name(
-                        parts: array(
-                            0: foo
-                        )
-                    )
-                )
-            )
-        )
-    )
-    1: Stmt_Namespace(
-        name: null
-        stmts: array(
-            0: Stmt_Expression(
-                expr: Expr_ConstFetch(
-                    name: Name(
-                        parts: array(
-                            0: bar
-                        )
-                    )
-                )
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/namespace/commentAfterNamespace.test b/vendor/nikic/php-parser/test/code/parser/stmt/namespace/commentAfterNamespace.test
deleted file mode 100644
index 3f379b734f041e2088e193dd4330b918c349297a..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/namespace/commentAfterNamespace.test
+++ /dev/null
@@ -1,22 +0,0 @@
-Trailing comment after braced namespace declaration
------
-<?php
-namespace Foo {}
-// Comment
------
-array(
-    0: Stmt_Namespace(
-        name: Name(
-            parts: array(
-                0: Foo
-            )
-        )
-        stmts: array(
-        )
-    )
-    1: Stmt_Nop(
-        comments: array(
-            0: // Comment
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/namespace/groupUse.test b/vendor/nikic/php-parser/test/code/parser/stmt/namespace/groupUse.test
deleted file mode 100644
index d68aadba7be6a178950c990cbd76fb06c107197f..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/namespace/groupUse.test
+++ /dev/null
@@ -1,188 +0,0 @@
-Group use declarations
------
-<?php
-use A\{B};
-use A\{B\C, D};
-use \A\B\{C\D, E};
-use function A\{b\c, d};
-use const \A\{B\C, D};
-use A\B\{C\D, function b\c, const D};
------
-array(
-    0: Stmt_GroupUse(
-        type: TYPE_UNKNOWN (0)
-        prefix: Name(
-            parts: array(
-                0: A
-            )
-        )
-        uses: array(
-            0: Stmt_UseUse(
-                type: TYPE_NORMAL (1)
-                name: Name(
-                    parts: array(
-                        0: B
-                    )
-                )
-                alias: null
-            )
-        )
-    )
-    1: Stmt_GroupUse(
-        type: TYPE_UNKNOWN (0)
-        prefix: Name(
-            parts: array(
-                0: A
-            )
-        )
-        uses: array(
-            0: Stmt_UseUse(
-                type: TYPE_NORMAL (1)
-                name: Name(
-                    parts: array(
-                        0: B
-                        1: C
-                    )
-                )
-                alias: null
-            )
-            1: Stmt_UseUse(
-                type: TYPE_NORMAL (1)
-                name: Name(
-                    parts: array(
-                        0: D
-                    )
-                )
-                alias: null
-            )
-        )
-    )
-    2: Stmt_GroupUse(
-        type: TYPE_UNKNOWN (0)
-        prefix: Name(
-            parts: array(
-                0: A
-                1: B
-            )
-        )
-        uses: array(
-            0: Stmt_UseUse(
-                type: TYPE_NORMAL (1)
-                name: Name(
-                    parts: array(
-                        0: C
-                        1: D
-                    )
-                )
-                alias: null
-            )
-            1: Stmt_UseUse(
-                type: TYPE_NORMAL (1)
-                name: Name(
-                    parts: array(
-                        0: E
-                    )
-                )
-                alias: null
-            )
-        )
-    )
-    3: Stmt_GroupUse(
-        type: TYPE_FUNCTION (2)
-        prefix: Name(
-            parts: array(
-                0: A
-            )
-        )
-        uses: array(
-            0: Stmt_UseUse(
-                type: TYPE_UNKNOWN (0)
-                name: Name(
-                    parts: array(
-                        0: b
-                        1: c
-                    )
-                )
-                alias: null
-            )
-            1: Stmt_UseUse(
-                type: TYPE_UNKNOWN (0)
-                name: Name(
-                    parts: array(
-                        0: d
-                    )
-                )
-                alias: null
-            )
-        )
-    )
-    4: Stmt_GroupUse(
-        type: TYPE_CONSTANT (3)
-        prefix: Name(
-            parts: array(
-                0: A
-            )
-        )
-        uses: array(
-            0: Stmt_UseUse(
-                type: TYPE_UNKNOWN (0)
-                name: Name(
-                    parts: array(
-                        0: B
-                        1: C
-                    )
-                )
-                alias: null
-            )
-            1: Stmt_UseUse(
-                type: TYPE_UNKNOWN (0)
-                name: Name(
-                    parts: array(
-                        0: D
-                    )
-                )
-                alias: null
-            )
-        )
-    )
-    5: Stmt_GroupUse(
-        type: TYPE_UNKNOWN (0)
-        prefix: Name(
-            parts: array(
-                0: A
-                1: B
-            )
-        )
-        uses: array(
-            0: Stmt_UseUse(
-                type: TYPE_NORMAL (1)
-                name: Name(
-                    parts: array(
-                        0: C
-                        1: D
-                    )
-                )
-                alias: null
-            )
-            1: Stmt_UseUse(
-                type: TYPE_FUNCTION (2)
-                name: Name(
-                    parts: array(
-                        0: b
-                        1: c
-                    )
-                )
-                alias: null
-            )
-            2: Stmt_UseUse(
-                type: TYPE_CONSTANT (3)
-                name: Name(
-                    parts: array(
-                        0: D
-                    )
-                )
-                alias: null
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/namespace/groupUseErrors.test b/vendor/nikic/php-parser/test/code/parser/stmt/namespace/groupUseErrors.test
deleted file mode 100644
index 1cccf86c719207d332edd7f1bef82cd2e7a7f424..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/namespace/groupUseErrors.test
+++ /dev/null
@@ -1,113 +0,0 @@
-Invalid group use syntax
------
-<?php
-// Missing semicolon
-use Foo\{Bar}
-use Bar\{Foo};
------
-!!php7
-Syntax error, unexpected T_USE, expecting ';' from 4:1 to 4:3
-array(
-    0: Stmt_GroupUse(
-        type: TYPE_UNKNOWN (0)
-        prefix: Name(
-            parts: array(
-                0: Foo
-            )
-        )
-        uses: array(
-            0: Stmt_UseUse(
-                type: TYPE_NORMAL (1)
-                name: Name(
-                    parts: array(
-                        0: Bar
-                    )
-                )
-                alias: null
-            )
-        )
-        comments: array(
-            0: // Missing semicolon
-        )
-    )
-    1: Stmt_GroupUse(
-        type: TYPE_UNKNOWN (0)
-        prefix: Name(
-            parts: array(
-                0: Bar
-            )
-        )
-        uses: array(
-            0: Stmt_UseUse(
-                type: TYPE_NORMAL (1)
-                name: Name(
-                    parts: array(
-                        0: Foo
-                    )
-                )
-                alias: null
-            )
-        )
-    )
-)
------
-<?php
-// Missing NS separator
-use Foo {Bar, Baz};
------
-!!php7
-Syntax error, unexpected '{', expecting ';' from 3:9 to 3:9
-array(
-    0: Stmt_Use(
-        type: TYPE_NORMAL (1)
-        uses: array(
-            0: Stmt_UseUse(
-                type: TYPE_UNKNOWN (0)
-                name: Name(
-                    parts: array(
-                        0: Foo
-                    )
-                )
-                alias: null
-            )
-        )
-        comments: array(
-            0: // Missing NS separator
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_ConstFetch(
-            name: Name(
-                parts: array(
-                    0: Bar
-                )
-            )
-        )
-    )
-    2: Stmt_Expression(
-        expr: Expr_ConstFetch(
-            name: Name(
-                parts: array(
-                    0: Baz
-                )
-            )
-        )
-    )
-)
------
-<?php
-// Extra NS separator
-use Foo\{\Bar};
------
-Syntax error, unexpected T_NS_SEPARATOR, expecting T_STRING or T_FUNCTION or T_CONST from 3:10 to 3:10
-array(
-    0: Stmt_Expression(
-        expr: Expr_ConstFetch(
-            name: Name_FullyQualified(
-                parts: array(
-                    0: Bar
-                )
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/namespace/groupUsePositions.test b/vendor/nikic/php-parser/test/code/parser/stmt/namespace/groupUsePositions.test
deleted file mode 100644
index 7898b208b0b71d854066d0e2fecc8d6b152c23fa..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/namespace/groupUsePositions.test
+++ /dev/null
@@ -1,28 +0,0 @@
-Ensure correct file position attributes for group use prefix
------
-<?php
-use Foo\Bar\{Baz};
------
-!!positions
-array(
-    0: Stmt_GroupUse[2:1 - 2:17](
-        type: TYPE_UNKNOWN (0)
-        prefix: Name[2:5 - 2:11](
-            parts: array(
-                0: Foo
-                1: Bar
-            )
-        )
-        uses: array(
-            0: Stmt_UseUse[2:14 - 2:16](
-                type: TYPE_NORMAL (1)
-                name: Name[2:14 - 2:16](
-                    parts: array(
-                        0: Baz
-                    )
-                )
-                alias: null
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/namespace/groupUseTrailingComma.test b/vendor/nikic/php-parser/test/code/parser/stmt/namespace/groupUseTrailingComma.test
deleted file mode 100644
index 0327a9b39a884462c28047caaa67fa470eaa7076..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/namespace/groupUseTrailingComma.test
+++ /dev/null
@@ -1,47 +0,0 @@
-Group use can have trailing comma
------
-<?php
-use A\{B,};
-use function A\{b,};
------
-!!php7
-array(
-    0: Stmt_GroupUse(
-        type: TYPE_UNKNOWN (0)
-        prefix: Name(
-            parts: array(
-                0: A
-            )
-        )
-        uses: array(
-            0: Stmt_UseUse(
-                type: TYPE_NORMAL (1)
-                name: Name(
-                    parts: array(
-                        0: B
-                    )
-                )
-                alias: null
-            )
-        )
-    )
-    1: Stmt_GroupUse(
-        type: TYPE_FUNCTION (2)
-        prefix: Name(
-            parts: array(
-                0: A
-            )
-        )
-        uses: array(
-            0: Stmt_UseUse(
-                type: TYPE_UNKNOWN (0)
-                name: Name(
-                    parts: array(
-                        0: b
-                    )
-                )
-                alias: null
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/namespace/invalidName.test b/vendor/nikic/php-parser/test/code/parser/stmt/namespace/invalidName.test
deleted file mode 100644
index 2f466d396e8636610d8a61039391882901f9a1bb..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/namespace/invalidName.test
+++ /dev/null
@@ -1,87 +0,0 @@
-Invalid namespace names
------
-<?php namespace self;
------
-Cannot use 'self' as namespace name from 1:17 to 1:20
-array(
-    0: Stmt_Namespace(
-        name: Name(
-            parts: array(
-                0: self
-            )
-        )
-        stmts: array(
-        )
-    )
-)
------
-<?php namespace PARENT;
------
-Cannot use 'PARENT' as namespace name from 1:17 to 1:22
-array(
-    0: Stmt_Namespace(
-        name: Name(
-            parts: array(
-                0: PARENT
-            )
-        )
-        stmts: array(
-        )
-    )
-)
------
-<?php namespace static;
------
-Syntax error, unexpected T_STATIC, expecting T_STRING or T_NS_SEPARATOR or '{' from 1:17 to 1:22
-array(
-)
------
-<?php use A as self;
------
-Cannot use A as self because 'self' is a special class name from 1:16 to 1:19
-array(
-    0: Stmt_Use(
-        type: TYPE_NORMAL (1)
-        uses: array(
-            0: Stmt_UseUse(
-                type: TYPE_UNKNOWN (0)
-                name: Name(
-                    parts: array(
-                        0: A
-                    )
-                )
-                alias: Identifier(
-                    name: self
-                )
-            )
-        )
-    )
-)
------
-<?php use B as PARENT;
------
-Cannot use B as PARENT because 'PARENT' is a special class name from 1:16 to 1:21
-array(
-    0: Stmt_Use(
-        type: TYPE_NORMAL (1)
-        uses: array(
-            0: Stmt_UseUse(
-                type: TYPE_UNKNOWN (0)
-                name: Name(
-                    parts: array(
-                        0: B
-                    )
-                )
-                alias: Identifier(
-                    name: PARENT
-                )
-            )
-        )
-    )
-)
------
-<?php use C as static;
------
-Syntax error, unexpected T_STATIC, expecting T_STRING from 1:16 to 1:21
-array(
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/namespace/mix.test b/vendor/nikic/php-parser/test/code/parser/stmt/namespace/mix.test
deleted file mode 100644
index 0fbfbf424126d1694e924d8e22a528ce684f5658..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/namespace/mix.test
+++ /dev/null
@@ -1,103 +0,0 @@
-Namespace types cannot be mixed
------
-<?php
-namespace A;
-echo 1;
-namespace B {
-    echo 2;
-}
-echo 3;
------
-Cannot mix bracketed namespace declarations with unbracketed namespace declarations on line 4
-array(
-    0: Stmt_Namespace(
-        name: Name(
-            parts: array(
-                0: A
-            )
-        )
-        stmts: array(
-            0: Stmt_Echo(
-                exprs: array(
-                    0: Scalar_LNumber(
-                        value: 1
-                    )
-                )
-            )
-        )
-    )
-    1: Stmt_Namespace(
-        name: Name(
-            parts: array(
-                0: B
-            )
-        )
-        stmts: array(
-            0: Stmt_Echo(
-                exprs: array(
-                    0: Scalar_LNumber(
-                        value: 2
-                    )
-                )
-            )
-        )
-    )
-    2: Stmt_Echo(
-        exprs: array(
-            0: Scalar_LNumber(
-                value: 3
-            )
-        )
-    )
-)
------
-<?php
-namespace A {
-    echo 1;
-}
-echo 2;
-namespace B;
-echo 3;
------
-Cannot mix bracketed namespace declarations with unbracketed namespace declarations on line 6
-array(
-    0: Stmt_Namespace(
-        name: Name(
-            parts: array(
-                0: A
-            )
-        )
-        stmts: array(
-            0: Stmt_Echo(
-                exprs: array(
-                    0: Scalar_LNumber(
-                        value: 1
-                    )
-                )
-            )
-        )
-    )
-    1: Stmt_Echo(
-        exprs: array(
-            0: Scalar_LNumber(
-                value: 2
-            )
-        )
-    )
-    2: Stmt_Namespace(
-        name: Name(
-            parts: array(
-                0: B
-            )
-        )
-        stmts: array(
-            0: Stmt_Echo(
-                exprs: array(
-                    0: Scalar_LNumber(
-                        value: 3
-                    )
-                )
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/namespace/name.test b/vendor/nikic/php-parser/test/code/parser/stmt/namespace/name.test
deleted file mode 100644
index 9a5babb36a7bae628088d3a9793d6fb4bd25e936..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/namespace/name.test
+++ /dev/null
@@ -1,50 +0,0 @@
-Different name types
------
-<?php
-
-A;
-A\B;
-\A\B;
-namespace\A\B;
------
-array(
-    0: Stmt_Expression(
-        expr: Expr_ConstFetch(
-            name: Name(
-                parts: array(
-                    0: A
-                )
-            )
-        )
-    )
-    1: Stmt_Expression(
-        expr: Expr_ConstFetch(
-            name: Name(
-                parts: array(
-                    0: A
-                    1: B
-                )
-            )
-        )
-    )
-    2: Stmt_Expression(
-        expr: Expr_ConstFetch(
-            name: Name_FullyQualified(
-                parts: array(
-                    0: A
-                    1: B
-                )
-            )
-        )
-    )
-    3: Stmt_Expression(
-        expr: Expr_ConstFetch(
-            name: Name_Relative(
-                parts: array(
-                    0: A
-                    1: B
-                )
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/namespace/nested.test b/vendor/nikic/php-parser/test/code/parser/stmt/namespace/nested.test
deleted file mode 100644
index 840daffe925415efe7439b4376653722f6f6b219..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/namespace/nested.test
+++ /dev/null
@@ -1,30 +0,0 @@
-Nested namespaces are not allowed
------
-<?php
-namespace A {
-    namespace B {
-
-    }
-}
------
-Namespace declarations cannot be nested from 3:5 to 5:5
-array(
-    0: Stmt_Namespace(
-        name: Name(
-            parts: array(
-                0: A
-            )
-        )
-        stmts: array(
-            0: Stmt_Namespace(
-                name: Name(
-                    parts: array(
-                        0: B
-                    )
-                )
-                stmts: array(
-                )
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/namespace/notBraced.test b/vendor/nikic/php-parser/test/code/parser/stmt/namespace/notBraced.test
deleted file mode 100644
index aa34fc5c3b8cf242c0b6233771a23cb77097eccb..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/namespace/notBraced.test
+++ /dev/null
@@ -1,49 +0,0 @@
-Semicolon style namespaces
------
-<?php
-
-namespace Foo\Bar;
-foo;
-
-namespace Bar;
-bar;
------
-array(
-    0: Stmt_Namespace(
-        name: Name(
-            parts: array(
-                0: Foo
-                1: Bar
-            )
-        )
-        stmts: array(
-            0: Stmt_Expression(
-                expr: Expr_ConstFetch(
-                    name: Name(
-                        parts: array(
-                            0: foo
-                        )
-                    )
-                )
-            )
-        )
-    )
-    1: Stmt_Namespace(
-        name: Name(
-            parts: array(
-                0: Bar
-            )
-        )
-        stmts: array(
-            0: Stmt_Expression(
-                expr: Expr_ConstFetch(
-                    name: Name(
-                        parts: array(
-                            0: bar
-                        )
-                    )
-                )
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/namespace/nsAfterHashbang.test b/vendor/nikic/php-parser/test/code/parser/stmt/namespace/nsAfterHashbang.test
deleted file mode 100644
index 6d452538d4cb6a398f9c10d7ad5d4d980f72082c..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/namespace/nsAfterHashbang.test
+++ /dev/null
@@ -1,22 +0,0 @@
-Hashbang followed by namespace declaration
------
-#!/usr/bin/env php
-<?php
-
-namespace A;
------
-array(
-    0: Stmt_InlineHTML(
-        value: #!/usr/bin/env php
-
-    )
-    1: Stmt_Namespace(
-        name: Name(
-            parts: array(
-                0: A
-            )
-        )
-        stmts: array(
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/namespace/outsideStmt.test b/vendor/nikic/php-parser/test/code/parser/stmt/namespace/outsideStmt.test
deleted file mode 100644
index fe8bde66865c6eade5fa0afe303f7ce16e027cf9..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/namespace/outsideStmt.test
+++ /dev/null
@@ -1,60 +0,0 @@
-Some statements may occur outside of namespaces
------
-<?php
-declare(A='B');
-namespace B {
-
-}
-__halt_compiler()
-?>
-Hi!
------
-array(
-    0: Stmt_Declare(
-        declares: array(
-            0: Stmt_DeclareDeclare(
-                key: Identifier(
-                    name: A
-                )
-                value: Scalar_String(
-                    value: B
-                )
-            )
-        )
-        stmts: null
-    )
-    1: Stmt_Namespace(
-        name: Name(
-            parts: array(
-                0: B
-            )
-        )
-        stmts: array(
-        )
-    )
-    2: Stmt_HaltCompiler(
-        remaining: Hi!
-    )
-)
------
-<?php
-/* Comment */
-;
-namespace Foo;
------
-array(
-    0: Stmt_Nop(
-        comments: array(
-            0: /* Comment */
-        )
-    )
-    1: Stmt_Namespace(
-        name: Name(
-            parts: array(
-                0: Foo
-            )
-        )
-        stmts: array(
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/namespace/outsideStmtInvalid.test b/vendor/nikic/php-parser/test/code/parser/stmt/namespace/outsideStmtInvalid.test
deleted file mode 100644
index 85bd1808180a7aad512e2ef52f221fbd673ec21d..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/namespace/outsideStmtInvalid.test
+++ /dev/null
@@ -1,109 +0,0 @@
-There (mostly) can't be statements outside of namespaces
------
-<?php
-echo 1;
-echo 2;
-namespace A;
------
-Namespace declaration statement has to be the very first statement in the script on line 4
-array(
-    0: Stmt_Echo(
-        exprs: array(
-            0: Scalar_LNumber(
-                value: 1
-            )
-        )
-    )
-    1: Stmt_Echo(
-        exprs: array(
-            0: Scalar_LNumber(
-                value: 2
-            )
-        )
-    )
-    2: Stmt_Namespace(
-        name: Name(
-            parts: array(
-                0: A
-            )
-        )
-        stmts: array(
-        )
-    )
-)
------
-<?php
-namespace A {}
-echo 1;
------
-No code may exist outside of namespace {} from 3:1 to 3:7
-array(
-    0: Stmt_Namespace(
-        name: Name(
-            parts: array(
-                0: A
-            )
-        )
-        stmts: array(
-        )
-    )
-    1: Stmt_Echo(
-        exprs: array(
-            0: Scalar_LNumber(
-                value: 1
-            )
-        )
-    )
-)
------
-<?php
-namespace A {}
-declare(ticks=1);
-foo();
-namespace B {}
------
-No code may exist outside of namespace {} from 3:1 to 3:17
-array(
-    0: Stmt_Namespace(
-        name: Name(
-            parts: array(
-                0: A
-            )
-        )
-        stmts: array(
-        )
-    )
-    1: Stmt_Declare(
-        declares: array(
-            0: Stmt_DeclareDeclare(
-                key: Identifier(
-                    name: ticks
-                )
-                value: Scalar_LNumber(
-                    value: 1
-                )
-            )
-        )
-        stmts: null
-    )
-    2: Stmt_Expression(
-        expr: Expr_FuncCall(
-            name: Name(
-                parts: array(
-                    0: foo
-                )
-            )
-            args: array(
-            )
-        )
-    )
-    3: Stmt_Namespace(
-        name: Name(
-            parts: array(
-                0: B
-            )
-        )
-        stmts: array(
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/switch.test b/vendor/nikic/php-parser/test/code/parser/stmt/switch.test
deleted file mode 100644
index fc24508e1b0c66f4cd21869e8ff73b4326c6f376..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/switch.test
+++ /dev/null
@@ -1,81 +0,0 @@
-Switch
------
-<?php
-
-switch ($a) {
-    case 0:
-        break;
-    // Comment
-    case 1;
-    default:
-}
-
-// alternative syntax
-switch ($a):
-endswitch;
-
-// leading semicolon
-switch ($a) { ; }
-switch ($a): ; endswitch;
------
-array(
-    0: Stmt_Switch(
-        cond: Expr_Variable(
-            name: a
-        )
-        cases: array(
-            0: Stmt_Case(
-                cond: Scalar_LNumber(
-                    value: 0
-                )
-                stmts: array(
-                    0: Stmt_Break(
-                        num: null
-                    )
-                )
-            )
-            1: Stmt_Case(
-                cond: Scalar_LNumber(
-                    value: 1
-                )
-                stmts: array(
-                )
-                comments: array(
-                    0: // Comment
-                )
-            )
-            2: Stmt_Case(
-                cond: null
-                stmts: array(
-                )
-            )
-        )
-    )
-    1: Stmt_Switch(
-        cond: Expr_Variable(
-            name: a
-        )
-        cases: array(
-        )
-        comments: array(
-            0: // alternative syntax
-        )
-    )
-    2: Stmt_Switch(
-        cond: Expr_Variable(
-            name: a
-        )
-        cases: array(
-        )
-        comments: array(
-            0: // leading semicolon
-        )
-    )
-    3: Stmt_Switch(
-        cond: Expr_Variable(
-            name: a
-        )
-        cases: array(
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/tryCatch.test b/vendor/nikic/php-parser/test/code/parser/stmt/tryCatch.test
deleted file mode 100644
index 8f88f4a35970c4db8d4a40174f69406d0afb7cc7..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/tryCatch.test
+++ /dev/null
@@ -1,144 +0,0 @@
-Try/catch
------
-<?php
-
-try {
-    doTry();
-} catch (A $b) {
-    doCatchA();
-} catch (B $c) {
-    doCatchB();
-} finally {
-    doFinally();
-}
-
-// no finally
-try { }
-catch (A $b) { }
-
-// no catch
-try { }
-finally { }
-
------
-array(
-    0: Stmt_TryCatch(
-        stmts: array(
-            0: Stmt_Expression(
-                expr: Expr_FuncCall(
-                    name: Name(
-                        parts: array(
-                            0: doTry
-                        )
-                    )
-                    args: array(
-                    )
-                )
-            )
-        )
-        catches: array(
-            0: Stmt_Catch(
-                types: array(
-                    0: Name(
-                        parts: array(
-                            0: A
-                        )
-                    )
-                )
-                var: Expr_Variable(
-                    name: b
-                )
-                stmts: array(
-                    0: Stmt_Expression(
-                        expr: Expr_FuncCall(
-                            name: Name(
-                                parts: array(
-                                    0: doCatchA
-                                )
-                            )
-                            args: array(
-                            )
-                        )
-                    )
-                )
-            )
-            1: Stmt_Catch(
-                types: array(
-                    0: Name(
-                        parts: array(
-                            0: B
-                        )
-                    )
-                )
-                var: Expr_Variable(
-                    name: c
-                )
-                stmts: array(
-                    0: Stmt_Expression(
-                        expr: Expr_FuncCall(
-                            name: Name(
-                                parts: array(
-                                    0: doCatchB
-                                )
-                            )
-                            args: array(
-                            )
-                        )
-                    )
-                )
-            )
-        )
-        finally: Stmt_Finally(
-            stmts: array(
-                0: Stmt_Expression(
-                    expr: Expr_FuncCall(
-                        name: Name(
-                            parts: array(
-                                0: doFinally
-                            )
-                        )
-                        args: array(
-                        )
-                    )
-                )
-            )
-        )
-    )
-    1: Stmt_TryCatch(
-        stmts: array(
-        )
-        catches: array(
-            0: Stmt_Catch(
-                types: array(
-                    0: Name(
-                        parts: array(
-                            0: A
-                        )
-                    )
-                )
-                var: Expr_Variable(
-                    name: b
-                )
-                stmts: array(
-                )
-            )
-        )
-        finally: null
-        comments: array(
-            0: // no finally
-        )
-    )
-    2: Stmt_TryCatch(
-        stmts: array(
-        )
-        catches: array(
-        )
-        finally: Stmt_Finally(
-            stmts: array(
-            )
-        )
-        comments: array(
-            0: // no catch
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/tryWithoutCatch.test b/vendor/nikic/php-parser/test/code/parser/stmt/tryWithoutCatch.test
deleted file mode 100644
index 5650d80ac58e96a694d315e0ac5c24c789d92c0f..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/tryWithoutCatch.test
+++ /dev/null
@@ -1,29 +0,0 @@
-Cannot use try without catch or finally
------
-<?php
-
-try {
-    foo();
-}
------
-Cannot use try without catch or finally from 3:1 to 5:1
-array(
-    0: Stmt_TryCatch(
-        stmts: array(
-            0: Stmt_Expression(
-                expr: Expr_FuncCall(
-                    name: Name(
-                        parts: array(
-                            0: foo
-                        )
-                    )
-                    args: array(
-                    )
-                )
-            )
-        )
-        catches: array(
-        )
-        finally: null
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/parser/stmt/unset.test b/vendor/nikic/php-parser/test/code/parser/stmt/unset.test
deleted file mode 100644
index c69679ef50198d6c01162f44e3f7755094781a65..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/parser/stmt/unset.test
+++ /dev/null
@@ -1,26 +0,0 @@
-Unset
------
-<?php
-
-unset($a);
-unset($b, $c);
------
-array(
-    0: Stmt_Unset(
-        vars: array(
-            0: Expr_Variable(
-                name: a
-            )
-        )
-    )
-    1: Stmt_Unset(
-        vars: array(
-            0: Expr_Variable(
-                name: b
-            )
-            1: Expr_Variable(
-                name: c
-            )
-        )
-    )
-)
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/comments.test b/vendor/nikic/php-parser/test/code/prettyPrinter/comments.test
deleted file mode 100644
index 34a9f93d8fd5acc27e774e4279bcf0bfd0acad07..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/comments.test
+++ /dev/null
@@ -1,67 +0,0 @@
-Comments
------
-<?php
-
-function justForIndentation()
-{
-    // Some text
-    # Some text
-    /* Some text */
-    /** Some text */
-    /**
-     * Some text.
-     * Some more text.
-     */
-    /*
-     * Some text.
-     * Some more text.
-     */
-    /*
-        Some text.
-        Some more text.
-    */
-    /* Some text.
-       More text. */
-    /* Some text.
-       More text.
-       Even more text. */
-    $foo;
-}
------
-function justForIndentation()
-{
-    // Some text
-    # Some text
-    /* Some text */
-    /** Some text */
-    /**
-     * Some text.
-     * Some more text.
-     */
-    /*
-     * Some text.
-     * Some more text.
-     */
-    /*
-        Some text.
-        Some more text.
-    */
-    /* Some text.
-       More text. */
-    /* Some text.
-       More text.
-       Even more text. */
-    $foo;
-}
------
-<?php
-
-function test()
-{
-    // empty
-}
------
-function test()
-{
-    // empty
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/commentsInCommaList.test b/vendor/nikic/php-parser/test/code/prettyPrinter/commentsInCommaList.test
deleted file mode 100644
index d0e42ef68a93a09defd9cc86bb807a6b3bae0507..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/commentsInCommaList.test
+++ /dev/null
@@ -1,53 +0,0 @@
-Comments in arrays and function calls
------
-<?php
-
-$arr = [
-    // Foo
-    $foo,
-    // Bar
-    $bar,
-    // Discarded
-];
-[
-    // Foo
-    $foo,
-    ,
-    // Bar
-    $bar,
-] = $arr;
-foo(
-    // Foo
-    $foo,
-    // Bar
-    $bar
-);
-new Foo(
-    // Foo
-    $foo
-);
------
-!!php7
-$arr = [
-    // Foo
-    $foo,
-    // Bar
-    $bar,
-];
-[
-    // Foo
-    $foo,
-    ,
-    // Bar
-    $bar,
-] = $arr;
-foo(
-    // Foo
-    $foo,
-    // Bar
-    $bar
-);
-new Foo(
-    // Foo
-    $foo
-);
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/expr/anonymousClass.test b/vendor/nikic/php-parser/test/code/prettyPrinter/expr/anonymousClass.test
deleted file mode 100644
index 1f24517125d98c8b7a1adb1f68bff93578ca7ad0..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/expr/anonymousClass.test
+++ /dev/null
@@ -1,27 +0,0 @@
-Anonymous classes
------
-<?php
-
-new class {};
-new class extends A implements B, C {};
-new class($a) extends A {
-    private $a;
-    public function __construct($a) {
-        $this->a = $a;
-    }
-};
------
-new class
-{
-};
-new class extends A implements B, C
-{
-};
-new class($a) extends A
-{
-    private $a;
-    public function __construct($a)
-    {
-        $this->a = $a;
-    }
-};
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/expr/arrayDestructuring.test b/vendor/nikic/php-parser/test/code/prettyPrinter/expr/arrayDestructuring.test
deleted file mode 100644
index bff1999e4ec0a2738e0be4ada5bf6f3e60820807..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/expr/arrayDestructuring.test
+++ /dev/null
@@ -1,14 +0,0 @@
-Array destructuring
------
-<?php
-
-[$a, $b] = [$c, $d];
-[, $a, , , $b, ,] = $foo;
-[, [[$a]], $b] = $bar;
-['a' => $b, 'b' => $a] = $baz;
------
-!!php7
-[$a, $b] = [$c, $d];
-[, $a, , , $b, ] = $foo;
-[, [[$a]], $b] = $bar;
-['a' => $b, 'b' => $a] = $baz;
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/expr/arraySpread.test b/vendor/nikic/php-parser/test/code/prettyPrinter/expr/arraySpread.test
deleted file mode 100644
index 5e8393ff27933f3b4d0583ed5abbac2dc927ede9..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/expr/arraySpread.test
+++ /dev/null
@@ -1,8 +0,0 @@
-Array spread
------
-<?php
-
-[$a, $b] = [...$c, ...$d];
------
-!!php7
-[$a, $b] = [...$c, ...$d];
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/expr/arrow_function.test b/vendor/nikic/php-parser/test/code/prettyPrinter/expr/arrow_function.test
deleted file mode 100644
index fe8d8791b59e3974426ebf82dee1508900c88d0b..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/expr/arrow_function.test
+++ /dev/null
@@ -1,18 +0,0 @@
-Arrow function
------
-<?php
-
-fn($a) => $a;
-fn($x = 42) => $x;
-fn(&$x) => $x;
-fn&($x) => $x;
-static fn($x, ...$rest) => $rest;
-fn(): int => $x;
------
-!!php7
-fn($a) => $a;
-fn($x = 42) => $x;
-fn(&$x) => $x;
-fn&($x) => $x;
-static fn($x, ...$rest) => $rest;
-fn(): int => $x;
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/expr/call.test b/vendor/nikic/php-parser/test/code/prettyPrinter/expr/call.test
deleted file mode 100644
index 0ec8925cf2970605c4f389b374124ebe20af45b0..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/expr/call.test
+++ /dev/null
@@ -1,13 +0,0 @@
-Calls
------
-<?php
-
-f($a);
-f(&$a);
-f(...$a);
-f($a, &$b, ...$c);
------
-f($a);
-f(&$a);
-f(...$a);
-f($a, &$b, ...$c);
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/expr/closure.test b/vendor/nikic/php-parser/test/code/prettyPrinter/expr/closure.test
deleted file mode 100644
index 7e4fcfd05dae7a28f1d4c3746a03064018950e8f..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/expr/closure.test
+++ /dev/null
@@ -1,18 +0,0 @@
-Closures
------
-<?php
-
-$closureWithArgs = function ($arg1, $arg2) {
-    $comment = 'closure body';
-};
-
-$closureWithArgsAndVars = function ($arg1, $arg2) use($var1, $var2) {
-    $comment = 'closure body';
-};
------
-$closureWithArgs = function ($arg1, $arg2) {
-    $comment = 'closure body';
-};
-$closureWithArgsAndVars = function ($arg1, $arg2) use($var1, $var2) {
-    $comment = 'closure body';
-};
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/expr/constant_deref.test b/vendor/nikic/php-parser/test/code/prettyPrinter/expr/constant_deref.test
deleted file mode 100644
index 1371d42252e8c967fff64741b9bdd8443a66d440..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/expr/constant_deref.test
+++ /dev/null
@@ -1,13 +0,0 @@
-Constant/literal dereferencing
------
-<?php
-
-FOO[0];
-FOO::BAR[0];
-'FOO'[0];
-array(FOO)[0];
------
-FOO[0];
-FOO::BAR[0];
-'FOO'[0];
-array(FOO)[0];
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/expr/docStrings.test b/vendor/nikic/php-parser/test/code/prettyPrinter/expr/docStrings.test
deleted file mode 100644
index a4a60aceade7a9ad647d6d6ac81f76074de076b7..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/expr/docStrings.test
+++ /dev/null
@@ -1,86 +0,0 @@
-Literals
------
-<?php
-
-<<<'STR'
-STR;
-<<<STR
-STR;
-
-<<<'STR'
-A
-B
-STR;
-<<<STR
-A
-B
-STR;
-
-<<<'STR'
-a\nb$c
-STR;
-<<<STR
-a\\nb\$c
-STR;
-
-<<<STR
-a$b
-{$c->d}
-STR;
-
-call(
-    <<<STR
-A
-STR
-    , <<<STR
-B
-STR
-);
-
-function test() {
-    <<<STR
-Foo
-STR;
-    <<<STR
-    Bar
-STR;
-}
------
-<<<'STR'
-STR;
-<<<STR
-STR;
-<<<'STR'
-A
-B
-STR;
-<<<STR
-A
-B
-STR;
-<<<'STR'
-a\nb$c
-STR;
-<<<STR
-a\\nb\$c
-STR;
-<<<STR
-a{$b}
-{$c->d}
-STR;
-call(<<<STR
-A
-STR
-, <<<STR
-B
-STR
-);
-function test()
-{
-    <<<STR
-Foo
-STR;
-    <<<STR
-    Bar
-STR;
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/expr/include.test b/vendor/nikic/php-parser/test/code/prettyPrinter/expr/include.test
deleted file mode 100644
index 3c4077987643f3fdfc834d639cd5e0219f8f0bc4..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/expr/include.test
+++ /dev/null
@@ -1,7 +0,0 @@
-Include
------
-<?php
-
-(include $foo) && (include $bar);
------
-(include $foo) && (include $bar);
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/expr/intrinsics.test b/vendor/nikic/php-parser/test/code/prettyPrinter/expr/intrinsics.test
deleted file mode 100644
index f1a1adcd535988fa33909906ee9454fef0cf1571..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/expr/intrinsics.test
+++ /dev/null
@@ -1,29 +0,0 @@
-isset, empty, unset, exit, die, clone, eval
------
-<?php
-
-isset($a, $a[$b]);
-empty($a);
-empty('foo');
-unset($a, $a[$b]);
-exit;
-exit();
-exit(1);
-die;
-die();
-die('foo');
-clone $foo;
-eval('str');
------
-isset($a, $a[$b]);
-empty($a);
-empty('foo');
-unset($a, $a[$b]);
-exit;
-exit;
-exit(1);
-die;
-die;
-die('foo');
-clone $foo;
-eval('str');
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/expr/list.test b/vendor/nikic/php-parser/test/code/prettyPrinter/expr/list.test
deleted file mode 100644
index 608ced6a69cedf7e49221f8569170ea32a9e3f1e..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/expr/list.test
+++ /dev/null
@@ -1,19 +0,0 @@
-list()
------
-<?php
-
-list() = $a;
-list($a) = $b;
-list($a, $b, $c) = $d;
-list(, $a) = $b;
-list(, , $a, , $b) = $c;
-list(list($a)) = $b;
-list(, list(, list(, $a), $b)) = $c;
------
-list() = $a;
-list($a) = $b;
-list($a, $b, $c) = $d;
-list(, $a) = $b;
-list(, , $a, , $b) = $c;
-list(list($a)) = $b;
-list(, list(, list(, $a), $b)) = $c;
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/expr/literals.test b/vendor/nikic/php-parser/test/code/prettyPrinter/expr/literals.test
deleted file mode 100644
index f649b5d0cc7b9da1d13ea7d9423128b3cd313f8b..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/expr/literals.test
+++ /dev/null
@@ -1,158 +0,0 @@
-Literals
------
-<?php
-
-// magic constants
-__LINE__;
-__FILE__;
-__DIR__;
-__FUNCTION__;
-__CLASS__;
-__TRAIT__;
-__METHOD__;
-__NAMESPACE__;
-
-// not actually literals, but close
-null;
-true;
-false;
-NULL;
-TRUE;
-FALSE;
-
-// integers (normalized to decimal)
-0;
-11;
-011;
-0x11;
-0b11;
-
-// floats (normalized to ... something)
-0.;
-.0;
-0.0;
-0e1000;
-1.0;
-1e100;
-1e1000;
-1E-100;
-1000000000000000000000000000000000000000000000000000000000000000000000000000000000000;
-378282246310005.0;
-10000000000000002.0;
-
-// strings (single quoted)
-'a';
-'a
-b';
-'a\'b';
-'a\b';
-'a\\';
-
-// strings (double quoted)
-"a";
-"a\nb";
-"a'b";
-"a\b";
-"$a";
-"a$b";
-"$a$b";
-"$a $b";
-"a${b}c";
-"a{$b}c";
-"a$a[b]c";
-"\{$A}";
-"\{ $A }";
-"\\{$A}";
-"\\{ $A }";
-"{$$A}[B]";
-"$$A[B]";
-
-// make sure indentation doesn't mess anything up
-function foo()
-{
-    "a\nb";
-    'a
-b';
-    'a
-    b';
-}
-
-// shell exec (similar to double quoted string)
-`foo`;
-`foo$a`;
-`foo{$a}bar`;
-`\`\'\"`;
------
-// magic constants
-__LINE__;
-__FILE__;
-__DIR__;
-__FUNCTION__;
-__CLASS__;
-__TRAIT__;
-__METHOD__;
-__NAMESPACE__;
-// not actually literals, but close
-null;
-true;
-false;
-NULL;
-TRUE;
-FALSE;
-// integers (normalized to decimal)
-0;
-11;
-011;
-0x11;
-0b11;
-// floats (normalized to ... something)
-0.0;
-0.0;
-0.0;
-0.0;
-1.0;
-1.0E+100;
-\INF;
-1.0E-100;
-1.0E+84;
-378282246310005.0;
-10000000000000002.0;
-// strings (single quoted)
-'a';
-'a
-b';
-'a\'b';
-'a\\b';
-'a\\';
-// strings (double quoted)
-"a";
-"a\nb";
-"a'b";
-"a\\b";
-"{$a}";
-"a{$b}";
-"{$a}{$b}";
-"{$a} {$b}";
-"a{$b}c";
-"a{$b}c";
-"a{$a['b']}c";
-"\\{{$A}}";
-"\\{ {$A} }";
-"\\{$A}";
-"\\{ {$A} }";
-"{${$A}}[B]";
-"\${$A['B']}";
-// make sure indentation doesn't mess anything up
-function foo()
-{
-    "a\nb";
-    'a
-b';
-    'a
-    b';
-}
-// shell exec (similar to double quoted string)
-`foo`;
-`foo{$a}`;
-`foo{$a}bar`;
-`\`\\'\\"`;
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/expr/numbers.test b/vendor/nikic/php-parser/test/code/prettyPrinter/expr/numbers.test
deleted file mode 100644
index c85f36bd82d18a3cfda5ffa72550ffbf0fc8ef9b..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/expr/numbers.test
+++ /dev/null
@@ -1,35 +0,0 @@
-Number literals
------
-<?php
-
-0;
-+0;
--0;
-0.0;
--0.0;
-42;
--42;
-42.0;
--42.0;
-42.5;
--42.5;
-1e42;
--1e42;
-1e1000;
--1e1000;
------
-0;
-+0;
--0;
-0.0;
--0.0;
-42;
--42;
-42.0;
--42.0;
-42.5;
--42.5;
-1.0E+42;
--1.0E+42;
-\INF;
--\INF;
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/expr/operators.test b/vendor/nikic/php-parser/test/code/prettyPrinter/expr/operators.test
deleted file mode 100644
index 2b5ab01d6b6e3157e351003ca5bfe5344141058e..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/expr/operators.test
+++ /dev/null
@@ -1,151 +0,0 @@
-Basic operators
------
-<?php
-
-$a ** $b;
-
-++$a;
---$a;
-$a++;
-$a--;
-
-@$a;
-~$a;
--$a;
-+$a;
-
-(int) $a;
-(integer) $a;
-(float) $a;
-(double) $a;
-(real) $a;
-( float) $a;
-(double ) $a;
-( REAL ) $a;
-(string) $a;
-(binary) $a;
-(array) $a;
-(object) $a;
-(bool) $a;
-(boolean) $a;
-(unset) $a;
-
-$a * $b;
-$a / $b;
-$a % $b;
-$a + $b;
-$a - $b;
-$a . $b;
-$a << $b;
-$a >> $b;
-$a < $b;
-$a <= $b;
-$a > $b;
-$a >= $b;
-$a == $b;
-$a != $b;
-$a <> $b;
-$a === $b;
-$a !== $b;
-$a <=> $b;
-$a & $b;
-$a ^ $b;
-$a | $b;
-$a && $b;
-$a || $b;
-$a ? $b : $c;
-$a ?: $c;
-$a ?? $c;
-$a = $b;
-$a **= $b;
-$a ??= $c;
-$a *= $b;
-$a /= $b;
-$a %= $b;
-$a += $b;
-$a -= $b;
-$a .= $b;
-$a <<= $b;
-$a >>= $b;
-$a &= $b;
-$a ^= $b;
-$a |= $b;
-$a =& $b;
-
-$a and $b;
-$a xor $b;
-$a or $b;
-
-$a instanceof Foo;
-$a instanceof $b;
------
-$a ** $b;
-++$a;
---$a;
-$a++;
-$a--;
-@$a;
-~$a;
--$a;
-+$a;
-(int) $a;
-(int) $a;
-(float) $a;
-(double) $a;
-(real) $a;
-(float) $a;
-(double) $a;
-(real) $a;
-(string) $a;
-(string) $a;
-(array) $a;
-(object) $a;
-(bool) $a;
-(bool) $a;
-(unset) $a;
-$a * $b;
-$a / $b;
-$a % $b;
-$a + $b;
-$a - $b;
-$a . $b;
-$a << $b;
-$a >> $b;
-$a < $b;
-$a <= $b;
-$a > $b;
-$a >= $b;
-$a == $b;
-$a != $b;
-$a != $b;
-$a === $b;
-$a !== $b;
-$a <=> $b;
-$a & $b;
-$a ^ $b;
-$a | $b;
-$a && $b;
-$a || $b;
-$a ? $b : $c;
-$a ?: $c;
-$a ?? $c;
-$a = $b;
-$a **= $b;
-$a ??= $c;
-$a *= $b;
-$a /= $b;
-$a %= $b;
-$a += $b;
-$a -= $b;
-$a .= $b;
-$a <<= $b;
-$a >>= $b;
-$a &= $b;
-$a ^= $b;
-$a |= $b;
-$a =& $b;
-$a and $b;
-$a xor $b;
-$a or $b;
-$a instanceof Foo;
-$a instanceof $b;
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/expr/parentheses.test b/vendor/nikic/php-parser/test/code/prettyPrinter/expr/parentheses.test
deleted file mode 100644
index a49c1108d277546c548547aa9686ac6e4135cc3d..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/expr/parentheses.test
+++ /dev/null
@@ -1,86 +0,0 @@
-Pretty printer generates least-parentheses output
------
-<?php
-
-echo 'abc' . 'cde' . 'fgh';
-echo 'abc' . ('cde' . 'fgh');
-
-echo 'abc' . 1 + 2 . 'fgh';
-echo 'abc' . (1 + 2) . 'fgh';
-
-echo 1 * 2 + 3 / 4 % 5 . 6;
-echo 1 * (2 + 3) / (4 % (5 . 6));
-
-$a = $b = $c = $d = $f && true;
-($a = $b = $c = $d = $f) && true;
-$a = $b = $c = $d = $f and true;
-$a = $b = $c = $d = ($f and true);
-
-$a ? $b : $c ? $d : $e ? $f : $g;
-$a ? $b : ($c ? $d : ($e ? $f : $g));
-$a ? $b ? $c : $d : $f;
-
-$a ?? $b ?? $c;
-($a ?? $b) ?? $c;
-$a ?? ($b ? $c : $d);
-$a || ($b ?? $c);
-
-(1 > 0) > (1 < 0);
-++$a + $b;
-$a + $b++;
-
-$a ** $b ** $c;
-($a ** $b) ** $c;
--1 ** 2;
-
-yield from $a and yield from $b;
-yield from ($a and yield from $b);
-
-print ($a and print $b);
-
--(-$a);
-+(+$a);
--(--$a);
-+(++$a);
-
-// The following will currently add unnecessary parentheses, because the pretty printer is not aware that assignment
-// and incdec only work on variables.
-!$a = $b;
-++$a ** $b;
-$a ** $b++;
------
-echo 'abc' . 'cde' . 'fgh';
-echo 'abc' . ('cde' . 'fgh');
-echo 'abc' . 1 + 2 . 'fgh';
-echo 'abc' . (1 + 2) . 'fgh';
-echo 1 * 2 + 3 / 4 % 5 . 6;
-echo 1 * (2 + 3) / (4 % (5 . 6));
-$a = $b = $c = $d = $f && true;
-($a = $b = $c = $d = $f) && true;
-$a = $b = $c = $d = $f and true;
-$a = $b = $c = $d = ($f and true);
-$a ? $b : $c ? $d : $e ? $f : $g;
-$a ? $b : ($c ? $d : ($e ? $f : $g));
-$a ? $b ? $c : $d : $f;
-$a ?? $b ?? $c;
-($a ?? $b) ?? $c;
-$a ?? ($b ? $c : $d);
-$a || ($b ?? $c);
-(1 > 0) > (1 < 0);
-++$a + $b;
-$a + $b++;
-$a ** $b ** $c;
-($a ** $b) ** $c;
--1 ** 2;
-yield from $a and yield from $b;
-yield from ($a and yield from $b);
-print ($a and print $b);
--(-$a);
-+(+$a);
--(--$a);
-+(++$a);
-// The following will currently add unnecessary parentheses, because the pretty printer is not aware that assignment
-// and incdec only work on variables.
-!($a = $b);
-(++$a) ** $b;
-$a ** ($b++);
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/expr/shortArraySyntax.test b/vendor/nikic/php-parser/test/code/prettyPrinter/expr/shortArraySyntax.test
deleted file mode 100644
index 082c2e047f3f8687cb9dd3d72e216f3171591011..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/expr/shortArraySyntax.test
+++ /dev/null
@@ -1,11 +0,0 @@
-Short array syntax
------
-<?php
-
-[];
-array(1, 2, 3);
-['a' => 'b', 'c' => 'd'];
------
-[];
-array(1, 2, 3);
-['a' => 'b', 'c' => 'd'];
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/expr/stringEscaping.test b/vendor/nikic/php-parser/test/code/prettyPrinter/expr/stringEscaping.test
deleted file mode 100644
index 02877ad328727f3c678e5e90743631b3368f54ea..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/expr/stringEscaping.test
+++ /dev/null
@@ -1,23 +0,0 @@
-Escape sequences in double-quoted strings
------
-<?php
-"\n\r\t\f\v\$\"\\";
-"@@{ implode(range("\0", "\37")) }@@";
-"\0000\0001";
-
-<<<DOC
-\n\r\t\f\v\$\"\\
-@@{ implode(range("\0", "\37")) }@@
-\0000\0001
-DOC;
-
------
-"\n\r\t\f\v\$\"\\";
-"\0\1\2\3\4\5\6\7\10\t\n\v\f\r\16\17\20\21\22\23\24\25\26\27\30\31\32\33\34\35\36\37";
-"\0000\0001";
-<<<DOC
-@@{ "\n\r" }@@\t\f\v\$\\"\\
-\0\1\2\3\4\5\6\7\10\t@@{ "\n" }@@\v\f@@{ "\r" }@@\16\17\20\21\22\23\24\25\26\27\30\31\32\33\34\35\36\37
-\0000\0001
-DOC
-;
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/expr/uvs.test b/vendor/nikic/php-parser/test/code/prettyPrinter/expr/uvs.test
deleted file mode 100644
index e336fb578ac54b5c9df10c3955d7a863904bcb30..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/expr/uvs.test
+++ /dev/null
@@ -1,23 +0,0 @@
-Uniform variable syntax
------
-<?php
-
-(function() {})();
-array('a', 'b')()();
-A::$b::$c;
-$A::$b[$c]();
-$A::{$b[$c]}();
-A::$$b[$c]();
-($a->b)();
-(A::$b)();
------
-!!php7
-(function () {
-})();
-array('a', 'b')()();
-A::$b::$c;
-$A::$b[$c]();
-$A::{$b[$c]}();
-A::${$b}[$c]();
-($a->b)();
-(A::$b)();
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/expr/variables.test b/vendor/nikic/php-parser/test/code/prettyPrinter/expr/variables.test
deleted file mode 100644
index 4e0fa2e123aae0843b3953249a44b6042431fa80..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/expr/variables.test
+++ /dev/null
@@ -1,73 +0,0 @@
-Variables
------
-<?php
-
-$a;
-$$a;
-${$a};
-$a->b;
-$a->b();
-$a->b($c);
-$a->$b();
-$a->{$b}();
-$a->$b[$c]();
-$$a->b;
-$a[$b];
-$a[$b]();
-$$a[$b];
-$a::B;
-$a::$b;
-$a::b();
-$a::b($c);
-$a::$b();
-$a::$b[$c];
-$a::$b[$c]($d);
-$a::{$b[$c]}($d);
-$a::{$b->c}();
-A::$$b[$c]();
-a();
-$a();
-$a()[$b];
-$a->b()[$c];
-$a::$b()[$c];
-(new A)->b;
-(new A())->b();
-(new $$a)[$b];
-(new $a->b)->c;
-
-global $a, $$a, $$a[$b], $$a->b;
------
-!!php5
-$a;
-${$a};
-${$a};
-$a->b;
-$a->b();
-$a->b($c);
-$a->{$b}();
-$a->{$b}();
-$a->{$b[$c]}();
-${$a}->b;
-$a[$b];
-$a[$b]();
-${$a[$b]};
-$a::B;
-$a::$b;
-$a::b();
-$a::b($c);
-$a::$b();
-$a::$b[$c];
-$a::{$b[$c]}($d);
-$a::{$b[$c]}($d);
-$a::{$b->c}();
-A::${$b[$c]}();
-a();
-$a();
-$a()[$b];
-$a->b()[$c];
-$a::$b()[$c];
-(new A())->b;
-(new A())->b();
-(new ${$a}())[$b];
-(new $a->b())->c;
-global $a, ${$a}, ${$a[$b]}, ${$a->b};
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/expr/yield.test b/vendor/nikic/php-parser/test/code/prettyPrinter/expr/yield.test
deleted file mode 100644
index 12ab7dec1cbf35f3d901fec94c64a24863d415c3..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/expr/yield.test
+++ /dev/null
@@ -1,46 +0,0 @@
-Yield
------
-<?php
-
-function gen()
-{
-    yield;
-    yield $a;
-    yield $a => $b;
-    $a = yield;
-    $a = (yield $b);
-    $a = (yield $b => $c);
-}
-// TODO Get rid of parens for cases 2 and 3
------
-function gen()
-{
-    yield;
-    (yield $a);
-    (yield $a => $b);
-    $a = yield;
-    $a = (yield $b);
-    $a = (yield $b => $c);
-}
-// TODO Get rid of parens for cases 2 and 3
------
-<?php
-
-function gen()
-{
-    $a = yield $b;
-    $a = yield $b => $c;
-    yield from $a;
-    $a = yield from $b;
-}
-// TODO Get rid of parens for last case
------
-!!php7
-function gen()
-{
-    $a = (yield $b);
-    $a = (yield $b => $c);
-    yield from $a;
-    $a = (yield from $b);
-}
-// TODO Get rid of parens for last case
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/inlineHTMLandPHPtest.file-test b/vendor/nikic/php-parser/test/code/prettyPrinter/inlineHTMLandPHPtest.file-test
deleted file mode 100644
index b33eb527dfc4d6f8fea78ed2cb8a8ba66270c68c..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/inlineHTMLandPHPtest.file-test
+++ /dev/null
@@ -1,58 +0,0 @@
-File containing both inline HTML and PHP
------
-HTML
-<?php
-echo 'PHP';
------
-HTML
-<?php
-echo 'PHP';
------
-<?php
-echo 'PHP';
-?>
-HTML
------
-<?php
-
-echo 'PHP';
-?>
-HTML
------
-HTML
-<?php
-echo 'PHP';
-?>
-HTML
------
-HTML
-<?php
-echo 'PHP';
-?>
-HTML
------
-HTML
-<?php
-echo 'PHP';
-?>
-HTML
-<?php
-echo 'PHP';
-?>
-HTML
------
-HTML
-<?php
-echo 'PHP';
-?>
-HTML
-<?php
-echo 'PHP';
-?>
-HTML
------
-HTML<?php echo 'PHP'; ?>HTML
------
-HTML<?php
-echo 'PHP';
-?>HTML
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/nestedInlineHTML.test b/vendor/nikic/php-parser/test/code/prettyPrinter/nestedInlineHTML.test
deleted file mode 100644
index bc611f7b954f8af7e084a5e8e0d1d12fdd6e4cd4..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/nestedInlineHTML.test
+++ /dev/null
@@ -1,16 +0,0 @@
-InlineHTML node nested inside other code
------
-<?php
-
-function test() {
-    ?>
-Test
-    <?php
-}
------
-function test()
-{
-    ?>
-Test
-    <?php
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/onlyInlineHTML.file-test b/vendor/nikic/php-parser/test/code/prettyPrinter/onlyInlineHTML.file-test
deleted file mode 100644
index e980719140f98a7e1993c69da0b1f8d3464eb30a..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/onlyInlineHTML.file-test
+++ /dev/null
@@ -1,19 +0,0 @@
-File containing only inline HTML
------
-Hallo World
-Foo Bar
-Bar Foo
-World Hallo
------
-Hallo World
-Foo Bar
-Bar Foo
-World Hallo
------
-
-
-Test
------
-
-
-Test
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/onlyPHP.file-test b/vendor/nikic/php-parser/test/code/prettyPrinter/onlyPHP.file-test
deleted file mode 100644
index 9550b107ef5d5877acecc6ce78d161ff1502c978..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/onlyPHP.file-test
+++ /dev/null
@@ -1,16 +0,0 @@
-File containing only PHP
------
-<?php
-
-echo 'Foo Bar';
-echo 'Bar Foo';
------
-<?php
-
-echo 'Foo Bar';
-echo 'Bar Foo';
------
-<?php
-
------
-<?php
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/alias.test b/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/alias.test
deleted file mode 100644
index ef5695d8e6391280c654da74bddfc7731edf7466..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/alias.test
+++ /dev/null
@@ -1,20 +0,0 @@
-Aliases (namespacing)
------
-<?php
-
-use A\B;
-use C\D as E;
-use F\G as H, J;
-
-use function foo\bar;
-use function foo\bar as baz;
-use const foo\BAR;
-use const foo\BAR as BAZ;
------
-use A\B;
-use C\D as E;
-use F\G as H, J;
-use function foo\bar;
-use function foo\bar as baz;
-use const foo\BAR;
-use const foo\BAR as BAZ;
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/break_continue.test b/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/break_continue.test
deleted file mode 100644
index 4773df1d3e4b9c4b8eafcda85e2935642b9d0b63..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/break_continue.test
+++ /dev/null
@@ -1,13 +0,0 @@
-break/continue
------
-<?php
-
-continue;
-continue 2;
-break;
-break 2;
------
-continue;
-continue 2;
-break;
-break 2;
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/class.test b/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/class.test
deleted file mode 100644
index 5225d2a6ec2035a10547e8e2f675978971f21a88..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/class.test
+++ /dev/null
@@ -1,53 +0,0 @@
-Class
------
-<?php
-
-class Foo extends Bar implements ABC, \DEF, namespace\GHI
-{
-    var $a = 'foo';
-    private $b = 'bar';
-    static $c = 'baz';
-    function test()
-    {
-        $this->a = 'bar';
-        echo 'test';
-    }
-
-    protected function baz() {}
-    public function foo() {}
-    abstract static function bar() {}
-}
-
-trait Bar
-{
-    function test()
-    {
-    }
-}
------
-class Foo extends Bar implements ABC, \DEF, namespace\GHI
-{
-    var $a = 'foo';
-    private $b = 'bar';
-    static $c = 'baz';
-    function test()
-    {
-        $this->a = 'bar';
-        echo 'test';
-    }
-    protected function baz()
-    {
-    }
-    public function foo()
-    {
-    }
-    static abstract function bar()
-    {
-    }
-}
-trait Bar
-{
-    function test()
-    {
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/class_const.test b/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/class_const.test
deleted file mode 100644
index e73ad4304bed0010eef092bcd0823f75c91fae1e..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/class_const.test
+++ /dev/null
@@ -1,20 +0,0 @@
-Class constants
------
-<?php
-
-class Foo
-{
-    const A = 1, B = 2;
-    public const C = 3, D = 4;
-    protected const E = 5, F = 6;
-    private const G = 7, H = 8;
-}
------
-!!php7
-class Foo
-{
-    const A = 1, B = 2;
-    public const C = 3, D = 4;
-    protected const E = 5, F = 6;
-    private const G = 7, H = 8;
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/const.test b/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/const.test
deleted file mode 100644
index 6b1764206b15124dd12a46d5474a0c4a5d09980a..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/const.test
+++ /dev/null
@@ -1,11 +0,0 @@
-Constant declarations
------
-<?php
-
-const FOO = 'BAR';
-const FOO = 1 + 1;
-const FOO = BAR, BAR = FOO;
------
-const FOO = 'BAR';
-const FOO = 1 + 1;
-const FOO = BAR, BAR = FOO;
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/declare.test b/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/declare.test
deleted file mode 100644
index fd48e6953df08ea330dfd824bf665502600d180e..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/declare.test
+++ /dev/null
@@ -1,17 +0,0 @@
-declare
------
-<?php
-
-declare (strict_types=1);
-declare (ticks=1) {
-    foo();
-}
-declare (ticks=2) {
-}
------
-declare (strict_types=1);
-declare (ticks=1) {
-    foo();
-}
-declare (ticks=2) {
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/do_while.test b/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/do_while.test
deleted file mode 100644
index 532d475a040b66f393ccce34618f04ee3e1422ca..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/do_while.test
+++ /dev/null
@@ -1,10 +0,0 @@
-doWhile
------
-<?php
-
-do {
-
-} while (true);
------
-do {
-} while (true);
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/for.test b/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/for.test
deleted file mode 100644
index ef7ac4a93bc7a77955667ea0279467344721a3a2..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/for.test
+++ /dev/null
@@ -1,28 +0,0 @@
-for
------
-<?php
-
-for ($i = 0; $i < 10; $i++) {
-
-}
-
-for ($i = 0,$j = 0; $i < 10; $i++) {
-
-}
-
-for ($i = 0; $i < 10;) {
-
-}
-
-for (;;) {
-
-}
------
-for ($i = 0; $i < 10; $i++) {
-}
-for ($i = 0, $j = 0; $i < 10; $i++) {
-}
-for ($i = 0; $i < 10;) {
-}
-for (;;) {
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/foreach.test b/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/foreach.test
deleted file mode 100644
index 44c3a1acff13fa79ebc406530ba5b454cb110cce..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/foreach.test
+++ /dev/null
@@ -1,28 +0,0 @@
-foreach
------
-<?php
-
-foreach ($arr as $val) {
-
-}
-
-foreach ($arr as &$val) {
-
-}
-
-foreach ($arr as $key => $val) {
-
-}
-
-foreach ($arr as $key => &$val) {
-
-}
------
-foreach ($arr as $val) {
-}
-foreach ($arr as &$val) {
-}
-foreach ($arr as $key => $val) {
-}
-foreach ($arr as $key => &$val) {
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/function_signatures.test b/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/function_signatures.test
deleted file mode 100644
index af1088a051a31cb61bef67da0348a0419cdf8935..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/function_signatures.test
+++ /dev/null
@@ -1,43 +0,0 @@
-Function signatures
------
-<?php
-
-interface A
-{
-    function f1();
-    function f2($a, $b);
-    function f3(&$a);
-    function f4(A\B $a);
-    function f4(array $a);
-    function f5(callable $a);
-    function f6(&$a);
-    function f7(...$a);
-    function f8(&...$a);
-    function f9(A &$a);
-    function f10(A ...$a);
-    function f11(A &$a);
-    function f12(A &...$a);
-    function f13($a) : array;
-    function f14($a) : callable;
-    function f15($a) : B\C;
-}
------
-interface A
-{
-    function f1();
-    function f2($a, $b);
-    function f3(&$a);
-    function f4(A\B $a);
-    function f4(array $a);
-    function f5(callable $a);
-    function f6(&$a);
-    function f7(...$a);
-    function f8(&...$a);
-    function f9(A &$a);
-    function f10(A ...$a);
-    function f11(A &$a);
-    function f12(A &...$a);
-    function f13($a) : array;
-    function f14($a) : callable;
-    function f15($a) : B\C;
-}
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/global_static_variables.test b/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/global_static_variables.test
deleted file mode 100644
index eea776a5abb35dcb52847cef1cfcf1a730cb4381..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/global_static_variables.test
+++ /dev/null
@@ -1,11 +0,0 @@
-Global and static variables
------
-<?php
-
-global $a, $$a, ${$a[$a]};
-static $a, $b;
-static $a = 'foo', $b = 'bar';
------
-global $a, ${$a}, ${$a[$a]};
-static $a, $b;
-static $a = 'foo', $b = 'bar';
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/goto.test b/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/goto.test
deleted file mode 100644
index 61c781200c31133b1122db2264eb5c564693c71f..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/goto.test
+++ /dev/null
@@ -1,9 +0,0 @@
-goto
------
-<?php
-
-marker:
-goto marker;
------
-marker:
-goto marker;
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/groupUse.test b/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/groupUse.test
deleted file mode 100644
index de086c8773184349f1669a61cb89ce835bd39759..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/groupUse.test
+++ /dev/null
@@ -1,16 +0,0 @@
-Group use declaration
------
-<?php
-use A\{B};
-use A\{B\C, D};
-use A\B\{C\D, E};
-use function A\{b\c, d};
-use const A\{B\C, D};
-use A\B\{C\D, function b\c, const D};
------
-use A\{B};
-use A\{B\C, D};
-use A\B\{C\D, E};
-use function A\{b\c, d};
-use const A\{B\C, D};
-use A\B\{C\D, function b\c, const D};
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/haltCompiler.file-test b/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/haltCompiler.file-test
deleted file mode 100644
index a427a64c820dd49cf0dbcb66b0c0378d601622b8..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/haltCompiler.file-test
+++ /dev/null
@@ -1,27 +0,0 @@
-__halt_compiler
------
-<?php
-
-echo 'foo';
-__halt_compiler();
-!!!
-???
------
-<?php
-
-echo 'foo';
-__halt_compiler();
-!!!
-???
------
-<?php
-
-echo 'foo';
-__halt_compiler();
-<?php
------
-<?php
-
-echo 'foo';
-__halt_compiler();
-<?php
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/if.test b/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/if.test
deleted file mode 100644
index 8debb2ec3837ff10f743eb44720a7136412b042e..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/if.test
+++ /dev/null
@@ -1,16 +0,0 @@
-if/elseif/else
------
-<?php
-
-if ($expr) {
-
-} elseif ($expr2) {
-
-} else {
-
-}
------
-if ($expr) {
-} elseif ($expr2) {
-} else {
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/multiCatch.test b/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/multiCatch.test
deleted file mode 100644
index 8e3f12b4d83f6edba35d7d9d14cfb116a2449c24..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/multiCatch.test
+++ /dev/null
@@ -1,19 +0,0 @@
-Multi catch
------
-<?php
-try {
-    $x;
-} catch (X|Y $e1) {
-    $y;
-} catch (\A|B\C $e2) {
-    $z;
-}
------
-!!php7
-try {
-    $x;
-} catch (X|Y $e1) {
-    $y;
-} catch (\A|B\C $e2) {
-    $z;
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/namespaces.test b/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/namespaces.test
deleted file mode 100644
index 939470b5bc6a8d7554ad95c33cdbfa6fce3f23e3..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/namespaces.test
+++ /dev/null
@@ -1,50 +0,0 @@
-Namespaces
------
-<?php
-
-namespace Foo;
-
-function foo()
-{
-}
-
-namespace Bar;
-
-function bar()
-{
-}
------
-namespace Foo;
-
-function foo()
-{
-}
-namespace Bar;
-
-function bar()
-{
-}
------
-<?php
-
-namespace Foo {
-    function foo()
-    {
-    }
-}
-
-namespace {
-    function glob() {
-    }
-}
------
-namespace Foo {
-    function foo()
-    {
-    }
-}
-namespace {
-    function glob()
-    {
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/nullable_types.test b/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/nullable_types.test
deleted file mode 100644
index 6a40e2019a696318fe9f312f23b9674704906636..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/nullable_types.test
+++ /dev/null
@@ -1,11 +0,0 @@
-Nullable types
------
-<?php
-function test(?Foo $bar, ?string $foo, ?\Xyz $zyx) : ?Baz
-{
-}
------
-!!php7
-function test(?Foo $bar, ?string $foo, ?\Xyz $zyx) : ?Baz
-{
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/properties.test b/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/properties.test
deleted file mode 100644
index 5a78ec49299321d8af3afbb9e6277679fb7132d5..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/properties.test
+++ /dev/null
@@ -1,20 +0,0 @@
-Class properties
------
-<?php
-
-class A
-{
-    public $a;
-    public string $b;
-    protected static ?float $c = 5.0;
-    private static ?self $d;
-}
------
-!!php7
-class A
-{
-    public $a;
-    public string $b;
-    protected static ?float $c = 5.0;
-    private static ?self $d;
-}
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/switch.test b/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/switch.test
deleted file mode 100644
index 871ff54baa6f0bfd74583b88956c06ebb17ad353..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/switch.test
+++ /dev/null
@@ -1,37 +0,0 @@
-switch/case/default
------
-<?php
-
-switch ($expr) {
-    case 0:
-        echo 'First case, with a break';
-        break;
-    case 1:
-        echo 'Second case, which falls through';
-    case 2:
-    case 3:
-    case 4:
-        echo 'Third case, return instead of break';
-        return;
-    // Comment
-    default:
-        echo 'Default case';
-        break;
-}
------
-switch ($expr) {
-    case 0:
-        echo 'First case, with a break';
-        break;
-    case 1:
-        echo 'Second case, which falls through';
-    case 2:
-    case 3:
-    case 4:
-        echo 'Third case, return instead of break';
-        return;
-    // Comment
-    default:
-        echo 'Default case';
-        break;
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/throw.test b/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/throw.test
deleted file mode 100644
index 23408936a53e275e198a49c73bb9743027d28fe2..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/throw.test
+++ /dev/null
@@ -1,7 +0,0 @@
-throw
------
-<?php
-
-throw $e;
------
-throw $e;
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/traitUse.test b/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/traitUse.test
deleted file mode 100644
index 7455ea008bd8c9e174d03a1ef8773044aeb06171..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/traitUse.test
+++ /dev/null
@@ -1,25 +0,0 @@
-Trait uses and adaptations
------
-<?php
-
-class A
-{
-    use B, C, D {
-        f as g;
-        f as private;
-        f as private g;
-        B::f as g;
-        B::f insteadof C, D;
-    }
-}
------
-class A
-{
-    use B, C, D {
-        f as g;
-        f as private;
-        f as private g;
-        B::f as g;
-        B::f insteadof C, D;
-    }
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/tryCatch.test b/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/tryCatch.test
deleted file mode 100644
index 044934de9780e2b7df62c50b57c260c5f52ca134..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/tryCatch.test
+++ /dev/null
@@ -1,24 +0,0 @@
-tryCatch
------
-<?php
-
-try {
-
-} catch (Exception $e) {
-
-}
-
-try {
-} catch (Exception $e) {
-
-} finally {
-
-}
------
-try {
-} catch (Exception $e) {
-}
-try {
-} catch (Exception $e) {
-} finally {
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/while.test b/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/while.test
deleted file mode 100644
index 4e6dadaeb9071b5a9fed9ea72a47cd838addf4ac..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/code/prettyPrinter/stmt/while.test
+++ /dev/null
@@ -1,10 +0,0 @@
-while
------
-<?php
-
-while (true) {
-
-}
------
-while (true) {
-}
\ No newline at end of file
diff --git a/vendor/nikic/php-parser/test/updateTests.php b/vendor/nikic/php-parser/test/updateTests.php
deleted file mode 100644
index 40d0d0a965a0971df5943d7bda7be4d3f4db6cc9..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test/updateTests.php
+++ /dev/null
@@ -1,32 +0,0 @@
-<?php
-
-namespace PhpParser;
-
-require __DIR__ . '/bootstrap.php';
-require __DIR__ . '/PhpParser/CodeTestParser.php';
-require __DIR__ . '/PhpParser/CodeParsingTest.php';
-
-$dir = __DIR__ . '/code/parser';
-
-$testParser = new CodeTestParser;
-$codeParsingTest = new CodeParsingTest;
-foreach (filesInDir($dir, 'test') as $fileName => $code) {
-    if (false !== strpos($code, '@@{')) {
-        // Skip tests with evaluate segments
-        continue;
-    }
-
-    list($name, $tests) = $testParser->parseTest($code, 2);
-    $newTests = [];
-    foreach ($tests as list($modeLine, list($input, $expected))) {
-        $modes = null !== $modeLine ? array_fill_keys(explode(',', $modeLine), true) : [];
-        list($parser5, $parser7) = $codeParsingTest->createParsers($modes);
-        list(, $output) = isset($modes['php5'])
-            ? $codeParsingTest->getParseOutput($parser5, $input, $modes)
-            : $codeParsingTest->getParseOutput($parser7, $input, $modes);
-        $newTests[] = [$modeLine, [$input, $output]];
-    }
-
-    $newCode = $testParser->reconstructTest($name, $newTests);
-    file_put_contents($fileName, $newCode);
-}
diff --git a/vendor/nikic/php-parser/test_old/run-php-src.sh b/vendor/nikic/php-parser/test_old/run-php-src.sh
deleted file mode 100755
index d4f38894694252caa6d49b7549d265f02d6d4633..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test_old/run-php-src.sh
+++ /dev/null
@@ -1,4 +0,0 @@
-wget -q https://github.com/php/php-src/archive/PHP-7.4.tar.gz
-mkdir -p ./data/php-src
-tar -xzf ./PHP-7.4.tar.gz -C ./data/php-src --strip-components=1
-php -n test_old/run.php --verbose --no-progress PHP7 ./data/php-src
diff --git a/vendor/nikic/php-parser/test_old/run.php b/vendor/nikic/php-parser/test_old/run.php
deleted file mode 100644
index 8b74ab479bc8f80c03897bfe34b0006813b9d921..0000000000000000000000000000000000000000
--- a/vendor/nikic/php-parser/test_old/run.php
+++ /dev/null
@@ -1,271 +0,0 @@
-<?php
-
-error_reporting(E_ALL | E_STRICT);
-ini_set('short_open_tag', false);
-
-if ('cli' !== php_sapi_name()) {
-    die('This script is designed for running on the command line.');
-}
-
-function showHelp($error) {
-    die($error . "\n\n" .
-<<<OUTPUT
-This script has to be called with the following signature:
-
-    php run.php [--no-progress] testType pathToTestFiles
-
-The test type must be one of: PHP5, PHP7 or Symfony.
-
-The following options are available:
-
-    --no-progress    Disables showing which file is currently tested.
-
-OUTPUT
-    );
-}
-
-$options = array();
-$arguments = array();
-
-// remove script name from argv
-array_shift($argv);
-
-foreach ($argv as $arg) {
-    if ('-' === $arg[0]) {
-        $options[] = $arg;
-    } else {
-        $arguments[] = $arg;
-    }
-}
-
-if (count($arguments) !== 2) {
-    showHelp('Too little arguments passed!');
-}
-
-$showProgress = true;
-$verbose = false;
-foreach ($options as $option) {
-    if ($option === '--no-progress') {
-        $showProgress = false;
-    } elseif ($option === '--verbose') {
-        $verbose = true;
-    } else {
-        showHelp('Invalid option passed!');
-    }
-}
-
-$testType = $arguments[0];
-$dir = $arguments[1];
-
-switch ($testType) {
-    case 'Symfony':
-        $version = 'Php7';
-        $fileFilter = function($path) {
-            if (!preg_match('~\.php$~', $path)) {
-                return false;
-            }
-
-            if (preg_match('~(?:
-# invalid php code
-  dependency-injection.Tests.Fixtures.xml.xml_with_wrong_ext
-# difference in nop statement
-| framework-bundle.Resources.views.Form.choice_widget_options\.html
-# difference due to INF
-| yaml.Tests.InlineTest
-)\.php$~x', $path)) {
-                return false;
-            }
-
-            return true;
-        };
-        $codeExtractor = function($file, $code) {
-            return $code;
-        };
-        break;
-    case 'PHP5':
-    case 'PHP7':
-    $version = $testType === 'PHP5' ? 'Php5' : 'Php7';
-        $fileFilter = function($path) {
-            return preg_match('~\.phpt$~', $path);
-        };
-        $codeExtractor = function($file, $code) {
-            if (preg_match('~(?:
-# skeleton files
-  ext.gmp.tests.001
-| ext.skeleton.tests.00\d
-# multibyte encoded files
-| ext.mbstring.tests.zend_multibyte-01
-| Zend.tests.multibyte.multibyte_encoding_001
-| Zend.tests.multibyte.multibyte_encoding_004
-| Zend.tests.multibyte.multibyte_encoding_005
-# invalid code due to missing WS after opening tag
-| tests.run-test.bug75042-3
-# pretty print difference due to INF vs 1e1000
-| ext.standard.tests.general_functions.bug27678
-| tests.lang.bug24640
-| Zend.tests.bug74947
-# pretty print differences due to negative LNumbers
-| Zend.tests.neg_num_string
-| Zend.tests.bug72918
-# pretty print difference due to nop statements
-| ext.mbstring.tests.htmlent
-| ext.standard.tests.file.fread_basic
-# its too hard to emulate these on old PHP versions
-| Zend.tests.flexible-heredoc-complex-test[1-4]
-)\.phpt$~x', $file)) {
-                return null;
-            }
-
-            if (!preg_match('~--FILE--\s*(.*?)\n--[A-Z]+--~s', $code, $matches)) {
-                return null;
-            }
-            if (preg_match('~--EXPECT(?:F|REGEX)?--\s*(?:Parse|Fatal) error~', $code)) {
-                return null;
-            }
-
-            return $matches[1];
-        };
-        break;
-    default:
-        showHelp('Test type must be one of: PHP5, PHP7 or Symfony');
-}
-
-require_once __DIR__ . '/../vendor/autoload.php';
-
-$lexer = new PhpParser\Lexer\Emulative(['usedAttributes' => [
-    'comments', 'startLine', 'endLine', 'startTokenPos', 'endTokenPos',
-]]);
-$parserName = 'PhpParser\Parser\\' . $version;
-/** @var PhpParser\Parser $parser */
-$parser = new $parserName($lexer);
-$prettyPrinter = new PhpParser\PrettyPrinter\Standard;
-$nodeDumper = new PhpParser\NodeDumper;
-
-$cloningTraverser = new PhpParser\NodeTraverser;
-$cloningTraverser->addVisitor(new PhpParser\NodeVisitor\CloningVisitor);
-
-$parseFail = $fpppFail = $ppFail = $compareFail = $count = 0;
-
-$readTime = $parseTime = $cloneTime = 0;
-$fpppTime = $ppTime = $reparseTime = $compareTime = 0;
-$totalStartTime = microtime(true);
-
-foreach (new RecursiveIteratorIterator(
-             new RecursiveDirectoryIterator($dir),
-             RecursiveIteratorIterator::LEAVES_ONLY)
-         as $file) {
-    if (!$fileFilter($file)) {
-        continue;
-    }
-
-    $startTime = microtime(true);
-    $origCode = file_get_contents($file);
-    $readTime += microtime(true) - $startTime;
-
-    if (null === $origCode = $codeExtractor($file, $origCode)) {
-        continue;
-    }
-
-    set_time_limit(10);
-
-    ++$count;
-
-    if ($showProgress) {
-        echo substr(str_pad('Testing file ' . $count . ': ' . substr($file, strlen($dir)), 79), 0, 79), "\r";
-    }
-
-    try {
-        $startTime = microtime(true);
-        $origStmts = $parser->parse($origCode);
-        $parseTime += microtime(true) - $startTime;
-
-        $origTokens = $lexer->getTokens();
-
-        $startTime = microtime(true);
-        $stmts = $cloningTraverser->traverse($origStmts);
-        $cloneTime += microtime(true) - $startTime;
-
-        $startTime = microtime(true);
-        $code = $prettyPrinter->printFormatPreserving($stmts, $origStmts, $origTokens);
-        $fpppTime += microtime(true) - $startTime;
-
-        if ($code !== $origCode) {
-            echo $file, ":\n Result of format-preserving pretty-print differs\n";
-            if ($verbose) {
-                echo "FPPP output:\n=====\n$code\n=====\n\n";
-            }
-
-            ++$fpppFail;
-        }
-
-        $startTime = microtime(true);
-        $code = "<?php\n" . $prettyPrinter->prettyPrint($stmts);
-        $ppTime += microtime(true) - $startTime;
-
-        try {
-            $startTime = microtime(true);
-            $ppStmts = $parser->parse($code);
-            $reparseTime += microtime(true) - $startTime;
-
-            $startTime = microtime(true);
-            $same = $nodeDumper->dump($stmts) == $nodeDumper->dump($ppStmts);
-            $compareTime += microtime(true) - $startTime;
-
-            if (!$same) {
-                echo $file, ":\n    Result of initial parse and parse after pretty print differ\n";
-                if ($verbose) {
-                    echo "Pretty printer output:\n=====\n$code\n=====\n\n";
-                }
-
-                ++$compareFail;
-            }
-        } catch (PhpParser\Error $e) {
-            echo $file, ":\n    Parse of pretty print failed with message: {$e->getMessage()}\n";
-            if ($verbose) {
-                echo "Pretty printer output:\n=====\n$code\n=====\n\n";
-            }
-
-            ++$ppFail;
-        }
-    } catch (PhpParser\Error $e) {
-        echo $file, ":\n    Parse failed with message: {$e->getMessage()}\n";
-
-        ++$parseFail;
-    }
-}
-
-if (0 === $parseFail && 0 === $ppFail && 0 === $compareFail) {
-    $exit = 0;
-    echo "\n\n", 'All tests passed.', "\n";
-} else {
-    $exit = 1;
-    echo "\n\n", '==========', "\n\n", 'There were: ', "\n";
-    if (0 !== $parseFail) {
-        echo '    ', $parseFail,   ' parse failures.',        "\n";
-    }
-    if (0 !== $ppFail) {
-        echo '    ', $ppFail,      ' pretty print failures.', "\n";
-    }
-    if (0 !== $fpppFail) {
-        echo '    ', $fpppFail,      ' FPPP failures.', "\n";
-    }
-    if (0 !== $compareFail) {
-        echo '    ', $compareFail, ' compare failures.',      "\n";
-    }
-}
-
-echo "\n",
-     'Tested files:         ', $count,        "\n",
-     "\n",
-     'Reading files took:   ', $readTime,    "\n",
-     'Parsing took:         ', $parseTime,   "\n",
-     'Cloning took:         ', $cloneTime,   "\n",
-     'FPPP took:            ', $fpppTime,    "\n",
-     'Pretty printing took: ', $ppTime,      "\n",
-     'Reparsing took:       ', $reparseTime, "\n",
-     'Comparing took:       ', $compareTime, "\n",
-     "\n",
-     'Total time:           ', microtime(true) - $totalStartTime, "\n",
-     'Maximum memory usage: ', memory_get_peak_usage(true), "\n";
-
-exit($exit);
diff --git a/vendor/oomphinc/composer-installers-extender/.editorconfig b/vendor/oomphinc/composer-installers-extender/.editorconfig
new file mode 100644
index 0000000000000000000000000000000000000000..4fef87085605935ddbe47b308af5d3c89e0bdaff
--- /dev/null
+++ b/vendor/oomphinc/composer-installers-extender/.editorconfig
@@ -0,0 +1,18 @@
+# This file is for unifying the coding style for different editors and IDEs
+# editorconfig.org
+
+# PHP PSR-2 Coding Standards
+# http://www.php-fig.org/psr/psr-2/
+
+root = true
+
+[*]
+charset = utf-8
+end_of_line = lf
+insert_final_newline = true
+trim_trailing_whitespace = true
+indent_style = space
+indent_size = 4
+
+[*.{xml,yml}]
+indent_size = 2
diff --git a/vendor/oomphinc/composer-installers-extender/.travis.yml b/vendor/oomphinc/composer-installers-extender/.travis.yml
new file mode 100644
index 0000000000000000000000000000000000000000..bfb41b607c3bbf79b353151cd9a4a54e30a38695
--- /dev/null
+++ b/vendor/oomphinc/composer-installers-extender/.travis.yml
@@ -0,0 +1,20 @@
+language: php
+
+php:
+  - 5.6
+  - 7.0
+  - 7.1
+  - 7.2
+  - nightly
+
+matrix:
+  allow_failures:
+    - php: 5.6
+    - php: 7.0
+  fast_finish: true
+
+install: composer install
+
+script:
+  - composer lint
+  - composer test
diff --git a/vendor/oomphinc/composer-installers-extender/CHANGELOG.md b/vendor/oomphinc/composer-installers-extender/CHANGELOG.md
new file mode 100644
index 0000000000000000000000000000000000000000..0fb7ad6e409ccb3d7411ecd6b8535445c8b18968
--- /dev/null
+++ b/vendor/oomphinc/composer-installers-extender/CHANGELOG.md
@@ -0,0 +1,55 @@
+# Changelog
+All notable changes to this project will be documented in this file.
+
+The format is based on [Keep a Changelog][] and this project adheres to the
+[Semantic Versioning][] scheme.
+
+[Keep a Changelog]: http://keepachangelog.com
+[Semantic Versioning]: https://semver.org
+
+## [Unreleased]
+### Added
+
+### Changed
+
+### Deprecated
+
+### Removed
+
+### Fixed
+
+### Security
+
+## [2.0.0] - 2020-08-11
+### Added
+- Add `.editorconfig`, `.gitignore`, `.lando.yml`, `phpcs.xml` and `phpunit.xml`
+  files to support local development
+- Add `LICENSE` and `CHANGELOG.md` files
+- Add `phpunit/phpunit` and `squizlabs/php_codesniffer` as development
+  dependencies
+- Add requirement for PHP 7.1
+- Add support for Composer 2
+
+### Changed
+- Move `OomphInc\ComposerInstallersExtender\Installer` to
+  `OomphInc\ComposerInstallersExtender\Installers\Installer`
+- Move `OomphInc\ComposerInstallersExtender\InstallerHelper` to
+  `OomphInc\ComposerInstallersExtender\Installers\CustomInstaller`
+- Implement PSR-2 standards and PHP 7.1 syntax
+- Update project `README.md` file
+
+## [1.1.2] - 2017-03-31
+### Changed
+- Minor syntax update to provide compatibility with PHP 5.3
+
+## [1.1.1] - 2016-07-05
+### Changed
+- Update composer/installers version requirement
+
+## [1.1.0] - 2016-03-02
+### Changed
+- Update package requirements to be less restrictive
+
+## [1.0.0] - 2016-01-07
+### Added
+- Initial release
diff --git a/vendor/rvtraveller/qs-composer-installer/LICENSE b/vendor/oomphinc/composer-installers-extender/LICENSE
similarity index 96%
rename from vendor/rvtraveller/qs-composer-installer/LICENSE
rename to vendor/oomphinc/composer-installers-extender/LICENSE
index a80b363ea4efe2947d7f7c0a39048fafccb5c196..6ce1578dd0720ed7b0a065e4dbba8c839742740f 100644
--- a/vendor/rvtraveller/qs-composer-installer/LICENSE
+++ b/vendor/oomphinc/composer-installers-extender/LICENSE
@@ -1,6 +1,6 @@
 MIT License
 
-Copyright (c) 2016 Brian Thompson
+Copyright (c) 2018 Oomph, Inc.
 
 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to deal
diff --git a/vendor/oomphinc/composer-installers-extender/README.md b/vendor/oomphinc/composer-installers-extender/README.md
index a2bb3ca193e2c302c3f46fa60e864df88444e134..05ca2d3324eea73494c0861e656ac9ab5ef193c8 100644
--- a/vendor/oomphinc/composer-installers-extender/README.md
+++ b/vendor/oomphinc/composer-installers-extender/README.md
@@ -1,45 +1,79 @@
 # Composer Installers Extender
 
-The `composer-installers-extender` is a plugin for [Composer](https://getcomposer.org/) that allows
-any package to be installed to a directory other than the default `vendor/` directory within
-the repo on a package-by-package basis. This plugin extends the [`composer/installers`](https://github.com/composer/installers)
-plugin to allow any arbitrary package type to be handled by their custom installer and specified explicitly in the
-`"installer-paths"` mapping in the `"extra"` data property.
+The `composer-installers-extender` is a plugin for [Composer][] that allows
+any package to be installed to a directory other than the default `vendor`
+directory within a project on a package-by-package basis. This plugin extends
+the [`composer/installers`][] plugin to allow any arbitrary package type to be
+handled by their custom installer.
 
-`composer/installers` has a finite set of supported package types and we recognize the need for
-any arbitrary package type to be installed to a specific directory other than `vendor/`. This plugin
-allows additional package types to be handled by `composer/installers`, benefiting from their explicit install path
-mapping and token replacement of package properties.
+The [`composer/installers`][] plugin has a finite set of supported package types
+and we recognize the need for any arbitrary package type to be installed to a
+specific directory other than `vendor`. This plugin allows additional package
+types to be handled by the [`composer/installers`][] plugin, benefiting from
+their explicit install path mapping and token replacement of package properties.
 
-## How to Use
-Add `oomphinc/composer-installers-extender` as a dependency of your project.
-```sh
-composer require oomphinc/composer-installers-extender
-```
-`composer/installers` is a dependency of this plugin and will be automatically required as well.
+## How to Install
+
+Add `oomphinc/composer-installers-extender` as a dependency of your project:
 
-To support additional package types, add an array of these types in the `"extra"` property in your `composer.json`:
+```bash
+$ composer require oomphinc/composer-installers-extender
 ```
-	"extra": {
-		"installer-types": ["library"]
-	}
+
+This plugin requires at least PHP 7.1. If you're using a lower version of PHP
+use the latest stable 1.x release:
+
+```bash
+$ composer require oomphinc/composer-installers-extender:^1.1
 ```
-Then, you can add mappings for packages of these types in the same way that you would add package types
-that are supported by [`composer/installers`](https://github.com/composer/installers#custom-install-paths):
+
+## How to Use
+
+The [`composer/installers`][] plugin is a dependency of this plugin and will be
+automatically required as well if not already required.
+
+To support additional package types, add an array of these types in the
+`extra` property in your `composer.json`:
+
+```json
+{
+    "extra": {
+        "installer-types": ["library"]
+    }
+}
 ```
-  "extra": {
-    "installer-types": ["library"],
-    "installer-paths": {
-      "special/package/": ["my/package"],
-      "path/to/libraries/{$name}/": ["type:library"]
+
+Then, you can add mappings for packages of these types in the same way that you
+would add package types that are supported by [`composer/installers`][]:
+
+```json
+{
+    "extra": {
+        "installer-types": ["library"],
+        "installer-paths": {
+            "special/package/": ["my/package"],
+            "path/to/libraries/{$name}/": ["type:library"]
+        }
     }
-  }
+}
 ```
-By default, packages that do not specify a `type` will be considered type `library`. Adding support for this type
-allows any of these packages to be placed in a different install path.
 
-If a type has been added to `"installer-types"`, the plugin will attempt to find an explicit installer path in the mapping.
-If there is no match either by name or by type, the default installer path for all packages will be used instead.
+By default, packages that do not specify a `type` will be considered the type
+`library`. Adding support for this type allows any of these packages to be
+placed in a different install path.
+
+If a type has been added to `installer-types`, the plugin will attempt to find
+an explicit installer path in the mapping. If there is no match either by name
+or by type, the default installer path for all packages will be used instead.
+
+Please see the README for [`composer/installers`][] to see the supported syntax
+for package and type matching as well as the supported replacement tokens in
+the path (e.g. `{$name}`).
+
+## License
+
+[MIT License][]
 
-Please see the README for [`composer/installers`](https://github.com/composer/installers) to see the supported
-syntax for package and type matching as well as the supported replacement tokens in the path (e.g. `{$name}`).
+[Composer]: https://getcomposer.org
+[`composer/installers`]: https://github.com/composer/installers
+[MIT License]: LICENSE
diff --git a/vendor/oomphinc/composer-installers-extender/composer.json b/vendor/oomphinc/composer-installers-extender/composer.json
index 118835c7003479d8ea942d375f2a1a7a11363646..3837d0feee52ad7e79ce4ec7bdbb24fe2f000004 100644
--- a/vendor/oomphinc/composer-installers-extender/composer.json
+++ b/vendor/oomphinc/composer-installers-extender/composer.json
@@ -1,27 +1,55 @@
 {
-	"name": "oomphinc/composer-installers-extender",
-	"description": "Extend the composer/installers plugin to accept any arbitrary package type.",
-	"homepage": "http://www.oomphinc.com/",
-	"type": "composer-plugin",
-	"license": "MIT",
-	"authors": [
-		{
-			"name": "Stephen Beemsterboer",
-			"email": "stephen@oomphinc.com",
-			"homepage": "https://github.com/balbuf"
-		}
-	],
-	"support": {
-		"issues": "https://github.com/oomphinc/composer-installers-extender/issues"
-	},
-	"autoload": {
-		"psr-4": {"OomphInc\\ComposerInstallersExtender\\": "src/"}
-	},
-	"extra": {
-		"class": "OomphInc\\ComposerInstallersExtender\\Plugin"
-	},
-	"require": {
-		"composer-plugin-api": "^1.0",
-		"composer/installers": "^1.0"
-	}
+    "name": "oomphinc/composer-installers-extender",
+    "description": "Extend the composer/installers plugin to accept any arbitrary package type.",
+    "homepage": "http://www.oomphinc.com/",
+    "type": "composer-plugin",
+    "license": "MIT",
+    "authors": [
+        {
+            "name": "Stephen Beemsterboer",
+            "email": "stephen@oomphinc.com",
+            "homepage": "https://github.com/balbuf"
+        },
+        {
+            "name": "Nathan Dentzau",
+            "email": "nate@oomphinc.com",
+            "homepage": "http://oomph.is/ndentzau"
+        }
+    ],
+    "support": {
+        "issues": "https://github.com/oomphinc/composer-installers-extender/issues"
+    },
+    "require": {
+        "php": ">=7.1",
+        "composer-plugin-api": "^1.1 || ^2.0",
+        "composer/installers": "^1.0"
+    },
+    "require-dev": {
+        "composer/composer": "^2.0",
+        "phpunit/phpunit": "^7.2",
+        "squizlabs/php_codesniffer": "^3.3"
+    },
+    "autoload":{
+        "psr-4": {
+            "OomphInc\\ComposerInstallersExtender\\": "src/"
+        }
+    },
+    "autoload-dev": {
+        "psr-4": {
+            "OomphInc\\ComposerInstallerExtender\\Tests\\": "tests/src/"
+        }
+    },
+    "scripts": {
+        "fix": "vendor/bin/phpcbf",
+        "lint": "vendor/bin/phpcs",
+        "test": "vendor/bin/phpunit"
+    },
+    "config": {
+        "sort-packages": true
+    },
+    "extra": {
+        "class": "OomphInc\\ComposerInstallersExtender\\Plugin"
+    },
+    "minimum-stability": "dev",
+    "prefer-stable": true
 }
diff --git a/vendor/oomphinc/composer-installers-extender/phpcs.xml b/vendor/oomphinc/composer-installers-extender/phpcs.xml
new file mode 100644
index 0000000000000000000000000000000000000000..5560f3c008c88ab8681a52fa769d58383a0d6c78
--- /dev/null
+++ b/vendor/oomphinc/composer-installers-extender/phpcs.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0"?>
+<ruleset name="Composer Installers Extender">
+  <description>
+    Coding standards for the Composer Installers Extender project using PSR-2
+    with PHP 7 syntax.
+  </description>
+
+  <!-- Directories to scan -->
+  <file>src/</file>
+
+  <!-- PHPCS argument overrides -->
+  <arg name="colors" />
+
+  <!-- PHP configuration overrides -->
+  <ini name="memory_limit" value="-1" />
+
+  <!-- Project autoloader -->
+  <autoload>vendor/autoload.php</autoload>
+
+  <!-- Import rules -->
+  <rule ref="PSR2" />
+</ruleset>
diff --git a/vendor/oomphinc/composer-installers-extender/phpunit.xml b/vendor/oomphinc/composer-installers-extender/phpunit.xml
new file mode 100644
index 0000000000000000000000000000000000000000..261373e86402a5e6df221d18e260f8f65269f623
--- /dev/null
+++ b/vendor/oomphinc/composer-installers-extender/phpunit.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<phpunit
+  colors="true"
+  beStrictAboutChangesToGlobalState="true"
+  beStrictAboutOutputDuringTests="true"
+  beStrictAboutTestsThatDoNotTestAnything="true"
+  bootstrap="vendor/autoload.php">
+  <php>
+    <ini name="error_reporting" value="32767" />
+    <ini name="memory_limit" value="-1" />
+  </php>
+  <testsuites>
+    <testsuite name="unit">
+      <directory>./tests/src</directory>
+    </testsuite>
+  </testsuites>
+  <filter>
+    <whitelist>
+      <directory>./src</directory>
+     </whitelist>
+  </filter>
+  <logging>
+    <log type="coverage-html" target="tests/results/html"/>
+    <log type="coverage-clover" target="tests/results/coverage.xml"/>
+    <log type="coverage-text" target="tests/results/coverage.txt"/>
+  </logging>
+</phpunit>
diff --git a/vendor/oomphinc/composer-installers-extender/src/Installer.php b/vendor/oomphinc/composer-installers-extender/src/Installer.php
deleted file mode 100644
index 437b49a7981046d2a2bdccae5f99d248c4b265db..0000000000000000000000000000000000000000
--- a/vendor/oomphinc/composer-installers-extender/src/Installer.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-
-namespace OomphInc\ComposerInstallersExtender;
-
-use Composer\Installer\LibraryInstaller;
-use Composer\Installers\Installer as ComposerInstaller;
-use Composer\Package\PackageInterface;
-
-class Installer extends ComposerInstaller {
-
-	protected $packageTypes;
-
-	public function getInstallPath( PackageInterface $package ) {
-		$installer = new InstallerHelper( $package, $this->composer, $this->io );
-		$path = $installer->getInstallPath( $package, $package->getType() );
-		// if the path is false, use the default installer path instead
-		return $path !== false ? $path : LibraryInstaller::getInstallPath( $package );
-	}
-
-	public function supports( $packageType ) {
-		// grab the package types once
-		if ( !isset( $this->packageTypes ) ) {
-			$this->packageTypes = false;
-			if ( $this->composer->getPackage() ) {
-				// get data from the 'extra' field
-				$extra = $this->composer->getPackage()->getExtra();
-				if ( !empty( $extra['installer-types'] ) ) {
-					$this->packageTypes = (array) $extra['installer-types'];
-				}
-			}
-		}
-		return is_array( $this->packageTypes ) && in_array( $packageType, $this->packageTypes );
-	}
-
-}
\ No newline at end of file
diff --git a/vendor/oomphinc/composer-installers-extender/src/InstallerHelper.php b/vendor/oomphinc/composer-installers-extender/src/InstallerHelper.php
deleted file mode 100644
index fb332d67375de15563b44853fc5d39b1df132917..0000000000000000000000000000000000000000
--- a/vendor/oomphinc/composer-installers-extender/src/InstallerHelper.php
+++ /dev/null
@@ -1,15 +0,0 @@
-<?php
-
-namespace OomphInc\ComposerInstallersExtender;
-
-use Composer\Installers\BaseInstaller;
-
-class InstallerHelper extends BaseInstaller {
-
-	function getLocations() {
-		// it will be looking for a key of FALSE, which evaluates to 0, i.e. the first element
-		// that element value being false signals the installer to use the default path
-		return array( false );
-	}
-
-}
diff --git a/vendor/oomphinc/composer-installers-extender/src/Installers/CustomInstaller.php b/vendor/oomphinc/composer-installers-extender/src/Installers/CustomInstaller.php
new file mode 100644
index 0000000000000000000000000000000000000000..e80ab3871914afa053b6728405d220fa558c6e78
--- /dev/null
+++ b/vendor/oomphinc/composer-installers-extender/src/Installers/CustomInstaller.php
@@ -0,0 +1,18 @@
+<?php
+
+declare(strict_types = 1);
+
+namespace OomphInc\ComposerInstallersExtender\Installers;
+
+use Composer\Installers\BaseInstaller;
+
+/**
+ * Provides a custom installer class for custom installer types.
+ *
+ * By default, the parent class has no specified locations. By not providing an
+ * array of locations we are forcing the installer to use custom installer
+ * paths.
+ */
+class CustomInstaller extends BaseInstaller
+{
+}
diff --git a/vendor/oomphinc/composer-installers-extender/src/Installers/Installer.php b/vendor/oomphinc/composer-installers-extender/src/Installers/Installer.php
new file mode 100644
index 0000000000000000000000000000000000000000..c686f77a86c60d437a0c82245026997efdc16cb2
--- /dev/null
+++ b/vendor/oomphinc/composer-installers-extender/src/Installers/Installer.php
@@ -0,0 +1,53 @@
+<?php
+
+declare(strict_types = 1);
+
+namespace OomphInc\ComposerInstallersExtender\Installers;
+
+use Composer\Package\PackageInterface;
+use Composer\Installer\LibraryInstaller;
+use Composer\Installers\Installer as InstallerBase;
+
+class Installer extends InstallerBase
+{
+    /**
+     * A list of installer types.
+     *
+     * @var array
+     */
+    protected $installerTypes;
+
+    /**
+     * {@inheritDoc}
+     */
+    public function getInstallPath(PackageInterface $package): string
+    {
+        $installer = new CustomInstaller($package, $this->composer, $this->io);
+        $path = $installer->getInstallPath($package, $package->getType());
+
+        return $path ?: LibraryInstaller::getInstallPath($package);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public function supports($packageType): bool
+    {
+        return in_array($packageType, $this->getInstallerTypes());
+    }
+
+    /**
+     * Get a list of custom installer types.
+     *
+     * @return array
+     */
+    public function getInstallerTypes(): array
+    {
+        if (!$this->installerTypes) {
+            $extra = $this->composer->getPackage()->getExtra();
+            $this->installerTypes = $extra['installer-types'] ?? [];
+        }
+
+        return $this->installerTypes;
+    }
+}
diff --git a/vendor/oomphinc/composer-installers-extender/src/Plugin.php b/vendor/oomphinc/composer-installers-extender/src/Plugin.php
index 09c1ad50fccfb1cf7bbe089e40c52919df0a2dc2..2f9b04d67a2475203f14653180529716bd56bd46 100644
--- a/vendor/oomphinc/composer-installers-extender/src/Plugin.php
+++ b/vendor/oomphinc/composer-installers-extender/src/Plugin.php
@@ -1,16 +1,36 @@
 <?php
 
+declare(strict_types = 1);
+
 namespace OomphInc\ComposerInstallersExtender;
 
 use Composer\Composer;
 use Composer\IO\IOInterface;
 use Composer\Plugin\PluginInterface;
+use OomphInc\ComposerInstallersExtender\Installers\Installer;
 
-class Plugin implements PluginInterface {
+class Plugin implements PluginInterface
+{
+    /**
+     * {@inheritDoc}
+     */
+    public function activate(Composer $composer, IOInterface $io): void
+    {
+        $installer = new Installer($io, $composer);
+        $composer->getInstallationManager()->addInstaller($installer);
+    }
 
-	public function activate( Composer $composer, IOInterface $io ) {
-		$installer = new Installer( $io, $composer );
-		$composer->getInstallationManager()->addInstaller( $installer );
-	}
+    /**
+     * {@inheritDoc}
+     */
+    public function deactivate(Composer $composer, IOInterface $io): void
+    {
+    }
 
-}
\ No newline at end of file
+    /**
+     * {@inheritDoc}
+     */
+    public function uninstall(Composer $composer, IOInterface $io): void
+    {
+    }
+}
diff --git a/vendor/oomphinc/composer-installers-extender/tests/src/Installers/CustomInstallerTest.php b/vendor/oomphinc/composer-installers-extender/tests/src/Installers/CustomInstallerTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..5d696ada5a15721ccd69bafb5aa0a11ba66ddcb9
--- /dev/null
+++ b/vendor/oomphinc/composer-installers-extender/tests/src/Installers/CustomInstallerTest.php
@@ -0,0 +1,18 @@
+<?php
+
+declare(strict_types = 1);
+
+namespace OomphInc\ComposerInstallersExtender\Tests\Installers;
+
+use PHPUnit\Framework\TestCase;
+use OomphInc\ComposerInstallersExtender\Installers\CustomInstaller;
+
+class CustomInstallerTest extends TestCase
+{
+    public function testLocations(): void
+    {
+        $installer = (new \ReflectionClass(CustomInstaller::class))
+            ->newInstanceWithoutConstructor();
+        $this->assertEmpty($installer->getLocations());
+    }
+}
diff --git a/vendor/oomphinc/composer-installers-extender/tests/src/Installers/InstallerTest.php b/vendor/oomphinc/composer-installers-extender/tests/src/Installers/InstallerTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..f090f504fc170e9a059477443ece68a23e308642
--- /dev/null
+++ b/vendor/oomphinc/composer-installers-extender/tests/src/Installers/InstallerTest.php
@@ -0,0 +1,117 @@
+<?php
+
+declare(strict_types = 1);
+
+namespace OomphInc\ComposerInstallersExtender\Installers;
+
+use Composer\Composer;
+use Composer\IO\IOInterface;
+use PHPUnit\Framework\TestCase;
+use Composer\Package\Package;
+
+class InstallerTest extends TestCase
+{
+    protected $composer;
+
+    protected $io;
+
+    public function setUp(): void
+    {
+        parent::setUp();
+
+        $this->composer = $this->createMock(Composer::class);
+        $this->composer
+            ->method('getConfig')
+            ->willReturn(new class {
+                public function get($name) {
+                    return null;
+                }
+            });
+
+        $this->io = $this->createMock(IOInterface::class);
+    }
+
+    public function testGetInstallPath(): void
+    {
+        $this->composer
+            ->method('getPackage')
+            ->willReturn(new class {
+                public function getExtra()
+                {
+                    return [
+                        'installer-types' => ['custom-type'],
+                        'installer-paths' => [
+                            'custom/path/{$name}' => ['type:custom-type'],
+                        ],
+                    ];
+                }
+            });
+
+        $installer = new Installer($this->io, $this->composer);
+
+        $package = new Package('oomphinc/test', '1.0.0', '1.0.0');
+        $package->setType('custom-type');
+
+        $this->assertEquals(
+            'custom/path/test',
+            $installer->getInstallPath($package)
+        );
+    }
+
+    public function testSupports(): void
+    {
+        $installer = new class extends Installer {
+            public function __construct() {}
+
+            public function getInstallerTypes(): array
+            {
+                return ['custom-type'];
+            }
+        };
+
+        $this->assertTrue($installer->supports('custom-type'));
+        $this->assertFalse($installer->supports('oomph'));
+    }
+
+    /**
+     * @dataProvider installerTypesDataProvider
+     */
+    public function testGetInstallerTypes($package, array $expected): void
+    {
+        $this->composer
+            ->method('getPackage')
+            ->willReturn($package);
+
+        $installer = new Installer($this->io, $this->composer);
+        $this->assertEquals($expected, $installer->getInstallerTypes());
+    }
+
+    public function installerTypesDataProvider(): array
+    {
+        return [
+            [
+                new class {
+                    public function getExtra(): array
+                    {
+                        return [
+                            'installer-types' => ['custom-type'],
+                            'installer-paths' => [
+                                'custom/path/{$name}' => ['type:custom-type'],
+                            ],
+                        ];
+                    }
+                },
+                ['custom-type'],
+            ],
+            [
+                new class {
+                    public function getExtra(): array
+                    {
+                        return [];
+                    }
+                },
+                [],
+            ],
+        ];
+    }
+}
diff --git a/vendor/oomphinc/composer-installers-extender/tests/src/PluginTest.php b/vendor/oomphinc/composer-installers-extender/tests/src/PluginTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..cb0fb9b7954c256becc13f12b9e5d4ec52641b7d
--- /dev/null
+++ b/vendor/oomphinc/composer-installers-extender/tests/src/PluginTest.php
@@ -0,0 +1,55 @@
+<?php
+
+declare(strict_types = 1);
+
+namespace OomphInc\ComposerInstallersExtender\Tests;
+
+use Composer\Composer;
+use Composer\IO\IOInterface;
+use PHPUnit\Framework\TestCase;
+use Composer\Installer\InstallationManager;
+use OomphInc\ComposerInstallersExtender\Installers\Installer;
+use OomphInc\ComposerInstallersExtender\Plugin;
+
+class PluginTest extends TestCase
+{
+    protected $composer;
+
+    protected $io;
+
+    public function setUp(): void
+    {
+        parent::setUp();
+
+        $this->composer = $this->createMock(Composer::class);
+        $this->composer
+            ->method('getConfig')
+            ->willReturn(new class{
+                public function get($name)
+                {
+                    return null;
+                }
+            });
+
+        $this->io = $this->createMock(IOInterface::class);
+    }
+
+    public function testActive(): void
+    {
+        $installationManager = $this->createMock(InstallationManager::class);
+        $installationManager
+            ->expects($this->once())
+            ->method('addInstaller')
+            ->with(new Installer($this->io, $this->composer));
+
+        $this->composer
+            ->expects($this->once())
+            ->method('getInstallationManager')
+            ->willReturn($installationManager);
+
+        // There is no output to test from the activate method. Only test for
+        // method call expectations.
+        $plugin = new Plugin();
+        $plugin->activate($this->composer, $this->io);
+    }
+}
diff --git a/vendor/jakub-onderka/php-console-highlighter/LICENSE b/vendor/pantheon-systems/quicksilver-pushback/LICENSE
similarity index 96%
rename from vendor/jakub-onderka/php-console-highlighter/LICENSE
rename to vendor/pantheon-systems/quicksilver-pushback/LICENSE
index 1a8317fa158146a989d8a05c105b74af1f996fed..c5be8b188f5b8942d6aa20626b47859b7e65dd3b 100644
--- a/vendor/jakub-onderka/php-console-highlighter/LICENSE
+++ b/vendor/pantheon-systems/quicksilver-pushback/LICENSE
@@ -1,6 +1,6 @@
 The MIT License (MIT)
 
-Copyright (c) 2013 Jakub Onderka
+Copyright (c) 2015 Pantheon
 
 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to deal
@@ -18,4 +18,5 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
\ No newline at end of file
+SOFTWARE.
+
diff --git a/vendor/pantheon-systems/quicksilver-pushback/README.md b/vendor/pantheon-systems/quicksilver-pushback/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..30a69546784cdbc3f6f82126bc2f6dca995aed0c
--- /dev/null
+++ b/vendor/pantheon-systems/quicksilver-pushback/README.md
@@ -0,0 +1,41 @@
+# Quicksilver Pushback
+This Quicksilver project is used in conjunction with the various suite of [Terminus Build Tools](https://github.com/pantheon-systems/terminus-build-tools-plugin)-based example repositories to push any commits made on the Pantheon dashboard back to the original GitHub repository for the site.
+
+This Quicksilver script only works with Pantheon sites that have been configured to use a GitHub PR workflow.
+
+### Example composer.json
+
+This project is designed to be included from a site's composer.json file, and placed in its appropriate installation directory by [Composer Installers](https://github.com/composer/installers).
+
+In order for this to work, you should have the following in your composer.json file:
+
+```json
+{
+  "require": {
+    "composer/installers": "^1.0.20"
+  },
+  "extra": {
+    "installer-paths": {
+      "web/private/scripts/quicksilver": ["type:quicksilver-script"]
+    }
+  }
+}
+```
+
+If you are using one of the example PR workflow projects as a starting point for your site, these entries should already be present in your composer.json.
+
+### Example `pantheon.yml`
+
+Here's an example of what your `pantheon.yml` would look like if this were the only Quicksilver operation you wanted to use.
+
+```yaml
+api_version: 1
+
+workflows:
+  sync_code:
+    after:
+      - type: webphp
+        description: Push changes back to GitHub if needed
+        script: private/scripts/quicksilver/quicksilver-pushback/push-back-to-github.php
+```
+If you are using one of the example PR workflow projects as a starting point for your site, this entry should already be present in your pantheon.yml.
diff --git a/vendor/pantheon-systems/quicksilver-pushback/composer.json b/vendor/pantheon-systems/quicksilver-pushback/composer.json
new file mode 100644
index 0000000000000000000000000000000000000000..b97612dff2b10619095544e63d6b77c56bd292ac
--- /dev/null
+++ b/vendor/pantheon-systems/quicksilver-pushback/composer.json
@@ -0,0 +1,9 @@
+{
+  "name": "pantheon-systems/quicksilver-pushback",
+  "description": "Push commits made via the Pantheon dashboard back to original GitHub repository.",
+  "type": "quicksilver-script",
+  "require": {
+    "composer/installers": "~1.0"
+  },
+  "license": "MIT"
+}
diff --git a/vendor/pantheon-systems/quicksilver-pushback/lean-repo-utils.php b/vendor/pantheon-systems/quicksilver-pushback/lean-repo-utils.php
new file mode 100644
index 0000000000000000000000000000000000000000..d09d94f281c58c9c42c47158bcd63e5d6e1bcf6d
--- /dev/null
+++ b/vendor/pantheon-systems/quicksilver-pushback/lean-repo-utils.php
@@ -0,0 +1,64 @@
+<?php
+
+function load_github_secrets($gitHubSecretsFile)
+{
+  if (!file_exists($gitHubSecretsFile)) {
+    print "Could not find $gitHubSecretsFile\n";
+    return [];
+  }
+  $gitHubSecretsContents = file_get_contents($gitHubSecretsFile);
+  if (empty($gitHubSecretsContents)) {
+    print "GitHub secrets file is empty\n";
+    return [];
+  }
+  $gitHubSecrets = json_decode($gitHubSecretsContents, true);
+  if (empty($gitHubSecrets)) {
+    print "No data in GitHub secrets\n";
+  }
+  return $gitHubSecrets;
+}
+
+/**
+ * Read the secrets.json file
+ */
+function pantheon_get_secrets($bindingDir, $requiredKeys, $defaultValues) {
+  $secretsFile = "$bindingDir/files/private/secrets.json";
+  if (!file_exists($secretsFile)) {
+    pantheon_raise_dashboard_error('Secrets file does not exist');
+  }
+  $secretsContents = file_get_contents($secretsFile);
+  if (empty($secretsContents)) {
+    pantheon_raise_dashboard_error('Could not read secrets file (or it is empty).');
+  }
+  $secrets = json_decode($secretsContents, 1);
+  if (empty($secrets)) {
+    pantheon_raise_dashboard_error('Could not parse json data in secrets file.');
+  }
+  $secrets += $defaultValues;
+  $missing = array_diff($requiredKeys, array_keys($secrets));
+  if (!empty($missing)) {
+    die('Missing required keys in json secrets file: ' . implode(',', $missing) . '. Aborting!');
+  }
+  return $secrets;
+}
+
+/**
+ * Function to report an error on the Pantheon dashboard
+ *
+ * Not supported; may stop working at any point in the future.
+ */
+function pantheon_raise_dashboard_error($reason = 'Uknown failure', $extended = FALSE) {
+  // Make creative use of the error reporting API
+  $data = array('file'=>'GitHub Integration',
+                'line'=>'Error',
+                'type'=>'error',
+                'message'=>$reason);
+  $params = http_build_query($data);
+  $result = pantheon_curl('https://api.live.getpantheon.com/sites/self/environments/self/events?'. $params, NULL, 8443, 'POST');
+  error_log("GitHub Integration failed - $reason");
+  // Dump additional debug info into the error log
+  if ($extended) {
+    error_log(print_r($extended, 1));
+  }
+  die("GitHub Integration failed - $reason");
+}
diff --git a/vendor/pantheon-systems/quicksilver-pushback/push-back-to-github.php b/vendor/pantheon-systems/quicksilver-pushback/push-back-to-github.php
new file mode 100644
index 0000000000000000000000000000000000000000..e49f77cc872cf53db59be49ef29ec1710000aa65
--- /dev/null
+++ b/vendor/pantheon-systems/quicksilver-pushback/push-back-to-github.php
@@ -0,0 +1,231 @@
+<?php
+
+include __DIR__ . '/lean-repo-utils.php';
+
+// ad-hoc cli usage: call with cwd set to full repository
+// TODO: refactor for testability (and write tests!)
+if (!isset($_ENV['PANTHEON_ENVIRONMENT'])) {
+  $fullRepository = getcwd();
+  $workDir = sys_get_temp_dir() . '/pushback-workdir';
+  passthru("rm -rf $workDir");
+  mkdir($workDir);
+  $github_token = getenv('GITHUB_TOKEN');
+
+  $result = push_back_to_github($fullRepository, $workDir, $github_token);
+
+  exit($result);
+}
+
+// Do nothing for test or live environments.
+if (in_array($_ENV['PANTHEON_ENVIRONMENT'], ['test', 'live'])) {
+  return;
+}
+
+/**
+ * This script will separates changes from the most recent commit
+ * and pushes any that affect the canonical sources back to the
+ * master repository.
+ */
+$bindingDir = $_SERVER['HOME'];
+$fullRepository = "$bindingDir/code";
+// $docRoot = "$fullRepository/" . $_SERVER['DOCROOT'];
+
+print "Enter push-back-to-github. Repository root is $fullRepository.\n";
+
+$privateFiles = "$bindingDir/files/private";
+$gitHubSecretsFile = "$privateFiles/github-secrets.json";
+$gitHubSecrets = load_github_secrets($gitHubSecretsFile);
+$github_token = $gitHubSecrets['token'];
+
+$workDir = "$bindingDir/tmp/pushback-workdir";
+
+// Temporary:
+passthru("rm -rf $workDir");
+mkdir($workDir);
+
+$status = push_back_to_github($fullRepository, $workDir, $github_token);
+
+// Throw out the working repository.
+passthru("rm -rf $workDir");
+
+// Post error to dashboard and exit if the merge fails.
+if ($status != 0) {
+  $message = "Commit back to canonical repository failed with exit code $status.";
+  pantheon_raise_dashboard_error($message, true);
+}
+
+function push_back_to_github($fullRepository, $workDir, $github_token)
+{
+  $buildMetadataFile = "build-metadata.json";
+  if (!file_exists("$fullRepository/$buildMetadataFile")) {
+    print "Could not find build metadata file, $buildMetadataFile\n";
+    return;
+  }
+  $buildMetadataFileContents = file_get_contents("$fullRepository/$buildMetadataFile");
+  $buildMetadata = json_decode($buildMetadataFileContents, true);
+  if (empty($buildMetadata)) {
+    print "No data in build metadata\n";
+    return;
+  }
+
+  print "::::::::::::::::: Build Metadata :::::::::::::::::\n";
+  var_export($buildMetadata);
+  print "\n\n";
+
+  // The remote repo to push to
+  $upstreamRepo = $buildMetadata['url'];
+  $upstreamRepoWithCredentials = $upstreamRepo;
+  if (!empty($github_token)) {
+    $upstreamRepoWithCredentials = str_replace('git@github.com:', 'https://github.com/', $upstreamRepoWithCredentials);
+    $upstreamRepoWithCredentials = str_replace('https://', "https://$github_token:x-oauth-basic@", $upstreamRepoWithCredentials);
+  }
+
+  // The last commit made on the lean repo prior to creating the build artifacts
+  $fromSha = $buildMetadata['sha'];
+
+  // The name of the PR branch
+  $branch = $buildMetadata['ref'];
+
+  // The commit to cherry-pick
+  $commitToSubmit = exec("git -C $fullRepository rev-parse HEAD");
+
+  // Seatbelts: is build metadatafile modified in the HEAD commit?
+  $commitWithBuildMetadataFile = exec("git -C $fullRepository log -n 1 --pretty=format:%H -- $buildMetadataFile");
+  if ($commitWithBuildMetadataFile == $commitToSubmit) {
+    print "Ignoring commit because it contains build assets.\n";
+    return;
+  }
+
+  // A working branch to make changes on
+  $targetBranch = $branch;
+
+  print "::::::::::::::::: Info :::::::::::::::::\n";
+  print "We are going to check out $branch from {$buildMetadata['url']}, branch from $fromSha and cherry-pick $commitToSubmit onto it\n";
+
+  $canonicalRepository = "$workDir/scratchRepository";
+  $workbranch = "recommit-work";
+
+  // Make a working clone of the GitHub branch. Clone just the branch
+  // and commit we need.
+  print "git clone $upstreamRepo --depth=1 --branch $branch --single-branch\n";
+  passthru("git clone $upstreamRepoWithCredentials --depth=1 --branch $branch --single-branch $canonicalRepository 2>&1");
+
+  // If there have been extra commits, then unshallow the repository so that
+  // we can make a branch off of the commit this multidev was built from.
+  print "git rev-parse HEAD\n";
+  $remoteHead = exec("git -C $canonicalRepository rev-parse HEAD");
+  if ($remoteHead != $fromSha) {
+    // TODO: If we had git 2.11.0, we could use --shallow-since with the date
+    // from $buildMetadata['commit-date'] to get exactly the commits we need.
+    // Until then, though, we will just `unshallow` the whole branch if there
+    // is a conflicting commit.
+    print "git fetch --unshallow\n";
+    passthru("git -C $canonicalRepository fetch --unshallow 2>&1");
+  }
+
+  // Get metadata from the commit at the HEAD of the full repository
+  $comment = escapeshellarg(exec("git -C $fullRepository log -1 --pretty=\"%s\""));
+  $commit_date = escapeshellarg(exec("git -C $fullRepository log -1 --pretty=\"%at\""));
+  $author_name = exec("git -C $fullRepository log -1 --pretty=\"%an\"");
+  $author_email = exec("git -C $fullRepository log -1 --pretty=\"%ae\"");
+  $author = escapeshellarg("$author_name <$author_email>");
+
+  print "Comment is $comment and author is $author and date is $commit_date\n";
+  // Make a safe space to store stuff
+  $safe_space = "$workDir/safe-space";
+  mkdir($safe_space);
+
+  // If there are conflicting commits, or if this new commit is on the master
+  // branch, then we will work from and push to a branch with a different name.
+  // The user should then create a new PR on GitHub, and use the GitHub UI
+  // to resolve any conflicts (or clone the branch locally to do the same thing).
+  $createNewBranchReason = '';
+  if ($branch == 'master') {
+    $createNewBranchReason = "the $branch branch cannot be pushed to directly";
+  }
+  elseif ($remoteHead != $fromSha) {
+    $createNewBranchReason = "new conflicting commits (e.g. $remoteHead) were added to the upstream repository";
+  }
+  if (!empty($createNewBranchReason)) {
+    // Warn that a new branch is being created.
+    $targetBranch = substr($commitToSubmit, 0, 5) . $branch;
+    print "Creating a new branch, '$targetBranch', because $createNewBranchReason.\n";
+    print "git checkout -B $targetBranch $fromSha\n";
+    passthru("git -C $canonicalRepository checkout -B $targetBranch $fromSha 2>&1");
+  }
+
+  // Now for some git magic.
+  //
+  // - $fullRepository contains all of the files we want to commit (and more).
+  // - $canonicalRepository is where we want to commit them.
+  //
+  // The .gitignore file in the canonical repository is correctly configured
+  // to ignore the build results that we do not want from the full repository.
+  //
+  // To affect the change, we will:
+  //
+  // - Copy the .gitignore file from the canonical repository to the full repo.
+  // - Operate on the CONTENTS of the full repository with the .git directory
+  //   of the canonical repository via the --git-dir and -C flags.
+  // - We restore the .gitignore at the end via `git checkout -- .gitignore`.
+
+  $gitignore_contents = file_get_contents("$canonicalRepository/.gitignore");
+  file_put_contents("$fullRepository/.gitignore", $gitignore_contents);
+
+  print "::::::::::::::::: .gitignore :::::::::::::::::\n$gitignore_contents\n";
+
+  // Add our files and make our commit
+  print "git add .\n";
+  passthru("git --git-dir=$canonicalRepository/.git -C $fullRepository add .", $status);
+  if ($status != 0) {
+    print "FAILED with $status\n";
+  }
+  // We don't want to commit the build-metadata to the canonical repository.
+  passthru("git --git-dir=$canonicalRepository/.git -C $fullRepository reset HEAD $buildMetadataFile");
+  // TODO: Copy author, message and perhaps other attributes from the commit at the head of the full repository
+  passthru("git --git-dir=$canonicalRepository/.git -C $fullRepository commit -q --no-edit --message=$comment --author=$author --date=$commit_date", $commitStatus);
+
+  // Get our .gitignore back
+  passthru("git -C $fullRepository checkout -- .gitignore");
+
+  // Make sure that HEAD changed after 'git apply'
+  $appliedCommit = exec("git -C $canonicalRepository rev-parse HEAD");
+
+  // Seatbelts: this generally should not happen. If it does, we will presume
+  // it is not an error; this situation might arise if someone commits only
+  // changes to build result files from dashboard.
+  if ($appliedCommit == $remoteHead) {
+    print "'git commit' did not add a commits. Status code: $commitStatus\n";
+    return;
+  }
+
+  exec("git -C $canonicalRepository diff-tree --no-commit-id --name-only -r HEAD", $committedFiles);
+  $committedFiles = implode("\n", $committedFiles);
+  if (empty($committedFiles)) {
+    print "Commit $appliedCommit does not contain any files.\n";
+    return;
+  }
+  // Even more seatbelts: ensure that there is nothing in the
+  // commit that should not have been modified. Our .gitignore
+  // file should ensure this never happens. For now, only test
+  // 'vendor'.
+  if (preg_match('#^vendor/#', $committedFiles)) {
+    print "Aborting: commit $appliedCommit contains changes to the 'vendor' directory.\n";
+    return 1;
+  }
+
+  // If the apply worked, then push the commit back to the light repository.
+  if (($commitStatus == 0) && ($appliedCommit != $remoteHead)) {
+
+    // Push the new branch back to Pantheon
+    print "git push $upstreamRepo $targetBranch\n";
+    passthru("git -C $canonicalRepository push $upstreamRepoWithCredentials $targetBranch 2>&1");
+
+    // TODO: If a new branch was created, it would be cool to use the GitHub API
+    // to create a new PR. If there is an existing PR (i.e. branch not master),
+    // it would also be cool to cross-reference the new PR to the old PR. The trouble
+    // here is converting the branch name to a PR number.
+  }
+
+  return $commitStatus;
+}
diff --git a/vendor/pear/archive_tar/.gitignore b/vendor/pear/archive_tar/.gitignore
index c32ccd7ccd9b313b4e053cad3ace3a6c0fffc025..c703991e8836b303638dd4c7a73891f42ee19e2a 100644
--- a/vendor/pear/archive_tar/.gitignore
+++ b/vendor/pear/archive_tar/.gitignore
@@ -8,3 +8,8 @@ vendor
 .buildpath
 .project
 .settings
+# pear
+.tarballs
+*.tgz
+# phpunit
+build
diff --git a/vendor/pear/archive_tar/.travis.yml b/vendor/pear/archive_tar/.travis.yml
index b841f4efc8d97126b937c525f9e967909b73ae5c..f103381b10d995af37faf0e059f23d26ba85b3fc 100644
--- a/vendor/pear/archive_tar/.travis.yml
+++ b/vendor/pear/archive_tar/.travis.yml
@@ -1,6 +1,9 @@
 sudo: false
 language: php
 matrix:
+  fast_finish: true
+  allow_failures:
+    - php: nightly
   include:
   - php: 5.2
     dist: precise
@@ -11,23 +14,12 @@ matrix:
   - php: 5.5
     dist: trusty
   - php: 5.6
-    dist: trusty
   - php: 7.0
-    dist: trusty
   - php: 7.1
-    dist: trusty
   - php: 7.2
-    dist: trusty
   - php: 7.3
-    dist: trusty
-  - php: 7.4snapshot
-  - php: master
-
-jobs:
-  allow_failures:
-    - php: 7.4snapshot
-    - php: master
-
+  - php: 7.4
+  - php: nightly
 install:
 #  - pear upgrade --force --alldeps pear/pear
   - pear install -f package.xml
diff --git a/vendor/pear/archive_tar/Archive/Tar.php b/vendor/pear/archive_tar/Archive/Tar.php
index 2f328c22737882269334f1687f1ac142b2e41272..92710741c542eacf7570adf3751ab2714b3bd8bc 100644
--- a/vendor/pear/archive_tar/Archive/Tar.php
+++ b/vendor/pear/archive_tar/Archive/Tar.php
@@ -731,7 +731,7 @@ public function setIgnoreRegexp($regexp)
      */
     public function setIgnoreList($list)
     {
-        $regexp = str_replace(array('#', '.', '^', '$'), array('\#', '\.', '\^', '\$'), $list);
+        $list = str_replace(array('#', '.', '^', '$'), array('\#', '\.', '\^', '\$'), $list);
         $regexp = '#/' . join('$|/', $list) . '#';
         $this->setIgnoreRegexp($regexp);
     }
@@ -1273,7 +1273,7 @@ public function _addFile($p_filename, &$p_header, $p_add_dir, $p_remove_dir, $v_
             while (($v_buffer = fread($v_file, $this->buffer_length)) != '') {
                 $buffer_length = strlen("$v_buffer");
                 if ($buffer_length != $this->buffer_length) {
-                    $pack_size = ((int)($buffer_length / 512) + 1) * 512;
+                    $pack_size = ((int)($buffer_length / 512) + ($buffer_length % 512 !== 0 ? 1 : 0)) * 512;
                     $pack_format = sprintf('a%d', $pack_size);
                 } else {
                     $pack_format = sprintf('a%d', $this->buffer_length);
@@ -1515,8 +1515,13 @@ public function _writeHeaderBlock(
             $userinfo = posix_getpwuid($p_uid);
             $groupinfo = posix_getgrgid($p_gid);
 
-            $v_uname = $userinfo['name'];
-            $v_gname = $groupinfo['name'];
+            if ($userinfo === false || $groupinfo === false) {
+                $v_uname = '';
+                $v_gname = '';
+            } else {
+                $v_uname = $userinfo['name'];
+                $v_gname = $groupinfo['name'];
+            }
         } else {
             $v_uname = '';
             $v_gname = '';
@@ -1725,7 +1730,7 @@ public function _readHeader($v_binary_data, &$v_header)
 
         // ----- Extract the properties
         $v_header['filename'] = rtrim($v_data['filename'], "\0");
-        if ($this->_maliciousFilename($v_header['filename'])) {
+        if ($this->_isMaliciousFilename($v_header['filename'])) {
             $this->_error(
                 'Malicious .tar detected, file "' . $v_header['filename'] .
                 '" will not install in desired directory tree'
@@ -1795,9 +1800,9 @@ private function _tarRecToSize($tar_size)
      *
      * @return bool
      */
-    private function _maliciousFilename($file)
+    private function _isMaliciousFilename($file)
     {
-        if (strpos($file, 'phar://') === 0) {
+        if (strpos($file, '://') !== false) {
             return true;
         }
         if (strpos($file, '../') !== false || strpos($file, '..\\') !== false) {
@@ -1833,7 +1838,7 @@ public function _readLongHeader(&$v_header)
 
         $v_filename = rtrim(substr($v_filename, 0, $v_filesize), "\0");
         $v_header['filename'] = $v_filename;
-        if ($this->_maliciousFilename($v_filename)) {
+        if ($this->_isMaliciousFilename($v_filename)) {
             $this->_error(
                 'Malicious .tar detected, file "' . $v_filename .
                 '" will not install in desired directory tree'
diff --git a/vendor/pear/archive_tar/package.xml b/vendor/pear/archive_tar/package.xml
index 6834939518d74245d1585df11a62a3c04071f766..6edf4fd10351839d0e56b237b4f8784b1fd013ce 100644
--- a/vendor/pear/archive_tar/package.xml
+++ b/vendor/pear/archive_tar/package.xml
@@ -32,10 +32,10 @@ Also Lzma2 compressed archives are supported with xz extension.</description>
   <email>stig@php.net</email>
   <active>no</active>
  </helper>
- <date>2019-12-04</date>
- <time>09:25:16</time>
+ <date>2020-11-19</date>
+ <time>22:06:48</time>
  <version>
-  <release>1.4.9</release>
+  <release>1.4.11</release>
   <api>1.4.0</api>
  </version>
  <stability>
@@ -44,7 +44,8 @@ Also Lzma2 compressed archives are supported with xz extension.</description>
  </stability>
  <license uri="http://www.opensource.org/licenses/bsd-license.php">New BSD License</license>
  <notes>
-* Implement Feature #23861: Add option to disallow symlinks [mrook]
+* Fix Bug #27002: Filename manipulation vulnerabilities (CVE-2020-28948 /
+   CVE-2020-28949) [mrook]
  </notes>
  <contents>
   <dir name="/">
@@ -74,6 +75,37 @@ Also Lzma2 compressed archives are supported with xz extension.</description>
  </dependencies>
  <phprelease />
  <changelog>
+   <release>
+    <version>
+     <release>1.4.10</release>
+     <api>1.4.0</api>
+    </version>
+    <stability>
+     <release>stable</release>
+     <api>stable</api>
+    </stability>
+    <date>2020-09-15</date>
+    <license uri="http://www.opensource.org/licenses/bsd-license.php">New BSD License</license>
+    <notes>
+ * Fix block padding when the file buffer length is a multiple of 512 and smaller than Archive_Tar buffer length
+ * Don&apos;t try to copy username/groupname in chroot jail
+    </notes>
+  </release>
+  <release>
+   <version>
+    <release>1.4.9</release>
+    <api>1.4.0</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <date>2019-12-04</date>
+   <license uri="http://www.opensource.org/licenses/bsd-license.php">New BSD License</license>
+   <notes>
+* Implement Feature #23861: Add option to disallow symlinks [mrook]
+   </notes>
+  </release>
   <release>
    <version>
     <release>1.4.8</release>
diff --git a/vendor/pear/archive_tar/tests/512nbytesfile.phpt b/vendor/pear/archive_tar/tests/512nbytesfile.phpt
new file mode 100644
index 0000000000000000000000000000000000000000..411cb7a93550607478ffd8315c850a6856814ebf
--- /dev/null
+++ b/vendor/pear/archive_tar/tests/512nbytesfile.phpt
@@ -0,0 +1,33 @@
+--TEST--
+test file size that happens to be 512 * n bytes
+--SKIPIF--
+--FILE--
+<?php
+$dirname = dirname(__FILE__);
+require_once $dirname . '/setup.php.inc';
+
+$tar = new Archive_Tar($dirname . '/512nbytesfile.tar.gz', null, 2048);
+$tar->add($dirname .'/testblock3');
+$tar->listContent();
+$phpunit->assertNoErrors('after tar archive listing');
+
+$returnval = shell_exec('tar -Ptf ' . $dirname . '/512nbytesfile.tar.gz | sort');
+$phpunit->assertNoErrors('after shell tar listing');
+
+$expectedvalue = 
+<<< EOD
+$dirname/testblock3
+$dirname/testblock3/1024bytes.txt
+$dirname/testblock3/randombytes.txt
+EOD;
+$phpunit->assertEquals($expectedvalue, $returnval, 'wrong output for shell tar verification');
+
+echo 'test done'
+?>
+--CLEAN--
+<?php
+$dirname = dirname(__FILE__);
+@unlink($dirname.'/512nbytesfile.tar.gz');
+?>
+--EXPECT--
+test done
\ No newline at end of file
diff --git a/vendor/pear/archive_tar/tests/dirtraversal.phpt b/vendor/pear/archive_tar/tests/dirtraversal.phpt
index 7e5d11f482b4c0c3603b36a17b83b6c147f8429e..6945d169d59752087b97be063145862f5efc45ac 100644
--- a/vendor/pear/archive_tar/tests/dirtraversal.phpt
+++ b/vendor/pear/archive_tar/tests/dirtraversal.phpt
@@ -1,24 +1,24 @@
---TEST--
-test directory traversal security vulnerability
---SKIPIF--
---FILE--
-<?php
-require_once dirname(__FILE__) . '/setup.php.inc';
-$me = dirname(__FILE__) . '/testit';
-$tar = new Archive_Tar(dirname(__FILE__) . '/hamidTARtester2.tar');
-$tar->listContent();
-$phpunit->assertErrors(array(
-    array('package' => 'PEAR_Error', 'message' => 'Malicious .tar detected, file "/../../../../../../../../../../../../../../AAAAAAAAAAAAAAAAA/BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB.txt" will not install in desired directory tree')
-), 'after 1');
-$tar->extract();
-$phpunit->assertErrors(array(
-    array('package' => 'PEAR_Error', 'message' => 'Malicious .tar detected, file "/../../../../../../../../../../../../../../AAAAAAAAAAAAAAAAA/BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB.txt" will not install in desired directory tree')
-), 'after 2');
-echo 'tests done';
-?>
---CLEAN--
-<?php
-@rmdir('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa');
-?>
---EXPECT--
-tests done
+--TEST--
+test directory traversal security vulnerability
+--SKIPIF--
+--FILE--
+<?php
+require_once dirname(__FILE__) . '/setup.php.inc';
+$me = dirname(__FILE__) . '/testit';
+$tar = new Archive_Tar(dirname(__FILE__) . '/hamidTARtester2.tar');
+$tar->listContent();
+$phpunit->assertErrors(array(
+    array('package' => 'PEAR_Error', 'message' => 'Malicious .tar detected, file "/../../../../../../../../../../../../../../AAAAAAAAAAAAAAAAA/BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB.txt" will not install in desired directory tree')
+), 'after 1');
+$tar->extract();
+$phpunit->assertErrors(array(
+    array('package' => 'PEAR_Error', 'message' => 'Malicious .tar detected, file "/../../../../../../../../../../../../../../AAAAAAAAAAAAAAAAA/BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB.txt" will not install in desired directory tree')
+), 'after 2');
+echo 'tests done';
+?>
+--CLEAN--
+<?php
+@rmdir('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa');
+?>
+--EXPECT--
+tests done
diff --git a/vendor/pear/archive_tar/tests/testblock3/1024bytes.txt b/vendor/pear/archive_tar/tests/testblock3/1024bytes.txt
new file mode 100644
index 0000000000000000000000000000000000000000..e5fc6491f847bd1d8b11ed62d042e901da43aa8a
--- /dev/null
+++ b/vendor/pear/archive_tar/tests/testblock3/1024bytes.txt
@@ -0,0 +1,16 @@
+194 210  54 166  74 179 115 216 109  21 220  29 144 242  90 206 
+240  73 172  14 153 163  43  16 233  20 186  91  95 150  60  61 
+180 187 233 126 130 154 116 206 213 231 202 148 148  12 125  24 
+  6 139  32 235 117 240  56  96  23   1 182 167 116  64  92  73 
+250 177 157 119 121 148 112  50  89  24  37 214  81  88 201  75 
+162 108  60 114 137 227 170 186 231 213 177  33  44 143 243  98 
+ 14  28 226  77 152 241 243  62 103 237 187 235 227  73   9 119 
+162  64 127  74  73  90 112 200  39   6 173 251  12 191 166  18 
+235 100  74 184 126 153  23 118  27  25 128 222 234 246 165 159 
+170 127 236 199  91  67  96 185 108 159 172   2 245 202 161 177 
+147 188   0 151 251 230 251 100 226  67 212  38  72  32  44 117 
+ 10  39 163 159   0 197 160 225  25 177  16   0 240  16 137 105 
+187 132 129  98  24 210 169  33 246  77 217 145 242 118 181  47 
+160  61  62 129  71  52 253  85   2 215 174 241  55  32 236  27 
+160 120 145 188 132  37 161 178  45 227 209  57 142  19  88 175 
+230 238 104 128  26 196 126 118 214 122 201 123 
diff --git a/vendor/pear/archive_tar/tests/testblock3/randombytes.txt b/vendor/pear/archive_tar/tests/testblock3/randombytes.txt
new file mode 100644
index 0000000000000000000000000000000000000000..b42152357c648ceb5a4ca6919d1c18a51ef7a388
--- /dev/null
+++ b/vendor/pear/archive_tar/tests/testblock3/randombytes.txt
@@ -0,0 +1,2 @@
+250  97  98 194   5 149 229  27  58  62 133  73  95 230 219 128 
+224  98 210 250 162  58 240  80 202 249 173 203 125 186 
diff --git a/vendor/psy/psysh/.editorconfig b/vendor/psy/psysh/.editorconfig
deleted file mode 100644
index fddf9c1c6b64519e58c5c04eb924477214c7aec3..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/.editorconfig
+++ /dev/null
@@ -1,15 +0,0 @@
-root = true
-
-[*]
-indent_style = space
-indent_size = 4
-end_of_line = lf
-charset = utf-8
-trim_trailing_whitespace = true
-insert_final_newline = true
-
-[*.md]
-trim_trailing_whitespace = false
-
-[Makefile]
-indent_style = tab
diff --git a/vendor/psy/psysh/.github/CONTRIBUTING.md b/vendor/psy/psysh/.github/CONTRIBUTING.md
deleted file mode 100644
index efb87446cb8de9a88b6b5da5ab77d150e0df9b57..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/.github/CONTRIBUTING.md
+++ /dev/null
@@ -1,9 +0,0 @@
-## Code style
-
-Please make your code look like the other code in the project.
-
-PsySH follows [PSR-1](http://php-fig.org/psr/psr-1/) and [PSR-2](http://php-fig.org/psr/psr-2/). The easiest way to do make sure you're following the coding standard is to [install `php-cs-fixer`](https://github.com/friendsofphp/php-cs-fixer) and run `php-cs-fixer fix` before committing.
-
-## Branching model
-
-Please branch off and send pull requests to the `develop` branch.
diff --git a/vendor/psy/psysh/.gitignore b/vendor/psy/psysh/.gitignore
deleted file mode 100644
index da05f58cb71b2bec8bf9c114b3407a2ad59e6e8e..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/.gitignore
+++ /dev/null
@@ -1,9 +0,0 @@
-/build/
-/dist/
-/composer.lock
-/manual/
-/psysh
-/__pycache__
-/.php_cs.cache
-/vendor/
-/vendor-bin/*/vendor/
diff --git a/vendor/psy/psysh/.phan/config.php b/vendor/psy/psysh/.phan/config.php
index 433a04ab9075a78d9bdaeb30dabf998d192ccc95..9ec5014859fb84cd60ad4c850e3a3c6f4cb95b18 100644
--- a/vendor/psy/psysh/.phan/config.php
+++ b/vendor/psy/psysh/.phan/config.php
@@ -17,15 +17,9 @@
     'directory_list' => [
         'src/',
         'vendor/dnoegel/php-xdg-base-dir/src/',
-        'vendor/doctrine/instantiator/src/',
         'vendor/hoa/console/',
-        'vendor/jakub-onderka/php-console-color/src/',
-        'vendor/jakub-onderka/php-console-highlighter/src/',
         'vendor/nikic/php-parser/lib/',
-        'vendor/phpdocumentor/reflection-docblock/',
         'vendor/symfony/console/',
-        'vendor/symfony/filesystem/',
-        'vendor/symfony/finder/',
         'vendor/symfony/var-dumper/',
     ],
 
diff --git a/vendor/psy/psysh/.php_cs b/vendor/psy/psysh/.php_cs
deleted file mode 100644
index 421c31d2a53f3eafedd5bf34c2f41b9032458641..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/.php_cs
+++ /dev/null
@@ -1,32 +0,0 @@
-<?php
-
-$finder = PhpCsFixer\Finder::create()
-    ->in(__DIR__)
-    ->name('.php_cs')
-    ->name('build-manual')
-    ->name('build-phar')
-    ->exclude('build-vendor');
-
-$header = <<<EOF
-This file is part of Psy Shell.
-
-(c) 2012-2018 Justin Hileman
-
-For the full copyright and license information, please view the LICENSE
-file that was distributed with this source code.
-EOF;
-
-return PhpCsFixer\Config::create()
-    ->setRules(array(
-        '@Symfony' => true,
-        'array_syntax' => array('syntax' => 'short'),
-        'binary_operator_spaces' => false,
-        'concat_space' => array('spacing' => 'one'),
-        'header_comment' => array('header' => $header),
-        'increment_style' => array('style' => 'post'),
-        'method_argument_space' => array('keep_multiple_spaces_after_comma' => true),
-        'ordered_imports' => true,
-        'pre_increment' => false,
-        'yoda_style' => false,
-    ))
-    ->setFinder($finder);
diff --git a/vendor/psy/psysh/.styleci.yml b/vendor/psy/psysh/.styleci.yml
deleted file mode 100644
index 96fc96bf4072a9a6350564697894875dfaa5a39e..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/.styleci.yml
+++ /dev/null
@@ -1,29 +0,0 @@
-preset: symfony
-
-enabled:
-  - align_double_arrow
-  - concat_with_spaces
-  - short_array_syntax
-  - ordered_use
-  - strict
-
-disabled:
-  - blank_line_before_break
-  - blank_line_before_continue
-  - blank_line_before_throw
-  - blank_line_before_try
-  - concat_without_spaces
-  - method_argument_space
-  - pre_increment
-  - unalign_double_arrow
-  - unalign_equals
-  - yoda_style
-  - property_separation
-  - const_separation
-
-finder:
-  name:
-    - "*.php"
-    - ".php_cs"
-    - "build-manual"
-    - "build-phar"
diff --git a/vendor/psy/psysh/.travis.yml b/vendor/psy/psysh/.travis.yml
deleted file mode 100644
index 3a77512aab3d7f1fc6b7d6320c9ba841ec53ae39..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/.travis.yml
+++ /dev/null
@@ -1,44 +0,0 @@
-language: php
-
-sudo: false
-
-matrix:
-  include:
-    - php: 5.4
-    - php: 5.4
-      env: 'COMPOSER_FLAGS="--prefer-lowest --prefer-stable"'
-    - php: 5.5
-    - php: 5.6
-    - php: 7.0
-    - php: 7.1
-    - php: 7.2
-    - php: hhvm
-      dist: trusty
-  allow_failures:
-    - php: 5.4
-      env: 'COMPOSER_FLAGS="--prefer-lowest --prefer-stable"'
-    - php: hhvm
-  fast_finish: true
-
-install: travis_retry composer update --no-interaction $COMPOSER_FLAGS
-
-script:
- - vendor/bin/phpunit --verbose --coverage-clover=coverage.xml
- - '[[ $TRAVIS_PHP_VERSION = 7.2* ]] && make build -j 4 || true'
-
-after_success:
-  - bash <(curl -s https://codecov.io/bash)
-
-before_deploy: make dist -j 4
-
-deploy:
-  provider: releases
-  api_key:
-    secure: LL8koDM1xDqzF9t0URHvmMPyWjojyd4PeZ7IW7XYgyvD6n1H6GYrVAeKCh5wfUKFbwHoa9s5AAn6pLzra00bODVkPTmUH+FSMWz9JKLw9ODAn8HvN7C+IooxmeClGHFZc0TfHfya8/D1E9C1iXtGGEoE/GqtaYq/z0C1DLpO0OU=
-  file_glob: true
-  file: dist/psysh-*.tar.gz
-  skip_cleanup: true
-  on:
-    tags: true
-    repo: bobthecow/psysh
-    condition: $TRAVIS_PHP_VERSION = 7.2*
diff --git a/vendor/psy/psysh/Makefile b/vendor/psy/psysh/Makefile
deleted file mode 100644
index a1fdb42ed2a5910bb12a9441ced91dc6ec4cd36b..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/Makefile
+++ /dev/null
@@ -1,95 +0,0 @@
-PSYSH_SRC = bin src box.json.dist composer.json build/stub
-PSYSH_SRC_FILES = $(shell find src -type f -name "*.php")
-VERSION = $(shell git describe --tag --always --dirty=-dev)
-
-COMPOSER_OPTS = --no-interaction --no-progress --verbose
-COMPOSER_REQUIRE_OPTS = $(COMPOSER_OPTS) --no-update
-COMPOSER_UPDATE_OPTS = $(COMPOSER_OPTS) --prefer-stable --no-dev --classmap-authoritative --prefer-dist
-
-
-# Commands
-
-.PHONY: help clean build dist
-.DEFAULT_GOAL := help
-
-help:
-	@echo "\033[33mUsage:\033[0m\n  make TARGET\n\n\033[33mTargets:\033[0m"
-	@grep -E '^[a-zA-Z0-9_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "  \033[32m%-7s\033[0m %s\n", $$1, $$2}'
-
-clean: ## Clean all created artifacts
-	rm -rf build/*
-	rm -rf dist/*
-	rm -rf vendor-bin/*/vendor/
-
-build: ## Compile PHARs
-build: build/psysh/psysh build/psysh-compat/psysh build/psysh-php54/psysh build/psysh-php54-compat/psysh
-
-dist: ## Build tarballs for distribution
-dist: dist/psysh-$(VERSION).tar.gz dist/psysh-$(VERSION)-compat.tar.gz dist/psysh-$(VERSION)-php54.tar.gz dist/psysh-$(VERSION)-php54-compat.tar.gz
-
-
-# All the composer stuffs
-
-composer.lock: composer.json
-	composer install
-	touch $@
-
-vendor/autoload.php: composer.lock
-	composer install
-	touch $@
-
-vendor/bin/box: vendor/autoload.php
-	composer bin box install
-	touch $@
-
-
-# Lots of PHARs
-
-build/stub: bin/build-stub bin/psysh LICENSE
-	bin/build-stub
-
-build/psysh: $(PSYSH_SRC) $(PSYSH_SRC_FILES)
-	rm -rf $@ || true
-	mkdir $@
-	cp -R $(PSYSH_SRC) $@/
-	composer config --working-dir $@ platform.php 7.0
-	composer require --working-dir $@ $(COMPOSER_REQUIRE_OPTS) php:'>=7.0.0'
-	composer update --working-dir $@ $(COMPOSER_UPDATE_OPTS)
-
-build/psysh-compat: $(PSYSH_SRC) $(PSYSH_SRC_FILES)
-	rm -rf $@ || true
-	mkdir $@
-	cp -R $(PSYSH_SRC) $@/
-	composer config --working-dir $@ platform.php 7.0
-	composer require --working-dir $@ $(COMPOSER_REQUIRE_OPTS) php:'>=7.0.0'
-	composer require --working-dir $@ $(COMPOSER_REQUIRE_OPTS) symfony/polyfill-iconv symfony/polyfill-mbstring hoa/console
-	composer update --working-dir $@ $(COMPOSER_UPDATE_OPTS)
-
-build/psysh-php54: $(PSYSH_SRC) $(PSYSH_SRC_FILES)
-	rm -rf $@ || true
-	mkdir $@
-	cp -R $(PSYSH_SRC) $@/
-	composer config --working-dir $@ platform.php 5.4
-	composer update --working-dir $@ $(COMPOSER_UPDATE_OPTS)
-
-build/psysh-php54-compat: $(PSYSH_SRC) $(PSYSH_SRC_FILES)
-	rm -rf $@ || true
-	mkdir $@
-	cp -R $(PSYSH_SRC) $@/
-	composer config --working-dir $@ platform.php 5.4
-	composer require --working-dir $@ $(COMPOSER_REQUIRE_OPTS) symfony/polyfill-iconv symfony/polyfill-mbstring hoa/console:^2.15
-	composer update --working-dir $@ $(COMPOSER_UPDATE_OPTS)
-
-build/%/psysh: vendor/bin/box build/%
-	vendor/bin/box compile --working-dir $(dir $@)
-
-
-# Dist packages
-
-dist/psysh-$(VERSION).tar.gz: build/psysh/psysh
-	@mkdir -p $(@D)
-	tar -C $(dir $<) -czf $@ $(notdir $<)
-
-dist/psysh-$(VERSION)-%.tar.gz: build/psysh-%/psysh
-	@mkdir -p $(@D)
-	tar -C $(dir $<) -czf $@ $(notdir $<)
diff --git a/vendor/psy/psysh/README.md b/vendor/psy/psysh/README.md
index 710434caf53df7115d5861a4142d859d47dc71e5..f34e8183cd895f8e68f225bc7fd7bc4b727e567e 100644
--- a/vendor/psy/psysh/README.md
+++ b/vendor/psy/psysh/README.md
@@ -24,6 +24,7 @@ PsySH is a runtime developer console, interactive debugger and [REPL](https://en
  * [⏳ Managing history](https://github.com/bobthecow/psysh/wiki/History)
  * [💲 System shell integration](https://github.com/bobthecow/psysh/wiki/Shell-integration)
  * [🎥 Tutorials & guides](https://github.com/bobthecow/psysh/wiki/Tutorials)
+ * [🐛 Troubleshooting](https://github.com/bobthecow/psysh/wiki/Troubleshooting)
 
 ### [📢 Commands](https://github.com/bobthecow/psysh/wiki/Commands)
 
diff --git a/vendor/psy/psysh/bin/build-stub b/vendor/psy/psysh/bin/build-stub
deleted file mode 100755
index 0d26110eab7ce2dc836e79f6096c76436ca12aac..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/bin/build-stub
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/usr/bin/env php
-<?php
-
-$license = file_get_contents(dirname(__DIR__) . '/LICENSE');
-$license = str_replace('The MIT License (MIT)', '', $license);
-$license = str_replace("\n", "\n * ", trim($license));
-
-$autoload = <<<'EOS'
-    Phar::mapPhar('psysh.phar');
-    require 'phar://psysh.phar/.box/check_requirements.php';
-    require 'phar://psysh.phar/vendor/autoload.php';
-EOS;
-
-$content = file_get_contents(dirname(__DIR__) . '/bin/psysh');
-$content = preg_replace('{/\* <<<.*?>>> \*/}sm', $autoload, $content);
-$content = preg_replace('/\\(c\\) .*?with this source code./sm', $license, $content);
-
-$content .= '__HALT_COMPILER();';
-
-@mkdir(dirname(__DIR__) . '/build');
-
-file_put_contents(dirname(__DIR__) . '/build/stub', $content);
diff --git a/vendor/psy/psysh/bin/psysh b/vendor/psy/psysh/bin/psysh
index 7dbd203e7ab68f9e2afea9df4c6a410a99804ef9..0829481e8381d986d6b836a6fb7af7e329444bed 100755
--- a/vendor/psy/psysh/bin/psysh
+++ b/vendor/psy/psysh/bin/psysh
@@ -20,7 +20,7 @@ call_user_func(function () {
     foreach ($argv as $i => $arg) {
         if ($arg === '--cwd') {
             if ($i >= count($argv) - 1) {
-                echo 'Missing --cwd argument.' . PHP_EOL;
+                fwrite(STDERR, 'Missing --cwd argument.' . PHP_EOL);
                 exit(1);
             }
             $cwd = $argv[$i + 1];
@@ -43,14 +43,21 @@ call_user_func(function () {
     $chunks = explode('/', $cwd);
     while (!empty($chunks)) {
         $path = implode('/', $chunks);
+        $prettyPath = $path;
+        if (isset($_SERVER['HOME']) && $_SERVER['HOME']) {
+            $prettyPath = preg_replace('/^' . preg_quote($_SERVER['HOME'], '/') . '/', '~', $path);
+        }
 
         // Find composer.json
         if (is_file($path . '/composer.json')) {
             if ($cfg = json_decode(file_get_contents($path . '/composer.json'), true)) {
                 if (isset($cfg['name']) && $cfg['name'] === 'psy/psysh') {
-                    // We're inside the psysh project. Let's use the local
-                    // Composer autoload.
+                    // We're inside the psysh project. Let's use the local Composer autoload.
                     if (is_file($path . '/vendor/autoload.php')) {
+                        if (realpath($path) !== realpath(__DIR__ . '/..')) {
+                            fwrite(STDERR, 'Using local PsySH version at ' . $prettyPath . PHP_EOL);
+                        }
+
                         require $path . '/vendor/autoload.php';
                     }
 
@@ -64,9 +71,12 @@ call_user_func(function () {
             if ($cfg = json_decode(file_get_contents($path . '/composer.lock'), true)) {
                 foreach (array_merge($cfg['packages'], $cfg['packages-dev']) as $pkg) {
                     if (isset($pkg['name']) && $pkg['name'] === 'psy/psysh') {
-                        // We're inside a project which requires psysh. We'll
-                        // use the local Composer autoload.
+                        // We're inside a project which requires psysh. We'll use the local Composer autoload.
                         if (is_file($path . '/vendor/autoload.php')) {
+                            if (realpath($path . '/vendor') !== realpath(__DIR__ . '/../../..')) {
+                                fwrite(STDERR, 'Using local PsySH version at ' . $prettyPath . PHP_EOL);
+                            }
+
                             require $path . '/vendor/autoload.php';
                         }
 
@@ -89,8 +99,8 @@ if (!class_exists('Psy\Shell')) {
     } elseif (is_file(__DIR__ . '/../../../autoload.php')) {
         require __DIR__ . '/../../../autoload.php';
     } else {
-        echo 'PsySH dependencies not found, be sure to run `composer install`.' . PHP_EOL;
-        echo 'See https://getcomposer.org to get Composer.' . PHP_EOL;
+        fwrite(STDERR, 'PsySH dependencies not found, be sure to run `composer install`.' . PHP_EOL);
+        fwrite(STDERR, 'See https://getcomposer.org to get Composer.' . PHP_EOL);
         exit(1);
     }
 /* >>> */
@@ -99,8 +109,8 @@ if (!class_exists('Psy\Shell')) {
 // If the psysh binary was included directly, assume they just wanted an
 // autoloader and bail early.
 //
-// Keep this PHP 5.3 code around for a while in case someone is using a globally
-// installed psysh as a bin launcher for older local versions.
+// Keep this PHP 5.3 and 5.4 code around for a while in case someone is using a
+// globally installed psysh as a bin launcher for older local versions.
 if (version_compare(PHP_VERSION, '5.3.6', '<')) {
     $trace = debug_backtrace();
 } elseif (version_compare(PHP_VERSION, '5.4.0', '<')) {
@@ -120,17 +130,17 @@ unset($trace);
 
 // If the local version is too old, we can't do this
 if (!function_exists('Psy\bin')) {
-    $argv = $_SERVER['argv'];
+    $argv = isset($_SERVER['argv']) ? $_SERVER['argv'] : array();
     $first = array_shift($argv);
     if (preg_match('/php(\.exe)?$/', $first)) {
         array_shift($argv);
     }
     array_unshift($argv, 'vendor/bin/psysh');
 
-    echo 'A local PsySH dependency was found, but it cannot be loaded. Please update to' . PHP_EOL;
-    echo 'the latest version, or run the local copy directly, e.g.:' . PHP_EOL;
-    echo PHP_EOL;
-    echo '    ' . implode(' ', $argv) . PHP_EOL;
+    fwrite(STDERR, 'A local PsySH dependency was found, but it cannot be loaded. Please update to' . PHP_EOL);
+    fwrite(STDERR, 'the latest version, or run the local copy directly, e.g.:' . PHP_EOL);
+    fwrite(STDERR, PHP_EOL);
+    fwrite(STDERR, '    ' . implode(' ', $argv) . PHP_EOL);
     exit(1);
 }
 
diff --git a/vendor/psy/psysh/box.json.dist b/vendor/psy/psysh/box.json.dist
deleted file mode 100644
index e302f265eb993e47f1991a5f669d6e6b01b792ed..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/box.json.dist
+++ /dev/null
@@ -1,12 +0,0 @@
-{
-    "stub": "stub",
-    "output": "psysh",
-    "compactors": [
-        "KevinGH\\Box\\Compactor\\Php"
-    ],
-    "blacklist": [
-        "grammar",
-        "test_old",
-        "Documentation"
-    ]
-}
diff --git a/vendor/psy/psysh/composer.json b/vendor/psy/psysh/composer.json
index 4588ba60a5f4aa5759b70846e26dad0f7eb602a2..a097b3dfb89fc871220c8b323066fe944611e250 100644
--- a/vendor/psy/psysh/composer.json
+++ b/vendor/psy/psysh/composer.json
@@ -13,18 +13,16 @@
         }
     ],
     "require": {
-        "php": ">=5.4.0",
+        "php": "^8.0 || ^7.0 || ^5.5.9",
         "ext-json": "*",
         "ext-tokenizer": "*",
-        "symfony/console": "~2.3.10|^2.4.2|~3.0|~4.0",
-        "symfony/var-dumper": "~2.7|~3.0|~4.0",
-        "nikic/php-parser": "~1.3|~2.0|~3.0|~4.0",
-        "dnoegel/php-xdg-base-dir": "0.1",
-        "jakub-onderka/php-console-highlighter": "0.3.*|0.4.*"
+        "symfony/console": "~5.0|~4.0|~3.0|^2.4.2|~2.3.10",
+        "symfony/var-dumper": "~5.0|~4.0|~3.0|~2.7",
+        "nikic/php-parser": "~4.0|~3.0|~2.0|~1.3",
+        "dnoegel/php-xdg-base-dir": "0.1.*"
     },
     "require-dev": {
-        "phpunit/phpunit": "~4.8.35|~5.0|~6.0|~7.0",
-        "hoa/console": "~2.15|~3.16",
+        "hoa/console": "3.17.*",
         "bamarni/composer-bin-plugin": "^1.2"
     },
     "suggest": {
@@ -48,7 +46,7 @@
     "bin": ["bin/psysh"],
     "extra": {
         "branch-alias": {
-            "dev-develop": "0.9.x-dev"
+            "dev-master": "0.10.x-dev"
         }
     }
 }
diff --git a/vendor/psy/psysh/phpunit.xml.dist b/vendor/psy/psysh/phpunit.xml.dist
deleted file mode 100644
index 3534fca2700edb8970f00cc9bc923f6ff2a45377..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/phpunit.xml.dist
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<phpunit backupGlobals="false" colors="true" bootstrap="vendor/autoload.php">
-	<testsuite name="PsySH">
-		<directory suffix="Test.php">./test</directory>
-	</testsuite>
-
-	<filter>
-		<whitelist>
-			<directory suffix=".php">./src</directory>
-		</whitelist>
-	</filter>
-</phpunit>
diff --git a/vendor/psy/psysh/src/CodeCleaner.php b/vendor/psy/psysh/src/CodeCleaner.php
index e44c2c18e05bc729f617f417fb520afce4874607..58876ce8bafc3acd3bb336fd9d1d08838185c829 100644
--- a/vendor/psy/psysh/src/CodeCleaner.php
+++ b/vendor/psy/psysh/src/CodeCleaner.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -18,20 +18,22 @@
 use Psy\CodeCleaner\AssignThisVariablePass;
 use Psy\CodeCleaner\CalledClassPass;
 use Psy\CodeCleaner\CallTimePassByReferencePass;
+use Psy\CodeCleaner\EmptyArrayDimFetchPass;
 use Psy\CodeCleaner\ExitPass;
 use Psy\CodeCleaner\FinalClassPass;
 use Psy\CodeCleaner\FunctionContextPass;
 use Psy\CodeCleaner\FunctionReturnInWriteContextPass;
 use Psy\CodeCleaner\ImplicitReturnPass;
 use Psy\CodeCleaner\InstanceOfPass;
+use Psy\CodeCleaner\LabelContextPass;
 use Psy\CodeCleaner\LeavePsyshAlonePass;
-use Psy\CodeCleaner\LegacyEmptyPass;
 use Psy\CodeCleaner\ListPass;
 use Psy\CodeCleaner\LoopContextPass;
 use Psy\CodeCleaner\MagicConstantsPass;
 use Psy\CodeCleaner\NamespacePass;
 use Psy\CodeCleaner\PassableByReferencePass;
 use Psy\CodeCleaner\RequirePass;
+use Psy\CodeCleaner\ReturnTypePass;
 use Psy\CodeCleaner\StrictTypesPass;
 use Psy\CodeCleaner\UseStatementPass;
 use Psy\CodeCleaner\ValidClassNamePass;
@@ -54,9 +56,9 @@ class CodeCleaner
     /**
      * CodeCleaner constructor.
      *
-     * @param Parser        $parser    A PhpParser Parser instance. One will be created if not explicitly supplied
-     * @param Printer       $printer   A PhpParser Printer instance. One will be created if not explicitly supplied
-     * @param NodeTraverser $traverser A PhpParser NodeTraverser instance. One will be created if not explicitly supplied
+     * @param Parser|null        $parser    A PhpParser Parser instance. One will be created if not explicitly supplied
+     * @param Printer|null       $printer   A PhpParser Printer instance. One will be created if not explicitly supplied
+     * @param NodeTraverser|null $traverser A PhpParser NodeTraverser instance. One will be created if not explicitly supplied
      */
     public function __construct(Parser $parser = null, Printer $printer = null, NodeTraverser $traverser = null)
     {
@@ -98,11 +100,13 @@ private function getDefaultPasses()
             new FunctionContextPass(),
             new FunctionReturnInWriteContextPass(),
             new InstanceOfPass(),
+            new LabelContextPass(),
             new LeavePsyshAlonePass(),
-            new LegacyEmptyPass(),
             new ListPass(),
             new LoopContextPass(),
             new PassableByReferencePass(),
+            new ReturnTypePass(),
+            new EmptyArrayDimFetchPass(),
             new ValidConstructorPass(),
 
             // Rewriting shenanigans
@@ -198,8 +202,8 @@ private static function isDebugCall(array $stackFrame)
         $class    = isset($stackFrame['class']) ? $stackFrame['class'] : null;
         $function = isset($stackFrame['function']) ? $stackFrame['function'] : null;
 
-        return ($class === null && $function === 'Psy\debug') ||
-            ($class === 'Psy\Shell' && $function === 'debug');
+        return ($class === null && $function === 'Psy\\debug') ||
+            ($class === Shell::class && $function === 'debug');
     }
 
     /**
@@ -237,9 +241,9 @@ public function clean(array $codeLines, $requireSemicolons = false)
     /**
      * Set the current local namespace.
      *
-     * @param null|array $namespace (default: null)
+     * @param array|null $namespace (default: null)
      *
-     * @return null|array
+     * @return array|null
      */
     public function setNamespace(array $namespace = null)
     {
@@ -249,7 +253,7 @@ public function setNamespace(array $namespace = null)
     /**
      * Get the current local namespace.
      *
-     * @return null|array
+     * @return array|null
      */
     public function getNamespace()
     {
diff --git a/vendor/psy/psysh/src/CodeCleaner/AbstractClassPass.php b/vendor/psy/psysh/src/CodeCleaner/AbstractClassPass.php
index 81d12b6a5f84a4fa82c908b588aa7bdcb5257ea5..62f6370d0b0c9160d248447f9fb37250225414d4 100644
--- a/vendor/psy/psysh/src/CodeCleaner/AbstractClassPass.php
+++ b/vendor/psy/psysh/src/CodeCleaner/AbstractClassPass.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -25,7 +25,7 @@ class AbstractClassPass extends CodeCleanerPass
     private $abstractMethods;
 
     /**
-     * @throws RuntimeException if the node is an abstract function with a body
+     * @throws FatalErrorException if the node is an abstract function with a body
      *
      * @param Node $node
      */
@@ -48,7 +48,7 @@ public function enterNode(Node $node)
     }
 
     /**
-     * @throws RuntimeException if the node is a non-abstract class with abstract methods
+     * @throws FatalErrorException if the node is a non-abstract class with abstract methods
      *
      * @param Node $node
      */
diff --git a/vendor/psy/psysh/src/CodeCleaner/AssignThisVariablePass.php b/vendor/psy/psysh/src/CodeCleaner/AssignThisVariablePass.php
index 4c42d97f3bf1fbe69989cc6a808f862f6f9ac3ad..b95920c3d0dded50687c83dd65cc3994bfc6ce14 100644
--- a/vendor/psy/psysh/src/CodeCleaner/AssignThisVariablePass.php
+++ b/vendor/psy/psysh/src/CodeCleaner/AssignThisVariablePass.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -26,7 +26,7 @@ class AssignThisVariablePass extends CodeCleanerPass
     /**
      * Validate that the user input does not assign the `$this` variable.
      *
-     * @throws RuntimeException if the user assign the `$this` variable
+     * @throws FatalErrorException if the user assign the `$this` variable
      *
      * @param Node $node
      */
diff --git a/vendor/psy/psysh/src/CodeCleaner/CallTimePassByReferencePass.php b/vendor/psy/psysh/src/CodeCleaner/CallTimePassByReferencePass.php
index cff2c519b9da30030ebfda1ab2c5fd2e7402eaea..4fb359a13fd135f91001a7a89a35482063ec4bdd 100644
--- a/vendor/psy/psysh/src/CodeCleaner/CallTimePassByReferencePass.php
+++ b/vendor/psy/psysh/src/CodeCleaner/CallTimePassByReferencePass.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -31,7 +31,7 @@ class CallTimePassByReferencePass extends CodeCleanerPass
     /**
      * Validate of use call-time pass-by-reference.
      *
-     * @throws RuntimeException if the user used call-time pass-by-reference
+     * @throws FatalErrorException if the user used call-time pass-by-reference
      *
      * @param Node $node
      */
diff --git a/vendor/psy/psysh/src/CodeCleaner/CalledClassPass.php b/vendor/psy/psysh/src/CodeCleaner/CalledClassPass.php
index e78f08d073ad1ebf8fdb2ab199eb2097bc633fd9..d920444eb79ffdfb92233148ff291b268dc4b762 100644
--- a/vendor/psy/psysh/src/CodeCleaner/CalledClassPass.php
+++ b/vendor/psy/psysh/src/CodeCleaner/CalledClassPass.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/CodeCleaner/CodeCleanerPass.php b/vendor/psy/psysh/src/CodeCleaner/CodeCleanerPass.php
index 58e5d05ec2321d944d98fd5505912ef7b5f83196..7d80ac896aadf196152899c423105a736de7c822 100644
--- a/vendor/psy/psysh/src/CodeCleaner/CodeCleanerPass.php
+++ b/vendor/psy/psysh/src/CodeCleaner/CodeCleanerPass.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/CodeCleaner/EmptyArrayDimFetchPass.php b/vendor/psy/psysh/src/CodeCleaner/EmptyArrayDimFetchPass.php
new file mode 100644
index 0000000000000000000000000000000000000000..60f5c56416aaa7eaa8911e1e167b478f4e940772
--- /dev/null
+++ b/vendor/psy/psysh/src/CodeCleaner/EmptyArrayDimFetchPass.php
@@ -0,0 +1,50 @@
+<?php
+
+/*
+ * This file is part of Psy Shell.
+ *
+ * (c) 2012-2020 Justin Hileman
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Psy\CodeCleaner;
+
+use PhpParser\Node;
+use PhpParser\Node\Expr\ArrayDimFetch;
+use PhpParser\Node\Expr\Assign;
+use Psy\Exception\FatalErrorException;
+
+/**
+ * Validate empty brackets are only used for assignment.
+ */
+class EmptyArrayDimFetchPass extends CodeCleanerPass
+{
+    const EXCEPTION_MESSAGE = 'Cannot use [] for reading';
+
+    private $theseOnesAreFine = [];
+
+    public function beforeTraverse(array $nodes)
+    {
+        $this->theseOnesAreFine = [];
+    }
+
+    /**
+     * @throws FatalErrorException if the user used empty empty array dim fetch outside of assignment
+     *
+     * @param Node $node
+     */
+    public function enterNode(Node $node)
+    {
+        if ($node instanceof Assign && $node->var instanceof ArrayDimFetch) {
+            $this->theseOnesAreFine[] = $node->var;
+        }
+
+        if ($node instanceof ArrayDimFetch && $node->dim === null) {
+            if (!\in_array($node, $this->theseOnesAreFine)) {
+                throw new FatalErrorException(self::EXCEPTION_MESSAGE, $node->getLine());
+            }
+        }
+    }
+}
diff --git a/vendor/psy/psysh/src/CodeCleaner/ExitPass.php b/vendor/psy/psysh/src/CodeCleaner/ExitPass.php
index 349a5c571145ed24fb26a665096279051f8f1ebd..6571bb75568ce5a11aa79824e851f33f7dafd838 100644
--- a/vendor/psy/psysh/src/CodeCleaner/ExitPass.php
+++ b/vendor/psy/psysh/src/CodeCleaner/ExitPass.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -15,6 +15,7 @@
 use PhpParser\Node\Expr\Exit_;
 use PhpParser\Node\Expr\StaticCall;
 use PhpParser\Node\Name\FullyQualified as FullyQualifiedName;
+use Psy\Exception\BreakException;
 
 class ExitPass extends CodeCleanerPass
 {
@@ -26,7 +27,7 @@ class ExitPass extends CodeCleanerPass
     public function leaveNode(Node $node)
     {
         if ($node instanceof Exit_) {
-            return new StaticCall(new FullyQualifiedName('Psy\Exception\BreakException'), 'exitShell');
+            return new StaticCall(new FullyQualifiedName(BreakException::class), 'exitShell');
         }
     }
 }
diff --git a/vendor/psy/psysh/src/CodeCleaner/FinalClassPass.php b/vendor/psy/psysh/src/CodeCleaner/FinalClassPass.php
index 23f143be54324a1ed19f73d7a70bedbe6db0a0ae..648d4c5805683c808aef930f4da85eb04407e1a8 100644
--- a/vendor/psy/psysh/src/CodeCleaner/FinalClassPass.php
+++ b/vendor/psy/psysh/src/CodeCleaner/FinalClassPass.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -31,7 +31,7 @@ public function beforeTraverse(array $nodes)
     }
 
     /**
-     * @throws RuntimeException if the node is a class that extends a final class
+     * @throws FatalErrorException if the node is a class that extends a final class
      *
      * @param Node $node
      */
diff --git a/vendor/psy/psysh/src/CodeCleaner/FunctionContextPass.php b/vendor/psy/psysh/src/CodeCleaner/FunctionContextPass.php
index adff5ca10f9dda9424e3d02939881bb0d5263c7f..f5b4a61c28a9f7a8e6ac657358b63cf03c632529 100644
--- a/vendor/psy/psysh/src/CodeCleaner/FunctionContextPass.php
+++ b/vendor/psy/psysh/src/CodeCleaner/FunctionContextPass.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/CodeCleaner/FunctionReturnInWriteContextPass.php b/vendor/psy/psysh/src/CodeCleaner/FunctionReturnInWriteContextPass.php
index 87e5e7abffc71ff2da8da87d82e0a38caf6b3106..e47c60fe7f15dedbbf06706fc4bdbaec6e30d17c 100644
--- a/vendor/psy/psysh/src/CodeCleaner/FunctionReturnInWriteContextPass.php
+++ b/vendor/psy/psysh/src/CodeCleaner/FunctionReturnInWriteContextPass.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -14,7 +14,6 @@
 use PhpParser\Node;
 use PhpParser\Node\Expr\Array_;
 use PhpParser\Node\Expr\Assign;
-use PhpParser\Node\Expr\Empty_;
 use PhpParser\Node\Expr\FuncCall;
 use PhpParser\Node\Expr\Isset_;
 use PhpParser\Node\Expr\MethodCall;
@@ -29,22 +28,14 @@
  */
 class FunctionReturnInWriteContextPass extends CodeCleanerPass
 {
-    const PHP55_MESSAGE = 'Cannot use isset() on the result of a function call (you can use "null !== func()" instead)';
+    const ISSET_MESSAGE = 'Cannot use isset() on the result of an expression (you can use "null !== expression" instead)';
     const EXCEPTION_MESSAGE = "Can't use function return value in write context";
 
-    private $atLeastPhp55;
-
-    public function __construct()
-    {
-        $this->atLeastPhp55 = \version_compare(PHP_VERSION, '5.5', '>=');
-    }
-
     /**
      * Validate that the functions are used correctly.
      *
      * @throws FatalErrorException if a function is passed as an argument reference
      * @throws FatalErrorException if a function is used as an argument in the isset
-     * @throws FatalErrorException if a function is used as an argument in the empty, only for PHP < 5.5
      * @throws FatalErrorException if a value is assigned to a function
      *
      * @param Node $node
@@ -64,11 +55,9 @@ public function enterNode(Node $node)
                     continue;
                 }
 
-                $msg = ($node instanceof Isset_ && $this->atLeastPhp55) ? self::PHP55_MESSAGE : self::EXCEPTION_MESSAGE;
+                $msg = $node instanceof Isset_ ? self::ISSET_MESSAGE : self::EXCEPTION_MESSAGE;
                 throw new FatalErrorException($msg, 0, E_ERROR, null, $node->getLine());
             }
-        } elseif ($node instanceof Empty_ && !$this->atLeastPhp55 && $this->isCallNode($node->expr)) {
-            throw new FatalErrorException(self::EXCEPTION_MESSAGE, 0, E_ERROR, null, $node->getLine()); // @codeCoverageIgnore
         } elseif ($node instanceof Assign && $this->isCallNode($node->var)) {
             throw new FatalErrorException(self::EXCEPTION_MESSAGE, 0, E_ERROR, null, $node->getLine());
         }
diff --git a/vendor/psy/psysh/src/CodeCleaner/ImplicitReturnPass.php b/vendor/psy/psysh/src/CodeCleaner/ImplicitReturnPass.php
index 06b069780b611f1338034cf3b27d2f4d254c782f..94f886337ffa3694ab9d9db186d3a2568eeb3c39 100644
--- a/vendor/psy/psysh/src/CodeCleaner/ImplicitReturnPass.php
+++ b/vendor/psy/psysh/src/CodeCleaner/ImplicitReturnPass.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/CodeCleaner/InstanceOfPass.php b/vendor/psy/psysh/src/CodeCleaner/InstanceOfPass.php
index 44e24cae7c0f11855b15bf5d0d8777a3947305b7..87028af719ad88410dedf4386c2fceadad8faa28 100644
--- a/vendor/psy/psysh/src/CodeCleaner/InstanceOfPass.php
+++ b/vendor/psy/psysh/src/CodeCleaner/InstanceOfPass.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -12,6 +12,9 @@
 namespace Psy\CodeCleaner;
 
 use PhpParser\Node;
+use PhpParser\Node\Expr\Array_;
+use PhpParser\Node\Expr\BinaryOp;
+use PhpParser\Node\Expr\ClassConstFetch;
 use PhpParser\Node\Expr\ConstFetch;
 use PhpParser\Node\Expr\Instanceof_;
 use PhpParser\Node\Scalar;
@@ -40,7 +43,12 @@ public function enterNode(Node $node)
             return;
         }
 
-        if (($node->expr instanceof Scalar && !$node->expr instanceof Encapsed) || $node->expr instanceof ConstFetch) {
+        if (($node->expr instanceof Scalar && !$node->expr instanceof Encapsed) ||
+            $node->expr instanceof BinaryOp ||
+            $node->expr instanceof Array_ ||
+            $node->expr instanceof ConstFetch ||
+            $node->expr instanceof ClassConstFetch
+        ) {
             throw new FatalErrorException(self::EXCEPTION_MSG, 0, E_ERROR, null, $node->getLine());
         }
     }
diff --git a/vendor/psy/psysh/src/CodeCleaner/LabelContextPass.php b/vendor/psy/psysh/src/CodeCleaner/LabelContextPass.php
new file mode 100644
index 0000000000000000000000000000000000000000..e54d0cf9e5ad8c4c8f509cc728ff6c18baf8351a
--- /dev/null
+++ b/vendor/psy/psysh/src/CodeCleaner/LabelContextPass.php
@@ -0,0 +1,91 @@
+<?php
+
+/*
+ * This file is part of Psy Shell.
+ *
+ * (c) 2012-2020 Justin Hileman
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Psy\CodeCleaner;
+
+use PhpParser\Node;
+use PhpParser\Node\FunctionLike;
+use PhpParser\Node\Stmt\Goto_;
+use PhpParser\Node\Stmt\Label;
+use Psy\Exception\FatalErrorException;
+
+/**
+ * CodeCleanerPass for label context.
+ *
+ * This class partially emulates the PHP label specification.
+ * PsySH can not declare labels by sequentially executing lines with eval,
+ * but since it is not a syntax error, no error is raised.
+ * This class warns before invalid goto causes a fatal error.
+ * Since this is a simple checker, it does not block real fatal error
+ * with complex syntax.  (ex. it does not parse inside function.)
+ *
+ * @see http://php.net/goto
+ */
+class LabelContextPass extends CodeCleanerPass
+{
+    /** @var int */
+    private $functionDepth;
+
+    /** @var array */
+    private $labelDeclarations;
+    /** @var array */
+    private $labelGotos;
+
+    /**
+     * @param array $nodes
+     */
+    public function beforeTraverse(array $nodes)
+    {
+        $this->functionDepth = 0;
+        $this->labelDeclarations = [];
+        $this->labelGotos = [];
+    }
+
+    public function enterNode(Node $node)
+    {
+        if ($node instanceof FunctionLike) {
+            $this->functionDepth++;
+
+            return;
+        }
+
+        // node is inside function context
+        if ($this->functionDepth !== 0) {
+            return;
+        }
+
+        if ($node instanceof Goto_) {
+            $this->labelGotos[\strtolower($node->name)] = $node->getLine();
+        } elseif ($node instanceof Label) {
+            $this->labelDeclarations[\strtolower($node->name)] = $node->getLine();
+        }
+    }
+
+    /**
+     * @param \PhpParser\Node $node
+     */
+    public function leaveNode(Node $node)
+    {
+        if ($node instanceof FunctionLike) {
+            $this->functionDepth--;
+        }
+    }
+
+    public function afterTraverse(array $nodes)
+    {
+        foreach ($this->labelGotos as $name => $line) {
+            if (!isset($this->labelDeclarations[$name])) {
+                $msg = "'goto' to undefined label '{$name}'";
+                throw new FatalErrorException($msg, 0, E_ERROR, null, $line);
+            }
+        }
+    }
+}
diff --git a/vendor/psy/psysh/src/CodeCleaner/LeavePsyshAlonePass.php b/vendor/psy/psysh/src/CodeCleaner/LeavePsyshAlonePass.php
index 08f6fbee0cd4c85c97e6b1eee2c28f1ea7fd8632..2c282386316bd1888c2a4ba1759c0d92847f4c9f 100644
--- a/vendor/psy/psysh/src/CodeCleaner/LeavePsyshAlonePass.php
+++ b/vendor/psy/psysh/src/CodeCleaner/LeavePsyshAlonePass.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/CodeCleaner/LegacyEmptyPass.php b/vendor/psy/psysh/src/CodeCleaner/LegacyEmptyPass.php
deleted file mode 100644
index 9793d8c4c5cec8b4e0caf02ff1fd8e7f6ff42ce9..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/src/CodeCleaner/LegacyEmptyPass.php
+++ /dev/null
@@ -1,73 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\CodeCleaner;
-
-use PhpParser\Node;
-use PhpParser\Node\Expr\Empty_;
-use PhpParser\Node\Expr\Variable;
-use Psy\Exception\ParseErrorException;
-
-/**
- * Validate that the user did not call the language construct `empty()` on a
- * statement in PHP < 5.5.
- *
- * @codeCoverageIgnore
- */
-class LegacyEmptyPass extends CodeCleanerPass
-{
-    private $atLeastPhp55;
-
-    public function __construct()
-    {
-        $this->atLeastPhp55 = \version_compare(PHP_VERSION, '5.5', '>=');
-    }
-
-    /**
-     * Validate use of empty in PHP < 5.5.
-     *
-     * @throws ParseErrorException if the user used empty with anything but a variable
-     *
-     * @param Node $node
-     */
-    public function enterNode(Node $node)
-    {
-        if ($this->atLeastPhp55) {
-            return;
-        }
-
-        if (!$node instanceof Empty_) {
-            return;
-        }
-
-        if (!$node->expr instanceof Variable) {
-            $msg = \sprintf('syntax error, unexpected %s', $this->getUnexpectedThing($node->expr));
-
-            throw new ParseErrorException($msg, $node->expr->getLine());
-        }
-    }
-
-    private function getUnexpectedThing(Node $node)
-    {
-        switch ($node->getType()) {
-            case 'Scalar_String':
-            case 'Scalar_LNumber':
-            case 'Scalar_DNumber':
-                return \json_encode($node->value);
-
-            case 'Expr_ConstFetch':
-                return (string) $node->name;
-
-            default:
-                return $node->getType();
-        }
-    }
-}
diff --git a/vendor/psy/psysh/src/CodeCleaner/ListPass.php b/vendor/psy/psysh/src/CodeCleaner/ListPass.php
index b0d1d73e408fec1043e9145a2cafb730d977afe4..e99faaaa2cb5de46608e5c766777d7d55084be49 100644
--- a/vendor/psy/psysh/src/CodeCleaner/ListPass.php
+++ b/vendor/psy/psysh/src/CodeCleaner/ListPass.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/CodeCleaner/LoopContextPass.php b/vendor/psy/psysh/src/CodeCleaner/LoopContextPass.php
index 933278e73610face7ac5c9f1b7c9ef840d6b5f84..c0da7b2cb35aedd2b219041def0b54651b311a50 100644
--- a/vendor/psy/psysh/src/CodeCleaner/LoopContextPass.php
+++ b/vendor/psy/psysh/src/CodeCleaner/LoopContextPass.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/CodeCleaner/MagicConstantsPass.php b/vendor/psy/psysh/src/CodeCleaner/MagicConstantsPass.php
index 50936b2ccfabf1572f47682c1e3407bccb139953..adf92fba1e82903053b91dfc2169ef359012e2f6 100644
--- a/vendor/psy/psysh/src/CodeCleaner/MagicConstantsPass.php
+++ b/vendor/psy/psysh/src/CodeCleaner/MagicConstantsPass.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -29,7 +29,7 @@ class MagicConstantsPass extends CodeCleanerPass
      *
      * @param Node $node
      *
-     * @return null|FuncCall|String_
+     * @return FuncCall|String_|null
      */
     public function enterNode(Node $node)
     {
diff --git a/vendor/psy/psysh/src/CodeCleaner/NamespaceAwarePass.php b/vendor/psy/psysh/src/CodeCleaner/NamespaceAwarePass.php
index 6679206dc0c6c423d91898732822f2288939aa2b..eb2cfd7b61c1825691b6fe90c85cb37c8f2f6a21 100644
--- a/vendor/psy/psysh/src/CodeCleaner/NamespaceAwarePass.php
+++ b/vendor/psy/psysh/src/CodeCleaner/NamespaceAwarePass.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/CodeCleaner/NamespacePass.php b/vendor/psy/psysh/src/CodeCleaner/NamespacePass.php
index d26f07cce4ffc41ba22bfb746ae1e614b57a7cbe..1f11072efaf2ed3c5e651344585ee5312875d0c2 100644
--- a/vendor/psy/psysh/src/CodeCleaner/NamespacePass.php
+++ b/vendor/psy/psysh/src/CodeCleaner/NamespacePass.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -78,7 +78,7 @@ public function beforeTraverse(array $nodes)
      * Remember the namespace and (re)set the namespace on the CodeCleaner as
      * well.
      *
-     * @param null|Name $namespace
+     * @param Name|null $namespace
      */
     private function setNamespace($namespace)
     {
diff --git a/vendor/psy/psysh/src/CodeCleaner/NoReturnValue.php b/vendor/psy/psysh/src/CodeCleaner/NoReturnValue.php
index 90325701e61ebb251e5067e303b2f29b384760fb..d9c920bc7d71f62dd0d0baef580b806f07bd7160 100644
--- a/vendor/psy/psysh/src/CodeCleaner/NoReturnValue.php
+++ b/vendor/psy/psysh/src/CodeCleaner/NoReturnValue.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -26,10 +26,10 @@ class NoReturnValue
     /**
      * Get PhpParser AST expression for creating a new NoReturnValue.
      *
-     * @return PhpParser\Node\Expr\New_
+     * @return \PhpParser\Node\Expr\New_
      */
     public static function create()
     {
-        return new New_(new FullyQualifiedName('Psy\CodeCleaner\NoReturnValue'));
+        return new New_(new FullyQualifiedName(self::class));
     }
 }
diff --git a/vendor/psy/psysh/src/CodeCleaner/PassableByReferencePass.php b/vendor/psy/psysh/src/CodeCleaner/PassableByReferencePass.php
index 5b5dc0868b4f7644da059431da8aa2b5d092ac2e..dc347836b74bc8850f8330d67c537eef4597179a 100644
--- a/vendor/psy/psysh/src/CodeCleaner/PassableByReferencePass.php
+++ b/vendor/psy/psysh/src/CodeCleaner/PassableByReferencePass.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -13,6 +13,7 @@
 
 use PhpParser\Node;
 use PhpParser\Node\Expr;
+use PhpParser\Node\Expr\Array_;
 use PhpParser\Node\Expr\ClassConstFetch;
 use PhpParser\Node\Expr\FuncCall;
 use PhpParser\Node\Expr\MethodCall;
@@ -68,6 +69,11 @@ public function enterNode(Node $node)
 
     private function isPassableByReference(Node $arg)
     {
+        // Unpacked arrays can be passed by reference
+        if ($arg->value instanceof Array_) {
+            return $arg->unpack;
+        }
+
         // FuncCall, MethodCall and StaticCall are all PHP _warnings_ not fatal errors, so we'll let
         // PHP handle those ones :)
         return $arg->value instanceof ClassConstFetch ||
diff --git a/vendor/psy/psysh/src/CodeCleaner/RequirePass.php b/vendor/psy/psysh/src/CodeCleaner/RequirePass.php
index 31c156a37d1f2cd170905caa5cc1a841c480ee1f..902fd343fa54241d98ff76bcca2ca2176d3635ff 100644
--- a/vendor/psy/psysh/src/CodeCleaner/RequirePass.php
+++ b/vendor/psy/psysh/src/CodeCleaner/RequirePass.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -19,7 +19,6 @@
 use PhpParser\Node\Scalar\LNumber;
 use Psy\Exception\ErrorException;
 use Psy\Exception\FatalErrorException;
-use Psy\Shell;
 
 /**
  * Add runtime validation for `require` and `require_once` calls.
@@ -49,7 +48,7 @@ public function enterNode(Node $origNode)
          *   $foo = require \Psy\CodeCleaner\RequirePass::resolve($bar)
          */
         $node->expr = new StaticCall(
-            new FullyQualifiedName('Psy\CodeCleaner\RequirePass'),
+            new FullyQualifiedName(self::class),
             'resolve',
             [new Arg($origNode->expr), new Arg(new LNumber($origNode->getLine()))],
             $origNode->getAttributes()
diff --git a/vendor/psy/psysh/src/CodeCleaner/ReturnTypePass.php b/vendor/psy/psysh/src/CodeCleaner/ReturnTypePass.php
new file mode 100644
index 0000000000000000000000000000000000000000..e3a4c96b895be632ab68a55ec7b74c527970ce71
--- /dev/null
+++ b/vendor/psy/psysh/src/CodeCleaner/ReturnTypePass.php
@@ -0,0 +1,118 @@
+<?php
+
+/*
+ * This file is part of Psy Shell.
+ *
+ * (c) 2012-2020 Justin Hileman
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Psy\CodeCleaner;
+
+use PhpParser\Node;
+use PhpParser\Node\Expr\Closure;
+use PhpParser\Node\Expr\ConstFetch;
+use PhpParser\Node\Identifier;
+use PhpParser\Node\NullableType;
+use PhpParser\Node\Stmt\Function_;
+use PhpParser\Node\Stmt\Return_;
+use Psy\Exception\FatalErrorException;
+
+/**
+ * Add runtime validation for return types.
+ */
+class ReturnTypePass extends CodeCleanerPass
+{
+    const MESSAGE = 'A function with return type must return a value';
+    const NULLABLE_MESSAGE = 'A function with return type must return a value (did you mean "return null;" instead of "return;"?)';
+    const VOID_MESSAGE = 'A void function must not return a value';
+    const VOID_NULL_MESSAGE = 'A void function must not return a value (did you mean "return;" instead of "return null;"?)';
+    const NULLABLE_VOID_MESSAGE = 'Void type cannot be nullable';
+
+    private $atLeastPhp71;
+    private $returnTypeStack = [];
+
+    public function __construct()
+    {
+        $this->atLeastPhp71 = \version_compare(PHP_VERSION, '7.1', '>=');
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function enterNode(Node $node)
+    {
+        if (!$this->atLeastPhp71) {
+            return; // @codeCoverageIgnore
+        }
+
+        if ($this->isFunctionNode($node)) {
+            $this->returnTypeStack[] = $node->returnType;
+
+            return;
+        }
+
+        if (!empty($this->returnTypeStack) && $node instanceof Return_) {
+            $expectedType = \end($this->returnTypeStack);
+            if ($expectedType === null) {
+                return;
+            }
+
+            $msg = null;
+
+            if ($this->typeName($expectedType) === 'void') {
+                // Void functions
+                if ($expectedType instanceof NullableType) {
+                    $msg = self::NULLABLE_VOID_MESSAGE;
+                } elseif ($node->expr instanceof ConstFetch && \strtolower($node->expr->name) === 'null') {
+                    $msg = self::VOID_NULL_MESSAGE;
+                } elseif ($node->expr !== null) {
+                    $msg = self::VOID_MESSAGE;
+                }
+            } else {
+                // Everything else
+                if ($node->expr === null) {
+                    $msg = $expectedType instanceof NullableType ? self::NULLABLE_MESSAGE : self::MESSAGE;
+                }
+            }
+
+            if ($msg !== null) {
+                throw new FatalErrorException($msg, 0, E_ERROR, null, $node->getLine());
+            }
+        }
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function leaveNode(Node $node)
+    {
+        if (!$this->atLeastPhp71) {
+            return; // @codeCoverageIgnore
+        }
+
+        if (!empty($this->returnTypeStack) && $this->isFunctionNode($node)) {
+            \array_pop($this->returnTypeStack);
+        }
+    }
+
+    private function isFunctionNode(Node $node)
+    {
+        return $node instanceof Function_ || $node instanceof Closure;
+    }
+
+    private function typeName(Node $node)
+    {
+        if ($node instanceof NullableType) {
+            return \strtolower($node->type->name);
+        }
+
+        if ($node instanceof Identifier) {
+            return \strtolower($node->name);
+        }
+
+        throw new \InvalidArgumentException('Unable to find type name');
+    }
+}
diff --git a/vendor/psy/psysh/src/CodeCleaner/StrictTypesPass.php b/vendor/psy/psysh/src/CodeCleaner/StrictTypesPass.php
index 058a5a829031829e812cb7a5afe50e761e5c8b03..c71b062c816a4b6d5eb3b3432af5786fffb8d22d 100644
--- a/vendor/psy/psysh/src/CodeCleaner/StrictTypesPass.php
+++ b/vendor/psy/psysh/src/CodeCleaner/StrictTypesPass.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -57,7 +57,7 @@ public function beforeTraverse(array $nodes)
 
         $prependStrictTypes = $this->strictTypes;
 
-        foreach ($nodes as $key => $node) {
+        foreach ($nodes as $node) {
             if ($node instanceof Declare_) {
                 foreach ($node->declares as $declare) {
                     // For PHP Parser 4.x
diff --git a/vendor/psy/psysh/src/CodeCleaner/UseStatementPass.php b/vendor/psy/psysh/src/CodeCleaner/UseStatementPass.php
index 64ac5be6d53a1f71b9a607653ff88bc559b5bb71..c755296ceb1e9561e4a441108f8bc36a39a555f5 100644
--- a/vendor/psy/psysh/src/CodeCleaner/UseStatementPass.php
+++ b/vendor/psy/psysh/src/CodeCleaner/UseStatementPass.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -17,6 +17,7 @@
 use PhpParser\Node\Stmt\GroupUse;
 use PhpParser\Node\Stmt\Namespace_;
 use PhpParser\Node\Stmt\Use_;
+use PhpParser\Node\Stmt\UseUse;
 use PhpParser\NodeTraverser;
 
 /**
@@ -65,18 +66,18 @@ public function enterNode(Node $node)
      */
     public function leaveNode(Node $node)
     {
+        // Store a reference to every "use" statement, because we'll need them in a bit.
         if ($node instanceof Use_) {
-            // Store a reference to every "use" statement, because we'll need
-            // them in a bit.
             foreach ($node->uses as $use) {
                 $alias = $use->alias ?: \end($use->name->parts);
                 $this->aliases[\strtolower($alias)] = $use->name;
             }
 
             return NodeTraverser::REMOVE_NODE;
-        } elseif ($node instanceof GroupUse) {
-            // Expand every "use" statement in the group into a full, standalone
-            // "use" and store 'em with the others.
+        }
+
+        // Expand every "use" statement in the group into a full, standalone "use" and store 'em with the others.
+        if ($node instanceof GroupUse) {
             foreach ($node->uses as $use) {
                 $alias = $use->alias ?: \end($use->name->parts);
                 $this->aliases[\strtolower($alias)] = Name::concat($node->prefix, $use->name, [
@@ -86,23 +87,32 @@ public function leaveNode(Node $node)
             }
 
             return NodeTraverser::REMOVE_NODE;
-        } elseif ($node instanceof Namespace_) {
-            // Start fresh, since we're done with this namespace.
+        }
+
+        // Start fresh, since we're done with this namespace.
+        if ($node instanceof Namespace_) {
             $this->lastNamespace = $node->name;
             $this->lastAliases   = $this->aliases;
             $this->aliases       = [];
-        } else {
-            foreach ($node as $name => $subNode) {
-                if ($subNode instanceof Name) {
-                    // Implicitly thunk all aliases.
-                    if ($replacement = $this->findAlias($subNode)) {
-                        $node->$name = $replacement;
-                    }
+
+            return;
+        }
+
+        // Do nothing with UseUse; this an entry in the list of uses in the use statement.
+        if ($node instanceof UseUse) {
+            return;
+        }
+
+        // For everything else, we'll implicitly thunk all aliases into fully-qualified names.
+        foreach ($node as $name => $subNode) {
+            if ($subNode instanceof Name) {
+                if ($replacement = $this->findAlias($subNode)) {
+                    $node->$name = $replacement;
                 }
             }
-
-            return $node;
         }
+
+        return $node;
     }
 
     /**
diff --git a/vendor/psy/psysh/src/CodeCleaner/ValidClassNamePass.php b/vendor/psy/psysh/src/CodeCleaner/ValidClassNamePass.php
index 9578c9a86f7939e971cf1c3d32f422c900294636..c8579721ba10682301186df4f2e569a513b74357 100644
--- a/vendor/psy/psysh/src/CodeCleaner/ValidClassNamePass.php
+++ b/vendor/psy/psysh/src/CodeCleaner/ValidClassNamePass.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -39,12 +39,6 @@ class ValidClassNamePass extends NamespaceAwarePass
     const TRAIT_TYPE     = 'trait';
 
     private $conditionalScopes = 0;
-    private $atLeastPhp55;
-
-    public function __construct()
-    {
-        $this->atLeastPhp55 = \version_compare(PHP_VERSION, '5.5', '>=');
-    }
 
     /**
      * Validate class, interface and trait definitions.
@@ -163,8 +157,8 @@ protected function validateNewExpression(New_ $stmt)
      */
     protected function validateClassConstFetchExpression(ClassConstFetch $stmt)
     {
-        // there is no need to check exists for ::class const for php 5.5 or newer
-        if (\strtolower($stmt->name) === 'class' && $this->atLeastPhp55) {
+        // there is no need to check exists for ::class const
+        if (\strtolower($stmt->name) === 'class') {
             return;
         }
 
diff --git a/vendor/psy/psysh/src/CodeCleaner/ValidConstantPass.php b/vendor/psy/psysh/src/CodeCleaner/ValidConstantPass.php
index 2d5e3e6d9456357a0569e88b43b35a8c72cc679b..765844a4778f5b84e94ab2d2ed23dc12744c673a 100644
--- a/vendor/psy/psysh/src/CodeCleaner/ValidConstantPass.php
+++ b/vendor/psy/psysh/src/CodeCleaner/ValidConstantPass.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/CodeCleaner/ValidConstructorPass.php b/vendor/psy/psysh/src/CodeCleaner/ValidConstructorPass.php
index a079e26c9917cd3361cb378cf4af7f52c2dcfb38..6fc2b095e0fc8b3bad8188da4a976b7ae682ca61 100644
--- a/vendor/psy/psysh/src/CodeCleaner/ValidConstructorPass.php
+++ b/vendor/psy/psysh/src/CodeCleaner/ValidConstructorPass.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/CodeCleaner/ValidFunctionNamePass.php b/vendor/psy/psysh/src/CodeCleaner/ValidFunctionNamePass.php
index dd1e057630a13a3c2760e048199d7a90a3055bc6..318e355aae5807011a468c61d34bf2e201b64772 100644
--- a/vendor/psy/psysh/src/CodeCleaner/ValidFunctionNamePass.php
+++ b/vendor/psy/psysh/src/CodeCleaner/ValidFunctionNamePass.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/Command/BufferCommand.php b/vendor/psy/psysh/src/Command/BufferCommand.php
index 83ba34a8a60cf23c239e200d2cc1abcfd7fd0acf..6e16ac536f91a881626cebd7df5e03d33893c6e6 100644
--- a/vendor/psy/psysh/src/Command/BufferCommand.php
+++ b/vendor/psy/psysh/src/Command/BufferCommand.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -56,6 +56,8 @@ protected function execute(InputInterface $input, OutputInterface $output)
         } else {
             $output->writeln($this->formatLines($buf), ShellOutput::NUMBER_LINES);
         }
+
+        return 0;
     }
 
     /**
diff --git a/vendor/psy/psysh/src/Command/ClearCommand.php b/vendor/psy/psysh/src/Command/ClearCommand.php
index 6b12048a96467521610c8af7bbd0707e2e8015a1..d20abab128107b4da88b97572dce0de8f182ab23 100644
--- a/vendor/psy/psysh/src/Command/ClearCommand.php
+++ b/vendor/psy/psysh/src/Command/ClearCommand.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -45,5 +45,7 @@ protected function configure()
     protected function execute(InputInterface $input, OutputInterface $output)
     {
         $output->write(\sprintf('%c[2J%c[0;0f', 27, 27));
+
+        return 0;
     }
 }
diff --git a/vendor/psy/psysh/src/Command/Command.php b/vendor/psy/psysh/src/Command/Command.php
index be013a1b92178606a8eff4845cd573db754b47ec..27017094dbaa91493cd56f5bfb69b3af591a5989 100644
--- a/vendor/psy/psysh/src/Command/Command.php
+++ b/vendor/psy/psysh/src/Command/Command.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -27,7 +27,7 @@ abstract class Command extends BaseCommand
     /**
      * Sets the application instance for this command.
      *
-     * @param Application $application An Application instance
+     * @param Application|null $application An Application instance
      *
      * @api
      */
@@ -232,7 +232,7 @@ private function getMaxWidth()
     private function formatDefaultValue($default)
     {
         if (\is_array($default) && $default === \array_values($default)) {
-            return \sprintf("array('%s')", \implode("', '", $default));
+            return \sprintf("['%s']", \implode("', '", $default));
         }
 
         return \str_replace("\n", '', \var_export($default, true));
@@ -247,15 +247,22 @@ private function formatDefaultValue($default)
      */
     protected function getTable(OutputInterface $output)
     {
-        if (!\class_exists('Symfony\Component\Console\Helper\Table')) {
+        if (!\class_exists(Table::class)) {
             return $this->getTableHelper();
         }
 
         $style = new TableStyle();
-        $style
-            ->setVerticalBorderChar(' ')
-            ->setHorizontalBorderChar('')
-            ->setCrossingChar('');
+
+        // Symfony 4.1 deprecated single-argument style setters.
+        if (\method_exists($style, 'setVerticalBorderChars')) {
+            $style->setVerticalBorderChars(' ');
+            $style->setHorizontalBorderChars('');
+            $style->setCrossingChars('', '', '', '', '', '', '', '', '');
+        } else {
+            $style->setVerticalBorderChar(' ');
+            $style->setHorizontalBorderChar('');
+            $style->setCrossingChar('');
+        }
 
         $table = new Table($output);
 
diff --git a/vendor/psy/psysh/src/Command/DocCommand.php b/vendor/psy/psysh/src/Command/DocCommand.php
index 913634a0ab59082d5b895eb9f7dff816c89e619f..ba6c24f340bac3e2382356c414959fd5ec2c8006 100644
--- a/vendor/psy/psysh/src/Command/DocCommand.php
+++ b/vendor/psy/psysh/src/Command/DocCommand.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -14,8 +14,11 @@
 use Psy\Formatter\DocblockFormatter;
 use Psy\Formatter\SignatureFormatter;
 use Psy\Input\CodeArgument;
+use Psy\Reflection\ReflectionClassConstant;
+use Psy\Reflection\ReflectionConstant_;
 use Psy\Reflection\ReflectionLanguageConstruct;
 use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputOption;
 use Symfony\Component\Console\Output\OutputInterface;
 
 /**
@@ -32,6 +35,7 @@ protected function configure()
             ->setName('doc')
             ->setAliases(['rtfm', 'man'])
             ->setDefinition([
+                new InputOption('all', 'a', InputOption::VALUE_NONE, 'Show documentation for superclasses as well as the current class.'),
                 new CodeArgument('target', CodeArgument::REQUIRED, 'Function, class, instance, constant, method or property to document.'),
             ])
             ->setDescription('Read the documentation for an object, class, constant, method or property.')
@@ -67,49 +71,83 @@ protected function execute(InputInterface $input, OutputInterface $output)
 
         $db = $this->getApplication()->getManualDb();
 
-        $output->page(function ($output) use ($reflector, $doc, $db) {
-            $output->writeln(SignatureFormatter::format($reflector));
-            $output->writeln('');
+        if ($output instanceof ShellOutput) {
+            $output->startPaging();
+        }
+
+        // Maybe include the declaring class
+        if ($reflector instanceof \ReflectionMethod || $reflector instanceof \ReflectionProperty) {
+            $output->writeln(SignatureFormatter::format($reflector->getDeclaringClass()));
+        }
 
-            if (empty($doc) && !$db) {
-                $output->writeln('<warning>PHP manual not found</warning>');
-                $output->writeln('    To document core PHP functionality, download the PHP reference manual:');
-                $output->writeln('    https://github.com/bobthecow/psysh/wiki/PHP-manual');
-            } else {
-                $output->writeln($doc);
+        $output->writeln(SignatureFormatter::format($reflector));
+        $output->writeln('');
+
+        if (empty($doc) && !$db) {
+            $output->writeln('<warning>PHP manual not found</warning>');
+            $output->writeln('    To document core PHP functionality, download the PHP reference manual:');
+            $output->writeln('    https://github.com/bobthecow/psysh/wiki/PHP-manual');
+        } else {
+            $output->writeln($doc);
+        }
+
+        if ($input->getOption('all')) {
+            $parent = $reflector;
+            foreach ($this->getParentReflectors($reflector) as $parent) {
+                $output->writeln('');
+                $output->writeln('---');
+                $output->writeln('');
+
+                // Maybe include the declaring class
+                if ($parent instanceof \ReflectionMethod || $parent instanceof \ReflectionProperty) {
+                    $output->writeln(SignatureFormatter::format($parent->getDeclaringClass()));
+                }
+
+                $output->writeln(SignatureFormatter::format($parent));
+                $output->writeln('');
+
+                if ($doc = $this->getManualDoc($parent) ?: DocblockFormatter::format($parent)) {
+                    $output->writeln($doc);
+                }
             }
-        });
+        }
+
+        if ($output instanceof ShellOutput) {
+            $output->stopPaging();
+        }
 
         // Set some magic local variables
         $this->setCommandScopeVariables($reflector);
+
+        return 0;
     }
 
     private function getManualDoc($reflector)
     {
         switch (\get_class($reflector)) {
-            case 'ReflectionClass':
-            case 'ReflectionObject':
-            case 'ReflectionFunction':
+            case \ReflectionClass::class:
+            case \ReflectionObject::class:
+            case \ReflectionFunction::class:
                 $id = $reflector->name;
                 break;
 
-            case 'ReflectionMethod':
+            case \ReflectionMethod::class:
                 $id = $reflector->class . '::' . $reflector->name;
                 break;
 
-            case 'ReflectionProperty':
+            case \ReflectionProperty::class:
                 $id = $reflector->class . '::$' . $reflector->name;
                 break;
 
-            case 'ReflectionClassConstant':
-            case 'Psy\Reflection\ReflectionClassConstant':
+            case \ReflectionClassConstant::class:
+            case ReflectionClassConstant::class:
                 // @todo this is going to collide with ReflectionMethod ids
                 // someday... start running the query by id + type if the DB
                 // supports it.
                 $id = $reflector->class . '::' . $reflector->name;
                 break;
 
-            case 'Psy\Reflection\ReflectionConstant_':
+            case ReflectionConstant_::class:
                 $id = $reflector->name;
                 break;
 
@@ -120,6 +158,62 @@ private function getManualDoc($reflector)
         return $this->getManualDocById($id);
     }
 
+    /**
+     * Get all all parent Reflectors for a given Reflector.
+     *
+     * For example, passing a Class, Object or TraitReflector will yield all
+     * traits and parent classes. Passing a Method or PropertyReflector will
+     * yield Reflectors for the same-named method or property on all traits and
+     * parent classes.
+     *
+     * @return Generator a whole bunch of \Reflector instances
+     */
+    private function getParentReflectors($reflector)
+    {
+        switch (\get_class($reflector)) {
+            case \ReflectionClass::class:
+            case \ReflectionObject::class:
+                foreach ($reflector->getTraits() as $trait) {
+                    yield $trait;
+                }
+
+                foreach ($reflector->getInterfaces() as $interface) {
+                    yield $interface;
+                }
+
+                while ($reflector = $reflector->getParentClass()) {
+                    yield $reflector;
+
+                    foreach ($reflector->getTraits() as $trait) {
+                        yield $trait;
+                    }
+
+                    foreach ($reflector->getInterfaces() as $interface) {
+                        yield $interface;
+                    }
+                }
+
+                return;
+
+            case \ReflectionMethod::class:
+                foreach ($this->getParentReflectors($reflector->getDeclaringClass()) as $parent) {
+                    if ($parent->hasMethod($reflector->getName())) {
+                        yield $parent->getMethod($reflector->getName());
+                    }
+                }
+
+                return;
+
+            case \ReflectionProperty::class:
+                foreach ($this->getParentReflectors($reflector->getDeclaringClass()) as $parent) {
+                    if ($parent->hasProperty($reflector->getName())) {
+                        yield $parent->getProperty($reflector->getName());
+                    }
+                }
+                break;
+        }
+    }
+
     private function getManualDocById($id)
     {
         if ($db = $this->getApplication()->getManualDb()) {
diff --git a/vendor/psy/psysh/src/Command/DumpCommand.php b/vendor/psy/psysh/src/Command/DumpCommand.php
index 9a8aad826b5aada4a9a0dc39eca2512c20232fb4..5dbfd7d073e52832dd3e6a837769535cea6b12ef 100644
--- a/vendor/psy/psysh/src/Command/DumpCommand.php
+++ b/vendor/psy/psysh/src/Command/DumpCommand.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -76,6 +76,8 @@ protected function execute(InputInterface $input, OutputInterface $output)
         if (\is_object($target)) {
             $this->setCommandScopeVariables(new \ReflectionObject($target));
         }
+
+        return 0;
     }
 
     /**
diff --git a/vendor/psy/psysh/src/Command/EditCommand.php b/vendor/psy/psysh/src/Command/EditCommand.php
index 0571414948f29da7cce3e6663346dfa7bdb79251..0f9d79545ee28fec0ec045a2df552bd911499a35 100644
--- a/vendor/psy/psysh/src/Command/EditCommand.php
+++ b/vendor/psy/psysh/src/Command/EditCommand.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -104,6 +104,8 @@ protected function execute(InputInterface $input, OutputInterface $output)
         if ($execute) {
             $this->getApplication()->addInput($editedContent);
         }
+
+        return 0;
     }
 
     /**
@@ -148,7 +150,7 @@ private function extractFilePath($fileArgument)
 
     /**
      * @param string $filePath
-     * @param string $shouldRemoveFile
+     * @param bool   $shouldRemoveFile
      *
      * @return string
      *
@@ -157,9 +159,10 @@ private function extractFilePath($fileArgument)
     private function editFile($filePath, $shouldRemoveFile)
     {
         $escapedFilePath = \escapeshellarg($filePath);
+        $editor = (isset($_SERVER['EDITOR']) && $_SERVER['EDITOR']) ? $_SERVER['EDITOR'] : 'nano';
 
         $pipes = [];
-        $proc = \proc_open((\getenv('EDITOR') ?: 'nano') . " {$escapedFilePath}", [STDIN, STDOUT, STDERR], $pipes);
+        $proc = \proc_open("{$editor} {$escapedFilePath}", [STDIN, STDOUT, STDERR], $pipes);
         \proc_close($proc);
 
         $editedContent = @\file_get_contents($filePath);
diff --git a/vendor/psy/psysh/src/Command/ExitCommand.php b/vendor/psy/psysh/src/Command/ExitCommand.php
index 43398861235ab79019190f7b3864d85409ec2a0a..3e51a3462b7098b702e62929d7e9e99697688e55 100644
--- a/vendor/psy/psysh/src/Command/ExitCommand.php
+++ b/vendor/psy/psysh/src/Command/ExitCommand.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/Command/HelpCommand.php b/vendor/psy/psysh/src/Command/HelpCommand.php
index 82ec3a835996b07e0ca4754a68e01b37710eb147..d3cdb9402a2060f3a2de0d2d0c51da9688b5cef8 100644
--- a/vendor/psy/psysh/src/Command/HelpCommand.php
+++ b/vendor/psy/psysh/src/Command/HelpCommand.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -11,6 +11,7 @@
 
 namespace Psy\Command;
 
+use Psy\Output\ShellOutput;
 use Symfony\Component\Console\Helper\TableHelper;
 use Symfony\Component\Console\Input\InputArgument;
 use Symfony\Component\Console\Input\InputInterface;
@@ -86,13 +87,21 @@ protected function execute(InputInterface $input, OutputInterface $output)
                 ]);
             }
 
-            $output->startPaging();
+            if ($output instanceof ShellOutput) {
+                $output->startPaging();
+            }
+
             if ($table instanceof TableHelper) {
                 $table->render($output);
             } else {
                 $table->render();
             }
-            $output->stopPaging();
+
+            if ($output instanceof ShellOutput) {
+                $output->stopPaging();
+            }
         }
+
+        return 0;
     }
 }
diff --git a/vendor/psy/psysh/src/Command/HistoryCommand.php b/vendor/psy/psysh/src/Command/HistoryCommand.php
index 23f6899e324fc5951090ee30842518888229d550..fe4a54b380a4788d18a88c479570f7d0736f08dc 100644
--- a/vendor/psy/psysh/src/Command/HistoryCommand.php
+++ b/vendor/psy/psysh/src/Command/HistoryCommand.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -140,11 +140,13 @@ protected function execute(InputInterface $input, OutputInterface $output)
         } else {
             $type = $input->getOption('no-numbers') ? 0 : ShellOutput::NUMBER_LINES;
             if (!$highlighted) {
-                $type = $type | ShellOutput::OUTPUT_RAW;
+                $type = $type | OutputInterface::OUTPUT_RAW;
             }
 
             $output->page($highlighted ?: $history, $type);
         }
+
+        return 0;
     }
 
     /**
diff --git a/vendor/psy/psysh/src/Command/ListCommand.php b/vendor/psy/psysh/src/Command/ListCommand.php
index 67f4e041e8e494cdf55757bb152e2c9f3486f829..c2e7b26cb57243b548d6a1d4caa20aefcb8e8a09 100644
--- a/vendor/psy/psysh/src/Command/ListCommand.php
+++ b/vendor/psy/psysh/src/Command/ListCommand.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -22,6 +22,7 @@
 use Psy\Exception\RuntimeException;
 use Psy\Input\CodeArgument;
 use Psy\Input\FilterOptions;
+use Psy\Output\ShellOutput;
 use Psy\VarDumper\Presenter;
 use Psy\VarDumper\PresenterAware;
 use Symfony\Component\Console\Formatter\OutputFormatter;
@@ -57,7 +58,7 @@ protected function configure()
 
         $this
             ->setName('ls')
-            ->setAliases(['list', 'dir'])
+            ->setAliases(['dir'])
             ->setDefinition([
                 new CodeArgument('target', CodeArgument::OPTIONAL, 'A target class or object to list.'),
 
@@ -126,7 +127,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
         }
 
         // @todo something cleaner than this :-/
-        if ($input->getOption('long')) {
+        if ($output instanceof ShellOutput && $input->getOption('long')) {
             $output->startPaging();
         }
 
@@ -134,7 +135,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
             $this->$method($output, $enumerator->enumerate($input, $reflector, $target));
         }
 
-        if ($input->getOption('long')) {
+        if ($output instanceof ShellOutput && $input->getOption('long')) {
             $output->stopPaging();
         }
 
@@ -142,6 +143,8 @@ protected function execute(InputInterface $input, OutputInterface $output)
         if ($reflector !== null) {
             $this->setCommandScopeVariables($reflector);
         }
+
+        return 0;
     }
 
     /**
@@ -169,11 +172,11 @@ protected function initEnumerators()
      * Write the list items to $output.
      *
      * @param OutputInterface $output
-     * @param null|array      $result List of enumerated items
+     * @param array           $result List of enumerated items
      */
-    protected function write(OutputInterface $output, array $result = null)
+    protected function write(OutputInterface $output, array $result)
     {
-        if ($result === null) {
+        if (\count($result) === 0) {
             return;
         }
 
@@ -189,11 +192,11 @@ protected function write(OutputInterface $output, array $result = null)
      * Items are listed one per line, and include the item signature.
      *
      * @param OutputInterface $output
-     * @param null|array      $result List of enumerated items
+     * @param array           $result List of enumerated items
      */
-    protected function writeLong(OutputInterface $output, array $result = null)
+    protected function writeLong(OutputInterface $output, array $result)
     {
-        if ($result === null) {
+        if (\count($result) === 0) {
             return;
         }
 
@@ -255,13 +258,14 @@ private function validateInput(InputInterface $input)
             $input->setOption('vars', true);
         } else {
             // if a target is passed, classes, functions, etc don't make sense
-            foreach (['vars', 'globals', 'functions', 'classes', 'interfaces', 'traits'] as $option) {
+            foreach (['vars', 'globals'] as $option) {
                 if ($input->getOption($option)) {
                     throw new RuntimeException('--' . $option . ' does not make sense with a specified target');
                 }
             }
 
-            foreach (['constants', 'properties', 'methods'] as $option) {
+            // @todo ensure that 'functions', 'classes', 'interfaces', 'traits' only accept namespace target?
+            foreach (['constants', 'properties', 'methods', 'functions', 'classes', 'interfaces', 'traits'] as $option) {
                 if ($input->getOption($option)) {
                     return;
                 }
diff --git a/vendor/psy/psysh/src/Command/ListCommand/ClassConstantEnumerator.php b/vendor/psy/psysh/src/Command/ListCommand/ClassConstantEnumerator.php
index a1d82ead652fddea573f1fb543678f901e066d2e..50c4a7090c0d8f4d1e6bbbd88ba1e9335a85bfad 100644
--- a/vendor/psy/psysh/src/Command/ListCommand/ClassConstantEnumerator.php
+++ b/vendor/psy/psysh/src/Command/ListCommand/ClassConstantEnumerator.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -25,27 +25,26 @@ class ClassConstantEnumerator extends Enumerator
     protected function listItems(InputInterface $input, \Reflector $reflector = null, $target = null)
     {
         // only list constants when a Reflector is present.
-
         if ($reflector === null) {
-            return;
+            return [];
         }
 
         // We can only list constants on actual class (or object) reflectors.
         if (!$reflector instanceof \ReflectionClass) {
             // @todo handle ReflectionExtension as well
-            return;
+            return [];
         }
 
         // only list constants if we are specifically asked
         if (!$input->getOption('constants')) {
-            return;
+            return [];
         }
 
         $noInherit = $input->getOption('no-inherit');
         $constants = $this->prepareConstants($this->getConstants($reflector, $noInherit));
 
         if (empty($constants)) {
-            return;
+            return [];
         }
 
         $ret = [];
@@ -118,8 +117,6 @@ protected function getKindLabel(\ReflectionClass $reflector)
     {
         if ($reflector->isInterface()) {
             return 'Interface Constants';
-        } elseif (\method_exists($reflector, 'isTrait') && $reflector->isTrait()) {
-            return 'Trait Constants';
         } else {
             return 'Class Constants';
         }
diff --git a/vendor/psy/psysh/src/Command/ListCommand/ClassEnumerator.php b/vendor/psy/psysh/src/Command/ListCommand/ClassEnumerator.php
index 8ab6d7a9556c1c42bf26255134347c41eefb8dc0..49a9c3a9613b9d20b599b596ae894d81e508f561 100644
--- a/vendor/psy/psysh/src/Command/ListCommand/ClassEnumerator.php
+++ b/vendor/psy/psysh/src/Command/ListCommand/ClassEnumerator.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -11,6 +11,7 @@
 
 namespace Psy\Command\ListCommand;
 
+use Psy\Reflection\ReflectionNamespace;
 use Symfony\Component\Console\Input\InputInterface;
 
 /**
@@ -23,35 +24,29 @@ class ClassEnumerator extends Enumerator
      */
     protected function listItems(InputInterface $input, \Reflector $reflector = null, $target = null)
     {
-        // only list classes when no Reflector is present.
-        //
-        // @todo make a NamespaceReflector and pass that in for commands like:
-        //
-        //     ls --classes Foo
-        //
-        // ... for listing classes in the Foo namespace
-
-        if ($reflector !== null || $target !== null) {
-            return;
+        // if we have a reflector, ensure that it's a namespace reflector
+        if (($target !== null || $reflector !== null) && !$reflector instanceof ReflectionNamespace) {
+            return [];
         }
 
-        $user     = $input->getOption('user');
         $internal = $input->getOption('internal');
+        $user     = $input->getOption('user');
+        $prefix   = $reflector === null ? null : \strtolower($reflector->getName()) . '\\';
 
         $ret = [];
 
         // only list classes, interfaces and traits if we are specifically asked
 
         if ($input->getOption('classes')) {
-            $ret = \array_merge($ret, $this->filterClasses('Classes', \get_declared_classes(), $internal, $user));
+            $ret = \array_merge($ret, $this->filterClasses('Classes', \get_declared_classes(), $internal, $user, $prefix));
         }
 
         if ($input->getOption('interfaces')) {
-            $ret = \array_merge($ret, $this->filterClasses('Interfaces', \get_declared_interfaces(), $internal, $user));
+            $ret = \array_merge($ret, $this->filterClasses('Interfaces', \get_declared_interfaces(), $internal, $user, $prefix));
         }
 
         if ($input->getOption('traits')) {
-            $ret = \array_merge($ret, $this->filterClasses('Traits', \get_declared_traits(), $internal, $user));
+            $ret = \array_merge($ret, $this->filterClasses('Traits', \get_declared_traits(), $internal, $user, $prefix));
         }
 
         return \array_map([$this, 'prepareClasses'], \array_filter($ret));
@@ -67,15 +62,20 @@ protected function listItems(InputInterface $input, \Reflector $reflector = null
      * @param array  $classes
      * @param bool   $internal
      * @param bool   $user
+     * @param string $prefix
      *
      * @return array
      */
-    protected function filterClasses($key, $classes, $internal, $user)
+    protected function filterClasses($key, $classes, $internal, $user, $prefix = null)
     {
         $ret = [];
 
         if ($internal) {
-            $ret['Internal ' . $key] = \array_filter($classes, function ($class) {
+            $ret['Internal ' . $key] = \array_filter($classes, function ($class) use ($prefix) {
+                if ($prefix !== null && \strpos(\strtolower($class), $prefix) !== 0) {
+                    return false;
+                }
+
                 $refl = new \ReflectionClass($class);
 
                 return $refl->isInternal();
@@ -83,7 +83,11 @@ protected function filterClasses($key, $classes, $internal, $user)
         }
 
         if ($user) {
-            $ret['User ' . $key] = \array_filter($classes, function ($class) {
+            $ret['User ' . $key] = \array_filter($classes, function ($class) use ($prefix) {
+                if ($prefix !== null && \strpos(\strtolower($class), $prefix) !== 0) {
+                    return false;
+                }
+
                 $refl = new \ReflectionClass($class);
 
                 return !$refl->isInternal();
@@ -91,7 +95,9 @@ protected function filterClasses($key, $classes, $internal, $user)
         }
 
         if (!$user && !$internal) {
-            $ret[$key] = $classes;
+            $ret[$key] = \array_filter($classes, function ($class) use ($prefix) {
+                return $prefix === null || \strpos(\strtolower($class), $prefix) === 0;
+            });
         }
 
         return $ret;
diff --git a/vendor/psy/psysh/src/Command/ListCommand/ConstantEnumerator.php b/vendor/psy/psysh/src/Command/ListCommand/ConstantEnumerator.php
index ad4ce0d12553de21680f3132375f8c512c5f07f5..deb6fd1097cfe9c6638543c3b9f9f5cc24077ebc 100644
--- a/vendor/psy/psysh/src/Command/ListCommand/ConstantEnumerator.php
+++ b/vendor/psy/psysh/src/Command/ListCommand/ConstantEnumerator.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -11,6 +11,7 @@
 
 namespace Psy\Command\ListCommand;
 
+use Psy\Reflection\ReflectionNamespace;
 use Symfony\Component\Console\Input\InputInterface;
 
 /**
@@ -18,31 +19,64 @@
  */
 class ConstantEnumerator extends Enumerator
 {
+    // Because `Json` is ugly.
+    private static $categoryLabels = [
+        'libxml'   => 'libxml',
+        'openssl'  => 'OpenSSL',
+        'pcre'     => 'PCRE',
+        'sqlite3'  => 'SQLite3',
+        'curl'     => 'cURL',
+        'dom'      => 'DOM',
+        'ftp'      => 'FTP',
+        'gd'       => 'GD',
+        'gmp'      => 'GMP',
+        'iconv'    => 'iconv',
+        'json'     => 'JSON',
+        'ldap'     => 'LDAP',
+        'mbstring' => 'mbstring',
+        'odbc'     => 'ODBC',
+        'pcntl'    => 'PCNTL',
+        'pgsql'    => 'pgsql',
+        'posix'    => 'POSIX',
+        'mysqli'   => 'mysqli',
+        'soap'     => 'SOAP',
+        'exif'     => 'EXIF',
+        'sysvmsg'  => 'sysvmsg',
+        'xml'      => 'XML',
+        'xsl'      => 'XSL',
+    ];
+
     /**
      * {@inheritdoc}
      */
     protected function listItems(InputInterface $input, \Reflector $reflector = null, $target = null)
     {
-        // only list constants when no Reflector is present.
-        //
-        // @todo make a NamespaceReflector and pass that in for commands like:
-        //
-        //     ls --constants Foo
-        //
-        // ... for listing constants in the Foo namespace
-        if ($reflector !== null || $target !== null) {
-            return;
+        // if we have a reflector, ensure that it's a namespace reflector
+        if (($target !== null || $reflector !== null) && !$reflector instanceof ReflectionNamespace) {
+            return [];
         }
 
         // only list constants if we are specifically asked
         if (!$input->getOption('constants')) {
-            return;
+            return [];
         }
 
         $user     = $input->getOption('user');
         $internal = $input->getOption('internal');
         $category = $input->getOption('category');
 
+        if ($category) {
+            $category = \strtolower($category);
+
+            if ($category === 'internal') {
+                $internal = true;
+                $category = null;
+            } elseif ($category === 'user') {
+                $user = true;
+                $category = null;
+            }
+        }
+
         $ret = [];
 
         if ($user) {
@@ -50,11 +84,12 @@ protected function listItems(InputInterface $input, \Reflector $reflector = null
         }
 
         if ($internal) {
-            $ret['Interal Constants'] = $this->getConstants('internal');
+            $ret['Internal Constants'] = $this->getConstants('internal');
         }
 
         if ($category) {
-            $label = \ucfirst($category) . ' Constants';
+            $caseCategory = \array_key_exists($category, self::$categoryLabels) ? self::$categoryLabels[$category] : \ucfirst($category);
+            $label = $caseCategory . ' Constants';
             $ret[$label] = $this->getConstants($category);
         }
 
@@ -62,6 +97,18 @@ protected function listItems(InputInterface $input, \Reflector $reflector = null
             $ret['Constants'] = $this->getConstants();
         }
 
+        if ($reflector !== null) {
+            $prefix = \strtolower($reflector->getName()) . '\\';
+
+            foreach ($ret as $key => $names) {
+                foreach (\array_keys($names) as $name) {
+                    if (\strpos(\strtolower($name), $prefix) !== 0) {
+                        unset($ret[$key][$name]);
+                    }
+                }
+            }
+        }
+
         return \array_map([$this, 'prepareConstants'], \array_filter($ret));
     }
 
@@ -89,7 +136,13 @@ protected function getConstants($category = null)
             return \call_user_func_array('array_merge', $consts);
         }
 
-        return isset($consts[$category]) ? $consts[$category] : [];
+        foreach ($consts as $key => $value) {
+            if (\strtolower($key) === $category) {
+                return $value;
+            }
+        }
+
+        return [];
     }
 
     /**
diff --git a/vendor/psy/psysh/src/Command/ListCommand/Enumerator.php b/vendor/psy/psysh/src/Command/ListCommand/Enumerator.php
index 616543d0d50d5648950281f40b9e694699e37aa8..40832d184a45abff72cae9f83a95bafaa8c4c144 100644
--- a/vendor/psy/psysh/src/Command/ListCommand/Enumerator.php
+++ b/vendor/psy/psysh/src/Command/ListCommand/Enumerator.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -48,9 +48,9 @@ public function __construct(Presenter $presenter)
     /**
      * Return a list of categorized things with the given input options and target.
      *
-     * @param InputInterface $input
-     * @param \Reflector     $reflector
-     * @param mixed          $target
+     * @param InputInterface  $input
+     * @param \Reflector|null $reflector
+     * @param mixed           $target
      *
      * @return array
      */
@@ -76,9 +76,9 @@ public function enumerate(InputInterface $input, \Reflector $reflector = null, $
      *         ],
      *     ]
      *
-     * @param InputInterface $input
-     * @param \Reflector     $reflector
-     * @param mixed          $target
+     * @param InputInterface  $input
+     * @param \Reflector|null $reflector
+     * @param mixed           $target
      *
      * @return array
      */
diff --git a/vendor/psy/psysh/src/Command/ListCommand/FunctionEnumerator.php b/vendor/psy/psysh/src/Command/ListCommand/FunctionEnumerator.php
index 6c3fa5ea9231926df3b1d7c17d3be46bed5d882c..e979fe0a7d6387a7f7a7b29a8ac67c2b8fb65620 100644
--- a/vendor/psy/psysh/src/Command/ListCommand/FunctionEnumerator.php
+++ b/vendor/psy/psysh/src/Command/ListCommand/FunctionEnumerator.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -11,6 +11,7 @@
 
 namespace Psy\Command\ListCommand;
 
+use Psy\Reflection\ReflectionNamespace;
 use Symfony\Component\Console\Input\InputInterface;
 
 /**
@@ -23,21 +24,14 @@ class FunctionEnumerator extends Enumerator
      */
     protected function listItems(InputInterface $input, \Reflector $reflector = null, $target = null)
     {
-        // only list functions when no Reflector is present.
-        //
-        // @todo make a NamespaceReflector and pass that in for commands like:
-        //
-        //     ls --functions Foo
-        //
-        // ... for listing functions in the Foo namespace
-
-        if ($reflector !== null || $target !== null) {
-            return;
+        // if we have a reflector, ensure that it's a namespace reflector
+        if (($target !== null || $reflector !== null) && !$reflector instanceof ReflectionNamespace) {
+            return [];
         }
 
         // only list functions if we are specifically asked
         if (!$input->getOption('functions')) {
-            return;
+            return [];
         }
 
         if ($input->getOption('user')) {
@@ -51,10 +45,11 @@ protected function listItems(InputInterface $input, \Reflector $reflector = null
             $functions = $this->getFunctions();
         }
 
-        $functions = $this->prepareFunctions($functions);
+        $prefix = $reflector === null ? null : \strtolower($reflector->getName()) . '\\';
+        $functions = $this->prepareFunctions($functions, $prefix);
 
         if (empty($functions)) {
-            return;
+            return [];
         }
 
         $ret = [];
@@ -68,7 +63,7 @@ protected function listItems(InputInterface $input, \Reflector $reflector = null
      *
      * Optionally limit functions to "user" or "internal" functions.
      *
-     * @param null|string $type "user" or "internal" (default: both)
+     * @param string|null $type "user" or "internal" (default: both)
      *
      * @return array
      */
@@ -86,11 +81,12 @@ protected function getFunctions($type = null)
     /**
      * Prepare formatted function array.
      *
-     * @param array $functions
+     * @param array  $functions
+     * @param string $prefix
      *
      * @return array
      */
-    protected function prepareFunctions(array $functions)
+    protected function prepareFunctions(array $functions, $prefix = null)
     {
         \natcasesort($functions);
 
@@ -98,12 +94,20 @@ protected function prepareFunctions(array $functions)
         $ret = [];
 
         foreach ($functions as $name) {
+            if ($prefix !== null && \strpos(\strtolower($name), $prefix) !== 0) {
+                continue;
+            }
+
             if ($this->showItem($name)) {
-                $ret[$name] = [
-                    'name'  => $name,
-                    'style' => self::IS_FUNCTION,
-                    'value' => $this->presentSignature($name),
-                ];
+                try {
+                    $ret[$name] = [
+                        'name'  => $name,
+                        'style' => self::IS_FUNCTION,
+                        'value' => $this->presentSignature($name),
+                    ];
+                } catch (\Exception $e) {
+                    // Ignore failures. HHVM does this sometimes for internal functions.
+                }
             }
         }
 
diff --git a/vendor/psy/psysh/src/Command/ListCommand/GlobalVariableEnumerator.php b/vendor/psy/psysh/src/Command/ListCommand/GlobalVariableEnumerator.php
index f51791cb6dcff9b3d3f351d1777367c6365f6802..5ba03f9dc425c56a79797e46a46116d68cbf4b92 100644
--- a/vendor/psy/psysh/src/Command/ListCommand/GlobalVariableEnumerator.php
+++ b/vendor/psy/psysh/src/Command/ListCommand/GlobalVariableEnumerator.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -25,18 +25,18 @@ protected function listItems(InputInterface $input, \Reflector $reflector = null
     {
         // only list globals when no Reflector is present.
         if ($reflector !== null || $target !== null) {
-            return;
+            return [];
         }
 
         // only list globals if we are specifically asked
         if (!$input->getOption('globals')) {
-            return;
+            return [];
         }
 
         $globals = $this->prepareGlobals($this->getGlobals());
 
         if (empty($globals)) {
-            return;
+            return [];
         }
 
         return [
diff --git a/vendor/psy/psysh/src/Command/ListCommand/InterfaceEnumerator.php b/vendor/psy/psysh/src/Command/ListCommand/InterfaceEnumerator.php
deleted file mode 100644
index 4531fce83ba06127582a4d0b2b300171adff5eed..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/src/Command/ListCommand/InterfaceEnumerator.php
+++ /dev/null
@@ -1,89 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Command\ListCommand;
-
-use Psy\VarDumper\Presenter;
-use Symfony\Component\Console\Input\InputInterface;
-
-/**
- * Interface Enumerator class.
- *
- * @deprecated Nothing should use this anymore
- */
-class InterfaceEnumerator extends Enumerator
-{
-    public function __construct(Presenter $presenter)
-    {
-        @\trigger_error('InterfaceEnumerator is no longer used', E_USER_DEPRECATED);
-        parent::__construct($presenter);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    protected function listItems(InputInterface $input, \Reflector $reflector = null, $target = null)
-    {
-        // only list interfaces when no Reflector is present.
-        //
-        // @todo make a NamespaceReflector and pass that in for commands like:
-        //
-        //     ls --interfaces Foo
-        //
-        // ... for listing interfaces in the Foo namespace
-
-        if ($reflector !== null || $target !== null) {
-            return;
-        }
-
-        // only list interfaces if we are specifically asked
-        if (!$input->getOption('interfaces')) {
-            return;
-        }
-
-        $interfaces = $this->prepareInterfaces(\get_declared_interfaces());
-
-        if (empty($interfaces)) {
-            return;
-        }
-
-        return [
-            'Interfaces' => $interfaces,
-        ];
-    }
-
-    /**
-     * Prepare formatted interface array.
-     *
-     * @param array $interfaces
-     *
-     * @return array
-     */
-    protected function prepareInterfaces(array $interfaces)
-    {
-        \natcasesort($interfaces);
-
-        // My kingdom for a generator.
-        $ret = [];
-
-        foreach ($interfaces as $name) {
-            if ($this->showItem($name)) {
-                $ret[$name] = [
-                    'name'  => $name,
-                    'style' => self::IS_CLASS,
-                    'value' => $this->presentSignature($name),
-                ];
-            }
-        }
-
-        return $ret;
-    }
-}
diff --git a/vendor/psy/psysh/src/Command/ListCommand/MethodEnumerator.php b/vendor/psy/psysh/src/Command/ListCommand/MethodEnumerator.php
index 49d7e104e940f2a7cde9967cacd093d7b2db01d1..7357ab1c95294dd6576b0ecab959b84486d1edd1 100644
--- a/vendor/psy/psysh/src/Command/ListCommand/MethodEnumerator.php
+++ b/vendor/psy/psysh/src/Command/ListCommand/MethodEnumerator.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -24,19 +24,18 @@ class MethodEnumerator extends Enumerator
     protected function listItems(InputInterface $input, \Reflector $reflector = null, $target = null)
     {
         // only list methods when a Reflector is present.
-
         if ($reflector === null) {
-            return;
+            return [];
         }
 
         // We can only list methods on actual class (or object) reflectors.
         if (!$reflector instanceof \ReflectionClass) {
-            return;
+            return [];
         }
 
         // only list methods if we are specifically asked
         if (!$input->getOption('methods')) {
-            return;
+            return [];
         }
 
         $showAll   = $input->getOption('all');
@@ -44,7 +43,7 @@ protected function listItems(InputInterface $input, \Reflector $reflector = null
         $methods   = $this->prepareMethods($this->getMethods($showAll, $reflector, $noInherit));
 
         if (empty($methods)) {
-            return;
+            return [];
         }
 
         $ret = [];
@@ -68,7 +67,9 @@ protected function getMethods($showAll, \Reflector $reflector, $noInherit = fals
 
         $methods = [];
         foreach ($reflector->getMethods() as $name => $method) {
-            if ($noInherit && $method->getDeclaringClass()->getName() !== $className) {
+            // For some reason PHP reflection shows private methods from the parent class, even
+            // though they're effectively worthless. Let's suppress them here, like --no-inherit
+            if (($noInherit || $method->isPrivate()) && $method->getDeclaringClass()->getName() !== $className) {
                 continue;
             }
 
diff --git a/vendor/psy/psysh/src/Command/ListCommand/PropertyEnumerator.php b/vendor/psy/psysh/src/Command/ListCommand/PropertyEnumerator.php
index d56caded6950b9851540d4b5368c5c07a3674b89..186c607c1e50e564c37be6b4feef3cb8b6fd7870 100644
--- a/vendor/psy/psysh/src/Command/ListCommand/PropertyEnumerator.php
+++ b/vendor/psy/psysh/src/Command/ListCommand/PropertyEnumerator.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -26,17 +26,17 @@ protected function listItems(InputInterface $input, \Reflector $reflector = null
         // only list properties when a Reflector is present.
 
         if ($reflector === null) {
-            return;
+            return [];
         }
 
         // We can only list properties on actual class (or object) reflectors.
         if (!$reflector instanceof \ReflectionClass) {
-            return;
+            return [];
         }
 
         // only list properties if we are specifically asked
         if (!$input->getOption('properties')) {
-            return;
+            return [];
         }
 
         $showAll    = $input->getOption('all');
@@ -44,7 +44,7 @@ protected function listItems(InputInterface $input, \Reflector $reflector = null
         $properties = $this->prepareProperties($this->getProperties($showAll, $reflector, $noInherit), $target);
 
         if (empty($properties)) {
-            return;
+            return [];
         }
 
         $ret = [];
@@ -117,9 +117,7 @@ protected function prepareProperties(array $properties, $target = null)
      */
     protected function getKindLabel(\ReflectionClass $reflector)
     {
-        if ($reflector->isInterface()) {
-            return 'Interface Properties';
-        } elseif (\method_exists($reflector, 'isTrait') && $reflector->isTrait()) {
+        if (\method_exists($reflector, 'isTrait') && $reflector->isTrait()) {
             return 'Trait Properties';
         } else {
             return 'Class Properties';
@@ -154,7 +152,7 @@ private function getVisibilityStyle(\ReflectionProperty $property)
      */
     protected function presentValue(\ReflectionProperty $property, $target)
     {
-        // If $target is a class, trait or interface (try to) get the default
+        // If $target is a class or trait (try to) get the default
         // value for the property.
         if (!\is_object($target)) {
             try {
diff --git a/vendor/psy/psysh/src/Command/ListCommand/TraitEnumerator.php b/vendor/psy/psysh/src/Command/ListCommand/TraitEnumerator.php
deleted file mode 100644
index 3ee601558df61d212de3b901b93a5bc97e79e77c..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/src/Command/ListCommand/TraitEnumerator.php
+++ /dev/null
@@ -1,89 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Command\ListCommand;
-
-use Psy\VarDumper\Presenter;
-use Symfony\Component\Console\Input\InputInterface;
-
-/**
- * Trait Enumerator class.
- *
- * @deprecated Nothing should use this anymore
- */
-class TraitEnumerator extends Enumerator
-{
-    public function __construct(Presenter $presenter)
-    {
-        @\trigger_error('TraitEnumerator is no longer used', E_USER_DEPRECATED);
-        parent::__construct($presenter);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    protected function listItems(InputInterface $input, \Reflector $reflector = null, $target = null)
-    {
-        // only list traits when no Reflector is present.
-        //
-        // @todo make a NamespaceReflector and pass that in for commands like:
-        //
-        //     ls --traits Foo
-        //
-        // ... for listing traits in the Foo namespace
-
-        if ($reflector !== null || $target !== null) {
-            return;
-        }
-
-        // only list traits if we are specifically asked
-        if (!$input->getOption('traits')) {
-            return;
-        }
-
-        $traits = $this->prepareTraits(\get_declared_traits());
-
-        if (empty($traits)) {
-            return;
-        }
-
-        return [
-            'Traits' => $traits,
-        ];
-    }
-
-    /**
-     * Prepare formatted trait array.
-     *
-     * @param array $traits
-     *
-     * @return array
-     */
-    protected function prepareTraits(array $traits)
-    {
-        \natcasesort($traits);
-
-        // My kingdom for a generator.
-        $ret = [];
-
-        foreach ($traits as $name) {
-            if ($this->showItem($name)) {
-                $ret[$name] = [
-                    'name'  => $name,
-                    'style' => self::IS_CLASS,
-                    'value' => $this->presentSignature($name),
-                ];
-            }
-        }
-
-        return $ret;
-    }
-}
diff --git a/vendor/psy/psysh/src/Command/ListCommand/VariableEnumerator.php b/vendor/psy/psysh/src/Command/ListCommand/VariableEnumerator.php
index 0586c203e6b6813dca3c3cd387ad35c0d5bc4ca0..f39e678f7d3ae2d8a6e8651677e9816b5ad788e1 100644
--- a/vendor/psy/psysh/src/Command/ListCommand/VariableEnumerator.php
+++ b/vendor/psy/psysh/src/Command/ListCommand/VariableEnumerator.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -49,19 +49,19 @@ protected function listItems(InputInterface $input, \Reflector $reflector = null
     {
         // only list variables when no Reflector is present.
         if ($reflector !== null || $target !== null) {
-            return;
+            return [];
         }
 
         // only list variables if we are specifically asked
         if (!$input->getOption('vars')) {
-            return;
+            return [];
         }
 
         $showAll   = $input->getOption('all');
         $variables = $this->prepareVariables($this->getVariables($showAll));
 
         if (empty($variables)) {
-            return;
+            return [];
         }
 
         return [
diff --git a/vendor/psy/psysh/src/Command/ParseCommand.php b/vendor/psy/psysh/src/Command/ParseCommand.php
index 3f3286e8afb758ecfefc127d4eb636a1050ddf47..0849075f6d5795bdbc9f9c8ce49d0163606e09d9 100644
--- a/vendor/psy/psysh/src/Command/ParseCommand.php
+++ b/vendor/psy/psysh/src/Command/ParseCommand.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -70,7 +70,7 @@ public function setPresenter(Presenter $presenter)
     {
         $this->presenter = clone $presenter;
         $this->presenter->addCasters([
-            'PhpParser\Node' => function (Node $node, array $a) {
+            Node::class => function (Node $node, array $a) {
                 $a = [
                     Caster::PREFIX_VIRTUAL . 'type'       => $node->getType(),
                     Caster::PREFIX_VIRTUAL . 'attributes' => $node->getAttributes(),
@@ -128,7 +128,7 @@ protected function configure()
     protected function execute(InputInterface $input, OutputInterface $output)
     {
         $code = $input->getArgument('code');
-        if (\strpos('<?', $code) === false) {
+        if (\strpos($code, '<?') === false) {
             $code = '<?php ' . $code;
         }
 
@@ -138,6 +138,8 @@ protected function execute(InputInterface $input, OutputInterface $output)
         $output->page($this->presenter->present($nodes, $depth));
 
         $this->context->setReturnValue($nodes);
+
+        return 0;
     }
 
     /**
diff --git a/vendor/psy/psysh/src/Command/PsyVersionCommand.php b/vendor/psy/psysh/src/Command/PsyVersionCommand.php
index 7d0846c1b4342bde73a569b58882f556a5e3eb2d..1355841f146fa5f4dc42f6b75216c2389bc24189 100644
--- a/vendor/psy/psysh/src/Command/PsyVersionCommand.php
+++ b/vendor/psy/psysh/src/Command/PsyVersionCommand.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -37,5 +37,7 @@ protected function configure()
     protected function execute(InputInterface $input, OutputInterface $output)
     {
         $output->writeln($this->getApplication()->getVersion());
+
+        return 0;
     }
 }
diff --git a/vendor/psy/psysh/src/Command/ReflectingCommand.php b/vendor/psy/psysh/src/Command/ReflectingCommand.php
index 32863280587c7a8a710c8e7464fd8c8969762ad8..53b84a8d60e6c424e1e92dc72fd61332ddb5e3d9 100644
--- a/vendor/psy/psysh/src/Command/ReflectingCommand.php
+++ b/vendor/psy/psysh/src/Command/ReflectingCommand.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -16,6 +16,9 @@
 use Psy\ContextAware;
 use Psy\Exception\ErrorException;
 use Psy\Exception\RuntimeException;
+use Psy\Exception\UnexpectedTargetException;
+use Psy\Reflection\ReflectionClassConstant;
+use Psy\Reflection\ReflectionConstant_;
 use Psy\Util\Mirror;
 
 /**
@@ -114,6 +117,18 @@ protected function resolveName($name, $includeFunctions = false)
             return $name;
         }
 
+        // Check $name against the current namespace and use statements.
+        if (self::couldBeClassName($name)) {
+            try {
+                $maybeAlias = $this->resolveCode($name . '::class');
+                if ($maybeAlias !== $name) {
+                    return $maybeAlias;
+                }
+            } catch (RuntimeException $e) {
+                // /shrug
+            }
+        }
+
         if ($namespace = $shell->getNamespace()) {
             $fullName = $namespace . '\\' . $name;
 
@@ -125,6 +140,15 @@ protected function resolveName($name, $includeFunctions = false)
         return $name;
     }
 
+    /**
+     * Check whether a given name could be a class name.
+     */
+    protected function couldBeClassName($name)
+    {
+        // Regex based on https://www.php.net/manual/en/language.oop5.basic.php#language.oop5.basic.class
+        return \preg_match('/^[a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*(\\[a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*)*$/', $name);
+    }
+
     /**
      * Get a Reflector and documentation for a function, class or instance, constant, method or property.
      *
@@ -166,7 +190,7 @@ protected function resolveCode($code)
     /**
      * Resolve code to an object in the current scope.
      *
-     * @throws RuntimeException when the code resolves to a non-object value
+     * @throws UnexpectedTargetException when the code resolves to a non-object value
      *
      * @param string $code
      *
@@ -177,7 +201,7 @@ private function resolveObject($code)
         $value = $this->resolveCode($code);
 
         if (!\is_object($value)) {
-            throw new RuntimeException('Unable to inspect a non-object');
+            throw new UnexpectedTargetException($value, 'Unable to inspect a non-object');
         }
 
         return $value;
@@ -231,15 +255,15 @@ protected function setCommandScopeVariables(\Reflector $reflector)
         $vars = [];
 
         switch (\get_class($reflector)) {
-            case 'ReflectionClass':
-            case 'ReflectionObject':
+            case \ReflectionClass::class:
+            case \ReflectionObject::class:
                 $vars['__class'] = $reflector->name;
                 if ($reflector->inNamespace()) {
                     $vars['__namespace'] = $reflector->getNamespaceName();
                 }
                 break;
 
-            case 'ReflectionMethod':
+            case \ReflectionMethod::class:
                 $vars['__method'] = \sprintf('%s::%s', $reflector->class, $reflector->name);
                 $vars['__class'] = $reflector->class;
                 $classReflector = $reflector->getDeclaringClass();
@@ -248,14 +272,14 @@ protected function setCommandScopeVariables(\Reflector $reflector)
                 }
                 break;
 
-            case 'ReflectionFunction':
+            case \ReflectionFunction::class:
                 $vars['__function'] = $reflector->name;
                 if ($reflector->inNamespace()) {
                     $vars['__namespace'] = $reflector->getNamespaceName();
                 }
                 break;
 
-            case 'ReflectionGenerator':
+            case \ReflectionGenerator::class:
                 $funcReflector = $reflector->getFunction();
                 $vars['__function'] = $funcReflector->name;
                 if ($funcReflector->inNamespace()) {
@@ -268,9 +292,9 @@ protected function setCommandScopeVariables(\Reflector $reflector)
                 }
                 break;
 
-            case 'ReflectionProperty':
-            case 'ReflectionClassConstant':
-            case 'Psy\Reflection\ReflectionClassConstant':
+            case \ReflectionProperty::class:
+            case \ReflectionClassConstant::class:
+            case ReflectionClassConstant::class:
                 $classReflector = $reflector->getDeclaringClass();
                 $vars['__class'] = $classReflector->name;
                 if ($classReflector->inNamespace()) {
@@ -283,7 +307,7 @@ protected function setCommandScopeVariables(\Reflector $reflector)
                 }
                 break;
 
-            case 'Psy\Reflection\ReflectionConstant_':
+            case ReflectionConstant_::class:
                 if ($reflector->inNamespace()) {
                     $vars['__namespace'] = $reflector->getNamespaceName();
                 }
diff --git a/vendor/psy/psysh/src/Command/ShowCommand.php b/vendor/psy/psysh/src/Command/ShowCommand.php
index 47d1865486b006c20bab4a9f0ed204d9e7767d1a..60da02643b51ee5c8a68eeee120eebe9bf03f024 100644
--- a/vendor/psy/psysh/src/Command/ShowCommand.php
+++ b/vendor/psy/psysh/src/Command/ShowCommand.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -11,14 +11,11 @@
 
 namespace Psy\Command;
 
-use JakubOnderka\PhpConsoleHighlighter\Highlighter;
-use Psy\Configuration;
-use Psy\ConsoleColorFactory;
 use Psy\Exception\RuntimeException;
+use Psy\Exception\UnexpectedTargetException;
 use Psy\Formatter\CodeFormatter;
 use Psy\Formatter\SignatureFormatter;
 use Psy\Input\CodeArgument;
-use Psy\Output\ShellOutput;
 use Symfony\Component\Console\Formatter\OutputFormatter;
 use Symfony\Component\Console\Input\InputInterface;
 use Symfony\Component\Console\Input\InputOption;
@@ -29,18 +26,14 @@
  */
 class ShowCommand extends ReflectingCommand
 {
-    private $colorMode;
-    private $highlighter;
     private $lastException;
     private $lastExceptionIndex;
 
     /**
-     * @param null|string $colorMode (default: null)
+     * @param string|null $colorMode (deprecated and ignored)
      */
     public function __construct($colorMode = null)
     {
-        $this->colorMode = $colorMode ?: Configuration::COLOR_MODE_AUTO;
-
         parent::__construct();
     }
 
@@ -99,11 +92,15 @@ protected function execute(InputInterface $input, OutputInterface $output)
                 throw new \InvalidArgumentException('Too many arguments (supply either "target" or "--ex")');
             }
 
-            return $this->writeExceptionContext($input, $output);
+            $this->writeExceptionContext($input, $output);
+
+            return 0;
         }
 
         if ($input->getArgument('target')) {
-            return $this->writeCodeContext($input, $output);
+            $this->writeCodeContext($input, $output);
+
+            return 0;
         }
 
         throw new RuntimeException('Not enough arguments (missing: "target")');
@@ -111,13 +108,24 @@ protected function execute(InputInterface $input, OutputInterface $output)
 
     private function writeCodeContext(InputInterface $input, OutputInterface $output)
     {
-        list($target, $reflector) = $this->getTargetAndReflector($input->getArgument('target'));
+        try {
+            list($target, $reflector) = $this->getTargetAndReflector($input->getArgument('target'));
+        } catch (UnexpectedTargetException $e) {
+            // If we didn't get a target and Reflector, maybe we got a filename?
+            $target = $e->getTarget();
+            if (\is_string($target) && \is_file($target) && $code = @\file_get_contents($target)) {
+                // @todo maybe set $__file to $target?
+                return $output->page(CodeFormatter::formatCode($code));
+            } else {
+                throw $e;
+            }
+        }
 
         // Set some magic local variables
         $this->setCommandScopeVariables($reflector);
 
         try {
-            $output->page(CodeFormatter::format($reflector, $this->colorMode), ShellOutput::OUTPUT_RAW);
+            $output->page(CodeFormatter::format($reflector));
         } catch (RuntimeException $e) {
             $output->writeln(SignatureFormatter::format($reflector));
             throw $e;
@@ -170,7 +178,7 @@ private function writeTraceLine(OutputInterface $output, array $trace, $index)
         $line = isset($trace[$index]['line']) ? $trace[$index]['line'] : 'n/a';
 
         $output->writeln(\sprintf(
-            'From <info>%s:%d</info> at <strong>level %d</strong> of backtrace (of %d).',
+            'From <info>%s:%d</info> at <strong>level %d</strong> of backtrace (of %d):',
             OutputFormatter::escape($file),
             OutputFormatter::escape($line),
             $index + 1,
@@ -216,17 +224,10 @@ private function writeTraceCodeSnippet(OutputInterface $output, array $trace, $i
             return;
         }
 
-        $output->write($this->getHighlighter()->getCodeSnippet($code, $line, 5, 5), ShellOutput::OUTPUT_RAW);
-    }
-
-    private function getHighlighter()
-    {
-        if (!$this->highlighter) {
-            $factory = new ConsoleColorFactory($this->colorMode);
-            $this->highlighter = new Highlighter($factory->getConsoleColor());
-        }
+        $startLine = \max($line - 5, 0);
+        $endLine = $line + 5;
 
-        return $this->highlighter;
+        $output->write(CodeFormatter::formatCode($code, $startLine, $endLine, $line), false);
     }
 
     private function setCommandScopeVariablesFromContext(array $context)
diff --git a/vendor/psy/psysh/src/Command/SudoCommand.php b/vendor/psy/psysh/src/Command/SudoCommand.php
index 9d5afbf04c9a459100c2ceadee82ca99de82f0c8..c971a19b6af50cc138b99c5fa6a93856c2776682 100644
--- a/vendor/psy/psysh/src/Command/SudoCommand.php
+++ b/vendor/psy/psysh/src/Command/SudoCommand.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -109,7 +109,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
             $code = $history[\count($history) - 2];
         }
 
-        if (\strpos('<?', $code) === false) {
+        if (\strpos($code, '<?') === false) {
             $code = '<?php ' . $code;
         }
 
@@ -118,6 +118,8 @@ protected function execute(InputInterface $input, OutputInterface $output)
         $sudoCode = $this->printer->prettyPrint($nodes);
         $shell = $this->getApplication();
         $shell->addCode($sudoCode, !$shell->hasCode());
+
+        return 0;
     }
 
     /**
diff --git a/vendor/psy/psysh/src/Command/ThrowUpCommand.php b/vendor/psy/psysh/src/Command/ThrowUpCommand.php
index b37f7573c10ffa240393cb0d928097a0887d0b2c..bd672ad6840d1d0e5c1b5d81a480570658552fbd 100644
--- a/vendor/psy/psysh/src/Command/ThrowUpCommand.php
+++ b/vendor/psy/psysh/src/Command/ThrowUpCommand.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -21,6 +21,7 @@
 use PhpParser\PrettyPrinter\Standard as Printer;
 use Psy\Context;
 use Psy\ContextAware;
+use Psy\Exception\ThrowUpException;
 use Psy\Input\CodeArgument;
 use Psy\ParserFactory;
 use Symfony\Component\Console\Input\InputInterface;
@@ -31,18 +32,9 @@
  */
 class ThrowUpCommand extends Command implements ContextAware
 {
-    const THROW_CLASS = 'Psy\Exception\ThrowUpException';
-
     private $parser;
     private $printer;
 
-    /**
-     * Context instance (for ContextAware interface).
-     *
-     * @var Context
-     */
-    protected $context;
-
     /**
      * {@inheritdoc}
      */
@@ -57,13 +49,13 @@ public function __construct($name = null)
     }
 
     /**
-     * ContextAware interface.
+     * @deprecated throwUp no longer needs to be ContextAware
      *
      * @param Context $context
      */
     public function setContext(Context $context)
     {
-        $this->context = $context;
+        // Do nothing
     }
 
     /**
@@ -95,16 +87,18 @@ protected function configure()
     /**
      * {@inheritdoc}
      *
-     * @throws InvalidArgumentException if there is no exception to throw
+     * @throws \InvalidArgumentException if there is no exception to throw
      */
     protected function execute(InputInterface $input, OutputInterface $output)
     {
         $args = $this->prepareArgs($input->getArgument('exception'));
-        $throwStmt = new Throw_(new StaticCall(new FullyQualifiedName(self::THROW_CLASS), 'fromThrowable', $args));
+        $throwStmt = new Throw_(new StaticCall(new FullyQualifiedName(ThrowUpException::class), 'fromThrowable', $args));
         $throwCode = $this->printer->prettyPrint([$throwStmt]);
 
         $shell = $this->getApplication();
         $shell->addCode($throwCode, !$shell->hasCode());
+
+        return 0;
     }
 
     /**
@@ -112,7 +106,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
      *
      * If no argument was given, this falls back to `$_e`
      *
-     * @throws InvalidArgumentException if there is no exception to throw
+     * @throws \InvalidArgumentException if there is no exception to throw
      *
      * @param string $code
      *
@@ -125,7 +119,7 @@ private function prepareArgs($code = null)
             return [new Arg(new Variable('_e'))];
         }
 
-        if (\strpos('<?', $code) === false) {
+        if (\strpos($code, '<?') === false) {
             $code = '<?php ' . $code;
         }
 
@@ -143,7 +137,7 @@ private function prepareArgs($code = null)
 
         // Allow throwing via a string, e.g. `throw-up "SUP"`
         if ($expr instanceof String_) {
-            return [new New_(new FullyQualifiedName('Exception'), $args)];
+            return [new New_(new FullyQualifiedName(\Exception::class), $args)];
         }
 
         return $args;
diff --git a/vendor/psy/psysh/src/Command/TimeitCommand.php b/vendor/psy/psysh/src/Command/TimeitCommand.php
index c59663131132c3d041991e2f1038ef5fba2c3c2e..edaa2b80a26d32494fbc52bd92f39bd7e8187c6d 100644
--- a/vendor/psy/psysh/src/Command/TimeitCommand.php
+++ b/vendor/psy/psysh/src/Command/TimeitCommand.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -106,6 +106,8 @@ protected function execute(InputInterface $input, OutputInterface $output)
 
             $output->writeln(\sprintf(self::AVG_RESULT_MSG, $total / $num, $median, $total));
         }
+
+        return 0;
     }
 
     /**
diff --git a/vendor/psy/psysh/src/Command/TimeitCommand/TimeitVisitor.php b/vendor/psy/psysh/src/Command/TimeitCommand/TimeitVisitor.php
index 841ba135d8d6140cd9edd7a42ad627806416b788..8deb7335abe2fdd6f3fb3694a989d812564d931c 100644
--- a/vendor/psy/psysh/src/Command/TimeitCommand/TimeitVisitor.php
+++ b/vendor/psy/psysh/src/Command/TimeitCommand/TimeitVisitor.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -21,6 +21,7 @@
 use PhpParser\Node\Stmt\Return_;
 use PhpParser\NodeVisitorAbstract;
 use Psy\CodeCleaner\NoReturnValue;
+use Psy\Command\TimeitCommand;
 
 /**
  * A node visitor for instrumenting code to be executed by the `timeit` command.
@@ -97,11 +98,11 @@ public function afterTraverse(array $nodes)
     /**
      * Get PhpParser AST nodes for a `markStart` call.
      *
-     * @return PhpParser\Node\Expr\StaticCall
+     * @return \PhpParser\Node\Expr\StaticCall
      */
     private function getStartCall()
     {
-        return new StaticCall(new FullyQualifiedName('Psy\Command\TimeitCommand'), 'markStart');
+        return new StaticCall(new FullyQualifiedName(TimeitCommand::class), 'markStart');
     }
 
     /**
@@ -111,7 +112,7 @@ private function getStartCall()
      *
      * @param Expr|null $arg
      *
-     * @return PhpParser\Node\Expr\StaticCall
+     * @return \PhpParser\Node\Expr\StaticCall
      */
     private function getEndCall(Expr $arg = null)
     {
@@ -119,7 +120,7 @@ private function getEndCall(Expr $arg = null)
             $arg = NoReturnValue::create();
         }
 
-        return new StaticCall(new FullyQualifiedName('Psy\Command\TimeitCommand'), 'markEnd', [new Arg($arg)]);
+        return new StaticCall(new FullyQualifiedName(TimeitCommand::class), 'markEnd', [new Arg($arg)]);
     }
 
     /**
@@ -127,13 +128,13 @@ private function getEndCall(Expr $arg = null)
      *
      * Wrap $expr in a PhpParser\Node\Stmt\Expression if the class exists.
      *
-     * @param PhpParser\Node $expr
-     * @param array          $attrs
+     * @param \PhpParser\Node $expr
+     * @param array           $attrs
      *
-     * @return PhpParser\Node\Expr|PhpParser\Node\Stmt\Expression
+     * @return \PhpParser\Node\Expr|\PhpParser\Node\Stmt\Expression
      */
     private function maybeExpression($expr, $attrs = [])
     {
-        return \class_exists('PhpParser\Node\Stmt\Expression') ? new Expression($expr, $attrs) : $expr;
+        return \class_exists(Expression::class) ? new Expression($expr, $attrs) : $expr;
     }
 }
diff --git a/vendor/psy/psysh/src/Command/TraceCommand.php b/vendor/psy/psysh/src/Command/TraceCommand.php
index c28b0e72884e53b4a7b9ea6f1bbb97366290706a..7aa3c18e3650190f1762eb2994c22998f076c913 100644
--- a/vendor/psy/psysh/src/Command/TraceCommand.php
+++ b/vendor/psy/psysh/src/Command/TraceCommand.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -11,9 +11,9 @@
 
 namespace Psy\Command;
 
+use Psy\Formatter\TraceFormatter;
 use Psy\Input\FilterOptions;
 use Psy\Output\ShellOutput;
-use Symfony\Component\Console\Formatter\OutputFormatter;
 use Symfony\Component\Console\Input\InputInterface;
 use Symfony\Component\Console\Input\InputOption;
 use Symfony\Component\Console\Output\OutputInterface;
@@ -74,6 +74,8 @@ protected function execute(InputInterface $input, OutputInterface $output)
         $this->filter->bind($input);
         $trace = $this->getBacktrace(new \Exception(), $input->getOption('num'), $input->getOption('include-psy'));
         $output->page($trace, ShellOutput::NUMBER_LINES);
+
+        return 0;
     }
 
     /**
@@ -90,78 +92,6 @@ protected function execute(InputInterface $input, OutputInterface $output)
      */
     protected function getBacktrace(\Exception $e, $count = null, $includePsy = true)
     {
-        if ($cwd = \getcwd()) {
-            $cwd = \rtrim($cwd, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR;
-        }
-
-        if ($count === null) {
-            $count = PHP_INT_MAX;
-        }
-
-        $lines = [];
-
-        $trace = $e->getTrace();
-        \array_unshift($trace, [
-            'function' => '',
-            'file'     => $e->getFile() !== null ? $e->getFile() : 'n/a',
-            'line'     => $e->getLine() !== null ? $e->getLine() : 'n/a',
-            'args'     => [],
-        ]);
-
-        if (!$includePsy) {
-            for ($i = \count($trace) - 1; $i >= 0; $i--) {
-                $thing = isset($trace[$i]['class']) ? $trace[$i]['class'] : $trace[$i]['function'];
-                if (\preg_match('/\\\\?Psy\\\\/', $thing)) {
-                    $trace = \array_slice($trace, $i + 1);
-                    break;
-                }
-            }
-        }
-
-        for ($i = 0, $count = \min($count, \count($trace)); $i < $count; $i++) {
-            $class    = isset($trace[$i]['class']) ? $trace[$i]['class'] : '';
-            $type     = isset($trace[$i]['type']) ? $trace[$i]['type'] : '';
-            $function = $trace[$i]['function'];
-            $file     = isset($trace[$i]['file']) ? $this->replaceCwd($cwd, $trace[$i]['file']) : 'n/a';
-            $line     = isset($trace[$i]['line']) ? $trace[$i]['line'] : 'n/a';
-
-            // Leave execution loop out of the `eval()'d code` lines
-            if (\preg_match("#/src/Execution(?:Loop)?Closure.php\(\d+\) : eval\(\)'d code$#", \str_replace('\\', '/', $file))) {
-                $file = "eval()'d code";
-            }
-
-            // Skip any lines that don't match our filter options
-            if (!$this->filter->match(\sprintf('%s%s%s() at %s:%s', $class, $type, $function, $file, $line))) {
-                continue;
-            }
-
-            $lines[] = \sprintf(
-                ' <class>%s</class>%s%s() at <info>%s:%s</info>',
-                OutputFormatter::escape($class),
-                OutputFormatter::escape($type),
-                OutputFormatter::escape($function),
-                OutputFormatter::escape($file),
-                OutputFormatter::escape($line)
-            );
-        }
-
-        return $lines;
-    }
-
-    /**
-     * Replace the given directory from the start of a filepath.
-     *
-     * @param string $cwd
-     * @param string $file
-     *
-     * @return string
-     */
-    private function replaceCwd($cwd, $file)
-    {
-        if ($cwd === false) {
-            return $file;
-        } else {
-            return \preg_replace('/^' . \preg_quote($cwd, '/') . '/', '', $file);
-        }
+        return TraceFormatter::formatTrace($e, $this->filter, $count, $includePsy);
     }
 }
diff --git a/vendor/psy/psysh/src/Command/WhereamiCommand.php b/vendor/psy/psysh/src/Command/WhereamiCommand.php
index 98593d13aa5126b8efdde2b3728bdc27a36637bf..b04a21a410e49a32e9446d52f92d568e62aeb1f5 100644
--- a/vendor/psy/psysh/src/Command/WhereamiCommand.php
+++ b/vendor/psy/psysh/src/Command/WhereamiCommand.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -11,10 +11,9 @@
 
 namespace Psy\Command;
 
-use JakubOnderka\PhpConsoleHighlighter\Highlighter;
-use Psy\Configuration;
-use Psy\ConsoleColorFactory;
+use Psy\Formatter\CodeFormatter;
 use Psy\Output\ShellOutput;
+use Psy\Shell;
 use Symfony\Component\Console\Input\InputInterface;
 use Symfony\Component\Console\Input\InputOption;
 use Symfony\Component\Console\Output\OutputInterface;
@@ -24,15 +23,13 @@
  */
 class WhereamiCommand extends Command
 {
-    private $colorMode;
     private $backtrace;
 
     /**
-     * @param null|string $colorMode (default: null)
+     * @param string|null $colorMode (deprecated and ignored)
      */
     public function __construct($colorMode = null)
     {
-        $this->colorMode = $colorMode ?: Configuration::COLOR_MODE_AUTO;
         $this->backtrace = \debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS);
 
         parent::__construct();
@@ -46,18 +43,21 @@ protected function configure()
         $this
             ->setName('whereami')
             ->setDefinition([
-                new InputOption('num', 'n', InputOption::VALUE_OPTIONAL, 'Number of lines before and after.', '5'),
+                new InputOption('num',  'n',   InputOption::VALUE_OPTIONAL, 'Number of lines before and after.', '5'),
+                new InputOption('file', 'f|a', InputOption::VALUE_NONE,     'Show the full source for the current file.'),
             ])
             ->setDescription('Show where you are in the code.')
             ->setHelp(
                 <<<'HELP'
 Show where you are in the code.
 
-Optionally, include how many lines before and after you want to display.
+Optionally, include the number of lines before and after you want to display,
+or --file for the whole file.
 
 e.g.
 <return>> whereami </return>
 <return>> whereami -n10</return>
+<return>> whereami --file</return>
 HELP
             );
     }
@@ -83,8 +83,8 @@ private static function isDebugCall(array $stackFrame)
         $class    = isset($stackFrame['class']) ? $stackFrame['class'] : null;
         $function = isset($stackFrame['function']) ? $stackFrame['function'] : null;
 
-        return ($class === null && $function === 'Psy\debug') ||
-            ($class === 'Psy\Shell' && \in_array($function, ['__construct', 'debug']));
+        return ($class === null && $function === 'Psy\\debug') ||
+            ($class === Shell::class && \in_array($function, ['__construct', 'debug']));
     }
 
     /**
@@ -112,19 +112,30 @@ protected function fileInfo()
      */
     protected function execute(InputInterface $input, OutputInterface $output)
     {
-        $info        = $this->fileInfo();
-        $num         = $input->getOption('num');
-        $factory     = new ConsoleColorFactory($this->colorMode);
-        $colors      = $factory->getConsoleColor();
-        $highlighter = new Highlighter($colors);
-        $contents    = \file_get_contents($info['file']);
-
-        $output->startPaging();
-        $output->writeln('');
-        $output->writeln(\sprintf('From <info>%s:%s</info>:', $this->replaceCwd($info['file']), $info['line']));
-        $output->writeln('');
-        $output->write($highlighter->getCodeSnippet($contents, $info['line'], $num, $num), ShellOutput::OUTPUT_RAW);
-        $output->stopPaging();
+        $info      = $this->fileInfo();
+        $num       = $input->getOption('num');
+        $lineNum   = $info['line'];
+        $startLine = \max($lineNum - $num, 1);
+        $endLine   = $lineNum + $num;
+        $code      = \file_get_contents($info['file']);
+
+        if ($input->getOption('file')) {
+            $startLine = 1;
+            $endLine   = null;
+        }
+
+        if ($output instanceof ShellOutput) {
+            $output->startPaging();
+        }
+
+        $output->writeln(\sprintf('From <info>%s:%s</info>:', $this->replaceCwd($info['file']), $lineNum));
+        $output->write(CodeFormatter::formatCode($code, $startLine, $endLine, $lineNum), false);
+
+        if ($output instanceof ShellOutput) {
+            $output->stopPaging();
+        }
+
+        return 0;
     }
 
     /**
diff --git a/vendor/psy/psysh/src/Command/WtfCommand.php b/vendor/psy/psysh/src/Command/WtfCommand.php
index c6d53000ed2cedc89c7d8b617d18b1db2dee21dd..7bd71707d5a7377c7ecae57654002a4ffe62842f 100644
--- a/vendor/psy/psysh/src/Command/WtfCommand.php
+++ b/vendor/psy/psysh/src/Command/WtfCommand.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -95,7 +95,11 @@ protected function execute(InputInterface $input, OutputInterface $output)
         $count     = $input->getOption('all') ? PHP_INT_MAX : \max(3, \pow(2, \strlen($incredulity) + 1));
 
         $shell = $this->getApplication();
-        $output->startPaging();
+
+        if ($output instanceof ShellOutput) {
+            $output->startPaging();
+        }
+
         do {
             $traceCount = \count($exception->getTrace());
             $showLines  = $count;
@@ -120,6 +124,11 @@ protected function execute(InputInterface $input, OutputInterface $output)
                 $output->writeln('');
             }
         } while ($exception = $exception->getPrevious());
-        $output->stopPaging();
+
+        if ($output instanceof ShellOutput) {
+            $output->stopPaging();
+        }
+
+        return 0;
     }
 }
diff --git a/vendor/psy/psysh/src/ConfigPaths.php b/vendor/psy/psysh/src/ConfigPaths.php
index c4de2d5769b000c965d0da6816ec0423df4936ea..8057a3a967fc7c39345b4ea5a3ae73aef2c03c85 100644
--- a/vendor/psy/psysh/src/ConfigPaths.php
+++ b/vendor/psy/psysh/src/ConfigPaths.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -11,6 +11,7 @@
 
 namespace Psy;
 
+use Psy\Exception\ErrorException;
 use XdgBaseDir\Xdg;
 
 /**
@@ -136,7 +137,7 @@ public static function getRuntimeDir()
     {
         $xdg = new Xdg();
 
-        \set_error_handler(['Psy\Exception\ErrorException', 'throwException']);
+        \set_error_handler([ErrorException::class, 'throwException']);
 
         try {
             // XDG doesn't really work on Windows, sometimes complains about
@@ -161,18 +162,18 @@ private static function getDirNames(array $baseDirs)
         }, $baseDirs);
 
         // Add ~/.psysh
-        if ($home = \getenv('HOME')) {
-            $dirs[] = \strtr($home, '\\', '/') . '/.psysh';
+        if (isset($_SERVER['HOME']) && $_SERVER['HOME']) {
+            $dirs[] = \strtr($_SERVER['HOME'], '\\', '/') . '/.psysh';
         }
 
         // Add some Windows specific ones :)
         if (\defined('PHP_WINDOWS_VERSION_MAJOR')) {
-            if ($appData = \getenv('APPDATA')) {
+            if (isset($_SERVER['APPDATA']) && $_SERVER['APPDATA']) {
                 // AppData gets preference
-                \array_unshift($dirs, \strtr($appData, '\\', '/') . '/PsySH');
+                \array_unshift($dirs, \strtr($_SERVER['APPDATA'], '\\', '/') . '/PsySH');
             }
 
-            $dir = \strtr(\getenv('HOMEDRIVE') . '/' . \getenv('HOMEPATH'), '\\', '/') . '/.psysh';
+            $dir = \strtr($_SERVER['HOMEDRIVE'] . '/' . $_SERVER['HOMEPATH'], '\\', '/') . '/.psysh';
             if (!\in_array($dir, $dirs)) {
                 $dirs[] = $dir;
             }
@@ -196,6 +197,31 @@ private static function getRealFiles(array $dirNames, array $fileNames)
         return $files;
     }
 
+    /**
+     * Ensure that $dir exists and is writable.
+     *
+     * Generates E_USER_NOTICE error if the directory is not writable or creatable.
+     *
+     * @param string $dir
+     *
+     * @return bool False if directory exists but is not writeable, or cannot be created
+     */
+    public static function ensureDir($dir)
+    {
+        if (!\is_dir($dir)) {
+            // Just try making it and see if it works
+            @\mkdir($dir, 0700, true);
+        }
+
+        if (!\is_dir($dir) || !\is_writable($dir)) {
+            \trigger_error(\sprintf('Writing to %s is not allowed.', $dir), E_USER_NOTICE);
+
+            return false;
+        }
+
+        return true;
+    }
+
     /**
      * Ensure that $file exists and is writable, make the parent directory if necessary.
      *
@@ -217,16 +243,7 @@ public static function touchFileWithMkdir($file)
             return false;
         }
 
-        $dir = \dirname($file);
-
-        if (!\is_dir($dir)) {
-            // Just try making it and see if it works
-            @\mkdir($dir, 0700, true);
-        }
-
-        if (!\is_dir($dir) || !\is_writable($dir)) {
-            \trigger_error(\sprintf('Writing to %s is not allowed.', $dir), E_USER_NOTICE);
-
+        if (!self::ensureDir(\dirname($file))) {
             return false;
         }
 
diff --git a/vendor/psy/psysh/src/Configuration.php b/vendor/psy/psysh/src/Configuration.php
index 67c76e7b3d4cc6030fb1312cb9ef1caa6125cdca..5236eee5ae0130bc2ec3921540d2453d13b2eccc 100644
--- a/vendor/psy/psysh/src/Configuration.php
+++ b/vendor/psy/psysh/src/Configuration.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -13,19 +13,19 @@
 
 use Psy\Exception\DeprecatedException;
 use Psy\Exception\RuntimeException;
+use Psy\ExecutionLoop\ProcessForker;
 use Psy\Output\OutputPager;
 use Psy\Output\ShellOutput;
-use Psy\Readline\GNUReadline;
-use Psy\Readline\HoaConsole;
-use Psy\Readline\Libedit;
-use Psy\Readline\Readline;
-use Psy\Readline\Transient;
 use Psy\TabCompletion\AutoCompleter;
 use Psy\VarDumper\Presenter;
 use Psy\VersionUpdater\Checker;
 use Psy\VersionUpdater\GitHubChecker;
 use Psy\VersionUpdater\IntervalChecker;
 use Psy\VersionUpdater\NoopChecker;
+use Symfony\Component\Console\Formatter\OutputFormatterStyle;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Output\OutputInterface;
 
 /**
  * The Psy Shell configuration.
@@ -36,6 +36,16 @@ class Configuration
     const COLOR_MODE_FORCED   = 'forced';
     const COLOR_MODE_DISABLED = 'disabled';
 
+    const INTERACTIVE_MODE_AUTO     = 'auto';
+    const INTERACTIVE_MODE_FORCED   = 'forced';
+    const INTERACTIVE_MODE_DISABLED = 'disabled';
+
+    const VERBOSITY_QUIET        = 'quiet';
+    const VERBOSITY_NORMAL       = 'normal';
+    const VERBOSITY_VERBOSE      = 'verbose';
+    const VERBOSITY_VERY_VERBOSE = 'very_verbose';
+    const VERBOSITY_DEBUG        = 'debug';
+
     private static $AVAILABLE_OPTIONS = [
         'codeCleaner',
         'colorMode',
@@ -45,10 +55,13 @@ class Configuration
         'eraseDuplicates',
         'errorLoggingLevel',
         'forceArrayIndexes',
+        'formatterStyles',
         'historySize',
+        'interactiveMode',
         'manualDbFile',
         'pager',
         'prompt',
+        'rawOutput',
         'requireSemicolons',
         'runtimeDir',
         'startupMessage',
@@ -58,6 +71,7 @@ class Configuration
         'useReadline',
         'useTabCompletion',
         'useUnicode',
+        'verbosity',
         'warnOnMultipleConfigs',
     ];
 
@@ -76,17 +90,23 @@ class Configuration
     private $useBracketedPaste;
     private $hasPcntl;
     private $usePcntl;
-    private $newCommands       = [];
+    private $newCommands = [];
+    private $pipedInput;
+    private $pipedOutput;
+    private $rawOutput = false;
     private $requireSemicolons = false;
     private $useUnicode;
     private $useTabCompletion;
     private $newMatchers = [];
     private $errorLoggingLevel = E_ALL;
     private $warnOnMultipleConfigs = false;
-    private $colorMode;
+    private $colorMode = self::COLOR_MODE_AUTO;
+    private $interactiveMode = self::INTERACTIVE_MODE_AUTO;
     private $updateCheck;
     private $startupMessage;
     private $forceArrayIndexes = false;
+    private $formatterStyles = [];
+    private $verbosity = self::VERBOSITY_NORMAL;
 
     // services
     private $readline;
@@ -109,13 +129,11 @@ class Configuration
      */
     public function __construct(array $config = [])
     {
-        $this->setColorMode(self::COLOR_MODE_AUTO);
-
         // explicit configFile option
         if (isset($config['configFile'])) {
             $this->configFile = $config['configFile'];
-        } elseif ($configFile = \getenv('PSYSH_CONFIG')) {
-            $this->configFile = $configFile;
+        } elseif (isset($_SERVER['PSYSH_CONFIG']) && $_SERVER['PSYSH_CONFIG']) {
+            $this->configFile = $_SERVER['PSYSH_CONFIG'];
         }
 
         // legacy baseDir option
@@ -132,6 +150,200 @@ public function __construct(array $config = [])
         $this->init();
     }
 
+    /**
+     * Construct a Configuration object from Symfony Console input.
+     *
+     * This is great for adding psysh-compatible command line options to framework- or app-specific
+     * wrappers.
+     *
+     * $input should already be bound to an appropriate InputDefinition (see self::getInputOptions
+     * if you want to build your own) before calling this method. It's not required, but things work
+     * a lot better if we do.
+     *
+     * @see self::getInputOptions
+     *
+     * @throws \InvalidArgumentException
+     *
+     * @param InputInterface $input
+     *
+     * @return self
+     */
+    public static function fromInput(InputInterface $input)
+    {
+        $config = new self(['configFile' => self::getConfigFileFromInput($input)]);
+
+        // Handle --color and --no-color (and --ansi and --no-ansi aliases)
+        if (self::getOptionFromInput($input, ['color', 'ansi'])) {
+            $config->setColorMode(self::COLOR_MODE_FORCED);
+        } elseif (self::getOptionFromInput($input, ['no-color', 'no-ansi'])) {
+            $config->setColorMode(self::COLOR_MODE_DISABLED);
+        }
+
+        // Handle verbosity options
+        if ($verbosity = self::getVerbosityFromInput($input)) {
+            $config->setVerbosity($verbosity);
+        }
+
+        // Handle interactive mode
+        if (self::getOptionFromInput($input, ['interactive', 'interaction'], ['-a', '-i'])) {
+            $config->setInteractiveMode(self::INTERACTIVE_MODE_FORCED);
+        } elseif (self::getOptionFromInput($input, ['no-interactive', 'no-interaction'], ['-n'])) {
+            $config->setInteractiveMode(self::INTERACTIVE_MODE_DISABLED);
+        }
+
+        // Handle --raw-output
+        // @todo support raw output with interactive input?
+        if (!$config->getInputInteractive()) {
+            if (self::getOptionFromInput($input, ['raw-output'], ['-r'])) {
+                $config->setRawOutput(true);
+            }
+        }
+
+        return $config;
+    }
+
+    /**
+     * Get the desired config file from the given input.
+     *
+     * @return string|null config file path, or null if none is specified
+     */
+    private static function getConfigFileFromInput(InputInterface $input)
+    {
+        // Best case, input is properly bound and validated.
+        if ($input->hasOption('config')) {
+            return $input->getOption('config');
+        }
+
+        return $input->getParameterOption('--config', null, true) ?: $input->getParameterOption('-c', null, true);
+    }
+
+    /**
+     * Get a boolean option from the given input.
+     *
+     * This helper allows fallback for unbound and unvalidated input. It's not perfect--for example,
+     * it can't deal with several short options squished together--but it's better than falling over
+     * any time someone gives us unbound input.
+     *
+     * @return bool true if the option (or an alias) is present
+     */
+    private static function getOptionFromInput(InputInterface $input, array $names, array $otherParams = [])
+    {
+        // Best case, input is properly bound and validated.
+        foreach ($names as $name) {
+            if ($input->hasOption($name) && $input->getOption($name)) {
+                return true;
+            }
+        }
+
+        foreach ($names as $name) {
+            $otherParams[] = '--' . $name;
+        }
+
+        foreach ($otherParams as $name) {
+            if ($input->hasParameterOption($name, true)) {
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * Get the desired verbosity from the given input.
+     *
+     * This is a bit more complext than the other options parsers. It handles `--quiet` and
+     * `--verbose`, along with their short aliases, and fancy things like `-vvv`.
+     *
+     * @return string|null configuration constant, or null if no verbosity option is specified
+     */
+    private static function getVerbosityFromInput(InputInterface $input)
+    {
+        // --quiet wins!
+        if (self::getOptionFromInput($input, ['quiet'], ['-q'])) {
+            return self::VERBOSITY_QUIET;
+        }
+
+        // Best case, input is properly bound and validated.
+        //
+        // Note that if the `--verbose` option is incorrectly defined as `VALUE_NONE` rather than
+        // `VALUE_OPTIONAL` (as it is in Symfony Console by default) it doesn't actually work with
+        // multiple verbosity levels as it claims.
+        //
+        // We can detect this by checking whether the the value === true, and fall back to unbound
+        // parsing for this option.
+        if ($input->hasOption('verbose') && $input->getOption('verbose') !== true) {
+            switch ($input->getOption('verbose')) {
+                case '-1':
+                    return self::VERBOSITY_QUIET;
+                case '0': // explicitly normal, overrides config file default
+                    return self::VERBOSITY_NORMAL;
+                case '1':
+                case null: // `--verbose` and `-v`
+                    return self::VERBOSITY_VERBOSE;
+                case '2':
+                case 'v': // `-vv`
+                    return self::VERBOSITY_VERY_VERBOSE;
+                case '3':
+                case 'vv': // `-vvv`
+                    return self::VERBOSITY_DEBUG;
+                default: // implicitly normal, config file default wins
+                    return;
+            }
+        }
+
+        // quiet and normal have to come before verbose, because it eats everything else.
+        if ($input->hasParameterOption('--verbose=-1', true) || $input->getParameterOption('--verbose', false, true) === '-1') {
+            return self::VERBOSITY_QUIET;
+        }
+
+        if ($input->hasParameterOption('--verbose=0', true) || $input->getParameterOption('--verbose', false, true) === '0') {
+            return self::VERBOSITY_NORMAL;
+        }
+
+        // `-vvv`, `-vv` and `-v` have to come in descending length order, because `hasParameterOption` matches prefixes.
+        if ($input->hasParameterOption('-vvv', true) || $input->hasParameterOption('--verbose=3', true) || $input->getParameterOption('--verbose', false, true) === '3') {
+            return self::VERBOSITY_DEBUG;
+        }
+
+        if ($input->hasParameterOption('-vv', true) || $input->hasParameterOption('--verbose=2', true) || $input->getParameterOption('--verbose', false, true) === '2') {
+            return self::VERBOSITY_VERY_VERBOSE;
+        }
+
+        if ($input->hasParameterOption('-v', true) || $input->hasParameterOption('--verbose=1', true) || $input->hasParameterOption('--verbose', true)) {
+            return self::VERBOSITY_VERBOSE;
+        }
+    }
+
+    /**
+     * Get a list of input options expected when initializing Configuration via input.
+     *
+     * @see self::fromInput
+     *
+     * @return InputOption[]
+     */
+    public static function getInputOptions()
+    {
+        return [
+            new InputOption('config',         'c',        InputOption::VALUE_REQUIRED, 'Use an alternate PsySH config file location.'),
+            new InputOption('cwd',            null,       InputOption::VALUE_REQUIRED, 'Use an alternate working directory.'),
+
+            new InputOption('color',          null,       InputOption::VALUE_NONE,     'Force colors in output.'),
+            new InputOption('no-color',       null,       InputOption::VALUE_NONE,     'Disable colors in output.'),
+            // --ansi and --no-ansi aliases to match Symfony, Composer, etc.
+            new InputOption('ansi',           null,       InputOption::VALUE_NONE,     'Force colors in output.'),
+            new InputOption('no-ansi',        null,       InputOption::VALUE_NONE,     'Disable colors in output.'),
+
+            new InputOption('quiet',          'q',        InputOption::VALUE_NONE,     'Shhhhhh.'),
+            new InputOption('verbose',        'v|vv|vvv', InputOption::VALUE_OPTIONAL, 'Increase the verbosity of messages.', '0'),
+            new InputOption('interactive',    'i|a',      InputOption::VALUE_NONE,     'Force PsySH to run in interactive mode.'),
+            new InputOption('no-interactive', 'n',        InputOption::VALUE_NONE,     'Run PsySH without interactive input. Requires input from stdin.'),
+            // --interaction and --no-interaction aliases for compatibility with Symfony, Composer, etc
+            new InputOption('interaction',    null,       InputOption::VALUE_NONE,     'Force PsySH to run in interactive mode.'),
+            new InputOption('no-interaction', null,       InputOption::VALUE_NONE,     'Run PsySH without interactive input. Requires input from stdin.'),
+            new InputOption('raw-output',     'r',        InputOption::VALUE_NONE,     'Print var_export-style return values (for non-interactive input)'),
+        ];
+    }
+
     /**
      * Initialize the configuration.
      *
@@ -146,7 +358,7 @@ public function init()
     {
         // feature detection
         $this->hasReadline = \function_exists('readline');
-        $this->hasPcntl    = \function_exists('pcntl_signal') && \function_exists('posix_getpid');
+        $this->hasPcntl    = ProcessForker::isSupported();
 
         if ($configFile = $this->getConfigFile()) {
             $this->loadConfigFile($configFile);
@@ -181,7 +393,7 @@ public function getConfigFile()
 
         if (!empty($files)) {
             if ($this->warnOnMultipleConfigs && \count($files) > 1) {
-                $msg = \sprintf('Multiple configuration files found: %s. Using %s', \implode($files, ', '), $files[0]);
+                $msg = \sprintf('Multiple configuration files found: %s. Using %s', \implode(', ', $files), $files[0]);
                 \trigger_error($msg, E_USER_NOTICE);
             }
 
@@ -251,12 +463,16 @@ public function loadConfig(array $options)
      * The config file may directly manipulate the configuration, or may return
      * an array of options which will be merged with the current configuration.
      *
-     * @throws \InvalidArgumentException if the config file returns a non-array result
+     * @throws \InvalidArgumentException if the config file does not exist or returns a non-array result
      *
      * @param string $file
      */
     public function loadConfigFile($file)
     {
+        if (!\is_file($file)) {
+            throw new \InvalidArgumentException(\sprintf('Invalid configuration file specified, %s does not exist', $file));
+        }
+
         $__psysh_config_file__ = $file;
         $load = function ($config) use ($__psysh_config_file__) {
             $result = require $__psysh_config_file__;
@@ -360,7 +576,9 @@ public function getRuntimeDir()
         }
 
         if (!\is_dir($this->runtimeDir)) {
-            \mkdir($this->runtimeDir, 0700, true);
+            if (!@\mkdir($this->runtimeDir, 0700, true)) {
+                throw new RuntimeException(sprintf('Unable to create PsySH runtime directory. Make sure PHP is able to write to %s in order to continue.', dirname($this->runtimeDir)));
+            }
         }
 
         return $this->runtimeDir;
@@ -394,7 +612,7 @@ public function getHistoryFile()
 
         if (!empty($files)) {
             if ($this->warnOnMultipleConfigs && \count($files) > 1) {
-                $msg = \sprintf('Multiple history files found: %s. Using %s', \implode($files, ', '), $files[0]);
+                $msg = \sprintf('Multiple history files found: %s. Using %s', \implode(', ', $files), $files[0]);
                 \trigger_error($msg, E_USER_NOTICE);
             }
 
@@ -516,9 +734,9 @@ public function useReadline()
     /**
      * Set the Psy Shell readline service.
      *
-     * @param Readline $readline
+     * @param Readline\Readline $readline
      */
-    public function setReadline(Readline $readline)
+    public function setReadline(Readline\Readline $readline)
     {
         $this->readline = $readline;
     }
@@ -532,7 +750,7 @@ public function setReadline(Readline $readline)
      *  * Libedit
      *  * A transient array-based readline emulation.
      *
-     * @return Readline
+     * @return Readline\Readline
      */
     public function getReadline()
     {
@@ -558,16 +776,16 @@ public function getReadline()
     private function getReadlineClass()
     {
         if ($this->useReadline()) {
-            if (GNUReadline::isSupported()) {
-                return 'Psy\Readline\GNUReadline';
-            } elseif (Libedit::isSupported()) {
-                return 'Psy\Readline\Libedit';
-            } elseif (HoaConsole::isSupported()) {
-                return 'Psy\Readline\HoaConsole';
+            if (Readline\GNUReadline::isSupported()) {
+                return Readline\GNUReadline::class;
+            } elseif (Readline\Libedit::isSupported()) {
+                return Readline\Libedit::class;
+            } elseif (Readline\HoaConsole::isSupported()) {
+                return Readline\HoaConsole::class;
             }
         }
 
-        return 'Psy\Readline\Transient';
+        return Readline\Transient::class;
     }
 
     /**
@@ -600,7 +818,7 @@ public function setUseBracketedPaste($useBracketedPaste)
     public function useBracketedPaste()
     {
         // For now, only the GNU readline implementation supports bracketed paste.
-        $supported = ($this->getReadlineClass() === 'Psy\Readline\GNUReadline');
+        $supported = ($this->getReadlineClass() === Readline\GNUReadline::class);
 
         return $supported && $this->useBracketedPaste;
 
@@ -641,6 +859,29 @@ public function usePcntl()
         return isset($this->usePcntl) ? ($this->hasPcntl && $this->usePcntl) : $this->hasPcntl;
     }
 
+    /**
+     * Check whether to use raw output.
+     *
+     * This is set by the --raw-output (-r) flag, and really only makes sense
+     * when non-interactive, e.g. executing stdin.
+     *
+     * @return bool true if raw output is enabled
+     */
+    public function rawOutput()
+    {
+        return $this->rawOutput;
+    }
+
+    /**
+     * Enable or disable raw output.
+     *
+     * @param bool $rawOutput
+     */
+    public function setRawOutput($rawOutput)
+    {
+        $this->rawOutput = (bool) $rawOutput;
+    }
+
     /**
      * Enable or disable strict requirement of semicolons.
      *
@@ -714,8 +955,7 @@ public function setErrorLoggingLevel($errorLoggingLevel)
      * Get the current error logging level.
      *
      * By default, PsySH will automatically log all errors, regardless of the
-     * current `error_reporting` level. Additionally, if the `error_reporting`
-     * level warrants, an ErrorException will be thrown.
+     * current `error_reporting` level.
      *
      * Set `errorLoggingLevel` to 0 to prevent logging non-thrown errors. Set it
      * to any valid error_reporting value to log only errors which match that
@@ -807,14 +1047,17 @@ public function getTabCompletion()
     public function setOutput(ShellOutput $output)
     {
         $this->output = $output;
+        $this->pipedOutput = null; // Reset cached pipe info
+        $this->applyFormatterStyles();
     }
 
     /**
      * Get a Shell Output service instance.
      *
      * If none has been explicitly provided, this will create a new instance
-     * with VERBOSITY_NORMAL and the output page supplied by self::getPager
+     * with the configured verbosity and output pager supplied by self::getPager
      *
+     * @see self::verbosity
      * @see self::getPager
      *
      * @return ShellOutput
@@ -822,12 +1065,20 @@ public function setOutput(ShellOutput $output)
     public function getOutput()
     {
         if (!isset($this->output)) {
-            $this->output = new ShellOutput(
-                ShellOutput::VERBOSITY_NORMAL,
-                $this->getOutputDecorated(),
+            $this->setOutput(new ShellOutput(
+                $this->getOutputVerbosity(),
+                null,
                 null,
                 $this->getPager()
-            );
+            ));
+
+            // This is racy because `getOutputDecorated` needs access to the
+            // output stream to figure out if it's piped or not, so create it
+            // first, then update after we have a stream.
+            $decorated = $this->getOutputDecorated();
+            if ($decorated !== null) {
+                $this->output->setDecorated($decorated);
+            }
         }
 
         return $this->output;
@@ -836,16 +1087,34 @@ public function getOutput()
     /**
      * Get the decoration (i.e. color) setting for the Shell Output service.
      *
-     * @return null|bool 3-state boolean corresponding to the current color mode
+     * @return bool|null 3-state boolean corresponding to the current color mode
      */
     public function getOutputDecorated()
     {
-        if ($this->colorMode() === self::COLOR_MODE_AUTO) {
-            return;
-        } elseif ($this->colorMode() === self::COLOR_MODE_FORCED) {
-            return true;
-        } elseif ($this->colorMode() === self::COLOR_MODE_DISABLED) {
-            return false;
+        switch ($this->colorMode()) {
+            case self::COLOR_MODE_AUTO:
+                return $this->outputIsPiped() ? false : null;
+            case self::COLOR_MODE_FORCED:
+                return true;
+            case self::COLOR_MODE_DISABLED:
+                return false;
+        }
+    }
+
+    /**
+     * Get the interactive setting for shell input.
+     *
+     * @return bool
+     */
+    public function getInputInteractive()
+    {
+        switch ($this->interactiveMode()) {
+            case self::INTERACTIVE_MODE_AUTO:
+                return !$this->inputIsPiped();
+            case self::INTERACTIVE_MODE_FORCED:
+                return true;
+            case self::INTERACTIVE_MODE_DISABLED:
+                return false;
         }
     }
 
@@ -1034,7 +1303,7 @@ public function getManualDbFile()
         $files = ConfigPaths::getDataFiles(['php_manual.sqlite'], $this->dataDir);
         if (!empty($files)) {
             if ($this->warnOnMultipleConfigs && \count($files) > 1) {
-                $msg = \sprintf('Multiple manual database files found: %s. Using %s', \implode($files, ', '), $files[0]);
+                $msg = \sprintf('Multiple manual database files found: %s. Using %s', \implode(', ', $files), $files[0]);
                 \trigger_error($msg, E_USER_NOTICE);
             }
 
@@ -1133,11 +1402,12 @@ public function setColorMode($colorMode)
             self::COLOR_MODE_DISABLED,
         ];
 
-        if (\in_array($colorMode, $validColorModes)) {
-            $this->colorMode = $colorMode;
-        } else {
+        if (!\in_array($colorMode, $validColorModes)) {
+            // @todo Fix capitalization for 0.11.0
             throw new \InvalidArgumentException('invalid color mode: ' . $colorMode);
         }
+
+        $this->colorMode = $colorMode;
     }
 
     /**
@@ -1150,6 +1420,36 @@ public function colorMode()
         return $this->colorMode;
     }
 
+    /**
+     * Set the shell's interactive mode.
+     *
+     * @param string $interactiveMode
+     */
+    public function setInteractiveMode($interactiveMode)
+    {
+        $validInteractiveModes = [
+            self::INTERACTIVE_MODE_AUTO,
+            self::INTERACTIVE_MODE_FORCED,
+            self::INTERACTIVE_MODE_DISABLED,
+        ];
+
+        if (!\in_array($interactiveMode, $validInteractiveModes)) {
+            throw new \InvalidArgumentException('Invalid interactive mode: ' . $interactiveMode);
+        }
+
+        $this->interactiveMode = $interactiveMode;
+    }
+
+    /**
+     * Get the current interactive mode.
+     *
+     * @return string
+     */
+    public function interactiveMode()
+    {
+        return $this->interactiveMode;
+    }
+
     /**
      * Set an update checker service instance.
      *
@@ -1212,7 +1512,7 @@ public function getUpdateCheck()
     /**
      * Set the update check interval.
      *
-     * @throws \InvalidArgumentDescription if the update check interval is unknown
+     * @throws \InvalidArgumentException if the update check interval is unknown
      *
      * @param string $interval
      */
@@ -1227,6 +1527,7 @@ public function setUpdateCheck($interval)
         ];
 
         if (!\in_array($interval, $validIntervals)) {
+            // @todo Fix capitalization for 0.11.0
             throw new \InvalidArgumentException('invalid update check interval: ' . $interval);
         }
 
@@ -1304,4 +1605,157 @@ public function setForceArrayIndexes($forceArrayIndexes)
     {
         $this->forceArrayIndexes = $forceArrayIndexes;
     }
+
+    /**
+     * Set the shell output formatter styles.
+     *
+     * Accepts a map from style name to [fg, bg, options], for example:
+     *
+     *     [
+     *         'error' => ['white', 'red', ['bold']],
+     *         'warning' => ['black', 'yellow'],
+     *     ]
+     *
+     * Foreground, background or options can be null, or even omitted entirely.
+     *
+     * @see ShellOutput::initFormatters
+     *
+     * @param array $formatterStyles
+     */
+    public function setFormatterStyles(array $formatterStyles)
+    {
+        foreach ($formatterStyles as $name => $style) {
+            list($fg, $bg, $opts) = \array_pad($style, 3, null);
+            $this->formatterStyles[$name] = new OutputFormatterStyle($fg ?: null, $bg ?: null, $opts ?: []);
+        }
+
+        if (isset($this->output)) {
+            $this->applyFormatterStyles();
+        }
+    }
+
+    /**
+     * Internal method for applying output formatter style customization.
+     *
+     * This is called on initialization of the shell output, and again if the
+     * formatter styles config is updated.
+     */
+    private function applyFormatterStyles()
+    {
+        $formatter = $this->output->getFormatter();
+        foreach ($this->formatterStyles as $name => $style) {
+            $formatter->setStyle($name, $style);
+        }
+    }
+
+    /**
+     * Get the configured output verbosity.
+     *
+     * @return string
+     */
+    public function verbosity()
+    {
+        return $this->verbosity;
+    }
+
+    /**
+     * Set the shell output verbosity.
+     *
+     * Accepts OutputInterface verbosity constants.
+     *
+     * @param string $verbosity
+     */
+    public function setVerbosity($verbosity)
+    {
+        $validVerbosityLevels = [
+            self::VERBOSITY_QUIET,
+            self::VERBOSITY_NORMAL,
+            self::VERBOSITY_VERBOSE,
+            self::VERBOSITY_VERY_VERBOSE,
+            self::VERBOSITY_DEBUG,
+        ];
+
+        if (!\in_array($verbosity, $validVerbosityLevels)) {
+            throw new \InvalidArgumentException('Invalid verbosity level: ' . $verbosity);
+        }
+
+        $this->verbosity = $verbosity;
+
+        if (isset($this->output)) {
+            $this->output->setVerbosity($this->getOutputVerbosity());
+        }
+    }
+
+    /**
+     * Map the verbosity configuration to OutputInterface verbosity constants.
+     *
+     * @return int OutputInterface verbosity level
+     */
+    public function getOutputVerbosity()
+    {
+        switch ($this->verbosity()) {
+            case self::VERBOSITY_QUIET:
+                return OutputInterface::VERBOSITY_QUIET;
+            case self::VERBOSITY_VERBOSE:
+                return OutputInterface::VERBOSITY_VERBOSE;
+            case self::VERBOSITY_VERY_VERBOSE:
+                return OutputInterface::VERBOSITY_VERY_VERBOSE;
+            case self::VERBOSITY_DEBUG:
+                return OutputInterface::VERBOSITY_DEBUG;
+            case self::VERBOSITY_NORMAL:
+            default:
+                return OutputInterface::VERBOSITY_NORMAL;
+        }
+    }
+
+    /**
+     * Guess whether stdin is piped.
+     *
+     * This is mostly useful for deciding whether to use non-interactive mode.
+     *
+     * @return bool
+     */
+    public function inputIsPiped()
+    {
+        if ($this->pipedInput === null) {
+            $this->pipedInput = \defined('STDIN') && static::looksLikeAPipe(\STDIN);
+        }
+
+        return $this->pipedInput;
+    }
+
+    /**
+     * Guess whether shell output is piped.
+     *
+     * This is mostly useful for deciding whether to use non-decorated output.
+     *
+     * @return bool
+     */
+    public function outputIsPiped()
+    {
+        if ($this->pipedOutput === null) {
+            $this->pipedOutput = static::looksLikeAPipe($this->getOutput()->getStream());
+        }
+
+        return $this->pipedOutput;
+    }
+
+    /**
+     * Guess whether an input or output stream is piped.
+     *
+     * @param resource|int $stream
+     *
+     * @return bool
+     */
+    private static function looksLikeAPipe($stream)
+    {
+        if (\function_exists('posix_isatty')) {
+            return !\posix_isatty($stream);
+        }
+
+        $stat = \fstat($stream);
+        $mode = $stat['mode'] & 0170000;
+
+        return $mode === 0010000 || $mode === 0040000 || $mode === 0100000 || $mode === 0120000;
+    }
 }
diff --git a/vendor/psy/psysh/src/ConsoleColorFactory.php b/vendor/psy/psysh/src/ConsoleColorFactory.php
index 76ad3b51234ba041f29fcff5f1f10368e48583f9..9cfbf40e379a4f7ff23769ff100062e081cdc467 100644
--- a/vendor/psy/psysh/src/ConsoleColorFactory.php
+++ b/vendor/psy/psysh/src/ConsoleColorFactory.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -12,21 +12,18 @@
 namespace Psy;
 
 use JakubOnderka\PhpConsoleColor\ConsoleColor;
-use JakubOnderka\PhpConsoleHighlighter\Highlighter;
 
 /**
- * Builds `ConsoleColor` instances configured according to the given color mode.
+ * @deprecated Nothing should use this anymore
  */
 class ConsoleColorFactory
 {
-    private $colorMode;
-
     /**
      * @param string $colorMode
      */
     public function __construct($colorMode)
     {
-        $this->colorMode = $colorMode;
+        // Nothing to see here
     }
 
     /**
@@ -37,46 +34,6 @@ public function __construct($colorMode)
      */
     public function getConsoleColor()
     {
-        if ($this->colorMode === Configuration::COLOR_MODE_AUTO) {
-            return $this->getDefaultConsoleColor();
-        } elseif ($this->colorMode === Configuration::COLOR_MODE_FORCED) {
-            return $this->getForcedConsoleColor();
-        } elseif ($this->colorMode === Configuration::COLOR_MODE_DISABLED) {
-            return $this->getDisabledConsoleColor();
-        }
-    }
-
-    private function getDefaultConsoleColor()
-    {
-        $color = new ConsoleColor();
-        $color->addTheme(Highlighter::LINE_NUMBER, ['blue']);
-        $color->addTheme(Highlighter::TOKEN_KEYWORD, ['yellow']);
-        $color->addTheme(Highlighter::TOKEN_STRING, ['green']);
-        $color->addTheme(Highlighter::TOKEN_COMMENT, ['dark_gray']);
-
-        return $color;
-    }
-
-    private function getForcedConsoleColor()
-    {
-        $color = $this->getDefaultConsoleColor();
-        $color->setForceStyle(true);
-
-        return $color;
-    }
-
-    private function getDisabledConsoleColor()
-    {
-        $color = new ConsoleColor();
-
-        $color->addTheme(Highlighter::TOKEN_STRING, ['none']);
-        $color->addTheme(Highlighter::TOKEN_COMMENT, ['none']);
-        $color->addTheme(Highlighter::TOKEN_KEYWORD, ['none']);
-        $color->addTheme(Highlighter::TOKEN_DEFAULT, ['none']);
-        $color->addTheme(Highlighter::TOKEN_HTML, ['none']);
-        $color->addTheme(Highlighter::ACTUAL_LINE_MARK, ['none']);
-        $color->addTheme(Highlighter::LINE_NUMBER, ['none']);
-
-        return $color;
+        return new ConsoleColor(); // /shrug
     }
 }
diff --git a/vendor/psy/psysh/src/Context.php b/vendor/psy/psysh/src/Context.php
index 104dc8ffa6b3ce3028e1c4590fdc36f9706d2106..661ff0bc0914a23cb1d8064e79c4d2176ea20e55 100644
--- a/vendor/psy/psysh/src/Context.php
+++ b/vendor/psy/psysh/src/Context.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -38,7 +38,7 @@ class Context
     /**
      * Get a context variable.
      *
-     * @throws InvalidArgumentException If the variable is not found in the current context
+     * @throws \InvalidArgumentException If the variable is not found in the current context
      *
      * @param string $name
      *
@@ -182,7 +182,7 @@ public function setLastException(\Exception $e)
      *
      * @throws \InvalidArgumentException If no Exception has been caught
      *
-     * @return null|\Exception
+     * @return \Exception|null
      */
     public function getLastException()
     {
@@ -208,7 +208,7 @@ public function setLastStdout($lastStdout)
      *
      * @throws \InvalidArgumentException If no output has happened yet
      *
-     * @return null|string
+     * @return string|null
      */
     public function getLastStdout()
     {
diff --git a/vendor/psy/psysh/src/ContextAware.php b/vendor/psy/psysh/src/ContextAware.php
index 748f13aa3e46890c351cad8ad8b20d454e0814d8..121d4db18d6c98132303fac408e16717c093cb4b 100644
--- a/vendor/psy/psysh/src/ContextAware.php
+++ b/vendor/psy/psysh/src/ContextAware.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/Exception/BreakException.php b/vendor/psy/psysh/src/Exception/BreakException.php
index 2200e78dc92b97d1bee242af5223cd750b28e61f..6efc7acb7718c61df4b22a58414bc22b2b3ae21e 100644
--- a/vendor/psy/psysh/src/Exception/BreakException.php
+++ b/vendor/psy/psysh/src/Exception/BreakException.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/Exception/DeprecatedException.php b/vendor/psy/psysh/src/Exception/DeprecatedException.php
index 8ac0104b9f8c514c53a5df532a52570897d3f8c8..d06608ebb3b04c9879b730a862882556655946c5 100644
--- a/vendor/psy/psysh/src/Exception/DeprecatedException.php
+++ b/vendor/psy/psysh/src/Exception/DeprecatedException.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/Exception/ErrorException.php b/vendor/psy/psysh/src/Exception/ErrorException.php
index 822fa927584d547a43a09fd3025490a420439ca3..ae7bd03f1e1b4691c678f85bc5808c53ff230cf8 100644
--- a/vendor/psy/psysh/src/Exception/ErrorException.php
+++ b/vendor/psy/psysh/src/Exception/ErrorException.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -21,12 +21,12 @@ class ErrorException extends \ErrorException implements Exception
     /**
      * Construct a Psy ErrorException.
      *
-     * @param string    $message  (default: "")
-     * @param int       $code     (default: 0)
-     * @param int       $severity (default: 1)
-     * @param string    $filename (default: null)
-     * @param int       $lineno   (default: null)
-     * @param Exception $previous (default: null)
+     * @param string         $message  (default: "")
+     * @param int            $code     (default: 0)
+     * @param int            $severity (default: 1)
+     * @param string|null    $filename (default: null)
+     * @param int|null       $lineno   (default: null)
+     * @param Exception|null $previous (default: null)
      */
     public function __construct($message = '', $code = 0, $severity = 1, $filename = null, $lineno = null, $previous = null)
     {
@@ -86,7 +86,7 @@ public function getRawMessage()
      *
      * This allows us to:
      *
-     *     set_error_handler(array('Psy\Exception\ErrorException', 'throwException'));
+     *     set_error_handler([ErrorException::class, 'throwException']);
      *
      * @throws ErrorException
      *
diff --git a/vendor/psy/psysh/src/Exception/Exception.php b/vendor/psy/psysh/src/Exception/Exception.php
index de6895479390b7b5af19e31c773d250a56f12bb9..4b02d1326ca1f90a1079b3a9f7526a2099c99e77 100644
--- a/vendor/psy/psysh/src/Exception/Exception.php
+++ b/vendor/psy/psysh/src/Exception/Exception.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/Exception/FatalErrorException.php b/vendor/psy/psysh/src/Exception/FatalErrorException.php
index 48a4e2b81b9bb57f5de61694e17cb3a948b15bfa..6642264e2e0c0efa207e1334f66b1c7c9d9b29a1 100644
--- a/vendor/psy/psysh/src/Exception/FatalErrorException.php
+++ b/vendor/psy/psysh/src/Exception/FatalErrorException.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -21,12 +21,12 @@ class FatalErrorException extends \ErrorException implements Exception
     /**
      * Create a fatal error.
      *
-     * @param string     $message  (default: "")
-     * @param int        $code     (default: 0)
-     * @param int        $severity (default: 1)
-     * @param string     $filename (default: null)
-     * @param int        $lineno   (default: null)
-     * @param \Exception $previous (default: null)
+     * @param string          $message  (default: "")
+     * @param int             $code     (default: 0)
+     * @param int             $severity (default: 1)
+     * @param string|null     $filename (default: null)
+     * @param int|null        $lineno   (default: null)
+     * @param \Exception|null $previous (default: null)
      */
     public function __construct($message = '', $code = 0, $severity = 1, $filename = null, $lineno = null, $previous = null)
     {
diff --git a/vendor/psy/psysh/src/Exception/ParseErrorException.php b/vendor/psy/psysh/src/Exception/ParseErrorException.php
index cb6380e6b9e69a399954c811584ec4c285dd7c21..cfc5f70ca11d36cf26af887c8f5d133a129df195 100644
--- a/vendor/psy/psysh/src/Exception/ParseErrorException.php
+++ b/vendor/psy/psysh/src/Exception/ParseErrorException.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/Exception/RuntimeException.php b/vendor/psy/psysh/src/Exception/RuntimeException.php
index 09e68483e5417b7242f0a4fe4e7eb54bd7e59388..31890517e214b3ed74061043f0d90764adfbeb1e 100644
--- a/vendor/psy/psysh/src/Exception/RuntimeException.php
+++ b/vendor/psy/psysh/src/Exception/RuntimeException.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -21,9 +21,9 @@ class RuntimeException extends \RuntimeException implements Exception
     /**
      * Make this bad boy.
      *
-     * @param string     $message  (default: "")
-     * @param int        $code     (default: 0)
-     * @param \Exception $previous (default: null)
+     * @param string          $message  (default: "")
+     * @param int             $code     (default: 0)
+     * @param \Exception|null $previous (default: null)
      */
     public function __construct($message = '', $code = 0, \Exception $previous = null)
     {
diff --git a/vendor/psy/psysh/src/Exception/ThrowUpException.php b/vendor/psy/psysh/src/Exception/ThrowUpException.php
index b0ca490a7735575d1ccb4c4d42a9f65cc105906a..692c4a3c67fe7172171d8a6991cfd9906b7a1a96 100644
--- a/vendor/psy/psysh/src/Exception/ThrowUpException.php
+++ b/vendor/psy/psysh/src/Exception/ThrowUpException.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/Exception/TypeErrorException.php b/vendor/psy/psysh/src/Exception/TypeErrorException.php
index b6894983f652e49cc84da41814c6204afb5e431c..40dccf47e5f6330095858f4cfcb67d03538bcf8a 100644
--- a/vendor/psy/psysh/src/Exception/TypeErrorException.php
+++ b/vendor/psy/psysh/src/Exception/TypeErrorException.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/Exception/UnexpectedTargetException.php b/vendor/psy/psysh/src/Exception/UnexpectedTargetException.php
new file mode 100644
index 0000000000000000000000000000000000000000..fd2330508691b9bdf0e6924c6ad3185f934afa80
--- /dev/null
+++ b/vendor/psy/psysh/src/Exception/UnexpectedTargetException.php
@@ -0,0 +1,37 @@
+<?php
+
+/*
+ * This file is part of Psy Shell.
+ *
+ * (c) 2012-2020 Justin Hileman
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Psy\Exception;
+
+class UnexpectedTargetException extends RuntimeException
+{
+    private $target;
+
+    /**
+     * @param mixed           $target
+     * @param string          $message  (default: "")
+     * @param int             $code     (default: 0)
+     * @param \Exception|null $previous (default: null)
+     */
+    public function __construct($target, $message = '', $code = 0, \Exception $previous = null)
+    {
+        $this->target = $target;
+        parent::__construct($message, $code, $previous);
+    }
+
+    /**
+     * @return mixed
+     */
+    public function getTarget()
+    {
+        return $this->target;
+    }
+}
diff --git a/vendor/psy/psysh/src/ExecutionClosure.php b/vendor/psy/psysh/src/ExecutionClosure.php
index 5c7cd25ac7a497ec0a4dad71fc186a5cba3fca75..bebec13492f8a5cb19d1e6db8ab33c41efbb6eb4 100644
--- a/vendor/psy/psysh/src/ExecutionClosure.php
+++ b/vendor/psy/psysh/src/ExecutionClosure.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -37,10 +37,9 @@ public function __construct(Shell $__psysh__)
                 \set_error_handler([$__psysh__, 'handleError']);
 
                 // Evaluate the current code buffer
-                $_ = eval($__psysh__->onExecute($__psysh__->flushCode() ?: ExecutionClosure::NOOP_INPUT));
+                $_ = eval($__psysh__->onExecute($__psysh__->flushCode() ?: self::NOOP_INPUT));
             } catch (\Throwable $_e) {
                 // Clean up on our way out.
-                \restore_error_handler();
                 if (\ob_get_level() > 0) {
                     \ob_end_clean();
                 }
@@ -48,17 +47,16 @@ public function __construct(Shell $__psysh__)
                 throw $_e;
             } catch (\Exception $_e) {
                 // Clean up on our way out.
-                \restore_error_handler();
                 if (\ob_get_level() > 0) {
                     \ob_end_clean();
                 }
 
                 throw $_e;
+            } finally {
+                // Won't be needing this anymore
+                \restore_error_handler();
             }
 
-            // Won't be needing this anymore
-            \restore_error_handler();
-
             // Flush stdout (write to shell output, plus save to magic variable)
             \ob_end_flush();
 
@@ -72,21 +70,18 @@ public function __construct(Shell $__psysh__)
     /**
      * Set the closure instance.
      *
-     * @param Shell    $psysh
+     * @param Shell    $shell
      * @param \Closure $closure
      */
     protected function setClosure(Shell $shell, \Closure $closure)
     {
-        if (self::shouldBindClosure()) {
-            $that = $shell->getBoundObject();
-            if (\is_object($that)) {
-                $closure = $closure->bindTo($that, \get_class($that));
-            } else {
-                $closure = $closure->bindTo(null, $shell->getBoundClass());
-            }
-        }
+        $that = $shell->getBoundObject();
 
-        $this->closure = $closure;
+        if (\is_object($that)) {
+            $this->closure = $closure->bindTo($that, \get_class($that));
+        } else {
+            $this->closure = $closure->bindTo(null, $shell->getBoundClass());
+        }
     }
 
     /**
@@ -100,20 +95,4 @@ public function execute()
 
         return $closure();
     }
-
-    /**
-     * Decide whether to bind the execution closure.
-     *
-     * @return bool
-     */
-    protected static function shouldBindClosure()
-    {
-        // skip binding on HHVM < 3.5.0
-        // see https://github.com/facebook/hhvm/issues/1203
-        if (\defined('HHVM_VERSION')) {
-            return \version_compare(HHVM_VERSION, '3.5.0', '>=');
-        }
-
-        return true;
-    }
 }
diff --git a/vendor/psy/psysh/src/ExecutionLoop.php b/vendor/psy/psysh/src/ExecutionLoop.php
deleted file mode 100644
index 2e4307cb771be0f03d3064978e765bd6e68c06c3..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/src/ExecutionLoop.php
+++ /dev/null
@@ -1,67 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy;
-
-use Psy\Exception\ErrorException;
-
-/**
- * The Psy Shell execution loop.
- */
-class ExecutionLoop
-{
-    /**
-     * Run the execution loop.
-     *
-     * @throws ThrowUpException if thrown by the `throw-up` command
-     *
-     * @param Shell $shell
-     */
-    public function run(Shell $shell)
-    {
-        $this->loadIncludes($shell);
-
-        $closure = new ExecutionLoopClosure($shell);
-        $closure->execute();
-    }
-
-    /**
-     * Load user-defined includes.
-     *
-     * @param Shell $shell
-     */
-    protected function loadIncludes(Shell $shell)
-    {
-        // Load user-defined includes
-        $load = function (Shell $__psysh__) {
-            \set_error_handler([$__psysh__, 'handleError']);
-            foreach ($__psysh__->getIncludes() as $__psysh_include__) {
-                try {
-                    include $__psysh_include__;
-                } catch (\Error $_e) {
-                    $__psysh__->writeException(ErrorException::fromError($_e));
-                } catch (\Exception $_e) {
-                    $__psysh__->writeException($_e);
-                }
-            }
-            \restore_error_handler();
-            unset($__psysh_include__);
-
-            // Override any new local variables with pre-defined scope variables
-            \extract($__psysh__->getScopeVariables(false));
-
-            // ... then add the whole mess of variables back.
-            $__psysh__->setScopeVariables(\get_defined_vars());
-        };
-
-        $load($shell);
-    }
-}
diff --git a/vendor/psy/psysh/src/ExecutionLoop/AbstractListener.php b/vendor/psy/psysh/src/ExecutionLoop/AbstractListener.php
index 3617fa2438f65a3914b69e590632ac0655bf7f95..0bfa3fdf5d463275444d8ee581157dbf902690d0 100644
--- a/vendor/psy/psysh/src/ExecutionLoop/AbstractListener.php
+++ b/vendor/psy/psysh/src/ExecutionLoop/AbstractListener.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/ExecutionLoop/Listener.php b/vendor/psy/psysh/src/ExecutionLoop/Listener.php
index 3886a208bc91ced41842bd1a6ee5ccb407fe8250..5bc03c1968b78923816a5e82d05aa3678fb06a22 100644
--- a/vendor/psy/psysh/src/ExecutionLoop/Listener.php
+++ b/vendor/psy/psysh/src/ExecutionLoop/Listener.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/ExecutionLoop/ProcessForker.php b/vendor/psy/psysh/src/ExecutionLoop/ProcessForker.php
index 4704795942eb583fcaae9c590732681c3a0b89b4..5f7fd969624144f5c5db51ddfb89a7212e06e454 100644
--- a/vendor/psy/psysh/src/ExecutionLoop/ProcessForker.php
+++ b/vendor/psy/psysh/src/ExecutionLoop/ProcessForker.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -26,6 +26,19 @@ class ProcessForker extends AbstractListener
     private $savegame;
     private $up;
 
+    private static $pcntlFunctions = [
+        'pcntl_fork',
+        'pcntl_signal_dispatch',
+        'pcntl_signal',
+        'pcntl_waitpid',
+        'pcntl_wexitstatus',
+    ];
+
+    private static $posixFunctions = [
+        'posix_getpid',
+        'posix_kill',
+    ];
+
     /**
      * Process forker is supported if pcntl and posix extensions are available.
      *
@@ -33,7 +46,56 @@ class ProcessForker extends AbstractListener
      */
     public static function isSupported()
     {
-        return \function_exists('pcntl_signal') && \function_exists('posix_getpid');
+        return self::isPcntlSupported() && !self::disabledPcntlFunctions() && self::isPosixSupported() && !self::disabledPosixFunctions();
+    }
+
+    /**
+     * Verify that all required pcntl functions are, in fact, available.
+     */
+    public static function isPcntlSupported()
+    {
+        foreach (self::$pcntlFunctions as $func) {
+            if (!\function_exists($func)) {
+                return false;
+            }
+        }
+
+        return true;
+    }
+
+    /**
+     * Check whether required pcntl functions are disabled.
+     */
+    public static function disabledPcntlFunctions()
+    {
+        return self::checkDisabledFunctions(self::$pcntlFunctions);
+    }
+
+    /**
+     * Verify that all required posix functions are, in fact, available.
+     */
+    public static function isPosixSupported()
+    {
+        foreach (self::$posixFunctions as $func) {
+            if (!\function_exists($func)) {
+                return false;
+            }
+        }
+
+        return true;
+    }
+
+    /**
+     * Check whether required posix functions are disabled.
+     */
+    public static function disabledPosixFunctions()
+    {
+        return self::checkDisabledFunctions(self::$posixFunctions);
+    }
+
+    private static function checkDisabledFunctions(array $functions)
+    {
+        return \array_values(\array_intersect($functions, \array_map('strtolower', \array_map('trim', \explode(',', \ini_get('disable_functions'))))));
     }
 
     /**
@@ -95,8 +157,11 @@ public function beforeRun(Shell $shell)
         }
 
         // This is the child process. It's going to do all the work.
-        if (\function_exists('setproctitle')) {
-            setproctitle('psysh (loop)');
+        if (!@\cli_set_process_title('psysh (loop)')) {
+            // Fall back to `setproctitle` if that wasn't succesful.
+            if (\function_exists('setproctitle')) {
+                @\setproctitle('psysh (loop)');
+            }
         }
 
         // We won't be needing this one.
diff --git a/vendor/psy/psysh/src/ExecutionLoop/RunkitReloader.php b/vendor/psy/psysh/src/ExecutionLoop/RunkitReloader.php
index d80480b0af2eae43d7882f82d69ed1d55c3a21eb..de10aa0412a0dadbc3e166521ebed3077202d5e4 100644
--- a/vendor/psy/psysh/src/ExecutionLoop/RunkitReloader.php
+++ b/vendor/psy/psysh/src/ExecutionLoop/RunkitReloader.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/ExecutionLoopClosure.php b/vendor/psy/psysh/src/ExecutionLoopClosure.php
index 5b8238cf632364ac80f3eb5a9b09aaf3fc656380..0ee316fb70bc37e7570584432d6ca26632f4a29a 100644
--- a/vendor/psy/psysh/src/ExecutionLoopClosure.php
+++ b/vendor/psy/psysh/src/ExecutionLoopClosure.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -55,7 +55,6 @@ public function __construct(Shell $__psysh__)
                         $_ = eval($__psysh__->onExecute($__psysh__->flushCode() ?: ExecutionClosure::NOOP_INPUT));
                     } catch (\Throwable $_e) {
                         // Clean up on our way out.
-                        \restore_error_handler();
                         if (\ob_get_level() > 0) {
                             \ob_end_clean();
                         }
@@ -63,17 +62,16 @@ public function __construct(Shell $__psysh__)
                         throw $_e;
                     } catch (\Exception $_e) {
                         // Clean up on our way out.
-                        \restore_error_handler();
                         if (\ob_get_level() > 0) {
                             \ob_end_clean();
                         }
 
                         throw $_e;
+                    } finally {
+                        // Won't be needing this anymore
+                        \restore_error_handler();
                     }
 
-                    // Won't be needing this anymore
-                    \restore_error_handler();
-
                     // Flush stdout (write to shell output, plus save to magic variable)
                     \ob_end_flush();
 
diff --git a/vendor/psy/psysh/src/Formatter/CodeFormatter.php b/vendor/psy/psysh/src/Formatter/CodeFormatter.php
index 2ac37cc9da0fa46d15c27b7b7a8b81143a272b0d..03ddde47c68bd700fcf962f5bc784649c8ea8d6f 100644
--- a/vendor/psy/psysh/src/Formatter/CodeFormatter.php
+++ b/vendor/psy/psysh/src/Formatter/CodeFormatter.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -11,48 +11,298 @@
 
 namespace Psy\Formatter;
 
-use JakubOnderka\PhpConsoleHighlighter\Highlighter;
-use Psy\Configuration;
-use Psy\ConsoleColorFactory;
 use Psy\Exception\RuntimeException;
+use Symfony\Component\Console\Formatter\OutputFormatter;
 
 /**
  * A pretty-printer for code.
  */
-class CodeFormatter implements Formatter
+class CodeFormatter implements ReflectorFormatter
 {
+    const LINE_MARKER    = '  <urgent>></urgent> ';
+    const NO_LINE_MARKER = '    ';
+
+    const HIGHLIGHT_DEFAULT     = 'default';
+    const HIGHLIGHT_KEYWORD     = 'keyword';
+
+    const HIGHLIGHT_PUBLIC      = 'public';
+    const HIGHLIGHT_PROTECTED   = 'protected';
+    const HIGHLIGHT_PRIVATE     = 'private';
+
+    const HIGHLIGHT_CONST       = 'const';
+    const HIGHLIGHT_NUMBER      = 'number';
+    const HIGHLIGHT_STRING      = 'string';
+    const HIGHLIGHT_COMMENT     = 'comment';
+    const HIGHLIGHT_INLINE_HTML = 'inline_html';
+
+    private static $tokenMap = [
+        // Not highlighted
+        \T_OPEN_TAG           => self::HIGHLIGHT_DEFAULT,
+        \T_OPEN_TAG_WITH_ECHO => self::HIGHLIGHT_DEFAULT,
+        \T_CLOSE_TAG          => self::HIGHLIGHT_DEFAULT,
+        \T_STRING             => self::HIGHLIGHT_DEFAULT,
+        \T_VARIABLE           => self::HIGHLIGHT_DEFAULT,
+        \T_NS_SEPARATOR       => self::HIGHLIGHT_DEFAULT,
+
+        // Visibility
+        \T_PUBLIC    => self::HIGHLIGHT_PUBLIC,
+        \T_PROTECTED => self::HIGHLIGHT_PROTECTED,
+        \T_PRIVATE   => self::HIGHLIGHT_PRIVATE,
+
+        // Constants
+        \T_DIR      => self::HIGHLIGHT_CONST,
+        \T_FILE     => self::HIGHLIGHT_CONST,
+        \T_METHOD_C => self::HIGHLIGHT_CONST,
+        \T_NS_C     => self::HIGHLIGHT_CONST,
+        \T_LINE     => self::HIGHLIGHT_CONST,
+        \T_CLASS_C  => self::HIGHLIGHT_CONST,
+        \T_FUNC_C   => self::HIGHLIGHT_CONST,
+        \T_TRAIT_C  => self::HIGHLIGHT_CONST,
+
+        // Types
+        \T_DNUMBER                  => self::HIGHLIGHT_NUMBER,
+        \T_LNUMBER                  => self::HIGHLIGHT_NUMBER,
+        \T_ENCAPSED_AND_WHITESPACE  => self::HIGHLIGHT_STRING,
+        \T_CONSTANT_ENCAPSED_STRING => self::HIGHLIGHT_STRING,
+
+        // Comments
+        \T_COMMENT     => self::HIGHLIGHT_COMMENT,
+        \T_DOC_COMMENT => self::HIGHLIGHT_COMMENT,
+
+        // @todo something better here?
+        \T_INLINE_HTML => self::HIGHLIGHT_INLINE_HTML,
+    ];
+
     /**
-     * Format the code represented by $reflector.
+     * Format the code represented by $reflector for shell output.
      *
      * @param \Reflector  $reflector
-     * @param null|string $colorMode (default: null)
+     * @param string|null $colorMode (deprecated and ignored)
      *
      * @return string formatted code
      */
     public static function format(\Reflector $reflector, $colorMode = null)
     {
-        if (!self::isReflectable($reflector)) {
-            throw new RuntimeException('Source code unavailable');
+        if (self::isReflectable($reflector)) {
+            if ($code = @\file_get_contents($reflector->getFileName())) {
+                return self::formatCode($code, self::getStartLine($reflector), $reflector->getEndLine());
+            }
+        }
+
+        throw new RuntimeException('Source code unavailable');
+    }
+
+    /**
+     * Format code for shell output.
+     *
+     * Optionally, restrict by $startLine and $endLine line numbers, or pass $markLine to add a line marker.
+     *
+     * @param string   $code
+     * @param int      $startLine
+     * @param int|null $endLine
+     * @param int|null $markLine
+     *
+     * @return string formatted code
+     */
+    public static function formatCode($code, $startLine = 1, $endLine = null, $markLine = null)
+    {
+        $spans = self::tokenizeSpans($code);
+        $lines = self::splitLines($spans, $startLine, $endLine);
+        $lines = self::formatLines($lines);
+        $lines = self::numberLines($lines, $markLine);
+
+        return \implode('', \iterator_to_array($lines));
+    }
+
+    /**
+     * Get the start line for a given Reflector.
+     *
+     * Tries to incorporate doc comments if possible.
+     *
+     * This is typehinted as \Reflector but we've narrowed the input via self::isReflectable already.
+     *
+     * @param \ReflectionClass|\ReflectionFunctionAbstract $reflector
+     *
+     * @return int
+     */
+    private static function getStartLine(\Reflector $reflector)
+    {
+        $startLine = $reflector->getStartLine();
+
+        if ($docComment = $reflector->getDocComment()) {
+            $startLine -= \preg_match_all('/(\r\n?|\n)/', $docComment) + 1;
         }
 
-        $colorMode = $colorMode ?: Configuration::COLOR_MODE_AUTO;
+        return \max($startLine, 1);
+    }
+
+    /**
+     * Split code into highlight spans.
+     *
+     * Tokenize via \token_get_all, then map these tokens to internal highlight types, combining
+     * adjacent spans of the same highlight type.
+     *
+     * @todo consider switching \token_get_all() out for PHP-Parser-based formatting at some point.
+     *
+     * @param string $code
+     *
+     * @return \Generator [$spanType, $spanText] highlight spans
+     */
+    private static function tokenizeSpans($code)
+    {
+        $spanType = null;
+        $buffer   = '';
+
+        foreach (\token_get_all($code) as $token) {
+            $nextType = self::nextHighlightType($token, $spanType);
+            $spanType = $spanType ?: $nextType;
 
-        if ($fileName = $reflector->getFileName()) {
-            if (!\is_file($fileName)) {
-                throw new RuntimeException('Source code unavailable');
+            if ($spanType !== $nextType) {
+                yield [$spanType, $buffer];
+                $spanType = $nextType;
+                $buffer   = '';
             }
 
-            $file  = \file_get_contents($fileName);
-            $start = $reflector->getStartLine();
-            $end   = $reflector->getEndLine() - $start;
+            $buffer .= \is_array($token) ? $token[1] : $token;
+        }
 
-            $factory     = new ConsoleColorFactory($colorMode);
-            $colors      = $factory->getConsoleColor();
-            $highlighter = new Highlighter($colors);
+        if ($spanType !== null && $buffer !== '') {
+            yield [$spanType, $buffer];
+        }
+    }
+
+    /**
+     * Given a token and the current highlight span type, compute the next type.
+     *
+     * @param array|string $token       \token_get_all token
+     * @param string|null  $currentType
+     *
+     * @return string|null
+     */
+    private static function nextHighlightType($token, $currentType)
+    {
+        if ($token === '"') {
+            return self::HIGHLIGHT_STRING;
+        }
+
+        if (\is_array($token)) {
+            if ($token[0] === \T_WHITESPACE) {
+                return $currentType;
+            }
+
+            if (\array_key_exists($token[0], self::$tokenMap)) {
+                return self::$tokenMap[$token[0]];
+            }
+        }
+
+        return self::HIGHLIGHT_KEYWORD;
+    }
+
+    /**
+     * Group highlight spans into an array of lines.
+     *
+     * Optionally, restrict by start and end line numbers.
+     *
+     * @param \Generator $spans     as [$spanType, $spanText] pairs
+     * @param int        $startLine
+     * @param int|null   $endLine
+     *
+     * @return \Generator lines, each an array of [$spanType, $spanText] pairs
+     */
+    private static function splitLines(\Generator $spans, $startLine = 1, $endLine = null)
+    {
+        $lineNum = 1;
+        $buffer  = [];
+
+        foreach ($spans as list($spanType, $spanText)) {
+            foreach (\preg_split('/(\r\n?|\n)/', $spanText) as $index => $spanLine) {
+                if ($index > 0) {
+                    if ($lineNum >= $startLine) {
+                        yield $lineNum => $buffer;
+                    }
+
+                    $lineNum++;
+                    $buffer = [];
+
+                    if ($endLine !== null && $lineNum > $endLine) {
+                        return;
+                    }
+                }
+
+                if ($spanLine !== '') {
+                    $buffer[] = [$spanType, $spanLine];
+                }
+            }
+        }
+
+        if (!empty($buffer)) {
+            yield $lineNum => $buffer;
+        }
+    }
+
+    /**
+     * Format lines of highlight spans for shell output.
+     *
+     * @param \Generator $spanLines lines, each an array of [$spanType, $spanText] pairs
+     *
+     * @return \Generator Formatted lines
+     */
+    private static function formatLines(\Generator $spanLines)
+    {
+        foreach ($spanLines as $lineNum => $spanLine) {
+            $line = '';
+
+            foreach ($spanLine as list($spanType, $spanText)) {
+                if ($spanType === self::HIGHLIGHT_DEFAULT) {
+                    $line .= OutputFormatter::escape($spanText);
+                } else {
+                    $line .= \sprintf('<%s>%s</%s>', $spanType, OutputFormatter::escape($spanText), $spanType);
+                }
+            }
+
+            yield $lineNum => $line . \PHP_EOL;
+        }
+    }
+
+    /**
+     * Prepend line numbers to formatted lines.
+     *
+     * Lines must be in an associative array with the correct keys in order to be numbered properly.
+     *
+     * Optionally, pass $markLine to add a line marker.
+     *
+     * @param \Generator $lines    Formatted lines
+     * @param int|null   $markLine
+     *
+     * @return \Generator Numbered, formatted lines
+     */
+    private static function numberLines(\Generator $lines, $markLine = null)
+    {
+        $lines = \iterator_to_array($lines);
+
+        // Figure out how much space to reserve for line numbers.
+        \end($lines);
+        $pad = \strlen(\key($lines));
+
+        // If $markLine is before or after our line range, don't bother reserving space for the marker.
+        if ($markLine !== null) {
+            if ($markLine > \key($lines)) {
+                $markLine = null;
+            }
+
+            \reset($lines);
+            if ($markLine < \key($lines)) {
+                $markLine = null;
+            }
+        }
+
+        foreach ($lines as $lineNum => $line) {
+            $mark = '';
+            if ($markLine !== null) {
+                $mark = ($markLine === $lineNum) ? self::LINE_MARKER : self::NO_LINE_MARKER;
+            }
 
-            return $highlighter->getCodeSnippet($file, $start, 0, $end);
-        } else {
-            throw new RuntimeException('Source code unavailable');
+            yield \sprintf("%s<aside>%${pad}s</aside>: %s", $mark, $lineNum, $line);
         }
     }
 
@@ -65,7 +315,6 @@ public static function format(\Reflector $reflector, $colorMode = null)
      */
     private static function isReflectable(\Reflector $reflector)
     {
-        return $reflector instanceof \ReflectionClass ||
-            $reflector instanceof \ReflectionFunctionAbstract;
+        return ($reflector instanceof \ReflectionClass || $reflector instanceof \ReflectionFunctionAbstract) && \is_file($reflector->getFileName());
     }
 }
diff --git a/vendor/psy/psysh/src/Formatter/DocblockFormatter.php b/vendor/psy/psysh/src/Formatter/DocblockFormatter.php
index 39ea60e54a9699b1defe129edd7bb795f066a924..3ea9f6dd28958c0c674dcd8cb3226265a75f67a4 100644
--- a/vendor/psy/psysh/src/Formatter/DocblockFormatter.php
+++ b/vendor/psy/psysh/src/Formatter/DocblockFormatter.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -17,7 +17,7 @@
 /**
  * A pretty-printer for docblocks.
  */
-class DocblockFormatter implements Formatter
+class DocblockFormatter implements ReflectorFormatter
 {
     private static $vectorParamTemplates = [
         'type' => 'info',
@@ -89,7 +89,13 @@ private static function formatVector(array $vector, array $lines)
         $template = \implode(' ', $template);
 
         return \implode("\n", \array_map(function ($line) use ($template) {
-            $escaped = \array_map(['Symfony\Component\Console\Formatter\OutputFormatter', 'escape'], $line);
+            $escaped = \array_map(function ($l) {
+                if ($l === null) {
+                    return '';
+                }
+
+                return OutputFormatter::escape($l);
+            }, $line);
 
             return \rtrim(\vsprintf($template, $escaped));
         }, $lines));
diff --git a/vendor/psy/psysh/src/Formatter/Formatter.php b/vendor/psy/psysh/src/Formatter/Formatter.php
index 08a8e4c16d9ac661951f9e753035c9fe83a4ddc4..8800c18663dfb84e5efc663e6a18271280bc73da 100644
--- a/vendor/psy/psysh/src/Formatter/Formatter.php
+++ b/vendor/psy/psysh/src/Formatter/Formatter.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -13,13 +13,9 @@
 
 /**
  * Formatter interface.
+ *
+ * @deprecated this interface only exists for backwards compatibility. Use ReflectorFormatter.
  */
-interface Formatter
+interface Formatter extends ReflectorFormatter
 {
-    /**
-     * @param \Reflector $reflector
-     *
-     * @return string
-     */
-    public static function format(\Reflector $reflector);
 }
diff --git a/vendor/psy/psysh/src/Formatter/ReflectorFormatter.php b/vendor/psy/psysh/src/Formatter/ReflectorFormatter.php
new file mode 100644
index 0000000000000000000000000000000000000000..cf2f25340ba375e587fb8c111dcb1fd48a05e3e9
--- /dev/null
+++ b/vendor/psy/psysh/src/Formatter/ReflectorFormatter.php
@@ -0,0 +1,25 @@
+<?php
+
+/*
+ * This file is part of Psy Shell.
+ *
+ * (c) 2012-2020 Justin Hileman
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Psy\Formatter;
+
+/**
+ * Reflector formatter interface.
+ */
+interface ReflectorFormatter
+{
+    /**
+     * @param \Reflector $reflector
+     *
+     * @return string
+     */
+    public static function format(\Reflector $reflector);
+}
diff --git a/vendor/psy/psysh/src/Formatter/SignatureFormatter.php b/vendor/psy/psysh/src/Formatter/SignatureFormatter.php
index ec8725d9ff6fa3d70aad203286fd7aa1b94def93..aefa9dae308a9f394307f4beeca5832cf1cdf2ce 100644
--- a/vendor/psy/psysh/src/Formatter/SignatureFormatter.php
+++ b/vendor/psy/psysh/src/Formatter/SignatureFormatter.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -20,7 +20,7 @@
 /**
  * An abstract representation of a function, class or property signature.
  */
-class SignatureFormatter implements Formatter
+class SignatureFormatter implements ReflectorFormatter
 {
     /**
      * Format a signature for the given reflector.
@@ -85,7 +85,7 @@ private static function formatModifiers(\Reflector $reflector)
             // For some reason, PHP 5.x returns `abstract public` modifiers for
             // traits. Let's just ignore that business entirely.
             if (\version_compare(PHP_VERSION, '7.0.0', '<')) {
-                return [];
+                return '';
             }
         }
 
@@ -126,7 +126,7 @@ private static function formatClass(\ReflectionClass $reflector)
         if (!empty($interfaces)) {
             \sort($interfaces);
 
-            $chunks[] = 'implements';
+            $chunks[] = $reflector->isInterface() ? 'extends' : 'implements';
             $chunks[] = \implode(', ', \array_map(function ($name) {
                 return \sprintf('<class>%s</class>', $name);
             }, $interfaces));
@@ -287,7 +287,7 @@ private static function formatFunctionParams(\ReflectionFunctionAbstract $reflec
                 } else {
                     $value     = $param->getDefaultValue();
                     $typeStyle = self::getTypeStyle($value);
-                    $value     = \is_array($value) ? 'array()' : \is_null($value) ? 'null' : \var_export($value, true);
+                    $value     = \is_array($value) ? '[]' : (\is_null($value) ? 'null' : \var_export($value, true));
                 }
                 $default = \sprintf(' = <%s>%s</%s>', $typeStyle, OutputFormatter::escape($value), $typeStyle);
             } else {
diff --git a/vendor/psy/psysh/src/Formatter/TraceFormatter.php b/vendor/psy/psysh/src/Formatter/TraceFormatter.php
new file mode 100644
index 0000000000000000000000000000000000000000..e815ab7d7776244aa2057261746c880262aa08b8
--- /dev/null
+++ b/vendor/psy/psysh/src/Formatter/TraceFormatter.php
@@ -0,0 +1,116 @@
+<?php
+
+/*
+ * This file is part of Psy Shell.
+ *
+ * (c) 2012-2020 Justin Hileman
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Psy\Formatter;
+
+use Psy\Input\FilterOptions;
+use Symfony\Component\Console\Formatter\OutputFormatter;
+
+/**
+ * Output formatter for exception traces.
+ */
+class TraceFormatter
+{
+    /**
+     * Format the trace of the given exception.
+     *
+     * @throws \InvalidArgumentException if passed a non-Throwable value
+     *
+     * @todo type hint $throwable when we drop support for PHP 5.x
+     *
+     * @param \Throwable    $throwable  The error or exception with a backtrace
+     * @param FilterOptions $filter     (default: null)
+     * @param int           $count      (default: PHP_INT_MAX)
+     * @param bool          $includePsy (default: true)
+     *
+     * @return string[] Formatted stacktrace lines
+     */
+    public static function formatTrace($throwable, FilterOptions $filter = null, $count = null, $includePsy = true)
+    {
+        if (!($throwable instanceof \Throwable || $throwable instanceof \Exception)) {
+            throw new \InvalidArgumentException('Unable to format non-throwable value');
+        }
+
+        if ($cwd = \getcwd()) {
+            $cwd = \rtrim($cwd, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR;
+        }
+
+        if ($count === null) {
+            $count = PHP_INT_MAX;
+        }
+
+        $lines = [];
+
+        $trace = $throwable->getTrace();
+        \array_unshift($trace, [
+            'function' => '',
+            'file'     => $throwable->getFile() !== null ? $throwable->getFile() : 'n/a',
+            'line'     => $throwable->getLine() !== null ? $throwable->getLine() : 'n/a',
+            'args'     => [],
+        ]);
+
+        if (!$includePsy) {
+            for ($i = \count($trace) - 1; $i >= 0; $i--) {
+                $thing = isset($trace[$i]['class']) ? $trace[$i]['class'] : $trace[$i]['function'];
+                if (\preg_match('/\\\\?Psy\\\\/', $thing)) {
+                    $trace = \array_slice($trace, $i + 1);
+                    break;
+                }
+            }
+        }
+
+        for ($i = 0, $count = \min($count, \count($trace)); $i < $count; $i++) {
+            $class    = isset($trace[$i]['class']) ? $trace[$i]['class'] : '';
+            $type     = isset($trace[$i]['type']) ? $trace[$i]['type'] : '';
+            $function = $trace[$i]['function'];
+            $file     = isset($trace[$i]['file']) ? self::replaceCwd($cwd, $trace[$i]['file']) : 'n/a';
+            $line     = isset($trace[$i]['line']) ? $trace[$i]['line'] : 'n/a';
+
+            // Leave execution loop out of the `eval()'d code` lines
+            if (\preg_match("#/src/Execution(?:Loop)?Closure.php\(\d+\) : eval\(\)'d code$#", \str_replace('\\', '/', $file))) {
+                $file = "eval()'d code";
+            }
+
+            // Skip any lines that don't match our filter options
+            if ($filter !== null && !$filter->match(\sprintf('%s%s%s() at %s:%s', $class, $type, $function, $file, $line))) {
+                continue;
+            }
+
+            $lines[] = \sprintf(
+                ' <class>%s</class>%s%s() at <info>%s:%s</info>',
+                OutputFormatter::escape($class),
+                OutputFormatter::escape($type),
+                OutputFormatter::escape($function),
+                OutputFormatter::escape($file),
+                OutputFormatter::escape($line)
+            );
+        }
+
+        return $lines;
+    }
+
+    /**
+     * Replace the given directory from the start of a filepath.
+     *
+     * @param string $cwd
+     * @param string $file
+     *
+     * @return string
+     */
+    private static function replaceCwd($cwd, $file)
+    {
+        if ($cwd === false) {
+            return $file;
+        } else {
+            return \preg_replace('/^' . \preg_quote($cwd, '/') . '/', '', $file);
+        }
+    }
+}
diff --git a/vendor/psy/psysh/src/Input/CodeArgument.php b/vendor/psy/psysh/src/Input/CodeArgument.php
index cfeb9e16d28dfae12e5dfa99d2b1867cf39399ff..a2189af7fe4408d5ef8bb7448a345aad9f5f5228 100644
--- a/vendor/psy/psysh/src/Input/CodeArgument.php
+++ b/vendor/psy/psysh/src/Input/CodeArgument.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/Input/FilterOptions.php b/vendor/psy/psysh/src/Input/FilterOptions.php
index d77a04fb70b3c5834f9081f6209b0f9742b674c9..53e9b3e5caee38ae54881493bb802ddcd0595655 100644
--- a/vendor/psy/psysh/src/Input/FilterOptions.php
+++ b/vendor/psy/psysh/src/Input/FilterOptions.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -97,9 +97,9 @@ public function match($string, array &$matches = null)
     /**
      * Validate that grep, invert and insensitive input options are consistent.
      *
-     * @param InputInterface $input
+     * @throws RuntimeException if input is invalid
      *
-     * @return bool
+     * @param InputInterface $input
      */
     private function validateInput(InputInterface $input)
     {
@@ -127,19 +127,19 @@ private function stringIsRegex($string)
     /**
      * Validate that $pattern is a valid regular expression.
      *
-     * @param string $pattern
+     * @throws RuntimeException if pattern is invalid
      *
-     * @return bool
+     * @param string $pattern
      */
     private function validateRegex($pattern)
     {
-        \set_error_handler(['Psy\Exception\ErrorException', 'throwException']);
+        \set_error_handler([ErrorException::class, 'throwException']);
         try {
             \preg_match($pattern, '');
         } catch (ErrorException $e) {
-            \restore_error_handler();
             throw new RuntimeException(\str_replace('preg_match(): ', 'Invalid regular expression: ', $e->getRawMessage()));
+        } finally {
+            \restore_error_handler();
         }
-        \restore_error_handler();
     }
 }
diff --git a/vendor/psy/psysh/src/Input/ShellInput.php b/vendor/psy/psysh/src/Input/ShellInput.php
index 8675f4d12d05332ac65f6504b92efe1579ed7147..49762d89c4c17cbb2a630d856e9c9132c33672ed 100644
--- a/vendor/psy/psysh/src/Input/ShellInput.php
+++ b/vendor/psy/psysh/src/Input/ShellInput.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -87,18 +87,18 @@ private function tokenize($input)
         $length = \strlen($input);
         $cursor = 0;
         while ($cursor < $length) {
-            if (\preg_match('/\s+/A', $input, $match, null, $cursor)) {
-            } elseif (\preg_match('/([^="\'\s]+?)(=?)(' . StringInput::REGEX_QUOTED_STRING . '+)/A', $input, $match, null, $cursor)) {
+            if (\preg_match('/\s+/A', $input, $match, 0, $cursor)) {
+            } elseif (\preg_match('/([^="\'\s]+?)(=?)(' . StringInput::REGEX_QUOTED_STRING . '+)/A', $input, $match, 0, $cursor)) {
                 $tokens[] = [
                     $match[1] . $match[2] . \stripcslashes(\str_replace(['"\'', '\'"', '\'\'', '""'], '', \substr($match[3], 1, \strlen($match[3]) - 2))),
                     \stripcslashes(\substr($input, $cursor)),
                 ];
-            } elseif (\preg_match('/' . StringInput::REGEX_QUOTED_STRING . '/A', $input, $match, null, $cursor)) {
+            } elseif (\preg_match('/' . StringInput::REGEX_QUOTED_STRING . '/A', $input, $match, 0, $cursor)) {
                 $tokens[] = [
                     \stripcslashes(\substr($match[0], 1, \strlen($match[0]) - 2)),
                     \stripcslashes(\substr($input, $cursor)),
                 ];
-            } elseif (\preg_match('/' . StringInput::REGEX_STRING . '/A', $input, $match, null, $cursor)) {
+            } elseif (\preg_match('/' . StringInput::REGEX_STRING . '/A', $input, $match, 0, $cursor)) {
                 $tokens[] = [
                     \stripcslashes($match[1]),
                     \stripcslashes(\substr($input, $cursor)),
diff --git a/vendor/psy/psysh/src/Input/SilentInput.php b/vendor/psy/psysh/src/Input/SilentInput.php
index c6f234ba9dc68e6b70f9bac8ce2f5c43b6c517c7..b4804c611a9c6536d9f18426d6af26b9a76fb872 100644
--- a/vendor/psy/psysh/src/Input/SilentInput.php
+++ b/vendor/psy/psysh/src/Input/SilentInput.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/Output/OutputPager.php b/vendor/psy/psysh/src/Output/OutputPager.php
index a2f12aead5983e2580b5482ffbc36cc887ed595d..b9dcdf82dbe221137ef64cad771d542b79e06913 100644
--- a/vendor/psy/psysh/src/Output/OutputPager.php
+++ b/vendor/psy/psysh/src/Output/OutputPager.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/Output/PassthruPager.php b/vendor/psy/psysh/src/Output/PassthruPager.php
index 2dcb74398e0e0832c6f56d9a4b97a93f4ef1ba8b..3eaa9cf78c7dacf490ae00ba50bbae562cd0549e 100644
--- a/vendor/psy/psysh/src/Output/PassthruPager.php
+++ b/vendor/psy/psysh/src/Output/PassthruPager.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/Output/ProcOutputPager.php b/vendor/psy/psysh/src/Output/ProcOutputPager.php
index a047b1c3f89958941c641a0a3ec7bfc8470393b1..a6769890c8f06bf437cc1178478bc457b7c1f674 100644
--- a/vendor/psy/psysh/src/Output/ProcOutputPager.php
+++ b/vendor/psy/psysh/src/Output/ProcOutputPager.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -77,7 +77,8 @@ public function close()
             }
         }
 
-        unset($this->pipe, $this->proc);
+        $this->pipe = null;
+        $this->proc = null;
     }
 
     /**
diff --git a/vendor/psy/psysh/src/Output/ShellOutput.php b/vendor/psy/psysh/src/Output/ShellOutput.php
index 5881a5c20510138ea3a6473ac82487d98b4f3cef..485cef8d3c8292f897109a046527642fcae0b61b 100644
--- a/vendor/psy/psysh/src/Output/ShellOutput.php
+++ b/vendor/psy/psysh/src/Output/ShellOutput.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -11,6 +11,7 @@
 
 namespace Psy\Output;
 
+use Symfony\Component\Console\Formatter\OutputFormatter;
 use Symfony\Component\Console\Formatter\OutputFormatterInterface;
 use Symfony\Component\Console\Formatter\OutputFormatterStyle;
 use Symfony\Component\Console\Output\ConsoleOutput;
@@ -28,10 +29,10 @@ class ShellOutput extends ConsoleOutput
     /**
      * Construct a ShellOutput instance.
      *
-     * @param mixed                    $verbosity (default: self::VERBOSITY_NORMAL)
-     * @param bool                     $decorated (default: null)
-     * @param OutputFormatterInterface $formatter (default: null)
-     * @param null|string|OutputPager  $pager     (default: null)
+     * @param mixed                         $verbosity (default: self::VERBOSITY_NORMAL)
+     * @param bool|null                     $decorated (default: null)
+     * @param OutputFormatterInterface|null $formatter (default: null)
+     * @param string|OutputPager|null       $pager     (default: null)
      */
     public function __construct($verbosity = self::VERBOSITY_NORMAL, $decorated = null, OutputFormatterInterface $formatter = null, $pager = null)
     {
@@ -126,7 +127,7 @@ public function write($messages, $newline = false, $type = 0)
             $template = $this->isDecorated() ? "<aside>%{$pad}s</aside>: %s" : "%{$pad}s: %s";
 
             if ($type & self::OUTPUT_RAW) {
-                $messages = \array_map(['Symfony\Component\Console\Formatter\OutputFormatter', 'escape'], $messages);
+                $messages = \array_map([OutputFormatter::class, 'escape'], $messages);
             }
 
             foreach ($messages as $i => $line) {
@@ -175,7 +176,7 @@ private function initFormatters()
         $formatter = $this->getFormatter();
 
         $formatter->setStyle('warning', new OutputFormatterStyle('black', 'yellow'));
-        $formatter->setStyle('error',   new OutputFormatterStyle('black', 'red', ['bold']));
+        $formatter->setStyle('error',   new OutputFormatterStyle('white', 'red', ['bold']));
         $formatter->setStyle('aside',   new OutputFormatterStyle('blue'));
         $formatter->setStyle('strong',  new OutputFormatterStyle(null, null, ['bold']));
         $formatter->setStyle('return',  new OutputFormatterStyle('cyan'));
@@ -200,5 +201,8 @@ private function initFormatters()
         $formatter->setStyle('comment',  new OutputFormatterStyle('blue'));
         $formatter->setStyle('object',   new OutputFormatterStyle('blue'));
         $formatter->setStyle('resource', new OutputFormatterStyle('yellow'));
+
+        // Code-specific formatting
+        $formatter->setStyle('inline_html', new OutputFormatterStyle('cyan'));
     }
 }
diff --git a/vendor/psy/psysh/src/ParserFactory.php b/vendor/psy/psysh/src/ParserFactory.php
index 263da2022b7586c06dabfc90c1739854f2ad941d..992ff3790ac1b6d8cb5bdc25b188d49925505707 100644
--- a/vendor/psy/psysh/src/ParserFactory.php
+++ b/vendor/psy/psysh/src/ParserFactory.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -44,7 +44,7 @@ public static function getPossibleKinds()
      */
     public function hasKindsSupport()
     {
-        return \class_exists('PhpParser\ParserFactory');
+        return \class_exists(OriginalParserFactory::class);
     }
 
     /**
@@ -77,7 +77,7 @@ public function createParser($kind = null)
                 throw new \InvalidArgumentException('Unknown parser kind');
             }
 
-            $parser = $originalFactory->create(\constant('PhpParser\ParserFactory::' . $kind));
+            $parser = $originalFactory->create(\constant(OriginalParserFactory::class . '::' . $kind));
         } else {
             if ($kind !== null) {
                 throw new \InvalidArgumentException('Install PHP Parser v2.x to specify parser kind');
diff --git a/vendor/psy/psysh/src/Readline/GNUReadline.php b/vendor/psy/psysh/src/Readline/GNUReadline.php
index 1cec3c63a0404a40089894353b8a6c8d0c829616..ef2ea724d87d82d3382d891a6ea2e6783f16f71f 100644
--- a/vendor/psy/psysh/src/Readline/GNUReadline.php
+++ b/vendor/psy/psysh/src/Readline/GNUReadline.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -51,6 +51,11 @@ public function __construct($historyFile = null, $historySize = 0, $eraseDups =
         $this->historyFile = ($historyFile !== null) ? $historyFile : false;
         $this->historySize = $historySize;
         $this->eraseDups   = $eraseDups;
+
+        // HHVM errors on this, so HHVM doesn't get a readline_name.
+        if (!\defined('HHVM_VERSION')) {
+            \readline_info('readline_name', 'psysh');
+        }
     }
 
     /**
diff --git a/vendor/psy/psysh/src/Readline/HoaConsole.php b/vendor/psy/psysh/src/Readline/HoaConsole.php
index a49b5928502d4cd8d52d734dca1e648f731f51e5..bd4d9d541bfef0c2e0d66c5832897ba5fe0a0b62 100644
--- a/vendor/psy/psysh/src/Readline/HoaConsole.php
+++ b/vendor/psy/psysh/src/Readline/HoaConsole.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -11,6 +11,8 @@
 
 namespace Psy\Readline;
 
+use Hoa\Console\Console;
+use Hoa\Console\Cursor;
 use Hoa\Console\Readline\Readline as HoaReadline;
 use Psy\Exception\BreakException;
 
@@ -22,17 +24,25 @@ class HoaConsole implements Readline
     /** @var HoaReadline */
     private $hoaReadline;
 
+    /** @var string|null */
+    private $lastPrompt;
+
     /**
      * @return bool
      */
     public static function isSupported()
     {
-        return \class_exists('\Hoa\Console\Console', true);
+        return \class_exists(Console::class, true);
     }
 
     public function __construct()
     {
         $this->hoaReadline = new HoaReadline();
+        $this->hoaReadline->addMapping('\C-l', function () {
+            $this->redisplay();
+
+            return HoaReadline::STATE_NO_ECHO;
+        });
     }
 
     /**
@@ -86,6 +96,8 @@ public function readHistory()
      */
     public function readline($prompt = null)
     {
+        $this->lastPrompt = $prompt;
+
         return $this->hoaReadline->readLine($prompt);
     }
 
@@ -94,7 +106,9 @@ public function readline($prompt = null)
      */
     public function redisplay()
     {
-        // noop
+        $currentLine = $this->hoaReadline->getLine();
+        Cursor::clear('all');
+        echo $this->lastPrompt, $currentLine;
     }
 
     /**
diff --git a/vendor/psy/psysh/src/Readline/Libedit.php b/vendor/psy/psysh/src/Readline/Libedit.php
index d1dc002fd62f8506f1bf315ec4e7f8ee23724236..bec4cfe51e0cf068d6130b77a8944050141d598b 100644
--- a/vendor/psy/psysh/src/Readline/Libedit.php
+++ b/vendor/psy/psysh/src/Readline/Libedit.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -22,6 +22,8 @@
  */
 class Libedit extends GNUReadline
 {
+    private $hasWarnedOwnership = false;
+
     /**
      * Let's emulate GNU Readline by manually reading and parsing the history file!
      *
@@ -56,6 +58,28 @@ public function listHistory()
         return \array_values(\array_filter($history));
     }
 
+    /**
+     * {@inheritdoc}
+     */
+    public function writeHistory()
+    {
+        $res = parent::writeHistory();
+
+        // Libedit apparently refuses to save history if the history file is not
+        // owned by the user, even if it is writable. Warn when this happens.
+        //
+        // See https://github.com/bobthecow/psysh/issues/552
+        if ($res === false && !$this->hasWarnedOwnership) {
+            if (\is_file($this->historyFile) && \is_writable($this->historyFile)) {
+                $this->hasWarnedOwnership = true;
+                $msg = \sprintf('Error writing history file, check file ownership: %s', $this->historyFile);
+                \trigger_error($msg, E_USER_NOTICE);
+            }
+        }
+
+        return $res;
+    }
+
     /**
      * From GNUReadline (readline/histfile.c & readline/histexpand.c):
      * lines starting with "\0" are comments or timestamps;
diff --git a/vendor/psy/psysh/src/Readline/Readline.php b/vendor/psy/psysh/src/Readline/Readline.php
index 6d0cb6e6b9df595ff453921f08e4db492c61b465..7e404dccc97dc04162fe0aaf01001f558f35550c 100644
--- a/vendor/psy/psysh/src/Readline/Readline.php
+++ b/vendor/psy/psysh/src/Readline/Readline.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -56,7 +56,7 @@ public function readHistory();
     /**
      * Read a single line of input from the user.
      *
-     * @param null|string $prompt
+     * @param string|null $prompt
      *
      * @return false|string
      */
diff --git a/vendor/psy/psysh/src/Readline/Transient.php b/vendor/psy/psysh/src/Readline/Transient.php
index 6623bd9818f31a94918072c465f3cd3b4c83b058..c3f3433aebce029e571fe9c6d0487783cc31e7fe 100644
--- a/vendor/psy/psysh/src/Readline/Transient.php
+++ b/vendor/psy/psysh/src/Readline/Transient.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/Reflection/ReflectionClassConstant.php b/vendor/psy/psysh/src/Reflection/ReflectionClassConstant.php
index 019ad21da8c512ff64bb0916508bd9bf95e3ed9e..4d27a1820be08a1f5c4e035f3e1595419f674acc 100644
--- a/vendor/psy/psysh/src/Reflection/ReflectionClassConstant.php
+++ b/vendor/psy/psysh/src/Reflection/ReflectionClassConstant.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -52,7 +52,7 @@ public function __construct($class, $name)
      * @param string        $name
      * @param bool          $return pass true to return the export, as opposed to emitting it
      *
-     * @return null|string
+     * @return string|null
      */
     public static function export($class, $name, $return = false)
     {
@@ -219,7 +219,7 @@ public function getEndLine()
      */
     public static function create($class, $name)
     {
-        if (\class_exists('\\ReflectionClassConstant')) {
+        if (\class_exists(\ReflectionClassConstant::class)) {
             return new \ReflectionClassConstant($class, $name);
         }
 
diff --git a/vendor/psy/psysh/src/Reflection/ReflectionConstant.php b/vendor/psy/psysh/src/Reflection/ReflectionConstant.php
index a813fc5736330445e38ba8d8169c4db502b71a3c..139b920a7d745812d65e365e8119e23a18758392 100644
--- a/vendor/psy/psysh/src/Reflection/ReflectionConstant.php
+++ b/vendor/psy/psysh/src/Reflection/ReflectionConstant.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/Reflection/ReflectionConstant_.php b/vendor/psy/psysh/src/Reflection/ReflectionConstant_.php
index b355e350912e9e2547936a8308fdfef5b5ca8b80..c24e7f74e9002379d69bbf22fdaae969a2a1f0e1 100644
--- a/vendor/psy/psysh/src/Reflection/ReflectionConstant_.php
+++ b/vendor/psy/psysh/src/Reflection/ReflectionConstant_.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -61,7 +61,7 @@ public function __construct($name)
      * @param string $name
      * @param bool   $return pass true to return the export, as opposed to emitting it
      *
-     * @return null|string
+     * @return string|null
      */
     public static function export($name, $return = false)
     {
diff --git a/vendor/psy/psysh/src/Reflection/ReflectionLanguageConstruct.php b/vendor/psy/psysh/src/Reflection/ReflectionLanguageConstruct.php
index 9b8eefc179856544dcd4760e43a3809e27ff9e12..3de301adf31a9e1fb89465e09a32aa574b9e50b2 100644
--- a/vendor/psy/psysh/src/Reflection/ReflectionLanguageConstruct.php
+++ b/vendor/psy/psysh/src/Reflection/ReflectionLanguageConstruct.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/Reflection/ReflectionLanguageConstructParameter.php b/vendor/psy/psysh/src/Reflection/ReflectionLanguageConstructParameter.php
index 9161aa78b52a1bc9afd7a3d99d64649273e2011b..b1fcba814a7614545461ccc47490c5c720873e6e 100644
--- a/vendor/psy/psysh/src/Reflection/ReflectionLanguageConstructParameter.php
+++ b/vendor/psy/psysh/src/Reflection/ReflectionLanguageConstructParameter.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/Reflection/ReflectionNamespace.php b/vendor/psy/psysh/src/Reflection/ReflectionNamespace.php
new file mode 100644
index 0000000000000000000000000000000000000000..f50a322a845daca543f59a40b499fa35d7e6e145
--- /dev/null
+++ b/vendor/psy/psysh/src/Reflection/ReflectionNamespace.php
@@ -0,0 +1,60 @@
+<?php
+
+/*
+ * This file is part of Psy Shell.
+ *
+ * (c) 2012-2020 Justin Hileman
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Psy\Reflection;
+
+/**
+ * A fake Reflector for namespaces.
+ */
+class ReflectionNamespace implements \Reflector
+{
+    private $name;
+
+    /**
+     * Construct a ReflectionNamespace object.
+     *
+     * @param string $name
+     */
+    public function __construct($name)
+    {
+        $this->name = $name;
+    }
+
+    /**
+     * Gets the constant name.
+     *
+     * @return string
+     */
+    public function getName()
+    {
+        return $this->name;
+    }
+
+    /**
+     * This can't (and shouldn't) do anything :).
+     *
+     * @throws \RuntimeException
+     */
+    public static function export($name)
+    {
+        throw new \RuntimeException('Not yet implemented because it\'s unclear what I should do here :)');
+    }
+
+    /**
+     * To string.
+     *
+     * @return string
+     */
+    public function __toString()
+    {
+        return $this->getName();
+    }
+}
diff --git a/vendor/psy/psysh/src/Shell.php b/vendor/psy/psysh/src/Shell.php
index 7a0fbac28a88bddab3e6b05c54bdfec51bcc2cba..c2e9f307d6b388f9926a4f005052c4b4cfda5d0e 100644
--- a/vendor/psy/psysh/src/Shell.php
+++ b/vendor/psy/psysh/src/Shell.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -19,20 +19,21 @@
 use Psy\Exception\TypeErrorException;
 use Psy\ExecutionLoop\ProcessForker;
 use Psy\ExecutionLoop\RunkitReloader;
+use Psy\Formatter\TraceFormatter;
 use Psy\Input\ShellInput;
 use Psy\Input\SilentInput;
-use Psy\Output\ShellOutput;
 use Psy\TabCompletion\Matcher;
 use Psy\VarDumper\PresenterAware;
 use Symfony\Component\Console\Application;
 use Symfony\Component\Console\Command\Command as BaseCommand;
 use Symfony\Component\Console\Formatter\OutputFormatter;
-use Symfony\Component\Console\Input\ArgvInput;
+use Symfony\Component\Console\Input\ArrayInput;
 use Symfony\Component\Console\Input\InputArgument;
 use Symfony\Component\Console\Input\InputDefinition;
 use Symfony\Component\Console\Input\InputInterface;
 use Symfony\Component\Console\Input\InputOption;
 use Symfony\Component\Console\Input\StringInput;
+use Symfony\Component\Console\Output\ConsoleOutput;
 use Symfony\Component\Console\Output\OutputInterface;
 
 /**
@@ -47,7 +48,7 @@
  */
 class Shell extends Application
 {
-    const VERSION = 'v0.9.9';
+    const VERSION = 'v0.10.4';
 
     const PROMPT      = '>>> ';
     const BUFF_PROMPT = '... ';
@@ -57,6 +58,7 @@ class Shell extends Application
     private $config;
     private $cleaner;
     private $output;
+    private $originalVerbosity;
     private $readline;
     private $inputBuffer;
     private $code;
@@ -66,9 +68,7 @@ class Shell extends Application
     private $stdoutBuffer;
     private $context;
     private $includes;
-    private $loop;
     private $outputWantsNewline = false;
-    private $prompt;
     private $loopListeners;
     private $autoCompleter;
     private $matchers = [];
@@ -78,13 +78,12 @@ class Shell extends Application
     /**
      * Create a new Psy Shell.
      *
-     * @param Configuration $config (default: null)
+     * @param Configuration|null $config (default: null)
      */
     public function __construct(Configuration $config = null)
     {
         $this->config        = $config ?: new Configuration();
         $this->cleaner       = $this->config->getCodeCleaner();
-        $this->loop          = new ExecutionLoop();
         $this->context       = new Context();
         $this->includes      = [];
         $this->readline      = $this->config->getReadline();
@@ -119,7 +118,7 @@ public static function isIncluded(array $trace)
      * @see Psy\debug
      * @deprecated will be removed in 1.0. Use \Psy\debug instead
      *
-     * @param array         $vars   Scope variables from the calling context (default: array())
+     * @param array         $vars   Scope variables from the calling context (default: [])
      * @param object|string $bindTo Bound object ($this) or class (self) value for the shell
      *
      * @return array Scope variables from the debugger session
@@ -188,9 +187,9 @@ protected function getDefaultCommands()
             new Command\ListCommand(),
             new Command\DumpCommand(),
             new Command\DocCommand(),
-            new Command\ShowCommand($this->config->colorMode()),
-            new Command\WtfCommand($this->config->colorMode()),
-            new Command\WhereamiCommand($this->config->colorMode()),
+            new Command\ShowCommand(),
+            new Command\WtfCommand(),
+            new Command\WhereamiCommand(),
             new Command\ThrowUpCommand(),
             new Command\TimeitCommand(),
             new Command\TraceCommand(),
@@ -290,28 +289,29 @@ public function addTabCompletionMatchers(array $matchers)
     public function setOutput(OutputInterface $output)
     {
         $this->output = $output;
+        $this->originalVerbosity = $output->getVerbosity();
     }
 
     /**
-     * Runs the current application.
+     * Runs PsySH.
      *
-     * @param InputInterface  $input  An Input instance
-     * @param OutputInterface $output An Output instance
+     * @param InputInterface|null  $input  An Input instance
+     * @param OutputInterface|null $output An Output instance
      *
      * @return int 0 if everything went fine, or an error code
      */
     public function run(InputInterface $input = null, OutputInterface $output = null)
     {
-        $this->initializeTabCompletion();
-
-        if ($input === null && !isset($_SERVER['argv'])) {
-            $input = new ArgvInput([]);
-        }
+        // We'll just ignore the input passed in, and set up our own!
+        $input = new ArrayInput([]);
 
         if ($output === null) {
             $output = $this->config->getOutput();
         }
 
+        $this->setAutoExit(false);
+        $this->setCatchExceptions(false);
+
         try {
             return parent::run($input, $output);
         } catch (\Exception $e) {
@@ -322,9 +322,9 @@ public function run(InputInterface $input = null, OutputInterface $output = null
     }
 
     /**
-     * Runs the current application.
+     * Runs PsySH.
      *
-     * @throws Exception if thrown via the `throw-up` command
+     * @throws \Exception if thrown via the `throw-up` command
      *
      * @param InputInterface  $input  An Input instance
      * @param OutputInterface $output An Output instance
@@ -334,12 +334,29 @@ public function run(InputInterface $input = null, OutputInterface $output = null
     public function doRun(InputInterface $input, OutputInterface $output)
     {
         $this->setOutput($output);
-
         $this->resetCodeBuffer();
 
-        $this->setAutoExit(false);
-        $this->setCatchExceptions(false);
+        if ($input->isInteractive()) {
+            // @todo should it be possible to have raw output in an interactive run?
+            return $this->doInteractiveRun();
+        } else {
+            return $this->doNonInteractiveRun($this->config->rawOutput());
+        }
+    }
 
+    /**
+     * Run PsySH in interactive mode.
+     *
+     * Initializes tab completion and readline history, then spins up the
+     * execution loop.
+     *
+     * @throws \Exception if thrown via the `throw-up` command
+     *
+     * @return int 0 if everything went fine, or an error code
+     */
+    private function doInteractiveRun()
+    {
+        $this->initializeTabCompletion();
         $this->readline->readHistory();
 
         $this->output->writeln($this->getHeader());
@@ -348,14 +365,101 @@ public function doRun(InputInterface $input, OutputInterface $output)
 
         try {
             $this->beforeRun();
-            $this->loop->run($this);
+            $this->loadIncludes();
+            $loop = new ExecutionLoopClosure($this);
+            $loop->execute();
             $this->afterRun();
         } catch (ThrowUpException $e) {
             throw $e->getPrevious();
         } catch (BreakException $e) {
             // The ProcessForker throws a BreakException to finish the main thread.
-            return;
         }
+
+        return 0;
+    }
+
+    /**
+     * Run PsySH in non-interactive mode.
+     *
+     * Note that this isn't very useful unless you supply "include" arguments at
+     * the command line, or code via stdin.
+     *
+     * @param bool $rawOutput
+     *
+     * @return int 0 if everything went fine, or an error code
+     */
+    private function doNonInteractiveRun($rawOutput)
+    {
+        // If raw output is enabled (or output is piped) we don't want startup messages.
+        if (!$rawOutput && !$this->config->outputIsPiped()) {
+            $this->output->writeln($this->getHeader());
+            $this->writeVersionInfo();
+            $this->writeStartupMessage();
+        }
+
+        $this->beforeRun();
+        $this->loadIncludes();
+
+        // For non-interactive execution, read only from the input buffer or from piped input.
+        // Otherwise it'll try to readline and hang, waiting for user input with no indication of
+        // what's holding things up.
+        if (!empty($this->inputBuffer) || $this->config->inputIsPiped()) {
+            $this->getInput(false);
+        }
+
+        if ($this->hasCode()) {
+            $ret = $this->execute($this->flushCode());
+            $this->writeReturnValue($ret, $rawOutput);
+        }
+
+        $this->afterRun();
+
+        return 0;
+    }
+
+    /**
+     * Configures the input and output instances based on the user arguments and options.
+     */
+    protected function configureIO(InputInterface $input, OutputInterface $output)
+    {
+        // @todo overrides via environment variables (or should these happen in config? ... probably config)
+        $input->setInteractive($this->config->getInputInteractive());
+
+        if ($this->config->getOutputDecorated() !== null) {
+            $output->setDecorated($this->config->getOutputDecorated());
+        }
+
+        $output->setVerbosity($this->config->getOutputVerbosity());
+    }
+
+    /**
+     * Load user-defined includes.
+     */
+    private function loadIncludes()
+    {
+        // Load user-defined includes
+        $load = function (self $__psysh__) {
+            \set_error_handler([$__psysh__, 'handleError']);
+            foreach ($__psysh__->getIncludes() as $__psysh_include__) {
+                try {
+                    include $__psysh_include__;
+                } catch (\Error $_e) {
+                    $__psysh__->writeException(ErrorException::fromError($_e));
+                } catch (\Exception $_e) {
+                    $__psysh__->writeException($_e);
+                }
+            }
+            \restore_error_handler();
+            unset($__psysh_include__);
+
+            // Override any new local variables with pre-defined scope variables
+            \extract($__psysh__->getScopeVariables(false));
+
+            // ... then add the whole mess of variables back.
+            $__psysh__->setScopeVariables(\get_defined_vars());
+        };
+
+        $load($this);
     }
 
     /**
@@ -365,14 +469,16 @@ public function doRun(InputInterface $input, OutputInterface $output)
      * valid code.
      *
      * @throws BreakException if user hits Ctrl+D
+     *
+     * @param bool $interactive
      */
-    public function getInput()
+    public function getInput($interactive = true)
     {
         $this->codeBufferOpen = false;
 
         do {
             // reset output verbosity (in case it was altered by a subcommand)
-            $this->output->setVerbosity(ShellOutput::VERBOSITY_VERBOSE);
+            $this->output->setVerbosity($this->originalVerbosity);
 
             $input = $this->readline();
 
@@ -381,8 +487,13 @@ public function getInput()
              *
              *   1) In an expression, like a function or "if" block, clear the input buffer
              *   2) At top-level session, behave like the exit command
+             *   3) When non-interactive, return, because that's the end of stdin
              */
             if ($input === false) {
+                if (!$interactive) {
+                    return;
+                }
+
                 $this->output->writeln('');
 
                 if ($this->hasCode()) {
@@ -408,7 +519,7 @@ public function getInput()
             }
 
             $this->addCode($input);
-        } while (!$this->hasValidCode());
+        } while (!$interactive || !$this->hasValidCode());
     }
 
     /**
@@ -421,7 +532,7 @@ public function getInput()
     private function inputInOpenStringOrComment($input)
     {
         if (!$this->hasCode()) {
-            return;
+            return false;
         }
 
         $code = $this->codeBuffer;
@@ -777,7 +888,7 @@ public function getCodeBuffer()
     /**
      * Run a Psy Shell command given the user input.
      *
-     * @throws InvalidArgumentException if the input is not a valid command
+     * @throws \InvalidArgumentException if the input is not a valid command
      *
      * @param string $input User input string
      *
@@ -797,7 +908,7 @@ protected function runCommand($input)
             $helpCommand = $this->get('help');
             $helpCommand->setCommand($command);
 
-            return $helpCommand->run($input, $this->output);
+            return $helpCommand->run(new StringInput(''), $this->output);
         }
 
         return $command->run($input, $this->output);
@@ -931,7 +1042,7 @@ public function writeStdout($out, $phase = PHP_OUTPUT_HANDLER_END)
 
         // Incremental flush
         if ($out !== '' && !$isCleaning) {
-            $this->output->write($out, false, ShellOutput::OUTPUT_RAW);
+            $this->output->write($out, false, OutputInterface::OUTPUT_RAW);
             $this->outputWantsNewline = (\substr($out, -1) !== "\n");
             $this->stdoutBuffer .= $out;
         }
@@ -940,7 +1051,11 @@ public function writeStdout($out, $phase = PHP_OUTPUT_HANDLER_END)
         if ($phase & PHP_OUTPUT_HANDLER_END) {
             // Write an extra newline if stdout didn't end with one
             if ($this->outputWantsNewline) {
-                $this->output->writeln(\sprintf('<aside>%s</aside>', $this->config->useUnicode() ? '⏎' : '\\n'));
+                if (!$this->config->rawOutput() && !$this->config->outputIsPiped()) {
+                    $this->output->writeln(\sprintf('<aside>%s</aside>', $this->config->useUnicode() ? '⏎' : '\\n'));
+                } else {
+                    $this->output->writeln('');
+                }
                 $this->outputWantsNewline = false;
             }
 
@@ -961,8 +1076,9 @@ public function writeStdout($out, $phase = PHP_OUTPUT_HANDLER_END)
      * @see self::presentValue
      *
      * @param mixed $ret
+     * @param bool  $rawOutput Write raw var_export-style values
      */
-    public function writeReturnValue($ret)
+    public function writeReturnValue($ret, $rawOutput = false)
     {
         $this->lastExecSuccess = true;
 
@@ -971,10 +1087,16 @@ public function writeReturnValue($ret)
         }
 
         $this->context->setReturnValue($ret);
-        $ret    = $this->presentValue($ret);
-        $indent = \str_repeat(' ', \strlen(static::RETVAL));
 
-        $this->output->writeln(static::RETVAL . \str_replace(PHP_EOL, PHP_EOL . $indent, $ret));
+        if ($rawOutput) {
+            $formatted = \var_export($ret, true);
+        } else {
+            $indent = \str_repeat(' ', \strlen(static::RETVAL));
+            $formatted = $this->presentValue($ret);
+            $formatted = static::RETVAL . \str_replace(PHP_EOL, PHP_EOL . $indent, $formatted);
+        }
+
+        $this->output->writeln($formatted);
     }
 
     /**
@@ -991,7 +1113,23 @@ public function writeException(\Exception $e)
     {
         $this->lastExecSuccess = false;
         $this->context->setLastException($e);
-        $this->output->writeln($this->formatException($e));
+
+        $output = $this->output;
+        if ($output instanceof ConsoleOutput) {
+            $output = $output->getErrorOutput();
+        }
+        $output->writeln($this->formatException($e));
+
+        // Include an exception trace (as long as this isn't a BreakException).
+        if (!$e instanceof BreakException && $output->getVerbosity() >= OutputInterface::VERBOSITY_VERBOSE) {
+            $trace = TraceFormatter::formatTrace($e);
+            if (\count($trace) !== 0) {
+                $output->writeln('--');
+                $output->write($trace, true);
+                $output->writeln('');
+            }
+        }
+
         $this->resetCodeBuffer();
     }
 
@@ -1103,13 +1241,12 @@ public function execute($code, $throwExceptions = false)
      *
      * This allows us to:
      *
-     *     set_error_handler(array($psysh, 'handleError'));
+     *     set_error_handler([$psysh, 'handleError']);
      *
-     * Unlike ErrorException::throwException, this error handler respects the
-     * current error_reporting level; i.e. it logs warnings and notices, but
-     * doesn't throw an exception unless it's above the current error_reporting
-     * threshold. This should probably only be used in the inner execution loop
-     * of the shell, as most of the time a thrown exception is much more useful.
+     * Unlike ErrorException::throwException, this error handler respects error
+     * levels; i.e. it logs warnings and notices, but doesn't throw exceptions.
+     * This should probably only be used in the inner execution loop of the
+     * shell, as most of the time a thrown exception is much more useful.
      *
      * If the error type matches the `errorLoggingLevel` config, it will be
      * logged as well, regardless of the `error_reporting` level.
@@ -1117,7 +1254,7 @@ public function execute($code, $throwExceptions = false)
      * @see \Psy\Exception\ErrorException::throwException
      * @see \Psy\Shell::writeException
      *
-     * @throws \Psy\Exception\ErrorException depending on the current error_reporting level
+     * @throws \Psy\Exception\ErrorException depending on the error level
      *
      * @param int    $errno   Error type
      * @param string $errstr  Message
@@ -1126,10 +1263,16 @@ public function execute($code, $throwExceptions = false)
      */
     public function handleError($errno, $errstr, $errfile, $errline)
     {
-        if ($errno & \error_reporting()) {
+        // This is an error worth throwing.
+        //
+        // n.b. Technically we can't handle all of these in userland code, but
+        // we'll list 'em all for good measure
+        if ($errno & (E_ERROR | E_PARSE | E_CORE_ERROR | E_COMPILE_ERROR | E_USER_ERROR | E_RECOVERABLE_ERROR)) {
             ErrorException::throwException($errno, $errstr, $errfile, $errline);
-        } elseif ($errno & $this->config->errorLoggingLevel()) {
-            // log it and continue...
+        }
+
+        // Otherwise log it and continue.
+        if ($errno & \error_reporting() || $errno & $this->config->errorLoggingLevel()) {
             $this->writeException(new ErrorException($errstr, 0, $errno, $errfile, $errline));
         }
     }
@@ -1153,7 +1296,7 @@ protected function presentValue($val)
      *
      * @param string $input
      *
-     * @return null|BaseCommand
+     * @return BaseCommand|null
      */
     protected function getCommand($input)
     {
@@ -1182,10 +1325,14 @@ protected function hasCommand($input)
     /**
      * Get the current input prompt.
      *
-     * @return string
+     * @return string | null
      */
     protected function getPrompt()
     {
+        if ($this->output->isQuiet()) {
+            return null;
+        }
+
         if ($this->hasCode()) {
             return static::BUFF_PROMPT;
         }
@@ -1202,9 +1349,11 @@ protected function getPrompt()
      * If readline is enabled, this delegates to readline. Otherwise, it's an
      * ugly `fgets` call.
      *
+     * @param bool $interactive
+     *
      * @return string One line of user input
      */
-    protected function readline()
+    protected function readline($interactive = true)
     {
         if (!empty($this->inputBuffer)) {
             $line = \array_shift($this->inputBuffer);
@@ -1215,7 +1364,9 @@ protected function readline()
             return $line;
         }
 
-        if ($bracketedPaste = $this->config->useBracketedPaste()) {
+        $bracketedPaste = $interactive && $this->config->useBracketedPaste();
+
+        if ($bracketedPaste) {
             \printf("\e[?2004h"); // Enable bracketed paste
         }
 
@@ -1241,11 +1392,25 @@ protected function getHeader()
     /**
      * Get the current version of Psy Shell.
      *
+     * @deprecated call self::getVersionHeader instead
+     *
      * @return string
      */
     public function getVersion()
     {
-        $separator = $this->config->useUnicode() ? '—' : '-';
+        return self::getVersionHeader($this->config->useUnicode());
+    }
+
+    /**
+     * Get a pretty header including the current version of Psy Shell.
+     *
+     * @param bool $useUnicode
+     *
+     * @return string
+     */
+    public static function getVersionHeader($useUnicode = false)
+    {
+        $separator = $useUnicode ? '—' : '-';
 
         return \sprintf('Psy Shell %s (PHP %s %s %s)', self::VERSION, PHP_VERSION, $separator, PHP_SAPI);
     }
diff --git a/vendor/psy/psysh/src/Sudo.php b/vendor/psy/psysh/src/Sudo.php
index be354bef9731779872005108f93140eb1158a5d8..b06e1b320f26e8e9c78cd00f994e576049d50f45 100644
--- a/vendor/psy/psysh/src/Sudo.php
+++ b/vendor/psy/psysh/src/Sudo.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/Sudo/SudoVisitor.php b/vendor/psy/psysh/src/Sudo/SudoVisitor.php
index 2b78a423ed5e9b29233bae0924538e19f431dfe9..1d4cb155916c5e21f31ea542b6f73f6e7245a29f 100644
--- a/vendor/psy/psysh/src/Sudo/SudoVisitor.php
+++ b/vendor/psy/psysh/src/Sudo/SudoVisitor.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -24,6 +24,7 @@
 use PhpParser\Node\Name\FullyQualified as FullyQualifiedName;
 use PhpParser\Node\Scalar\String_;
 use PhpParser\NodeVisitorAbstract;
+use Psy\Sudo;
 
 /**
  * A PHP Parser node visitor which rewrites property and method access to use
@@ -33,8 +34,6 @@
  */
 class SudoVisitor extends NodeVisitorAbstract
 {
-    const SUDO_CLASS = 'Psy\Sudo';
-
     const PROPERTY_FETCH         = 'fetchProperty';
     const PROPERTY_ASSIGN        = 'assignProperty';
     const METHOD_CALL            = 'callMethod';
@@ -73,7 +72,7 @@ public function enterNode(Node $node)
             \array_unshift($args, new Arg($node->var));
 
             // not using prepareCall because the $node->args we started with are already Arg instances
-            return new StaticCall(new FullyQualifiedName(self::SUDO_CLASS), self::METHOD_CALL, $args);
+            return new StaticCall(new FullyQualifiedName(Sudo::class), self::METHOD_CALL, $args);
         } elseif ($node instanceof StaticPropertyFetch) {
             $class = $node->class instanceof Name ? $node->class->toString() : $node->class;
             $name = $node->name instanceof Identifier ? $node->name->toString() : $node->name;
@@ -102,7 +101,7 @@ public function enterNode(Node $node)
             \array_unshift($args, new Arg(\is_string($class) ? new String_($class) : $class));
 
             // not using prepareCall because the $node->args we started with are already Arg instances
-            return new StaticCall(new FullyQualifiedName(self::SUDO_CLASS), self::STATIC_CALL, $args);
+            return new StaticCall(new FullyQualifiedName(Sudo::class), self::STATIC_CALL, $args);
         } elseif ($node instanceof ClassConstFetch) {
             $class = $node->class instanceof Name ? $node->class->toString() : $node->class;
             $name  = $node->name instanceof Identifier ? $node->name->toString() : $node->name;
@@ -117,7 +116,7 @@ public function enterNode(Node $node)
 
     private function prepareCall($method, $args)
     {
-        return new StaticCall(new FullyQualifiedName(self::SUDO_CLASS), $method, \array_map(function ($arg) {
+        return new StaticCall(new FullyQualifiedName(Sudo::class), $method, \array_map(function ($arg) {
             return new Arg($arg);
         }, $args));
     }
diff --git a/vendor/psy/psysh/src/TabCompletion/AutoCompleter.php b/vendor/psy/psysh/src/TabCompletion/AutoCompleter.php
index 0751aa78bf91cbec3b441e521117cef53718dc8e..d5cc1f66516b62642545bb26d589bbe4ded094b8 100644
--- a/vendor/psy/psysh/src/TabCompletion/AutoCompleter.php
+++ b/vendor/psy/psysh/src/TabCompletion/AutoCompleter.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/TabCompletion/Matcher/AbstractContextAwareMatcher.php b/vendor/psy/psysh/src/TabCompletion/Matcher/AbstractContextAwareMatcher.php
index 91816b20261cd0a4aa77c15fed5bb278321de0c7..f7da443b9682dc9899d892133b98d034b0f023e0 100644
--- a/vendor/psy/psysh/src/TabCompletion/Matcher/AbstractContextAwareMatcher.php
+++ b/vendor/psy/psysh/src/TabCompletion/Matcher/AbstractContextAwareMatcher.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/TabCompletion/Matcher/AbstractDefaultParametersMatcher.php b/vendor/psy/psysh/src/TabCompletion/Matcher/AbstractDefaultParametersMatcher.php
index c44af36ad2abed01b17152539ffd6a0d1ccfce9d..a93c7f7f29c8a2861be9df06c998ba5e5fbbed47 100644
--- a/vendor/psy/psysh/src/TabCompletion/Matcher/AbstractDefaultParametersMatcher.php
+++ b/vendor/psy/psysh/src/TabCompletion/Matcher/AbstractDefaultParametersMatcher.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/TabCompletion/Matcher/AbstractMatcher.php b/vendor/psy/psysh/src/TabCompletion/Matcher/AbstractMatcher.php
index 63b7154738492477604628cbc929d7b7f73cfd74..e42588945c41040b7c3bd633fbcb9d87be6206f0 100644
--- a/vendor/psy/psysh/src/TabCompletion/Matcher/AbstractMatcher.php
+++ b/vendor/psy/psysh/src/TabCompletion/Matcher/AbstractMatcher.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -141,8 +141,8 @@ public static function hasSyntax($token, $syntax = self::VAR_SYNTAX)
     /**
      * Check whether $token type is $which.
      *
-     * @param string $which A PHP token type
      * @param mixed  $token A PHP token (see token_get_all)
+     * @param string $which A PHP token type
      *
      * @return bool
      */
diff --git a/vendor/psy/psysh/src/TabCompletion/Matcher/ClassAttributesMatcher.php b/vendor/psy/psysh/src/TabCompletion/Matcher/ClassAttributesMatcher.php
index 8e976b0a261ff5bceb5257c10251c03365b6ded0..e4244009ad748b1eb2dc201d95ad8e813a333ddf 100644
--- a/vendor/psy/psysh/src/TabCompletion/Matcher/ClassAttributesMatcher.php
+++ b/vendor/psy/psysh/src/TabCompletion/Matcher/ClassAttributesMatcher.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/TabCompletion/Matcher/ClassMethodDefaultParametersMatcher.php b/vendor/psy/psysh/src/TabCompletion/Matcher/ClassMethodDefaultParametersMatcher.php
index 3a269a353432441058efd3b2d412ee1e715fa5bf..0860e0dc1ea789c61ece686e5196b792d5da76be 100644
--- a/vendor/psy/psysh/src/TabCompletion/Matcher/ClassMethodDefaultParametersMatcher.php
+++ b/vendor/psy/psysh/src/TabCompletion/Matcher/ClassMethodDefaultParametersMatcher.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/TabCompletion/Matcher/ClassMethodsMatcher.php b/vendor/psy/psysh/src/TabCompletion/Matcher/ClassMethodsMatcher.php
index d278c18bfd7b37735c321f9153d7244c2478da06..e3778fdf0b6c00f2fa6a7dba2fe9d97e2dbbea57 100644
--- a/vendor/psy/psysh/src/TabCompletion/Matcher/ClassMethodsMatcher.php
+++ b/vendor/psy/psysh/src/TabCompletion/Matcher/ClassMethodsMatcher.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/TabCompletion/Matcher/ClassNamesMatcher.php b/vendor/psy/psysh/src/TabCompletion/Matcher/ClassNamesMatcher.php
index 844b3d2ae36ec95a9590ccae35bf7fbc8d11b724..ec11326b650626633308d923df2e01ccb07816af 100644
--- a/vendor/psy/psysh/src/TabCompletion/Matcher/ClassNamesMatcher.php
+++ b/vendor/psy/psysh/src/TabCompletion/Matcher/ClassNamesMatcher.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -40,7 +40,7 @@ function ($className) use ($class) {
                 return \implode('\\', \array_slice($pieces, $nsPos, \count($pieces)));
             },
             \array_filter(
-                \get_declared_classes(),
+                \array_merge(\get_declared_classes(), \get_declared_interfaces()),
                 function ($className) use ($quotedClass) {
                     return AbstractMatcher::startsWith($quotedClass, $className);
                 }
diff --git a/vendor/psy/psysh/src/TabCompletion/Matcher/CommandsMatcher.php b/vendor/psy/psysh/src/TabCompletion/Matcher/CommandsMatcher.php
index e3d8423a60f2d0fa1bf41e3fd34afd41cee76e72..bdeb45d4c39042ad2aa5f62a4a6aa5ae7e6bbc25 100644
--- a/vendor/psy/psysh/src/TabCompletion/Matcher/CommandsMatcher.php
+++ b/vendor/psy/psysh/src/TabCompletion/Matcher/CommandsMatcher.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/TabCompletion/Matcher/ConstantsMatcher.php b/vendor/psy/psysh/src/TabCompletion/Matcher/ConstantsMatcher.php
index 71be18f58c65009456f4735aeda57ccd7f1a25a4..5d5381260b914f43d036910da4e7ceec8c027a1c 100644
--- a/vendor/psy/psysh/src/TabCompletion/Matcher/ConstantsMatcher.php
+++ b/vendor/psy/psysh/src/TabCompletion/Matcher/ConstantsMatcher.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/TabCompletion/Matcher/FunctionDefaultParametersMatcher.php b/vendor/psy/psysh/src/TabCompletion/Matcher/FunctionDefaultParametersMatcher.php
index 66d9ea1dc7a0240da8c6b3b90eb162ff60ec3eb0..e1277c2eec302686dae1f0c2bf904df7d76dce4b 100644
--- a/vendor/psy/psysh/src/TabCompletion/Matcher/FunctionDefaultParametersMatcher.php
+++ b/vendor/psy/psysh/src/TabCompletion/Matcher/FunctionDefaultParametersMatcher.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/TabCompletion/Matcher/FunctionsMatcher.php b/vendor/psy/psysh/src/TabCompletion/Matcher/FunctionsMatcher.php
index 3aa12a1f050c55602aa4f965cd35eb1332f4ad99..7045423a2fa1e7397e0bad353e0e7dfeae1b6f55 100644
--- a/vendor/psy/psysh/src/TabCompletion/Matcher/FunctionsMatcher.php
+++ b/vendor/psy/psysh/src/TabCompletion/Matcher/FunctionsMatcher.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/TabCompletion/Matcher/KeywordsMatcher.php b/vendor/psy/psysh/src/TabCompletion/Matcher/KeywordsMatcher.php
index 9d0deeeea0a5809e470dd26eb08a4a11fc00ee5c..3c84b3dc150696842f3dac69eab23405239b0d46 100644
--- a/vendor/psy/psysh/src/TabCompletion/Matcher/KeywordsMatcher.php
+++ b/vendor/psy/psysh/src/TabCompletion/Matcher/KeywordsMatcher.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/TabCompletion/Matcher/MongoClientMatcher.php b/vendor/psy/psysh/src/TabCompletion/Matcher/MongoClientMatcher.php
index fb51bf7d2797a226085fb7c6738a50ed196702d9..69c7e9bbd461b9e3291561b9dc0faf011507aca6 100644
--- a/vendor/psy/psysh/src/TabCompletion/Matcher/MongoClientMatcher.php
+++ b/vendor/psy/psysh/src/TabCompletion/Matcher/MongoClientMatcher.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/TabCompletion/Matcher/MongoDatabaseMatcher.php b/vendor/psy/psysh/src/TabCompletion/Matcher/MongoDatabaseMatcher.php
index fb1b9bbfb63ac61b9e8cdbfc8cc13f8b19d1ed35..8775e22118bb075aee22bb94f84b72bcf320ea24 100644
--- a/vendor/psy/psysh/src/TabCompletion/Matcher/MongoDatabaseMatcher.php
+++ b/vendor/psy/psysh/src/TabCompletion/Matcher/MongoDatabaseMatcher.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/TabCompletion/Matcher/ObjectAttributesMatcher.php b/vendor/psy/psysh/src/TabCompletion/Matcher/ObjectAttributesMatcher.php
index ff44f5ac12f9e2ff524a68841b0d04c006722083..5a96444f57764cac1761ef62ae2061e54044329a 100644
--- a/vendor/psy/psysh/src/TabCompletion/Matcher/ObjectAttributesMatcher.php
+++ b/vendor/psy/psysh/src/TabCompletion/Matcher/ObjectAttributesMatcher.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/TabCompletion/Matcher/ObjectMethodDefaultParametersMatcher.php b/vendor/psy/psysh/src/TabCompletion/Matcher/ObjectMethodDefaultParametersMatcher.php
index 16fa0189fe21c59c75bcd9bf3a977d2bd80a7a0c..9c62fcfcbc129e8ec9ccf7bbfa9e17ace52f7295 100644
--- a/vendor/psy/psysh/src/TabCompletion/Matcher/ObjectMethodDefaultParametersMatcher.php
+++ b/vendor/psy/psysh/src/TabCompletion/Matcher/ObjectMethodDefaultParametersMatcher.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/TabCompletion/Matcher/ObjectMethodsMatcher.php b/vendor/psy/psysh/src/TabCompletion/Matcher/ObjectMethodsMatcher.php
index 23c751c7b09ef4967cc55b99237aac32b612de0d..01300c78bc86a306f9dbda293c58216a6753c52e 100644
--- a/vendor/psy/psysh/src/TabCompletion/Matcher/ObjectMethodsMatcher.php
+++ b/vendor/psy/psysh/src/TabCompletion/Matcher/ObjectMethodsMatcher.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/TabCompletion/Matcher/VariablesMatcher.php b/vendor/psy/psysh/src/TabCompletion/Matcher/VariablesMatcher.php
index a142b7b2e1348ae597427240fdedccedc0823b32..f2438d3d1a5199fe68dd21f62298c3b7d1e456b4 100644
--- a/vendor/psy/psysh/src/TabCompletion/Matcher/VariablesMatcher.php
+++ b/vendor/psy/psysh/src/TabCompletion/Matcher/VariablesMatcher.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/Util/Docblock.php b/vendor/psy/psysh/src/Util/Docblock.php
index 750210baa1fd3dbb4702823226dae50cc4b330a9..f251c864db9c98fe892634977ca6563993203857 100644
--- a/vendor/psy/psysh/src/Util/Docblock.php
+++ b/vendor/psy/psysh/src/Util/Docblock.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -111,6 +111,11 @@ protected static function prefixLength(array $lines)
         $first = \reset($lines);
         $last  = \end($lines);
 
+        // Special case for single-line comments
+        if (\count($lines) === 1) {
+            return \strspn($first, "* \t\n\r\0\x0B");
+        }
+
         // find the longest common substring
         $count = \min(\strlen($first), \strlen($last));
         for ($i = 0; $i < $count; $i++) {
diff --git a/vendor/psy/psysh/src/Util/Json.php b/vendor/psy/psysh/src/Util/Json.php
index 471f10e7d8d7542cf87ab58216ccbe0d7d4e67c0..b7059033a6e93602c86f65e665f0d1883c60668f 100644
--- a/vendor/psy/psysh/src/Util/Json.php
+++ b/vendor/psy/psysh/src/Util/Json.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/Util/Mirror.php b/vendor/psy/psysh/src/Util/Mirror.php
index 09c0b5b9aff7241cb3ebd91bafa81d87e3c8c6aa..d7d02836a8305c8acf8f73c13825b1da7feece8c 100644
--- a/vendor/psy/psysh/src/Util/Mirror.php
+++ b/vendor/psy/psysh/src/Util/Mirror.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -14,6 +14,7 @@
 use Psy\Exception\RuntimeException;
 use Psy\Reflection\ReflectionClassConstant;
 use Psy\Reflection\ReflectionConstant_;
+use Psy\Reflection\ReflectionNamespace;
 
 /**
  * A utility class for getting Reflectors.
@@ -65,22 +66,18 @@ public static function get($value, $member = null, $filter = 15)
         } elseif ($filter & self::STATIC_PROPERTY && $class->hasProperty($member) && $class->getProperty($member)->isStatic()) {
             return $class->getProperty($member);
         } else {
-            throw new RuntimeException(\sprintf(
-                'Unknown member %s on class %s',
-                $member,
-                \is_object($value) ? \get_class($value) : $value
-            ));
+            throw new RuntimeException(\sprintf('Unknown member %s on class %s', $member, \is_object($value) ? \get_class($value) : $value));
         }
     }
 
     /**
-     * Get a ReflectionClass (or ReflectionObject) if possible.
+     * Get a ReflectionClass (or ReflectionObject, or ReflectionNamespace) if possible.
      *
-     * @throws \InvalidArgumentException if $value is not a class name or instance
+     * @throws \InvalidArgumentException if $value is not a namespace or class name or instance
      *
      * @param mixed $value
      *
-     * @return \ReflectionClass
+     * @return \ReflectionClass|ReflectionNamespace
      */
     private static function getClass($value)
     {
@@ -90,10 +87,64 @@ private static function getClass($value)
 
         if (!\is_string($value)) {
             throw new \InvalidArgumentException('Mirror expects an object or class');
-        } elseif (!\class_exists($value) && !\interface_exists($value) && !\trait_exists($value)) {
-            throw new \InvalidArgumentException('Unknown class or function: ' . $value);
         }
 
-        return new \ReflectionClass($value);
+        if (\class_exists($value) || \interface_exists($value) || \trait_exists($value)) {
+            return new \ReflectionClass($value);
+        }
+
+        $namespace = \preg_replace('/(^\\\\|\\\\$)/', '', $value);
+        if (self::namespaceExists($namespace)) {
+            return new ReflectionNamespace($namespace);
+        }
+
+        throw new \InvalidArgumentException('Unknown namespace, class or function: ' . $value);
+    }
+
+    /**
+     * Check declared namespaces for a given namespace.
+     */
+    private static function namespaceExists($value)
+    {
+        return \in_array(\strtolower($value), self::getDeclaredNamespaces());
+    }
+
+    /**
+     * Get an array of all currently declared namespaces.
+     *
+     * Note that this relies on at least one function, class, interface, trait
+     * or constant to have been declared in that namespace.
+     */
+    private static function getDeclaredNamespaces()
+    {
+        $functions = \get_defined_functions();
+
+        $allNames = \array_merge(
+            $functions['internal'],
+            $functions['user'],
+            \get_declared_classes(),
+            \get_declared_interfaces(),
+            \get_declared_traits(),
+            \array_keys(\get_defined_constants())
+        );
+
+        $namespaces = [];
+        foreach ($allNames as $name) {
+            $chunks = \explode('\\', \strtolower($name));
+
+            // the last one is the function or class or whatever...
+            \array_pop($chunks);
+
+            while (!empty($chunks)) {
+                $namespaces[\implode('\\', $chunks)] = true;
+                \array_pop($chunks);
+            }
+        }
+
+        $namespaceNames = \array_keys($namespaces);
+
+        \sort($namespaceNames);
+
+        return $namespaceNames;
     }
 }
diff --git a/vendor/psy/psysh/src/Util/Str.php b/vendor/psy/psysh/src/Util/Str.php
index 47d5239968bca4d09378ff9f0bbafaacd3723c65..8fc0abc1a4a3c9d96d993f882f1a5cee98605491 100644
--- a/vendor/psy/psysh/src/Util/Str.php
+++ b/vendor/psy/psysh/src/Util/Str.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/VarDumper/Cloner.php b/vendor/psy/psysh/src/VarDumper/Cloner.php
index eb6c65e195f891a18a10c7411098ddde77962167..bbb658f82ab872e34d45a768d6d74de21de716db 100644
--- a/vendor/psy/psysh/src/VarDumper/Cloner.php
+++ b/vendor/psy/psysh/src/VarDumper/Cloner.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/VarDumper/Dumper.php b/vendor/psy/psysh/src/VarDumper/Dumper.php
index cc13b265a5a1f6cbb96b9d60ad5140153be524e3..0dbddb0ec233506465e9bef00cfd5fd50ff957eb 100644
--- a/vendor/psy/psysh/src/VarDumper/Dumper.php
+++ b/vendor/psy/psysh/src/VarDumper/Dumper.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/VarDumper/Presenter.php b/vendor/psy/psysh/src/VarDumper/Presenter.php
index 4f821e0cd8acc043654f153cecad3e557123962f..1e8095017c70854a229425bf017b2fa980c5853d 100644
--- a/vendor/psy/psysh/src/VarDumper/Presenter.php
+++ b/vendor/psy/psysh/src/VarDumper/Presenter.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/VarDumper/PresenterAware.php b/vendor/psy/psysh/src/VarDumper/PresenterAware.php
index 1645c604e4a6d75cc4d0afc506b153b3e32fafc5..d0c02ae333698d44d2b13fcb55c1bdc193763028 100644
--- a/vendor/psy/psysh/src/VarDumper/PresenterAware.php
+++ b/vendor/psy/psysh/src/VarDumper/PresenterAware.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/VersionUpdater/Checker.php b/vendor/psy/psysh/src/VersionUpdater/Checker.php
index c4044870df81b7e2a597542f4e4601005b9788ef..ffefc912b519b5ab779f152d74f2e2d6cf41b0b2 100644
--- a/vendor/psy/psysh/src/VersionUpdater/Checker.php
+++ b/vendor/psy/psysh/src/VersionUpdater/Checker.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/VersionUpdater/GitHubChecker.php b/vendor/psy/psysh/src/VersionUpdater/GitHubChecker.php
index 40cfc2e2f82f57c05d0143985afd267804d19bc8..923a0ec9b878701e2f35eff80ea94036d4ce1648 100644
--- a/vendor/psy/psysh/src/VersionUpdater/GitHubChecker.php
+++ b/vendor/psy/psysh/src/VersionUpdater/GitHubChecker.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/VersionUpdater/IntervalChecker.php b/vendor/psy/psysh/src/VersionUpdater/IntervalChecker.php
index 7e0da4327ad145b9a2e47cf93a27f3b545270130..ea5ceef47ff165c7db5d198d3693564c99ae3675 100644
--- a/vendor/psy/psysh/src/VersionUpdater/IntervalChecker.php
+++ b/vendor/psy/psysh/src/VersionUpdater/IntervalChecker.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/VersionUpdater/NoopChecker.php b/vendor/psy/psysh/src/VersionUpdater/NoopChecker.php
index c5c9bcb4ee77f11c896fdccfd326b6dae8879802..22340f7634efa979d916476766fbed48d324fc7e 100644
--- a/vendor/psy/psysh/src/VersionUpdater/NoopChecker.php
+++ b/vendor/psy/psysh/src/VersionUpdater/NoopChecker.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
diff --git a/vendor/psy/psysh/src/functions.php b/vendor/psy/psysh/src/functions.php
index 4e875bbabc8a024ae981883edb62d6a2974cfa95..b42dcdb246128bd4590613965f66253da98e7e82 100644
--- a/vendor/psy/psysh/src/functions.php
+++ b/vendor/psy/psysh/src/functions.php
@@ -3,7 +3,7 @@
 /*
  * This file is part of Psy Shell.
  *
- * (c) 2012-2018 Justin Hileman
+ * (c) 2012-2020 Justin Hileman
  *
  * For the full copyright and license information, please view the LICENSE
  * file that was distributed with this source code.
@@ -11,6 +11,7 @@
 
 namespace Psy;
 
+use Psy\ExecutionLoop\ProcessForker;
 use Psy\VersionUpdater\GitHubChecker;
 use Symfony\Component\Console\Input\ArgvInput;
 use Symfony\Component\Console\Input\InputArgument;
@@ -18,7 +19,7 @@
 use Symfony\Component\Console\Input\InputOption;
 use XdgBaseDir\Xdg;
 
-if (!\function_exists('Psy\sh')) {
+if (!\function_exists('Psy\\sh')) {
     /**
      * Command to return the eval-able code to startup PsySH.
      *
@@ -32,7 +33,7 @@ function sh()
     }
 }
 
-if (!\function_exists('Psy\debug')) {
+if (!\function_exists('Psy\\debug')) {
     /**
      * Invoke a Psy Shell from the current context.
      *
@@ -70,7 +71,7 @@ function sh()
      *         }
      *     }
      *
-     * @param array         $vars   Scope variables from the calling context (default: array())
+     * @param array         $vars   Scope variables from the calling context (default: [])
      * @param object|string $bindTo Bound object ($this) or class (self) value for the shell
      *
      * @return array Scope variables from the debugger session
@@ -101,7 +102,7 @@ function debug(array $vars = [], $bindTo = null)
     }
 }
 
-if (!\function_exists('Psy\info')) {
+if (!\function_exists('Psy\\info')) {
     /**
      * Get a bunch of debugging info about the current PsySH environment and
      * configuration.
@@ -135,6 +136,7 @@ function info(Configuration $config = null)
         };
 
         $config = $lastConfig ?: new Configuration();
+        $configEnv = (isset($_SERVER['PSYSH_CONFIG']) && $_SERVER['PSYSH_CONFIG']) ? $_SERVER['PSYSH_CONFIG'] : false;
 
         $core = [
             'PsySH version'       => Shell::VERSION,
@@ -146,7 +148,7 @@ function info(Configuration $config = null)
             'config file'         => [
                 'default config file' => $prettyPath($config->getConfigFile()),
                 'local config file'   => $prettyPath($config->getLocalConfigFile()),
-                'PSYSH_CONFIG env'    => $prettyPath(\getenv('PSYSH_CONFIG')),
+                'PSYSH_CONFIG env'    => $prettyPath($configEnv),
             ],
             // 'config dir'  => $config->getConfigDir(),
             // 'data dir'    => $config->getDataDir(),
@@ -170,6 +172,11 @@ function info(Configuration $config = null)
             'update cache file'      => $prettyPath($config->getUpdateCheckCacheFile()),
         ];
 
+        $input = [
+            'interactive mode'  => $config->interactiveMode(),
+            'input interactive' => $config->getInputInteractive(),
+        ];
+
         if ($config->hasReadline()) {
             $info = \readline_info();
 
@@ -192,16 +199,27 @@ function info(Configuration $config = null)
             ];
         }
 
+        $output = [
+            'color mode'       => $config->colorMode(),
+            'output decorated' => $config->getOutputDecorated(),
+            'output verbosity' => $config->verbosity(),
+        ];
+
         $pcntl = [
-            'pcntl available' => \function_exists('pcntl_signal'),
-            'posix available' => \function_exists('posix_getpid'),
+            'pcntl available' => ProcessForker::isPcntlSupported(),
+            'posix available' => ProcessForker::isPosixSupported(),
         ];
 
-        $disabledFuncs = \array_map('trim', \explode(',', \ini_get('disable_functions')));
-        if (\in_array('pcntl_signal', $disabledFuncs) || \in_array('pcntl_fork', $disabledFuncs)) {
-            $pcntl['pcntl disabled'] = true;
+        if ($disabledPcntl = ProcessForker::disabledPcntlFunctions()) {
+            $pcntl['disabled pcntl functions'] = $disabledPcntl;
         }
 
+        if ($disabledPosix = ProcessForker::disabledPosixFunctions()) {
+            $pcntl['disabled posix functions'] = $disabledPosix;
+        }
+
+        $pcntl['use pcntl'] = $config->usePcntl();
+
         $history = [
             'history file'     => $prettyPath($config->getHistoryFile()),
             'history size'     => $config->getHistorySize(),
@@ -243,7 +261,6 @@ function info(Configuration $config = null)
 
         $autocomplete = [
             'tab completion enabled' => $config->useTabCompletion(),
-            'custom matchers'        => \array_map('get_class', $config->getTabCompletionMatchers()),
             'bracketed paste'        => $config->useBracketedPaste(),
         ];
 
@@ -257,11 +274,11 @@ function info(Configuration $config = null)
 
         // @todo Show Presenter / custom casters.
 
-        return \array_merge($core, \compact('updates', 'pcntl', 'readline', 'history', 'docs', 'autocomplete'));
+        return \array_merge($core, \compact('updates', 'pcntl', 'input', 'readline', 'output', 'history', 'docs', 'autocomplete'));
     }
 }
 
-if (!\function_exists('Psy\bin')) {
+if (!\function_exists('Psy\\bin')) {
     /**
      * `psysh` command line executable.
      *
@@ -270,50 +287,68 @@ function info(Configuration $config = null)
     function bin()
     {
         return function () {
+            if (!isset($_SERVER['PSYSH_IGNORE_ENV']) || !$_SERVER['PSYSH_IGNORE_ENV']) {
+                if (defined('HHVM_VERSION_ID') && \HHVM_VERSION_ID < 31800) {
+                    fwrite(STDERR, 'HHVM 3.18 or higher is required. You can set the environment variable PSYSH_IGNORE_ENV=1 to override this restriction and proceed anyway.' . PHP_EOL);
+                    exit(1);
+                }
+
+                if (defined('HHVM_VERSION_ID') && \HHVM_VERSION_ID > 39999) {
+                    fwrite(STDERR, 'HHVM 4 or higher is not supported. You can set the environment variable PSYSH_IGNORE_ENV=1 to override this restriction and proceed anyway.' . PHP_EOL);
+                    exit(1);
+                }
+
+                if (\PHP_VERSION_ID < 50509) {
+                    fwrite(STDERR, 'PHP 5.5.9 or higher is required. You can set the environment variable PSYSH_IGNORE_ENV=1 to override this restriction and proceed anyway.' . PHP_EOL);
+                    exit(1);
+                }
+
+                if (\PHP_VERSION_ID > 89999) {
+                    fwrite(STDERR, 'PHP 9 or higher is not supported. You can set the environment variable PSYSH_IGNORE_ENV=1 to override this restriction and proceed anyway.' . PHP_EOL);
+                    exit(1);
+                }
+
+                if (!function_exists('json_encode')) {
+                    fwrite(STDERR, 'The JSON extension is required. Please install it. You can set the environment variable PSYSH_IGNORE_ENV=1 to override this restriction and proceed anyway.' . PHP_EOL);
+                    exit(1);
+                }
+
+                if (!function_exists('token_get_all')) {
+                    fwrite(STDERR, 'The Tokenizer extension is required. Please install it. You can set the environment variable PSYSH_IGNORE_ENV=1 to override this restriction and proceed anyway.' . PHP_EOL);
+                    exit(1);
+                }
+            }
+
             $usageException = null;
 
             $input = new ArgvInput();
             try {
-                $input->bind(new InputDefinition([
-                    new InputOption('help',     'h',  InputOption::VALUE_NONE),
-                    new InputOption('config',   'c',  InputOption::VALUE_REQUIRED),
-                    new InputOption('version',  'v',  InputOption::VALUE_NONE),
-                    new InputOption('cwd',      null, InputOption::VALUE_REQUIRED),
-                    new InputOption('color',    null, InputOption::VALUE_NONE),
-                    new InputOption('no-color', null, InputOption::VALUE_NONE),
+                $input->bind(new InputDefinition(\array_merge(Configuration::getInputOptions(), [
+                    new InputOption('help',    'h', InputOption::VALUE_NONE),
+                    new InputOption('version', 'V', InputOption::VALUE_NONE),
 
                     new InputArgument('include', InputArgument::IS_ARRAY),
-                ]));
+                ])));
             } catch (\RuntimeException $e) {
                 $usageException = $e;
             }
 
-            $config = [];
-
-            // Handle --config
-            if ($configFile = $input->getOption('config')) {
-                $config['configFile'] = $configFile;
-            }
-
-            // Handle --color and --no-color
-            if ($input->getOption('color') && $input->getOption('no-color')) {
-                $usageException = new \RuntimeException('Using both "--color" and "--no-color" options is invalid');
-            } elseif ($input->getOption('color')) {
-                $config['colorMode'] = Configuration::COLOR_MODE_FORCED;
-            } elseif ($input->getOption('no-color')) {
-                $config['colorMode'] = Configuration::COLOR_MODE_DISABLED;
+            try {
+                $config = Configuration::fromInput($input);
+            } catch (\InvalidArgumentException $e) {
+                $usageException = $e;
             }
 
-            $shell = new Shell(new Configuration($config));
-
             // Handle --help
             if ($usageException !== null || $input->getOption('help')) {
                 if ($usageException !== null) {
                     echo $usageException->getMessage() . PHP_EOL . PHP_EOL;
                 }
 
-                $version = $shell->getVersion();
-                $name    = \basename(\reset($_SERVER['argv']));
+                $version = Shell::getVersionHeader(false);
+                $argv    = isset($_SERVER['argv']) ? $_SERVER['argv'] : [];
+                $name    = $argv ? \basename(\reset($argv)) : 'psysh';
+
                 echo <<<EOL
 $version
 
@@ -321,12 +356,17 @@ function bin()
   $name [--version] [--help] [files...]
 
 Options:
-  --help     -h Display this help message.
-  --config   -c Use an alternate PsySH config file location.
-  --cwd         Use an alternate working directory.
-  --version  -v Display the PsySH version.
-  --color       Force colors in output.
-  --no-color    Disable colors in output.
+  -h, --help            Display this help message.
+  -c, --config FILE     Use an alternate PsySH config file location.
+      --cwd PATH        Use an alternate working directory.
+  -V, --version         Display the PsySH version.
+      --color           Force colors in output.
+      --no-color        Disable colors in output.
+  -i, --interactive     Force PsySH to run in interactive mode.
+  -n, --no-interactive  Run PsySH without interactive input. Requires input from stdin.
+  -r, --raw-output      Print var_export-style return values (for non-interactive input)
+  -q, --quiet           Shhhhhh.
+  -v|vv|vvv, --verbose  Increase the verbosity of messages.
 
 EOL;
                 exit($usageException === null ? 0 : 1);
@@ -334,10 +374,12 @@ function bin()
 
             // Handle --version
             if ($input->getOption('version')) {
-                echo $shell->getVersion() . PHP_EOL;
+                echo Shell::getVersionHeader($config->useUnicode()) . PHP_EOL;
                 exit(0);
             }
 
+            $shell = new Shell($config);
+
             // Pass additional arguments to Shell as 'includes'
             $shell->setIncludes($input->getArgument('include'));
 
@@ -345,7 +387,7 @@ function bin()
                 // And go!
                 $shell->run();
             } catch (\Exception $e) {
-                echo $e->getMessage() . PHP_EOL;
+                fwrite(STDERR, $e->getMessage() . PHP_EOL);
 
                 // @todo this triggers the "exited unexpectedly" logic in the
                 // ForkingLoop, so we can't exit(1) after starting the shell...
diff --git a/vendor/psy/psysh/test/ClassWithSecrets.php b/vendor/psy/psysh/test/ClassWithSecrets.php
deleted file mode 100644
index adf27e3fd9038eafe2f6315a6dbea92b6a0ca7d5..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/test/ClassWithSecrets.php
+++ /dev/null
@@ -1,37 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test;
-
-class ClassWithSecrets
-{
-    private const PRIVATE_CONST = 'private and const';
-    private static $privateStaticProp = 'private and static and prop';
-    private $privateProp = 'private and prop';
-
-    private static function privateStaticMethod($extra = null)
-    {
-        if ($extra !== null) {
-            return 'private and static and method with ' . \json_encode($extra);
-        }
-
-        return 'private and static and method';
-    }
-
-    private function privateMethod($extra = null)
-    {
-        if ($extra !== null) {
-            return 'private and method with ' . \json_encode($extra);
-        }
-
-        return 'private and method';
-    }
-}
diff --git a/vendor/psy/psysh/test/CodeCleaner/AbstractClassPassTest.php b/vendor/psy/psysh/test/CodeCleaner/AbstractClassPassTest.php
deleted file mode 100644
index 1925c3803794ef8e8c45176bf13bbc0574be8ce9..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/test/CodeCleaner/AbstractClassPassTest.php
+++ /dev/null
@@ -1,57 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\CodeCleaner;
-
-use Psy\CodeCleaner\AbstractClassPass;
-
-class AbstractClassPassTest extends CodeCleanerTestCase
-{
-    public function setUp()
-    {
-        $this->setPass(new AbstractClassPass());
-    }
-
-    /**
-     * @dataProvider invalidStatements
-     * @expectedException \Psy\Exception\FatalErrorException
-     */
-    public function testProcessStatementFails($code)
-    {
-        $this->parseAndTraverse($code);
-    }
-
-    public function invalidStatements()
-    {
-        return [
-            ['class A { abstract function a(); }'],
-            ['abstract class B { abstract function b() {} }'],
-            ['abstract class B { abstract function b() { echo "yep"; } }'],
-        ];
-    }
-
-    /**
-     * @dataProvider validStatements
-     */
-    public function testProcessStatementPasses($code)
-    {
-        $this->parseAndTraverse($code);
-        $this->assertTrue(true);
-    }
-
-    public function validStatements()
-    {
-        return [
-            ['abstract class C { function c() {} }'],
-            ['abstract class D { abstract function d(); }'],
-        ];
-    }
-}
diff --git a/vendor/psy/psysh/test/CodeCleaner/AssignThisVariablePassTest.php b/vendor/psy/psysh/test/CodeCleaner/AssignThisVariablePassTest.php
deleted file mode 100644
index 1ff15c571d07adce4544256f18713dde68fb69de..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/test/CodeCleaner/AssignThisVariablePassTest.php
+++ /dev/null
@@ -1,58 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\CodeCleaner;
-
-use Psy\CodeCleaner\AssignThisVariablePass;
-
-class AssignThisVariablePassTest extends CodeCleanerTestCase
-{
-    public function setUp()
-    {
-        $this->setPass(new AssignThisVariablePass());
-    }
-
-    /**
-     * @dataProvider invalidStatements
-     * @expectedException \Psy\Exception\FatalErrorException
-     */
-    public function testProcessStatementFails($code)
-    {
-        $this->parseAndTraverse($code);
-    }
-
-    public function invalidStatements()
-    {
-        return [
-            ['$this = 3'],
-            ['strtolower($this = "this")'],
-        ];
-    }
-
-    /**
-     * @dataProvider validStatements
-     */
-    public function testProcessStatementPasses($code)
-    {
-        $this->parseAndTraverse($code);
-        $this->assertTrue(true);
-    }
-
-    public function validStatements()
-    {
-        return [
-            ['$this'],
-            ['$a = $this'],
-            ['$a = "this"; $$a = 3'],
-            ['$$this = "b"'],
-        ];
-    }
-}
diff --git a/vendor/psy/psysh/test/CodeCleaner/CallTimePassByReferencePassTest.php b/vendor/psy/psysh/test/CodeCleaner/CallTimePassByReferencePassTest.php
deleted file mode 100644
index cd321b5def260fe75c344993b2183903d144a68b..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/test/CodeCleaner/CallTimePassByReferencePassTest.php
+++ /dev/null
@@ -1,59 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\CodeCleaner;
-
-use Psy\CodeCleaner\CallTimePassByReferencePass;
-
-class CallTimePassByReferencePassTest extends CodeCleanerTestCase
-{
-    public function setUp()
-    {
-        $this->setPass(new CallTimePassByReferencePass());
-    }
-
-    /**
-     * @dataProvider invalidStatements
-     * @expectedException \Psy\Exception\FatalErrorException
-     */
-    public function testProcessStatementFails($code)
-    {
-        $this->parseAndTraverse($code);
-    }
-
-    public function invalidStatements()
-    {
-        return [
-            ['f(&$arg)'],
-            ['$object->method($first, &$arg)'],
-            ['$closure($first, &$arg, $last)'],
-            ['A::b(&$arg)'],
-        ];
-    }
-
-    /**
-     * @dataProvider validStatements
-     */
-    public function testProcessStatementPasses($code)
-    {
-        $this->parseAndTraverse($code);
-        $this->assertTrue(true);
-    }
-
-    public function validStatements()
-    {
-        return [
-            ['array(&$var)'],
-            ['$a = &$b'],
-            ['f(array(&$b))'],
-        ];
-    }
-}
diff --git a/vendor/psy/psysh/test/CodeCleaner/CalledClassPassTest.php b/vendor/psy/psysh/test/CodeCleaner/CalledClassPassTest.php
deleted file mode 100644
index c80f257ac951080945ffb9d432e477760fc1840a..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/test/CodeCleaner/CalledClassPassTest.php
+++ /dev/null
@@ -1,90 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\CodeCleaner;
-
-use Psy\CodeCleaner\CalledClassPass;
-
-class CalledClassPassTest extends CodeCleanerTestCase
-{
-    public function setUp()
-    {
-        $this->setPass(new CalledClassPass());
-    }
-
-    /**
-     * @dataProvider invalidStatements
-     * @expectedException \Psy\Exception\ErrorException
-     */
-    public function testProcessStatementFails($code)
-    {
-        $this->parseAndTraverse($code);
-    }
-
-    public function invalidStatements()
-    {
-        return [
-            ['get_class()'],
-            ['get_class(null)'],
-            ['get_called_class()'],
-            ['get_called_class(null)'],
-            ['function foo() { return get_class(); }'],
-            ['function foo() { return get_class(null); }'],
-            ['function foo() { return get_called_class(); }'],
-            ['function foo() { return get_called_class(null); }'],
-        ];
-    }
-
-    /**
-     * @dataProvider validStatements
-     */
-    public function testProcessStatementPasses($code)
-    {
-        $this->parseAndTraverse($code);
-        $this->assertTrue(true);
-    }
-
-    public function validStatements()
-    {
-        return [
-            ['get_class($foo)'],
-            ['get_class(bar())'],
-            ['get_called_class($foo)'],
-            ['get_called_class(bar())'],
-            ['function foo($bar) { return get_class($bar); }'],
-            ['function foo($bar) { return get_called_class($bar); }'],
-            ['class Foo { function bar() { return get_class(); } }'],
-            ['class Foo { function bar() { return get_class(null); } }'],
-            ['class Foo { function bar() { return get_called_class(); } }'],
-            ['class Foo { function bar() { return get_called_class(null); } }'],
-            ['$foo = function () {}; $foo()'],
-        ];
-    }
-
-    /**
-     * @dataProvider validTraitStatements
-     */
-    public function testProcessTraitStatementPasses($code)
-    {
-        $this->parseAndTraverse($code);
-        $this->assertTrue(true);
-    }
-
-    public function validTraitStatements()
-    {
-        return [
-            ['trait Foo { function bar() { return get_class(); } }'],
-            ['trait Foo { function bar() { return get_class(null); } }'],
-            ['trait Foo { function bar() { return get_called_class(); } }'],
-            ['trait Foo { function bar() { return get_called_class(null); } }'],
-        ];
-    }
-}
diff --git a/vendor/psy/psysh/test/CodeCleaner/CodeCleanerTestCase.php b/vendor/psy/psysh/test/CodeCleaner/CodeCleanerTestCase.php
deleted file mode 100644
index 6962c1141409ca8607665b7b0f6837847fe932c9..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/test/CodeCleaner/CodeCleanerTestCase.php
+++ /dev/null
@@ -1,41 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\CodeCleaner;
-
-use PhpParser\NodeTraverser;
-use Psy\CodeCleaner\CodeCleanerPass;
-use Psy\Test\ParserTestCase;
-
-class CodeCleanerTestCase extends ParserTestCase
-{
-    protected $pass;
-
-    public function tearDown()
-    {
-        $this->pass = null;
-        parent::tearDown();
-    }
-
-    protected function setPass(CodeCleanerPass $pass)
-    {
-        $this->pass = $pass;
-        if (!isset($this->traverser)) {
-            $this->traverser = new NodeTraverser();
-        }
-        $this->traverser->addVisitor($this->pass);
-    }
-
-    protected function parseAndTraverse($code, $prefix = '<?php ')
-    {
-        return $this->traverse($this->parse($code, $prefix));
-    }
-}
diff --git a/vendor/psy/psysh/test/CodeCleaner/ExitPassTest.php b/vendor/psy/psysh/test/CodeCleaner/ExitPassTest.php
deleted file mode 100644
index b22766c76e27ccf5e9b08de677721cd2503726b9..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/test/CodeCleaner/ExitPassTest.php
+++ /dev/null
@@ -1,59 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\CodeCleaner;
-
-use Psy\CodeCleaner\ExitPass;
-
-class ExitPassTest extends CodeCleanerTestCase
-{
-    /**
-     * @var string
-     */
-    private $expectedExceptionString = '\\Psy\\Exception\\BreakException::exitShell()';
-
-    public function setUp()
-    {
-        $this->setPass(new ExitPass());
-    }
-
-    /**
-     * @dataProvider dataProviderExitStatement
-     */
-    public function testExitStatement($from, $to)
-    {
-        $this->assertProcessesAs($from, $to);
-    }
-
-    /**
-     * Data provider for testExitStatement.
-     *
-     * @return array
-     */
-    public function dataProviderExitStatement()
-    {
-        return [
-            ['exit;', "{$this->expectedExceptionString};"],
-            ['exit();', "{$this->expectedExceptionString};"],
-            ['die;', "{$this->expectedExceptionString};"],
-            ['exit(die(die));', "{$this->expectedExceptionString};"],
-            ['if (true) { exit; }', "if (true) {\n    {$this->expectedExceptionString};\n}"],
-            ['if (false) { exit; }', "if (false) {\n    {$this->expectedExceptionString};\n}"],
-            ['1 and exit();', "1 and {$this->expectedExceptionString};"],
-            ['foo() or die', "foo() or {$this->expectedExceptionString};"],
-            ['exit and 1;', "{$this->expectedExceptionString} and 1;"],
-            ['if (exit) { echo $wat; }', "if ({$this->expectedExceptionString}) {\n    echo \$wat;\n}"],
-            ['exit or die;', "{$this->expectedExceptionString} or {$this->expectedExceptionString};"],
-            ['switch (die) { }', "switch ({$this->expectedExceptionString}) {\n}"],
-            ['for ($i = 1; $i < 10; die) {}', "for (\$i = 1; \$i < 10; {$this->expectedExceptionString}) {\n}"],
-        ];
-    }
-}
diff --git a/vendor/psy/psysh/test/CodeCleaner/FinalClassPassTest.php b/vendor/psy/psysh/test/CodeCleaner/FinalClassPassTest.php
deleted file mode 100644
index 1808d11fb1564e22fca0f296d888ec75d706bb2f..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/test/CodeCleaner/FinalClassPassTest.php
+++ /dev/null
@@ -1,65 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\CodeCleaner;
-
-use Psy\CodeCleaner\FinalClassPass;
-
-class FinalClassPassTest extends CodeCleanerTestCase
-{
-    public function setUp()
-    {
-        $this->setPass(new FinalClassPass());
-    }
-
-    /**
-     * @dataProvider invalidStatements
-     * @expectedException \Psy\Exception\FatalErrorException
-     */
-    public function testProcessStatementFails($code)
-    {
-        $this->parseAndTraverse($code);
-    }
-
-    public function invalidStatements()
-    {
-        $data = [
-            ['final class A {} class B extends A {}'],
-            ['class A {} final class B extends A {} class C extends B {}'],
-            // array('namespace A { final class B {} } namespace C { class D extends \\A\\B {} }'),
-        ];
-
-        if (!\defined('HHVM_VERSION')) {
-            // For some reason Closure isn't final in HHVM?
-            $data[] = ['class A extends \\Closure {}'];
-        }
-
-        return $data;
-    }
-
-    /**
-     * @dataProvider validStatements
-     */
-    public function testProcessStatementPasses($code)
-    {
-        $this->parseAndTraverse($code);
-        $this->assertTrue(true);
-    }
-
-    public function validStatements()
-    {
-        return [
-            ['class A extends \\stdClass {}'],
-            ['final class A extends \\stdClass {}'],
-            ['class A {} class B extends A {}'],
-        ];
-    }
-}
diff --git a/vendor/psy/psysh/test/CodeCleaner/Fixtures/ClassWithCallStatic.php b/vendor/psy/psysh/test/CodeCleaner/Fixtures/ClassWithCallStatic.php
deleted file mode 100644
index 0c674c0ed1532d9ef0801132d5c314a5a6a9e607..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/test/CodeCleaner/Fixtures/ClassWithCallStatic.php
+++ /dev/null
@@ -1,20 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\CodeCleaner\Fixtures;
-
-class ClassWithCallStatic
-{
-    public static function __callStatic($name, $arguments)
-    {
-        // wheee!
-    }
-}
diff --git a/vendor/psy/psysh/test/CodeCleaner/Fixtures/ClassWithStatic.php b/vendor/psy/psysh/test/CodeCleaner/Fixtures/ClassWithStatic.php
deleted file mode 100644
index 64c64c76cb7a85f5034e465206a2b6978b20db5c..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/test/CodeCleaner/Fixtures/ClassWithStatic.php
+++ /dev/null
@@ -1,20 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\CodeCleaner\Fixtures;
-
-class ClassWithStatic
-{
-    public static function doStuff()
-    {
-        // Don't actually do stuff.
-    }
-}
diff --git a/vendor/psy/psysh/test/CodeCleaner/Fixtures/TraitWithStatic.php b/vendor/psy/psysh/test/CodeCleaner/Fixtures/TraitWithStatic.php
deleted file mode 100644
index 132dc061cb462ebd500e7f7fadfd2075470ce596..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/test/CodeCleaner/Fixtures/TraitWithStatic.php
+++ /dev/null
@@ -1,20 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\CodeCleaner\Fixtures;
-
-trait TraitWithStatic
-{
-    public static function doStuff()
-    {
-        // Don't actually do stuff.
-    }
-}
diff --git a/vendor/psy/psysh/test/CodeCleaner/FunctionContextPassTest.php b/vendor/psy/psysh/test/CodeCleaner/FunctionContextPassTest.php
deleted file mode 100644
index 851eb2284eb3f19e764dfe78b8d0172a8fe5b396..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/test/CodeCleaner/FunctionContextPassTest.php
+++ /dev/null
@@ -1,56 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\CodeCleaner;
-
-use Psy\CodeCleaner\FunctionContextPass;
-
-class FunctionContextPassTest extends CodeCleanerTestCase
-{
-    public function setUp()
-    {
-        $this->setPass(new FunctionContextPass());
-    }
-
-    /**
-     * @dataProvider validStatements
-     */
-    public function testProcessStatementPasses($code)
-    {
-        $this->parseAndTraverse($code);
-        $this->assertTrue(true);
-    }
-
-    public function validStatements()
-    {
-        return [
-            ['function foo() { yield; }'],
-            ['if (function(){ yield; })'],
-        ];
-    }
-
-    /**
-     * @dataProvider invalidYieldStatements
-     * @expectedException \Psy\Exception\FatalErrorException
-     */
-    public function testInvalidYield($code)
-    {
-        $this->parseAndTraverse($code);
-    }
-
-    public function invalidYieldStatements()
-    {
-        return [
-            ['yield'],
-            ['if (yield)'],
-        ];
-    }
-}
diff --git a/vendor/psy/psysh/test/CodeCleaner/FunctionReturnInWriteContextPassTest.php b/vendor/psy/psysh/test/CodeCleaner/FunctionReturnInWriteContextPassTest.php
deleted file mode 100644
index 85f6a04c0607b58107ecaca1f0c83c9b1ff0cc56..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/test/CodeCleaner/FunctionReturnInWriteContextPassTest.php
+++ /dev/null
@@ -1,91 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\CodeCleaner;
-
-use Psy\CodeCleaner\FunctionReturnInWriteContextPass;
-use Psy\Exception\FatalErrorException;
-
-class FunctionReturnInWriteContextPassTest extends CodeCleanerTestCase
-{
-    public function setUp()
-    {
-        $this->setPass(new FunctionReturnInWriteContextPass());
-    }
-
-    /**
-     * @dataProvider invalidStatements
-     * @expectedException \Psy\Exception\FatalErrorException
-     * @expectedExceptionMessage Can't use function return value in write context
-     */
-    public function testProcessStatementFails($code)
-    {
-        $this->parseAndTraverse($code);
-    }
-
-    public function invalidStatements()
-    {
-        return [
-            ['f(&g())'],
-            ['array(& $object->method())'],
-            ['$a->method(& $closure())'],
-            ['array(& A::b())'],
-            ['f() = 5'],
-            ['unset(h())'],
-        ];
-    }
-
-    public function testIsset()
-    {
-        try {
-            $this->traverser->traverse($this->parse('isset(strtolower("A"))'));
-            $this->fail();
-        } catch (FatalErrorException $e) {
-            if (\version_compare(PHP_VERSION, '5.5', '>=')) {
-                $this->assertContains(
-                    'Cannot use isset() on the result of a function call (you can use "null !== func()" instead)',
-                    $e->getMessage()
-                );
-            } else {
-                $this->assertContains("Can't use function return value in write context", $e->getMessage());
-            }
-        }
-    }
-
-    /**
-     * @expectedException \Psy\Exception\FatalErrorException
-     * @expectedExceptionMessage Can't use function return value in write context
-     */
-    public function testEmpty()
-    {
-        if (\version_compare(PHP_VERSION, '5.5', '>=')) {
-            $this->markTestSkipped();
-        }
-
-        $this->traverser->traverse($this->parse('empty(strtolower("A"))'));
-    }
-
-    /**
-     * @dataProvider validStatements
-     */
-    public function testValidStatements($code)
-    {
-        $this->parseAndTraverse($code);
-        $this->assertTrue(true);
-    }
-
-    public function validStatements()
-    {
-        return [
-            ['isset($foo)'],
-        ];
-    }
-}
diff --git a/vendor/psy/psysh/test/CodeCleaner/ImplicitReturnPassTest.php b/vendor/psy/psysh/test/CodeCleaner/ImplicitReturnPassTest.php
deleted file mode 100644
index 1c28b4a859409d4fe7840135e48b8690c2e60a69..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/test/CodeCleaner/ImplicitReturnPassTest.php
+++ /dev/null
@@ -1,112 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\CodeCleaner;
-
-use Psy\CodeCleaner\ImplicitReturnPass;
-
-class ImplicitReturnPassTest extends CodeCleanerTestCase
-{
-    public function setUp()
-    {
-        $this->setPass(new ImplicitReturnPass());
-    }
-
-    /**
-     * @dataProvider implicitReturns
-     */
-    public function testProcess($from, $to)
-    {
-        $this->assertProcessesAs($from, $to);
-    }
-
-    public function implicitReturns()
-    {
-        $data = [
-            ['4',        'return 4;'],
-            ['foo()',    'return foo();'],
-            ['return 1', 'return 1;'],
-            ['',         'return new \Psy\CodeCleaner\NoReturnValue();'],
-        ];
-
-        $from = 'echo "foo";';
-        $to   = <<<'EOS'
-echo "foo";
-return new \Psy\CodeCleaner\NoReturnValue();
-EOS;
-        $data[] = [$from, $to];
-
-        $from = 'if (true) { 1; } elseif (true) { 2; } else { 3; }';
-        $to   = <<<'EOS'
-if (true) {
-    return 1;
-} elseif (true) {
-    return 2;
-} else {
-    return 3;
-}
-return new \Psy\CodeCleaner\NoReturnValue();
-EOS;
-        $data[] = [$from, $to];
-
-        $from = 'class A {}';
-        $to   = <<<'EOS'
-class A
-{
-}
-return new \Psy\CodeCleaner\NoReturnValue();
-EOS;
-        $data[] = [$from, $to];
-
-        $from = <<<'EOS'
-switch (false) {
-    case 0:
-        0;
-    case 1:
-        1;
-        break;
-    case 2:
-        2;
-        return;
-}
-EOS;
-        $to = <<<'EOS'
-switch (false) {
-    case 0:
-        0;
-    case 1:
-        return 1;
-        break;
-    case 2:
-        2;
-        return;
-}
-return new \Psy\CodeCleaner\NoReturnValue();
-EOS;
-        $data[] = [$from, $to];
-
-        $from = <<<'EOS'
-namespace Foo {
-    1 + 1;
-}
-EOS;
-        $to = <<<'EOS'
-namespace Foo;
-
-return 1 + 1;
-EOS;
-        $data[] = [$from, $to];
-
-        $data[] = ['exit()', 'exit;'];
-
-        return $data;
-    }
-}
diff --git a/vendor/psy/psysh/test/CodeCleaner/InstanceOfPassTest.php b/vendor/psy/psysh/test/CodeCleaner/InstanceOfPassTest.php
deleted file mode 100644
index b8c63313ed45bd65e6a0286a8812e3b939ce0bdd..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/test/CodeCleaner/InstanceOfPassTest.php
+++ /dev/null
@@ -1,72 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\CodeCleaner;
-
-use Psy\CodeCleaner\InstanceOfPass;
-
-class InstanceOfPassTest extends CodeCleanerTestCase
-{
-    protected function setUp()
-    {
-        $this->setPass(new InstanceOfPass());
-    }
-
-    /**
-     * @dataProvider invalidStatements
-     * @expectedException \Psy\Exception\FatalErrorException
-     */
-    public function testProcessInvalidStatement($code)
-    {
-        $this->parseAndTraverse($code);
-    }
-
-    public function invalidStatements()
-    {
-        return [
-            ['null instanceof stdClass'],
-            ['true instanceof stdClass'],
-            ['9 instanceof stdClass'],
-            ['1.0 instanceof stdClass'],
-            ['"foo" instanceof stdClass'],
-            ['__DIR__ instanceof stdClass'],
-            ['PHP_SAPI instanceof stdClass'],
-            ['1+1 instanceof stdClass'],
-            ['true && false instanceof stdClass'],
-            ['"a"."b" instanceof stdClass'],
-            ['!5 instanceof stdClass'],
-        ];
-    }
-
-    /**
-     * @dataProvider validStatements
-     */
-    public function testProcessValidStatement($code)
-    {
-        $this->parseAndTraverse($code);
-        $this->assertTrue(true);
-    }
-
-    public function validStatements()
-    {
-        $data = [
-            ['$a instanceof stdClass'],
-            ['strtolower("foo") instanceof stdClass'],
-            ['array(1) instanceof stdClass'],
-            ['(string) "foo" instanceof stdClass'],
-            ['(1+1) instanceof stdClass'],
-            ['"foo ${foo} $bar" instanceof stdClass'],
-            ['DateTime::ISO8601 instanceof stdClass'],
-        ];
-
-        return $data;
-    }
-}
diff --git a/vendor/psy/psysh/test/CodeCleaner/LeavePsyshAlonePassTest.php b/vendor/psy/psysh/test/CodeCleaner/LeavePsyshAlonePassTest.php
deleted file mode 100644
index 9df633e89a10ac705f86eb21ccd355f8bdeba042..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/test/CodeCleaner/LeavePsyshAlonePassTest.php
+++ /dev/null
@@ -1,69 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\CodeCleaner;
-
-use Psy\CodeCleaner\LeavePsyshAlonePass;
-
-class LeavePsyshAlonePassTest extends CodeCleanerTestCase
-{
-    public function setUp()
-    {
-        $this->setPass(new LeavePsyshAlonePass());
-    }
-
-    public function testPassesInlineHtmlThroughJustFine()
-    {
-        $inline = $this->parse('not php at all!', '');
-        $this->traverse($inline);
-        $this->assertTrue(true);
-    }
-
-    /**
-     * @dataProvider validStatements
-     */
-    public function testProcessStatementPasses($code)
-    {
-        $this->parseAndTraverse($code);
-        $this->assertTrue(true);
-    }
-
-    public function validStatements()
-    {
-        return [
-            ['array_merge()'],
-            ['__psysh__()'],
-            ['$this'],
-            ['$psysh'],
-            ['$__psysh'],
-            ['$banana'],
-        ];
-    }
-
-    /**
-     * @dataProvider invalidStatements
-     * @expectedException \Psy\Exception\RuntimeException
-     */
-    public function testProcessStatementFails($code)
-    {
-        $this->parseAndTraverse($code);
-    }
-
-    public function invalidStatements()
-    {
-        return [
-            ['$__psysh__'],
-            ['var_dump($__psysh__)'],
-            ['$__psysh__ = "your mom"'],
-            ['$__psysh__->fakeFunctionCall()'],
-        ];
-    }
-}
diff --git a/vendor/psy/psysh/test/CodeCleaner/LegacyEmptyPassTest.php b/vendor/psy/psysh/test/CodeCleaner/LegacyEmptyPassTest.php
deleted file mode 100644
index 5c4c7b0590a0fb9d4048e3da3e44a3de7c3f8d11..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/test/CodeCleaner/LegacyEmptyPassTest.php
+++ /dev/null
@@ -1,76 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\CodeCleaner;
-
-use Psy\CodeCleaner\LegacyEmptyPass;
-
-class LegacyEmptyPassTest extends CodeCleanerTestCase
-{
-    public function setUp()
-    {
-        $this->setPass(new LegacyEmptyPass());
-    }
-
-    /**
-     * @dataProvider invalidStatements
-     * @expectedException \Psy\Exception\ParseErrorException
-     */
-    public function testProcessInvalidStatement($code)
-    {
-        $this->parseAndTraverse($code);
-    }
-
-    public function invalidStatements()
-    {
-        if (\version_compare(PHP_VERSION, '5.5', '>=')) {
-            return [
-                ['empty()'],
-            ];
-        }
-
-        return [
-            ['empty()'],
-            ['empty(null)'],
-            ['empty(PHP_EOL)'],
-            ['empty("wat")'],
-            ['empty(1.1)'],
-            ['empty(Foo::$bar)'],
-        ];
-    }
-
-    /**
-     * @dataProvider validStatements
-     */
-    public function testProcessValidStatement($code)
-    {
-        $this->parseAndTraverse($code);
-        $this->assertTrue(true);
-    }
-
-    public function validStatements()
-    {
-        if (\version_compare(PHP_VERSION, '5.5', '<')) {
-            return [
-                ['empty($foo)'],
-            ];
-        }
-
-        return [
-            ['empty($foo)'],
-            ['empty(null)'],
-            ['empty(PHP_EOL)'],
-            ['empty("wat")'],
-            ['empty(1.1)'],
-            ['empty(Foo::$bar)'],
-        ];
-    }
-}
diff --git a/vendor/psy/psysh/test/CodeCleaner/ListPassTest.php b/vendor/psy/psysh/test/CodeCleaner/ListPassTest.php
deleted file mode 100644
index b7a360d69070cc782e7c5855636180a45515f746..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/test/CodeCleaner/ListPassTest.php
+++ /dev/null
@@ -1,115 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\CodeCleaner;
-
-use Psy\CodeCleaner\ListPass;
-
-class ListPassTest extends CodeCleanerTestCase
-{
-    public function setUp()
-    {
-        $this->setPass(new ListPass());
-    }
-
-    /**
-     * @dataProvider invalidStatements
-     * @expectedException \Psy\Exception\ParseErrorException
-     */
-    public function testProcessInvalidStatement($code, $expectedMessage)
-    {
-        if (\method_exists($this, 'setExpectedException')) {
-            $this->setExpectedException('Psy\Exception\ParseErrorException', $expectedMessage);
-        } else {
-            $this->expectExceptionMessage($expectedMessage);
-        }
-
-        $stmts = $this->parse($code);
-        $this->traverser->traverse($stmts);
-    }
-
-    public function invalidStatements()
-    {
-        // Not typo.  It is ambiguous whether "Syntax" or "syntax".
-        $errorShortListAssign = "yntax error, unexpected '='";
-        $errorEmptyList = 'Cannot use empty list';
-        $errorAssocListAssign = 'Syntax error, unexpected T_CONSTANT_ENCAPSED_STRING, expecting \',\' or \')\'';
-        $errorNonVariableAssign = 'Assignments can only happen to writable values';
-        $errorPhpParserSyntax = 'PHP Parse error: Syntax error, unexpected';
-
-        $invalidExpr = [
-            ['list() = array()', $errorEmptyList],
-            ['list("a") = array(1)', $errorPhpParserSyntax],
-        ];
-
-        if (\version_compare(PHP_VERSION, '7.1', '<')) {
-            return \array_merge($invalidExpr, [
-                ['list("a" => _) = array("a" => 1)', $errorPhpParserSyntax],
-                ['[] = []', $errorShortListAssign],
-                ['[$a] = [1]', $errorShortListAssign],
-                ['list("a" => $a) = array("a" => 1)', $errorAssocListAssign],
-                ['[$a[0], $a[1]] = [1, 2]', $errorShortListAssign],
-                ['[$a->b, $a->c] = [1, 2]', $errorShortListAssign],
-            ]);
-        }
-
-        return \array_merge($invalidExpr, [
-            ['list("a" => _) = array("a" => 1)', $errorPhpParserSyntax],
-            ['["a"] = [1]', $errorNonVariableAssign],
-            ['[] = []', $errorEmptyList],
-            ['[,] = [1,2]', $errorEmptyList],
-            ['[,,] = [1,2,3]', $errorEmptyList],
-        ]);
-    }
-
-    /**
-     * @dataProvider validStatements
-     */
-    public function testProcessValidStatement($code)
-    {
-        $stmts = $this->parse($code);
-        $this->traverser->traverse($stmts);
-        $this->assertTrue(true);
-    }
-
-    public function validStatements()
-    {
-        $validExpr = [
-            ['list($a) = array(1)'],
-            ['list($x, $y) = array(1, 2)'],
-        ];
-
-        if (\version_compare(PHP_VERSION, '7.1', '>=')) {
-            return \array_merge($validExpr, [
-                ['[$a] = array(1)'],
-                ['list($b) = [2]'],
-                ['[$x, $y] = array(1, 2)'],
-                ['[$a] = [1]'],
-                ['[$x, $y] = [1, 2]'],
-                ['["_" => $v] = ["_" => 1]'],
-                ['[$a,] = [1,2,3]'],
-                ['[,$b] = [1,2,3]'],
-                ['[$a,,$c] = [1,2,3]'],
-                ['[$a,,,] = [1,2,3]'],
-                ['[$a[0], $a[1]] = [1, 2]'],
-                ['[$a[0][0][0], $a[0][0][1]] = [1, 2]'],
-                ['[$a->b, $a->c] = [1, 2]'],
-                ['[$a->b[0], $a->c[1]] = [1, 2]'],
-                ['[$a[0]->b[0], $a[0]->c[1]] = [1, 2]'],
-                ['[$a[$b->c + $b->d]] = [1]'],
-                ['[$a->c()->d, $a->c()->e] = [1, 2]'],
-                ['[x()->a, x()->b] = [1, 2]'],
-            ]);
-        }
-
-        return $validExpr;
-    }
-}
diff --git a/vendor/psy/psysh/test/CodeCleaner/LoopContextPassTest.php b/vendor/psy/psysh/test/CodeCleaner/LoopContextPassTest.php
deleted file mode 100644
index 3b363068334a5e95801aba7c3651a7a3a4566d09..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/test/CodeCleaner/LoopContextPassTest.php
+++ /dev/null
@@ -1,108 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\CodeCleaner;
-
-use Psy\CodeCleaner\LoopContextPass;
-
-class LoopContextPassTest extends CodeCleanerTestCase
-{
-    public function setUp()
-    {
-        $this->setPass(new LoopContextPass());
-    }
-
-    /**
-     * @dataProvider invalidStatements
-     * @expectedException \Psy\Exception\FatalErrorException
-     */
-    public function testProcessStatementFails($code)
-    {
-        $this->parseAndTraverse($code);
-    }
-
-    public function invalidStatements()
-    {
-        return [
-            ['continue'],
-            ['break'],
-            ['if (true) { continue; }'],
-            ['if (true) { break; }'],
-            ['if (false) { continue; }'],
-            ['if (false) { break; }'],
-            ['function foo() { break; }'],
-            ['function foo() { continue; }'],
-
-            // actually enforce break/continue depth argument
-            ['do { break 2; } while (true)'],
-            ['do { continue 2; } while (true)'],
-            ['for ($a; $b; $c) { break 2; }'],
-            ['for ($a; $b; $c) { continue 2; }'],
-            ['foreach ($a as $b) { break 2; }'],
-            ['foreach ($a as $b) { continue 2; }'],
-            ['switch (true) { default: break 2; }'],
-            ['switch (true) { default: continue 2; }'],
-            ['while (true) { break 2; }'],
-            ['while (true) { continue 2; }'],
-
-            // In PHP 5.4+, only positive literal integers are allowed
-            ['while (true) { break $n; }'],
-            ['while (true) { continue $n; }'],
-            ['while (true) { break N; }'],
-            ['while (true) { continue N; }'],
-            ['while (true) { break 0; }'],
-            ['while (true) { continue 0; }'],
-            ['while (true) { break -1; }'],
-            ['while (true) { continue -1; }'],
-            ['while (true) { break 1.0; }'],
-            ['while (true) { continue 1.0; }'],
-            ['while (true) { break 2.0; }'],
-            ['while (true) { continue 2.0; }'],
-
-            // and once with nested loops, just for good measure
-            ['while (true) { while (true) { break 3; } }'],
-            ['while (true) { while (true) { continue 3; } }'],
-        ];
-    }
-
-    /**
-     * @dataProvider validStatements
-     */
-    public function testProcessStatementPasses($code)
-    {
-        $this->parseAndTraverse($code);
-        $this->assertTrue(true);
-    }
-
-    public function validStatements()
-    {
-        return [
-            ['do { break; } while (true)'],
-            ['do { continue; } while (true)'],
-            ['for ($a; $b; $c) { break; }'],
-            ['for ($a; $b; $c) { continue; }'],
-            ['foreach ($a as $b) { break; }'],
-            ['foreach ($a as $b) { continue; }'],
-            ['switch (true) { default: break; }'],
-            ['switch (true) { default: continue; }'],
-            ['while (true) { break; }'],
-            ['while (true) { continue; }'],
-
-            // `break 1` is redundant, but not invalid
-            ['while (true) { break 1; }'],
-            ['while (true) { continue 1; }'],
-
-            // and once with nested loops just for good measure
-            ['while (true) { while (true) { break 2; } }'],
-            ['while (true) { while (true) { continue 2; } }'],
-        ];
-    }
-}
diff --git a/vendor/psy/psysh/test/CodeCleaner/MagicConstantsPassTest.php b/vendor/psy/psysh/test/CodeCleaner/MagicConstantsPassTest.php
deleted file mode 100644
index 321ac6ff3ddec6bda5af20688d5d69ddb509044c..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/test/CodeCleaner/MagicConstantsPassTest.php
+++ /dev/null
@@ -1,39 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\CodeCleaner;
-
-use Psy\CodeCleaner\MagicConstantsPass;
-
-class MagicConstantsPassTest extends CodeCleanerTestCase
-{
-    public function setUp()
-    {
-        $this->setPass(new MagicConstantsPass());
-    }
-
-    /**
-     * @dataProvider magicConstants
-     */
-    public function testProcess($from, $to)
-    {
-        $this->assertProcessesAs($from, $to);
-    }
-
-    public function magicConstants()
-    {
-        return [
-            ['__DIR__;', 'getcwd();'],
-            ['__FILE__;', "'';"],
-            ['___FILE___;', '___FILE___;'],
-        ];
-    }
-}
diff --git a/vendor/psy/psysh/test/CodeCleaner/NamespacePassTest.php b/vendor/psy/psysh/test/CodeCleaner/NamespacePassTest.php
deleted file mode 100644
index e8f013961cb8694f74eac975f9050d880b9d0276..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/test/CodeCleaner/NamespacePassTest.php
+++ /dev/null
@@ -1,59 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\CodeCleaner;
-
-use Psy\CodeCleaner;
-use Psy\CodeCleaner\NamespacePass;
-
-class NamespacePassTest extends CodeCleanerTestCase
-{
-    private $cleaner;
-
-    public function setUp()
-    {
-        $this->cleaner = new CodeCleaner();
-        $this->setPass(new NamespacePass($this->cleaner));
-    }
-
-    public function testProcess()
-    {
-        $this->parseAndTraverse('');
-        $this->assertNull($this->cleaner->getNamespace());
-
-        $this->parseAndTraverse('array_merge()');
-        $this->assertNull($this->cleaner->getNamespace());
-
-        // A non-block namespace statement should set the current namespace.
-        $this->parseAndTraverse('namespace Alpha');
-        $this->assertSame(['Alpha'], $this->cleaner->getNamespace());
-
-        // A new non-block namespace statement should override the current namespace.
-        $this->parseAndTraverse('namespace Beta; class B {}');
-        $this->assertSame(['Beta'], $this->cleaner->getNamespace());
-
-        // A new block namespace clears out the current namespace...
-        $this->parseAndTraverse('namespace Gamma { array_merge(); }');
-
-        if (\defined('PhpParser\\Node\\Stmt\\Namespace_::KIND_SEMICOLON')) {
-            $this->assertNull($this->cleaner->getNamespace());
-        } else {
-            // But not for PHP-Parser < v3.1.2 :(
-            $this->assertSame(['Gamma'], $this->cleaner->getNamespace());
-        }
-
-        $this->parseAndTraverse('namespace Delta');
-
-        // A null namespace clears out the current namespace.
-        $this->parseAndTraverse('namespace { array_merge(); }');
-        $this->assertNull($this->cleaner->getNamespace());
-    }
-}
diff --git a/vendor/psy/psysh/test/CodeCleaner/NoReturnValueTest.php b/vendor/psy/psysh/test/CodeCleaner/NoReturnValueTest.php
deleted file mode 100644
index 11e9d013f460de7ed7b95656c027591938e80cd2..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/test/CodeCleaner/NoReturnValueTest.php
+++ /dev/null
@@ -1,32 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\CodeCleaner;
-
-use PhpParser\Node\Stmt\Expression;
-use Psy\CodeCleaner\NoReturnValue;
-use Psy\Test\ParserTestCase;
-
-class NoReturnValueTest extends ParserTestCase
-{
-    public function testCreate()
-    {
-        $stmt = NoReturnValue::create();
-        if (\class_exists('PhpParser\Node\Stmt\Expression')) {
-            $stmt = new Expression($stmt);
-        }
-
-        $this->assertSame(
-            $this->prettyPrint($this->parse('new \\Psy\CodeCleaner\\NoReturnValue()')),
-            $this->prettyPrint([$stmt])
-        );
-    }
-}
diff --git a/vendor/psy/psysh/test/CodeCleaner/PassableByReferencePassTest.php b/vendor/psy/psysh/test/CodeCleaner/PassableByReferencePassTest.php
deleted file mode 100644
index a73ad471f8e2afa3f7647f17091c1ff4c0f8f8d7..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/test/CodeCleaner/PassableByReferencePassTest.php
+++ /dev/null
@@ -1,104 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\CodeCleaner;
-
-use Psy\CodeCleaner\PassableByReferencePass;
-
-class PassableByReferencePassTest extends CodeCleanerTestCase
-{
-    public function setUp()
-    {
-        $this->setPass(new PassableByReferencePass());
-    }
-
-    /**
-     * @dataProvider invalidStatements
-     * @expectedException \Psy\Exception\FatalErrorException
-     */
-    public function testProcessStatementFails($code)
-    {
-        $this->parseAndTraverse($code);
-    }
-
-    public function invalidStatements()
-    {
-        return [
-            ['array_pop(array())'],
-            ['array_pop(array($foo))'],
-            ['array_shift(array())'],
-        ];
-    }
-
-    /**
-     * @dataProvider validStatements
-     */
-    public function testProcessStatementPasses($code)
-    {
-        $this->parseAndTraverse($code);
-        $this->assertTrue(true);
-    }
-
-    public function validStatements()
-    {
-        return [
-            ['array_pop(json_decode("[]"))'],
-            ['array_pop($foo)'],
-            ['array_pop($foo->bar)'],
-            ['array_pop($foo::baz)'],
-            ['array_pop(Foo::qux)'],
-        ];
-    }
-
-    /**
-     * @dataProvider validArrayMultisort
-     */
-    public function testArrayMultisort($code)
-    {
-        $this->parseAndTraverse($code);
-        $this->assertTrue(true);
-    }
-
-    public function validArrayMultisort()
-    {
-        return [
-            ['array_multisort($a)'],
-            ['array_multisort($a, $b)'],
-            ['array_multisort($a, SORT_NATURAL, $b)'],
-            ['array_multisort($a, SORT_NATURAL | SORT_FLAG_CASE, $b)'],
-            ['array_multisort($a, SORT_ASC, SORT_NATURAL | SORT_FLAG_CASE, $b)'],
-            ['array_multisort($a, SORT_NATURAL | SORT_FLAG_CASE, SORT_ASC, $b)'],
-            ['array_multisort($a, $b, SORT_ASC, SORT_NATURAL | SORT_FLAG_CASE)'],
-            ['array_multisort($a, SORT_NATURAL | SORT_FLAG_CASE, $b, SORT_ASC, SORT_NATURAL | SORT_FLAG_CASE)'],
-            ['array_multisort($a, 1, $b)'],
-            ['array_multisort($a, 1 + 2, $b)'],
-            ['array_multisort($a, getMultisortFlags(), $b)'],
-        ];
-    }
-
-    /**
-     * @dataProvider invalidArrayMultisort
-     * @expectedException \Psy\Exception\FatalErrorException
-     */
-    public function testInvalidArrayMultisort($code)
-    {
-        $this->parseAndTraverse($code);
-    }
-
-    public function invalidArrayMultisort()
-    {
-        return [
-            ['array_multisort(1)'],
-            ['array_multisort(array(1, 2, 3))'],
-            ['array_multisort($a, SORT_NATURAL, SORT_ASC, SORT_NATURAL, $b)'],
-        ];
-    }
-}
diff --git a/vendor/psy/psysh/test/CodeCleaner/RequirePassTest.php b/vendor/psy/psysh/test/CodeCleaner/RequirePassTest.php
deleted file mode 100644
index 6640e639b9a41c9c3ab975f3c8a583d7e36cb436..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/test/CodeCleaner/RequirePassTest.php
+++ /dev/null
@@ -1,93 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\CodeCleaner;
-
-use Psy\CodeCleaner\RequirePass;
-
-class RequirePassTest extends CodeCleanerTestCase
-{
-    public function setUp()
-    {
-        $this->setPass(new RequirePass());
-    }
-
-    /**
-     * @dataProvider exitStatements
-     */
-    public function testExitStatement($from, $to)
-    {
-        $this->assertProcessesAs($from, $to);
-    }
-
-    public function exitStatements()
-    {
-        $resolve = '\\Psy\\CodeCleaner\\RequirePass::resolve';
-
-        return [
-            // The basics
-            ['require "a"', "require $resolve(\"a\", 1);"],
-            ['require "b.php"', "require $resolve(\"b.php\", 1);"],
-            ['require_once "c"', "require_once $resolve(\"c\", 1);"],
-            ['require_once "d.php"', "require_once $resolve(\"d.php\", 1);"],
-
-            // Ensure that line numbers work correctly
-            ["null;\nrequire \"e.php\"", "null;\nrequire $resolve(\"e.php\", 2);"],
-            ["null;\nrequire_once \"f.php\"", "null;\nrequire_once $resolve(\"f.php\", 2);"],
-
-            // Things with expressions
-            ['require $foo', "require $resolve(\$foo, 1);"],
-            ['require_once $foo', "require_once $resolve(\$foo, 1);"],
-            ['require ($bar = "g.php")', "require $resolve(\$bar = \"g.php\", 1);"],
-            ['require_once ($bar = "h.php")', "require_once $resolve(\$bar = \"h.php\", 1);"],
-            ['$bar = require ($baz = "i.php")', "\$bar = (require $resolve(\$baz = \"i.php\", 1));"],
-            ['$bar = require_once ($baz = "j.php")', "\$bar = (require_once $resolve(\$baz = \"j.php\", 1));"],
-        ];
-    }
-
-    /**
-     * @expectedException \Psy\Exception\FatalErrorException
-     * @expectedExceptionMessage Failed opening required 'not a file name' in eval()'d code on line 2
-     */
-    public function testResolve()
-    {
-        RequirePass::resolve('not a file name', 2);
-    }
-
-    /**
-     * @dataProvider emptyWarnings
-     *
-     * @expectedException \Psy\Exception\ErrorException
-     * @expectedExceptionMessage Filename cannot be empty on line 1
-     */
-    public function testResolveEmptyWarnings($file)
-    {
-        if (!E_WARNING & \error_reporting()) {
-            $this->markTestSkipped();
-        }
-
-        RequirePass::resolve($file, 1);
-    }
-
-    public function emptyWarnings()
-    {
-        return [
-            [null],
-            [false],
-            [''],
-        ];
-    }
-
-    public function testResolveWorks()
-    {
-        $this->assertEquals(__FILE__, RequirePass::resolve(__FILE__, 3));
-    }
-}
diff --git a/vendor/psy/psysh/test/CodeCleaner/StrictTypesPassTest.php b/vendor/psy/psysh/test/CodeCleaner/StrictTypesPassTest.php
deleted file mode 100644
index 54186190d5b5f420fd9b319ce1bfc6d77c866b88..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/test/CodeCleaner/StrictTypesPassTest.php
+++ /dev/null
@@ -1,52 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\CodeCleaner;
-
-use Psy\CodeCleaner\StrictTypesPass;
-
-class StrictTypesPassTest extends CodeCleanerTestCase
-{
-    public function setUp()
-    {
-        if (\version_compare(PHP_VERSION, '7.0', '<')) {
-            $this->markTestSkipped();
-        }
-
-        $this->setPass(new StrictTypesPass());
-    }
-
-    public function testProcess()
-    {
-        $this->assertProcessesAs('declare(strict_types=1)', 'declare (strict_types=1);');
-        $this->assertProcessesAs('null', "declare (strict_types=1);\nnull;");
-        $this->assertProcessesAs('declare(strict_types=0)', 'declare (strict_types=0);');
-        $this->assertProcessesAs('null', 'null;');
-    }
-
-    /**
-     * @dataProvider invalidDeclarations
-     * @expectedException \Psy\Exception\FatalErrorException
-     */
-    public function testInvalidDeclarations($code)
-    {
-        $this->parseAndTraverse($code);
-    }
-
-    public function invalidDeclarations()
-    {
-        return [
-            ['declare(strict_types=-1)'],
-            ['declare(strict_types=2)'],
-            ['declare(strict_types="foo")'],
-        ];
-    }
-}
diff --git a/vendor/psy/psysh/test/CodeCleaner/UseStatementPassTest.php b/vendor/psy/psysh/test/CodeCleaner/UseStatementPassTest.php
deleted file mode 100644
index 4d5ac3420d69aa90d5cf4c100383ec1a145eb03c..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/test/CodeCleaner/UseStatementPassTest.php
+++ /dev/null
@@ -1,102 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\CodeCleaner;
-
-use Psy\CodeCleaner\UseStatementPass;
-
-class UseStatementPassTest extends CodeCleanerTestCase
-{
-    public function setUp()
-    {
-        $this->setPass(new UseStatementPass());
-    }
-
-    /**
-     * @dataProvider useStatements
-     */
-    public function testProcess($from, $to)
-    {
-        $this->assertProcessesAs($from, $to);
-    }
-
-    public function useStatements()
-    {
-        return [
-            [
-                "use StdClass as NotSoStd;\n\$std = new NotSoStd();",
-                '$std = new \\StdClass();',
-            ],
-            [
-                "namespace Foo;\n\nuse StdClass as S;\n\$std = new S();",
-                "namespace Foo;\n\n\$std = new \\StdClass();",
-            ],
-            [
-                "namespace Foo;\n\nuse \\StdClass as S;\n\$std = new S();",
-                "namespace Foo;\n\n\$std = new \\StdClass();",
-            ],
-            [
-                "use Foo\\Bar as fb;\n\$baz = new fb\\Baz();",
-                '$baz = new \\Foo\\Bar\\Baz();',
-            ],
-            [
-                "use Foo\\Bar;\n\$baz = new Bar\\Baz();",
-                '$baz = new \\Foo\\Bar\\Baz();',
-            ],
-            [
-                "namespace Foo;\nuse Bar;\n\$baz = new Bar\\Baz();",
-                "namespace Foo;\n\n\$baz = new \\Bar\\Baz();",
-            ],
-            [
-                "namespace Foo;\n\nuse \\StdClass as S;\n\$std = new S();\nnamespace Foo;\n\n\$std = new S();",
-                "namespace Foo;\n\n\$std = new \\StdClass();\nnamespace Foo;\n\n\$std = new \\StdClass();",
-            ],
-            [
-                "namespace Foo;\n\nuse \\StdClass as S;\n\$std = new S();\nnamespace Bar;\n\n\$std = new S();",
-                "namespace Foo;\n\n\$std = new \\StdClass();\nnamespace Bar;\n\n\$std = new S();",
-            ],
-            [
-                "use Foo\\Bar as fb, Qux as Q;\n\$baz = new fb\\Baz();\n\$qux = new Q();",
-                "\$baz = new \\Foo\\Bar\\Baz();\n\$qux = new \\Qux();",
-            ],
-        ];
-    }
-
-    /**
-     * @dataProvider groupUseStatements
-     */
-    public function testGroupUseProcess($from, $to)
-    {
-        $this->assertProcessesAs($from, $to);
-    }
-
-    public function groupUseStatements()
-    {
-        if (\version_compare(PHP_VERSION, '7.0', '<')) {
-            $this->markTestSkipped();
-        }
-
-        return [
-            [
-                "use Foo\\{Bar, Baz, Qux as Q};\n\$bar = new Bar();\n\$baz = new Baz();\n\$qux = new Q();",
-                "\$bar = new \\Foo\\Bar();\n\$baz = new \\Foo\\Baz();\n\$qux = new \\Foo\\Qux();",
-            ],
-            [
-                "use X\\{Foo, Bar as B};\n\$foo = new Foo();\n\$baz = new B\\Baz();",
-                "\$foo = new \\X\\Foo();\n\$baz = new \\X\\Bar\\Baz();",
-            ],
-            [
-                "use X\\{Foo, Bar as B};\n\$foo = new Foo();\n\$bar = new Bar();\n\$baz = new B\\Baz();",
-                "\$foo = new \\X\\Foo();\n\$bar = new Bar();\n\$baz = new \\X\\Bar\\Baz();",
-            ],
-        ];
-    }
-}
diff --git a/vendor/psy/psysh/test/CodeCleaner/ValidClassNamePassTest.php b/vendor/psy/psysh/test/CodeCleaner/ValidClassNamePassTest.php
deleted file mode 100644
index 2d9ed60b5813080095a645cab36d0b347b4383cf..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/test/CodeCleaner/ValidClassNamePassTest.php
+++ /dev/null
@@ -1,325 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\CodeCleaner;
-
-use Psy\CodeCleaner\ValidClassNamePass;
-
-class ValidClassNamePassTest extends CodeCleanerTestCase
-{
-    public function setUp()
-    {
-        $this->setPass(new ValidClassNamePass());
-    }
-
-    /**
-     * @dataProvider getInvalid
-     * @expectedException \Psy\Exception\FatalErrorException
-     */
-    public function testProcessInvalid($code)
-    {
-        $this->parseAndTraverse($code);
-    }
-
-    public function getInvalid()
-    {
-        // class declarations
-        return [
-            // core class
-            ['class stdClass {}'],
-            // capitalization
-            ['class stdClass {}'],
-
-            // collisions with interfaces and traits
-            ['interface stdClass {}'],
-            ['trait stdClass {}'],
-
-            // collisions inside the same code snippet
-            ['
-                class Psy_Test_CodeCleaner_ValidClassNamePass_Alpha {}
-                class Psy_Test_CodeCleaner_ValidClassNamePass_Alpha {}
-            '],
-            ['
-                class Psy_Test_CodeCleaner_ValidClassNamePass_Alpha {}
-                trait Psy_Test_CodeCleaner_ValidClassNamePass_Alpha {}
-            '],
-            ['
-                trait Psy_Test_CodeCleaner_ValidClassNamePass_Alpha {}
-                class Psy_Test_CodeCleaner_ValidClassNamePass_Alpha {}
-            '],
-            ['
-                trait Psy_Test_CodeCleaner_ValidClassNamePass_Alpha {}
-                interface Psy_Test_CodeCleaner_ValidClassNamePass_Alpha {}
-            '],
-            ['
-                interface Psy_Test_CodeCleaner_ValidClassNamePass_Alpha {}
-                trait Psy_Test_CodeCleaner_ValidClassNamePass_Alpha {}
-            '],
-            ['
-                interface Psy_Test_CodeCleaner_ValidClassNamePass_Alpha {}
-                class Psy_Test_CodeCleaner_ValidClassNamePass_Alpha {}
-            '],
-            ['
-                class Psy_Test_CodeCleaner_ValidClassNamePass_Alpha {}
-                interface Psy_Test_CodeCleaner_ValidClassNamePass_Alpha {}
-            '],
-
-            // namespaced collisions
-            ['
-                namespace Psy\\Test\\CodeCleaner {
-                    class ValidClassNamePassTest {}
-                }
-            '],
-            ['
-                namespace Psy\\Test\\CodeCleaner\\ValidClassNamePass {
-                    class Beta {}
-                }
-                namespace Psy\\Test\\CodeCleaner\\ValidClassNamePass {
-                    class Beta {}
-                }
-            '],
-
-            // extends and implements
-            ['class ValidClassNamePassTest extends NotAClass {}'],
-            ['class ValidClassNamePassTest extends ArrayAccess {}'],
-            ['class ValidClassNamePassTest implements stdClass {}'],
-            ['class ValidClassNamePassTest implements ArrayAccess, stdClass {}'],
-            ['interface ValidClassNamePassTest extends stdClass {}'],
-            ['interface ValidClassNamePassTest extends ArrayAccess, stdClass {}'],
-
-            // class instantiations
-            ['new Psy_Test_CodeCleaner_ValidClassNamePass_Gamma();'],
-            ['
-                namespace Psy\\Test\\CodeCleaner\\ValidClassNamePass {
-                    new Psy_Test_CodeCleaner_ValidClassNamePass_Delta();
-                }
-            '],
-
-            // class constant fetch
-            ['Psy\\Test\\CodeCleaner\\ValidClassNamePass\\NotAClass::FOO'],
-
-            // static call
-            ['Psy\\Test\\CodeCleaner\\ValidClassNamePass\\NotAClass::foo()'],
-            ['Psy\\Test\\CodeCleaner\\ValidClassNamePass\\NotAClass::$foo()'],
-            ['Psy\\Test\\CodeCleaner\\ValidClassNamePassTest::notAMethod()'],
-        ];
-    }
-
-    /**
-     * @dataProvider getValid
-     */
-    public function testProcessValid($code)
-    {
-        $this->parseAndTraverse($code);
-        $this->assertTrue(true);
-    }
-
-    public function getValid()
-    {
-        $valid = [
-            // class declarations
-            ['class Psy_Test_CodeCleaner_ValidClassNamePass_Epsilon {}'],
-            ['namespace Psy\Test\CodeCleaner\ValidClassNamePass; class Zeta {}'],
-            ['
-                namespace { class Psy_Test_CodeCleaner_ValidClassNamePass_Eta {}; }
-                namespace Psy\\Test\\CodeCleaner\\ValidClassNamePass {
-                    class Psy_Test_CodeCleaner_ValidClassNamePass_Eta {}
-                }
-            '],
-            ['namespace Psy\Test\CodeCleaner\ValidClassNamePass { class stdClass {} }'],
-
-            // class instantiations
-            ['new stdClass();'],
-            ['new stdClass();'],
-            ['
-                namespace Psy\\Test\\CodeCleaner\\ValidClassNamePass {
-                    class Theta {}
-                }
-                namespace Psy\\Test\\CodeCleaner\\ValidClassNamePass {
-                    new Theta();
-                }
-            '],
-            ['
-                namespace Psy\\Test\\CodeCleaner\\ValidClassNamePass {
-                    class Iota {}
-                    new Iota();
-                }
-            '],
-            ['
-                namespace Psy\\Test\\CodeCleaner\\ValidClassNamePass {
-                    class Kappa {}
-                }
-                namespace {
-                    new \\Psy\\Test\\CodeCleaner\\ValidClassNamePass\\Kappa();
-                }
-            '],
-
-            // Class constant fetch (ValidConstantPassTest validates the actual constant)
-            ['class A {} A::FOO'],
-            ['$a = new DateTime; $a::ATOM'],
-            ['interface A { const B = 1; } A::B'],
-
-            // static call
-            ['DateTime::createFromFormat()'],
-            ['DateTime::$someMethod()'],
-            ['Psy\Test\CodeCleaner\Fixtures\ClassWithStatic::doStuff()'],
-            ['Psy\Test\CodeCleaner\Fixtures\ClassWithCallStatic::doStuff()'],
-            ['Psy\Test\CodeCleaner\Fixtures\TraitWithStatic::doStuff()'],
-
-            // Allow `self` and `static` as class names.
-            ['
-                class Psy_Test_CodeCleaner_ValidClassNamePass_ClassWithStatic {
-                    public static function getInstance() {
-                        return new self();
-                    }
-                }
-            '],
-            ['
-                class Psy_Test_CodeCleaner_ValidClassNamePass_ClassWithStatic {
-                    public static function getInstance() {
-                        return new SELF();
-                    }
-                }
-            '],
-            ['
-                class Psy_Test_CodeCleaner_ValidClassNamePass_ClassWithStatic {
-                    public static function getInstance() {
-                        return new self;
-                    }
-                }
-            '],
-            ['
-                class Psy_Test_CodeCleaner_ValidClassNamePass_ClassWithStatic {
-                    public static function getInstance() {
-                        return new static();
-                    }
-                }
-            '],
-            ['
-                class Psy_Test_CodeCleaner_ValidClassNamePass_ClassWithStatic {
-                    public static function getInstance() {
-                        return new Static();
-                    }
-                }
-            '],
-            ['
-                class Psy_Test_CodeCleaner_ValidClassNamePass_ClassWithStatic {
-                    public static function getInstance() {
-                        return new static;
-                    }
-                }
-            '],
-            ['
-                class Psy_Test_CodeCleaner_ValidClassNamePass_ClassWithStatic {
-                    public static function foo() {
-                        return parent::bar();
-                    }
-                }
-            '],
-            ['
-                class Psy_Test_CodeCleaner_ValidClassNamePass_ClassWithStatic {
-                    public static function foo() {
-                        return self::bar();
-                    }
-                }
-            '],
-            ['
-                class Psy_Test_CodeCleaner_ValidClassNamePass_ClassWithStatic {
-                    public static function foo() {
-                        return static::bar();
-                    }
-                }
-            '],
-
-            ['class A { static function b() { return new A; } }'],
-            ['
-                class A {
-                    const B = 123;
-                    function c() {
-                        return A::B;
-                    }
-                }
-            '],
-            ['class A {} class B { function c() { return new A; } }'],
-
-            // recursion
-            ['class A { function a() { A::a(); } }'],
-
-            // conditionally defined classes
-            ['
-                class A {}
-                if (false) {
-                    class A {}
-                }
-            '],
-            ['
-                class A {}
-                if (true) {
-                    class A {}
-                } else if (false) {
-                    class A {}
-                } else {
-                    class A {}
-                }
-            '],
-            // ewww
-            ['
-                class A {}
-                if (true):
-                    class A {}
-                elseif (false):
-                    class A {}
-                else:
-                    class A {}
-                endif;
-            '],
-            ['
-                class A {}
-                while (false) { class A {} }
-            '],
-            ['
-                class A {}
-                do { class A {} } while (false);
-            '],
-            ['
-                class A {}
-                switch (1) {
-                    case 0:
-                        class A {}
-                        break;
-                    case 1:
-                        class A {}
-                        break;
-                    case 2:
-                        class A {}
-                        break;
-                }
-            '],
-        ];
-
-        // Ugh. There's gotta be a better way to test for this.
-        if (\class_exists('PhpParser\ParserFactory')) {
-            // PHP 7.0 anonymous classes, only supported by PHP Parser v2.x
-            $valid[] = ['$obj = new class() {}'];
-        }
-
-        if (\version_compare(PHP_VERSION, '5.5', '>=')) {
-            $valid[] = ['interface A {} A::class'];
-            $valid[] = ['interface A {} A::CLASS'];
-            $valid[] = ['class A {} A::class'];
-            $valid[] = ['class A {} A::CLASS'];
-            $valid[] = ['A::class'];
-            $valid[] = ['A::CLASS'];
-        }
-
-        return $valid;
-    }
-}
diff --git a/vendor/psy/psysh/test/CodeCleaner/ValidConstantPassTest.php b/vendor/psy/psysh/test/CodeCleaner/ValidConstantPassTest.php
deleted file mode 100644
index a6c52e0419d8f5c8f52e86b98191a294c82a0f55..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/test/CodeCleaner/ValidConstantPassTest.php
+++ /dev/null
@@ -1,65 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\CodeCleaner;
-
-use Psy\CodeCleaner\ValidConstantPass;
-
-class ValidConstantPassTest extends CodeCleanerTestCase
-{
-    public function setUp()
-    {
-        $this->setPass(new ValidConstantPass());
-    }
-
-    /**
-     * @dataProvider getInvalidReferences
-     * @expectedException \Psy\Exception\FatalErrorException
-     */
-    public function testProcessInvalidConstantReferences($code)
-    {
-        $this->parseAndTraverse($code);
-    }
-
-    public function getInvalidReferences()
-    {
-        return [
-            ['Foo\BAR'],
-
-            // class constant fetch
-            ['Psy\Test\CodeCleaner\ValidConstantPassTest::FOO'],
-            ['DateTime::BACON'],
-        ];
-    }
-
-    /**
-     * @dataProvider getValidReferences
-     */
-    public function testProcessValidConstantReferences($code)
-    {
-        $this->parseAndTraverse($code);
-        $this->assertTrue(true);
-    }
-
-    public function getValidReferences()
-    {
-        return [
-            ['PHP_EOL'],
-
-            // class constant fetch
-            ['NotAClass::FOO'],
-            ['DateTime::ATOM'],
-            ['$a = new DateTime; $a::ATOM'],
-            ['DateTime::class'],
-            ['$a = new DateTime; $a::class'],
-        ];
-    }
-}
diff --git a/vendor/psy/psysh/test/CodeCleaner/ValidConstructorPassTest.php b/vendor/psy/psysh/test/CodeCleaner/ValidConstructorPassTest.php
deleted file mode 100644
index 4f7e40c44181eaa740814e2321669b78a6727eb0..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/test/CodeCleaner/ValidConstructorPassTest.php
+++ /dev/null
@@ -1,93 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\CodeCleaner;
-
-use Psy\CodeCleaner\ValidConstructorPass;
-
-class ValidConstructorPassTest extends CodeCleanerTestCase
-{
-    protected function setUp()
-    {
-        $this->setPass(new ValidConstructorPass());
-    }
-
-    /**
-     * @dataProvider invalidStatements
-     * @expectedException \Psy\Exception\FatalErrorException
-     */
-    public function testProcessInvalidStatement($code)
-    {
-        $this->parseAndTraverse($code);
-    }
-
-    /**
-     * @dataProvider invalidParserStatements
-     * @expectedException \Psy\Exception\ParseErrorException
-     */
-    public function testProcessInvalidStatementCatchedByParser($code)
-    {
-        $this->parseAndTraverse($code);
-    }
-
-    public function invalidStatements()
-    {
-        $data = [
-            ['class A { public static function A() {}}'],
-            ['class A { public static function a() {}}'],
-            ['class A { private static function A() {}}'],
-            ['class A { private static function a() {}}'],
-        ];
-
-        if (\version_compare(PHP_VERSION, '7.0', '>=')) {
-            $data[] = ['class A { public function A(): ?array {}}'];
-            $data[] = ['class A { public function a(): ?array {}}'];
-        }
-
-        return $data;
-    }
-
-    public function invalidParserStatements()
-    {
-        return [
-            ['class A { public static function __construct() {}}'],
-            ['class A { private static function __construct() {}}'],
-            ['class A { private static function __construct() {} public function A() {}}'],
-            ['namespace B; class A { private static function __construct() {}}'],
-        ];
-    }
-
-    /**
-     * @dataProvider validStatements
-     */
-    public function testProcessValidStatement($code)
-    {
-        $this->parseAndTraverse($code);
-        $this->assertTrue(true);
-    }
-
-    public function validStatements()
-    {
-        $data = [
-            ['class A { public static function A() {} public function __construct() {}}'],
-            ['class A { private function __construct() {} public static function A() {}}'],
-            ['namespace B; class A { private static function A() {}}'],
-        ];
-
-        if (\version_compare(PHP_VERSION, '7.0', '>=')) {
-            $data[] = ['class A { public static function A() {} public function __construct() {}}'];
-            $data[] = ['class A { private function __construct() {} public static function A(): ?array {}}'];
-            $data[] = ['namespace B; class A { private static function A(): ?array {}}'];
-        }
-
-        return $data;
-    }
-}
diff --git a/vendor/psy/psysh/test/CodeCleaner/ValidFunctionNamePassTest.php b/vendor/psy/psysh/test/CodeCleaner/ValidFunctionNamePassTest.php
deleted file mode 100644
index 70a17315d8c609ed7e4ac99b78c79effd2eb04b4..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/test/CodeCleaner/ValidFunctionNamePassTest.php
+++ /dev/null
@@ -1,180 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\CodeCleaner;
-
-use Psy\CodeCleaner\ValidFunctionNamePass;
-
-class ValidFunctionNamePassTest extends CodeCleanerTestCase
-{
-    public function setUp()
-    {
-        $this->setPass(new ValidFunctionNamePass());
-    }
-
-    /**
-     * @dataProvider getInvalidFunctions
-     * @expectedException \Psy\Exception\FatalErrorException
-     */
-    public function testProcessInvalidFunctionCallsAndDeclarations($code)
-    {
-        $this->parseAndTraverse($code);
-    }
-
-    public function getInvalidFunctions()
-    {
-        return [
-            // function declarations
-            ['function array_merge() {}'],
-            ['function Array_Merge() {}'],
-            ['
-                function psy_test_codecleaner_validfunctionnamepass_alpha() {}
-                function psy_test_codecleaner_validfunctionnamepass_alpha() {}
-            '],
-            ['
-                namespace Psy\\Test\\CodeCleaner\\ValidFunctionNamePass {
-                    function beta() {}
-                }
-                namespace Psy\\Test\\CodeCleaner\\ValidFunctionNamePass {
-                    function beta() {}
-                }
-            '],
-
-            // function calls
-            ['psy_test_codecleaner_validfunctionnamepass_gamma()'],
-            ['
-                namespace Psy\\Test\\CodeCleaner\\ValidFunctionNamePass {
-                    delta();
-                }
-            '],
-
-            // recursion
-            ['function a() { a(); } function a() {}'],
-        ];
-    }
-
-    /**
-     * @dataProvider getValidFunctions
-     */
-    public function testProcessValidFunctionCallsAndDeclarations($code)
-    {
-        $this->parseAndTraverse($code);
-        $this->assertTrue(true);
-    }
-
-    public function getValidFunctions()
-    {
-        return [
-            ['function psy_test_codecleaner_validfunctionnamepass_epsilon() {}'],
-            ['
-                namespace Psy\\Test\\CodeCleaner\\ValidFunctionNamePass {
-                    function zeta() {}
-                }
-            '],
-            ['
-                namespace {
-                    function psy_test_codecleaner_validfunctionnamepass_eta() {}
-                }
-                namespace Psy\\Test\\CodeCleaner\\ValidFunctionNamePass {
-                    function psy_test_codecleaner_validfunctionnamepass_eta() {}
-                }
-            '],
-            ['
-                namespace Psy\\Test\\CodeCleaner\\ValidFunctionNamePass {
-                    function psy_test_codecleaner_validfunctionnamepass_eta() {}
-                }
-                namespace {
-                    function psy_test_codecleaner_validfunctionnamepass_eta() {}
-                }
-            '],
-            ['
-                namespace Psy\\Test\\CodeCleaner\\ValidFunctionNamePass {
-                    function array_merge() {}
-                }
-            '],
-
-            // function calls
-            ['array_merge();'],
-            ['
-                namespace Psy\\Test\\CodeCleaner\\ValidFunctionNamePass {
-                    function theta() {}
-                }
-                namespace Psy\\Test\\CodeCleaner\\ValidFunctionNamePass {
-                    theta();
-                }
-            '],
-            // closures
-            ['$test = function(){};$test()'],
-            ['
-                namespace Psy\\Test\\CodeCleaner\\ValidFunctionNamePass {
-                    function theta() {}
-                }
-                namespace {
-                    Psy\\Test\\CodeCleaner\\ValidFunctionNamePass\\theta();
-                }
-            '],
-
-            // recursion
-            ['function a() { a(); }'],
-
-            // conditionally defined functions
-            ['
-                function a() {}
-                if (false) {
-                    function a() {}
-                }
-            '],
-            ['
-                function a() {}
-                if (true) {
-                    function a() {}
-                } else if (false) {
-                    function a() {}
-                } else {
-                    function a() {}
-                }
-            '],
-            // ewww
-            ['
-                function a() {}
-                if (true):
-                    function a() {}
-                elseif (false):
-                    function a() {}
-                else:
-                    function a() {}
-                endif;
-            '],
-            ['
-                function a() {}
-                while (false) { function a() {} }
-            '],
-            ['
-                function a() {}
-                do { function a() {} } while (false);
-            '],
-            ['
-                function a() {}
-                switch (1) {
-                    case 0:
-                        function a() {}
-                        break;
-                    case 1:
-                        function a() {}
-                        break;
-                    case 2:
-                        function a() {}
-                        break;
-                }
-            '],
-        ];
-    }
-}
diff --git a/vendor/psy/psysh/test/CodeCleanerTest.php b/vendor/psy/psysh/test/CodeCleanerTest.php
deleted file mode 100644
index 2195a4ff874b48b953d58302bac363ee470967f5..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/test/CodeCleanerTest.php
+++ /dev/null
@@ -1,131 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test;
-
-use Psy\CodeCleaner;
-
-class CodeCleanerTest extends \PHPUnit\Framework\TestCase
-{
-    /**
-     * @dataProvider semicolonCodeProvider
-     */
-    public function testAutomaticSemicolons(array $lines, $requireSemicolons, $expected)
-    {
-        $cc = new CodeCleaner();
-        $this->assertSame($expected, $cc->clean($lines, $requireSemicolons));
-    }
-
-    public function semicolonCodeProvider()
-    {
-        return [
-            [['true'],  false, 'return true;'],
-            [['true;'], false, 'return true;'],
-            [['true;'], true,  'return true;'],
-            [['true'],  true,  false],
-
-            [['echo "foo";', 'true'], true,  false],
-
-            [['echo "foo";', 'true'], false, "echo \"foo\";\nreturn true;"],
-        ];
-    }
-
-    /**
-     * @dataProvider unclosedStatementsProvider
-     */
-    public function testUnclosedStatements(array $lines, $isUnclosed)
-    {
-        $cc  = new CodeCleaner();
-        $res = $cc->clean($lines);
-
-        if ($isUnclosed) {
-            $this->assertFalse($res);
-        } else {
-            $this->assertNotFalse($res);
-        }
-    }
-
-    public function unclosedStatementsProvider()
-    {
-        return [
-            [['echo "'],   true],
-            [['echo \''],  true],
-            [['if (1) {'], true],
-
-            [['echo "foo",'], true],
-
-            [['echo ""'],   false],
-            [["echo ''"],   false],
-            [['if (1) {}'], false],
-
-            [['// closed comment'],    false],
-            [['function foo() { /**'], true],
-
-            [['var_dump(1, 2,'], true],
-            [['var_dump(1, 2,', '3)'], false],
-        ];
-    }
-
-    /**
-     * @dataProvider moreUnclosedStatementsProvider
-     */
-    public function testMoreUnclosedStatements(array $lines)
-    {
-        if (\defined('HHVM_VERSION')) {
-            $this->markTestSkipped('HHVM not supported.');
-        }
-
-        $cc  = new CodeCleaner();
-        $res = $cc->clean($lines);
-
-        $this->assertFalse($res);
-    }
-
-    public function moreUnclosedStatementsProvider()
-    {
-        return [
-            [["\$content = <<<EOS\n"]],
-            [["\$content = <<<'EOS'\n"]],
-
-            [['/* unclosed comment']],
-            [['/** unclosed comment']],
-        ];
-    }
-
-    /**
-     * @dataProvider invalidStatementsProvider
-     * @expectedException \Psy\Exception\ParseErrorException
-     */
-    public function testInvalidStatementsThrowParseErrors($code)
-    {
-        $cc = new CodeCleaner();
-        $cc->clean([$code]);
-    }
-
-    public function invalidStatementsProvider()
-    {
-        // n.b. We used to check that `var_dump(1,2,)` failed, but PHP Parser
-        // 4.x backported trailing comma function calls from PHP 7.3 for free!
-        // so we're not going to spend too much time worrying about it :)
-
-        return [
-            ['function "what'],
-            ["function 'what"],
-            ['echo }'],
-            ['echo {'],
-            ['if (1) }'],
-            ['echo """'],
-            ["echo '''"],
-            ['$foo "bar'],
-            ['$foo \'bar'],
-        ];
-    }
-}
diff --git a/vendor/psy/psysh/test/Command/ExitCommandTest.php b/vendor/psy/psysh/test/Command/ExitCommandTest.php
deleted file mode 100644
index 45626be2ca3fb76b7a5d708ddbe75cc2924389f5..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/test/Command/ExitCommandTest.php
+++ /dev/null
@@ -1,29 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Console\Tests\Command;
-
-use Psy\Command\ExitCommand;
-use Symfony\Component\Console\Tester\CommandTester;
-
-class ExitCommandTest extends \PHPUnit\Framework\TestCase
-{
-    /**
-     * @expectedException \Psy\Exception\BreakException
-     * @expectedExceptionMessage Goodbye
-     */
-    public function testExecute()
-    {
-        $command = new ExitCommand();
-        $tester = new CommandTester($command);
-        $tester->execute([]);
-    }
-}
diff --git a/vendor/psy/psysh/test/Command/ThrowUpCommandTest.php b/vendor/psy/psysh/test/Command/ThrowUpCommandTest.php
deleted file mode 100644
index 511c5809c2b66e9f5294edbcc398800c9b4b055a..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/test/Command/ThrowUpCommandTest.php
+++ /dev/null
@@ -1,89 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Console\Tests\Command;
-
-use Psy\Command\ThrowUpCommand;
-use Psy\Shell;
-use Symfony\Component\Console\Tester\CommandTester;
-
-class ThrowUpCommandTest extends \PHPUnit\Framework\TestCase
-{
-    /**
-     * @dataProvider executeThis
-     */
-    public function testExecute($args, $hasCode, $expect, $addSilent = true)
-    {
-        $shell = $this->getMockBuilder('Psy\\Shell')
-            ->setMethods(['hasCode', 'addCode'])
-            ->getMock();
-
-        $shell->expects($this->once())->method('hasCode')->willReturn($hasCode);
-        $shell->expects($this->once())
-            ->method('addCode')
-            ->with($this->equalTo($expect), $this->equalTo($addSilent));
-
-        $command = new ThrowUpCommand();
-        $command->setApplication($shell);
-        $tester = new CommandTester($command);
-        $tester->execute($args);
-        $this->assertEquals('', $tester->getDisplay());
-    }
-
-    public function executeThis()
-    {
-        $throw = 'throw \Psy\Exception\ThrowUpException::fromThrowable';
-
-        return [
-            [[], false, $throw . '($_e);'],
-
-            [['exception' => '$ex'], false, $throw . '($ex);'],
-            [['exception' => 'getException()'], false, $throw . '(getException());'],
-            [['exception' => 'new \\Exception("WAT")'], false, $throw . '(new \\Exception("WAT"));'],
-
-            [['exception' => '\'some string\''], false, $throw . '(new \\Exception(\'some string\'));'],
-            [['exception' => '"WHEEEEEEE!"'], false, $throw . '(new \\Exception("WHEEEEEEE!"));'],
-
-            // Everything should work with or without semicolons.
-            [['exception' => '$ex;'], false, $throw . '($ex);'],
-            [['exception' => '"WHEEEEEEE!";'], false, $throw . '(new \\Exception("WHEEEEEEE!"));'],
-
-            // Don't add as silent code if we've already got code.
-            [[], true, $throw . '($_e);', false],
-            [['exception' => 'getException()'], true, $throw . '(getException());', false],
-            [['exception' => '\'some string\''], true, $throw . '(new \\Exception(\'some string\'));', false],
-        ];
-    }
-
-    /**
-     * @expectedException \InvalidArgumentException
-     * @expectedExceptionMessage No idea how to throw this
-     */
-    public function testMultipleArgsThrowsException()
-    {
-        $command = new ThrowUpCommand();
-        $command->setApplication(new Shell());
-        $tester = new CommandTester($command);
-        $tester->execute(['exception' => 'foo(); bar()']);
-    }
-
-    /**
-     * @expectedException \PhpParser\Error
-     * @expectedExceptionMessage Syntax error, unexpected ')' on line 1
-     */
-    public function testParseErrorThrowsException()
-    {
-        $command = new ThrowUpCommand();
-        $command->setApplication(new Shell());
-        $tester = new CommandTester($command);
-        $tester->execute(['exception' => 'foo)']);
-    }
-}
diff --git a/vendor/psy/psysh/test/Command/TimeitCommand/TimeitVisitorTest.php b/vendor/psy/psysh/test/Command/TimeitCommand/TimeitVisitorTest.php
deleted file mode 100644
index 1f317350eed17ba4d6aaf744ce16ce50709650b1..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/test/Command/TimeitCommand/TimeitVisitorTest.php
+++ /dev/null
@@ -1,52 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\Command\TimeitCommand;
-
-use PhpParser\NodeTraverser;
-use Psy\Command\TimeitCommand\TimeitVisitor;
-use Psy\Test\ParserTestCase;
-
-class TimeitVisitorTest extends ParserTestCase
-{
-    public function setUp()
-    {
-        $this->traverser = new NodeTraverser();
-        $this->traverser->addVisitor(new TimeitVisitor());
-    }
-
-    /**
-     * @dataProvider codez
-     */
-    public function testProcess($from, $to)
-    {
-        $this->assertProcessesAs($from, $to);
-    }
-
-    public function codez()
-    {
-        $start = '\Psy\Command\TimeitCommand::markStart';
-        $end = '\Psy\Command\TimeitCommand::markEnd';
-        $noReturn = 'new \Psy\CodeCleaner\NoReturnValue()';
-
-        return [
-            ['', "$end($start());"], // heh
-            ['a()', "$start(); $end(a());"],
-            ['$b()', "$start(); $end(\$b());"],
-            ['$c->d()', "$start(); $end(\$c->d());"],
-            ['e(); f()', "$start(); e(); $end(f());"],
-            ['function g() { return 1; }', "$start(); function g() {return 1;} $end($noReturn);"],
-            ['return 1', "$start(); return $end(1);"],
-            ['return 1; 2', "$start(); return $end(1); $end(2);"],
-            ['return 1; function h() {}', "$start(); return $end(1); function h() {} $end($noReturn);"],
-        ];
-    }
-}
diff --git a/vendor/psy/psysh/test/ConfigurationTest.php b/vendor/psy/psysh/test/ConfigurationTest.php
deleted file mode 100644
index b7b6c0c0133e9c3029e5af77fdeb9a8a7d4e3a63..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/test/ConfigurationTest.php
+++ /dev/null
@@ -1,256 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test;
-
-use Psy\CodeCleaner;
-use Psy\Configuration;
-use Psy\Output\PassthruPager;
-use Psy\VersionUpdater\GitHubChecker;
-use Symfony\Component\Console\Output\ConsoleOutput;
-
-class ConfigurationTest extends \PHPUnit\Framework\TestCase
-{
-    private function getConfig($configFile = null)
-    {
-        return new Configuration([
-            'configFile' => $configFile ?: __DIR__ . '/fixtures/empty.php',
-        ]);
-    }
-
-    public function testDefaults()
-    {
-        $config = $this->getConfig();
-
-        $this->assertSame(\function_exists('readline'), $config->hasReadline());
-        $this->assertSame(\function_exists('readline'), $config->useReadline());
-        $this->assertSame(\function_exists('pcntl_signal'), $config->hasPcntl());
-        $this->assertSame(\function_exists('pcntl_signal'), $config->usePcntl());
-        $this->assertFalse($config->requireSemicolons());
-        $this->assertSame(Configuration::COLOR_MODE_AUTO, $config->colorMode());
-        $this->assertNull($config->getStartupMessage());
-    }
-
-    public function testGettersAndSetters()
-    {
-        $config = $this->getConfig();
-
-        $this->assertNull($config->getDataDir());
-        $config->setDataDir('wheee');
-        $this->assertSame('wheee', $config->getDataDir());
-
-        $this->assertNull($config->getConfigDir());
-        $config->setConfigDir('wheee');
-        $this->assertSame('wheee', $config->getConfigDir());
-    }
-
-    /**
-     * @dataProvider directories
-     */
-    public function testFilesAndDirectories($home, $configFile, $historyFile, $manualDbFile)
-    {
-        $oldHome = \getenv('HOME');
-        \putenv("HOME=$home");
-
-        $config = new Configuration();
-        $this->assertSame(\realpath($configFile),   \realpath($config->getConfigFile()));
-        $this->assertSame(\realpath($historyFile),  \realpath($config->getHistoryFile()));
-        $this->assertSame(\realpath($manualDbFile), \realpath($config->getManualDbFile()));
-
-        \putenv("HOME=$oldHome");
-    }
-
-    public function directories()
-    {
-        $base = \realpath(__DIR__ . '/fixtures');
-
-        return [
-            [
-                $base . '/default',
-                $base . '/default/.config/psysh/config.php',
-                $base . '/default/.config/psysh/psysh_history',
-                $base . '/default/.local/share/psysh/php_manual.sqlite',
-            ],
-            [
-                $base . '/legacy',
-                $base . '/legacy/.psysh/rc.php',
-                $base . '/legacy/.psysh/history',
-                $base . '/legacy/.psysh/php_manual.sqlite',
-            ],
-            [
-                $base . '/mixed',
-                $base . '/mixed/.psysh/config.php',
-                $base . '/mixed/.psysh/psysh_history',
-                null,
-            ],
-        ];
-    }
-
-    public function testLoadConfig()
-    {
-        $config  = $this->getConfig();
-        $cleaner = new CodeCleaner();
-        $pager   = new PassthruPager(new ConsoleOutput());
-
-        $config->loadConfig([
-            'useReadline'       => false,
-            'usePcntl'          => false,
-            'codeCleaner'       => $cleaner,
-            'pager'             => $pager,
-            'requireSemicolons' => true,
-            'errorLoggingLevel' => E_ERROR | E_WARNING,
-            'colorMode'         => Configuration::COLOR_MODE_FORCED,
-            'startupMessage'    => 'Psysh is awesome!',
-        ]);
-
-        $this->assertFalse($config->useReadline());
-        $this->assertFalse($config->usePcntl());
-        $this->assertSame($cleaner, $config->getCodeCleaner());
-        $this->assertSame($pager, $config->getPager());
-        $this->assertTrue($config->requireSemicolons());
-        $this->assertSame(E_ERROR | E_WARNING, $config->errorLoggingLevel());
-        $this->assertSame(Configuration::COLOR_MODE_FORCED, $config->colorMode());
-        $this->assertSame('Psysh is awesome!', $config->getStartupMessage());
-    }
-
-    public function testLoadConfigFile()
-    {
-        $config = $this->getConfig(__DIR__ . '/fixtures/config.php');
-
-        $runtimeDir = $this->joinPath(\realpath(\sys_get_temp_dir()), 'psysh_test', 'withconfig', 'temp');
-
-        $this->assertStringStartsWith($runtimeDir, \realpath($config->getTempFile('foo', 123)));
-        $this->assertStringStartsWith($runtimeDir, \realpath(\dirname($config->getPipe('pipe', 123))));
-        $this->assertStringStartsWith($runtimeDir, \realpath($config->getRuntimeDir()));
-
-        $this->assertSame(\function_exists('readline'), $config->useReadline());
-        $this->assertFalse($config->usePcntl());
-        $this->assertSame(E_ALL & ~E_NOTICE, $config->errorLoggingLevel());
-    }
-
-    public function testLoadLocalConfigFile()
-    {
-        $oldPwd = \getcwd();
-        \chdir(\realpath(__DIR__ . '/fixtures/project/'));
-
-        $config = new Configuration();
-
-        // When no configuration file is specified local project config is merged
-        $this->assertTrue($config->requireSemicolons());
-        $this->assertFalse($config->useUnicode());
-
-        $config = new Configuration(['configFile' => __DIR__ . '/fixtures/config.php']);
-
-        // Defining a configuration file skips loading local project config
-        $this->assertFalse($config->requireSemicolons());
-        $this->assertTrue($config->useUnicode());
-
-        \chdir($oldPwd);
-    }
-
-    /**
-     * @expectedException \Psy\Exception\DeprecatedException
-     */
-    public function testBaseDirConfigIsDeprecated()
-    {
-        $config = new Configuration(['baseDir' => 'fake']);
-    }
-
-    private function joinPath()
-    {
-        return \implode(DIRECTORY_SEPARATOR, \func_get_args());
-    }
-
-    public function testConfigIncludes()
-    {
-        $config = new Configuration([
-            'defaultIncludes' => ['/file.php'],
-            'configFile'      => __DIR__ . '/fixtures/empty.php',
-        ]);
-
-        $includes = $config->getDefaultIncludes();
-        $this->assertCount(1, $includes);
-        $this->assertSame('/file.php', $includes[0]);
-    }
-
-    public function testGetOutput()
-    {
-        $config = $this->getConfig();
-        $output = $config->getOutput();
-
-        $this->assertInstanceOf('Psy\Output\ShellOutput', $output);
-    }
-
-    public function getOutputDecoratedProvider()
-    {
-        return [
-            'auto' => [
-                null,
-                Configuration::COLOR_MODE_AUTO,
-            ],
-            'forced' => [
-                true,
-                Configuration::COLOR_MODE_FORCED,
-            ],
-            'disabled' => [
-                false,
-                Configuration::COLOR_MODE_DISABLED,
-            ],
-        ];
-    }
-
-    /** @dataProvider getOutputDecoratedProvider */
-    public function testGetOutputDecorated($expectation, $colorMode)
-    {
-        $config = $this->getConfig();
-        $config->setColorMode($colorMode);
-
-        $this->assertSame($expectation, $config->getOutputDecorated());
-    }
-
-    public function setColorModeValidProvider()
-    {
-        return [
-            'auto'     => [Configuration::COLOR_MODE_AUTO],
-            'forced'   => [Configuration::COLOR_MODE_FORCED],
-            'disabled' => [Configuration::COLOR_MODE_DISABLED],
-        ];
-    }
-
-    /** @dataProvider setColorModeValidProvider */
-    public function testSetColorModeValid($colorMode)
-    {
-        $config = $this->getConfig();
-        $config->setColorMode($colorMode);
-
-        $this->assertSame($colorMode, $config->colorMode());
-    }
-
-    /**
-     * @expectedException \InvalidArgumentException
-     * @expectedExceptionMessage invalid color mode: some invalid mode
-     */
-    public function testSetColorModeInvalid()
-    {
-        $config = $this->getConfig();
-        $config->setColorMode('some invalid mode');
-    }
-
-    public function testSetCheckerValid()
-    {
-        $config  = $this->getConfig();
-        $checker = new GitHubChecker();
-
-        $config->setChecker($checker);
-
-        $this->assertSame($checker, $config->getChecker());
-    }
-}
diff --git a/vendor/psy/psysh/test/ConsoleColorFactoryTest.php b/vendor/psy/psysh/test/ConsoleColorFactoryTest.php
deleted file mode 100644
index d58a48d3699f068895e31c53b73106bc81152859..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/test/ConsoleColorFactoryTest.php
+++ /dev/null
@@ -1,51 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test;
-
-use Psy\Configuration;
-use Psy\ConsoleColorFactory;
-
-class ConsoleColorFactoryTest extends \PHPUnit\Framework\TestCase
-{
-    public function testGetConsoleColorAuto()
-    {
-        $colorMode = Configuration::COLOR_MODE_AUTO;
-        $factory   = new ConsoleColorFactory($colorMode);
-        $colors    = $factory->getConsoleColor();
-        $themes    = $colors->getThemes();
-
-        $this->assertFalse($colors->isStyleForced());
-        $this->assertSame(['blue'], $themes['line_number']);
-    }
-
-    public function testGetConsoleColorForced()
-    {
-        $colorMode = Configuration::COLOR_MODE_FORCED;
-        $factory   = new ConsoleColorFactory($colorMode);
-        $colors    = $factory->getConsoleColor();
-        $themes    = $colors->getThemes();
-
-        $this->assertTrue($colors->isStyleForced());
-        $this->assertSame(['blue'], $themes['line_number']);
-    }
-
-    public function testGetConsoleColorDisabled()
-    {
-        $colorMode = Configuration::COLOR_MODE_DISABLED;
-        $factory   = new ConsoleColorFactory($colorMode);
-        $colors    = $factory->getConsoleColor();
-        $themes    = $colors->getThemes();
-
-        $this->assertFalse($colors->isStyleForced());
-        $this->assertSame(['none'], $themes['line_number']);
-    }
-}
diff --git a/vendor/psy/psysh/test/ContextTest.php b/vendor/psy/psysh/test/ContextTest.php
deleted file mode 100644
index d19370367016089c97cf80462f0a4fc44a9271ba..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/test/ContextTest.php
+++ /dev/null
@@ -1,325 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test;
-
-use Psy\Context;
-
-class ContextTest extends \PHPUnit\Framework\TestCase
-{
-    public function testGet()
-    {
-        $this->assertTrue(true);
-    }
-
-    public function testGetAll()
-    {
-        $this->assertTrue(true);
-    }
-
-    public function testGetSpecialVariables()
-    {
-        $context = new Context();
-
-        $this->assertNull($context->get('_'));
-        $this->assertNull($context->getReturnValue());
-
-        $this->assertEquals(['_' => null], $context->getAll());
-
-        $e = new \Exception('eeeeeee');
-        $obj = new \StdClass();
-        $context->setLastException($e);
-        $context->setLastStdout('out');
-        $context->setBoundObject($obj);
-
-        $context->setCommandScopeVariables([
-            '__function'  => 'function',
-            '__method'    => 'method',
-            '__class'     => 'class',
-            '__namespace' => 'namespace',
-            '__file'      => 'file',
-            '__line'      => 'line',
-            '__dir'       => 'dir',
-        ]);
-
-        $expected = [
-            '_'           => null,
-            '_e'          => $e,
-            '__out'       => 'out',
-            'this'        => $obj,
-            '__function'  => 'function',
-            '__method'    => 'method',
-            '__class'     => 'class',
-            '__namespace' => 'namespace',
-            '__file'      => 'file',
-            '__line'      => 'line',
-            '__dir'       => 'dir',
-        ];
-
-        $this->assertEquals($expected, $context->getAll());
-    }
-
-    public function testSetAll()
-    {
-        $context = new Context();
-
-        $baz = new \StdClass();
-        $vars = [
-            'foo' => 'Foo',
-            'bar' => 123,
-            'baz' => $baz,
-
-            '_'         => 'fail',
-            '_e'        => 'fail',
-            '__out'     => 'fail',
-            'this'      => 'fail',
-            '__psysh__' => 'fail',
-
-            '__function'  => 'fail',
-            '__method'    => 'fail',
-            '__class'     => 'fail',
-            '__namespace' => 'fail',
-            '__file'      => 'fail',
-            '__line'      => 'fail',
-            '__dir'       => 'fail',
-        ];
-
-        $context->setAll($vars);
-
-        $this->assertEquals('Foo', $context->get('foo'));
-        $this->assertEquals(123, $context->get('bar'));
-        $this->assertSame($baz, $context->get('baz'));
-
-        $this->assertEquals(['foo' => 'Foo', 'bar' => 123, 'baz' => $baz, '_' => null], $context->getAll());
-    }
-
-    /**
-     * @dataProvider specialNames
-     * @expectedException \InvalidArgumentException
-     * @expectedExceptionMessageRegEx /Unknown variable: \$\w+/
-     */
-    public function testSetAllDoesNotSetSpecial($name)
-    {
-        $context = new Context();
-        $context->setAll([$name => 'fail']);
-        $context->get($name);
-    }
-
-    public function specialNames()
-    {
-        return [
-            ['_e'],
-            ['__out'],
-            ['this'],
-            ['__psysh__'],
-            ['__function'],
-            ['__method'],
-            ['__class'],
-            ['__namespace'],
-            ['__file'],
-            ['__line'],
-            ['__dir'],
-        ];
-    }
-
-    public function testReturnValue()
-    {
-        $context = new Context();
-        $this->assertNull($context->getReturnValue());
-
-        $val = 'some string';
-        $context->setReturnValue($val);
-        $this->assertEquals($val, $context->getReturnValue());
-        $this->assertEquals($val, $context->get('_'));
-
-        $obj = new \StdClass();
-        $context->setReturnValue($obj);
-        $this->assertSame($obj, $context->getReturnValue());
-        $this->assertSame($obj, $context->get('_'));
-
-        $context->setReturnValue(null);
-        $this->assertNull($context->getReturnValue());
-    }
-
-    public function testLastException()
-    {
-        $context = new Context();
-        $e = new \Exception('wat');
-        $context->setLastException($e);
-        $this->assertSame($e, $context->getLastException());
-        $this->assertSame($e, $context->get('_e'));
-    }
-
-    /**
-     * @expectedException \InvalidArgumentException
-     * @expectedExceptionMessage No most-recent exception
-     */
-    public function testLastExceptionThrowsSometimes()
-    {
-        $context = new Context();
-        $context->getLastException();
-    }
-
-    public function testLastStdout()
-    {
-        $context = new Context();
-        $context->setLastStdout('ouuuuut');
-        $this->assertEquals('ouuuuut', $context->getLastStdout());
-        $this->assertEquals('ouuuuut', $context->get('__out'));
-    }
-
-    /**
-     * @expectedException \InvalidArgumentException
-     * @expectedExceptionMessage No most-recent output
-     */
-    public function testLastStdoutThrowsSometimes()
-    {
-        $context = new Context();
-        $context->getLastStdout();
-    }
-
-    public function testBoundObject()
-    {
-        $context = new Context();
-        $this->assertNull($context->getBoundObject());
-
-        $obj = new \StdClass();
-        $context->setBoundObject($obj);
-        $this->assertSame($obj, $context->getBoundObject());
-        $this->assertSame($obj, $context->get('this'));
-
-        $context->setBoundObject(null);
-        $this->assertNull($context->getBoundObject());
-    }
-
-    /**
-     * @expectedException \InvalidArgumentException
-     * @expectedExceptionMessage Unknown variable: $this
-     */
-    public function testBoundObjectThrowsSometimes()
-    {
-        $context = new Context();
-        $context->get('this');
-    }
-
-    public function testBoundClass()
-    {
-        $context = new Context();
-        $this->assertNull($context->getBoundClass());
-
-        $context->setBoundClass('');
-        $this->assertNull($context->getBoundClass());
-
-        $context->setBoundClass('Psy\Shell');
-        $this->assertEquals('Psy\Shell', $context->getBoundClass());
-
-        $context->setBoundObject(new \StdClass());
-        $this->assertNotNull($context->getBoundObject());
-        $this->assertNull($context->getBoundClass());
-
-        $context->setBoundClass('Psy\Shell');
-        $this->assertEquals('Psy\Shell', $context->getBoundClass());
-        $this->assertNull($context->getBoundObject());
-
-        $context->setBoundClass(null);
-        $this->assertNull($context->getBoundClass());
-        $this->assertNull($context->getBoundObject());
-    }
-
-    public function testCommandScopeVariables()
-    {
-        $__function  = 'donkey';
-        $__method    = 'diddy';
-        $__class     = 'cranky';
-        $__namespace = 'funky';
-        $__file      = 'candy';
-        $__line      = 'dixie';
-        $__dir       = 'wrinkly';
-
-        $vars = \compact('__function', '__method', '__class', '__namespace', '__file', '__line', '__dir');
-
-        $context = new Context();
-        $context->setCommandScopeVariables($vars);
-
-        $this->assertEquals($vars, $context->getCommandScopeVariables());
-
-        $this->assertEquals($__function, $context->get('__function'));
-        $this->assertEquals($__method, $context->get('__method'));
-        $this->assertEquals($__class, $context->get('__class'));
-        $this->assertEquals($__namespace, $context->get('__namespace'));
-        $this->assertEquals($__file, $context->get('__file'));
-        $this->assertEquals($__line, $context->get('__line'));
-        $this->assertEquals($__dir, $context->get('__dir'));
-
-        $someVars = \compact('__function', '__namespace', '__file', '__line', '__dir');
-        $context->setCommandScopeVariables($someVars);
-    }
-
-    public function testGetUnusedCommandScopeVariableNames()
-    {
-        $context = new Context();
-
-        $this->assertEquals(
-            ['__function', '__method', '__class', '__namespace', '__file', '__line', '__dir'],
-            $context->getUnusedCommandScopeVariableNames()
-        );
-
-        $context->setCommandScopeVariables([
-            '__function'  => 'foo',
-            '__namespace' => 'bar',
-            '__file'      => 'baz',
-            '__line'      => 123,
-            '__dir'       => 'qux',
-        ]);
-
-        $this->assertEquals(
-            ['__method', '__class'],
-            \array_values($context->getUnusedCommandScopeVariableNames())
-        );
-    }
-
-    /**
-     * @dataProvider specialAndNotSpecialVariableNames
-     */
-    public function testIsSpecialVariableName($name, $isSpecial)
-    {
-        $context = new Context();
-
-        if ($isSpecial) {
-            $this->assertTrue($context->isSpecialVariableName($name));
-        } else {
-            $this->assertFalse($context->isSpecialVariableName($name));
-        }
-    }
-
-    public function specialAndNotSpecialVariableNames()
-    {
-        return [
-            ['foo', false],
-            ['psysh', false],
-            ['__psysh', false],
-
-            ['_', true],
-            ['_e', true],
-            ['__out', true],
-            ['this', true],
-            ['__psysh__', true],
-
-            ['__function', true],
-            ['__method', true],
-            ['__class', true],
-            ['__namespace', true],
-            ['__file', true],
-            ['__line', true],
-            ['__dir', true],
-        ];
-    }
-}
diff --git a/vendor/psy/psysh/test/Exception/BreakExceptionTest.php b/vendor/psy/psysh/test/Exception/BreakExceptionTest.php
deleted file mode 100644
index ae39fb1f488673680edd89b244825529c96fcac2..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/test/Exception/BreakExceptionTest.php
+++ /dev/null
@@ -1,42 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\Exception;
-
-use Psy\Exception\BreakException;
-
-class BreakExceptionTest extends \PHPUnit\Framework\TestCase
-{
-    public function testInstance()
-    {
-        $e = new BreakException();
-
-        $this->assertInstanceOf('Psy\Exception\Exception', $e);
-        $this->assertInstanceOf('Psy\Exception\BreakException', $e);
-    }
-
-    public function testMessage()
-    {
-        $e = new BreakException('foo');
-
-        $this->assertContains('foo', $e->getMessage());
-        $this->assertSame('foo', $e->getRawMessage());
-    }
-
-    /**
-     * @expectedException \Psy\Exception\BreakException
-     * @expectedExceptionMessage Goodbye
-     */
-    public function testExitShell()
-    {
-        BreakException::exitShell();
-    }
-}
diff --git a/vendor/psy/psysh/test/Exception/ErrorExceptionTest.php b/vendor/psy/psysh/test/Exception/ErrorExceptionTest.php
deleted file mode 100644
index ef9fb9ab4da92e56921a169f51bbc5b4f64228c0..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/test/Exception/ErrorExceptionTest.php
+++ /dev/null
@@ -1,125 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\Exception;
-
-use Psy\Exception\ErrorException;
-
-class ErrorExceptionTest extends \PHPUnit\Framework\TestCase
-{
-    public function testInstance()
-    {
-        $e = new ErrorException();
-
-        $this->assertInstanceOf('Psy\Exception\Exception', $e);
-        $this->assertInstanceOf('ErrorException', $e);
-        $this->assertInstanceOf('Psy\Exception\ErrorException', $e);
-    }
-
-    public function testMessage()
-    {
-        $e = new ErrorException('foo');
-
-        $this->assertContains('foo', $e->getMessage());
-        $this->assertSame('foo', $e->getRawMessage());
-    }
-
-    /**
-     * @dataProvider getLevels
-     */
-    public function testErrorLevels($level, $type)
-    {
-        $e = new ErrorException('foo', 0, $level);
-        $this->assertContains('PHP ' . $type, $e->getMessage());
-    }
-
-    /**
-     * @dataProvider getLevels
-     */
-    public function testThrowException($level, $type)
-    {
-        try {
-            ErrorException::throwException($level, '{whot}', '{file}', '13');
-        } catch (ErrorException $e) {
-            $this->assertContains('PHP ' . $type, $e->getMessage());
-            $this->assertContains('{whot}', $e->getMessage());
-            $this->assertContains('in {file}', $e->getMessage());
-            $this->assertContains('on line 13', $e->getMessage());
-        }
-    }
-
-    public function getLevels()
-    {
-        return [
-            [E_WARNING,           'Warning'],
-            [E_CORE_WARNING,      'Warning'],
-            [E_COMPILE_WARNING,   'Warning'],
-            [E_USER_WARNING,      'Warning'],
-            [E_STRICT,            'Strict error'],
-            [E_DEPRECATED,        'Deprecated'],
-            [E_USER_DEPRECATED,   'Deprecated'],
-            [E_RECOVERABLE_ERROR, 'Recoverable fatal error'],
-            [0,                   'Error'],
-        ];
-    }
-
-    /**
-     * @dataProvider getUserLevels
-     */
-    public function testThrowExceptionAsErrorHandler($level, $type)
-    {
-        \set_error_handler(['Psy\Exception\ErrorException', 'throwException']);
-        try {
-            \trigger_error('{whot}', $level);
-        } catch (ErrorException $e) {
-            $this->assertContains('PHP ' . $type, $e->getMessage());
-            $this->assertContains('{whot}', $e->getMessage());
-        }
-        \restore_error_handler();
-    }
-
-    public function getUserLevels()
-    {
-        return [
-            [E_USER_ERROR,      'Error'],
-            [E_USER_WARNING,    'Warning'],
-            [E_USER_NOTICE,     'Notice'],
-            [E_USER_DEPRECATED, 'Deprecated'],
-        ];
-    }
-
-    public function testIgnoreExecutionLoopFilename()
-    {
-        $e = new ErrorException('{{message}}', 0, 1, '/fake/path/to/Psy/ExecutionLoop.php');
-        $this->assertEmpty($e->getFile());
-
-        $e = new ErrorException('{{message}}', 0, 1, 'c:\fake\path\to\Psy\ExecutionLoop.php');
-        $this->assertEmpty($e->getFile());
-
-        $e = new ErrorException('{{message}}', 0, 1, '/fake/path/to/Psy/File.php');
-        $this->assertNotEmpty($e->getFile());
-    }
-
-    public function testFromError()
-    {
-        if (\version_compare(PHP_VERSION, '7.0.0', '<')) {
-            $this->markTestSkipped();
-        }
-
-        $error = new \Error('{{message}}', 0);
-        $exception = ErrorException::fromError($error);
-
-        $this->assertContains('PHP Error:  {{message}}', $exception->getMessage());
-        $this->assertEquals(0, $exception->getCode());
-        $this->assertEquals($error->getFile(), $exception->getFile());
-        $this->assertSame($exception->getPrevious(), $error);
-    }
-}
diff --git a/vendor/psy/psysh/test/Exception/FatalErrorExceptionTest.php b/vendor/psy/psysh/test/Exception/FatalErrorExceptionTest.php
deleted file mode 100644
index 36c7dd8c11cab5340bcf031483be21b85f5e3d09..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/test/Exception/FatalErrorExceptionTest.php
+++ /dev/null
@@ -1,51 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\Exception;
-
-use Psy\Exception\FatalErrorException;
-
-class FatalErrorExceptionTest extends \PHPUnit\Framework\TestCase
-{
-    public function testInstance()
-    {
-        $e = new FatalErrorException();
-
-        $this->assertInstanceOf('Psy\Exception\Exception', $e);
-        $this->assertInstanceOf('ErrorException', $e);
-        $this->assertInstanceOf('Psy\Exception\FatalErrorException', $e);
-    }
-
-    public function testMessage()
-    {
-        $e = new FatalErrorException('{msg}', 0, 0, '{filename}', 13);
-
-        $this->assertSame('{msg}', $e->getRawMessage());
-        $this->assertContains('{msg}', $e->getMessage());
-        $this->assertContains('{filename}', $e->getMessage());
-        $this->assertContains('line 13', $e->getMessage());
-    }
-
-    public function testMessageWithNoFilename()
-    {
-        $e = new FatalErrorException('{msg}');
-
-        $this->assertSame('{msg}', $e->getRawMessage());
-        $this->assertContains('{msg}', $e->getMessage());
-        $this->assertContains('eval()\'d code', $e->getMessage());
-    }
-
-    public function testNegativeOneLineNumberIgnored()
-    {
-        $e = new FatalErrorException('{msg}', 0, 1, null, -1);
-        $this->assertEquals(0, $e->getLine());
-    }
-}
diff --git a/vendor/psy/psysh/test/Exception/ParseErrorExceptionTest.php b/vendor/psy/psysh/test/Exception/ParseErrorExceptionTest.php
deleted file mode 100644
index 446b9389c4dd8097b921f9f0f3d24017971a0499..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/test/Exception/ParseErrorExceptionTest.php
+++ /dev/null
@@ -1,42 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\Exception;
-
-use Psy\Exception\ParseErrorException;
-
-class ParseErrorExceptionTest extends \PHPUnit\Framework\TestCase
-{
-    public function testInstance()
-    {
-        $e = new ParseErrorException();
-
-        $this->assertInstanceOf('Psy\Exception\Exception', $e);
-        $this->assertInstanceOf('PhpParser\Error', $e);
-        $this->assertInstanceOf('Psy\Exception\ParseErrorException', $e);
-    }
-
-    public function testMessage()
-    {
-        $e = new ParseErrorException('{msg}', 1);
-
-        $this->assertContains('{msg}', $e->getMessage());
-        $this->assertContains('PHP Parse error:', $e->getMessage());
-    }
-
-    public function testConstructFromParseError()
-    {
-        $e = ParseErrorException::fromParseError(new \PhpParser\Error('{msg}'));
-
-        $this->assertContains('{msg}', $e->getRawMessage());
-        $this->assertContains('PHP Parse error:', $e->getMessage());
-    }
-}
diff --git a/vendor/psy/psysh/test/Exception/RuntimeExceptionTest.php b/vendor/psy/psysh/test/Exception/RuntimeExceptionTest.php
deleted file mode 100644
index 1121ea4e5b0ab203e6706ea95722362b074a8f00..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/test/Exception/RuntimeExceptionTest.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\Exception;
-
-use Psy\Exception\RuntimeException;
-
-class RuntimeExceptionTest extends \PHPUnit\Framework\TestCase
-{
-    public function testException()
-    {
-        $msg = 'bananas';
-        $e   = new RuntimeException($msg);
-
-        $this->assertInstanceOf('Psy\Exception\Exception', $e);
-        $this->assertInstanceOf('RuntimeException', $e);
-        $this->assertInstanceOf('Psy\Exception\RuntimeException', $e);
-
-        $this->assertSame($msg, $e->getMessage());
-        $this->assertSame($msg, $e->getRawMessage());
-    }
-}
diff --git a/vendor/psy/psysh/test/Exception/ThrowUpExceptionTest.php b/vendor/psy/psysh/test/Exception/ThrowUpExceptionTest.php
deleted file mode 100644
index 09c33732408d7845b69f7b1fa3a9ddbb7ad2693c..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/test/Exception/ThrowUpExceptionTest.php
+++ /dev/null
@@ -1,66 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\Exception;
-
-use Psy\Exception\ThrowUpException;
-
-class ThrowUpExceptionTest extends \PHPUnit\Framework\TestCase
-{
-    public function testException()
-    {
-        $previous = new \Exception('{{message}}', 123);
-        $e = new ThrowUpException($previous);
-
-        $this->assertInstanceOf('Psy\Exception\Exception', $e);
-        $this->assertInstanceOf('Psy\Exception\ThrowUpException', $e);
-
-        $this->assertEquals("Throwing Exception with message '{{message}}'", $e->getMessage());
-        $this->assertEquals('{{message}}', $e->getRawMessage());
-        $this->assertEquals(123, $e->getCode());
-        $this->assertSame($previous, $e->getPrevious());
-    }
-
-    public function testFromThrowable()
-    {
-        $previous = new \Exception('{{message}}');
-        $e = ThrowUpException::fromThrowable($previous);
-
-        $this->assertInstanceOf('Psy\Exception\ThrowUpException', $e);
-        $this->assertSame($previous, $e->getPrevious());
-    }
-
-    public function testFromThrowableWithError()
-    {
-        if (\version_compare(PHP_VERSION, '7.0.0', '<')) {
-            $this->markTestSkipped();
-        }
-
-        $previous = new \Error('{{message}}');
-        $e = ThrowUpException::fromThrowable($previous);
-
-        $this->assertInstanceOf('Psy\Exception\ThrowUpException', $e);
-        $this->assertInstanceOf('Psy\Exception\ErrorException', $e->getPrevious());
-
-        $this->assertNotSame($previous, $e->getPrevious());
-        $this->assertSame($previous, $e->getPrevious()->getPrevious());
-    }
-
-    /**
-     * @expectedException \InvalidArgumentException
-     * @expectedExceptionMessage throw-up can only throw Exceptions and Errors
-     */
-    public function testFromThrowableThrowsError()
-    {
-        $notThrowable = new \StdClass();
-        ThrowUpException::fromThrowable($notThrowable);
-    }
-}
diff --git a/vendor/psy/psysh/test/Exception/TypeErrorExceptionTest.php b/vendor/psy/psysh/test/Exception/TypeErrorExceptionTest.php
deleted file mode 100644
index 01f251bb88c9a7cb635b13121676d35363a7399d..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/test/Exception/TypeErrorExceptionTest.php
+++ /dev/null
@@ -1,52 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\Exception;
-
-use Psy\Exception\TypeErrorException;
-
-class TypeErrorExceptionTest extends \PHPUnit\Framework\TestCase
-{
-    public function testException()
-    {
-        $e = new TypeErrorException('{{message}}', 13);
-
-        $this->assertInstanceOf('Psy\Exception\Exception', $e);
-        $this->assertInstanceOf('Psy\Exception\TypeErrorException', $e);
-
-        $this->assertEquals('TypeError: {{message}}', $e->getMessage());
-        $this->assertEquals('{{message}}', $e->getRawMessage());
-        $this->assertEquals(13, $e->getCode());
-    }
-
-    public function testStripsEvalFromMessage()
-    {
-        $message = 'Something or other, called in line 10: eval()\'d code';
-        $e = new TypeErrorException($message);
-        $this->assertEquals($message, $e->getRawMessage());
-        $this->assertEquals('TypeError: Something or other', $e->getMessage());
-    }
-
-    public function testFromTypeError()
-    {
-        if (\version_compare(PHP_VERSION, '7.0.0', '<')) {
-            $this->markTestSkipped();
-        }
-
-        $previous = new \TypeError('{{message}}', 13);
-        $e = TypeErrorException::fromTypeError($previous);
-
-        $this->assertInstanceOf('Psy\Exception\TypeErrorException', $e);
-        $this->assertEquals('TypeError: {{message}}', $e->getMessage());
-        $this->assertEquals('{{message}}', $e->getRawMessage());
-        $this->assertEquals(13, $e->getCode());
-    }
-}
diff --git a/vendor/psy/psysh/test/FakeShell.php b/vendor/psy/psysh/test/FakeShell.php
deleted file mode 100644
index 9f6fa97fc6a137a7707c43d1a3946f570528e6f4..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/test/FakeShell.php
+++ /dev/null
@@ -1,29 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test;
-
-use Psy\Shell;
-
-class FakeShell extends Shell
-{
-    public $matchers;
-
-    public function __construct(Configuration $config = null)
-    {
-        // This space intentionally left blank
-    }
-
-    public function addMatchers(array $matchers)
-    {
-        $this->matchers = $matchers;
-    }
-}
diff --git a/vendor/psy/psysh/test/Formatter/CodeFormatterTest.php b/vendor/psy/psysh/test/Formatter/CodeFormatterTest.php
deleted file mode 100644
index 87f56dfd70cb148b63e45fd0324c1d2b667adbdb..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/test/Formatter/CodeFormatterTest.php
+++ /dev/null
@@ -1,129 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\Formatter;
-
-use Psy\Formatter\CodeFormatter;
-use Psy\Test\Formatter\Fixtures\SomeClass;
-
-class CodeFormatterTest extends \PHPUnit\Framework\TestCase
-{
-    /**
-     * @dataProvider reflectors
-     */
-    public function testFormat($reflector, $expected)
-    {
-        $formatted = CodeFormatter::format($reflector);
-        $formattedWithoutColors = \preg_replace('#' . \chr(27) . '\[\d\d?m#', '', $formatted);
-
-        $this->assertEquals($expected, self::trimLines($formattedWithoutColors));
-        $this->assertNotEquals($expected, self::trimLines($formatted));
-    }
-
-    public function reflectors()
-    {
-        $expectClass = <<<'EOS'
-  > 14| class SomeClass
-    15| {
-    16|     const SOME_CONST = 'some const';
-    17|     private $someProp = 'some prop';
-    18|
-    19|     public function someMethod($someParam)
-    20|     {
-    21|         return 'some method';
-    22|     }
-    23|
-    24|     public static function someClosure()
-    25|     {
-    26|         return function () {
-    27|             return 'some closure';
-    28|         };
-    29|     }
-    30| }
-EOS;
-
-        $expectMethod = <<<'EOS'
-  > 19|     public function someMethod($someParam)
-    20|     {
-    21|         return 'some method';
-    22|     }
-EOS;
-
-        $expectClosure = <<<'EOS'
-  > 26|         return function () {
-    27|             return 'some closure';
-    28|         };
-EOS;
-
-        return [
-            [new \ReflectionClass('Psy\Test\Formatter\Fixtures\SomeClass'), $expectClass],
-            [new \ReflectionObject(new SomeClass()), $expectClass],
-            [new \ReflectionMethod('Psy\Test\Formatter\Fixtures\SomeClass', 'someMethod'), $expectMethod],
-            [new \ReflectionFunction(SomeClass::someClosure()), $expectClosure],
-        ];
-    }
-
-    /**
-     * @dataProvider invalidReflectors
-     * @expectedException \Psy\Exception\RuntimeException
-     */
-    public function testCodeFormatterThrowsExceptionForReflectorsItDoesntUnderstand($reflector)
-    {
-        CodeFormatter::format($reflector);
-    }
-
-    public function invalidReflectors()
-    {
-        $reflectors = [
-            [new \ReflectionExtension('json')],
-            [new \ReflectionParameter(['Psy\Test\Formatter\Fixtures\SomeClass', 'someMethod'], 'someParam')],
-            [new \ReflectionProperty('Psy\Test\Formatter\Fixtures\SomeClass', 'someProp')],
-        ];
-
-        if (\version_compare(PHP_VERSION, '7.1.0', '>=')) {
-            $reflectors[] = [new \ReflectionClassConstant('Psy\Test\Formatter\Fixtures\SomeClass', 'SOME_CONST')];
-        }
-
-        return $reflectors;
-    }
-
-    /**
-     * @dataProvider filenames
-     * @expectedException \Psy\Exception\RuntimeException
-     */
-    public function testCodeFormatterThrowsExceptionForMissingFile($filename)
-    {
-        $reflector = $this->getMockBuilder('ReflectionClass')
-            ->disableOriginalConstructor()
-            ->getMock();
-
-        $reflector
-            ->expects($this->once())
-            ->method('getFileName')
-            ->will($this->returnValue($filename));
-
-        CodeFormatter::format($reflector);
-    }
-
-    public function filenames()
-    {
-        if (\defined('HHVM_VERSION')) {
-            $this->markTestSkipped('We have issues with PHPUnit mocks on HHVM.');
-        }
-
-        return [[null], ['not a file']];
-    }
-
-    private static function trimLines($code)
-    {
-        return \rtrim(\implode("\n", \array_map('rtrim', \explode("\n", $code))));
-    }
-}
diff --git a/vendor/psy/psysh/test/Formatter/DocblockFormatterTest.php b/vendor/psy/psysh/test/Formatter/DocblockFormatterTest.php
deleted file mode 100644
index 134c76d02f11dc2ddfba57dd960e92668d86d8c2..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/test/Formatter/DocblockFormatterTest.php
+++ /dev/null
@@ -1,63 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\Formatter;
-
-use Psy\Formatter\DocblockFormatter;
-
-class DocblockFormatterTest extends \PHPUnit\Framework\TestCase
-{
-    /**
-     * This is a docblock!
-     *
-     * @author Justin Hileman <justin@justinhileman.info>
-     *
-     * @throws InvalidArgumentException if $foo is empty
-     *
-     * @param mixed $foo It's a foo thing
-     * @param int   $bar This is definitely bar
-     *
-     * @return string A string of no consequence
-     */
-    private function methodWithDocblock($foo, $bar = 1)
-    {
-        if (empty($foo)) {
-            throw new \InvalidArgumentException();
-        }
-
-        return 'method called';
-    }
-
-    public function testFormat()
-    {
-        $expected = <<<EOS
-<comment>Description:</comment>
-  This is a docblock!
-
-<comment>Throws:</comment>
-  <info>InvalidArgumentException </info> if \$foo is empty
-
-<comment>Param:</comment>
-  <info>mixed </info> <strong>\$foo </strong> It's a foo thing
-  <info>int   </info> <strong>\$bar </strong> This is definitely bar
-
-<comment>Return:</comment>
-  <info>string </info> A string of no consequence
-
-<comment>Author:</comment> Justin Hileman \<justin@justinhileman.info>
-EOS;
-
-        $this->assertSame(
-            $expected,
-            DocblockFormatter::format(new \ReflectionMethod($this, 'methodWithDocblock'))
-        );
-    }
-}
diff --git a/vendor/psy/psysh/test/Formatter/Fixtures/BoringTrait.php b/vendor/psy/psysh/test/Formatter/Fixtures/BoringTrait.php
deleted file mode 100644
index 9f13ab9325db2f8cc81bbcf2b1f56ff913c65474..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/test/Formatter/Fixtures/BoringTrait.php
+++ /dev/null
@@ -1,20 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\Formatter\Fixtures;
-
-trait BoringTrait
-{
-    public function boringMethod($one = 1)
-    {
-        // Do nothing.
-    }
-}
diff --git a/vendor/psy/psysh/test/Formatter/Fixtures/SomeClass.php b/vendor/psy/psysh/test/Formatter/Fixtures/SomeClass.php
deleted file mode 100644
index 8208fe348d9b7a02ba5e3fe5b4c578fbd1c5f05d..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/test/Formatter/Fixtures/SomeClass.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\Formatter\Fixtures;
-
-class SomeClass
-{
-    const SOME_CONST = 'some const';
-    private $someProp = 'some prop';
-
-    public function someMethod($someParam)
-    {
-        return 'some method';
-    }
-
-    public static function someClosure()
-    {
-        return function () {
-            return 'some closure';
-        };
-    }
-}
diff --git a/vendor/psy/psysh/test/Formatter/SignatureFormatterTest.php b/vendor/psy/psysh/test/Formatter/SignatureFormatterTest.php
deleted file mode 100644
index 096e6ae786bf071028ce19327af234851c553d47..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/test/Formatter/SignatureFormatterTest.php
+++ /dev/null
@@ -1,95 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\Formatter;
-
-use Psy\Formatter\SignatureFormatter;
-use Psy\Reflection\ReflectionClassConstant;
-use Psy\Reflection\ReflectionConstant_;
-
-class SignatureFormatterTest extends \PHPUnit\Framework\TestCase
-{
-    const FOO = 'foo value';
-    private static $bar = 'bar value';
-
-    private function someFakeMethod(array $one, $two = 'TWO', \Reflector $three = null)
-    {
-    }
-
-    /**
-     * @dataProvider signatureReflectors
-     */
-    public function testFormat($reflector, $expected)
-    {
-        $this->assertSame($expected, \strip_tags(SignatureFormatter::format($reflector)));
-    }
-
-    public function signatureReflectors()
-    {
-        return [
-            [
-                new \ReflectionFunction('implode'),
-                \defined('HHVM_VERSION') ? 'function implode($arg1, $arg2 = null)' : 'function implode($glue, $pieces)',
-            ],
-            [
-                ReflectionClassConstant::create($this, 'FOO'),
-                'const FOO = "foo value"',
-            ],
-            [
-                new \ReflectionMethod($this, 'someFakeMethod'),
-                'private function someFakeMethod(array $one, $two = \'TWO\', Reflector $three = null)',
-            ],
-            [
-                new \ReflectionProperty($this, 'bar'),
-                'private static $bar',
-            ],
-            [
-                new \ReflectionClass('Psy\CodeCleaner\CodeCleanerPass'),
-                'abstract class Psy\CodeCleaner\CodeCleanerPass '
-                . 'extends PhpParser\NodeVisitorAbstract '
-                . 'implements PhpParser\NodeVisitor',
-            ],
-            [
-                new \ReflectionFunction('array_chunk'),
-                'function array_chunk($arg, $size, $preserve_keys = unknown)',
-            ],
-            [
-                new \ReflectionClass('Psy\Test\Formatter\Fixtures\BoringTrait'),
-                'trait Psy\Test\Formatter\Fixtures\BoringTrait',
-            ],
-            [
-                new \ReflectionMethod('Psy\Test\Formatter\Fixtures\BoringTrait', 'boringMethod'),
-                'public function boringMethod($one = 1)',
-            ],
-            [
-                new ReflectionConstant_('E_ERROR'),
-                'define("E_ERROR", 1)',
-            ],
-            [
-                new ReflectionConstant_('PHP_VERSION'),
-                'define("PHP_VERSION", "' . PHP_VERSION . '")',
-            ],
-            [
-                new ReflectionConstant_('__LINE__'),
-                'define("__LINE__", null)', // @todo show this as `unknown` in red or something?
-            ],
-        ];
-    }
-
-    /**
-     * @expectedException \InvalidArgumentException
-     */
-    public function testSignatureFormatterThrowsUnknownReflectorExpeption()
-    {
-        $refl = $this->getMockBuilder('Reflector')->getMock();
-        SignatureFormatter::format($refl);
-    }
-}
diff --git a/vendor/psy/psysh/test/Input/CodeArgumentTest.php b/vendor/psy/psysh/test/Input/CodeArgumentTest.php
deleted file mode 100644
index c39615208d1e4ab3aa7854cb8f0d99376a099388..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/test/Input/CodeArgumentTest.php
+++ /dev/null
@@ -1,52 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\Input;
-
-use Psy\Input\CodeArgument;
-use Symfony\Component\Console\Input\InputArgument;
-
-class CodeArgumentTest extends \PHPUnit\Framework\TestCase
-{
-    /**
-     * @dataProvider getInvalidModes
-     * @expectedException \InvalidArgumentException
-     */
-    public function testInvalidModes($mode)
-    {
-        new CodeArgument('wat', $mode);
-    }
-
-    public function getInvalidModes()
-    {
-        return [
-            [InputArgument::IS_ARRAY],
-            [InputArgument::IS_ARRAY | InputArgument::REQUIRED],
-            [InputArgument::IS_ARRAY | InputArgument::OPTIONAL],
-        ];
-    }
-
-    /**
-     * @dataProvider getValidModes
-     */
-    public function testValidModes($mode)
-    {
-        $this->assertInstanceOf('Psy\Input\CodeArgument', new CodeArgument('yeah', $mode));
-    }
-
-    public function getValidModes()
-    {
-        return [
-            [InputArgument::REQUIRED],
-            [InputArgument::OPTIONAL],
-        ];
-    }
-}
diff --git a/vendor/psy/psysh/test/Input/FilterOptionsTest.php b/vendor/psy/psysh/test/Input/FilterOptionsTest.php
deleted file mode 100644
index 7ed8919bd1756e3d41796129448b2fc1cbf794c8..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/test/Input/FilterOptionsTest.php
+++ /dev/null
@@ -1,105 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\Input;
-
-use Psy\Input\FilterOptions;
-use Symfony\Component\Console\Input\InputDefinition;
-use Symfony\Component\Console\Input\StringInput;
-
-class FilterOptionsTest extends \PHPUnit\Framework\TestCase
-{
-    public function testGetOptions()
-    {
-        $opts = FilterOptions::getOptions();
-        $this->assertCount(3, $opts);
-    }
-
-    /**
-     * @dataProvider validInputs
-     */
-    public function testBindValidInput($input, $hasFilter = true)
-    {
-        $input = $this->getInput($input);
-        $filterOptions = new FilterOptions();
-        $filterOptions->bind($input);
-
-        $this->assertEquals($hasFilter, $filterOptions->hasFilter());
-    }
-
-    public function validInputs()
-    {
-        return [
-            ['--grep="bar"'],
-            ['--grep="bar" --invert'],
-            ['--grep="bar" --insensitive'],
-            ['--grep="bar" --invert --insensitive'],
-            ['', false],
-        ];
-    }
-
-    /**
-     * @dataProvider invalidInputs
-     * @expectedException \Psy\Exception\RuntimeException
-     */
-    public function testBindInvalidInput($input)
-    {
-        $input = $this->getInput($input);
-        $filterOptions = new FilterOptions();
-        $filterOptions->bind($input);
-    }
-
-    public function invalidInputs()
-    {
-        return [
-            ['--invert'],
-            ['--insensitive'],
-            ['--invert --insensitive'],
-
-            // invalid because regex
-            ['--grep /*/'],
-        ];
-    }
-
-    /**
-     * @dataProvider matchData
-     */
-    public function testMatch($input, $str, $matches)
-    {
-        $input = $this->getInput($input);
-        $filterOptions = new FilterOptions();
-        $filterOptions->bind($input);
-
-        $this->assertEquals($matches, $filterOptions->match($str));
-    }
-
-    public function matchData()
-    {
-        return [
-            ['', 'whatever', true],
-            ['--grep FOO', 'foo', false],
-            ['--grep foo', 'foo', true],
-            ['--grep foo', 'food', true],
-            ['--grep oo', 'Food', true],
-            ['--grep oo -i', 'FOOD', true],
-            ['--grep foo -v', 'food', false],
-            ['--grep foo -v', 'whatever', true],
-        ];
-    }
-
-    private function getInput($input)
-    {
-        $input = new StringInput($input);
-        $input->bind(new InputDefinition(FilterOptions::getOptions()));
-
-        return $input;
-    }
-}
diff --git a/vendor/psy/psysh/test/Input/ShellInputTest.php b/vendor/psy/psysh/test/Input/ShellInputTest.php
deleted file mode 100644
index f19d126180aaf157e370e1090b7b1262a56c053e..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/test/Input/ShellInputTest.php
+++ /dev/null
@@ -1,254 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\Input;
-
-use Psy\Input\CodeArgument;
-use Psy\Input\ShellInput;
-use Symfony\Component\Console\Input\InputArgument;
-use Symfony\Component\Console\Input\InputDefinition;
-use Symfony\Component\Console\Input\InputOption;
-
-class ShellInputTest extends \PHPUnit\Framework\TestCase
-{
-    /**
-     * @expectedException \InvalidArgumentException
-     * @expectedExceptionMessage Unexpected CodeArgument before the final position: a
-     */
-    public function testThrowsWhenCodeArgumentNotInFinalPosition()
-    {
-        $definition = new InputDefinition([
-            new CodeArgument('a', null, CodeArgument::REQUIRED),
-            new InputArgument('b', null, InputArgument::REQUIRED),
-        ]);
-
-        $input = new ShellInput('foo bar');
-        $input->bind($definition);
-    }
-
-    public function testInputOptionWithGivenString()
-    {
-        $definition = new InputDefinition([
-            new InputOption('foo', null, InputOption::VALUE_REQUIRED),
-            new CodeArgument('code', null, CodeArgument::REQUIRED),
-        ]);
-
-        $input = new ShellInput('--foo=bar echo "baz\\\\n";');
-        $input->bind($definition);
-        $this->assertSame('bar', $input->getOption('foo'));
-        $this->assertSame('echo "baz\n";', $input->getArgument('code'));
-    }
-
-    public function testInputOptionWithoutCodeArguments()
-    {
-        $definition = new InputDefinition([
-            new InputOption('foo', null, InputOption::VALUE_REQUIRED),
-            new InputOption('qux', 'q', InputOption::VALUE_REQUIRED),
-            new InputArgument('bar', null, InputArgument::REQUIRED),
-            new InputArgument('baz', null, InputArgument::REQUIRED),
-        ]);
-
-        $input = new ShellInput('--foo=foo -q qux bar "baz\\\\n"');
-        $input->bind($definition);
-        $this->assertSame('foo', $input->getOption('foo'));
-        $this->assertSame('qux', $input->getOption('qux'));
-        $this->assertSame('bar', $input->getArgument('bar'));
-        $this->assertSame('baz\\n', $input->getArgument('baz'));
-    }
-
-    public function testInputWithDashDash()
-    {
-        $definition = new InputDefinition([
-            new InputOption('foo', null, InputOption::VALUE_REQUIRED),
-            new CodeArgument('code', null, CodeArgument::REQUIRED),
-        ]);
-
-        $input = new ShellInput('-- echo --foo::$bar');
-        $input->bind($definition);
-        $this->assertNull($input->getOption('foo'));
-        $this->assertSame('echo --foo::$bar', $input->getArgument('code'));
-    }
-
-    public function testInputWithEmptyString()
-    {
-        $definition = new InputDefinition([
-            new InputOption('foo', null, InputOption::VALUE_REQUIRED),
-            new CodeArgument('code', null, CodeArgument::REQUIRED),
-        ]);
-
-        $input = new ShellInput('"" --foo bar');
-        $input->bind($definition);
-        $this->assertSame('"" --foo bar', $input->getArgument('code'));
-    }
-
-    /**
-     * @dataProvider getTokenizeData
-     */
-    public function testTokenize($input, $tokens, $message)
-    {
-        $input = new ShellInput($input);
-        $r = new \ReflectionClass('Psy\Input\ShellInput');
-        $p = $r->getProperty('tokenPairs');
-        $p->setAccessible(true);
-        $this->assertSame($tokens, $p->getValue($input), $message);
-    }
-
-    public function getTokenizeData()
-    {
-        // Test all the cases from StringInput test, ensuring they have an appropriate $rest token.
-        return [
-            [
-                '',
-                [],
-                '->tokenize() parses an empty string',
-            ],
-            [
-                'foo',
-                [['foo', 'foo']],
-                '->tokenize() parses arguments',
-            ],
-            [
-                '  foo  bar  ',
-                [['foo', 'foo  bar  '], ['bar', 'bar  ']],
-                '->tokenize() ignores whitespaces between arguments',
-            ],
-            [
-                '"quoted"',
-                [['quoted', '"quoted"']],
-                '->tokenize() parses quoted arguments',
-            ],
-            [
-                "'quoted'",
-                [['quoted', "'quoted'"]],
-                '->tokenize() parses quoted arguments',
-            ],
-            [
-                "'a\rb\nc\td'",
-                [["a\rb\nc\td", "'a\rb\nc\td'"]],
-                '->tokenize() parses whitespace chars in strings',
-            ],
-            [
-                "'a'\r'b'\n'c'\t'd'",
-                [
-                    ['a', "'a'\r'b'\n'c'\t'd'"],
-                    ['b', "'b'\n'c'\t'd'"],
-                    ['c', "'c'\t'd'"],
-                    ['d', "'d'"],
-                ],
-                '->tokenize() parses whitespace chars between args as spaces',
-            ],
-
-            /*
-             * These don't play nice with unescaping input, but the end result
-             * is correct, so disable the tests for now.
-             *
-             * @todo Sort this out and re-enable these test cases.
-             */
-            // [
-            //     '\"quoted\"',
-            //     [['"quoted"', '\"quoted\"']],
-            //     '->tokenize() parses escaped-quoted arguments',
-            // ],
-            // [
-            //     "\'quoted\'",
-            //     [['\'quoted\'', "\'quoted\'"]],
-            //     '->tokenize() parses escaped-quoted arguments',
-            // ],
-
-            [
-                '-a',
-                 [['-a', '-a']],
-                 '->tokenize() parses short options',
-             ],
-            [
-                '-azc',
-                [['-azc', '-azc']],
-                '->tokenize() parses aggregated short options',
-            ],
-            [
-                '-awithavalue',
-                [['-awithavalue', '-awithavalue']],
-                '->tokenize() parses short options with a value',
-            ],
-            [
-                '-a"foo bar"',
-                [['-afoo bar', '-a"foo bar"']],
-                '->tokenize() parses short options with a value',
-            ],
-            [
-                '-a"foo bar""foo bar"',
-                [['-afoo barfoo bar', '-a"foo bar""foo bar"']],
-                '->tokenize() parses short options with a value',
-            ],
-            [
-                '-a\'foo bar\'',
-                [['-afoo bar', '-a\'foo bar\'']],
-                '->tokenize() parses short options with a value',
-            ],
-            [
-                '-a\'foo bar\'\'foo bar\'',
-                [['-afoo barfoo bar', '-a\'foo bar\'\'foo bar\'']],
-                '->tokenize() parses short options with a value',
-            ],
-            [
-                '-a\'foo bar\'"foo bar"',
-                [['-afoo barfoo bar', '-a\'foo bar\'"foo bar"']],
-                '->tokenize() parses short options with a value',
-            ],
-            [
-                '--long-option',
-                [['--long-option', '--long-option']],
-                '->tokenize() parses long options',
-            ],
-            [
-                '--long-option=foo',
-                [['--long-option=foo', '--long-option=foo']],
-                '->tokenize() parses long options with a value',
-            ],
-            [
-                '--long-option="foo bar"',
-                [['--long-option=foo bar', '--long-option="foo bar"']],
-                '->tokenize() parses long options with a value',
-            ],
-            [
-                '--long-option="foo bar""another"',
-                [['--long-option=foo baranother', '--long-option="foo bar""another"']],
-                '->tokenize() parses long options with a value',
-            ],
-            [
-                '--long-option=\'foo bar\'',
-                [['--long-option=foo bar', '--long-option=\'foo bar\'']],
-                '->tokenize() parses long options with a value',
-            ],
-            [
-                "--long-option='foo bar''another'",
-                [['--long-option=foo baranother', "--long-option='foo bar''another'"]],
-                '->tokenize() parses long options with a value',
-            ],
-            [
-                "--long-option='foo bar'\"another\"",
-                [['--long-option=foo baranother', "--long-option='foo bar'\"another\""]],
-                '->tokenize() parses long options with a value',
-            ],
-            [
-                'foo -a -ffoo --long bar',
-                [
-                    ['foo', 'foo -a -ffoo --long bar'],
-                    ['-a', '-a -ffoo --long bar'],
-                    ['-ffoo', '-ffoo --long bar'],
-                    ['--long', '--long bar'],
-                    ['bar', 'bar'],
-                ],
-                '->tokenize() parses when several arguments and options',
-            ],
-        ];
-    }
-}
diff --git a/vendor/psy/psysh/test/ParserTestCase.php b/vendor/psy/psysh/test/ParserTestCase.php
deleted file mode 100644
index a0740b66367d9ea34a800339152ad9cb7b2bd23f..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/test/ParserTestCase.php
+++ /dev/null
@@ -1,97 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test;
-
-use PhpParser\PrettyPrinter\Standard as Printer;
-use Psy\Exception\ParseErrorException;
-use Psy\ParserFactory;
-
-class ParserTestCase extends \PHPUnit\Framework\TestCase
-{
-    protected $traverser;
-    private $parser;
-    private $printer;
-
-    public function tearDown()
-    {
-        $this->traverser = null;
-        $this->parser = null;
-        $this->printer = null;
-    }
-
-    protected function parse($code, $prefix = '<?php ')
-    {
-        $code = $prefix . $code;
-        try {
-            return $this->getParser()->parse($code);
-        } catch (\PhpParser\Error $e) {
-            if (!$this->parseErrorIsEOF($e)) {
-                throw ParseErrorException::fromParseError($e);
-            }
-
-            try {
-                // Unexpected EOF, try again with an implicit semicolon
-                return $this->getParser()->parse($code . ';');
-            } catch (\PhpParser\Error $e) {
-                return false;
-            }
-        }
-    }
-
-    protected function traverse(array $stmts)
-    {
-        if (!isset($this->traverser)) {
-            throw new \RuntimeException('Test cases must provide a traverser');
-        }
-
-        return $this->traverser->traverse($stmts);
-    }
-
-    protected function prettyPrint(array $stmts)
-    {
-        return $this->getPrinter()->prettyPrint($stmts);
-    }
-
-    protected function assertProcessesAs($from, $to)
-    {
-        $stmts = $this->parse($from);
-        $stmts = $this->traverse($stmts);
-        $toStmts = $this->parse($to);
-        $this->assertSame($this->prettyPrint($toStmts), $this->prettyPrint($stmts));
-    }
-
-    private function getParser()
-    {
-        if (!isset($this->parser)) {
-            $parserFactory = new ParserFactory();
-            $this->parser  = $parserFactory->createParser();
-        }
-
-        return $this->parser;
-    }
-
-    private function getPrinter()
-    {
-        if (!isset($this->printer)) {
-            $this->printer = new Printer();
-        }
-
-        return $this->printer;
-    }
-
-    private function parseErrorIsEOF(\PhpParser\Error $e)
-    {
-        $msg = $e->getRawMessage();
-
-        return ($msg === 'Unexpected token EOF') || (\strpos($msg, 'Syntax error, unexpected EOF') !== false);
-    }
-}
diff --git a/vendor/psy/psysh/test/Readline/GNUReadlineTest.php b/vendor/psy/psysh/test/Readline/GNUReadlineTest.php
deleted file mode 100644
index 406377fcc606648a265b8f8377f8dc2c632183f4..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/test/Readline/GNUReadlineTest.php
+++ /dev/null
@@ -1,80 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\Readline;
-
-use Psy\Readline\GNUReadline;
-
-class GNUReadlineTest extends \PHPUnit\Framework\TestCase
-{
-    private $historyFile;
-
-    public function setUp()
-    {
-        if (!GNUReadline::isSupported()) {
-            $this->markTestSkipped('GNUReadline not enabled');
-        }
-
-        $this->historyFile = \tempnam(\sys_get_temp_dir(), 'psysh_test_history');
-        \file_put_contents($this->historyFile, "_HiStOrY_V2_\n");
-    }
-
-    public function testHistory()
-    {
-        $readline = new GNUReadline($this->historyFile);
-        $this->assertEmpty($readline->listHistory());
-        $readline->addHistory('foo');
-        $this->assertSame(['foo'], $readline->listHistory());
-        $readline->addHistory('bar');
-        $this->assertSame(['foo', 'bar'], $readline->listHistory());
-        $readline->addHistory('baz');
-        $this->assertSame(['foo', 'bar', 'baz'], $readline->listHistory());
-        $readline->clearHistory();
-        $this->assertEmpty($readline->listHistory());
-    }
-
-    /**
-     * @depends testHistory
-     */
-    public function testHistorySize()
-    {
-        $readline = new GNUReadline($this->historyFile, 2);
-        $this->assertEmpty($readline->listHistory());
-        $readline->addHistory('foo');
-        $readline->addHistory('bar');
-        $this->assertSame(['foo', 'bar'], $readline->listHistory());
-        $readline->addHistory('baz');
-        $this->assertSame(['bar', 'baz'], $readline->listHistory());
-        $readline->addHistory('w00t');
-        $this->assertSame(['baz', 'w00t'], $readline->listHistory());
-        $readline->clearHistory();
-        $this->assertEmpty($readline->listHistory());
-    }
-
-    /**
-     * @depends testHistory
-     */
-    public function testHistoryEraseDups()
-    {
-        $readline = new GNUReadline($this->historyFile, 0, true);
-        $this->assertEmpty($readline->listHistory());
-        $readline->addHistory('foo');
-        $readline->addHistory('bar');
-        $readline->addHistory('foo');
-        $this->assertSame(['bar', 'foo'], $readline->listHistory());
-        $readline->addHistory('baz');
-        $readline->addHistory('w00t');
-        $readline->addHistory('baz');
-        $this->assertSame(['bar', 'foo', 'w00t', 'baz'], $readline->listHistory());
-        $readline->clearHistory();
-        $this->assertEmpty($readline->listHistory());
-    }
-}
diff --git a/vendor/psy/psysh/test/Readline/HoaConsoleTest.php b/vendor/psy/psysh/test/Readline/HoaConsoleTest.php
deleted file mode 100644
index ecf444f3963f4589a0e976591c928346b730caa0..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/test/Readline/HoaConsoleTest.php
+++ /dev/null
@@ -1,31 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\Readline;
-
-use Psy\Readline\HoaConsole;
-
-class HoaConsoleTest extends \PHPUnit\Framework\TestCase
-{
-    public function testHistory()
-    {
-        $readline = new HoaConsole();
-        $this->assertEmpty($readline->listHistory());
-        $readline->addHistory('foo');
-        $this->assertSame(['foo'], $readline->listHistory());
-        $readline->addHistory('bar');
-        $this->assertSame(['foo', 'bar'], $readline->listHistory());
-        $readline->addHistory('baz');
-        $this->assertSame(['foo', 'bar', 'baz'], $readline->listHistory());
-        $readline->clearHistory();
-        $this->assertEmpty($readline->listHistory());
-    }
-}
diff --git a/vendor/psy/psysh/test/Readline/LibeditTest.php b/vendor/psy/psysh/test/Readline/LibeditTest.php
deleted file mode 100644
index 2d7be2889ae40ce2da2bf542bee900f01b970700..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/test/Readline/LibeditTest.php
+++ /dev/null
@@ -1,128 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\Readline;
-
-use Psy\Readline\Libedit;
-
-class LibeditTest extends \PHPUnit\Framework\TestCase
-{
-    private $historyFile;
-
-    public function setUp()
-    {
-        if (!Libedit::isSupported()) {
-            $this->markTestSkipped('Libedit not enabled');
-        }
-
-        $this->historyFile = \tempnam(\sys_get_temp_dir(), 'psysh_test_history');
-        if (false === \file_put_contents($this->historyFile, "_HiStOrY_V2_\n")) {
-            $this->fail('Unable to write history file: ' . $this->historyFile);
-        }
-        // Calling readline_read_history before readline_clear_history
-        // avoids segfault with PHP 5.5.7 & libedit v3.1
-        \readline_read_history($this->historyFile);
-        \readline_clear_history();
-    }
-
-    public function tearDown()
-    {
-        if (\is_file($this->historyFile)) {
-            \unlink($this->historyFile);
-        }
-    }
-
-    public function testHistory()
-    {
-        $readline = new Libedit($this->historyFile);
-        $this->assertEmpty($readline->listHistory());
-        $readline->addHistory('foo');
-        $this->assertSame(['foo'], $readline->listHistory());
-        $readline->addHistory('bar');
-        $this->assertSame(['foo', 'bar'], $readline->listHistory());
-        $readline->addHistory('baz');
-        $this->assertSame(['foo', 'bar', 'baz'], $readline->listHistory());
-        $readline->clearHistory();
-        $this->assertEmpty($readline->listHistory());
-    }
-
-    /**
-     * @depends testHistory
-     */
-    public function testHistorySize()
-    {
-        $readline = new Libedit($this->historyFile, 2);
-        $this->assertEmpty($readline->listHistory());
-        $readline->addHistory('foo');
-        $readline->addHistory('bar');
-        $this->assertSame(['foo', 'bar'], $readline->listHistory());
-        $readline->addHistory('baz');
-        $this->assertSame(['bar', 'baz'], $readline->listHistory());
-        $readline->addHistory('w00t');
-        $this->assertSame(['baz', 'w00t'], $readline->listHistory());
-        $readline->clearHistory();
-        $this->assertEmpty($readline->listHistory());
-    }
-
-    /**
-     * @depends testHistory
-     */
-    public function testHistoryEraseDups()
-    {
-        $readline = new Libedit($this->historyFile, 0, true);
-        $this->assertEmpty($readline->listHistory());
-        $readline->addHistory('foo');
-        $readline->addHistory('bar');
-        $readline->addHistory('foo');
-        $this->assertSame(['bar', 'foo'], $readline->listHistory());
-        $readline->addHistory('baz');
-        $readline->addHistory('w00t');
-        $readline->addHistory('baz');
-        $this->assertSame(['bar', 'foo', 'w00t', 'baz'], $readline->listHistory());
-        $readline->clearHistory();
-        $this->assertEmpty($readline->listHistory());
-    }
-
-    public function testListHistory()
-    {
-        $readline = new Libedit($this->historyFile);
-        \file_put_contents(
-            $this->historyFile,
-            "This is an entry\n\0This is a comment\nThis is an entry\0With a comment\n",
-            FILE_APPEND
-        );
-        $this->assertSame([
-            'This is an entry',
-            'This is an entry',
-        ], $readline->listHistory());
-        $readline->clearHistory();
-    }
-
-    /**
-     * Libedit being a BSD library,
-     * it doesn't support non-unix line separators.
-     */
-    public function testLinebreaksSupport()
-    {
-        $readline = new Libedit($this->historyFile);
-        \file_put_contents(
-            $this->historyFile,
-            "foo\rbar\nbaz\r\nw00t",
-            FILE_APPEND
-        );
-        $this->assertSame([
-            "foo\rbar",
-            "baz\r",
-            'w00t',
-        ], $readline->listHistory());
-        $readline->clearHistory();
-    }
-}
diff --git a/vendor/psy/psysh/test/Readline/TransientTest.php b/vendor/psy/psysh/test/Readline/TransientTest.php
deleted file mode 100644
index 24fcba0b2a6d4ca229ce07792c3216ba7a46caed..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/test/Readline/TransientTest.php
+++ /dev/null
@@ -1,76 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\Readline;
-
-use Psy\Readline\Transient;
-
-class TransientTest extends \PHPUnit\Framework\TestCase
-{
-    public function testHistory()
-    {
-        $readline = new Transient();
-        $this->assertEmpty($readline->listHistory());
-        $readline->addHistory('foo');
-        $this->assertSame(['foo'], $readline->listHistory());
-        $readline->addHistory('bar');
-        $this->assertSame(['foo', 'bar'], $readline->listHistory());
-        $readline->addHistory('baz');
-        $this->assertSame(['foo', 'bar', 'baz'], $readline->listHistory());
-        $readline->clearHistory();
-        $this->assertEmpty($readline->listHistory());
-    }
-
-    /**
-     * @depends testHistory
-     */
-    public function testHistorySize()
-    {
-        $readline = new Transient(null, 2);
-        $this->assertEmpty($readline->listHistory());
-        $readline->addHistory('foo');
-        $readline->addHistory('bar');
-        $this->assertSame(['foo', 'bar'], $readline->listHistory());
-        $readline->addHistory('baz');
-        $this->assertSame(['bar', 'baz'], $readline->listHistory());
-        $readline->addHistory('w00t');
-        $this->assertSame(['baz', 'w00t'], $readline->listHistory());
-        $readline->clearHistory();
-        $this->assertEmpty($readline->listHistory());
-    }
-
-    /**
-     * @depends testHistory
-     */
-    public function testHistoryEraseDups()
-    {
-        $readline = new Transient(null, 0, true);
-        $this->assertEmpty($readline->listHistory());
-        $readline->addHistory('foo');
-        $readline->addHistory('bar');
-        $readline->addHistory('foo');
-        $this->assertSame(['bar', 'foo'], $readline->listHistory());
-        $readline->addHistory('baz');
-        $readline->addHistory('w00t');
-        $readline->addHistory('baz');
-        $this->assertSame(['bar', 'foo', 'w00t', 'baz'], $readline->listHistory());
-        $readline->clearHistory();
-        $this->assertEmpty($readline->listHistory());
-    }
-
-    public function testSomeThingsAreAlwaysTrue()
-    {
-        $readline = new Transient();
-        $this->assertTrue(Transient::isSupported());
-        $this->assertTrue($readline->readHistory());
-        $this->assertTrue($readline->writeHistory());
-    }
-}
diff --git a/vendor/psy/psysh/test/Reflection/ReflectionClassConstantTest.php b/vendor/psy/psysh/test/Reflection/ReflectionClassConstantTest.php
deleted file mode 100644
index 87d4f7520b92ad0fc494d32edd2897a77d352d70..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/test/Reflection/ReflectionClassConstantTest.php
+++ /dev/null
@@ -1,81 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\Reflection;
-
-use Psy\Reflection\ReflectionClassConstant;
-
-class ReflectionClassConstantTest extends \PHPUnit\Framework\TestCase
-{
-    const CONSTANT_ONE = 'one';
-
-    public function testConstruction()
-    {
-        $refl  = new ReflectionClassConstant($this, 'CONSTANT_ONE');
-        $class = $refl->getDeclaringClass();
-
-        $this->assertInstanceOf('ReflectionClass', $class);
-        $this->assertSame('Psy\Test\Reflection\ReflectionClassConstantTest', $class->getName());
-        $this->assertSame('CONSTANT_ONE', $refl->getName());
-        $this->assertSame('CONSTANT_ONE', (string) $refl);
-        $this->assertSame('one', $refl->getValue());
-        $this->assertNull($refl->getFileName());
-        $this->assertFalse($refl->getDocComment());
-    }
-
-    /**
-     * @expectedException \InvalidArgumentException
-     */
-    public function testUnknownConstantThrowsException()
-    {
-        new ReflectionClassConstant($this, 'UNKNOWN_CONSTANT');
-    }
-
-    public function testExport()
-    {
-        $ret = ReflectionClassConstant::export($this, 'CONSTANT_ONE', true);
-        $this->assertEquals($ret, 'Constant [ public string CONSTANT_ONE ] { one }');
-    }
-
-    public function testExportOutput()
-    {
-        $this->expectOutputString("Constant [ public string CONSTANT_ONE ] { one }\n");
-        ReflectionClassConstant::export($this, 'CONSTANT_ONE', false);
-    }
-
-    public function testModifiers()
-    {
-        $refl = new ReflectionClassConstant($this, 'CONSTANT_ONE');
-
-        $this->assertEquals(\ReflectionMethod::IS_PUBLIC, $refl->getModifiers());
-        $this->assertFalse($refl->isPrivate());
-        $this->assertFalse($refl->isProtected());
-        $this->assertTrue($refl->isPublic());
-    }
-
-    /**
-     * @expectedException \RuntimeException
-     * @dataProvider notYetImplemented
-     */
-    public function testNotYetImplemented($method)
-    {
-        $refl = new ReflectionClassConstant($this, 'CONSTANT_ONE');
-        $refl->$method();
-    }
-
-    public function notYetImplemented()
-    {
-        return [
-            ['getStartLine'],
-            ['getEndLine'],
-        ];
-    }
-}
diff --git a/vendor/psy/psysh/test/Reflection/ReflectionConstantBCTest.php b/vendor/psy/psysh/test/Reflection/ReflectionConstantBCTest.php
deleted file mode 100644
index 69d27970995d20b53d3df771bfaaca56d4fe94e5..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/test/Reflection/ReflectionConstantBCTest.php
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\Reflection;
-
-use Psy\Reflection\ReflectionConstant;
-
-class ReflectionConstantBCTest extends \PHPUnit\Framework\TestCase
-{
-    const CONSTANT_ONE = 'one';
-
-    public function testConstruction()
-    {
-        $refl = new ReflectionConstant($this, 'CONSTANT_ONE');
-        $this->assertInstanceOf('Psy\Reflection\ReflectionConstant', $refl);
-        $this->assertInstanceOf('Psy\Reflection\ReflectionClassConstant', $refl);
-    }
-}
diff --git a/vendor/psy/psysh/test/Reflection/ReflectionConstantTest.php b/vendor/psy/psysh/test/Reflection/ReflectionConstantTest.php
deleted file mode 100644
index 02c1a8442ef6ffef1b8e826bbe01925644f4de2f..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/test/Reflection/ReflectionConstantTest.php
+++ /dev/null
@@ -1,114 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\Reflection;
-
-use Psy\Reflection\ReflectionConstant_;
-
-\define('Psy\\Test\\Reflection\\SOME_CONSTANT', 'yep');
-
-class ReflectionConstantTest extends \PHPUnit\Framework\TestCase
-{
-    public function testConstruction()
-    {
-        $refl = new ReflectionConstant_('Psy\\Test\\Reflection\\SOME_CONSTANT');
-
-        $this->assertFalse($refl->getDocComment());
-        $this->assertEquals('Psy\\Test\\Reflection\\SOME_CONSTANT', $refl->getName());
-        $this->assertEquals('Psy\\Test\\Reflection', $refl->getNamespaceName());
-        $this->assertEquals('yep', $refl->getValue());
-        $this->assertTrue($refl->inNamespace());
-        $this->assertEquals('Psy\\Test\\Reflection\\SOME_CONSTANT', (string) $refl);
-        $this->assertNull($refl->getFileName());
-    }
-
-    public function testBuiltInConstant()
-    {
-        $refl = new ReflectionConstant_('PHP_VERSION');
-
-        $this->assertEquals('PHP_VERSION', $refl->getName());
-        $this->assertEquals('PHP_VERSION', (string) $refl);
-        $this->assertEquals(PHP_VERSION, $refl->getValue());
-        $this->assertFalse($refl->inNamespace());
-        $this->assertSame('', $refl->getNamespaceName());
-    }
-
-    /**
-     * @dataProvider magicConstants
-     */
-    public function testIsMagicConstant($name, $is)
-    {
-        $this->assertEquals($is, ReflectionConstant_::isMagicConstant($name));
-    }
-
-    public function magicConstants()
-    {
-        return [
-            ['__LINE__', true],
-            ['__FILE__', true],
-            ['__DIR__', true],
-            ['__FUNCTION__', true],
-            ['__CLASS__', true],
-            ['__TRAIT__', true],
-            ['__METHOD__', true],
-            ['__NAMESPACE__', true],
-            ['__COMPILER_HALT_OFFSET__', true],
-            ['PHP_VERSION', false],
-            ['PHP_EOL', false],
-            ['Psy\\Test\\Reflection\\SOME_CONSTANT', false],
-            ['What if it isn\'t even a valid constant name?', false],
-        ];
-    }
-
-    /**
-     * @expectedException \InvalidArgumentException
-     */
-    public function testUnknownConstantThrowsException()
-    {
-        new ReflectionConstant_('UNKNOWN_CONSTANT');
-    }
-
-    public function testExport()
-    {
-        $ret = ReflectionConstant_::export('Psy\\Test\\Reflection\\SOME_CONSTANT', true);
-        $this->assertEquals($ret, 'Constant [ string Psy\\Test\\Reflection\\SOME_CONSTANT ] { yep }');
-    }
-
-    public function testExportOutput()
-    {
-        $this->expectOutputString("Constant [ string Psy\\Test\\Reflection\\SOME_CONSTANT ] { yep }\n");
-        ReflectionConstant_::export('Psy\\Test\\Reflection\\SOME_CONSTANT', false);
-    }
-
-    public function testGetFileName()
-    {
-        $refl = new ReflectionConstant_('Psy\\Test\\Reflection\\SOME_CONSTANT');
-        $this->assertNull($refl->getFileName());
-    }
-
-    /**
-     * @expectedException \RuntimeException
-     * @dataProvider notYetImplemented
-     */
-    public function testNotYetImplemented($method)
-    {
-        $refl = new ReflectionConstant_('Psy\\Test\\Reflection\\SOME_CONSTANT');
-        $refl->$method();
-    }
-
-    public function notYetImplemented()
-    {
-        return [
-            ['getStartLine'],
-            ['getEndLine'],
-        ];
-    }
-}
diff --git a/vendor/psy/psysh/test/Reflection/ReflectionLanguageConstructParameterTest.php b/vendor/psy/psysh/test/Reflection/ReflectionLanguageConstructParameterTest.php
deleted file mode 100644
index 223432f8c9040fc92ad8d483f3ca1f10ef872863..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/test/Reflection/ReflectionLanguageConstructParameterTest.php
+++ /dev/null
@@ -1,64 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\Reflection;
-
-use Psy\Reflection\ReflectionLanguageConstruct;
-use Psy\Reflection\ReflectionLanguageConstructParameter;
-
-class ReflectionLanguageConstructParameterTest extends \PHPUnit\Framework\TestCase
-{
-    public function testOptions()
-    {
-        $keyword = new ReflectionLanguageConstruct('die');
-
-        $refl = new ReflectionLanguageConstructParameter($keyword, 'one', [
-            'isArray'             => false,
-            'defaultValue'        => null,
-            'isOptional'          => false,
-            'isPassedByReference' => false,
-        ]);
-
-        $this->assertNull($refl->getClass());
-        $this->assertEquals('one', $refl->getName());
-        $this->assertFalse($refl->isArray());
-        $this->assertTrue($refl->isDefaultValueAvailable());
-        $this->assertNull($refl->getDefaultValue());
-        $this->assertFalse($refl->isOptional());
-        $this->assertFalse($refl->isPassedByReference());
-
-        $reflTwo = new ReflectionLanguageConstructParameter($keyword, 'two', [
-            'isArray'             => true,
-            'isOptional'          => true,
-            'isPassedByReference' => true,
-        ]);
-
-        $this->assertNull($refl->getClass());
-        $this->assertEquals('two', $reflTwo->getName());
-        $this->assertTrue($reflTwo->isArray());
-        $this->assertFalse($reflTwo->isDefaultValueAvailable());
-        $this->assertNull($reflTwo->getDefaultValue());
-        $this->assertTrue($reflTwo->isOptional());
-        $this->assertTrue($reflTwo->isPassedByReference());
-
-        $refl = new ReflectionLanguageConstructParameter($keyword, 'three', [
-            'defaultValue' => 3,
-        ]);
-
-        $this->assertNull($refl->getClass());
-        $this->assertEquals('three', $refl->getName());
-        $this->assertFalse($refl->isArray());
-        $this->assertTrue($refl->isDefaultValueAvailable());
-        $this->assertEquals(3, $refl->getDefaultValue());
-        $this->assertFalse($refl->isOptional());
-        $this->assertFalse($refl->isPassedByReference());
-    }
-}
diff --git a/vendor/psy/psysh/test/Reflection/ReflectionLanguageConstructTest.php b/vendor/psy/psysh/test/Reflection/ReflectionLanguageConstructTest.php
deleted file mode 100644
index 872a726d64e9055742f007a5ab7d8e5cb52684c9..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/test/Reflection/ReflectionLanguageConstructTest.php
+++ /dev/null
@@ -1,102 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\Reflection;
-
-use Psy\Reflection\ReflectionLanguageConstruct;
-
-class ReflectionLanguageConstructTest extends \PHPUnit\Framework\TestCase
-{
-    /**
-     * @dataProvider languageConstructs
-     */
-    public function testConstruction($keyword)
-    {
-        $refl = new ReflectionLanguageConstruct($keyword);
-        $this->assertEquals($keyword, $refl->getName());
-        $this->assertEquals($keyword, (string) $refl);
-    }
-
-    /**
-     * @dataProvider languageConstructs
-     */
-    public function testKnownLanguageConstructs($keyword)
-    {
-        $this->assertTrue(ReflectionLanguageConstruct::isLanguageConstruct($keyword));
-    }
-
-    /**
-     * @dataProvider languageConstructs
-     */
-    public function testFileName($keyword)
-    {
-        $refl = new ReflectionLanguageConstruct($keyword);
-        $this->assertFalse($refl->getFileName());
-    }
-
-    /**
-     * @dataProvider languageConstructs
-     */
-    public function testReturnsReference($keyword)
-    {
-        $refl = new ReflectionLanguageConstruct($keyword);
-        $this->assertFalse($refl->returnsReference());
-    }
-
-    /**
-     * @dataProvider languageConstructs
-     */
-    public function testGetParameters($keyword)
-    {
-        $refl = new ReflectionLanguageConstruct($keyword);
-        $this->assertNotEmpty($refl->getParameters());
-    }
-
-    /**
-     * @dataProvider languageConstructs
-     * @expectedException \RuntimeException
-     */
-    public function testExportThrows($keyword)
-    {
-        ReflectionLanguageConstruct::export($keyword);
-    }
-
-    public function languageConstructs()
-    {
-        return [
-            ['isset'],
-            ['unset'],
-            ['empty'],
-            ['echo'],
-            ['print'],
-            ['die'],
-            ['exit'],
-        ];
-    }
-
-    /**
-     * @dataProvider unknownLanguageConstructs
-     * @expectedException \InvalidArgumentException
-     */
-    public function testUnknownLanguageConstructsThrowExceptions($keyword)
-    {
-        new ReflectionLanguageConstruct($keyword);
-    }
-
-    public function unknownLanguageConstructs()
-    {
-        return [
-            ['async'],
-            ['await'],
-            ['comefrom'],
-        ];
-    }
-}
diff --git a/vendor/psy/psysh/test/ShellTest.php b/vendor/psy/psysh/test/ShellTest.php
deleted file mode 100644
index 809af021e429df05386347a9295bae6ff038d5b6..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/test/ShellTest.php
+++ /dev/null
@@ -1,442 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test;
-
-use Psy\Configuration;
-use Psy\Exception\ErrorException;
-use Psy\Exception\ParseErrorException;
-use Psy\Shell;
-use Psy\TabCompletion\Matcher\ClassMethodsMatcher;
-use Symfony\Component\Console\Output\StreamOutput;
-
-class ShellTest extends \PHPUnit\Framework\TestCase
-{
-    private $streams = [];
-
-    public function tearDown()
-    {
-        foreach ($this->streams as $stream) {
-            \fclose($stream);
-        }
-    }
-
-    public function testScopeVariables()
-    {
-        $one       = 'banana';
-        $two       = 123;
-        $three     = new \StdClass();
-        $__psysh__ = 'ignore this';
-        $_         = 'ignore this';
-        $_e        = 'ignore this';
-
-        $shell = new Shell($this->getConfig());
-        $shell->setScopeVariables(\compact('one', 'two', 'three', '__psysh__', '_', '_e', 'this'));
-
-        $this->assertNotContains('__psysh__', $shell->getScopeVariableNames());
-        $this->assertSame(['one', 'two', 'three', '_'], $shell->getScopeVariableNames());
-        $this->assertSame('banana', $shell->getScopeVariable('one'));
-        $this->assertSame(123, $shell->getScopeVariable('two'));
-        $this->assertSame($three, $shell->getScopeVariable('three'));
-        $this->assertNull($shell->getScopeVariable('_'));
-
-        $diff = $shell->getScopeVariablesDiff(['one' => $one, 'two' => 'not two']);
-        $this->assertSame(['two' => $two, 'three' => $three, '_' => null], $diff);
-
-        $shell->setScopeVariables([]);
-        $this->assertSame(['_'], $shell->getScopeVariableNames());
-
-        $shell->setBoundObject($this);
-        $this->assertSame(['_', 'this'], $shell->getScopeVariableNames());
-        $this->assertSame($this, $shell->getScopeVariable('this'));
-        $this->assertSame(['_' => null], $shell->getScopeVariables(false));
-        $this->assertSame(['_' => null, 'this' => $this], $shell->getScopeVariables());
-    }
-
-    /**
-     * @expectedException \InvalidArgumentException
-     */
-    public function testUnknownScopeVariablesThrowExceptions()
-    {
-        $shell = new Shell($this->getConfig());
-        $shell->setScopeVariables(['foo' => 'FOO', 'bar' => 1]);
-        $shell->getScopeVariable('baz');
-    }
-
-    public function testIncludesWithScopeVariables()
-    {
-        $one       = 'banana';
-        $two       = 123;
-        $three     = new \StdClass();
-        $__psysh__ = 'ignore this';
-        $_         = 'ignore this';
-        $_e        = 'ignore this';
-
-        $config = $this->getConfig(['usePcntl' => false]);
-
-        $shell = new Shell($config);
-        $shell->setScopeVariables(\compact('one', 'two', 'three', '__psysh__', '_', '_e', 'this'));
-        $shell->addInput('exit', true);
-
-        // This is super slow and we shouldn't do this :(
-        $shell->run(null, $this->getOutput());
-
-        $this->assertNotContains('__psysh__', $shell->getScopeVariableNames());
-        $this->assertSame(['one', 'two', 'three', '_', '_e'], $shell->getScopeVariableNames());
-        $this->assertSame('banana', $shell->getScopeVariable('one'));
-        $this->assertSame(123, $shell->getScopeVariable('two'));
-        $this->assertSame($three, $shell->getScopeVariable('three'));
-        $this->assertNull($shell->getScopeVariable('_'));
-    }
-
-    public function testIncludes()
-    {
-        $config = $this->getConfig(['configFile' => __DIR__ . '/fixtures/empty.php']);
-
-        $shell = new Shell($config);
-        $this->assertEmpty($shell->getIncludes());
-        $shell->setIncludes(['foo', 'bar', 'baz']);
-        $this->assertSame(['foo', 'bar', 'baz'], $shell->getIncludes());
-    }
-
-    public function testIncludesConfig()
-    {
-        $config = $this->getConfig([
-            'defaultIncludes' => ['/file.php'],
-            'configFile'      => __DIR__ . '/fixtures/empty.php',
-        ]);
-
-        $shell = new Shell($config);
-
-        $includes = $shell->getIncludes();
-        $this->assertSame('/file.php', $includes[0]);
-    }
-
-    public function testAddMatchersViaConfig()
-    {
-        $shell = new FakeShell();
-        $matcher = new ClassMethodsMatcher();
-
-        $config = $this->getConfig([
-            'matchers' => [$matcher],
-        ]);
-        $config->setShell($shell);
-
-        $this->assertSame([$matcher], $shell->matchers);
-    }
-
-    public function testAddMatchersViaConfigAfterShell()
-    {
-        $shell = new FakeShell();
-        $matcher = new ClassMethodsMatcher();
-
-        $config = $this->getConfig([]);
-        $config->setShell($shell);
-        $config->addMatchers([$matcher]);
-
-        $this->assertSame([$matcher], $shell->matchers);
-    }
-
-    public function testRenderingExceptions()
-    {
-        $shell  = new Shell($this->getConfig());
-        $output = $this->getOutput();
-        $stream = $output->getStream();
-        $e      = new ParseErrorException('message', 13);
-
-        $shell->setOutput($output);
-        $shell->addCode('code');
-        $this->assertTrue($shell->hasCode());
-        $this->assertNotEmpty($shell->getCodeBuffer());
-
-        $shell->writeException($e);
-
-        $this->assertSame($e, $shell->getScopeVariable('_e'));
-        $this->assertFalse($shell->hasCode());
-        $this->assertEmpty($shell->getCodeBuffer());
-
-        \rewind($stream);
-        $streamContents = \stream_get_contents($stream);
-
-        $this->assertContains('PHP Parse error', $streamContents);
-        $this->assertContains('message', $streamContents);
-        $this->assertContains('line 13', $streamContents);
-    }
-
-    public function testHandlingErrors()
-    {
-        $shell  = new Shell($this->getConfig());
-        $output = $this->getOutput();
-        $stream = $output->getStream();
-        $shell->setOutput($output);
-
-        $oldLevel = \error_reporting();
-        \error_reporting($oldLevel & ~E_USER_NOTICE);
-
-        try {
-            $shell->handleError(E_USER_NOTICE, 'wheee', null, 13);
-        } catch (ErrorException $e) {
-            \error_reporting($oldLevel);
-            $this->fail('Unexpected error exception');
-        }
-        \error_reporting($oldLevel);
-
-        \rewind($stream);
-        $streamContents = \stream_get_contents($stream);
-
-        $this->assertContains('PHP Notice:', $streamContents);
-        $this->assertContains('wheee',       $streamContents);
-        $this->assertContains('line 13',     $streamContents);
-    }
-
-    /**
-     * @expectedException \Psy\Exception\ErrorException
-     */
-    public function testNotHandlingErrors()
-    {
-        $shell    = new Shell($this->getConfig());
-        $oldLevel = \error_reporting();
-        \error_reporting($oldLevel | E_USER_NOTICE);
-
-        try {
-            $shell->handleError(E_USER_NOTICE, 'wheee', null, 13);
-        } catch (ErrorException $e) {
-            \error_reporting($oldLevel);
-            throw $e;
-        }
-    }
-
-    public function testVersion()
-    {
-        $shell = new Shell($this->getConfig());
-
-        $this->assertInstanceOf('Symfony\Component\Console\Application', $shell);
-        $this->assertContains(Shell::VERSION, $shell->getVersion());
-        $this->assertContains(PHP_VERSION, $shell->getVersion());
-        $this->assertContains(PHP_SAPI, $shell->getVersion());
-    }
-
-    public function testCodeBuffer()
-    {
-        $shell = new Shell($this->getConfig());
-
-        $shell->addCode('class');
-        $this->assertNull($shell->flushCode());
-        $this->assertTrue($shell->hasCode());
-
-        $shell->addCode('a');
-        $this->assertNull($shell->flushCode());
-        $this->assertTrue($shell->hasCode());
-
-        $shell->addCode('{}');
-        $code = $shell->flushCode();
-        $this->assertFalse($shell->hasCode());
-        $code = \preg_replace('/\s+/', ' ', $code);
-        $this->assertNotNull($code);
-        $this->assertSame('class a { } return new \\Psy\\CodeCleaner\\NoReturnValue();', $code);
-    }
-
-    public function testKeepCodeBufferOpen()
-    {
-        $shell = new Shell($this->getConfig());
-
-        $shell->addCode('1 \\');
-        $this->assertNull($shell->flushCode());
-        $this->assertTrue($shell->hasCode());
-
-        $shell->addCode('+ 1 \\');
-        $this->assertNull($shell->flushCode());
-        $this->assertTrue($shell->hasCode());
-
-        $shell->addCode('+ 1');
-        $code = $shell->flushCode();
-        $this->assertFalse($shell->hasCode());
-        $code = \preg_replace('/\s+/', ' ', $code);
-        $this->assertNotNull($code);
-        $this->assertSame('return 1 + 1 + 1;', $code);
-    }
-
-    /**
-     * @expectedException \Psy\Exception\ParseErrorException
-     */
-    public function testCodeBufferThrowsParseExceptions()
-    {
-        $shell = new Shell($this->getConfig());
-        $shell->addCode('this is not valid');
-        $shell->flushCode();
-    }
-
-    public function testClosuresSupport()
-    {
-        $shell = new Shell($this->getConfig());
-        $code = '$test = function () {}';
-        $shell->addCode($code);
-        $shell->flushCode();
-        $code = '$test()';
-        $shell->addCode($code);
-        $this->assertSame($shell->flushCode(), 'return $test();');
-    }
-
-    public function testWriteStdout()
-    {
-        $output = $this->getOutput();
-        $stream = $output->getStream();
-        $shell  = new Shell($this->getConfig());
-        $shell->setOutput($output);
-
-        $shell->writeStdout("{{stdout}}\n");
-
-        \rewind($stream);
-        $streamContents = \stream_get_contents($stream);
-
-        $this->assertSame('{{stdout}}' . PHP_EOL, $streamContents);
-    }
-
-    public function testWriteStdoutWithoutNewline()
-    {
-        $output = $this->getOutput();
-        $stream = $output->getStream();
-        $shell  = new Shell($this->getConfig());
-        $shell->setOutput($output);
-
-        $shell->writeStdout('{{stdout}}');
-
-        \rewind($stream);
-        $streamContents = \stream_get_contents($stream);
-
-        $this->assertSame('{{stdout}}<aside>⏎</aside>' . PHP_EOL, $streamContents);
-    }
-
-    /**
-     * @dataProvider getReturnValues
-     */
-    public function testWriteReturnValue($input, $expected)
-    {
-        $output = $this->getOutput();
-        $stream = $output->getStream();
-        $shell  = new Shell($this->getConfig());
-        $shell->setOutput($output);
-
-        $shell->writeReturnValue($input);
-        \rewind($stream);
-        $this->assertEquals($expected, \stream_get_contents($stream));
-    }
-
-    public function getReturnValues()
-    {
-        return [
-            ['{{return value}}', "=> \"\033[32m{{return value}}\033[39m\"" . PHP_EOL],
-            [1, "=> \033[35m1\033[39m" . PHP_EOL],
-        ];
-    }
-
-    /**
-     * @dataProvider getRenderedExceptions
-     */
-    public function testWriteException($exception, $expected)
-    {
-        $output = $this->getOutput();
-        $stream = $output->getStream();
-        $shell  = new Shell($this->getConfig());
-        $shell->setOutput($output);
-
-        $shell->writeException($exception);
-        \rewind($stream);
-        $this->assertSame($expected, \stream_get_contents($stream));
-    }
-
-    public function getRenderedExceptions()
-    {
-        return [
-            [new \Exception('{{message}}'), "Exception with message '{{message}}'" . PHP_EOL],
-        ];
-    }
-
-    /**
-     * @dataProvider getExecuteValues
-     */
-    public function testShellExecute($input, $expected)
-    {
-        $output = $this->getOutput();
-        $stream = $output->getStream();
-        $shell  = new Shell($this->getConfig());
-        $shell->setOutput($output);
-        $this->assertEquals($expected, $shell->execute($input));
-        \rewind($stream);
-        $this->assertSame('', \stream_get_contents($stream));
-    }
-
-    public function getExecuteValues()
-    {
-        return [
-            ['return 12', 12],
-            ['"{{return value}}"', '{{return value}}'],
-            ['1', '1'],
-        ];
-    }
-
-    /**
-     * @dataProvider commandsToHas
-     */
-    public function testHasCommand($command, $has)
-    {
-        $shell = new Shell($this->getConfig());
-
-        // :-/
-        $refl = new \ReflectionClass('Psy\\Shell');
-        $method = $refl->getMethod('hasCommand');
-        $method->setAccessible(true);
-
-        $this->assertEquals($method->invokeArgs($shell, [$command]), $has);
-    }
-
-    public function commandsToHas()
-    {
-        return [
-            ['help', true],
-            ['help help', true],
-            ['"help"', false],
-            ['"help help"', false],
-            ['ls -al ', true],
-            ['ls "-al" ', true],
-            ['ls"-al"', false],
-            [' q', true],
-            ['   q  --help', true],
-            ['"q"', false],
-            ['"q",', false],
-        ];
-    }
-
-    private function getOutput()
-    {
-        $stream = \fopen('php://memory', 'w+');
-        $this->streams[] = $stream;
-
-        $output = new StreamOutput($stream, StreamOutput::VERBOSITY_NORMAL, false);
-
-        return $output;
-    }
-
-    private function getConfig(array $config = [])
-    {
-        // Mebbe there's a better way than this?
-        $dir = \tempnam(\sys_get_temp_dir(), 'psysh_shell_test_');
-        \unlink($dir);
-
-        $defaults = [
-            'configDir'  => $dir,
-            'dataDir'    => $dir,
-            'runtimeDir' => $dir,
-        ];
-
-        return new Configuration(\array_merge($defaults, $config));
-    }
-}
diff --git a/vendor/psy/psysh/test/Sudo/SudoVisitorTest.php b/vendor/psy/psysh/test/Sudo/SudoVisitorTest.php
deleted file mode 100644
index 1f2042c8662dc22be9a33f048c32341c119143d7..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/test/Sudo/SudoVisitorTest.php
+++ /dev/null
@@ -1,142 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\Sudo;
-
-use PhpParser\NodeTraverser;
-use Psy\Sudo\SudoVisitor;
-use Psy\Test\ParserTestCase;
-
-class SudoVisitorTest extends ParserTestCase
-{
-    public function setUp()
-    {
-        $this->traverser = new NodeTraverser();
-        $this->traverser->addVisitor(new SudoVisitor());
-    }
-
-    /**
-     * @dataProvider propertyFetches
-     */
-    public function testPropertyFetch($from, $to)
-    {
-        $this->assertProcessesAs($from, $to);
-    }
-
-    public function propertyFetches()
-    {
-        return [
-            ['$a->b', "\Psy\Sudo::fetchProperty(\$a, 'b');"],
-            ['$a->$b', '\Psy\Sudo::fetchProperty($a, $b);'],
-            ["\$a->{'b'}", "\Psy\Sudo::fetchProperty(\$a, 'b');"],
-        ];
-    }
-
-    /**
-     * @dataProvider propertyAssigns
-     */
-    public function testPropertyAssign($from, $to)
-    {
-        $this->assertProcessesAs($from, $to);
-    }
-
-    public function propertyAssigns()
-    {
-        return [
-            ['$a->b = $c', "\Psy\Sudo::assignProperty(\$a, 'b', \$c);"],
-            ['$a->$b = $c', '\Psy\Sudo::assignProperty($a, $b, $c);'],
-            ["\$a->{'b'} = \$c", "\Psy\Sudo::assignProperty(\$a, 'b', \$c);"],
-        ];
-    }
-
-    /**
-     * @dataProvider methodCalls
-     */
-    public function testMethodCall($from, $to)
-    {
-        $this->assertProcessesAs($from, $to);
-    }
-
-    public function methodCalls()
-    {
-        return [
-            ['$a->b()', "\Psy\Sudo::callMethod(\$a, 'b');"],
-            ['$a->$b()', '\Psy\Sudo::callMethod($a, $b);'],
-            ["\$a->b(\$c, 'd')", "\Psy\Sudo::callMethod(\$a, 'b', \$c, 'd');"],
-            ["\$a->\$b(\$c, 'd')", "\Psy\Sudo::callMethod(\$a, \$b, \$c, 'd');"],
-        ];
-    }
-
-    /**
-     * @dataProvider staticPropertyFetches
-     */
-    public function testStaticPropertyFetch($from, $to)
-    {
-        $this->assertProcessesAs($from, $to);
-    }
-
-    public function staticPropertyFetches()
-    {
-        return [
-            ['A::$b', "\Psy\Sudo::fetchStaticProperty('A', 'b');"],
-            ['$a::$b', "\Psy\Sudo::fetchStaticProperty(\$a, 'b');"],
-        ];
-    }
-
-    /**
-     * @dataProvider staticPropertyAssigns
-     */
-    public function testStaticPropertyAssign($from, $to)
-    {
-        $this->assertProcessesAs($from, $to);
-    }
-
-    public function staticPropertyAssigns()
-    {
-        return [
-            ['A::$b = $c', "\Psy\Sudo::assignStaticProperty('A', 'b', \$c);"],
-            ['$a::$b = $c', "\Psy\Sudo::assignStaticProperty(\$a, 'b', \$c);"],
-        ];
-    }
-
-    /**
-     * @dataProvider staticCalls
-     */
-    public function testStaticCall($from, $to)
-    {
-        $this->assertProcessesAs($from, $to);
-    }
-
-    public function staticCalls()
-    {
-        return [
-            ['A::b()', "\Psy\Sudo::callStatic('A', 'b');"],
-            ['A::$b()', "\Psy\Sudo::callStatic('A', \$b);"],
-            ["A::b(\$c, 'd')", "\Psy\Sudo::callStatic('A', 'b', \$c, 'd');"],
-            ["A::\$b(\$c, 'd')", "\Psy\Sudo::callStatic('A', \$b, \$c, 'd');"],
-        ];
-    }
-
-    /**
-     * @dataProvider classConstFetches
-     */
-    public function testClassConstFetch($from, $to)
-    {
-        $this->assertProcessesAs($from, $to);
-    }
-
-    public function classConstFetches()
-    {
-        return [
-            ['A::B', "\Psy\Sudo::fetchClassConst('A', 'B');"],
-        ];
-    }
-}
diff --git a/vendor/psy/psysh/test/SudoTest.php b/vendor/psy/psysh/test/SudoTest.php
deleted file mode 100644
index 6123db04e64d4797fc4ce7b19370bc0971d6ec12..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/test/SudoTest.php
+++ /dev/null
@@ -1,80 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test;
-
-use Psy\Sudo;
-
-class SudoTest extends \PHPUnit\Framework\TestCase
-{
-    public function setUp()
-    {
-        if (\version_compare(PHP_VERSION, '7.1.0', '<')) {
-            $this->markTestSkipped('YOLO');
-        }
-    }
-
-    public function testFetchProperty()
-    {
-        $obj = new ClassWithSecrets();
-        $this->assertSame('private and prop', Sudo::fetchProperty($obj, 'privateProp'));
-    }
-
-    public function testAssignProperty()
-    {
-        $obj = new ClassWithSecrets();
-        $this->assertSame('private and prop', Sudo::fetchProperty($obj, 'privateProp'));
-        $this->assertSame('not so private now', Sudo::assignProperty($obj, 'privateProp', 'not so private now'));
-        $this->assertSame('not so private now', Sudo::fetchProperty($obj, 'privateProp'));
-    }
-
-    public function testCallMethod()
-    {
-        $obj = new ClassWithSecrets();
-        $this->assertSame('private and method', Sudo::callMethod($obj, 'privateMethod'));
-        $this->assertSame('private and method with 1', Sudo::callMethod($obj, 'privateMethod', 1));
-        $this->assertSame(
-            'private and method with ["foo",2]',
-            Sudo::callMethod($obj, 'privateMethod', ['foo', 2]
-        ));
-    }
-
-    public function testFetchStaticProperty()
-    {
-        $obj = new ClassWithSecrets();
-        $this->assertSame('private and static and prop', Sudo::fetchStaticProperty($obj, 'privateStaticProp'));
-    }
-
-    public function testAssignStaticProperty()
-    {
-        $obj = new ClassWithSecrets();
-        $this->assertSame('private and static and prop', Sudo::fetchStaticProperty($obj, 'privateStaticProp'));
-        $this->assertSame('not so private now', Sudo::assignStaticProperty($obj, 'privateStaticProp', 'not so private now'));
-        $this->assertSame('not so private now', Sudo::fetchStaticProperty($obj, 'privateStaticProp'));
-    }
-
-    public function testCallStatic()
-    {
-        $obj = new ClassWithSecrets();
-        $this->assertSame('private and static and method', Sudo::callStatic($obj, 'privateStaticMethod'));
-        $this->assertSame('private and static and method with 1', Sudo::callStatic($obj, 'privateStaticMethod', 1));
-        $this->assertSame(
-            'private and static and method with ["foo",2]',
-            Sudo::callStatic($obj, 'privateStaticMethod', ['foo', 2]
-        ));
-    }
-
-    public function testFetchClassConst()
-    {
-        $obj = new ClassWithSecrets();
-        $this->assertSame('private and const', Sudo::fetchClassConst($obj, 'PRIVATE_CONST'));
-    }
-}
diff --git a/vendor/psy/psysh/test/TabCompletion/AutoCompleterTest.php b/vendor/psy/psysh/test/TabCompletion/AutoCompleterTest.php
deleted file mode 100644
index d98d452c4329213343cd08811463ff7f4ba89e1e..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/test/TabCompletion/AutoCompleterTest.php
+++ /dev/null
@@ -1,145 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\TabCompletion;
-
-use Psy\Command\ListCommand;
-use Psy\Command\ShowCommand;
-use Psy\Configuration;
-use Psy\Context;
-use Psy\ContextAware;
-use Psy\TabCompletion\Matcher;
-
-class AutoCompleterTest extends \PHPUnit\Framework\TestCase
-{
-    /**
-     * @param string $line
-     * @param array  $mustContain
-     * @param array  $mustNotContain
-     * @dataProvider classesInput
-     */
-    public function testClassesCompletion($line, $mustContain, $mustNotContain)
-    {
-        $context = new Context();
-
-        $commands = [
-            new ShowCommand(),
-            new ListCommand(),
-        ];
-
-        $matchers = [
-            new Matcher\VariablesMatcher(),
-            new Matcher\ClassNamesMatcher(),
-            new Matcher\ConstantsMatcher(),
-            new Matcher\FunctionsMatcher(),
-            new Matcher\ObjectMethodsMatcher(),
-            new Matcher\ObjectAttributesMatcher(),
-            new Matcher\KeywordsMatcher(),
-            new Matcher\ClassAttributesMatcher(),
-            new Matcher\ClassMethodsMatcher(),
-            new Matcher\CommandsMatcher($commands),
-        ];
-
-        $config = new Configuration();
-        $tabCompletion = $config->getAutoCompleter();
-        foreach ($matchers as $matcher) {
-            if ($matcher instanceof ContextAware) {
-                $matcher->setContext($context);
-            }
-            $tabCompletion->addMatcher($matcher);
-        }
-
-        $context->setAll(['foo' => 12, 'bar' => new \DOMDocument()]);
-
-        $code = $tabCompletion->processCallback('', 0, [
-           'line_buffer' => $line,
-           'point'       => 0,
-           'end'         => \strlen($line),
-        ]);
-
-        foreach ($mustContain as $mc) {
-            $this->assertContains($mc, $code);
-        }
-
-        foreach ($mustNotContain as $mnc) {
-            $this->assertNotContains($mnc, $code);
-        }
-    }
-
-    /**
-     * TODO
-     * ====
-     * draft, open to modifications
-     * - [ ] if the variable is an array, return the square bracket for completion
-     * - [ ] if the variable is a constructor or method, reflect to complete as a function call
-     * - [ ] if the preceding token is a variable, call operators or keywords compatible for completion
-     * - [X] a command always should be the second token after php_open_tag
-     * - [X] keywords are never consecutive
-     * - [X] namespacing completion should work just fine
-     * - [X] after a new keyword, should always be a class constructor, never a function call or keyword, constant,
-     *       or variable that does not contain a existing class name.
-     * - [X] on a namespaced constructor the completion must show the classes related, not constants.
-     *
-     * @return array
-     */
-    public function classesInput()
-    {
-        return [
-            // input, must had, must not had
-            ['T_OPE', ['T_OPEN_TAG'], []],
-            ['st', ['stdClass'], []],
-            ['stdCla', ['stdClass'], []],
-            ['new s', ['stdClass'], []],
-            [
-                'new ',
-                ['stdClass', 'Psy\\Context', 'Psy\\Configuration'],
-                ['require', 'array_search', 'T_OPEN_TAG', '$foo'],
-            ],
-            ['new Psy\\C', ['Context'], ['CASE_LOWER']],
-            ['\s', ['stdClass'], []],
-            ['array_', ['array_search', 'array_map', 'array_merge'], []],
-            ['$bar->', ['load'], []],
-            ['$b', ['bar'], []],
-            ['6 + $b', ['bar'], []],
-            ['$f', ['foo'], []],
-            ['l', ['ls'], []],
-            ['ls ', [], ['ls']],
-            ['sho', ['show'], []],
-            ['12 + clone $', ['foo'], []],
-            // array(
-            //   '$foo ',
-            //   array('+', 'clone'),
-            //   array('$foo', 'DOMDocument', 'array_map')
-            // ), requires a operator matcher?
-            ['$', ['foo', 'bar'], ['require', 'array_search', 'T_OPEN_TAG', 'Psy']],
-            [
-                'Psy\\',
-                ['Context', 'TabCompletion\\Matcher\\AbstractMatcher'],
-                ['require', 'array_search'],
-            ],
-            [
-                'Psy\Test\TabCompletion\StaticSample::CO',
-                ['StaticSample::CONSTANT_VALUE'],
-                [],
-            ],
-            [
-                'Psy\Test\TabCompletion\StaticSample::',
-                ['StaticSample::$staticVariable'],
-                [],
-            ],
-            [
-                'Psy\Test\TabCompletion\StaticSample::',
-                ['StaticSample::staticFunction'],
-                [],
-            ],
-        ];
-    }
-}
diff --git a/vendor/psy/psysh/test/TabCompletion/StaticSample.php b/vendor/psy/psysh/test/TabCompletion/StaticSample.php
deleted file mode 100644
index e0de2f0bb32a970a8c534529847fe9c3a4910a2c..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/test/TabCompletion/StaticSample.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\TabCompletion;
-
-/**
- * Class StaticSample.
- */
-class StaticSample
-{
-    const CONSTANT_VALUE = 12;
-
-    public static $staticVariable;
-
-    public static function staticFunction()
-    {
-        return self::CONSTANT_VALUE;
-    }
-}
diff --git a/vendor/psy/psysh/test/Util/DocblockTest.php b/vendor/psy/psysh/test/Util/DocblockTest.php
deleted file mode 100644
index 82e12feded38558f95c5c5149ad46b58a56e4ebc..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/test/Util/DocblockTest.php
+++ /dev/null
@@ -1,100 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\Util;
-
-use Psy\Util\Docblock;
-
-class DocblockTest extends \PHPUnit\Framework\TestCase
-{
-    /**
-     * @dataProvider comments
-     */
-    public function testDocblockParsing($comment, $body, $tags)
-    {
-        $reflector = $this
-            ->getMockBuilder('ReflectionClass')
-            ->disableOriginalConstructor()
-            ->getMock();
-
-        $reflector->expects($this->once())
-            ->method('getDocComment')
-            ->will($this->returnValue($comment));
-
-        $docblock = new Docblock($reflector);
-
-        $this->assertSame($body, $docblock->desc);
-
-        foreach ($tags as $tag => $value) {
-            $this->assertTrue($docblock->hasTag($tag));
-            $this->assertEquals($value, $docblock->tag($tag));
-        }
-    }
-
-    public function comments()
-    {
-        if (\defined('HHVM_VERSION')) {
-            $this->markTestSkipped('We have issues with PHPUnit mocks on HHVM.');
-        }
-
-        return [
-            ['', '', []],
-            [
-                '/**
-                 * This is a docblock
-                 *
-                 * @throws \Exception with a description
-                 */',
-                'This is a docblock',
-                [
-                    'throws' => [['type' => '\Exception', 'desc' => 'with a description']],
-                ],
-            ],
-            [
-                '/**
-                 * This is a slightly longer docblock
-                 *
-                 * @param int         $foo Is a Foo
-                 * @param string      $bar With some sort of description
-                 * @param \ClassName $baz is cool too
-                 *
-                 * @return int At least it isn\'t a string
-                 */',
-                'This is a slightly longer docblock',
-                [
-                    'param' => [
-                        ['type' => 'int', 'desc' => 'Is a Foo', 'var' => '$foo'],
-                        ['type' => 'string', 'desc' => 'With some sort of description', 'var' => '$bar'],
-                        ['type' => '\ClassName', 'desc' => 'is cool too', 'var' => '$baz'],
-                    ],
-                    'return' => [
-                        ['type' => 'int', 'desc' => 'At least it isn\'t a string'],
-                    ],
-                ],
-            ],
-            [
-                '/**
-                 * This is a docblock!
-                 *
-                 * It spans lines, too!
-                 *
-                 * @tagname plus a description
-                 *
-                 * @return
-                 */',
-                "This is a docblock!\n\nIt spans lines, too!",
-                [
-                    'tagname' => ['plus a description'],
-                ],
-            ],
-        ];
-    }
-}
diff --git a/vendor/psy/psysh/test/Util/MirrorTest.php b/vendor/psy/psysh/test/Util/MirrorTest.php
deleted file mode 100644
index 585fffbb2deb79f65b4fd0b1ad5daabec4e7f484..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/test/Util/MirrorTest.php
+++ /dev/null
@@ -1,86 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\Util;
-
-use Psy\Util\Mirror;
-
-class MirrorTest extends \PHPUnit\Framework\TestCase
-{
-    const FOO           = 1;
-    private $bar        = 2;
-    private static $baz = 3;
-
-    public function aPublicMethod()
-    {
-        // nada
-    }
-
-    public function testMirror()
-    {
-        $refl = Mirror::get('sort');
-        $this->assertInstanceOf('ReflectionFunction', $refl);
-
-        $refl = Mirror::get('Psy\Test\Util\MirrorTest');
-        $this->assertInstanceOf('ReflectionClass', $refl);
-
-        $refl = Mirror::get($this);
-        $this->assertInstanceOf('ReflectionObject', $refl);
-
-        $refl = Mirror::get($this, 'FOO');
-        if (\version_compare(PHP_VERSION, '7.1.0', '>=')) {
-            $this->assertInstanceOf('ReflectionClassConstant', $refl);
-        } else {
-            $this->assertInstanceOf('Psy\Reflection\ReflectionClassConstant', $refl);
-        }
-
-        $refl = Mirror::get('PHP_VERSION');
-        $this->assertInstanceOf('Psy\Reflection\ReflectionConstant_', $refl);
-
-        $refl = Mirror::get($this, 'bar');
-        $this->assertInstanceOf('ReflectionProperty', $refl);
-
-        $refl = Mirror::get($this, 'baz');
-        $this->assertInstanceOf('ReflectionProperty', $refl);
-
-        $refl = Mirror::get($this, 'aPublicMethod');
-        $this->assertInstanceOf('ReflectionMethod', $refl);
-
-        $refl = Mirror::get($this, 'baz', Mirror::STATIC_PROPERTY);
-        $this->assertInstanceOf('ReflectionProperty', $refl);
-    }
-
-    /**
-     * @expectedException \RuntimeException
-     */
-    public function testMirrorThrowsExceptions()
-    {
-        Mirror::get($this, 'notAMethod');
-    }
-
-    /**
-     * @expectedException \InvalidArgumentException
-     * @dataProvider invalidArguments
-     */
-    public function testMirrorThrowsInvalidArgumentExceptions($value)
-    {
-        Mirror::get($value);
-    }
-
-    public function invalidArguments()
-    {
-        return [
-            ['not_a_function_or_class'],
-            [[]],
-            [1],
-        ];
-    }
-}
diff --git a/vendor/psy/psysh/test/Util/StrTest.php b/vendor/psy/psysh/test/Util/StrTest.php
deleted file mode 100644
index 4f99a79b3708e02335adf3391725651b8051c3b3..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/test/Util/StrTest.php
+++ /dev/null
@@ -1,31 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\Util;
-
-use Psy\Util\Str;
-
-class StrTest extends \PHPUnit\Framework\TestCase
-{
-    /**
-     * @dataProvider unvisProvider
-     */
-    public function testUnvis($input, $expected)
-    {
-        $this->assertSame($expected, Str::unvis($input));
-    }
-
-    public function unvisProvider()
-    {
-        //return require_once(__DIR__.'/../fixtures/unvis_fixtures.php');
-        return \json_decode(\file_get_contents(__DIR__ . '/../fixtures/unvis_fixtures.json'));
-    }
-}
diff --git a/vendor/psy/psysh/test/VersionUpdater/GitHubCheckerTest.php b/vendor/psy/psysh/test/VersionUpdater/GitHubCheckerTest.php
deleted file mode 100644
index 7d12d47d602dc0c4362ecb1ac7db0ac920a26386..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/test/VersionUpdater/GitHubCheckerTest.php
+++ /dev/null
@@ -1,82 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\VersionUpdater;
-
-use Psy\Shell;
-
-class GitHubCheckerTest extends \PHPUnit\Framework\TestCase
-{
-    /**
-     * @dataProvider malformedResults
-     * @expectedException \InvalidArgumentException
-     * @expectedExceptionMessage Unable to check for updates
-     *
-     * @param mixed $input
-     */
-    public function testExceptionInvocation($input)
-    {
-        $checker = $this->getMockBuilder('Psy\\VersionUpdater\\GitHubChecker')
-            ->setMethods(['fetchLatestRelease'])
-            ->getMock();
-        $checker->expects($this->once())->method('fetchLatestRelease')->willReturn($input);
-        $checker->isLatest();
-    }
-
-    /**
-     * @dataProvider jsonResults
-     *
-     * @param bool  $assertion
-     * @param mixed $input
-     */
-    public function testDataSetResults($assertion, $input)
-    {
-        $checker = $this->getMockBuilder('Psy\\VersionUpdater\\GitHubChecker')
-            ->setMethods(['fetchLatestRelease'])
-            ->getMock();
-        $checker->expects($this->once())->method('fetchLatestRelease')->willReturn($input);
-        $this->assertSame($assertion, $checker->isLatest());
-    }
-
-    /**
-     * @return array
-     */
-    public function jsonResults()
-    {
-        return [
-            [false, \json_decode('{"tag_name":"v9.0.0"}')],
-            [true, \json_decode('{"tag_name":"v' . Shell::VERSION . '"}')],
-            [true, \json_decode('{"tag_name":"v0.0.1"}')],
-            [true, \json_decode('{"tag_name":"v0.4.1-alpha"}')],
-            [true, \json_decode('{"tag_name":"v0.4.2-beta3"}')],
-            [true, \json_decode('{"tag_name":"v0.0.1"}')],
-            [true, \json_decode('{"tag_name":""}')],
-        ];
-    }
-
-    /**
-     * @return array
-     */
-    public function malformedResults()
-    {
-        return [
-            [null],
-            [false],
-            [true],
-            [\json_decode('{"foo":"bar"}')],
-            [\json_decode('{}')],
-            [\json_decode('[]')],
-            [[]],
-            [\json_decode('{"tag_name":false"}')],
-            [\json_decode('{"tag_name":true"}')],
-        ];
-    }
-}
diff --git a/vendor/psy/psysh/test/VersionUpdater/NoopCheckerTest.php b/vendor/psy/psysh/test/VersionUpdater/NoopCheckerTest.php
deleted file mode 100644
index b9ba568c7ad9a62ab295158dd63258aee202d866..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/test/VersionUpdater/NoopCheckerTest.php
+++ /dev/null
@@ -1,25 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\Test\VersionUpdater;
-
-use Psy\Shell;
-use Psy\VersionUpdater\NoopChecker;
-
-class NoopCheckerTest extends \PHPUnit\Framework\TestCase
-{
-    public function testTheThings()
-    {
-        $checker = new NoopChecker();
-        $this->assertTrue($checker->isLatest());
-        $this->assertEquals(Shell::VERSION, $checker->getLatest());
-    }
-}
diff --git a/vendor/psy/psysh/test/fixtures/config.php b/vendor/psy/psysh/test/fixtures/config.php
deleted file mode 100644
index 4c74b79d0242ae154a613b81480ff3a8686dcffb..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/test/fixtures/config.php
+++ /dev/null
@@ -1,20 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-$config->setRuntimeDir(\sys_get_temp_dir() . '/psysh_test/withconfig/temp');
-
-return [
-    'useReadline'       => true,
-    'usePcntl'          => false,
-    'requireSemicolons' => false,
-    'useUnicode'        => true,
-    'errorLoggingLevel' => E_ALL & ~E_NOTICE,
-];
diff --git a/vendor/psy/psysh/test/fixtures/default/.config/psysh/config.php b/vendor/psy/psysh/test/fixtures/default/.config/psysh/config.php
deleted file mode 100644
index b3d9bbc7f3711e882119cd6b3af051245d859d04..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/test/fixtures/default/.config/psysh/config.php
+++ /dev/null
@@ -1 +0,0 @@
-<?php
diff --git a/vendor/psy/psysh/test/fixtures/default/.config/psysh/psysh_history b/vendor/psy/psysh/test/fixtures/default/.config/psysh/psysh_history
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/vendor/psy/psysh/test/fixtures/default/.local/share/psysh/php_manual.sqlite b/vendor/psy/psysh/test/fixtures/default/.local/share/psysh/php_manual.sqlite
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/vendor/psy/psysh/test/fixtures/empty.php b/vendor/psy/psysh/test/fixtures/empty.php
deleted file mode 100644
index ba4e5784ce579dcfc075c958b626022213e8af2a..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/test/fixtures/empty.php
+++ /dev/null
@@ -1,12 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-/* this space intentionally left blank */
diff --git a/vendor/psy/psysh/test/fixtures/legacy/.psysh/history b/vendor/psy/psysh/test/fixtures/legacy/.psysh/history
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/vendor/psy/psysh/test/fixtures/legacy/.psysh/php_manual.sqlite b/vendor/psy/psysh/test/fixtures/legacy/.psysh/php_manual.sqlite
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/vendor/psy/psysh/test/fixtures/legacy/.psysh/rc.php b/vendor/psy/psysh/test/fixtures/legacy/.psysh/rc.php
deleted file mode 100644
index b3d9bbc7f3711e882119cd6b3af051245d859d04..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/test/fixtures/legacy/.psysh/rc.php
+++ /dev/null
@@ -1 +0,0 @@
-<?php
diff --git a/vendor/psy/psysh/test/fixtures/mixed/.psysh/config.php b/vendor/psy/psysh/test/fixtures/mixed/.psysh/config.php
deleted file mode 100644
index b3d9bbc7f3711e882119cd6b3af051245d859d04..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/test/fixtures/mixed/.psysh/config.php
+++ /dev/null
@@ -1 +0,0 @@
-<?php
diff --git a/vendor/psy/psysh/test/fixtures/mixed/.psysh/psysh_history b/vendor/psy/psysh/test/fixtures/mixed/.psysh/psysh_history
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/vendor/psy/psysh/test/fixtures/mixed/.psysh/rc.php b/vendor/psy/psysh/test/fixtures/mixed/.psysh/rc.php
deleted file mode 100644
index b3d9bbc7f3711e882119cd6b3af051245d859d04..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/test/fixtures/mixed/.psysh/rc.php
+++ /dev/null
@@ -1 +0,0 @@
-<?php
diff --git a/vendor/psy/psysh/test/fixtures/project/.psysh.php b/vendor/psy/psysh/test/fixtures/project/.psysh.php
deleted file mode 100644
index 8ba668c812fbae0c5d4ebf327abe9278094b9810..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/test/fixtures/project/.psysh.php
+++ /dev/null
@@ -1,17 +0,0 @@
-<?php
-
-/*
- * This file is part of Psy Shell
- *
- * (c) 2012-2017 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-return array(
-    'useReadline'       => false,
-    'usePcntl'          => true,
-    'requireSemicolons' => true,
-    'useUnicode'        => false,
-);
diff --git a/vendor/psy/psysh/test/fixtures/unvis_fixtures.json b/vendor/psy/psysh/test/fixtures/unvis_fixtures.json
deleted file mode 100644
index 960fb02a1375b56840595ef99346ff2c214a3c62..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/test/fixtures/unvis_fixtures.json
+++ /dev/null
@@ -1 +0,0 @@
-[["", ""], ["\\^A", "\u0001"], ["\\^B", "\u0002"], ["\\^C", "\u0003"], ["\\^D", "\u0004"], ["\\^E", "\u0005"], ["\\^F", "\u0006"], ["\\^G", "\u0007"], ["\\^H", "\b"], ["\\^I", "\t"], ["\\^J", "\n"], ["\\^K", "\u000b"], ["\\^L", "\f"], ["\\^M", "\r"], ["\\^N", "\u000e"], ["\\^O", "\u000f"], ["\\^P", "\u0010"], ["\\^Q", "\u0011"], ["\\^R", "\u0012"], ["\\^S", "\u0013"], ["\\^T", "\u0014"], ["\\^U", "\u0015"], ["\\^V", "\u0016"], ["\\^W", "\u0017"], ["\\^X", "\u0018"], ["\\^Y", "\u0019"], ["\\^Z", "\u001a"], ["\\^[", "\u001b"], ["\\^\\", "\u001c"], ["\\^]", "\u001d"], ["\\^^", "\u001e"], ["\\^_", "\u001f"], ["\\040", " "], ["!", "!"], ["\"", "\""], ["#", "#"], ["$", "$"], ["%", "%"], ["&", "&"], ["'", "'"], ["(", "("], [")", ")"], ["*", "*"], ["+", "+"], [",", ","], ["-", "-"], [".", "."], ["/", "/"], ["0", "0"], ["1", "1"], ["2", "2"], ["3", "3"], ["4", "4"], ["5", "5"], ["6", "6"], ["7", "7"], ["8", "8"], ["9", "9"], [":", ":"], [";", ";"], ["<", "<"], ["=", "="], [">", ">"], ["?", "?"], ["@", "@"], ["A", "A"], ["B", "B"], ["C", "C"], ["D", "D"], ["E", "E"], ["F", "F"], ["G", "G"], ["H", "H"], ["I", "I"], ["J", "J"], ["K", "K"], ["L", "L"], ["M", "M"], ["N", "N"], ["O", "O"], ["P", "P"], ["Q", "Q"], ["R", "R"], ["S", "S"], ["T", "T"], ["U", "U"], ["V", "V"], ["W", "W"], ["X", "X"], ["Y", "Y"], ["Z", "Z"], ["[", "["], ["\\\\", "\\"], ["]", "]"], ["^", "^"], ["_", "_"], ["`", "`"], ["a", "a"], ["b", "b"], ["c", "c"], ["d", "d"], ["e", "e"], ["f", "f"], ["g", "g"], ["h", "h"], ["i", "i"], ["j", "j"], ["k", "k"], ["l", "l"], ["m", "m"], ["n", "n"], ["o", "o"], ["p", "p"], ["q", "q"], ["r", "r"], ["s", "s"], ["t", "t"], ["u", "u"], ["v", "v"], ["w", "w"], ["x", "x"], ["y", "y"], ["z", "z"], ["{", "{"], ["|", "|"], ["}", "}"], ["~", "~"], ["\\^?", "\u007f"], ["\\M-B\\M^@", "\u0080"], ["\\M-B\\M^A", "\u0081"], ["\\M-B\\M^B", "\u0082"], ["\\M-B\\M^C", "\u0083"], ["\\M-B\\M^D", "\u0084"], ["\\M-B\\M^E", "\u0085"], ["\\M-B\\M^F", "\u0086"], ["\\M-B\\M^G", "\u0087"], ["\\M-B\\M^H", "\u0088"], ["\\M-B\\M^I", "\u0089"], ["\\M-B\\M^J", "\u008a"], ["\\M-B\\M^K", "\u008b"], ["\\M-B\\M^L", "\u008c"], ["\\M-B\\M^M", "\u008d"], ["\\M-B\\M^N", "\u008e"], ["\\M-B\\M^O", "\u008f"], ["\\M-B\\M^P", "\u0090"], ["\\M-B\\M^Q", "\u0091"], ["\\M-B\\M^R", "\u0092"], ["\\M-B\\M^S", "\u0093"], ["\\M-B\\M^T", "\u0094"], ["\\M-B\\M^U", "\u0095"], ["\\M-B\\M^V", "\u0096"], ["\\M-B\\M^W", "\u0097"], ["\\M-B\\M^X", "\u0098"], ["\\M-B\\M^Y", "\u0099"], ["\\M-B\\M^Z", "\u009a"], ["\\M-B\\M^[", "\u009b"], ["\\M-B\\M^\\", "\u009c"], ["\\M-B\\M^]", "\u009d"], ["\\M-B\\M^^", "\u009e"], ["\\M-B\\M^_", "\u009f"], ["\\M-B\\240", "\u00a0"], ["\\M-B\\M-!", "\u00a1"], ["\\M-B\\M-\"", "\u00a2"], ["\\M-B\\M-#", "\u00a3"], ["\\M-B\\M-$", "\u00a4"], ["\\M-B\\M-%", "\u00a5"], ["\\M-B\\M-&", "\u00a6"], ["\\M-B\\M-'", "\u00a7"], ["\\M-B\\M-(", "\u00a8"], ["\\M-B\\M-)", "\u00a9"], ["\\M-B\\M-*", "\u00aa"], ["\\M-B\\M-+", "\u00ab"], ["\\M-B\\M-,", "\u00ac"], ["\\M-B\\M--", "\u00ad"], ["\\M-B\\M-.", "\u00ae"], ["\\M-B\\M-/", "\u00af"], ["\\M-B\\M-0", "\u00b0"], ["\\M-B\\M-1", "\u00b1"], ["\\M-B\\M-2", "\u00b2"], ["\\M-B\\M-3", "\u00b3"], ["\\M-B\\M-4", "\u00b4"], ["\\M-B\\M-5", "\u00b5"], ["\\M-B\\M-6", "\u00b6"], ["\\M-B\\M-7", "\u00b7"], ["\\M-B\\M-8", "\u00b8"], ["\\M-B\\M-9", "\u00b9"], ["\\M-B\\M-:", "\u00ba"], ["\\M-B\\M-;", "\u00bb"], ["\\M-B\\M-<", "\u00bc"], ["\\M-B\\M-=", "\u00bd"], ["\\M-B\\M->", "\u00be"], ["\\M-B\\M-?", "\u00bf"], ["\\M-C\\M^@", "\u00c0"], ["\\M-C\\M^A", "\u00c1"], ["\\M-C\\M^B", "\u00c2"], ["\\M-C\\M^C", "\u00c3"], ["\\M-C\\M^D", "\u00c4"], ["\\M-C\\M^E", "\u00c5"], ["\\M-C\\M^F", "\u00c6"], ["\\M-C\\M^G", "\u00c7"], ["\\M-C\\M^H", "\u00c8"], ["\\M-C\\M^I", "\u00c9"], ["\\M-C\\M^J", "\u00ca"], ["\\M-C\\M^K", "\u00cb"], ["\\M-C\\M^L", "\u00cc"], ["\\M-C\\M^M", "\u00cd"], ["\\M-C\\M^N", "\u00ce"], ["\\M-C\\M^O", "\u00cf"], ["\\M-C\\M^P", "\u00d0"], ["\\M-C\\M^Q", "\u00d1"], ["\\M-C\\M^R", "\u00d2"], ["\\M-C\\M^S", "\u00d3"], ["\\M-C\\M^T", "\u00d4"], ["\\M-C\\M^U", "\u00d5"], ["\\M-C\\M^V", "\u00d6"], ["\\M-C\\M^W", "\u00d7"], ["\\M-C\\M^X", "\u00d8"], ["\\M-C\\M^Y", "\u00d9"], ["\\M-C\\M^Z", "\u00da"], ["\\M-C\\M^[", "\u00db"], ["\\M-C\\M^\\", "\u00dc"], ["\\M-C\\M^]", "\u00dd"], ["\\M-C\\M^^", "\u00de"], ["\\M-C\\M^_", "\u00df"], ["\\M-C\\240", "\u00e0"], ["\\M-C\\M-!", "\u00e1"], ["\\M-C\\M-\"", "\u00e2"], ["\\M-C\\M-#", "\u00e3"], ["\\M-C\\M-$", "\u00e4"], ["\\M-C\\M-%", "\u00e5"], ["\\M-C\\M-&", "\u00e6"], ["\\M-C\\M-'", "\u00e7"], ["\\M-C\\M-(", "\u00e8"], ["\\M-C\\M-)", "\u00e9"], ["\\M-C\\M-*", "\u00ea"], ["\\M-C\\M-+", "\u00eb"], ["\\M-C\\M-,", "\u00ec"], ["\\M-C\\M--", "\u00ed"], ["\\M-C\\M-.", "\u00ee"], ["\\M-C\\M-/", "\u00ef"], ["\\M-C\\M-0", "\u00f0"], ["\\M-C\\M-1", "\u00f1"], ["\\M-C\\M-2", "\u00f2"], ["\\M-C\\M-3", "\u00f3"], ["\\M-C\\M-4", "\u00f4"], ["\\M-C\\M-5", "\u00f5"], ["\\M-C\\M-6", "\u00f6"], ["\\M-C\\M-7", "\u00f7"], ["\\M-C\\M-8", "\u00f8"], ["\\M-C\\M-9", "\u00f9"], ["\\M-C\\M-:", "\u00fa"], ["\\M-C\\M-;", "\u00fb"], ["\\M-C\\M-<", "\u00fc"], ["\\M-C\\M-=", "\u00fd"], ["\\M-C\\M->", "\u00fe"], ["\\M-C\\M-?", "\u00ff"], ["\\M-D\\M^@", "\u0100"], ["\\M-D\\M^A", "\u0101"], ["\\M-D\\M^B", "\u0102"], ["\\M-D\\M^C", "\u0103"], ["\\M-D\\M^D", "\u0104"], ["\\M-D\\M^E", "\u0105"], ["\\M-D\\M^F", "\u0106"], ["\\M-D\\M^G", "\u0107"], ["\\M-D\\M^H", "\u0108"], ["\\M-D\\M^I", "\u0109"], ["\\M-D\\M^J", "\u010a"], ["\\M-D\\M^K", "\u010b"], ["\\M-D\\M^L", "\u010c"], ["\\M-D\\M^M", "\u010d"], ["\\M-D\\M^N", "\u010e"], ["\\M-D\\M^O", "\u010f"], ["\\M-D\\M^P", "\u0110"], ["\\M-D\\M^Q", "\u0111"], ["\\M-D\\M^R", "\u0112"], ["\\M-D\\M^S", "\u0113"], ["\\M-D\\M^T", "\u0114"], ["\\M-D\\M^U", "\u0115"], ["\\M-D\\M^V", "\u0116"], ["\\M-D\\M^W", "\u0117"], ["\\M-D\\M^X", "\u0118"], ["\\M-D\\M^Y", "\u0119"], ["\\M-D\\M^Z", "\u011a"], ["\\M-D\\M^[", "\u011b"], ["\\M-D\\M^\\", "\u011c"], ["\\M-D\\M^]", "\u011d"], ["\\M-D\\M^^", "\u011e"], ["\\M-D\\M^_", "\u011f"], ["\\M-D\\240", "\u0120"], ["\\M-D\\M-!", "\u0121"], ["\\M-D\\M-\"", "\u0122"], ["\\M-D\\M-#", "\u0123"], ["\\M-D\\M-$", "\u0124"], ["\\M-D\\M-%", "\u0125"], ["\\M-D\\M-&", "\u0126"], ["\\M-D\\M-'", "\u0127"], ["\\M-D\\M-(", "\u0128"], ["\\M-D\\M-)", "\u0129"], ["\\M-D\\M-*", "\u012a"], ["\\M-D\\M-+", "\u012b"], ["\\M-D\\M-,", "\u012c"], ["\\M-D\\M--", "\u012d"], ["\\M-D\\M-.", "\u012e"], ["\\M-D\\M-/", "\u012f"], ["\\M-D\\M-0", "\u0130"], ["\\M-D\\M-1", "\u0131"], ["\\M-D\\M-2", "\u0132"], ["\\M-D\\M-3", "\u0133"], ["\\M-D\\M-4", "\u0134"], ["\\M-D\\M-5", "\u0135"], ["\\M-D\\M-6", "\u0136"], ["\\M-D\\M-7", "\u0137"], ["\\M-D\\M-8", "\u0138"], ["\\M-D\\M-9", "\u0139"], ["\\M-D\\M-:", "\u013a"], ["\\M-D\\M-;", "\u013b"], ["\\M-D\\M-<", "\u013c"], ["\\M-D\\M-=", "\u013d"], ["\\M-D\\M->", "\u013e"], ["\\M-D\\M-?", "\u013f"], ["\\M-E\\M^@", "\u0140"], ["\\M-E\\M^A", "\u0141"], ["\\M-E\\M^B", "\u0142"], ["\\M-E\\M^C", "\u0143"], ["\\M-E\\M^D", "\u0144"], ["\\M-E\\M^E", "\u0145"], ["\\M-E\\M^F", "\u0146"], ["\\M-E\\M^G", "\u0147"], ["\\M-E\\M^H", "\u0148"], ["\\M-E\\M^I", "\u0149"], ["\\M-E\\M^J", "\u014a"], ["\\M-E\\M^K", "\u014b"], ["\\M-E\\M^L", "\u014c"], ["\\M-E\\M^M", "\u014d"], ["\\M-E\\M^N", "\u014e"], ["\\M-E\\M^O", "\u014f"], ["\\M-E\\M^P", "\u0150"], ["\\M-E\\M^Q", "\u0151"], ["\\M-E\\M^R", "\u0152"], ["\\M-E\\M^S", "\u0153"], ["\\M-E\\M^T", "\u0154"], ["\\M-E\\M^U", "\u0155"], ["\\M-E\\M^V", "\u0156"], ["\\M-E\\M^W", "\u0157"], ["\\M-E\\M^X", "\u0158"], ["\\M-E\\M^Y", "\u0159"], ["\\M-E\\M^Z", "\u015a"], ["\\M-E\\M^[", "\u015b"], ["\\M-E\\M^\\", "\u015c"], ["\\M-E\\M^]", "\u015d"], ["\\M-E\\M^^", "\u015e"], ["\\M-E\\M^_", "\u015f"], ["\\M-E\\240", "\u0160"], ["\\M-E\\M-!", "\u0161"], ["\\M-E\\M-\"", "\u0162"], ["\\M-E\\M-#", "\u0163"], ["\\M-E\\M-$", "\u0164"], ["\\M-E\\M-%", "\u0165"], ["\\M-E\\M-&", "\u0166"], ["\\M-E\\M-'", "\u0167"], ["\\M-E\\M-(", "\u0168"], ["\\M-E\\M-)", "\u0169"], ["\\M-E\\M-*", "\u016a"], ["\\M-E\\M-+", "\u016b"], ["\\M-E\\M-,", "\u016c"], ["\\M-E\\M--", "\u016d"], ["\\M-E\\M-.", "\u016e"], ["\\M-E\\M-/", "\u016f"], ["\\M-E\\M-0", "\u0170"], ["\\M-E\\M-1", "\u0171"], ["\\M-E\\M-2", "\u0172"], ["\\M-E\\M-3", "\u0173"], ["\\M-E\\M-4", "\u0174"], ["\\M-E\\M-5", "\u0175"], ["\\M-E\\M-6", "\u0176"], ["\\M-E\\M-7", "\u0177"], ["\\M-E\\M-8", "\u0178"], ["\\M-E\\M-9", "\u0179"], ["\\M-E\\M-:", "\u017a"], ["\\M-E\\M-;", "\u017b"], ["\\M-E\\M-<", "\u017c"], ["\\M-E\\M-=", "\u017d"], ["\\M-E\\M->", "\u017e"], ["\\M-E\\M-?", "\u017f"], ["\\M-F\\M^@", "\u0180"], ["\\M-F\\M^A", "\u0181"], ["\\M-F\\M^B", "\u0182"], ["\\M-F\\M^C", "\u0183"], ["\\M-F\\M^D", "\u0184"], ["\\M-F\\M^E", "\u0185"], ["\\M-F\\M^F", "\u0186"], ["\\M-F\\M^G", "\u0187"], ["\\M-F\\M^H", "\u0188"], ["\\M-F\\M^I", "\u0189"], ["\\M-F\\M^J", "\u018a"], ["\\M-F\\M^K", "\u018b"], ["\\M-F\\M^L", "\u018c"], ["\\M-F\\M^M", "\u018d"], ["\\M-F\\M^N", "\u018e"], ["\\M-F\\M^O", "\u018f"], ["\\M-F\\M^P", "\u0190"], ["\\M-F\\M^Q", "\u0191"], ["\\M-F\\M^R", "\u0192"], ["\\M-F\\M^S", "\u0193"], ["\\M-F\\M^T", "\u0194"], ["\\M-F\\M^U", "\u0195"], ["\\M-F\\M^V", "\u0196"], ["\\M-F\\M^W", "\u0197"], ["\\M-F\\M^X", "\u0198"], ["\\M-F\\M^Y", "\u0199"], ["\\M-F\\M^Z", "\u019a"], ["\\M-F\\M^[", "\u019b"], ["\\M-F\\M^\\", "\u019c"], ["\\M-F\\M^]", "\u019d"], ["\\M-F\\M^^", "\u019e"], ["\\M-F\\M^_", "\u019f"], ["\\M-F\\240", "\u01a0"], ["\\M-F\\M-!", "\u01a1"], ["\\M-F\\M-\"", "\u01a2"], ["\\M-F\\M-#", "\u01a3"], ["\\M-F\\M-$", "\u01a4"], ["\\M-F\\M-%", "\u01a5"], ["\\M-F\\M-&", "\u01a6"], ["\\M-F\\M-'", "\u01a7"], ["\\M-F\\M-(", "\u01a8"], ["\\M-F\\M-)", "\u01a9"], ["\\M-F\\M-*", "\u01aa"], ["\\M-F\\M-+", "\u01ab"], ["\\M-F\\M-,", "\u01ac"], ["\\M-F\\M--", "\u01ad"], ["\\M-F\\M-.", "\u01ae"], ["\\M-F\\M-/", "\u01af"], ["\\M-F\\M-0", "\u01b0"], ["\\M-F\\M-1", "\u01b1"], ["\\M-F\\M-2", "\u01b2"], ["\\M-F\\M-3", "\u01b3"], ["\\M-F\\M-4", "\u01b4"], ["\\M-F\\M-5", "\u01b5"], ["\\M-F\\M-6", "\u01b6"], ["\\M-F\\M-7", "\u01b7"], ["\\M-F\\M-8", "\u01b8"], ["\\M-F\\M-9", "\u01b9"], ["\\M-F\\M-:", "\u01ba"], ["\\M-F\\M-;", "\u01bb"], ["\\M-F\\M-<", "\u01bc"], ["\\M-F\\M-=", "\u01bd"], ["\\M-F\\M->", "\u01be"], ["\\M-F\\M-?", "\u01bf"], ["\\M-G\\M^@", "\u01c0"], ["\\M-G\\M^A", "\u01c1"], ["\\M-G\\M^B", "\u01c2"], ["\\M-G\\M^C", "\u01c3"], ["\\M-G\\M^D", "\u01c4"], ["\\M-G\\M^E", "\u01c5"], ["\\M-G\\M^F", "\u01c6"], ["\\M-G\\M^G", "\u01c7"], ["\\M-G\\M^H", "\u01c8"], ["\\M-G\\M^I", "\u01c9"], ["\\M-G\\M^J", "\u01ca"], ["\\M-G\\M^K", "\u01cb"], ["\\M-G\\M^L", "\u01cc"], ["\\M-G\\M^M", "\u01cd"], ["\\M-G\\M^N", "\u01ce"], ["\\M-G\\M^O", "\u01cf"], ["\\M-G\\M^P", "\u01d0"], ["\\M-G\\M^Q", "\u01d1"], ["\\M-G\\M^R", "\u01d2"], ["\\M-G\\M^S", "\u01d3"], ["\\M-G\\M^T", "\u01d4"], ["\\M-G\\M^U", "\u01d5"], ["\\M-G\\M^V", "\u01d6"], ["\\M-G\\M^W", "\u01d7"], ["\\M-G\\M^X", "\u01d8"], ["\\M-G\\M^Y", "\u01d9"], ["\\M-G\\M^Z", "\u01da"], ["\\M-G\\M^[", "\u01db"], ["\\M-G\\M^\\", "\u01dc"], ["\\M-G\\M^]", "\u01dd"], ["\\M-G\\M^^", "\u01de"], ["\\M-G\\M^_", "\u01df"], ["\\M-G\\240", "\u01e0"], ["\\M-G\\M-!", "\u01e1"], ["\\M-G\\M-\"", "\u01e2"], ["\\M-G\\M-#", "\u01e3"], ["\\M-G\\M-$", "\u01e4"], ["\\M-G\\M-%", "\u01e5"], ["\\M-G\\M-&", "\u01e6"], ["\\M-G\\M-'", "\u01e7"], ["\\M-G\\M-(", "\u01e8"], ["\\M-G\\M-)", "\u01e9"], ["\\M-G\\M-*", "\u01ea"], ["\\M-G\\M-+", "\u01eb"], ["\\M-G\\M-,", "\u01ec"], ["\\M-G\\M--", "\u01ed"], ["\\M-G\\M-.", "\u01ee"], ["\\M-G\\M-/", "\u01ef"], ["\\M-G\\M-0", "\u01f0"], ["\\M-G\\M-1", "\u01f1"], ["\\M-G\\M-2", "\u01f2"], ["\\M-G\\M-3", "\u01f3"], ["\\M-G\\M-4", "\u01f4"], ["\\M-G\\M-5", "\u01f5"], ["\\M-G\\M-6", "\u01f6"], ["\\M-G\\M-7", "\u01f7"], ["\\M-G\\M-8", "\u01f8"], ["\\M-G\\M-9", "\u01f9"], ["\\M-G\\M-:", "\u01fa"], ["\\M-G\\M-;", "\u01fb"], ["\\M-G\\M-<", "\u01fc"], ["\\M-G\\M-=", "\u01fd"], ["\\M-G\\M->", "\u01fe"], ["\\M-G\\M-?", "\u01ff"], ["\\M-H\\M^@", "\u0200"], ["\\M-H\\M^A", "\u0201"], ["\\M-H\\M^B", "\u0202"], ["\\M-H\\M^C", "\u0203"], ["\\M-H\\M^D", "\u0204"], ["\\M-H\\M^E", "\u0205"], ["\\M-H\\M^F", "\u0206"], ["\\M-H\\M^G", "\u0207"], ["\\M-H\\M^H", "\u0208"], ["\\M-H\\M^I", "\u0209"], ["\\M-H\\M^J", "\u020a"], ["\\M-H\\M^K", "\u020b"], ["\\M-H\\M^L", "\u020c"], ["\\M-H\\M^M", "\u020d"], ["\\M-H\\M^N", "\u020e"], ["\\M-H\\M^O", "\u020f"], ["\\M-H\\M^P", "\u0210"], ["\\M-H\\M^Q", "\u0211"], ["\\M-H\\M^R", "\u0212"], ["\\M-H\\M^S", "\u0213"], ["\\M-H\\M^T", "\u0214"], ["\\M-H\\M^U", "\u0215"], ["\\M-H\\M^V", "\u0216"], ["\\M-H\\M^W", "\u0217"], ["\\M-H\\M^X", "\u0218"], ["\\M-H\\M^Y", "\u0219"], ["\\M-H\\M^Z", "\u021a"], ["\\M-H\\M^[", "\u021b"], ["\\M-H\\M^\\", "\u021c"], ["\\M-H\\M^]", "\u021d"], ["\\M-H\\M^^", "\u021e"], ["\\M-H\\M^_", "\u021f"], ["\\M-H\\240", "\u0220"], ["\\M-H\\M-!", "\u0221"], ["\\M-H\\M-\"", "\u0222"], ["\\M-H\\M-#", "\u0223"], ["\\M-H\\M-$", "\u0224"], ["\\M-H\\M-%", "\u0225"], ["\\M-H\\M-&", "\u0226"], ["\\M-H\\M-'", "\u0227"], ["\\M-H\\M-(", "\u0228"], ["\\M-H\\M-)", "\u0229"], ["\\M-H\\M-*", "\u022a"], ["\\M-H\\M-+", "\u022b"], ["\\M-H\\M-,", "\u022c"], ["\\M-H\\M--", "\u022d"], ["\\M-H\\M-.", "\u022e"], ["\\M-H\\M-/", "\u022f"], ["\\M-H\\M-0", "\u0230"], ["\\M-H\\M-1", "\u0231"], ["\\M-H\\M-2", "\u0232"], ["\\M-H\\M-3", "\u0233"], ["\\M-H\\M-4", "\u0234"], ["\\M-H\\M-5", "\u0235"], ["\\M-H\\M-6", "\u0236"], ["\\M-H\\M-7", "\u0237"], ["\\M-H\\M-8", "\u0238"], ["\\M-H\\M-9", "\u0239"], ["\\M-H\\M-:", "\u023a"], ["\\M-H\\M-;", "\u023b"], ["\\M-H\\M-<", "\u023c"], ["\\M-H\\M-=", "\u023d"], ["\\M-H\\M->", "\u023e"], ["\\M-H\\M-?", "\u023f"], ["\\M-I\\M^@", "\u0240"], ["\\M-I\\M^A", "\u0241"], ["\\M-I\\M^B", "\u0242"], ["\\M-I\\M^C", "\u0243"], ["\\M-I\\M^D", "\u0244"], ["\\M-I\\M^E", "\u0245"], ["\\M-I\\M^F", "\u0246"], ["\\M-I\\M^G", "\u0247"], ["\\M-I\\M^H", "\u0248"], ["\\M-I\\M^I", "\u0249"], ["\\M-I\\M^J", "\u024a"], ["\\M-I\\M^K", "\u024b"], ["\\M-I\\M^L", "\u024c"], ["\\M-I\\M^M", "\u024d"], ["\\M-I\\M^N", "\u024e"], ["\\M-I\\M^O", "\u024f"], ["\\M-M\\M-0", "\u0370"], ["\\M-M\\M-1", "\u0371"], ["\\M-M\\M-2", "\u0372"], ["\\M-M\\M-3", "\u0373"], ["\\M-M\\M-4", "\u0374"], ["\\M-M\\M-5", "\u0375"], ["\\M-M\\M-6", "\u0376"], ["\\M-M\\M-7", "\u0377"], ["\\M-M\\M-8", "\u0378"], ["\\M-M\\M-9", "\u0379"], ["\\M-M\\M-:", "\u037a"], ["\\M-M\\M-;", "\u037b"], ["\\M-M\\M-<", "\u037c"], ["\\M-M\\M-=", "\u037d"], ["\\M-M\\M->", "\u037e"], ["\\M-M\\M-?", "\u037f"], ["\\M-N\\M^@", "\u0380"], ["\\M-N\\M^A", "\u0381"], ["\\M-N\\M^B", "\u0382"], ["\\M-N\\M^C", "\u0383"], ["\\M-N\\M^D", "\u0384"], ["\\M-N\\M^E", "\u0385"], ["\\M-N\\M^F", "\u0386"], ["\\M-N\\M^G", "\u0387"], ["\\M-N\\M^H", "\u0388"], ["\\M-N\\M^I", "\u0389"], ["\\M-N\\M^J", "\u038a"], ["\\M-N\\M^K", "\u038b"], ["\\M-N\\M^L", "\u038c"], ["\\M-N\\M^M", "\u038d"], ["\\M-N\\M^N", "\u038e"], ["\\M-N\\M^O", "\u038f"], ["\\M-N\\M^P", "\u0390"], ["\\M-N\\M^Q", "\u0391"], ["\\M-N\\M^R", "\u0392"], ["\\M-N\\M^S", "\u0393"], ["\\M-N\\M^T", "\u0394"], ["\\M-N\\M^U", "\u0395"], ["\\M-N\\M^V", "\u0396"], ["\\M-N\\M^W", "\u0397"], ["\\M-N\\M^X", "\u0398"], ["\\M-N\\M^Y", "\u0399"], ["\\M-N\\M^Z", "\u039a"], ["\\M-N\\M^[", "\u039b"], ["\\M-N\\M^\\", "\u039c"], ["\\M-N\\M^]", "\u039d"], ["\\M-N\\M^^", "\u039e"], ["\\M-N\\M^_", "\u039f"], ["\\M-N\\240", "\u03a0"], ["\\M-N\\M-!", "\u03a1"], ["\\M-N\\M-\"", "\u03a2"], ["\\M-N\\M-#", "\u03a3"], ["\\M-N\\M-$", "\u03a4"], ["\\M-N\\M-%", "\u03a5"], ["\\M-N\\M-&", "\u03a6"], ["\\M-N\\M-'", "\u03a7"], ["\\M-N\\M-(", "\u03a8"], ["\\M-N\\M-)", "\u03a9"], ["\\M-N\\M-*", "\u03aa"], ["\\M-N\\M-+", "\u03ab"], ["\\M-N\\M-,", "\u03ac"], ["\\M-N\\M--", "\u03ad"], ["\\M-N\\M-.", "\u03ae"], ["\\M-N\\M-/", "\u03af"], ["\\M-N\\M-0", "\u03b0"], ["\\M-N\\M-1", "\u03b1"], ["\\M-N\\M-2", "\u03b2"], ["\\M-N\\M-3", "\u03b3"], ["\\M-N\\M-4", "\u03b4"], ["\\M-N\\M-5", "\u03b5"], ["\\M-N\\M-6", "\u03b6"], ["\\M-N\\M-7", "\u03b7"], ["\\M-N\\M-8", "\u03b8"], ["\\M-N\\M-9", "\u03b9"], ["\\M-N\\M-:", "\u03ba"], ["\\M-N\\M-;", "\u03bb"], ["\\M-N\\M-<", "\u03bc"], ["\\M-N\\M-=", "\u03bd"], ["\\M-N\\M->", "\u03be"], ["\\M-N\\M-?", "\u03bf"], ["\\M-O\\M^@", "\u03c0"], ["\\M-O\\M^A", "\u03c1"], ["\\M-O\\M^B", "\u03c2"], ["\\M-O\\M^C", "\u03c3"], ["\\M-O\\M^D", "\u03c4"], ["\\M-O\\M^E", "\u03c5"], ["\\M-O\\M^F", "\u03c6"], ["\\M-O\\M^G", "\u03c7"], ["\\M-O\\M^H", "\u03c8"], ["\\M-O\\M^I", "\u03c9"], ["\\M-O\\M^J", "\u03ca"], ["\\M-O\\M^K", "\u03cb"], ["\\M-O\\M^L", "\u03cc"], ["\\M-O\\M^M", "\u03cd"], ["\\M-O\\M^N", "\u03ce"], ["\\M-O\\M^O", "\u03cf"], ["\\M-O\\M^P", "\u03d0"], ["\\M-O\\M^Q", "\u03d1"], ["\\M-O\\M^R", "\u03d2"], ["\\M-O\\M^S", "\u03d3"], ["\\M-O\\M^T", "\u03d4"], ["\\M-O\\M^U", "\u03d5"], ["\\M-O\\M^V", "\u03d6"], ["\\M-O\\M^W", "\u03d7"], ["\\M-O\\M^X", "\u03d8"], ["\\M-O\\M^Y", "\u03d9"], ["\\M-O\\M^Z", "\u03da"], ["\\M-O\\M^[", "\u03db"], ["\\M-O\\M^\\", "\u03dc"], ["\\M-O\\M^]", "\u03dd"], ["\\M-O\\M^^", "\u03de"], ["\\M-O\\M^_", "\u03df"], ["\\M-O\\240", "\u03e0"], ["\\M-O\\M-!", "\u03e1"], ["\\M-O\\M-\"", "\u03e2"], ["\\M-O\\M-#", "\u03e3"], ["\\M-O\\M-$", "\u03e4"], ["\\M-O\\M-%", "\u03e5"], ["\\M-O\\M-&", "\u03e6"], ["\\M-O\\M-'", "\u03e7"], ["\\M-O\\M-(", "\u03e8"], ["\\M-O\\M-)", "\u03e9"], ["\\M-O\\M-*", "\u03ea"], ["\\M-O\\M-+", "\u03eb"], ["\\M-O\\M-,", "\u03ec"], ["\\M-O\\M--", "\u03ed"], ["\\M-O\\M-.", "\u03ee"], ["\\M-O\\M-/", "\u03ef"], ["\\M-O\\M-0", "\u03f0"], ["\\M-O\\M-1", "\u03f1"], ["\\M-O\\M-2", "\u03f2"], ["\\M-O\\M-3", "\u03f3"], ["\\M-O\\M-4", "\u03f4"], ["\\M-O\\M-5", "\u03f5"], ["\\M-O\\M-6", "\u03f6"], ["\\M-O\\M-7", "\u03f7"], ["\\M-O\\M-8", "\u03f8"], ["\\M-O\\M-9", "\u03f9"], ["\\M-O\\M-:", "\u03fa"], ["\\M-O\\M-;", "\u03fb"], ["\\M-O\\M-<", "\u03fc"], ["\\M-O\\M-=", "\u03fd"], ["\\M-O\\M->", "\u03fe"], ["\\M-O\\M-?", "\u03ff"], ["\\M-P\\M^@", "\u0400"], ["\\M-P\\M^A", "\u0401"], ["\\M-P\\M^B", "\u0402"], ["\\M-P\\M^C", "\u0403"], ["\\M-P\\M^D", "\u0404"], ["\\M-P\\M^E", "\u0405"], ["\\M-P\\M^F", "\u0406"], ["\\M-P\\M^G", "\u0407"], ["\\M-P\\M^H", "\u0408"], ["\\M-P\\M^I", "\u0409"], ["\\M-P\\M^J", "\u040a"], ["\\M-P\\M^K", "\u040b"], ["\\M-P\\M^L", "\u040c"], ["\\M-P\\M^M", "\u040d"], ["\\M-P\\M^N", "\u040e"], ["\\M-P\\M^O", "\u040f"], ["\\M-P\\M^P", "\u0410"], ["\\M-P\\M^Q", "\u0411"], ["\\M-P\\M^R", "\u0412"], ["\\M-P\\M^S", "\u0413"], ["\\M-P\\M^T", "\u0414"], ["\\M-P\\M^U", "\u0415"], ["\\M-P\\M^V", "\u0416"], ["\\M-P\\M^W", "\u0417"], ["\\M-P\\M^X", "\u0418"], ["\\M-P\\M^Y", "\u0419"], ["\\M-P\\M^Z", "\u041a"], ["\\M-P\\M^[", "\u041b"], ["\\M-P\\M^\\", "\u041c"], ["\\M-P\\M^]", "\u041d"], ["\\M-P\\M^^", "\u041e"], ["\\M-P\\M^_", "\u041f"], ["\\M-P\\240", "\u0420"], ["\\M-P\\M-!", "\u0421"], ["\\M-P\\M-\"", "\u0422"], ["\\M-P\\M-#", "\u0423"], ["\\M-P\\M-$", "\u0424"], ["\\M-P\\M-%", "\u0425"], ["\\M-P\\M-&", "\u0426"], ["\\M-P\\M-'", "\u0427"], ["\\M-P\\M-(", "\u0428"], ["\\M-P\\M-)", "\u0429"], ["\\M-P\\M-*", "\u042a"], ["\\M-P\\M-+", "\u042b"], ["\\M-P\\M-,", "\u042c"], ["\\M-P\\M--", "\u042d"], ["\\M-P\\M-.", "\u042e"], ["\\M-P\\M-/", "\u042f"], ["\\M-P\\M-0", "\u0430"], ["\\M-P\\M-1", "\u0431"], ["\\M-P\\M-2", "\u0432"], ["\\M-P\\M-3", "\u0433"], ["\\M-P\\M-4", "\u0434"], ["\\M-P\\M-5", "\u0435"], ["\\M-P\\M-6", "\u0436"], ["\\M-P\\M-7", "\u0437"], ["\\M-P\\M-8", "\u0438"], ["\\M-P\\M-9", "\u0439"], ["\\M-P\\M-:", "\u043a"], ["\\M-P\\M-;", "\u043b"], ["\\M-P\\M-<", "\u043c"], ["\\M-P\\M-=", "\u043d"], ["\\M-P\\M->", "\u043e"], ["\\M-P\\M-?", "\u043f"], ["\\M-Q\\M^@", "\u0440"], ["\\M-Q\\M^A", "\u0441"], ["\\M-Q\\M^B", "\u0442"], ["\\M-Q\\M^C", "\u0443"], ["\\M-Q\\M^D", "\u0444"], ["\\M-Q\\M^E", "\u0445"], ["\\M-Q\\M^F", "\u0446"], ["\\M-Q\\M^G", "\u0447"], ["\\M-Q\\M^H", "\u0448"], ["\\M-Q\\M^I", "\u0449"], ["\\M-Q\\M^J", "\u044a"], ["\\M-Q\\M^K", "\u044b"], ["\\M-Q\\M^L", "\u044c"], ["\\M-Q\\M^M", "\u044d"], ["\\M-Q\\M^N", "\u044e"], ["\\M-Q\\M^O", "\u044f"], ["\\M-Q\\M^P", "\u0450"], ["\\M-Q\\M^Q", "\u0451"], ["\\M-Q\\M^R", "\u0452"], ["\\M-Q\\M^S", "\u0453"], ["\\M-Q\\M^T", "\u0454"], ["\\M-Q\\M^U", "\u0455"], ["\\M-Q\\M^V", "\u0456"], ["\\M-Q\\M^W", "\u0457"], ["\\M-Q\\M^X", "\u0458"], ["\\M-Q\\M^Y", "\u0459"], ["\\M-Q\\M^Z", "\u045a"], ["\\M-Q\\M^[", "\u045b"], ["\\M-Q\\M^\\", "\u045c"], ["\\M-Q\\M^]", "\u045d"], ["\\M-Q\\M^^", "\u045e"], ["\\M-Q\\M^_", "\u045f"], ["\\M-Q\\240", "\u0460"], ["\\M-Q\\M-!", "\u0461"], ["\\M-Q\\M-\"", "\u0462"], ["\\M-Q\\M-#", "\u0463"], ["\\M-Q\\M-$", "\u0464"], ["\\M-Q\\M-%", "\u0465"], ["\\M-Q\\M-&", "\u0466"], ["\\M-Q\\M-'", "\u0467"], ["\\M-Q\\M-(", "\u0468"], ["\\M-Q\\M-)", "\u0469"], ["\\M-Q\\M-*", "\u046a"], ["\\M-Q\\M-+", "\u046b"], ["\\M-Q\\M-,", "\u046c"], ["\\M-Q\\M--", "\u046d"], ["\\M-Q\\M-.", "\u046e"], ["\\M-Q\\M-/", "\u046f"], ["\\M-Q\\M-0", "\u0470"], ["\\M-Q\\M-1", "\u0471"], ["\\M-Q\\M-2", "\u0472"], ["\\M-Q\\M-3", "\u0473"], ["\\M-Q\\M-4", "\u0474"], ["\\M-Q\\M-5", "\u0475"], ["\\M-Q\\M-6", "\u0476"], ["\\M-Q\\M-7", "\u0477"], ["\\M-Q\\M-8", "\u0478"], ["\\M-Q\\M-9", "\u0479"], ["\\M-Q\\M-:", "\u047a"], ["\\M-Q\\M-;", "\u047b"], ["\\M-Q\\M-<", "\u047c"], ["\\M-Q\\M-=", "\u047d"], ["\\M-Q\\M->", "\u047e"], ["\\M-Q\\M-?", "\u047f"], ["\\M-R\\M^@", "\u0480"], ["\\M-R\\M^A", "\u0481"], ["\\M-R\\M^B", "\u0482"], ["\\M-R\\M^C", "\u0483"], ["\\M-R\\M^D", "\u0484"], ["\\M-R\\M^E", "\u0485"], ["\\M-R\\M^F", "\u0486"], ["\\M-R\\M^G", "\u0487"], ["\\M-R\\M^H", "\u0488"], ["\\M-R\\M^I", "\u0489"], ["\\M-R\\M^J", "\u048a"], ["\\M-R\\M^K", "\u048b"], ["\\M-R\\M^L", "\u048c"], ["\\M-R\\M^M", "\u048d"], ["\\M-R\\M^N", "\u048e"], ["\\M-R\\M^O", "\u048f"], ["\\M-R\\M^P", "\u0490"], ["\\M-R\\M^Q", "\u0491"], ["\\M-R\\M^R", "\u0492"], ["\\M-R\\M^S", "\u0493"], ["\\M-R\\M^T", "\u0494"], ["\\M-R\\M^U", "\u0495"], ["\\M-R\\M^V", "\u0496"], ["\\M-R\\M^W", "\u0497"], ["\\M-R\\M^X", "\u0498"], ["\\M-R\\M^Y", "\u0499"], ["\\M-R\\M^Z", "\u049a"], ["\\M-R\\M^[", "\u049b"], ["\\M-R\\M^\\", "\u049c"], ["\\M-R\\M^]", "\u049d"], ["\\M-R\\M^^", "\u049e"], ["\\M-R\\M^_", "\u049f"], ["\\M-R\\240", "\u04a0"], ["\\M-R\\M-!", "\u04a1"], ["\\M-R\\M-\"", "\u04a2"], ["\\M-R\\M-#", "\u04a3"], ["\\M-R\\M-$", "\u04a4"], ["\\M-R\\M-%", "\u04a5"], ["\\M-R\\M-&", "\u04a6"], ["\\M-R\\M-'", "\u04a7"], ["\\M-R\\M-(", "\u04a8"], ["\\M-R\\M-)", "\u04a9"], ["\\M-R\\M-*", "\u04aa"], ["\\M-R\\M-+", "\u04ab"], ["\\M-R\\M-,", "\u04ac"], ["\\M-R\\M--", "\u04ad"], ["\\M-R\\M-.", "\u04ae"], ["\\M-R\\M-/", "\u04af"], ["\\M-R\\M-0", "\u04b0"], ["\\M-R\\M-1", "\u04b1"], ["\\M-R\\M-2", "\u04b2"], ["\\M-R\\M-3", "\u04b3"], ["\\M-R\\M-4", "\u04b4"], ["\\M-R\\M-5", "\u04b5"], ["\\M-R\\M-6", "\u04b6"], ["\\M-R\\M-7", "\u04b7"], ["\\M-R\\M-8", "\u04b8"], ["\\M-R\\M-9", "\u04b9"], ["\\M-R\\M-:", "\u04ba"], ["\\M-R\\M-;", "\u04bb"], ["\\M-R\\M-<", "\u04bc"], ["\\M-R\\M-=", "\u04bd"], ["\\M-R\\M->", "\u04be"], ["\\M-R\\M-?", "\u04bf"], ["\\M-S\\M^@", "\u04c0"], ["\\M-S\\M^A", "\u04c1"], ["\\M-S\\M^B", "\u04c2"], ["\\M-S\\M^C", "\u04c3"], ["\\M-S\\M^D", "\u04c4"], ["\\M-S\\M^E", "\u04c5"], ["\\M-S\\M^F", "\u04c6"], ["\\M-S\\M^G", "\u04c7"], ["\\M-S\\M^H", "\u04c8"], ["\\M-S\\M^I", "\u04c9"], ["\\M-S\\M^J", "\u04ca"], ["\\M-S\\M^K", "\u04cb"], ["\\M-S\\M^L", "\u04cc"], ["\\M-S\\M^M", "\u04cd"], ["\\M-S\\M^N", "\u04ce"], ["\\M-S\\M^O", "\u04cf"], ["\\M-S\\M^P", "\u04d0"], ["\\M-S\\M^Q", "\u04d1"], ["\\M-S\\M^R", "\u04d2"], ["\\M-S\\M^S", "\u04d3"], ["\\M-S\\M^T", "\u04d4"], ["\\M-S\\M^U", "\u04d5"], ["\\M-S\\M^V", "\u04d6"], ["\\M-S\\M^W", "\u04d7"], ["\\M-S\\M^X", "\u04d8"], ["\\M-S\\M^Y", "\u04d9"], ["\\M-S\\M^Z", "\u04da"], ["\\M-S\\M^[", "\u04db"], ["\\M-S\\M^\\", "\u04dc"], ["\\M-S\\M^]", "\u04dd"], ["\\M-S\\M^^", "\u04de"], ["\\M-S\\M^_", "\u04df"], ["\\M-S\\240", "\u04e0"], ["\\M-S\\M-!", "\u04e1"], ["\\M-S\\M-\"", "\u04e2"], ["\\M-S\\M-#", "\u04e3"], ["\\M-S\\M-$", "\u04e4"], ["\\M-S\\M-%", "\u04e5"], ["\\M-S\\M-&", "\u04e6"], ["\\M-S\\M-'", "\u04e7"], ["\\M-S\\M-(", "\u04e8"], ["\\M-S\\M-)", "\u04e9"], ["\\M-S\\M-*", "\u04ea"], ["\\M-S\\M-+", "\u04eb"], ["\\M-S\\M-,", "\u04ec"], ["\\M-S\\M--", "\u04ed"], ["\\M-S\\M-.", "\u04ee"], ["\\M-S\\M-/", "\u04ef"], ["\\M-S\\M-0", "\u04f0"], ["\\M-S\\M-1", "\u04f1"], ["\\M-S\\M-2", "\u04f2"], ["\\M-S\\M-3", "\u04f3"], ["\\M-S\\M-4", "\u04f4"], ["\\M-S\\M-5", "\u04f5"], ["\\M-S\\M-6", "\u04f6"], ["\\M-S\\M-7", "\u04f7"], ["\\M-S\\M-8", "\u04f8"], ["\\M-S\\M-9", "\u04f9"], ["\\M-S\\M-:", "\u04fa"], ["\\M-S\\M-;", "\u04fb"], ["\\M-S\\M-<", "\u04fc"], ["\\M-S\\M-=", "\u04fd"], ["\\M-S\\M->", "\u04fe"], ["\\M-S\\M-?", "\u04ff"], ["\\M-T\\M^@", "\u0500"], ["\\M-T\\M^A", "\u0501"], ["\\M-T\\M^B", "\u0502"], ["\\M-T\\M^C", "\u0503"], ["\\M-T\\M^D", "\u0504"], ["\\M-T\\M^E", "\u0505"], ["\\M-T\\M^F", "\u0506"], ["\\M-T\\M^G", "\u0507"], ["\\M-T\\M^H", "\u0508"], ["\\M-T\\M^I", "\u0509"], ["\\M-T\\M^J", "\u050a"], ["\\M-T\\M^K", "\u050b"], ["\\M-T\\M^L", "\u050c"], ["\\M-T\\M^M", "\u050d"], ["\\M-T\\M^N", "\u050e"], ["\\M-T\\M^O", "\u050f"], ["\\M-T\\M^P", "\u0510"], ["\\M-T\\M^Q", "\u0511"], ["\\M-T\\M^R", "\u0512"], ["\\M-T\\M^S", "\u0513"], ["\\M-T\\M^T", "\u0514"], ["\\M-T\\M^U", "\u0515"], ["\\M-T\\M^V", "\u0516"], ["\\M-T\\M^W", "\u0517"], ["\\M-T\\M^X", "\u0518"], ["\\M-T\\M^Y", "\u0519"], ["\\M-T\\M^Z", "\u051a"], ["\\M-T\\M^[", "\u051b"], ["\\M-T\\M^\\", "\u051c"], ["\\M-T\\M^]", "\u051d"], ["\\M-T\\M^^", "\u051e"], ["\\M-T\\M^_", "\u051f"], ["\\M-T\\240", "\u0520"], ["\\M-T\\M-!", "\u0521"], ["\\M-T\\M-\"", "\u0522"], ["\\M-T\\M-#", "\u0523"], ["\\M-T\\M-$", "\u0524"], ["\\M-T\\M-%", "\u0525"], ["\\M-T\\M-&", "\u0526"], ["\\M-T\\M-'", "\u0527"], ["\\M-T\\M-(", "\u0528"], ["\\M-T\\M-)", "\u0529"], ["\\M-T\\M-*", "\u052a"], ["\\M-T\\M-+", "\u052b"], ["\\M-T\\M-,", "\u052c"], ["\\M-T\\M--", "\u052d"], ["\\M-T\\M-.", "\u052e"], ["\\M-T\\M-/", "\u052f"], ["\\M-V\\M^P", "\u0590"], ["\\M-V\\M^Q", "\u0591"], ["\\M-V\\M^R", "\u0592"], ["\\M-V\\M^S", "\u0593"], ["\\M-V\\M^T", "\u0594"], ["\\M-V\\M^U", "\u0595"], ["\\M-V\\M^V", "\u0596"], ["\\M-V\\M^W", "\u0597"], ["\\M-V\\M^X", "\u0598"], ["\\M-V\\M^Y", "\u0599"], ["\\M-V\\M^Z", "\u059a"], ["\\M-V\\M^[", "\u059b"], ["\\M-V\\M^\\", "\u059c"], ["\\M-V\\M^]", "\u059d"], ["\\M-V\\M^^", "\u059e"], ["\\M-V\\M^_", "\u059f"], ["\\M-V\\240", "\u05a0"], ["\\M-V\\M-!", "\u05a1"], ["\\M-V\\M-\"", "\u05a2"], ["\\M-V\\M-#", "\u05a3"], ["\\M-V\\M-$", "\u05a4"], ["\\M-V\\M-%", "\u05a5"], ["\\M-V\\M-&", "\u05a6"], ["\\M-V\\M-'", "\u05a7"], ["\\M-V\\M-(", "\u05a8"], ["\\M-V\\M-)", "\u05a9"], ["\\M-V\\M-*", "\u05aa"], ["\\M-V\\M-+", "\u05ab"], ["\\M-V\\M-,", "\u05ac"], ["\\M-V\\M--", "\u05ad"], ["\\M-V\\M-.", "\u05ae"], ["\\M-V\\M-/", "\u05af"], ["\\M-V\\M-0", "\u05b0"], ["\\M-V\\M-1", "\u05b1"], ["\\M-V\\M-2", "\u05b2"], ["\\M-V\\M-3", "\u05b3"], ["\\M-V\\M-4", "\u05b4"], ["\\M-V\\M-5", "\u05b5"], ["\\M-V\\M-6", "\u05b6"], ["\\M-V\\M-7", "\u05b7"], ["\\M-V\\M-8", "\u05b8"], ["\\M-V\\M-9", "\u05b9"], ["\\M-V\\M-:", "\u05ba"], ["\\M-V\\M-;", "\u05bb"], ["\\M-V\\M-<", "\u05bc"], ["\\M-V\\M-=", "\u05bd"], ["\\M-V\\M->", "\u05be"], ["\\M-V\\M-?", "\u05bf"], ["\\M-W\\M^@", "\u05c0"], ["\\M-W\\M^A", "\u05c1"], ["\\M-W\\M^B", "\u05c2"], ["\\M-W\\M^C", "\u05c3"], ["\\M-W\\M^D", "\u05c4"], ["\\M-W\\M^E", "\u05c5"], ["\\M-W\\M^F", "\u05c6"], ["\\M-W\\M^G", "\u05c7"], ["\\M-W\\M^H", "\u05c8"], ["\\M-W\\M^I", "\u05c9"], ["\\M-W\\M^J", "\u05ca"], ["\\M-W\\M^K", "\u05cb"], ["\\M-W\\M^L", "\u05cc"], ["\\M-W\\M^M", "\u05cd"], ["\\M-W\\M^N", "\u05ce"], ["\\M-W\\M^O", "\u05cf"], ["\\M-W\\M^P", "\u05d0"], ["\\M-W\\M^Q", "\u05d1"], ["\\M-W\\M^R", "\u05d2"], ["\\M-W\\M^S", "\u05d3"], ["\\M-W\\M^T", "\u05d4"], ["\\M-W\\M^U", "\u05d5"], ["\\M-W\\M^V", "\u05d6"], ["\\M-W\\M^W", "\u05d7"], ["\\M-W\\M^X", "\u05d8"], ["\\M-W\\M^Y", "\u05d9"], ["\\M-W\\M^Z", "\u05da"], ["\\M-W\\M^[", "\u05db"], ["\\M-W\\M^\\", "\u05dc"], ["\\M-W\\M^]", "\u05dd"], ["\\M-W\\M^^", "\u05de"], ["\\M-W\\M^_", "\u05df"], ["\\M-W\\240", "\u05e0"], ["\\M-W\\M-!", "\u05e1"], ["\\M-W\\M-\"", "\u05e2"], ["\\M-W\\M-#", "\u05e3"], ["\\M-W\\M-$", "\u05e4"], ["\\M-W\\M-%", "\u05e5"], ["\\M-W\\M-&", "\u05e6"], ["\\M-W\\M-'", "\u05e7"], ["\\M-W\\M-(", "\u05e8"], ["\\M-W\\M-)", "\u05e9"], ["\\M-W\\M-*", "\u05ea"], ["\\M-W\\M-+", "\u05eb"], ["\\M-W\\M-,", "\u05ec"], ["\\M-W\\M--", "\u05ed"], ["\\M-W\\M-.", "\u05ee"], ["\\M-W\\M-/", "\u05ef"], ["\\M-W\\M-0", "\u05f0"], ["\\M-W\\M-1", "\u05f1"], ["\\M-W\\M-2", "\u05f2"], ["\\M-W\\M-3", "\u05f3"], ["\\M-W\\M-4", "\u05f4"], ["\\M-W\\M-5", "\u05f5"], ["\\M-W\\M-6", "\u05f6"], ["\\M-W\\M-7", "\u05f7"], ["\\M-W\\M-8", "\u05f8"], ["\\M-W\\M-9", "\u05f9"], ["\\M-W\\M-:", "\u05fa"], ["\\M-W\\M-;", "\u05fb"], ["\\M-W\\M-<", "\u05fc"], ["\\M-W\\M-=", "\u05fd"], ["\\M-W\\M->", "\u05fe"], ["\\M-W\\M-?", "\u05ff"], ["\\M-X\\M^@", "\u0600"], ["\\M-X\\M^A", "\u0601"], ["\\M-X\\M^B", "\u0602"], ["\\M-X\\M^C", "\u0603"], ["\\M-X\\M^D", "\u0604"], ["\\M-X\\M^E", "\u0605"], ["\\M-X\\M^F", "\u0606"], ["\\M-X\\M^G", "\u0607"], ["\\M-X\\M^H", "\u0608"], ["\\M-X\\M^I", "\u0609"], ["\\M-X\\M^J", "\u060a"], ["\\M-X\\M^K", "\u060b"], ["\\M-X\\M^L", "\u060c"], ["\\M-X\\M^M", "\u060d"], ["\\M-X\\M^N", "\u060e"], ["\\M-X\\M^O", "\u060f"], ["\\M-X\\M^P", "\u0610"], ["\\M-X\\M^Q", "\u0611"], ["\\M-X\\M^R", "\u0612"], ["\\M-X\\M^S", "\u0613"], ["\\M-X\\M^T", "\u0614"], ["\\M-X\\M^U", "\u0615"], ["\\M-X\\M^V", "\u0616"], ["\\M-X\\M^W", "\u0617"], ["\\M-X\\M^X", "\u0618"], ["\\M-X\\M^Y", "\u0619"], ["\\M-X\\M^Z", "\u061a"], ["\\M-X\\M^[", "\u061b"], ["\\M-X\\M^\\", "\u061c"], ["\\M-X\\M^]", "\u061d"], ["\\M-X\\M^^", "\u061e"], ["\\M-X\\M^_", "\u061f"], ["\\M-X\\240", "\u0620"], ["\\M-X\\M-!", "\u0621"], ["\\M-X\\M-\"", "\u0622"], ["\\M-X\\M-#", "\u0623"], ["\\M-X\\M-$", "\u0624"], ["\\M-X\\M-%", "\u0625"], ["\\M-X\\M-&", "\u0626"], ["\\M-X\\M-'", "\u0627"], ["\\M-X\\M-(", "\u0628"], ["\\M-X\\M-)", "\u0629"], ["\\M-X\\M-*", "\u062a"], ["\\M-X\\M-+", "\u062b"], ["\\M-X\\M-,", "\u062c"], ["\\M-X\\M--", "\u062d"], ["\\M-X\\M-.", "\u062e"], ["\\M-X\\M-/", "\u062f"], ["\\M-X\\M-0", "\u0630"], ["\\M-X\\M-1", "\u0631"], ["\\M-X\\M-2", "\u0632"], ["\\M-X\\M-3", "\u0633"], ["\\M-X\\M-4", "\u0634"], ["\\M-X\\M-5", "\u0635"], ["\\M-X\\M-6", "\u0636"], ["\\M-X\\M-7", "\u0637"], ["\\M-X\\M-8", "\u0638"], ["\\M-X\\M-9", "\u0639"], ["\\M-X\\M-:", "\u063a"], ["\\M-X\\M-;", "\u063b"], ["\\M-X\\M-<", "\u063c"], ["\\M-X\\M-=", "\u063d"], ["\\M-X\\M->", "\u063e"], ["\\M-X\\M-?", "\u063f"], ["\\M-Y\\M^@", "\u0640"], ["\\M-Y\\M^A", "\u0641"], ["\\M-Y\\M^B", "\u0642"], ["\\M-Y\\M^C", "\u0643"], ["\\M-Y\\M^D", "\u0644"], ["\\M-Y\\M^E", "\u0645"], ["\\M-Y\\M^F", "\u0646"], ["\\M-Y\\M^G", "\u0647"], ["\\M-Y\\M^H", "\u0648"], ["\\M-Y\\M^I", "\u0649"], ["\\M-Y\\M^J", "\u064a"], ["\\M-Y\\M^K", "\u064b"], ["\\M-Y\\M^L", "\u064c"], ["\\M-Y\\M^M", "\u064d"], ["\\M-Y\\M^N", "\u064e"], ["\\M-Y\\M^O", "\u064f"], ["\\M-Y\\M^P", "\u0650"], ["\\M-Y\\M^Q", "\u0651"], ["\\M-Y\\M^R", "\u0652"], ["\\M-Y\\M^S", "\u0653"], ["\\M-Y\\M^T", "\u0654"], ["\\M-Y\\M^U", "\u0655"], ["\\M-Y\\M^V", "\u0656"], ["\\M-Y\\M^W", "\u0657"], ["\\M-Y\\M^X", "\u0658"], ["\\M-Y\\M^Y", "\u0659"], ["\\M-Y\\M^Z", "\u065a"], ["\\M-Y\\M^[", "\u065b"], ["\\M-Y\\M^\\", "\u065c"], ["\\M-Y\\M^]", "\u065d"], ["\\M-Y\\M^^", "\u065e"], ["\\M-Y\\M^_", "\u065f"], ["\\M-Y\\240", "\u0660"], ["\\M-Y\\M-!", "\u0661"], ["\\M-Y\\M-\"", "\u0662"], ["\\M-Y\\M-#", "\u0663"], ["\\M-Y\\M-$", "\u0664"], ["\\M-Y\\M-%", "\u0665"], ["\\M-Y\\M-&", "\u0666"], ["\\M-Y\\M-'", "\u0667"], ["\\M-Y\\M-(", "\u0668"], ["\\M-Y\\M-)", "\u0669"], ["\\M-Y\\M-*", "\u066a"], ["\\M-Y\\M-+", "\u066b"], ["\\M-Y\\M-,", "\u066c"], ["\\M-Y\\M--", "\u066d"], ["\\M-Y\\M-.", "\u066e"], ["\\M-Y\\M-/", "\u066f"], ["\\M-Y\\M-0", "\u0670"], ["\\M-Y\\M-1", "\u0671"], ["\\M-Y\\M-2", "\u0672"], ["\\M-Y\\M-3", "\u0673"], ["\\M-Y\\M-4", "\u0674"], ["\\M-Y\\M-5", "\u0675"], ["\\M-Y\\M-6", "\u0676"], ["\\M-Y\\M-7", "\u0677"], ["\\M-Y\\M-8", "\u0678"], ["\\M-Y\\M-9", "\u0679"], ["\\M-Y\\M-:", "\u067a"], ["\\M-Y\\M-;", "\u067b"], ["\\M-Y\\M-<", "\u067c"], ["\\M-Y\\M-=", "\u067d"], ["\\M-Y\\M->", "\u067e"], ["\\M-Y\\M-?", "\u067f"], ["\\M-Z\\M^@", "\u0680"], ["\\M-Z\\M^A", "\u0681"], ["\\M-Z\\M^B", "\u0682"], ["\\M-Z\\M^C", "\u0683"], ["\\M-Z\\M^D", "\u0684"], ["\\M-Z\\M^E", "\u0685"], ["\\M-Z\\M^F", "\u0686"], ["\\M-Z\\M^G", "\u0687"], ["\\M-Z\\M^H", "\u0688"], ["\\M-Z\\M^I", "\u0689"], ["\\M-Z\\M^J", "\u068a"], ["\\M-Z\\M^K", "\u068b"], ["\\M-Z\\M^L", "\u068c"], ["\\M-Z\\M^M", "\u068d"], ["\\M-Z\\M^N", "\u068e"], ["\\M-Z\\M^O", "\u068f"], ["\\M-Z\\M^P", "\u0690"], ["\\M-Z\\M^Q", "\u0691"], ["\\M-Z\\M^R", "\u0692"], ["\\M-Z\\M^S", "\u0693"], ["\\M-Z\\M^T", "\u0694"], ["\\M-Z\\M^U", "\u0695"], ["\\M-Z\\M^V", "\u0696"], ["\\M-Z\\M^W", "\u0697"], ["\\M-Z\\M^X", "\u0698"], ["\\M-Z\\M^Y", "\u0699"], ["\\M-Z\\M^Z", "\u069a"], ["\\M-Z\\M^[", "\u069b"], ["\\M-Z\\M^\\", "\u069c"], ["\\M-Z\\M^]", "\u069d"], ["\\M-Z\\M^^", "\u069e"], ["\\M-Z\\M^_", "\u069f"], ["\\M-Z\\240", "\u06a0"], ["\\M-Z\\M-!", "\u06a1"], ["\\M-Z\\M-\"", "\u06a2"], ["\\M-Z\\M-#", "\u06a3"], ["\\M-Z\\M-$", "\u06a4"], ["\\M-Z\\M-%", "\u06a5"], ["\\M-Z\\M-&", "\u06a6"], ["\\M-Z\\M-'", "\u06a7"], ["\\M-Z\\M-(", "\u06a8"], ["\\M-Z\\M-)", "\u06a9"], ["\\M-Z\\M-*", "\u06aa"], ["\\M-Z\\M-+", "\u06ab"], ["\\M-Z\\M-,", "\u06ac"], ["\\M-Z\\M--", "\u06ad"], ["\\M-Z\\M-.", "\u06ae"], ["\\M-Z\\M-/", "\u06af"], ["\\M-Z\\M-0", "\u06b0"], ["\\M-Z\\M-1", "\u06b1"], ["\\M-Z\\M-2", "\u06b2"], ["\\M-Z\\M-3", "\u06b3"], ["\\M-Z\\M-4", "\u06b4"], ["\\M-Z\\M-5", "\u06b5"], ["\\M-Z\\M-6", "\u06b6"], ["\\M-Z\\M-7", "\u06b7"], ["\\M-Z\\M-8", "\u06b8"], ["\\M-Z\\M-9", "\u06b9"], ["\\M-Z\\M-:", "\u06ba"], ["\\M-Z\\M-;", "\u06bb"], ["\\M-Z\\M-<", "\u06bc"], ["\\M-Z\\M-=", "\u06bd"], ["\\M-Z\\M->", "\u06be"], ["\\M-Z\\M-?", "\u06bf"], ["\\M-[\\M^@", "\u06c0"], ["\\M-[\\M^A", "\u06c1"], ["\\M-[\\M^B", "\u06c2"], ["\\M-[\\M^C", "\u06c3"], ["\\M-[\\M^D", "\u06c4"], ["\\M-[\\M^E", "\u06c5"], ["\\M-[\\M^F", "\u06c6"], ["\\M-[\\M^G", "\u06c7"], ["\\M-[\\M^H", "\u06c8"], ["\\M-[\\M^I", "\u06c9"], ["\\M-[\\M^J", "\u06ca"], ["\\M-[\\M^K", "\u06cb"], ["\\M-[\\M^L", "\u06cc"], ["\\M-[\\M^M", "\u06cd"], ["\\M-[\\M^N", "\u06ce"], ["\\M-[\\M^O", "\u06cf"], ["\\M-[\\M^P", "\u06d0"], ["\\M-[\\M^Q", "\u06d1"], ["\\M-[\\M^R", "\u06d2"], ["\\M-[\\M^S", "\u06d3"], ["\\M-[\\M^T", "\u06d4"], ["\\M-[\\M^U", "\u06d5"], ["\\M-[\\M^V", "\u06d6"], ["\\M-[\\M^W", "\u06d7"], ["\\M-[\\M^X", "\u06d8"], ["\\M-[\\M^Y", "\u06d9"], ["\\M-[\\M^Z", "\u06da"], ["\\M-[\\M^[", "\u06db"], ["\\M-[\\M^\\", "\u06dc"], ["\\M-[\\M^]", "\u06dd"], ["\\M-[\\M^^", "\u06de"], ["\\M-[\\M^_", "\u06df"], ["\\M-[\\240", "\u06e0"], ["\\M-[\\M-!", "\u06e1"], ["\\M-[\\M-\"", "\u06e2"], ["\\M-[\\M-#", "\u06e3"], ["\\M-[\\M-$", "\u06e4"], ["\\M-[\\M-%", "\u06e5"], ["\\M-[\\M-&", "\u06e6"], ["\\M-[\\M-'", "\u06e7"], ["\\M-[\\M-(", "\u06e8"], ["\\M-[\\M-)", "\u06e9"], ["\\M-[\\M-*", "\u06ea"], ["\\M-[\\M-+", "\u06eb"], ["\\M-[\\M-,", "\u06ec"], ["\\M-[\\M--", "\u06ed"], ["\\M-[\\M-.", "\u06ee"], ["\\M-[\\M-/", "\u06ef"], ["\\M-[\\M-0", "\u06f0"], ["\\M-[\\M-1", "\u06f1"], ["\\M-[\\M-2", "\u06f2"], ["\\M-[\\M-3", "\u06f3"], ["\\M-[\\M-4", "\u06f4"], ["\\M-[\\M-5", "\u06f5"], ["\\M-[\\M-6", "\u06f6"], ["\\M-[\\M-7", "\u06f7"], ["\\M-[\\M-8", "\u06f8"], ["\\M-[\\M-9", "\u06f9"], ["\\M-[\\M-:", "\u06fa"], ["\\M-[\\M-;", "\u06fb"], ["\\M-[\\M-<", "\u06fc"], ["\\M-[\\M-=", "\u06fd"], ["\\M-[\\M->", "\u06fe"], ["\\M-[\\M-?", "\u06ff"], ["\\M-b\\M-:\\M^@", "\u2e80"], ["\\M-b\\M-:\\M^A", "\u2e81"], ["\\M-b\\M-:\\M^B", "\u2e82"], ["\\M-b\\M-:\\M^C", "\u2e83"], ["\\M-b\\M-:\\M^D", "\u2e84"], ["\\M-b\\M-:\\M^E", "\u2e85"], ["\\M-b\\M-:\\M^F", "\u2e86"], ["\\M-b\\M-:\\M^G", "\u2e87"], ["\\M-b\\M-:\\M^H", "\u2e88"], ["\\M-b\\M-:\\M^I", "\u2e89"], ["\\M-b\\M-:\\M^J", "\u2e8a"], ["\\M-b\\M-:\\M^K", "\u2e8b"], ["\\M-b\\M-:\\M^L", "\u2e8c"], ["\\M-b\\M-:\\M^M", "\u2e8d"], ["\\M-b\\M-:\\M^N", "\u2e8e"], ["\\M-b\\M-:\\M^O", "\u2e8f"], ["\\M-b\\M-:\\M^P", "\u2e90"], ["\\M-b\\M-:\\M^Q", "\u2e91"], ["\\M-b\\M-:\\M^R", "\u2e92"], ["\\M-b\\M-:\\M^S", "\u2e93"], ["\\M-b\\M-:\\M^T", "\u2e94"], ["\\M-b\\M-:\\M^U", "\u2e95"], ["\\M-b\\M-:\\M^V", "\u2e96"], ["\\M-b\\M-:\\M^W", "\u2e97"], ["\\M-b\\M-:\\M^X", "\u2e98"], ["\\M-b\\M-:\\M^Y", "\u2e99"], ["\\M-b\\M-:\\M^Z", "\u2e9a"], ["\\M-b\\M-:\\M^[", "\u2e9b"], ["\\M-b\\M-:\\M^\\", "\u2e9c"], ["\\M-b\\M-:\\M^]", "\u2e9d"], ["\\M-b\\M-:\\M^^", "\u2e9e"], ["\\M-b\\M-:\\M^_", "\u2e9f"], ["\\M-b\\M-:\\240", "\u2ea0"], ["\\M-b\\M-:\\M-!", "\u2ea1"], ["\\M-b\\M-:\\M-\"", "\u2ea2"], ["\\M-b\\M-:\\M-#", "\u2ea3"], ["\\M-b\\M-:\\M-$", "\u2ea4"], ["\\M-b\\M-:\\M-%", "\u2ea5"], ["\\M-b\\M-:\\M-&", "\u2ea6"], ["\\M-b\\M-:\\M-'", "\u2ea7"], ["\\M-b\\M-:\\M-(", "\u2ea8"], ["\\M-b\\M-:\\M-)", "\u2ea9"], ["\\M-b\\M-:\\M-*", "\u2eaa"], ["\\M-b\\M-:\\M-+", "\u2eab"], ["\\M-b\\M-:\\M-,", "\u2eac"], ["\\M-b\\M-:\\M--", "\u2ead"], ["\\M-b\\M-:\\M-.", "\u2eae"], ["\\M-b\\M-:\\M-/", "\u2eaf"], ["\\M-b\\M-:\\M-0", "\u2eb0"], ["\\M-b\\M-:\\M-1", "\u2eb1"], ["\\M-b\\M-:\\M-2", "\u2eb2"], ["\\M-b\\M-:\\M-3", "\u2eb3"], ["\\M-b\\M-:\\M-4", "\u2eb4"], ["\\M-b\\M-:\\M-5", "\u2eb5"], ["\\M-b\\M-:\\M-6", "\u2eb6"], ["\\M-b\\M-:\\M-7", "\u2eb7"], ["\\M-b\\M-:\\M-8", "\u2eb8"], ["\\M-b\\M-:\\M-9", "\u2eb9"], ["\\M-b\\M-:\\M-:", "\u2eba"], ["\\M-b\\M-:\\M-;", "\u2ebb"], ["\\M-b\\M-:\\M-<", "\u2ebc"], ["\\M-b\\M-:\\M-=", "\u2ebd"], ["\\M-b\\M-:\\M->", "\u2ebe"], ["\\M-b\\M-:\\M-?", "\u2ebf"], ["\\M-b\\M-;\\M^@", "\u2ec0"], ["\\M-b\\M-;\\M^A", "\u2ec1"], ["\\M-b\\M-;\\M^B", "\u2ec2"], ["\\M-b\\M-;\\M^C", "\u2ec3"], ["\\M-b\\M-;\\M^D", "\u2ec4"], ["\\M-b\\M-;\\M^E", "\u2ec5"], ["\\M-b\\M-;\\M^F", "\u2ec6"], ["\\M-b\\M-;\\M^G", "\u2ec7"], ["\\M-b\\M-;\\M^H", "\u2ec8"], ["\\M-b\\M-;\\M^I", "\u2ec9"], ["\\M-b\\M-;\\M^J", "\u2eca"], ["\\M-b\\M-;\\M^K", "\u2ecb"], ["\\M-b\\M-;\\M^L", "\u2ecc"], ["\\M-b\\M-;\\M^M", "\u2ecd"], ["\\M-b\\M-;\\M^N", "\u2ece"], ["\\M-b\\M-;\\M^O", "\u2ecf"], ["\\M-b\\M-;\\M^P", "\u2ed0"], ["\\M-b\\M-;\\M^Q", "\u2ed1"], ["\\M-b\\M-;\\M^R", "\u2ed2"], ["\\M-b\\M-;\\M^S", "\u2ed3"], ["\\M-b\\M-;\\M^T", "\u2ed4"], ["\\M-b\\M-;\\M^U", "\u2ed5"], ["\\M-b\\M-;\\M^V", "\u2ed6"], ["\\M-b\\M-;\\M^W", "\u2ed7"], ["\\M-b\\M-;\\M^X", "\u2ed8"], ["\\M-b\\M-;\\M^Y", "\u2ed9"], ["\\M-b\\M-;\\M^Z", "\u2eda"], ["\\M-b\\M-;\\M^[", "\u2edb"], ["\\M-b\\M-;\\M^\\", "\u2edc"], ["\\M-b\\M-;\\M^]", "\u2edd"], ["\\M-b\\M-;\\M^^", "\u2ede"], ["\\M-b\\M-;\\M^_", "\u2edf"], ["\\M-b\\M-;\\240", "\u2ee0"], ["\\M-b\\M-;\\M-!", "\u2ee1"], ["\\M-b\\M-;\\M-\"", "\u2ee2"], ["\\M-b\\M-;\\M-#", "\u2ee3"], ["\\M-b\\M-;\\M-$", "\u2ee4"], ["\\M-b\\M-;\\M-%", "\u2ee5"], ["\\M-b\\M-;\\M-&", "\u2ee6"], ["\\M-b\\M-;\\M-'", "\u2ee7"], ["\\M-b\\M-;\\M-(", "\u2ee8"], ["\\M-b\\M-;\\M-)", "\u2ee9"], ["\\M-b\\M-;\\M-*", "\u2eea"], ["\\M-b\\M-;\\M-+", "\u2eeb"], ["\\M-b\\M-;\\M-,", "\u2eec"], ["\\M-b\\M-;\\M--", "\u2eed"], ["\\M-b\\M-;\\M-.", "\u2eee"], ["\\M-b\\M-;\\M-/", "\u2eef"], ["\\M-b\\M-;\\M-0", "\u2ef0"], ["\\M-b\\M-;\\M-1", "\u2ef1"], ["\\M-b\\M-;\\M-2", "\u2ef2"], ["\\M-b\\M-;\\M-3", "\u2ef3"], ["\\M-b\\M-;\\M-4", "\u2ef4"], ["\\M-b\\M-;\\M-5", "\u2ef5"], ["\\M-b\\M-;\\M-6", "\u2ef6"], ["\\M-b\\M-;\\M-7", "\u2ef7"], ["\\M-b\\M-;\\M-8", "\u2ef8"], ["\\M-b\\M-;\\M-9", "\u2ef9"], ["\\M-b\\M-;\\M-:", "\u2efa"], ["\\M-b\\M-;\\M-;", "\u2efb"], ["\\M-b\\M-;\\M-<", "\u2efc"], ["\\M-b\\M-;\\M-=", "\u2efd"], ["\\M-b\\M-;\\M->", "\u2efe"], ["\\M-b\\M-;\\M-?", "\u2eff"], ["\\M-c\\M^A\\M^@", "\u3040"], ["\\M-c\\M^A\\M^A", "\u3041"], ["\\M-c\\M^A\\M^B", "\u3042"], ["\\M-c\\M^A\\M^C", "\u3043"], ["\\M-c\\M^A\\M^D", "\u3044"], ["\\M-c\\M^A\\M^E", "\u3045"], ["\\M-c\\M^A\\M^F", "\u3046"], ["\\M-c\\M^A\\M^G", "\u3047"], ["\\M-c\\M^A\\M^H", "\u3048"], ["\\M-c\\M^A\\M^I", "\u3049"], ["\\M-c\\M^A\\M^J", "\u304a"], ["\\M-c\\M^A\\M^K", "\u304b"], ["\\M-c\\M^A\\M^L", "\u304c"], ["\\M-c\\M^A\\M^M", "\u304d"], ["\\M-c\\M^A\\M^N", "\u304e"], ["\\M-c\\M^A\\M^O", "\u304f"], ["\\M-c\\M^A\\M^P", "\u3050"], ["\\M-c\\M^A\\M^Q", "\u3051"], ["\\M-c\\M^A\\M^R", "\u3052"], ["\\M-c\\M^A\\M^S", "\u3053"], ["\\M-c\\M^A\\M^T", "\u3054"], ["\\M-c\\M^A\\M^U", "\u3055"], ["\\M-c\\M^A\\M^V", "\u3056"], ["\\M-c\\M^A\\M^W", "\u3057"], ["\\M-c\\M^A\\M^X", "\u3058"], ["\\M-c\\M^A\\M^Y", "\u3059"], ["\\M-c\\M^A\\M^Z", "\u305a"], ["\\M-c\\M^A\\M^[", "\u305b"], ["\\M-c\\M^A\\M^\\", "\u305c"], ["\\M-c\\M^A\\M^]", "\u305d"], ["\\M-c\\M^A\\M^^", "\u305e"], ["\\M-c\\M^A\\M^_", "\u305f"], ["\\M-c\\M^A\\240", "\u3060"], ["\\M-c\\M^A\\M-!", "\u3061"], ["\\M-c\\M^A\\M-\"", "\u3062"], ["\\M-c\\M^A\\M-#", "\u3063"], ["\\M-c\\M^A\\M-$", "\u3064"], ["\\M-c\\M^A\\M-%", "\u3065"], ["\\M-c\\M^A\\M-&", "\u3066"], ["\\M-c\\M^A\\M-'", "\u3067"], ["\\M-c\\M^A\\M-(", "\u3068"], ["\\M-c\\M^A\\M-)", "\u3069"], ["\\M-c\\M^A\\M-*", "\u306a"], ["\\M-c\\M^A\\M-+", "\u306b"], ["\\M-c\\M^A\\M-,", "\u306c"], ["\\M-c\\M^A\\M--", "\u306d"], ["\\M-c\\M^A\\M-.", "\u306e"], ["\\M-c\\M^A\\M-/", "\u306f"], ["\\M-c\\M^A\\M-0", "\u3070"], ["\\M-c\\M^A\\M-1", "\u3071"], ["\\M-c\\M^A\\M-2", "\u3072"], ["\\M-c\\M^A\\M-3", "\u3073"], ["\\M-c\\M^A\\M-4", "\u3074"], ["\\M-c\\M^A\\M-5", "\u3075"], ["\\M-c\\M^A\\M-6", "\u3076"], ["\\M-c\\M^A\\M-7", "\u3077"], ["\\M-c\\M^A\\M-8", "\u3078"], ["\\M-c\\M^A\\M-9", "\u3079"], ["\\M-c\\M^A\\M-:", "\u307a"], ["\\M-c\\M^A\\M-;", "\u307b"], ["\\M-c\\M^A\\M-<", "\u307c"], ["\\M-c\\M^A\\M-=", "\u307d"], ["\\M-c\\M^A\\M->", "\u307e"], ["\\M-c\\M^A\\M-?", "\u307f"], ["\\M-c\\M^B\\M^@", "\u3080"], ["\\M-c\\M^B\\M^A", "\u3081"], ["\\M-c\\M^B\\M^B", "\u3082"], ["\\M-c\\M^B\\M^C", "\u3083"], ["\\M-c\\M^B\\M^D", "\u3084"], ["\\M-c\\M^B\\M^E", "\u3085"], ["\\M-c\\M^B\\M^F", "\u3086"], ["\\M-c\\M^B\\M^G", "\u3087"], ["\\M-c\\M^B\\M^H", "\u3088"], ["\\M-c\\M^B\\M^I", "\u3089"], ["\\M-c\\M^B\\M^J", "\u308a"], ["\\M-c\\M^B\\M^K", "\u308b"], ["\\M-c\\M^B\\M^L", "\u308c"], ["\\M-c\\M^B\\M^M", "\u308d"], ["\\M-c\\M^B\\M^N", "\u308e"], ["\\M-c\\M^B\\M^O", "\u308f"], ["\\M-c\\M^B\\M^P", "\u3090"], ["\\M-c\\M^B\\M^Q", "\u3091"], ["\\M-c\\M^B\\M^R", "\u3092"], ["\\M-c\\M^B\\M^S", "\u3093"], ["\\M-c\\M^B\\M^T", "\u3094"], ["\\M-c\\M^B\\M^U", "\u3095"], ["\\M-c\\M^B\\M^V", "\u3096"], ["\\M-c\\M^B\\M^W", "\u3097"], ["\\M-c\\M^B\\M^X", "\u3098"], ["\\M-c\\M^B\\M^Y", "\u3099"], ["\\M-c\\M^B\\M^Z", "\u309a"], ["\\M-c\\M^B\\M^[", "\u309b"], ["\\M-c\\M^B\\M^\\", "\u309c"], ["\\M-c\\M^B\\M^]", "\u309d"], ["\\M-c\\M^B\\M^^", "\u309e"], ["\\M-c\\M^B\\M^_", "\u309f"], ["\\M-c\\M^B\\240", "\u30a0"], ["\\M-c\\M^B\\M-!", "\u30a1"], ["\\M-c\\M^B\\M-\"", "\u30a2"], ["\\M-c\\M^B\\M-#", "\u30a3"], ["\\M-c\\M^B\\M-$", "\u30a4"], ["\\M-c\\M^B\\M-%", "\u30a5"], ["\\M-c\\M^B\\M-&", "\u30a6"], ["\\M-c\\M^B\\M-'", "\u30a7"], ["\\M-c\\M^B\\M-(", "\u30a8"], ["\\M-c\\M^B\\M-)", "\u30a9"], ["\\M-c\\M^B\\M-*", "\u30aa"], ["\\M-c\\M^B\\M-+", "\u30ab"], ["\\M-c\\M^B\\M-,", "\u30ac"], ["\\M-c\\M^B\\M--", "\u30ad"], ["\\M-c\\M^B\\M-.", "\u30ae"], ["\\M-c\\M^B\\M-/", "\u30af"], ["\\M-c\\M^B\\M-0", "\u30b0"], ["\\M-c\\M^B\\M-1", "\u30b1"], ["\\M-c\\M^B\\M-2", "\u30b2"], ["\\M-c\\M^B\\M-3", "\u30b3"], ["\\M-c\\M^B\\M-4", "\u30b4"], ["\\M-c\\M^B\\M-5", "\u30b5"], ["\\M-c\\M^B\\M-6", "\u30b6"], ["\\M-c\\M^B\\M-7", "\u30b7"], ["\\M-c\\M^B\\M-8", "\u30b8"], ["\\M-c\\M^B\\M-9", "\u30b9"], ["\\M-c\\M^B\\M-:", "\u30ba"], ["\\M-c\\M^B\\M-;", "\u30bb"], ["\\M-c\\M^B\\M-<", "\u30bc"], ["\\M-c\\M^B\\M-=", "\u30bd"], ["\\M-c\\M^B\\M->", "\u30be"], ["\\M-c\\M^B\\M-?", "\u30bf"], ["\\M-c\\M^C\\M^@", "\u30c0"], ["\\M-c\\M^C\\M^A", "\u30c1"], ["\\M-c\\M^C\\M^B", "\u30c2"], ["\\M-c\\M^C\\M^C", "\u30c3"], ["\\M-c\\M^C\\M^D", "\u30c4"], ["\\M-c\\M^C\\M^E", "\u30c5"], ["\\M-c\\M^C\\M^F", "\u30c6"], ["\\M-c\\M^C\\M^G", "\u30c7"], ["\\M-c\\M^C\\M^H", "\u30c8"], ["\\M-c\\M^C\\M^I", "\u30c9"], ["\\M-c\\M^C\\M^J", "\u30ca"], ["\\M-c\\M^C\\M^K", "\u30cb"], ["\\M-c\\M^C\\M^L", "\u30cc"], ["\\M-c\\M^C\\M^M", "\u30cd"], ["\\M-c\\M^C\\M^N", "\u30ce"], ["\\M-c\\M^C\\M^O", "\u30cf"], ["\\M-c\\M^C\\M^P", "\u30d0"], ["\\M-c\\M^C\\M^Q", "\u30d1"], ["\\M-c\\M^C\\M^R", "\u30d2"], ["\\M-c\\M^C\\M^S", "\u30d3"], ["\\M-c\\M^C\\M^T", "\u30d4"], ["\\M-c\\M^C\\M^U", "\u30d5"], ["\\M-c\\M^C\\M^V", "\u30d6"], ["\\M-c\\M^C\\M^W", "\u30d7"], ["\\M-c\\M^C\\M^X", "\u30d8"], ["\\M-c\\M^C\\M^Y", "\u30d9"], ["\\M-c\\M^C\\M^Z", "\u30da"], ["\\M-c\\M^C\\M^[", "\u30db"], ["\\M-c\\M^C\\M^\\", "\u30dc"], ["\\M-c\\M^C\\M^]", "\u30dd"], ["\\M-c\\M^C\\M^^", "\u30de"], ["\\M-c\\M^C\\M^_", "\u30df"], ["\\M-c\\M^C\\240", "\u30e0"], ["\\M-c\\M^C\\M-!", "\u30e1"], ["\\M-c\\M^C\\M-\"", "\u30e2"], ["\\M-c\\M^C\\M-#", "\u30e3"], ["\\M-c\\M^C\\M-$", "\u30e4"], ["\\M-c\\M^C\\M-%", "\u30e5"], ["\\M-c\\M^C\\M-&", "\u30e6"], ["\\M-c\\M^C\\M-'", "\u30e7"], ["\\M-c\\M^C\\M-(", "\u30e8"], ["\\M-c\\M^C\\M-)", "\u30e9"], ["\\M-c\\M^C\\M-*", "\u30ea"], ["\\M-c\\M^C\\M-+", "\u30eb"], ["\\M-c\\M^C\\M-,", "\u30ec"], ["\\M-c\\M^C\\M--", "\u30ed"], ["\\M-c\\M^C\\M-.", "\u30ee"], ["\\M-c\\M^C\\M-/", "\u30ef"], ["\\M-c\\M^C\\M-0", "\u30f0"], ["\\M-c\\M^C\\M-1", "\u30f1"], ["\\M-c\\M^C\\M-2", "\u30f2"], ["\\M-c\\M^C\\M-3", "\u30f3"], ["\\M-c\\M^C\\M-4", "\u30f4"], ["\\M-c\\M^C\\M-5", "\u30f5"], ["\\M-c\\M^C\\M-6", "\u30f6"], ["\\M-c\\M^C\\M-7", "\u30f7"], ["\\M-c\\M^C\\M-8", "\u30f8"], ["\\M-c\\M^C\\M-9", "\u30f9"], ["\\M-c\\M^C\\M-:", "\u30fa"], ["\\M-c\\M^C\\M-;", "\u30fb"], ["\\M-c\\M^C\\M-<", "\u30fc"], ["\\M-c\\M^C\\M-=", "\u30fd"], ["\\M-c\\M^C\\M->", "\u30fe"], ["\\M-c\\M^C\\M-?", "\u30ff"], ["foo\\040bar", "foo bar"], ["foo\\^Jbar", "foo\nbar"], ["$bar\\040=\\040'baz';", "$bar = 'baz';"], ["$foo\\040=\\040\"\\\\x20\\\\\\\\x20\\\\\\\\\\\\x20\\\\\\\\\\\\\\\\x20\"", "$foo = \"\\x20\\\\x20\\\\\\x20\\\\\\\\x20\""], ["$foo\\040=\\040function($bar)\\040use($baz)\\040{\\^J\\^Ireturn\\040$baz->getFoo()\\^J};", "$foo = function($bar) use($baz) {\n\treturn $baz->getFoo()\n};"], ["", ""]]
\ No newline at end of file
diff --git a/vendor/psy/psysh/test/tools/gen_unvis_fixtures.py b/vendor/psy/psysh/test/tools/gen_unvis_fixtures.py
deleted file mode 100755
index e02a74145933238e9f8c09f19007d456ff28bd8d..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/test/tools/gen_unvis_fixtures.py
+++ /dev/null
@@ -1,94 +0,0 @@
-#! /usr/bin/env python3
-import sys
-from os.path import abspath, expanduser, dirname, join
-from itertools import chain
-import json
-import argparse
-
-from vis import vis, unvis, VIS_WHITE
-
-
-__dir__ = dirname(abspath(__file__))
-
-OUTPUT_FILE = join(__dir__, '..', 'fixtures', 'unvis_fixtures.json')
-
-# Add custom fixtures here
-CUSTOM_FIXTURES = [
-    # test long multibyte string
-    ''.join(chr(cp) for cp in range(1024)),
-    'foo bar',
-    'foo\nbar',
-    "$bar = 'baz';",
-    r'$foo = "\x20\\x20\\\x20\\\\x20"',
-    '$foo = function($bar) use($baz) {\n\treturn $baz->getFoo()\n};'
-]
-
-RANGES = {
-    # All valid codepoints in the BMP
-    'bmp': chain(range(0x0000, 0xD800), range(0xE000, 0xFFFF)),
-    # Smaller set of pertinent? codepoints inside BMP
-    # see: http://en.wikipedia.org/wiki/Plane_(Unicode)#Basic_Multilingual_Plane
-    'small': chain(
-        # latin blocks
-        range(0x0000, 0x0250),
-        # Greek, Cyrillic
-        range(0x0370, 0x0530),
-        # Hebrew, Arabic
-        range(0x590, 0x0700),
-        # CJK radicals
-        range(0x2E80, 0x2F00),
-        # Hiragana, Katakana
-        range(0x3040, 0x3100)
-    )
-}
-
-
-if __name__ == '__main__':
-
-    argp = argparse.ArgumentParser(
-        description='Generates test data for Psy\\Test\\Util\\StrTest')
-    argp.add_argument('-f', '--format-output', action='store_true',
-                      help='Indent JSON output to ease debugging')
-    argp.add_argument('-a', '--all', action='store_true',
-                      help="""Generates test data for all codepoints of the BMP.
-                      (same as --range=bmp). WARNING: You will need quite
-                      a lot of RAM to run the testsuite !
-                      """)
-    argp.add_argument('-r', '--range',
-                      help="""Choose the range of codepoints used to generate
-                      test data.""",
-                      choices=list(RANGES.keys()),
-                      default='small')
-    argp.add_argument('-o', '--output-file',
-                      help="""Write test data to OUTPUT_FILE
-                      (defaults to PSYSH_DIR/test/fixtures)""")
-    args = argp.parse_args()
-
-    cp_range = RANGES['bmp'] if args.all else RANGES[args.range]
-    indent = 2 if args.format_output else None
-    if args.output_file:
-        OUTPUT_FILE = abspath(expanduser(args.output_file))
-
-    fixtures = []
-
-    # use SMALL_RANGE by default, it should be enough.
-    # use BMP_RANGE for a more complete smoke test
-    for codepoint in cp_range:
-        char = chr(codepoint)
-        encoded = vis(char, VIS_WHITE)
-        decoded = unvis(encoded)
-        fixtures.append((encoded, decoded))
-
-    # Add our own custom fixtures at the end,
-    # since they would fail anyway if one of the previous did.
-    for fixture in CUSTOM_FIXTURES:
-        encoded = vis(fixture, VIS_WHITE)
-        decoded = unvis(encoded)
-        fixtures.append((encoded, decoded))
-
-    with open(OUTPUT_FILE, 'w') as fp:
-        # dump as json to avoid backslashin and quotin nightmare
-        # between php and python
-        json.dump(fixtures, fp, indent=indent)
-
-    sys.exit(0)
diff --git a/vendor/psy/psysh/test/tools/vis.py b/vendor/psy/psysh/test/tools/vis.py
deleted file mode 100644
index 4e45c4c93fdaf04a22a10df1b604eb73ae992428..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/test/tools/vis.py
+++ /dev/null
@@ -1,126 +0,0 @@
-"""
-vis.py
-======
-
-Ctypes based module to access libbsd's strvis & strunvis functions.
-
-The `vis` function is the equivalent of strvis.
-The `unvis` function is the equivalent of strunvis.
-All functions accept unicode string as input and return a unicode string.
-
-Constants:
-----------
-
-* to select alternate encoding format
-  `VIS_OCTAL`:      use octal \ddd format
-  `VIS_CSTYLE`:     use \[nrft0..] where appropiate
-
-* to alter set of characters encoded
-  (default is to encode all non-graphic except space, tab, and newline).
-  `VIS_SP`:         also encode space
-  `VIS_TAB`:        also encode tab
-  `VIS_NL`:         also encode newline
-  `VIS_WHITE`:      same as (VIS_SP | VIS_TAB | VIS_NL)
-  `VIS_SAFE`:       only encode "unsafe" characters
-
-* other
-  `VIS_NOSLASH`:    inhibit printing '\'
-  `VIS_HTTP1808`:   http-style escape % hex hex
-  `VIS_HTTPSTYLE`:  http-style escape % hex hex
-  `VIS_MIMESTYLE`:  mime-style escape = HEX HEX
-  `VIS_HTTP1866`:   http-style &#num; or &string;
-  `VIS_NOESCAPE`:   don't decode `\'
-  `VIS_GLOB`:       encode glob(3) magic characters
-
-:Authors:
-    - ju1ius (http://github.com/ju1ius)
-:Version: 1
-:Date: 2014-01-05
-"""
-from ctypes import CDLL, c_char_p, c_int
-from ctypes.util import find_library
-
-
-__all__ = [
-    'vis', 'unvis',
-    'VIS_OCTAL', 'VIS_CSTYLE',
-    'VIS_SP', 'VIS_TAB', 'VIS_NL', 'VIS_WHITE', 'VIS_SAFE',
-    'VIS_NOSLASH', 'VIS_HTTP1808', 'VIS_HTTPSTYLE', 'VIS_MIMESTYLE',
-    'VIS_HTTP1866', 'VIS_NOESCAPE', 'VIS_GLOB'
-]
-
-
-#############################################################
-# Constants from bsd/vis.h
-#############################################################
-
-#to select alternate encoding format
-VIS_OCTAL = 0x0001
-VIS_CSTYLE = 0x0002
-# to alter set of characters encoded
-# (default is to encode all non-graphic except space, tab, and newline).
-VIS_SP = 0x0004
-VIS_TAB = 0x0008
-VIS_NL = 0x0010
-VIS_WHITE = VIS_SP | VIS_TAB | VIS_NL
-VIS_SAFE = 0x0020
-# other
-VIS_NOSLASH = 0x0040
-VIS_HTTP1808 = 0x0080
-VIS_HTTPSTYLE = 0x0080
-VIS_MIMESTYLE = 0x0100
-VIS_HTTP1866 = 0x0200
-VIS_NOESCAPE = 0x0400
-VIS_GLOB = 0x1000
-
-#############################################################
-# Import libbsd/vis functions
-#############################################################
-
-_libbsd = CDLL(find_library('bsd'))
-
-_strvis = _libbsd.strvis
-_strvis.argtypes = [c_char_p, c_char_p, c_int]
-_strvis.restype = c_int
-
-_strunvis = _libbsd.strunvis
-_strvis.argtypes = [c_char_p, c_char_p]
-_strvis.restype = c_int
-
-
-def vis(src, flags=VIS_WHITE):
-    """
-    Encodes the string `src` into libbsd's vis encoding.
-    `flags` must be one of the VIS_* constants
-
-    C definition:
-    int strvis(char *dst, char *src, int flags);
-    """
-    src = bytes(src, 'utf-8')
-    dst_p = c_char_p(bytes(len(src) * 4))
-    src_p = c_char_p(src)
-    flags = c_int(flags)
-
-    bytes_written = _strvis(dst_p, src_p, flags)
-    if -1 == bytes_written:
-        raise RuntimeError('vis failed to encode string "{}"'.format(src))
-
-    return dst_p.value.decode('utf-8')
-
-
-def unvis(src):
-    """
-    Decodes a string encoded by vis.
-
-    C definition:
-    int strunvis(char *dst, char *src);
-    """
-    src = bytes(src, 'utf-8')
-    dst_p = c_char_p(bytes(len(src)))
-    src_p = c_char_p(src)
-
-    bytes_written = _strunvis(dst_p, src_p)
-    if -1 == bytes_written:
-        raise RuntimeError('unvis failed to decode string "{}"'.format(src))
-
-    return dst_p.value.decode('utf-8')
diff --git a/vendor/psy/psysh/vendor-bin/box/composer.json b/vendor/psy/psysh/vendor-bin/box/composer.json
deleted file mode 100644
index 13b78794fb924b103539b8aeb6e26a04fef492e6..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/vendor-bin/box/composer.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
-    "minimum-stability": "dev",
-    "prefer-stable": true,
-    "require": {
-        "humbug/box": "^3.1"
-    }
-}
diff --git a/vendor/psy/psysh/vendor-bin/box/composer.lock b/vendor/psy/psysh/vendor-bin/box/composer.lock
deleted file mode 100644
index 3c4496384aabdfe0c67f10d45f56c68e616eadb3..0000000000000000000000000000000000000000
--- a/vendor/psy/psysh/vendor-bin/box/composer.lock
+++ /dev/null
@@ -1,2524 +0,0 @@
-{
-    "_readme": [
-        "This file locks the dependencies of your project to a known state",
-        "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
-        "This file is @generated automatically"
-    ],
-    "content-hash": "d98ffe050f0ba4e81c2d1a98ca945200",
-    "packages": [
-        {
-            "name": "amphp/amp",
-            "version": "v2.0.7",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/amphp/amp.git",
-                "reference": "d561cc9736bc18dd94a2fc9cdae98b616bd92c43"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/amphp/amp/zipball/d561cc9736bc18dd94a2fc9cdae98b616bd92c43",
-                "reference": "d561cc9736bc18dd94a2fc9cdae98b616bd92c43",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7"
-            },
-            "require-dev": {
-                "amphp/phpunit-util": "^1",
-                "friendsofphp/php-cs-fixer": "^2.3",
-                "phpstan/phpstan": "^0.8.5",
-                "phpunit/phpunit": "^6.0.9",
-                "react/promise": "^2"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.0.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Amp\\": "lib"
-                },
-                "files": [
-                    "lib/functions.php",
-                    "lib/Internal/functions.php"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Bob Weinand",
-                    "email": "bobwei9@hotmail.com"
-                },
-                {
-                    "name": "Niklas Keller",
-                    "email": "me@kelunik.com"
-                },
-                {
-                    "name": "Daniel Lowrey",
-                    "email": "rdlowrey@php.net"
-                },
-                {
-                    "name": "Aaron Piotrowski",
-                    "email": "aaron@trowski.com"
-                }
-            ],
-            "description": "A non-blocking concurrency framework for PHP applications.",
-            "homepage": "http://amphp.org/amp",
-            "keywords": [
-                "async",
-                "asynchronous",
-                "awaitable",
-                "concurrency",
-                "event",
-                "event-loop",
-                "future",
-                "non-blocking",
-                "promise"
-            ],
-            "time": "2018-04-30T20:49:57+00:00"
-        },
-        {
-            "name": "amphp/byte-stream",
-            "version": "v1.3.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/amphp/byte-stream.git",
-                "reference": "1b75b122e6f069e7d102eef065dc192119d99ca7"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/amphp/byte-stream/zipball/1b75b122e6f069e7d102eef065dc192119d99ca7",
-                "reference": "1b75b122e6f069e7d102eef065dc192119d99ca7",
-                "shasum": ""
-            },
-            "require": {
-                "amphp/amp": "^2"
-            },
-            "require-dev": {
-                "amphp/phpunit-util": "^1",
-                "friendsofphp/php-cs-fixer": "^2.3",
-                "phpunit/phpunit": "^6"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Amp\\ByteStream\\": "lib"
-                },
-                "files": [
-                    "lib/functions.php"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Niklas Keller",
-                    "email": "me@kelunik.com"
-                },
-                {
-                    "name": "Aaron Piotrowski",
-                    "email": "aaron@trowski.com"
-                }
-            ],
-            "description": "A stream abstraction to make working with non-blocking I/O simple.",
-            "homepage": "http://amphp.org/byte-stream",
-            "keywords": [
-                "amp",
-                "amphp",
-                "async",
-                "io",
-                "non-blocking",
-                "stream"
-            ],
-            "time": "2018-04-04T05:33:09+00:00"
-        },
-        {
-            "name": "amphp/parallel",
-            "version": "v0.2.5",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/amphp/parallel.git",
-                "reference": "732694688461936bec02c0ccf020dfee10c4f7ee"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/amphp/parallel/zipball/732694688461936bec02c0ccf020dfee10c4f7ee",
-                "reference": "732694688461936bec02c0ccf020dfee10c4f7ee",
-                "shasum": ""
-            },
-            "require": {
-                "amphp/amp": "^2",
-                "amphp/byte-stream": "^1.2",
-                "amphp/parser": "^1",
-                "amphp/process": "^0.2 || ^0.3",
-                "amphp/sync": "^1.0.1"
-            },
-            "require-dev": {
-                "amphp/phpunit-util": "^1",
-                "friendsofphp/php-cs-fixer": "^2.3",
-                "phpunit/phpunit": "^6"
-            },
-            "suggest": {
-                "ext-pthreads": "Required for thread contexts"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Amp\\Parallel\\": "lib"
-                },
-                "files": [
-                    "lib/Worker/functions.php"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Stephen Coakley",
-                    "email": "me@stephencoakley.com"
-                },
-                {
-                    "name": "Aaron Piotrowski",
-                    "email": "aaron@trowski.com"
-                }
-            ],
-            "description": "Parallel processing component for Amp.",
-            "homepage": "https://github.com/amphp/parallel",
-            "keywords": [
-                "async",
-                "asynchronous",
-                "concurrent",
-                "multi-processing",
-                "multi-threading"
-            ],
-            "time": "2018-03-21T14:37:51+00:00"
-        },
-        {
-            "name": "amphp/parallel-functions",
-            "version": "v0.1.2",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/amphp/parallel-functions.git",
-                "reference": "999ba8a00adaf4d1fd3a7cb40bf7e565e507ff48"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/amphp/parallel-functions/zipball/999ba8a00adaf4d1fd3a7cb40bf7e565e507ff48",
-                "reference": "999ba8a00adaf4d1fd3a7cb40bf7e565e507ff48",
-                "shasum": ""
-            },
-            "require": {
-                "amphp/amp": "^2.0.3",
-                "amphp/parallel": "^0.1.8 || ^0.2",
-                "opis/closure": "^3.0.7",
-                "php": ">=7"
-            },
-            "require-dev": {
-                "amphp/phpunit-util": "^1.0",
-                "friendsofphp/php-cs-fixer": "^2.9",
-                "phpunit/phpunit": "^6.5"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Amp\\ParallelFunctions\\": "src"
-                },
-                "files": [
-                    "src/functions.php"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Niklas Keller",
-                    "email": "me@kelunik.com"
-                }
-            ],
-            "description": "Parallel processing made simple.",
-            "time": "2017-12-17T18:33:29+00:00"
-        },
-        {
-            "name": "amphp/parser",
-            "version": "v1.0.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/amphp/parser.git",
-                "reference": "f83e68f03d5b8e8e0365b8792985a7f341c57ae1"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/amphp/parser/zipball/f83e68f03d5b8e8e0365b8792985a7f341c57ae1",
-                "reference": "f83e68f03d5b8e8e0365b8792985a7f341c57ae1",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7"
-            },
-            "require-dev": {
-                "friendsofphp/php-cs-fixer": "^2.3",
-                "phpunit/phpunit": "^6"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Amp\\Parser\\": "lib"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Niklas Keller",
-                    "email": "me@kelunik.com"
-                },
-                {
-                    "name": "Aaron Piotrowski",
-                    "email": "aaron@trowski.com"
-                }
-            ],
-            "description": "A generator parser to make streaming parsers simple.",
-            "homepage": "https://github.com/amphp/parser",
-            "keywords": [
-                "async",
-                "non-blocking",
-                "parser",
-                "stream"
-            ],
-            "time": "2017-06-06T05:29:10+00:00"
-        },
-        {
-            "name": "amphp/process",
-            "version": "v0.3.3",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/amphp/process.git",
-                "reference": "b795d20a7f6d5a0637128a02be613f520f1705fc"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/amphp/process/zipball/b795d20a7f6d5a0637128a02be613f520f1705fc",
-                "reference": "b795d20a7f6d5a0637128a02be613f520f1705fc",
-                "shasum": ""
-            },
-            "require": {
-                "amphp/amp": "^2",
-                "amphp/byte-stream": "^1",
-                "php": ">=7"
-            },
-            "require-dev": {
-                "amphp/phpunit-util": "^1",
-                "friendsofphp/php-cs-fixer": "^2.3",
-                "phpunit/phpunit": "^6"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Amp\\Process\\": "lib"
-                },
-                "files": [
-                    "lib/constants.php"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Bob Weinand",
-                    "email": "bobwei9@hotmail.com"
-                },
-                {
-                    "name": "Niklas Keller",
-                    "email": "me@kelunik.com"
-                },
-                {
-                    "name": "Aaron Piotrowski",
-                    "email": "aaron@trowski.com"
-                }
-            ],
-            "description": "Asynchronous process manager.",
-            "homepage": "https://github.com/amphp/process",
-            "time": "2018-04-08T18:55:42+00:00"
-        },
-        {
-            "name": "amphp/sync",
-            "version": "v1.0.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/amphp/sync.git",
-                "reference": "a1d8f244eb19e3e2a96abc4686cebc80995bbc90"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/amphp/sync/zipball/a1d8f244eb19e3e2a96abc4686cebc80995bbc90",
-                "reference": "a1d8f244eb19e3e2a96abc4686cebc80995bbc90",
-                "shasum": ""
-            },
-            "require": {
-                "amphp/amp": "^2"
-            },
-            "require-dev": {
-                "amphp/phpunit-util": "^1",
-                "friendsofphp/php-cs-fixer": "^2.3",
-                "phpunit/phpunit": "^6"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Amp\\Sync\\": "lib"
-                },
-                "files": [
-                    "lib/functions.php"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Stephen Coakley",
-                    "email": "me@stephencoakley.com"
-                },
-                {
-                    "name": "Aaron Piotrowski",
-                    "email": "aaron@trowski.com"
-                }
-            ],
-            "description": "Mutex, Semaphore, and other synchronization tools for Amp.",
-            "homepage": "https://github.com/amphp/sync",
-            "keywords": [
-                "async",
-                "asynchronous",
-                "mutex",
-                "semaphore",
-                "synchronization"
-            ],
-            "time": "2017-11-29T21:48:53+00:00"
-        },
-        {
-            "name": "beberlei/assert",
-            "version": "v2.9.5",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/beberlei/assert.git",
-                "reference": "c07fe163d6a3b3e4b1275981ec004397954afa89"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/beberlei/assert/zipball/c07fe163d6a3b3e4b1275981ec004397954afa89",
-                "reference": "c07fe163d6a3b3e4b1275981ec004397954afa89",
-                "shasum": ""
-            },
-            "require": {
-                "ext-mbstring": "*",
-                "php": ">=5.3"
-            },
-            "require-dev": {
-                "friendsofphp/php-cs-fixer": "^2.1.1",
-                "phpunit/phpunit": "^4.8.35|^5.7"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Assert\\": "lib/Assert"
-                },
-                "files": [
-                    "lib/Assert/functions.php"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-2-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Benjamin Eberlei",
-                    "email": "kontakt@beberlei.de",
-                    "role": "Lead Developer"
-                },
-                {
-                    "name": "Richard Quadling",
-                    "email": "rquadling@gmail.com",
-                    "role": "Collaborator"
-                }
-            ],
-            "description": "Thin assertion library for input validation in business models.",
-            "keywords": [
-                "assert",
-                "assertion",
-                "validation"
-            ],
-            "time": "2018-04-16T11:18:27+00:00"
-        },
-        {
-            "name": "composer/ca-bundle",
-            "version": "1.1.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/composer/ca-bundle.git",
-                "reference": "d2c0a83b7533d6912e8d516756ebd34f893e9169"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/composer/ca-bundle/zipball/d2c0a83b7533d6912e8d516756ebd34f893e9169",
-                "reference": "d2c0a83b7533d6912e8d516756ebd34f893e9169",
-                "shasum": ""
-            },
-            "require": {
-                "ext-openssl": "*",
-                "ext-pcre": "*",
-                "php": "^5.3.2 || ^7.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5",
-                "psr/log": "^1.0",
-                "symfony/process": "^2.5 || ^3.0 || ^4.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Composer\\CaBundle\\": "src"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Jordi Boggiano",
-                    "email": "j.boggiano@seld.be",
-                    "homepage": "http://seld.be"
-                }
-            ],
-            "description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.",
-            "keywords": [
-                "cabundle",
-                "cacert",
-                "certificate",
-                "ssl",
-                "tls"
-            ],
-            "time": "2018-03-29T19:57:20+00:00"
-        },
-        {
-            "name": "composer/composer",
-            "version": "1.6.5",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/composer/composer.git",
-                "reference": "b184a92419cc9a9c4c6a09db555a94d441cb11c9"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/composer/composer/zipball/b184a92419cc9a9c4c6a09db555a94d441cb11c9",
-                "reference": "b184a92419cc9a9c4c6a09db555a94d441cb11c9",
-                "shasum": ""
-            },
-            "require": {
-                "composer/ca-bundle": "^1.0",
-                "composer/semver": "^1.0",
-                "composer/spdx-licenses": "^1.2",
-                "justinrainbow/json-schema": "^3.0 || ^4.0 || ^5.0",
-                "php": "^5.3.2 || ^7.0",
-                "psr/log": "^1.0",
-                "seld/cli-prompt": "^1.0",
-                "seld/jsonlint": "^1.4",
-                "seld/phar-utils": "^1.0",
-                "symfony/console": "^2.7 || ^3.0 || ^4.0",
-                "symfony/filesystem": "^2.7 || ^3.0 || ^4.0",
-                "symfony/finder": "^2.7 || ^3.0 || ^4.0",
-                "symfony/process": "^2.7 || ^3.0 || ^4.0"
-            },
-            "conflict": {
-                "symfony/console": "2.8.38"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^4.8.35 || ^5.7",
-                "phpunit/phpunit-mock-objects": "^2.3 || ^3.0"
-            },
-            "suggest": {
-                "ext-openssl": "Enabling the openssl extension allows you to access https URLs for repositories and packages",
-                "ext-zip": "Enabling the zip extension allows you to unzip archives",
-                "ext-zlib": "Allow gzip compression of HTTP requests"
-            },
-            "bin": [
-                "bin/composer"
-            ],
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.6-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Composer\\": "src/Composer"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Nils Adermann",
-                    "email": "naderman@naderman.de",
-                    "homepage": "http://www.naderman.de"
-                },
-                {
-                    "name": "Jordi Boggiano",
-                    "email": "j.boggiano@seld.be",
-                    "homepage": "http://seld.be"
-                }
-            ],
-            "description": "Composer helps you declare, manage and install dependencies of PHP projects, ensuring you have the right stack everywhere.",
-            "homepage": "https://getcomposer.org/",
-            "keywords": [
-                "autoload",
-                "dependency",
-                "package"
-            ],
-            "time": "2018-05-04T09:44:59+00:00"
-        },
-        {
-            "name": "composer/semver",
-            "version": "1.4.2",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/composer/semver.git",
-                "reference": "c7cb9a2095a074d131b65a8a0cd294479d785573"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/composer/semver/zipball/c7cb9a2095a074d131b65a8a0cd294479d785573",
-                "reference": "c7cb9a2095a074d131b65a8a0cd294479d785573",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^5.3.2 || ^7.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^4.5 || ^5.0.5",
-                "phpunit/phpunit-mock-objects": "2.3.0 || ^3.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Composer\\Semver\\": "src"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Nils Adermann",
-                    "email": "naderman@naderman.de",
-                    "homepage": "http://www.naderman.de"
-                },
-                {
-                    "name": "Jordi Boggiano",
-                    "email": "j.boggiano@seld.be",
-                    "homepage": "http://seld.be"
-                },
-                {
-                    "name": "Rob Bast",
-                    "email": "rob.bast@gmail.com",
-                    "homepage": "http://robbast.nl"
-                }
-            ],
-            "description": "Semver library that offers utilities, version constraint parsing and validation.",
-            "keywords": [
-                "semantic",
-                "semver",
-                "validation",
-                "versioning"
-            ],
-            "time": "2016-08-30T16:08:34+00:00"
-        },
-        {
-            "name": "composer/spdx-licenses",
-            "version": "1.4.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/composer/spdx-licenses.git",
-                "reference": "cb17687e9f936acd7e7245ad3890f953770dec1b"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/composer/spdx-licenses/zipball/cb17687e9f936acd7e7245ad3890f953770dec1b",
-                "reference": "cb17687e9f936acd7e7245ad3890f953770dec1b",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^5.3.2 || ^7.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5",
-                "phpunit/phpunit-mock-objects": "2.3.0 || ^3.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Composer\\Spdx\\": "src"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Nils Adermann",
-                    "email": "naderman@naderman.de",
-                    "homepage": "http://www.naderman.de"
-                },
-                {
-                    "name": "Jordi Boggiano",
-                    "email": "j.boggiano@seld.be",
-                    "homepage": "http://seld.be"
-                },
-                {
-                    "name": "Rob Bast",
-                    "email": "rob.bast@gmail.com",
-                    "homepage": "http://robbast.nl"
-                }
-            ],
-            "description": "SPDX licenses list and validation library.",
-            "keywords": [
-                "license",
-                "spdx",
-                "validator"
-            ],
-            "time": "2018-04-30T10:33:04+00:00"
-        },
-        {
-            "name": "composer/xdebug-handler",
-            "version": "1.1.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/composer/xdebug-handler.git",
-                "reference": "c919dc6c62e221fc6406f861ea13433c0aa24f08"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/c919dc6c62e221fc6406f861ea13433c0aa24f08",
-                "reference": "c919dc6c62e221fc6406f861ea13433c0aa24f08",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^5.3.2 || ^7.0",
-                "psr/log": "^1.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Composer\\XdebugHandler\\": "src"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "John Stevenson",
-                    "email": "john-stevenson@blueyonder.co.uk"
-                }
-            ],
-            "description": "Restarts a process without xdebug.",
-            "keywords": [
-                "Xdebug",
-                "performance"
-            ],
-            "time": "2018-04-11T15:42:36+00:00"
-        },
-        {
-            "name": "doctrine/annotations",
-            "version": "v1.6.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/doctrine/annotations.git",
-                "reference": "c7f2050c68a9ab0bdb0f98567ec08d80ea7d24d5"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/annotations/zipball/c7f2050c68a9ab0bdb0f98567ec08d80ea7d24d5",
-                "reference": "c7f2050c68a9ab0bdb0f98567ec08d80ea7d24d5",
-                "shasum": ""
-            },
-            "require": {
-                "doctrine/lexer": "1.*",
-                "php": "^7.1"
-            },
-            "require-dev": {
-                "doctrine/cache": "1.*",
-                "phpunit/phpunit": "^6.4"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.6.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Roman Borschel",
-                    "email": "roman@code-factory.org"
-                },
-                {
-                    "name": "Benjamin Eberlei",
-                    "email": "kontakt@beberlei.de"
-                },
-                {
-                    "name": "Guilherme Blanco",
-                    "email": "guilhermeblanco@gmail.com"
-                },
-                {
-                    "name": "Jonathan Wage",
-                    "email": "jonwage@gmail.com"
-                },
-                {
-                    "name": "Johannes Schmitt",
-                    "email": "schmittjoh@gmail.com"
-                }
-            ],
-            "description": "Docblock Annotations Parser",
-            "homepage": "http://www.doctrine-project.org",
-            "keywords": [
-                "annotations",
-                "docblock",
-                "parser"
-            ],
-            "time": "2017-12-06T07:11:42+00:00"
-        },
-        {
-            "name": "doctrine/lexer",
-            "version": "v1.0.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/doctrine/lexer.git",
-                "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/lexer/zipball/83893c552fd2045dd78aef794c31e694c37c0b8c",
-                "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.2"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.0.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-0": {
-                    "Doctrine\\Common\\Lexer\\": "lib/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Roman Borschel",
-                    "email": "roman@code-factory.org"
-                },
-                {
-                    "name": "Guilherme Blanco",
-                    "email": "guilhermeblanco@gmail.com"
-                },
-                {
-                    "name": "Johannes Schmitt",
-                    "email": "schmittjoh@gmail.com"
-                }
-            ],
-            "description": "Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers.",
-            "homepage": "http://www.doctrine-project.org",
-            "keywords": [
-                "lexer",
-                "parser"
-            ],
-            "time": "2014-09-09T13:34:57+00:00"
-        },
-        {
-            "name": "herrera-io/annotations",
-            "version": "1.0.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/kherge-abandoned/php-annotations.git",
-                "reference": "7d8b9a536da7f12aad8de7f28b2cb5266bde8da1"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/kherge-abandoned/php-annotations/zipball/7d8b9a536da7f12aad8de7f28b2cb5266bde8da1",
-                "reference": "7d8b9a536da7f12aad8de7f28b2cb5266bde8da1",
-                "shasum": ""
-            },
-            "require": {
-                "doctrine/annotations": "~1.0",
-                "php": ">=5.3.3"
-            },
-            "require-dev": {
-                "herrera-io/phpunit-test-case": "1.*",
-                "phpunit/phpunit": "3.7.*"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.0-dev"
-                }
-            },
-            "autoload": {
-                "psr-0": {
-                    "Herrera\\Annotations": "src/lib"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Kevin Herrera",
-                    "email": "kevin@herrera.io",
-                    "homepage": "http://kevin.herrera.io"
-                }
-            ],
-            "description": "A tokenizer for Doctrine annotations.",
-            "homepage": "https://github.com/herrera-io/php-annotations",
-            "keywords": [
-                "annotations",
-                "doctrine",
-                "tokenizer"
-            ],
-            "abandoned": true,
-            "time": "2014-02-03T17:34:08+00:00"
-        },
-        {
-            "name": "humbug/box",
-            "version": "3.0.0-alpha.5",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/humbug/box.git",
-                "reference": "26b3f481e3b375f55c0644f501b831f7c05d8058"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/humbug/box/zipball/26b3f481e3b375f55c0644f501b831f7c05d8058",
-                "reference": "26b3f481e3b375f55c0644f501b831f7c05d8058",
-                "shasum": ""
-            },
-            "require": {
-                "amphp/parallel-functions": "^0.1.2",
-                "beberlei/assert": "^2.8",
-                "composer/composer": "^1.6",
-                "composer/xdebug-handler": "^1.1.0",
-                "ext-phar": "*",
-                "herrera-io/annotations": "~1.0",
-                "humbug/php-scoper": "^1.0@dev",
-                "justinrainbow/json-schema": "^5.2",
-                "nikic/iter": "^1.6",
-                "php": "^7.1",
-                "phpseclib/phpseclib": "~2.0",
-                "seld/jsonlint": "^1.6",
-                "symfony/console": "^3.4 || ^4.0",
-                "symfony/filesystem": "^3.4 || ^4.0",
-                "symfony/finder": "^3.4 || ^4.0",
-                "symfony/var-dumper": "^3.4 || ^4.0",
-                "webmozart/path-util": "^2.3"
-            },
-            "require-dev": {
-                "bamarni/composer-bin-plugin": "^1.2",
-                "infection/infection": "^0.8",
-                "mikey179/vfsstream": "^1.1",
-                "phpunit/phpunit": "^7.0"
-            },
-            "suggest": {
-                "ext-openssl": "To accelerate private key generation."
-            },
-            "bin": [
-                "bin/box"
-            ],
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.x-dev"
-                },
-                "bamarni-bin": {
-                    "bin-links": false
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "KevinGH\\Box\\": "src"
-                },
-                "files": [
-                    "src/FileSystem/file_system.php",
-                    "src/functions.php"
-                ],
-                "exclude-from-classmap": [
-                    "/Test/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Kevin Herrera",
-                    "email": "kevin@herrera.io",
-                    "homepage": "http://kevin.herrera.io"
-                },
-                {
-                    "name": "Théo Fidry",
-                    "email": "theo.fidry@gmail.com"
-                }
-            ],
-            "description": "Fast, zero config application bundler with PHARs.",
-            "keywords": [
-                "phar"
-            ],
-            "time": "2018-05-04T22:04:10+00:00"
-        },
-        {
-            "name": "humbug/php-scoper",
-            "version": "dev-master",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/humbug/php-scoper.git",
-                "reference": "450fe36a7457847d0cb431e7379b5df9d05992a4"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/humbug/php-scoper/zipball/450fe36a7457847d0cb431e7379b5df9d05992a4",
-                "reference": "450fe36a7457847d0cb431e7379b5df9d05992a4",
-                "shasum": ""
-            },
-            "require": {
-                "nikic/php-parser": "^3.0",
-                "ocramius/package-versions": "^1.1",
-                "padraic/phar-updater": "^1.0",
-                "php": "^7.1",
-                "roave/better-reflection": "^2.0",
-                "symfony/console": "^3.2 || ^4.0",
-                "symfony/filesystem": "^3.2 || ^4.0",
-                "symfony/finder": "^3.2 || ^4.0"
-            },
-            "require-dev": {
-                "bamarni/composer-bin-plugin": "^1.1",
-                "phpunit/phpunit": "^6.1"
-            },
-            "bin": [
-                "bin/php-scoper"
-            ],
-            "type": "library",
-            "extra": {
-                "bamarni-bin": {
-                    "bin-links": false
-                },
-                "branch-alias": {
-                    "dev-master": "1.0-dev"
-                }
-            },
-            "autoload": {
-                "files": [
-                    "src/functions.php"
-                ],
-                "psr-4": {
-                    "Humbug\\PhpScoper\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Bernhard Schussek",
-                    "email": "bschussek@gmail.com"
-                },
-                {
-                    "name": "Théo Fidry",
-                    "email": "theo.fidry@gmail.com"
-                },
-                {
-                    "name": "Pádraic Brady",
-                    "email": "padraic.brady@gmail.com"
-                }
-            ],
-            "description": "Prefixes all PHP namespaces in a file or directory.",
-            "time": "2018-04-25T21:59:07+00:00"
-        },
-        {
-            "name": "justinrainbow/json-schema",
-            "version": "5.2.7",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/justinrainbow/json-schema.git",
-                "reference": "8560d4314577199ba51bf2032f02cd1315587c23"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/8560d4314577199ba51bf2032f02cd1315587c23",
-                "reference": "8560d4314577199ba51bf2032f02cd1315587c23",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.3"
-            },
-            "require-dev": {
-                "friendsofphp/php-cs-fixer": "^2.1",
-                "json-schema/json-schema-test-suite": "1.2.0",
-                "phpunit/phpunit": "^4.8.35"
-            },
-            "bin": [
-                "bin/validate-json"
-            ],
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "5.0.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "JsonSchema\\": "src/JsonSchema/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Bruno Prieto Reis",
-                    "email": "bruno.p.reis@gmail.com"
-                },
-                {
-                    "name": "Justin Rainbow",
-                    "email": "justin.rainbow@gmail.com"
-                },
-                {
-                    "name": "Igor Wiedler",
-                    "email": "igor@wiedler.ch"
-                },
-                {
-                    "name": "Robert Schönthal",
-                    "email": "seroscho@googlemail.com"
-                }
-            ],
-            "description": "A library to validate a json schema.",
-            "homepage": "https://github.com/justinrainbow/json-schema",
-            "keywords": [
-                "json",
-                "schema"
-            ],
-            "time": "2018-02-14T22:26:30+00:00"
-        },
-        {
-            "name": "nikic/iter",
-            "version": "v1.6.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/nikic/iter.git",
-                "reference": "fed36b417ea93fe9b4b7cb2e2abf98d91092564c"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/nikic/iter/zipball/fed36b417ea93fe9b4b7cb2e2abf98d91092564c",
-                "reference": "fed36b417ea93fe9b4b7cb2e2abf98d91092564c",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.5.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "~4.0|~5.0"
-            },
-            "type": "library",
-            "autoload": {
-                "files": [
-                    "src/bootstrap.php"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Nikita Popov",
-                    "email": "nikic@php.net"
-                }
-            ],
-            "description": "Iteration primitives using generators",
-            "keywords": [
-                "functional",
-                "generator",
-                "iterator"
-            ],
-            "time": "2017-11-10T22:56:03+00:00"
-        },
-        {
-            "name": "nikic/php-parser",
-            "version": "v3.1.5",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/nikic/PHP-Parser.git",
-                "reference": "bb87e28e7d7b8d9a7fda231d37457c9210faf6ce"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/bb87e28e7d7b8d9a7fda231d37457c9210faf6ce",
-                "reference": "bb87e28e7d7b8d9a7fda231d37457c9210faf6ce",
-                "shasum": ""
-            },
-            "require": {
-                "ext-tokenizer": "*",
-                "php": ">=5.5"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "~4.0|~5.0"
-            },
-            "bin": [
-                "bin/php-parse"
-            ],
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.0-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "PhpParser\\": "lib/PhpParser"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Nikita Popov"
-                }
-            ],
-            "description": "A PHP parser written in PHP",
-            "keywords": [
-                "parser",
-                "php"
-            ],
-            "time": "2018-02-28T20:30:58+00:00"
-        },
-        {
-            "name": "ocramius/package-versions",
-            "version": "1.3.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/Ocramius/PackageVersions.git",
-                "reference": "4489d5002c49d55576fa0ba786f42dbb009be46f"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/Ocramius/PackageVersions/zipball/4489d5002c49d55576fa0ba786f42dbb009be46f",
-                "reference": "4489d5002c49d55576fa0ba786f42dbb009be46f",
-                "shasum": ""
-            },
-            "require": {
-                "composer-plugin-api": "^1.0.0",
-                "php": "^7.1.0"
-            },
-            "require-dev": {
-                "composer/composer": "^1.6.3",
-                "ext-zip": "*",
-                "infection/infection": "^0.7.1",
-                "phpunit/phpunit": "^7.0.0"
-            },
-            "type": "composer-plugin",
-            "extra": {
-                "class": "PackageVersions\\Installer",
-                "branch-alias": {
-                    "dev-master": "2.0.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "PackageVersions\\": "src/PackageVersions"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Marco Pivetta",
-                    "email": "ocramius@gmail.com"
-                }
-            ],
-            "description": "Composer plugin that provides efficient querying for installed package versions (no runtime IO)",
-            "time": "2018-02-05T13:05:30+00:00"
-        },
-        {
-            "name": "opis/closure",
-            "version": "3.0.12",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/opis/closure.git",
-                "reference": "507a28d15e79258d404ba76e73976ba895d0eb11"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/opis/closure/zipball/507a28d15e79258d404ba76e73976ba895d0eb11",
-                "reference": "507a28d15e79258d404ba76e73976ba895d0eb11",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.4.0"
-            },
-            "require-dev": {
-                "jeremeamia/superclosure": "^2.0",
-                "phpunit/phpunit": "^4.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.0.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Opis\\Closure\\": "src/"
-                },
-                "files": [
-                    "functions.php"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Marius Sarca",
-                    "email": "marius.sarca@gmail.com"
-                }
-            ],
-            "description": "A library that can be used to serialize closures (anonymous functions) and arbitrary objects.",
-            "homepage": "http://www.opis.io/closure",
-            "keywords": [
-                "anonymous functions",
-                "closure",
-                "function",
-                "serializable",
-                "serialization",
-                "serialize"
-            ],
-            "time": "2018-02-23T08:08:14+00:00"
-        },
-        {
-            "name": "padraic/humbug_get_contents",
-            "version": "1.1.2",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/humbug/file_get_contents.git",
-                "reference": "dcb086060c9dd6b2f51d8f7a895500307110b7a7"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/humbug/file_get_contents/zipball/dcb086060c9dd6b2f51d8f7a895500307110b7a7",
-                "reference": "dcb086060c9dd6b2f51d8f7a895500307110b7a7",
-                "shasum": ""
-            },
-            "require": {
-                "composer/ca-bundle": "^1.0",
-                "ext-openssl": "*",
-                "php": "^5.3 || ^7.0 || ^7.1 || ^7.2"
-            },
-            "require-dev": {
-                "bamarni/composer-bin-plugin": "^1.1",
-                "mikey179/vfsstream": "^1.6",
-                "phpunit/phpunit": "^4.8 || ^5.7 || ^6.5"
-            },
-            "type": "library",
-            "extra": {
-                "bamarni-bin": {
-                    "bin-links": false
-                },
-                "branch-alias": {
-                    "dev-master": "2.0-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Humbug\\": "src/"
-                },
-                "files": [
-                    "src/function.php",
-                    "src/functions.php"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Padraic Brady",
-                    "email": "padraic.brady@gmail.com",
-                    "homepage": "http://blog.astrumfutura.com"
-                },
-                {
-                    "name": "Théo Fidry",
-                    "email": "theo.fidry@gmail.com"
-                }
-            ],
-            "description": "Secure wrapper for accessing HTTPS resources with file_get_contents for PHP 5.3+",
-            "homepage": "https://github.com/padraic/file_get_contents",
-            "keywords": [
-                "download",
-                "file_get_contents",
-                "http",
-                "https",
-                "ssl",
-                "tls"
-            ],
-            "time": "2018-02-12T18:47:17+00:00"
-        },
-        {
-            "name": "padraic/phar-updater",
-            "version": "v1.0.6",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/humbug/phar-updater.git",
-                "reference": "d01d3b8f26e541ac9b9eeba1e18d005d852f7ff1"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/humbug/phar-updater/zipball/d01d3b8f26e541ac9b9eeba1e18d005d852f7ff1",
-                "reference": "d01d3b8f26e541ac9b9eeba1e18d005d852f7ff1",
-                "shasum": ""
-            },
-            "require": {
-                "padraic/humbug_get_contents": "^1.0",
-                "php": ">=5.3.3"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "~4.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.0-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Humbug\\SelfUpdate\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Pádraic Brady",
-                    "email": "padraic.brady@gmail.com",
-                    "homepage": "http://blog.astrumfutura.com"
-                }
-            ],
-            "description": "A thing to make PHAR self-updating easy and secure.",
-            "keywords": [
-                "humbug",
-                "phar",
-                "self-update",
-                "update"
-            ],
-            "time": "2018-03-30T12:52:15+00:00"
-        },
-        {
-            "name": "phpdocumentor/reflection-common",
-            "version": "1.0.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/phpDocumentor/ReflectionCommon.git",
-                "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6",
-                "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.5"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^4.6"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.0.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "phpDocumentor\\Reflection\\": [
-                        "src"
-                    ]
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Jaap van Otterdijk",
-                    "email": "opensource@ijaap.nl"
-                }
-            ],
-            "description": "Common reflection classes used by phpdocumentor to reflect the code structure",
-            "homepage": "http://www.phpdoc.org",
-            "keywords": [
-                "FQSEN",
-                "phpDocumentor",
-                "phpdoc",
-                "reflection",
-                "static analysis"
-            ],
-            "time": "2017-09-11T18:02:19+00:00"
-        },
-        {
-            "name": "phpdocumentor/reflection-docblock",
-            "version": "4.3.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
-                "reference": "94fd0001232e47129dd3504189fa1c7225010d08"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/94fd0001232e47129dd3504189fa1c7225010d08",
-                "reference": "94fd0001232e47129dd3504189fa1c7225010d08",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^7.0",
-                "phpdocumentor/reflection-common": "^1.0.0",
-                "phpdocumentor/type-resolver": "^0.4.0",
-                "webmozart/assert": "^1.0"
-            },
-            "require-dev": {
-                "doctrine/instantiator": "~1.0.5",
-                "mockery/mockery": "^1.0",
-                "phpunit/phpunit": "^6.4"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "4.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "phpDocumentor\\Reflection\\": [
-                        "src/"
-                    ]
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Mike van Riel",
-                    "email": "me@mikevanriel.com"
-                }
-            ],
-            "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
-            "time": "2017-11-30T07:14:17+00:00"
-        },
-        {
-            "name": "phpdocumentor/type-resolver",
-            "version": "0.4.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/phpDocumentor/TypeResolver.git",
-                "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7",
-                "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^5.5 || ^7.0",
-                "phpdocumentor/reflection-common": "^1.0"
-            },
-            "require-dev": {
-                "mockery/mockery": "^0.9.4",
-                "phpunit/phpunit": "^5.2||^4.8.24"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.0.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "phpDocumentor\\Reflection\\": [
-                        "src/"
-                    ]
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Mike van Riel",
-                    "email": "me@mikevanriel.com"
-                }
-            ],
-            "time": "2017-07-14T14:27:02+00:00"
-        },
-        {
-            "name": "phpseclib/phpseclib",
-            "version": "2.0.11",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/phpseclib/phpseclib.git",
-                "reference": "7053f06f91b3de78e143d430e55a8f7889efc08b"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/7053f06f91b3de78e143d430e55a8f7889efc08b",
-                "reference": "7053f06f91b3de78e143d430e55a8f7889efc08b",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.3"
-            },
-            "require-dev": {
-                "phing/phing": "~2.7",
-                "phpunit/phpunit": "^4.8.35|^5.7|^6.0",
-                "sami/sami": "~2.0",
-                "squizlabs/php_codesniffer": "~2.0"
-            },
-            "suggest": {
-                "ext-gmp": "Install the GMP (GNU Multiple Precision) extension in order to speed up arbitrary precision integer arithmetic operations.",
-                "ext-libsodium": "SSH2/SFTP can make use of some algorithms provided by the libsodium-php extension.",
-                "ext-mcrypt": "Install the Mcrypt extension in order to speed up a few other cryptographic operations.",
-                "ext-openssl": "Install the OpenSSL extension in order to speed up a wide variety of cryptographic operations."
-            },
-            "type": "library",
-            "autoload": {
-                "files": [
-                    "phpseclib/bootstrap.php"
-                ],
-                "psr-4": {
-                    "phpseclib\\": "phpseclib/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Jim Wigginton",
-                    "email": "terrafrost@php.net",
-                    "role": "Lead Developer"
-                },
-                {
-                    "name": "Patrick Monnerat",
-                    "email": "pm@datasphere.ch",
-                    "role": "Developer"
-                },
-                {
-                    "name": "Andreas Fischer",
-                    "email": "bantu@phpbb.com",
-                    "role": "Developer"
-                },
-                {
-                    "name": "Hans-Jürgen Petrich",
-                    "email": "petrich@tronic-media.com",
-                    "role": "Developer"
-                },
-                {
-                    "name": "Graham Campbell",
-                    "email": "graham@alt-three.com",
-                    "role": "Developer"
-                }
-            ],
-            "description": "PHP Secure Communications Library - Pure-PHP implementations of RSA, AES, SSH2, SFTP, X.509 etc.",
-            "homepage": "http://phpseclib.sourceforge.net",
-            "keywords": [
-                "BigInteger",
-                "aes",
-                "asn.1",
-                "asn1",
-                "blowfish",
-                "crypto",
-                "cryptography",
-                "encryption",
-                "rsa",
-                "security",
-                "sftp",
-                "signature",
-                "signing",
-                "ssh",
-                "twofish",
-                "x.509",
-                "x509"
-            ],
-            "time": "2018-04-15T16:55:05+00:00"
-        },
-        {
-            "name": "psr/log",
-            "version": "1.0.2",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/php-fig/log.git",
-                "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d",
-                "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.0"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.0.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Psr\\Log\\": "Psr/Log/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "PHP-FIG",
-                    "homepage": "http://www.php-fig.org/"
-                }
-            ],
-            "description": "Common interface for logging libraries",
-            "homepage": "https://github.com/php-fig/log",
-            "keywords": [
-                "log",
-                "psr",
-                "psr-3"
-            ],
-            "time": "2016-10-10T12:19:37+00:00"
-        },
-        {
-            "name": "roave/better-reflection",
-            "version": "2.0.2",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/Roave/BetterReflection.git",
-                "reference": "efc45b50cb52d5eeaacab15741376e981e28738b"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/Roave/BetterReflection/zipball/efc45b50cb52d5eeaacab15741376e981e28738b",
-                "reference": "efc45b50cb52d5eeaacab15741376e981e28738b",
-                "shasum": ""
-            },
-            "require": {
-                "nikic/php-parser": "^3.1.1",
-                "php": ">=7.1.0,<7.3.0",
-                "phpdocumentor/reflection-docblock": "^4.1.1",
-                "phpdocumentor/type-resolver": "^0.4.0",
-                "roave/signature": "^1.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^6.3.0"
-            },
-            "suggest": {
-                "composer/composer": "Required to use the ComposerSourceLocator"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Roave\\BetterReflection\\": "src"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Marco Pivetta",
-                    "email": "ocramius@gmail.com",
-                    "homepage": "http://ocramius.github.io/"
-                },
-                {
-                    "name": "James Titcumb",
-                    "email": "james@asgrim.com",
-                    "homepage": "https://github.com/asgrim"
-                },
-                {
-                    "name": "Gary Hockin",
-                    "email": "gary@roave.com",
-                    "homepage": "https://github.com/geeh"
-                },
-                {
-                    "name": "Jaroslav Hanslík",
-                    "email": "kukulich@kukulich.cz",
-                    "homepage": "https://github.com/kukulich"
-                }
-            ],
-            "description": "Better Reflection - an improved code reflection API",
-            "time": "2018-02-05T08:08:57+00:00"
-        },
-        {
-            "name": "roave/signature",
-            "version": "1.0.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/Roave/Signature.git",
-                "reference": "bed4ecbdd7f312ab6bb39561ac191f520bcee386"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/Roave/Signature/zipball/bed4ecbdd7f312ab6bb39561ac191f520bcee386",
-                "reference": "bed4ecbdd7f312ab6bb39561ac191f520bcee386",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^7.0|^7.1"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^5.6"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Roave\\Signature\\": "src"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "description": "Sign and verify stuff",
-            "time": "2017-02-17T13:53:21+00:00"
-        },
-        {
-            "name": "seld/cli-prompt",
-            "version": "1.0.3",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/Seldaek/cli-prompt.git",
-                "reference": "a19a7376a4689d4d94cab66ab4f3c816019ba8dd"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/Seldaek/cli-prompt/zipball/a19a7376a4689d4d94cab66ab4f3c816019ba8dd",
-                "reference": "a19a7376a4689d4d94cab66ab4f3c816019ba8dd",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Seld\\CliPrompt\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Jordi Boggiano",
-                    "email": "j.boggiano@seld.be"
-                }
-            ],
-            "description": "Allows you to prompt for user input on the command line, and optionally hide the characters they type",
-            "keywords": [
-                "cli",
-                "console",
-                "hidden",
-                "input",
-                "prompt"
-            ],
-            "time": "2017-03-18T11:32:45+00:00"
-        },
-        {
-            "name": "seld/jsonlint",
-            "version": "1.7.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/Seldaek/jsonlint.git",
-                "reference": "d15f59a67ff805a44c50ea0516d2341740f81a38"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/d15f59a67ff805a44c50ea0516d2341740f81a38",
-                "reference": "d15f59a67ff805a44c50ea0516d2341740f81a38",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^5.3 || ^7.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0"
-            },
-            "bin": [
-                "bin/jsonlint"
-            ],
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Seld\\JsonLint\\": "src/Seld/JsonLint/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Jordi Boggiano",
-                    "email": "j.boggiano@seld.be",
-                    "homepage": "http://seld.be"
-                }
-            ],
-            "description": "JSON Linter",
-            "keywords": [
-                "json",
-                "linter",
-                "parser",
-                "validator"
-            ],
-            "time": "2018-01-24T12:46:19+00:00"
-        },
-        {
-            "name": "seld/phar-utils",
-            "version": "1.0.1",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/Seldaek/phar-utils.git",
-                "reference": "7009b5139491975ef6486545a39f3e6dad5ac30a"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/Seldaek/phar-utils/zipball/7009b5139491975ef6486545a39f3e6dad5ac30a",
-                "reference": "7009b5139491975ef6486545a39f3e6dad5ac30a",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.x-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Seld\\PharUtils\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Jordi Boggiano",
-                    "email": "j.boggiano@seld.be"
-                }
-            ],
-            "description": "PHAR file format utilities, for when PHP phars you up",
-            "keywords": [
-                "phra"
-            ],
-            "time": "2015-10-13T18:44:15+00:00"
-        },
-        {
-            "name": "symfony/console",
-            "version": "v4.0.9",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/console.git",
-                "reference": "3e820bc2c520a87ca209ad8fa961c97f42e0b4ae"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/console/zipball/3e820bc2c520a87ca209ad8fa961c97f42e0b4ae",
-                "reference": "3e820bc2c520a87ca209ad8fa961c97f42e0b4ae",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^7.1.3",
-                "symfony/polyfill-mbstring": "~1.0"
-            },
-            "conflict": {
-                "symfony/dependency-injection": "<3.4",
-                "symfony/process": "<3.3"
-            },
-            "require-dev": {
-                "psr/log": "~1.0",
-                "symfony/config": "~3.4|~4.0",
-                "symfony/dependency-injection": "~3.4|~4.0",
-                "symfony/event-dispatcher": "~3.4|~4.0",
-                "symfony/lock": "~3.4|~4.0",
-                "symfony/process": "~3.4|~4.0"
-            },
-            "suggest": {
-                "psr/log-implementation": "For using the console logger",
-                "symfony/event-dispatcher": "",
-                "symfony/lock": "",
-                "symfony/process": ""
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "4.0-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\Console\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony Console Component",
-            "homepage": "https://symfony.com",
-            "time": "2018-04-30T01:23:47+00:00"
-        },
-        {
-            "name": "symfony/filesystem",
-            "version": "v4.0.9",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/filesystem.git",
-                "reference": "5d2d655b2c72fc4d9bf7e9bf14f72a447b940f21"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/filesystem/zipball/5d2d655b2c72fc4d9bf7e9bf14f72a447b940f21",
-                "reference": "5d2d655b2c72fc4d9bf7e9bf14f72a447b940f21",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^7.1.3"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "4.0-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\Filesystem\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony Filesystem Component",
-            "homepage": "https://symfony.com",
-            "time": "2018-02-22T10:50:29+00:00"
-        },
-        {
-            "name": "symfony/finder",
-            "version": "v4.0.9",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/finder.git",
-                "reference": "ca27c02b7a3fef4828c998c2ff9ba7aae1641c49"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/finder/zipball/ca27c02b7a3fef4828c998c2ff9ba7aae1641c49",
-                "reference": "ca27c02b7a3fef4828c998c2ff9ba7aae1641c49",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^7.1.3"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "4.0-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\Finder\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony Finder Component",
-            "homepage": "https://symfony.com",
-            "time": "2018-04-04T05:10:37+00:00"
-        },
-        {
-            "name": "symfony/polyfill-mbstring",
-            "version": "v1.8.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/polyfill-mbstring.git",
-                "reference": "3296adf6a6454a050679cde90f95350ad604b171"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/3296adf6a6454a050679cde90f95350ad604b171",
-                "reference": "3296adf6a6454a050679cde90f95350ad604b171",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.3"
-            },
-            "suggest": {
-                "ext-mbstring": "For best performance"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.8-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Polyfill\\Mbstring\\": ""
-                },
-                "files": [
-                    "bootstrap.php"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Nicolas Grekas",
-                    "email": "p@tchwork.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony polyfill for the Mbstring extension",
-            "homepage": "https://symfony.com",
-            "keywords": [
-                "compatibility",
-                "mbstring",
-                "polyfill",
-                "portable",
-                "shim"
-            ],
-            "time": "2018-04-26T10:06:28+00:00"
-        },
-        {
-            "name": "symfony/polyfill-php72",
-            "version": "v1.8.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/polyfill-php72.git",
-                "reference": "a4576e282d782ad82397f3e4ec1df8e0f0cafb46"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/a4576e282d782ad82397f3e4ec1df8e0f0cafb46",
-                "reference": "a4576e282d782ad82397f3e4ec1df8e0f0cafb46",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.3"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.8-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Polyfill\\Php72\\": ""
-                },
-                "files": [
-                    "bootstrap.php"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Nicolas Grekas",
-                    "email": "p@tchwork.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions",
-            "homepage": "https://symfony.com",
-            "keywords": [
-                "compatibility",
-                "polyfill",
-                "portable",
-                "shim"
-            ],
-            "time": "2018-04-26T10:06:28+00:00"
-        },
-        {
-            "name": "symfony/process",
-            "version": "v4.0.9",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/process.git",
-                "reference": "d7dc1ee5dfe9f732cb1bba7310f5b99f2b7a6d25"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/process/zipball/d7dc1ee5dfe9f732cb1bba7310f5b99f2b7a6d25",
-                "reference": "d7dc1ee5dfe9f732cb1bba7310f5b99f2b7a6d25",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^7.1.3"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "4.0-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\Process\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony Process Component",
-            "homepage": "https://symfony.com",
-            "time": "2018-04-03T05:24:00+00:00"
-        },
-        {
-            "name": "symfony/var-dumper",
-            "version": "v4.0.9",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/var-dumper.git",
-                "reference": "3c34cf3f4bbac9e003d9325225e9ef1a49180a18"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/var-dumper/zipball/3c34cf3f4bbac9e003d9325225e9ef1a49180a18",
-                "reference": "3c34cf3f4bbac9e003d9325225e9ef1a49180a18",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^7.1.3",
-                "symfony/polyfill-mbstring": "~1.0",
-                "symfony/polyfill-php72": "~1.5"
-            },
-            "conflict": {
-                "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0"
-            },
-            "require-dev": {
-                "ext-iconv": "*",
-                "twig/twig": "~1.34|~2.4"
-            },
-            "suggest": {
-                "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).",
-                "ext-intl": "To show region name in time zone dump"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "4.0-dev"
-                }
-            },
-            "autoload": {
-                "files": [
-                    "Resources/functions/dump.php"
-                ],
-                "psr-4": {
-                    "Symfony\\Component\\VarDumper\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Nicolas Grekas",
-                    "email": "p@tchwork.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony mechanism for exploring and dumping PHP variables",
-            "homepage": "https://symfony.com",
-            "keywords": [
-                "debug",
-                "dump"
-            ],
-            "time": "2018-04-26T16:12:06+00:00"
-        },
-        {
-            "name": "webmozart/assert",
-            "version": "1.3.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/webmozart/assert.git",
-                "reference": "0df1908962e7a3071564e857d86874dad1ef204a"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/webmozart/assert/zipball/0df1908962e7a3071564e857d86874dad1ef204a",
-                "reference": "0df1908962e7a3071564e857d86874dad1ef204a",
-                "shasum": ""
-            },
-            "require": {
-                "php": "^5.3.3 || ^7.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^4.6",
-                "sebastian/version": "^1.0.1"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "1.3-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Webmozart\\Assert\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Bernhard Schussek",
-                    "email": "bschussek@gmail.com"
-                }
-            ],
-            "description": "Assertions to validate method input/output with nice error messages.",
-            "keywords": [
-                "assert",
-                "check",
-                "validate"
-            ],
-            "time": "2018-01-29T19:49:41+00:00"
-        },
-        {
-            "name": "webmozart/path-util",
-            "version": "2.3.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/webmozart/path-util.git",
-                "reference": "d939f7edc24c9a1bb9c0dee5cb05d8e859490725"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/webmozart/path-util/zipball/d939f7edc24c9a1bb9c0dee5cb05d8e859490725",
-                "reference": "d939f7edc24c9a1bb9c0dee5cb05d8e859490725",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.3",
-                "webmozart/assert": "~1.0"
-            },
-            "require-dev": {
-                "phpunit/phpunit": "^4.6",
-                "sebastian/version": "^1.0.1"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.3-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Webmozart\\PathUtil\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Bernhard Schussek",
-                    "email": "bschussek@gmail.com"
-                }
-            ],
-            "description": "A robust cross-platform utility for normalizing, comparing and modifying file paths.",
-            "time": "2015-12-17T08:42:14+00:00"
-        }
-    ],
-    "packages-dev": [],
-    "aliases": [],
-    "minimum-stability": "dev",
-    "stability-flags": {
-        "humbug/box": 15
-    },
-    "prefer-stable": true,
-    "prefer-lowest": false,
-    "platform": [],
-    "platform-dev": []
-}
diff --git a/vendor/rvtraveller/qs-composer-installer/README.md b/vendor/rvtraveller/qs-composer-installer/README.md
deleted file mode 100644
index 05a64b0693777412b541c0a99682e9851cdfad18..0000000000000000000000000000000000000000
--- a/vendor/rvtraveller/qs-composer-installer/README.md
+++ /dev/null
@@ -1,22 +0,0 @@
-# Quicksilver Composer Installer #
-
-Creates a new "type" in Composer for `quicksilver-script`s so you can treat them separately in Composer installations.  This allows you to include Quicksilver scripts as part of a composer based project on Pantheon[https://pantheon.io].
-
-To use this custom installer, require it in your project (root-level) composer.json file. Then, any Composer project of type `quicksiver-script` will be placed in the directory `web/private/scripts/quicksilver`. This path may be customized in the `installer-paths` item in `extras`.
-
-The `web/private/scripts/quicksilver` path (or your customized path) should be added to your project's .gitignore.
-
-## Example composer.json file ##
-
-```
-{
-  "require": {
-    "rvtraveller/qs-composer-installer": "1.0"
-  },
-  "extra": {
-    "installer-paths": {
-      "web/private/scripts/quicksilver/{$name}": ["type:quicksilver-script"]
-    }
-  }
-}
-```
diff --git a/vendor/rvtraveller/qs-composer-installer/composer.json b/vendor/rvtraveller/qs-composer-installer/composer.json
deleted file mode 100644
index 2ff33116fa3c0bb9cbdcf895b7a44eb63e2bf3ac..0000000000000000000000000000000000000000
--- a/vendor/rvtraveller/qs-composer-installer/composer.json
+++ /dev/null
@@ -1,22 +0,0 @@
-{
-  "name": "rvtraveller/qs-composer-installer",
-  "description": "Install Quicksilver modules for Pantheon into custom locations.",
-  "type": "composer-plugin",
-  "license": "MIT",
-  "homepage": "https://github.com/rvtraveller/qs-composer-installer",
-  "autoload": {
-    "psr-4": {
-      "rvtraveller\\QuicksilverComposerInstaller\\": "src"
-    }
-  },
-  "extra": {
-    "class": "rvtraveller\\QuicksilverComposerInstaller\\QuicksilverComposerInstallerPlugin"
-  },
-  "require": {
-    "composer-plugin-api": "~1.0",
-    "composer/installers": "~1.0"
-  },
-  "require-dev": {
-    "composer/composer": "~1.0@dev"
-  }
-}
diff --git a/vendor/rvtraveller/qs-composer-installer/src/QuicksilverComposerInstaller.php b/vendor/rvtraveller/qs-composer-installer/src/QuicksilverComposerInstaller.php
deleted file mode 100644
index 91dd99d36133646b16618513cf6d88eedd66802c..0000000000000000000000000000000000000000
--- a/vendor/rvtraveller/qs-composer-installer/src/QuicksilverComposerInstaller.php
+++ /dev/null
@@ -1,111 +0,0 @@
-<?php
-
-namespace rvtraveller\QuicksilverComposerInstaller;
-
-use Composer\Package\PackageInterface;
-use Composer\Installer\LibraryInstaller;
-
-class QuicksilverComposerInstaller extends LibraryInstaller
-{
-
-
-  /**
-   * Replace vars in a path
-   *
-   * @param  string $path
-   * @param  array  $vars
-   * @return string
-   */
-  protected function templatePath($path, array $vars = array())
-  {
-    if (strpos($path, '{') !== false) {
-      extract($vars);
-      preg_match_all('@\{\$([A-Za-z0-9_]*)\}@i', $path, $matches);
-      if (!empty($matches[1])) {
-        foreach ($matches[1] as $var) {
-          $path = str_replace('{$' . $var . '}', $$var, $path);
-        }
-      }
-    }
-
-    return $path;
-  }
-
-  /**
-   * Search through a passed paths array for a custom install path.
-   *
-   * @param  array  $paths
-   * @param  string $name
-   * @param  string $type
-   * @param  string $vendor = NULL
-   * @return string
-   */
-  protected function mapCustomInstallPaths(array $paths, $name, $type, $vendor = NULL)
-  {
-    foreach ($paths as $path => $names) {
-      if (in_array($name, $names) || in_array('type:' . $type, $names) || in_array('vendor:' . $vendor, $names)) {
-        return $path;
-      }
-    }
-
-    return false;
-  }
-
-  /**
-   * Return the install path based on package type.
-   *
-   * @param  PackageInterface $package
-   * @param  string           $frameworkType
-   * @return string
-   */
-  public function getInstallPath(PackageInterface $package, $frameworkType = '')
-  {
-    $packageType = $package->getType();
-
-    $prettyName = $package->getPrettyName();
-    if (strpos($prettyName, '/') !== false) {
-      list($vendor, $name) = explode('/', $prettyName);
-    } else {
-      $vendor = '';
-      $name = $prettyName;
-    }
-
-    $availableVars = [
-      'name' => $name,
-      'vendor' => $vendor,
-      'type' => $packageType
-    ];
-
-    $extra = $package->getExtra();
-    if (!empty($extra['installer-name'])) {
-      $availableVars['name'] = $extra['installer-name'];
-    }
-
-    if ($this->composer->getPackage()) {
-      $extra = $this->composer->getPackage()->getExtra();
-      if (!empty($extra['installer-paths'])) {
-        $customPath = $this->mapCustomInstallPaths($extra['installer-paths'], $prettyName, $packageType, $vendor);
-        if ($customPath !== false) {
-          return $this->templatePath($customPath, $availableVars);
-        }
-      }
-    }
-
-    $locations = [
-      'quicksilver-script' => 'web/private/scripts/quicksilver/{$name}/',
-      'quicksilver-module' => 'web/private/scripts/quicksilver/{$name}/',
-    ];
-
-    return $this->templatePath($locations[$packageType], $availableVars);
-  }
-
-
-  /**
-   * {@inheritDoc}
-   */
-  public function supports($packageType)
-  {
-    return in_array($packageType, ['quicksilver-script', 'quicksilver-module']);
-  }
-
-}
diff --git a/vendor/rvtraveller/qs-composer-installer/src/QuicksilverComposerInstallerPlugin.php b/vendor/rvtraveller/qs-composer-installer/src/QuicksilverComposerInstallerPlugin.php
deleted file mode 100644
index 0e8e27effb8698cd4fd582913acd4886be304b9d..0000000000000000000000000000000000000000
--- a/vendor/rvtraveller/qs-composer-installer/src/QuicksilverComposerInstallerPlugin.php
+++ /dev/null
@@ -1,20 +0,0 @@
-<?php
-
-namespace rvtraveller\QuicksilverComposerInstaller;
-
-use Composer\Composer;
-use Composer\IO\IOInterface;
-use Composer\Plugin\PluginInterface;
-
-class QuicksilverComposerInstallerPlugin implements PluginInterface
-{
-  public function activate(Composer $composer, IOInterface $io)
-  {
-    // Strange autoloading problem on CircleCI
-    if (!class_exists(QuickSilverComposerInstaller::class)) {
-      include_once __DIR__ . '/QuicksilverComposerInstaller.php';
-    }
-    $installer = new QuickSilverComposerInstaller($io, $composer);
-    $composer->getInstallationManager()->addInstaller($installer);
-  }
-}
diff --git a/vendor/stecman/symfony-console-completion/.travis.yml b/vendor/stecman/symfony-console-completion/.travis.yml
index 9e6e228079e5648bb063d4db31faa18b35adecaa..77ad26c2d3a82929d8f749b532fbba8be10bb828 100644
--- a/vendor/stecman/symfony-console-completion/.travis.yml
+++ b/vendor/stecman/symfony-console-completion/.travis.yml
@@ -11,10 +11,12 @@ matrix:
     - php: 7.2
     - php: nightly
     - php: hhvm
+    - php: hhvm-3.3
       env: COMPOSER_OPTS="--prefer-lowest"
 
   allow_failures:
     - php: nightly
+    - php: hhvm
 
 before_install:
   - sudo apt-get update -qq
diff --git a/vendor/stecman/symfony-console-completion/README.md b/vendor/stecman/symfony-console-completion/README.md
index 642af265abfe6f55d37bc206ecf55a9e37feb2ee..15ce85b4a325c78232eb06f6ebf276ceabcd5d5b 100644
--- a/vendor/stecman/symfony-console-completion/README.md
+++ b/vendor/stecman/symfony-console-completion/README.md
@@ -59,7 +59,7 @@ If you don't need any custom completion behaviour, you can simply add the comple
    eval $([program] _completion --generate-hook)
    ```
 
-   By default this registers completion for the absolute path to you application, which will work if the program on accessible on your PATH. You can specify a program name to complete for instead using the `--program` option, which is required if you're using an alias to run the program.
+   By default this registers completion for the absolute path to you application, which will work if the program is accessible on your PATH. You can specify a program name to complete for instead using the `--program` option, which is required if you're using an alias to run the program.
 
 4. If you want the completion to apply automatically for all new shell sessions, add the command from step 3 to your shell's profile (eg. `~/.bash_profile` or `~/.zshrc`)
 
@@ -206,7 +206,7 @@ To have a completion run for both options and arguments matching the specified n
 $handler->addHandler(
     new Completion(
         Completion::ALL_COMMANDS,
-        'pacakge',
+        'package',
         Completion::ALL_TYPES,
         function() {
             // ...
diff --git a/vendor/stecman/symfony-console-completion/composer.json b/vendor/stecman/symfony-console-completion/composer.json
index 196fb37e9d1388fc0ed0ed821ecdd1248da8a64c..9d0aa2f5fa896a71288b8b66d64d1043617c013d 100644
--- a/vendor/stecman/symfony-console-completion/composer.json
+++ b/vendor/stecman/symfony-console-completion/composer.json
@@ -10,7 +10,7 @@
     ],
     "require": {
         "php": ">=5.3.2",
-        "symfony/console": "~2.3 || ~3.0 || ~4.0"
+        "symfony/console": "~2.3 || ~3.0 || ~4.0 || ~5.0"
     },
     "require-dev": {
         "phpunit/phpunit": "~4.8.36 || ~5.7 || ~6.4"
@@ -22,7 +22,7 @@
     },
     "extra": {
         "branch-alias": {
-            "dev-master": "0.6.x-dev"
+            "dev-master": "0.10.x-dev"
         }
     }
 }
diff --git a/vendor/stecman/symfony-console-completion/src/CompletionCommand.php b/vendor/stecman/symfony-console-completion/src/CompletionCommand.php
index 0a4a8090e732c6cb581bc6f49f766d7bf2513e34..f694c41bdac25415f9cd974d41d8519bdcb3bfb1 100644
--- a/vendor/stecman/symfony-console-completion/src/CompletionCommand.php
+++ b/vendor/stecman/symfony-console-completion/src/CompletionCommand.php
@@ -10,7 +10,6 @@
 
 class CompletionCommand extends SymfonyCommand
 {
-
     /**
      * @var CompletionHandler
      */
@@ -49,6 +48,52 @@ public function getNativeDefinition()
         return $this->createDefinition();
     }
 
+    /**
+     * Ignore user-defined global options
+     *
+     * Any global options defined by user-code are meaningless to this command.
+     * Options outside of the core defaults are ignored to avoid name and shortcut conflicts.
+     */
+    public function mergeApplicationDefinition($mergeArgs = true)
+    {
+        // Get current application options
+        $appDefinition = $this->getApplication()->getDefinition();
+        $originalOptions = $appDefinition->getOptions();
+
+        // Temporarily replace application options with a filtered list
+        $appDefinition->setOptions(
+            $this->filterApplicationOptions($originalOptions)
+        );
+
+        parent::mergeApplicationDefinition($mergeArgs);
+
+        // Restore original application options
+        $appDefinition->setOptions($originalOptions);
+    }
+
+    /**
+     * Reduce the passed list of options to the core defaults (if they exist)
+     *
+     * @param InputOption[] $appOptions
+     * @return InputOption[]
+     */
+    protected function filterApplicationOptions(array $appOptions)
+    {
+        return array_filter($appOptions, function(InputOption $option) {
+            static $coreOptions = array(
+                'help' => true,
+                'quiet' => true,
+                'verbose' => true,
+                'version' => true,
+                'ansi' => true,
+                'no-ansi' => true,
+                'no-interaction' => true,
+            );
+
+            return isset($coreOptions[$option->getName()]);
+        });
+    }
+
     protected function execute(InputInterface $input, OutputInterface $output)
     {
         $this->handler = new CompletionHandler($this->getApplication());
@@ -76,7 +121,56 @@ protected function execute(InputInterface $input, OutputInterface $output)
             $output->write($hook, true);
         } else {
             $handler->setContext(new EnvironmentCompletionContext());
-            $output->write($this->runCompletion(), true);
+
+            // Get completion results
+            $results = $this->runCompletion();
+
+            // Escape results for the current shell
+            $shellType = $input->getOption('shell-type') ?: $this->getShellType();
+
+            foreach ($results as &$result) {
+                $result = $this->escapeForShell($result, $shellType);
+            }
+
+            $output->write($results, true);
+        }
+
+        return 0;
+    }
+
+    /**
+     * Escape each completion result for the specified shell
+     *
+     * @param string $result - Completion results that should appear in the shell
+     * @param string $shellType - Valid shell type from HookFactory
+     * @return string
+     */
+    protected function escapeForShell($result, $shellType)
+    {
+        switch ($shellType) {
+            // BASH requires special escaping for multi-word and special character results
+            // This emulates registering completion with`-o filenames`, without side-effects like dir name slashes
+            case 'bash':
+                $context = $this->handler->getContext();
+                $wordStart = substr($context->getRawCurrentWord(), 0, 1);
+
+                if ($wordStart == "'") {
+                    // If the current word is single-quoted, escape any single quotes in the result
+                    $result = str_replace("'", "\\'", $result);
+                } else if ($wordStart == '"') {
+                    // If the current word is double-quoted, escape any double quotes in the result
+                    $result = str_replace('"', '\\"', $result);
+                } else {
+                    // Otherwise assume the string is unquoted and word breaks should be escaped
+                    $result = preg_replace('/([\s\'"\\\\])/', '\\\\$1', $result);
+                }
+
+                // Escape output to prevent special characters being lost when passing results to compgen
+                return escapeshellarg($result);
+
+            // No transformation by default
+            default:
+                return $result;
         }
     }
 
diff --git a/vendor/stecman/symfony-console-completion/src/CompletionContext.php b/vendor/stecman/symfony-console-completion/src/CompletionContext.php
index 602925343e9415e1e49724b29ed9c07c4e452d37..f09ab9b42bd8c6934a130d09346fafd68a3d63f9 100644
--- a/vendor/stecman/symfony-console-completion/src/CompletionContext.php
+++ b/vendor/stecman/symfony-console-completion/src/CompletionContext.php
@@ -32,17 +32,27 @@ class CompletionContext
     protected $charIndex = 0;
 
     /**
-     * An array containing the individual words in the current command line.
+     * An array of the individual words in the current command line.
      *
      * This is not set until $this->splitCommand() is called, when it is populated by
      * $commandLine exploded by $wordBreaks
      *
      * Bash equivalent: COMP_WORDS
      *
-     * @var array|null
+     * @var string[]|null
      */
     protected $words = null;
 
+    /**
+     * Words from the currently command-line before quotes and escaping is processed
+     *
+     * This is indexed the same as $this->words, but in their raw input terms are in their input form, including
+     * quotes and escaping.
+     *
+     * @var string[]|null
+     */
+    protected $rawWords = null;
+
     /**
      * The index in $this->words containing the word at the current cursor position.
      *
@@ -61,7 +71,7 @@ class CompletionContext
      *
      * @var string
      */
-    protected $wordBreaks = "'\"()= \t\n";
+    protected $wordBreaks = "= \t\n";
 
     /**
      * Set the whole contents of the command line as a string
@@ -101,6 +111,22 @@ public function getCurrentWord()
         return '';
     }
 
+    /**
+     * Return the unprocessed string for the word under the cursor
+     *
+     * This preserves any quotes and escaping that are present in the input command line.
+     *
+     * @return string
+     */
+    public function getRawCurrentWord()
+    {
+        if (isset($this->rawWords[$this->wordIndex])) {
+            return $this->rawWords[$this->wordIndex];
+        }
+
+        return '';
+    }
+
     /**
      * Return a word by index from the command line
      *
@@ -132,6 +158,22 @@ public function getWords()
         return $this->words;
     }
 
+    /**
+     * Get the unprocessed/literal words from the command line
+     *
+     * This is indexed the same as getWords(), but preserves any quoting and escaping from the command line
+     *
+     * @return string[]
+     */
+    public function getRawWords()
+    {
+        if ($this->rawWords === null) {
+            $this->splitCommand();
+        }
+
+        return $this->rawWords;
+    }
+
     /**
      * Get the index of the word the cursor is currently in
      *
@@ -178,12 +220,15 @@ public function setCharIndex($index)
      * This defaults to a sane value based on BASH's word break characters and shouldn't
      * need to be changed unless your completions contain the default word break characters.
      *
+     * @deprecated This is becoming an internal setting that doesn't make sense to expose publicly.
+     *
      * @see wordBreaks
      * @param string $charList - a single string containing all of the characters to break words on
      */
     public function setWordBreaks($charList)
     {
-        $this->wordBreaks = $charList;
+        // Drop quotes from break characters - strings are handled separately to word breaks now
+        $this->wordBreaks = str_replace(array('"', '\''), '', $charList);;
         $this->reset();
     }
 
@@ -194,57 +239,146 @@ public function setWordBreaks($charList)
      */
     protected function splitCommand()
     {
-        $this->words = array();
-        $this->wordIndex = null;
-        $cursor = 0;
+        $tokens = $this->tokenizeString($this->commandLine);
 
-        $breaks = preg_quote($this->wordBreaks);
-
-        if (!preg_match_all("/([^$breaks]*)([$breaks]*)/", $this->commandLine, $matches)) {
-            return;
-        }
-
-        // Groups:
-        // 1: Word
-        // 2: Break characters
-        foreach ($matches[0] as $index => $wholeMatch) {
-            // Determine which word the cursor is in
-            $cursor += strlen($wholeMatch);
-            $word = $matches[1][$index];
-            $breaks = $matches[2][$index];
-
-            if ($this->wordIndex === null && $cursor >= $this->charIndex) {
-                $this->wordIndex = $index;
-
-                // Find the user's cursor position relative to the end of this word
-                // The end of the word is the internal cursor minus any break characters that were captured
-                $cursorWordOffset = $this->charIndex - ($cursor - strlen($breaks));
+        foreach ($tokens as $token) {
+            if ($token['type'] != 'break') {
+                $this->words[] = $this->getTokenValue($token);
+                $this->rawWords[] = $token['value'];
+            }
 
-                if ($cursorWordOffset < 0) {
-                    // Cursor is inside the word - truncate the word at the cursor
-                    // (This emulates normal BASH completion behaviour I've observed, though I'm not entirely sure if it's useful)
-                    $word = substr($word, 0, strlen($word) + $cursorWordOffset);
+            // Determine which word index the cursor is inside once we reach it's offset
+            if ($this->wordIndex === null && $this->charIndex <= $token['offsetEnd']) {
+                $this->wordIndex = count($this->words) - 1;
 
-                } elseif ($cursorWordOffset > 0) {
+                if ($token['type'] == 'break') {
                     // Cursor is in the break-space after a word
                     // Push an empty word at the cursor to allow completion of new terms at the cursor, ignoring words ahead
                     $this->wordIndex++;
-                    $this->words[] = $word;
                     $this->words[] = '';
+                    $this->rawWords[] = '';
                     continue;
                 }
-            }
 
-            if ($word !== '') {
-                $this->words[] = $word;
+                if ($this->charIndex < $token['offsetEnd']) {
+                    // Cursor is inside the current word - truncate the word at the cursor to complete on
+                    // This emulates BASH completion's behaviour with COMP_CWORD
+
+                    // Create a copy of the token with its value truncated
+                    $truncatedToken = $token;
+                    $relativeOffset = $this->charIndex - $token['offset'];
+                    $truncatedToken['value'] = substr($token['value'], 0, $relativeOffset);
+
+                    // Replace the current word with the truncated value
+                    $this->words[$this->wordIndex] = $this->getTokenValue($truncatedToken);
+                    $this->rawWords[$this->wordIndex] = $truncatedToken['value'];
+                }
             }
         }
 
-        if ($this->wordIndex > count($this->words) - 1) {
-            $this->wordIndex = count($this->words) - 1;
+        // Cursor position is past the end of the command line string - consider it a new word
+        if ($this->wordIndex === null) {
+            $this->wordIndex = count($this->words);
+            $this->words[] = '';
+            $this->rawWords[] = '';
         }
     }
 
+    /**
+     * Return a token's value with escaping and quotes removed
+     *
+     * @see self::tokenizeString()
+     * @param array $token
+     * @return string
+     */
+    protected function getTokenValue($token)
+    {
+        $value = $token['value'];
+
+        // Remove outer quote characters (or first quote if unclosed)
+        if ($token['type'] == 'quoted') {
+            $value = preg_replace('/^(?:[\'"])(.*?)(?:[\'"])?$/', '$1', $value);
+        }
+
+        // Remove escape characters
+        $value = preg_replace('/\\\\(.)/', '$1', $value);
+
+        return $value;
+    }
+
+    /**
+     * Break a string into words, quoted strings and non-words (breaks)
+     *
+     * Returns an array of unmodified segments of $string with offset and type information.
+     *
+     * @param string $string
+     * @return array as [ [type => string, value => string, offset => int], ... ]
+     */
+    protected function tokenizeString($string)
+    {
+        // Map capture groups to returned token type
+        $typeMap = array(
+            'double_quote_string' => 'quoted',
+            'single_quote_string' => 'quoted',
+            'word' => 'word',
+            'break' => 'break',
+        );
+
+        // Escape every word break character including whitespace
+        // preg_quote won't work here as it doesn't understand the ignore whitespace flag ("x")
+        $breaks = preg_replace('/(.)/', '\\\$1', $this->wordBreaks);
+
+        $pattern = <<<"REGEX"
+            /(?:
+                (?P<double_quote_string>
+                    "(\\\\.|[^\"\\\\])*(?:"|$)
+                ) |
+                (?P<single_quote_string>
+                    '(\\\\.|[^'\\\\])*(?:'|$)
+                ) |
+                (?P<word>
+                    (?:\\\\.|[^$breaks])+
+                ) |
+                (?P<break>
+                     [$breaks]+
+                )
+            )/x
+REGEX;
+
+        $tokens = array();
+
+        if (!preg_match_all($pattern, $string, $matches, PREG_OFFSET_CAPTURE | PREG_SET_ORDER)) {
+            return $tokens;
+        }
+
+        foreach ($matches as $set) {
+            foreach ($set as $groupName => $match) {
+
+                // Ignore integer indices preg_match outputs (duplicates of named groups)
+                if (is_integer($groupName)) {
+                    continue;
+                }
+
+                // Skip if the offset indicates this group didn't match
+                if ($match[1] === -1) {
+                    continue;
+                }
+
+                $tokens[] = array(
+                    'type' => $typeMap[$groupName],
+                    'value' => $match[0],
+                    'offset' => $match[1],
+                    'offsetEnd' => $match[1] + strlen($match[0])
+                );
+
+                // Move to the next set (only one group should match per set)
+                continue;
+            }
+        }
+
+        return $tokens;
+    }
+
     /**
      * Reset the computed words so that $this->splitWords is forced to run again
      */
diff --git a/vendor/stecman/symfony-console-completion/src/CompletionHandler.php b/vendor/stecman/symfony-console-completion/src/CompletionHandler.php
index 905ea5a0816d141d88578dd59e7cba8c4f56e28d..abd0b0bf5e8716640bf36db7decd19c97ff7846a 100644
--- a/vendor/stecman/symfony-console-completion/src/CompletionHandler.php
+++ b/vendor/stecman/symfony-console-completion/src/CompletionHandler.php
@@ -34,6 +34,12 @@ class CompletionHandler
      */
     protected $helpers = array();
 
+    /**
+     * Index the command name was detected at
+     * @var int
+     */
+    private $commandWordIndex;
+
     public function __construct(Application $application, CompletionContext $context = null)
     {
         $this->application = $application;
@@ -100,13 +106,8 @@ public function runCompletion()
             throw new \RuntimeException('A CompletionContext must be set before requesting completion.');
         }
 
-        $cmdName = $this->getInput()->getFirstArgument();
-
-        try {
-            $this->command = $this->application->find($cmdName);
-        } catch (\InvalidArgumentException $e) {
-            // Exception thrown, when multiple or none commands are found.
-        }
+        // Set the command to query options and arugments from
+        $this->command = $this->detectCommand();
 
         $process = array(
             'completeForOptionValues',
@@ -132,6 +133,9 @@ public function runCompletion()
     /**
      * Get an InputInterface representation of the completion context
      *
+     * @deprecated Incorrectly uses the ArrayInput API and is no longer needed.
+     *             This will be removed in the next major version.
+     *
      * @return ArrayInput
      */
     public function getInput()
@@ -256,7 +260,7 @@ protected function completeForOptionValues()
      */
     protected function completeForCommandName()
     {
-        if (!$this->command || (count($this->context->getWords()) == 2 && $this->context->getWordIndex() == 1)) {
+        if (!$this->command || $this->context->getWordIndex() == $this->commandWordIndex) {
             return $this->getCommandNames();
         }
 
@@ -362,7 +366,8 @@ protected function mapArgumentsToWords($argumentDefinitions)
 
         foreach ($this->context->getWords() as $wordIndex => $word) {
             // Skip program name, command name, options, and option values
-            if ($wordIndex < 2
+            if ($wordIndex == 0
+                || $wordIndex === $this->commandWordIndex
                 || ($word && '-' === $word[0])
                 || in_array($previousWord, $optionsWithArgs)) {
                 $previousWord = $word;
@@ -469,4 +474,44 @@ protected function getCommandNames()
             return array_keys($commands);
         }
     }
+
+    /**
+     * Find the current command name in the command-line
+     *
+     * Note this only cares about flag-type options. Options with values cannot
+     * appear before a command name in Symfony Console application.
+     *
+     * @return Command|null
+     */
+    private function detectCommand()
+    {
+        // Always skip the first word (program name)
+        $skipNext = true;
+
+        foreach ($this->context->getWords() as $index => $word) {
+
+            // Skip word if flagged
+            if ($skipNext) {
+                $skipNext = false;
+                continue;
+            }
+
+            // Skip empty words and words that look like options
+            if (strlen($word) == 0 || $word[0] === '-') {
+                continue;
+            }
+
+            // Return the first unambiguous match to argument-like words
+            try {
+                $cmd = $this->application->find($word);
+                $this->commandWordIndex = $index;
+                return $cmd;
+            } catch (\InvalidArgumentException $e) {
+                // Exception thrown, when multiple or no commands are found.
+            }
+        }
+
+        // No command found
+        return null;
+    }
 }
diff --git a/vendor/stecman/symfony-console-completion/src/HookFactory.php b/vendor/stecman/symfony-console-completion/src/HookFactory.php
index 19601e8b38806b1b78f42e474edfc276d6f68dd4..d86f9b2ad663355b1ead5549f82357ad3971c0bd 100644
--- a/vendor/stecman/symfony-console-completion/src/HookFactory.php
+++ b/vendor/stecman/symfony-console-completion/src/HookFactory.php
@@ -33,14 +33,17 @@ function %%function_name%% {
 
     # Copy BASH's completion variables to the ones the completion command expects
     # These line up exactly as the library was originally designed for BASH
-    local CMDLINE_CONTENTS="$COMP_LINE"
-    local CMDLINE_CURSOR_INDEX="$COMP_POINT"
+    local CMDLINE_CONTENTS="$COMP_LINE";
+    local CMDLINE_CURSOR_INDEX="$COMP_POINT";
     local CMDLINE_WORDBREAKS="$COMP_WORDBREAKS";
 
-    export CMDLINE_CONTENTS CMDLINE_CURSOR_INDEX CMDLINE_WORDBREAKS
+    export CMDLINE_CONTENTS CMDLINE_CURSOR_INDEX CMDLINE_WORDBREAKS;
 
     local RESULT STATUS;
 
+    # Force splitting by newline instead of default delimiters
+    local IFS=$'\n';
+
     RESULT="$(%%completion_command%% </dev/null)";
     STATUS=$?;
 
@@ -54,7 +57,8 @@ function %%function_name%% {
     # Check if shell provided path completion is requested
     # @see Completion\ShellPathCompletion
     if [ $STATUS -eq 200 ]; then
-        _filedir;
+        # Turn file/dir completion on temporarily and give control back to BASH
+        compopt -o default;
         return 0;
 
     # Bail out if PHP didn't exit cleanly
@@ -75,19 +79,19 @@ function %%function_name%% {
 else
     >&2 echo "Completion was not registered for %%program_name%%:";
     >&2 echo "The 'bash-completion' package is required but doesn't appear to be installed.";
-fi
+fi;
 END
 
         // ZSH Hook
         , 'zsh' => <<<'END'
 # ZSH completion for %%program_path%%
 function %%function_name%% {
-    local -x CMDLINE_CONTENTS="$words"
-    local -x CMDLINE_CURSOR_INDEX
-    (( CMDLINE_CURSOR_INDEX = ${#${(j. .)words[1,CURRENT]}} ))
+    local -x CMDLINE_CONTENTS="$words";
+    local -x CMDLINE_CURSOR_INDEX;
+    (( CMDLINE_CURSOR_INDEX = ${#${(j. .)words[1,CURRENT]}} ));
 
-    local RESULT STATUS
-    RESULT=("${(@f)$( %%completion_command%% )}")
+    local RESULT STATUS;
+    RESULT=("${(@f)$( %%completion_command%% )}");
     STATUS=$?;
 
     # Check if shell provided path completion is requested
@@ -102,7 +106,7 @@ function %%function_name%% {
         return $?;
     fi;
 
-    compadd -- $RESULT
+    compadd -- $RESULT;
 };
 
 compdef %%function_name%% "%%program_name%%";
@@ -148,6 +152,9 @@ public function generateHook($type, $programPath, $programName = null, $multiple
             $completionCommand = $programPath . ' _completion';
         }
 
+        // Pass shell type during completion so output can be encoded if the shell requires it
+        $completionCommand .= " --shell-type $type";
+
         return str_replace(
             array(
                 '%%function_name%%',
diff --git a/vendor/stecman/symfony-console-completion/tests/Stecman/Component/Symfony/Console/BashCompletion/CompletionCommandTest.php b/vendor/stecman/symfony-console-completion/tests/Stecman/Component/Symfony/Console/BashCompletion/CompletionCommandTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..78b634d8fdbd89027870a177efd4c5ea6344ab0b
--- /dev/null
+++ b/vendor/stecman/symfony-console-completion/tests/Stecman/Component/Symfony/Console/BashCompletion/CompletionCommandTest.php
@@ -0,0 +1,41 @@
+<?php
+
+namespace Stecman\Component\Symfony\Console\BashCompletion\Tests;
+
+use PHPUnit\Framework\TestCase;
+use Stecman\Component\Symfony\Console\BashCompletion\CompletionCommand;
+use Symfony\Component\Console\Application;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Input\StringInput;
+use Symfony\Component\Console\Output\NullOutput;
+
+class CompletionCommandTest extends TestCase
+{
+    /**
+     * Ensure conflicting options names and shortcuts from the application do not break the completion command
+     */
+    public function testConflictingGlobalOptions()
+    {
+        $app = new Application('Base application');
+
+        // Conflicting option shortcut
+        $app->getDefinition()->addOption(
+            new InputOption('conflicting-shortcut', 'g', InputOption::VALUE_NONE)
+        );
+
+        // Conflicting option name
+        $app->getDefinition()->addOption(
+            new InputOption('program', null, InputOption::VALUE_REQUIRED)
+        );
+
+        $app->add(new CompletionCommand());
+
+        // Check completion command doesn't throw
+        $app->doRun(new StringInput('_completion -g --program foo'), new NullOutput());
+        $app->doRun(new StringInput('_completion --help'), new NullOutput());
+        $app->doRun(new StringInput('help _completion'), new NullOutput());
+
+        // Check default options are available
+        $app->doRun(new StringInput('_completion -V -vv --no-ansi --quiet'), new NullOutput());
+    }
+}
diff --git a/vendor/stecman/symfony-console-completion/tests/Stecman/Component/Symfony/Console/BashCompletion/CompletionContextTest.php b/vendor/stecman/symfony-console-completion/tests/Stecman/Component/Symfony/Console/BashCompletion/CompletionContextTest.php
index 9374d133a43872e3027b92a3192bda55182f3d91..30c0667e5f17c881726cf034eba6f1645a56636c 100644
--- a/vendor/stecman/symfony-console-completion/tests/Stecman/Component/Symfony/Console/BashCompletion/CompletionContextTest.php
+++ b/vendor/stecman/symfony-console-completion/tests/Stecman/Component/Symfony/Console/BashCompletion/CompletionContextTest.php
@@ -92,6 +92,73 @@ public function testWordBreakingWithSmallInputs()
         $this->assertEquals('', $context->getCurrentWord());
     }
 
+    public function testQuotedStringWordBreaking()
+    {
+        $context = new CompletionContext();
+        $context->setCharIndex(1000);
+        $context->setCommandLine('make horse --legs=3 --name="Jeff the horse" --colour Extreme\\ Blanc \'foo " bar\'');
+
+        // Ensure spaces and quotes are processed correctly
+        $this->assertEquals(
+            array(
+                'make',
+                'horse',
+                '--legs',
+                '3',
+                '--name',
+                'Jeff the horse',
+                '--colour',
+                'Extreme Blanc',
+                'foo " bar',
+                '',
+            ),
+            $context->getWords()
+        );
+
+        // Confirm the raw versions of the words are indexed correctly
+        $this->assertEquals(
+            array(
+                'make',
+                'horse',
+                '--legs',
+                '3',
+                '--name',
+                '"Jeff the horse"',
+                '--colour',
+                'Extreme\\ Blanc',
+                "'foo \" bar'",
+                '',
+            ),
+            $context->getRawWords()
+        );
+
+        $context = new CompletionContext();
+        $context->setCommandLine('console --tag=');
+
+        // Cursor after equals symbol on option argument
+        $context->setCharIndex(14);
+        $this->assertEquals(
+            array(
+                'console',
+                '--tag',
+                ''
+            ),
+            $context->getWords()
+        );
+    }
+
+    public function testGetRawCurrentWord()
+    {
+        $context = new CompletionContext();
+
+        $context->setCommandLine('cmd "double quoted" --option \'value\'');
+        $context->setCharIndex(13);
+        $this->assertEquals(1, $context->getWordIndex());
+
+        $this->assertEquals(array('cmd', '"double q', '--option', "'value'"), $context->getRawWords());
+        $this->assertEquals('"double q', $context->getRawCurrentWord());
+    }
+
     public function testConfigureFromEnvironment()
     {
         putenv("CMDLINE_CONTENTS=beam up li");
diff --git a/vendor/stecman/symfony-console-completion/tests/Stecman/Component/Symfony/Console/BashCompletion/CompletionHandlerTest.php b/vendor/stecman/symfony-console-completion/tests/Stecman/Component/Symfony/Console/BashCompletion/CompletionHandlerTest.php
index f93c1aaa30fc89d661c01222f730c9d8a15b6c32..f5b5935ecc2c80956ab02f5fd040e65e10b44f8b 100644
--- a/vendor/stecman/symfony-console-completion/tests/Stecman/Component/Symfony/Console/BashCompletion/CompletionHandlerTest.php
+++ b/vendor/stecman/symfony-console-completion/tests/Stecman/Component/Symfony/Console/BashCompletion/CompletionHandlerTest.php
@@ -68,6 +68,17 @@ public function testCompleteOptionShortcut()
         $this->assertEquals(array('-j'), $this->getTerms($handler->runCompletion()));
     }
 
+    public function testCompleteOptionShortcutFirst()
+    {
+        // Check command options complete
+        $handler = $this->createHandler('app -v wave --');
+        $this->assertArraySubset(array('--vigorous', '--jazz-hands'), $this->getTerms($handler->runCompletion()));
+
+        // Check unambiguous command name still completes
+        $handler = $this->createHandler('app --quiet wav');
+        $this->assertEquals(array('wave'), $this->getTerms($handler->runCompletion()));
+    }
+
     public function testCompleteDoubleDash()
     {
         $handler = $this->createHandler('app wave --');
@@ -80,6 +91,21 @@ public function testCompleteOptionFull()
         $this->assertArraySubset(array('--jazz-hands'), $this->getTerms($handler->runCompletion()));
     }
 
+    public function testCompleteOptionEqualsValue()
+    {
+        // Cursor at the "=" sign
+        $handler = $this->createHandler('app completion-aware --option-with-suggestions=');
+        $this->assertEquals(array('one-opt', 'two-opt'), $this->getTerms($handler->runCompletion()));
+
+        // Cursor at an opening quote
+        $handler = $this->createHandler('app completion-aware --option-with-suggestions="');
+        $this->assertEquals(array('one-opt', 'two-opt'), $this->getTerms($handler->runCompletion()));
+
+        // Cursor inside a quote with value
+        $handler = $this->createHandler('app completion-aware --option-with-suggestions="two');
+        $this->assertEquals(array('two-opt'), $this->getTerms($handler->runCompletion()));
+    }
+
     public function testCompleteOptionOrder()
     {
         // Completion of options should be able to happen anywhere after the command name
diff --git a/vendor/stecman/symfony-console-completion/tests/Stecman/Component/Symfony/Console/BashCompletion/HookFactoryTest.php b/vendor/stecman/symfony-console-completion/tests/Stecman/Component/Symfony/Console/BashCompletion/HookFactoryTest.php
index c253a62ee4cd6f0c2922e762125a303d4ef10fa1..13559ecebd01d111c35bb3d748c7b6552ee49e68 100644
--- a/vendor/stecman/symfony-console-completion/tests/Stecman/Component/Symfony/Console/BashCompletion/HookFactoryTest.php
+++ b/vendor/stecman/symfony-console-completion/tests/Stecman/Component/Symfony/Console/BashCompletion/HookFactoryTest.php
@@ -54,6 +54,59 @@ public function generateHookDataProvider()
         );
     }
 
+    public function testForMissingSemiColons()
+    {
+        $class = new \ReflectionClass('Stecman\Component\Symfony\Console\BashCompletion\HookFactory');
+        $properties = $class->getStaticProperties();
+        $hooks = $properties['hooks'];
+
+        // Check each line is commented or closed correctly to be collapsed for eval
+        foreach ($hooks as $shellType => $hook) {
+            $line = strtok($hook, "\n");
+            $lineNumber = 0;
+
+            while ($line !== false) {
+                $lineNumber++;
+
+                if (!$this->isScriptLineValid($line)) {
+                    $this->fail("$shellType hook appears to be missing a semicolon on line $lineNumber:\n> $line");
+                }
+
+                $line = strtok("\n");
+            }
+        }
+    }
+
+    /**
+     * Check if a line of shell script is safe to be collapsed to one line for eval
+     */
+    protected function isScriptLineValid($line)
+    {
+        if (preg_match('/^\s*#/', $line)) {
+            // Line is commented out
+            return true;
+        }
+
+        if (preg_match('/[;\{\}]\s*$/', $line)) {
+            // Line correctly ends with a semicolon or syntax
+            return true;
+        }
+
+        if (preg_match('
+                    /(
+                        ;\s*then |
+                        \s*else
+                    )
+                    \s*$
+                    /x', $line)
+        ) {
+            // Line ends with another permitted sequence
+            return true;
+        }
+
+        return false;
+    }
+
     protected function hasProgram($programName)
     {
         exec(sprintf(
diff --git a/vendor/symfony/config/.gitignore b/vendor/symfony/config/.gitignore
deleted file mode 100644
index c49a5d8df5c6548379f00c77fe572a7217bce218..0000000000000000000000000000000000000000
--- a/vendor/symfony/config/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-vendor/
-composer.lock
-phpunit.xml
diff --git a/vendor/symfony/config/CHANGELOG.md b/vendor/symfony/config/CHANGELOG.md
index 6cb610c478694e978eb4e2d88ecf663e424835d1..a650e10ab8ff3cb818ea69e2df11430c4cc6d130 100644
--- a/vendor/symfony/config/CHANGELOG.md
+++ b/vendor/symfony/config/CHANGELOG.md
@@ -1,6 +1,36 @@
 CHANGELOG
 =========
 
+4.4.0
+-----
+
+ * added a way to exclude patterns of resources from being imported by the `import()` method
+
+4.3.0
+-----
+
+ * deprecated using environment variables with `cannotBeEmpty()` if the value is validated with `validate()`
+ * made `Resource\*` classes final and not implement `Serializable` anymore
+ * deprecated the `root()` method in `TreeBuilder`, pass the root node information to the constructor instead
+
+4.2.0
+-----
+
+ * deprecated constructing a `TreeBuilder` without passing root node information
+ * renamed `FileLoaderLoadException` to `LoaderLoadException`
+
+4.1.0
+-----
+
+ * added `setPathSeparator` method to `NodeBuilder` class
+ * added third `$pathSeparator` constructor argument to `BaseNode`
+ * the `Processor` class has been made final
+
+4.0.0
+-----
+
+ * removed `ConfigCachePass`
+
 3.4.0
 -----
 
diff --git a/vendor/symfony/config/ConfigCache.php b/vendor/symfony/config/ConfigCache.php
index b2a39076f9d4a70352bc060c07abf516824aba56..053059b8ab490a3f25ad22815ba641981f01e6fd 100644
--- a/vendor/symfony/config/ConfigCache.php
+++ b/vendor/symfony/config/ConfigCache.php
@@ -31,9 +31,9 @@ class ConfigCache extends ResourceCheckerConfigCache
      * @param string $file  The absolute cache path
      * @param bool   $debug Whether debugging is enabled or not
      */
-    public function __construct($file, $debug)
+    public function __construct(string $file, bool $debug)
     {
-        $this->debug = (bool) $debug;
+        $this->debug = $debug;
 
         $checkers = [];
         if (true === $this->debug) {
diff --git a/vendor/symfony/config/ConfigCacheFactory.php b/vendor/symfony/config/ConfigCacheFactory.php
index 7903cca9321f0901f0f8f033ef56c8b0d1cbd78e..bfb70cb2ceda5e29e558b55cfebb12af84064bea 100644
--- a/vendor/symfony/config/ConfigCacheFactory.php
+++ b/vendor/symfony/config/ConfigCacheFactory.php
@@ -27,7 +27,7 @@ class ConfigCacheFactory implements ConfigCacheFactoryInterface
     /**
      * @param bool $debug The debug flag to pass to ConfigCache
      */
-    public function __construct($debug)
+    public function __construct(bool $debug)
     {
         $this->debug = $debug;
     }
@@ -43,7 +43,7 @@ public function cache($file, $callback)
 
         $cache = new ConfigCache($file, $this->debug);
         if (!$cache->isFresh()) {
-            \call_user_func($callback, $cache);
+            $callback($cache);
         }
 
         return $cache;
diff --git a/vendor/symfony/config/Definition/ArrayNode.php b/vendor/symfony/config/Definition/ArrayNode.php
index 83bab205ecfc2eab142cacf1e6ebdf79d1f323fe..4a3461119bcfc1d243c2380524e45bd1f6ea6141 100644
--- a/vendor/symfony/config/Definition/ArrayNode.php
+++ b/vendor/symfony/config/Definition/ArrayNode.php
@@ -235,7 +235,7 @@ protected function finalizeValue($value)
             }
 
             if ($child->isDeprecated()) {
-                @trigger_error($child->getDeprecationMessage($name, $this->getPath()), E_USER_DEPRECATED);
+                @trigger_error($child->getDeprecationMessage($name, $this->getPath()), \E_USER_DEPRECATED);
             }
 
             try {
@@ -300,7 +300,31 @@ protected function normalizeValue($value)
 
         // if extra fields are present, throw exception
         if (\count($value) && !$this->ignoreExtraKeys) {
-            $ex = new InvalidConfigurationException(sprintf('Unrecognized option%s "%s" under "%s"', 1 === \count($value) ? '' : 's', implode(', ', array_keys($value)), $this->getPath()));
+            $proposals = array_keys($this->children);
+            sort($proposals);
+            $guesses = [];
+
+            foreach (array_keys($value) as $subject) {
+                $minScore = \INF;
+                foreach ($proposals as $proposal) {
+                    $distance = levenshtein($subject, $proposal);
+                    if ($distance <= $minScore && $distance < 3) {
+                        $guesses[$proposal] = $distance;
+                        $minScore = $distance;
+                    }
+                }
+            }
+
+            $msg = sprintf('Unrecognized option%s "%s" under "%s"', 1 === \count($value) ? '' : 's', implode(', ', array_keys($value)), $this->getPath());
+
+            if (\count($guesses)) {
+                asort($guesses);
+                $msg .= sprintf('. Did you mean "%s"?', implode('", "', array_keys($guesses)));
+            } else {
+                $msg .= sprintf('. Available option%s %s "%s".', 1 === \count($proposals) ? '' : 's', 1 === \count($proposals) ? 'is' : 'are', implode('", "', $proposals));
+            }
+
+            $ex = new InvalidConfigurationException($msg);
             $ex->setPath($this->getPath());
 
             throw $ex;
@@ -318,7 +342,7 @@ protected function normalizeValue($value)
      */
     protected function remapXml($value)
     {
-        foreach ($this->xmlRemappings as list($singular, $plural)) {
+        foreach ($this->xmlRemappings as [$singular, $plural]) {
             if (!isset($value[$singular])) {
                 continue;
             }
@@ -368,7 +392,12 @@ protected function mergeValues($leftSide, $rightSide)
             }
 
             if (!isset($this->children[$k])) {
-                throw new \RuntimeException('merge() expects a normalized config array.');
+                if (!$this->ignoreExtraKeys || $this->removeExtraKeys) {
+                    throw new \RuntimeException('merge() expects a normalized config array.');
+                }
+
+                $leftSide[$k] = $v;
+                continue;
             }
 
             $leftSide[$k] = $this->children[$k]->merge($leftSide[$k], $v);
@@ -376,4 +405,12 @@ protected function mergeValues($leftSide, $rightSide)
 
         return $leftSide;
     }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function allowPlaceholders(): bool
+    {
+        return false;
+    }
 }
diff --git a/vendor/symfony/config/Definition/BaseNode.php b/vendor/symfony/config/Definition/BaseNode.php
index 10bcb49c8b4950df0b54122cdf9852552fc8fadf..3d7fd85603355dedb3fa211da7b3f555814a446a 100644
--- a/vendor/symfony/config/Definition/BaseNode.php
+++ b/vendor/symfony/config/Definition/BaseNode.php
@@ -15,6 +15,7 @@
 use Symfony\Component\Config\Definition\Exception\ForbiddenOverwriteException;
 use Symfony\Component\Config\Definition\Exception\InvalidConfigurationException;
 use Symfony\Component\Config\Definition\Exception\InvalidTypeException;
+use Symfony\Component\Config\Definition\Exception\UnsetKeyException;
 
 /**
  * The base node class.
@@ -23,6 +24,11 @@
  */
 abstract class BaseNode implements NodeInterface
 {
+    const DEFAULT_PATH_SEPARATOR = '.';
+
+    private static $placeholderUniquePrefixes = [];
+    private static $placeholders = [];
+
     protected $name;
     protected $parent;
     protected $normalizationClosures = [];
@@ -32,21 +38,63 @@ abstract class BaseNode implements NodeInterface
     protected $deprecationMessage = null;
     protected $equivalentValues = [];
     protected $attributes = [];
+    protected $pathSeparator;
+
+    private $handlingPlaceholder;
 
     /**
-     * @param string|null        $name   The name of the node
-     * @param NodeInterface|null $parent The parent of this node
-     *
      * @throws \InvalidArgumentException if the name contains a period
      */
-    public function __construct($name, NodeInterface $parent = null)
+    public function __construct(?string $name, NodeInterface $parent = null, string $pathSeparator = self::DEFAULT_PATH_SEPARATOR)
     {
-        if (false !== strpos($name = (string) $name, '.')) {
-            throw new \InvalidArgumentException('The name must not contain ".".');
+        if (false !== strpos($name = (string) $name, $pathSeparator)) {
+            throw new \InvalidArgumentException('The name must not contain ".'.$pathSeparator.'".');
         }
 
         $this->name = $name;
         $this->parent = $parent;
+        $this->pathSeparator = $pathSeparator;
+    }
+
+    /**
+     * Register possible (dummy) values for a dynamic placeholder value.
+     *
+     * Matching configuration values will be processed with a provided value, one by one. After a provided value is
+     * successfully processed the configuration value is returned as is, thus preserving the placeholder.
+     *
+     * @internal
+     */
+    public static function setPlaceholder(string $placeholder, array $values): void
+    {
+        if (!$values) {
+            throw new \InvalidArgumentException('At least one value must be provided.');
+        }
+
+        self::$placeholders[$placeholder] = $values;
+    }
+
+    /**
+     * Adds a common prefix for dynamic placeholder values.
+     *
+     * Matching configuration values will be skipped from being processed and are returned as is, thus preserving the
+     * placeholder. An exact match provided by {@see setPlaceholder()} might take precedence.
+     *
+     * @internal
+     */
+    public static function setPlaceholderUniquePrefix(string $prefix): void
+    {
+        self::$placeholderUniquePrefixes[] = $prefix;
+    }
+
+    /**
+     * Resets all current placeholders available.
+     *
+     * @internal
+     */
+    public static function resetPlaceholders(): void
+    {
+        self::$placeholderUniquePrefixes = [];
+        self::$placeholders = [];
     }
 
     /**
@@ -246,13 +294,11 @@ public function getName()
      */
     public function getPath()
     {
-        $path = $this->name;
-
         if (null !== $this->parent) {
-            $path = $this->parent->getPath().'.'.$path;
+            return $this->parent->getPath().$this->pathSeparator.$this->name;
         }
 
-        return $path;
+        return $this->name;
     }
 
     /**
@@ -264,8 +310,34 @@ final public function merge($leftSide, $rightSide)
             throw new ForbiddenOverwriteException(sprintf('Configuration path "%s" cannot be overwritten. You have to define all options for this path, and any of its sub-paths in one configuration section.', $this->getPath()));
         }
 
-        $this->validateType($leftSide);
-        $this->validateType($rightSide);
+        if ($leftSide !== $leftPlaceholders = self::resolvePlaceholderValue($leftSide)) {
+            foreach ($leftPlaceholders as $leftPlaceholder) {
+                $this->handlingPlaceholder = $leftSide;
+                try {
+                    $this->merge($leftPlaceholder, $rightSide);
+                } finally {
+                    $this->handlingPlaceholder = null;
+                }
+            }
+
+            return $rightSide;
+        }
+
+        if ($rightSide !== $rightPlaceholders = self::resolvePlaceholderValue($rightSide)) {
+            foreach ($rightPlaceholders as $rightPlaceholder) {
+                $this->handlingPlaceholder = $rightSide;
+                try {
+                    $this->merge($leftSide, $rightPlaceholder);
+                } finally {
+                    $this->handlingPlaceholder = null;
+                }
+            }
+
+            return $rightSide;
+        }
+
+        $this->doValidateType($leftSide);
+        $this->doValidateType($rightSide);
 
         return $this->mergeValues($leftSide, $rightSide);
     }
@@ -282,6 +354,20 @@ final public function normalize($value)
             $value = $closure($value);
         }
 
+        // resolve placeholder value
+        if ($value !== $placeholders = self::resolvePlaceholderValue($value)) {
+            foreach ($placeholders as $placeholder) {
+                $this->handlingPlaceholder = $value;
+                try {
+                    $this->normalize($placeholder);
+                } finally {
+                    $this->handlingPlaceholder = null;
+                }
+            }
+
+            return $value;
+        }
+
         // replace value with their equivalent
         foreach ($this->equivalentValues as $data) {
             if ($data[0] === $value) {
@@ -290,7 +376,7 @@ final public function normalize($value)
         }
 
         // validate type
-        $this->validateType($value);
+        $this->doValidateType($value);
 
         // normalize value
         return $this->normalizeValue($value);
@@ -323,7 +409,20 @@ public function getParent()
      */
     final public function finalize($value)
     {
-        $this->validateType($value);
+        if ($value !== $placeholders = self::resolvePlaceholderValue($value)) {
+            foreach ($placeholders as $placeholder) {
+                $this->handlingPlaceholder = $value;
+                try {
+                    $this->finalize($placeholder);
+                } finally {
+                    $this->handlingPlaceholder = null;
+                }
+            }
+
+            return $value;
+        }
+
+        $this->doValidateType($value);
 
         $value = $this->finalizeValue($value);
 
@@ -333,6 +432,10 @@ final public function finalize($value)
             try {
                 $value = $closure($value);
             } catch (Exception $e) {
+                if ($e instanceof UnsetKeyException && null !== $this->handlingPlaceholder) {
+                    continue;
+                }
+
                 throw $e;
             } catch (\Exception $e) {
                 throw new InvalidConfigurationException(sprintf('Invalid configuration for path "%s": ', $this->getPath()).$e->getMessage(), $e->getCode(), $e);
@@ -378,4 +481,81 @@ abstract protected function mergeValues($leftSide, $rightSide);
      * @return mixed The finalized value
      */
     abstract protected function finalizeValue($value);
+
+    /**
+     * Tests if placeholder values are allowed for this node.
+     */
+    protected function allowPlaceholders(): bool
+    {
+        return true;
+    }
+
+    /**
+     * Tests if a placeholder is being handled currently.
+     */
+    protected function isHandlingPlaceholder(): bool
+    {
+        return null !== $this->handlingPlaceholder;
+    }
+
+    /**
+     * Gets allowed dynamic types for this node.
+     */
+    protected function getValidPlaceholderTypes(): array
+    {
+        return [];
+    }
+
+    private static function resolvePlaceholderValue($value)
+    {
+        if (\is_string($value)) {
+            if (isset(self::$placeholders[$value])) {
+                return self::$placeholders[$value];
+            }
+
+            foreach (self::$placeholderUniquePrefixes as $placeholderUniquePrefix) {
+                if (0 === strpos($value, $placeholderUniquePrefix)) {
+                    return [];
+                }
+            }
+        }
+
+        return $value;
+    }
+
+    private function doValidateType($value): void
+    {
+        if (null !== $this->handlingPlaceholder && !$this->allowPlaceholders()) {
+            $e = new InvalidTypeException(sprintf('A dynamic value is not compatible with a "%s" node type at path "%s".', static::class, $this->getPath()));
+            $e->setPath($this->getPath());
+
+            throw $e;
+        }
+
+        if (null === $this->handlingPlaceholder || null === $value) {
+            $this->validateType($value);
+
+            return;
+        }
+
+        $knownTypes = array_keys(self::$placeholders[$this->handlingPlaceholder]);
+        $validTypes = $this->getValidPlaceholderTypes();
+
+        if ($validTypes && array_diff($knownTypes, $validTypes)) {
+            $e = new InvalidTypeException(sprintf(
+                'Invalid type for path "%s". Expected %s, but got %s.',
+                $this->getPath(),
+                1 === \count($validTypes) ? '"'.reset($validTypes).'"' : 'one of "'.implode('", "', $validTypes).'"',
+                1 === \count($knownTypes) ? '"'.reset($knownTypes).'"' : 'one of "'.implode('", "', $knownTypes).'"'
+            ));
+            if ($hint = $this->getInfo()) {
+                $e->addHint($hint);
+            }
+            $e->setPath($this->getPath());
+
+            throw $e;
+        }
+
+        $this->validateType($value);
+    }
 }
diff --git a/vendor/symfony/config/Definition/BooleanNode.php b/vendor/symfony/config/Definition/BooleanNode.php
index 85f467b6bea92b5b5e234ff683aeb7eeca8f71b2..c43c46f0168d10ea82a44c9012de8102d8d2eb31 100644
--- a/vendor/symfony/config/Definition/BooleanNode.php
+++ b/vendor/symfony/config/Definition/BooleanNode.php
@@ -44,4 +44,12 @@ protected function isValueEmpty($value)
         // a boolean value cannot be empty
         return false;
     }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function getValidPlaceholderTypes(): array
+    {
+        return ['bool'];
+    }
 }
diff --git a/vendor/symfony/config/Definition/Builder/ArrayNodeDefinition.php b/vendor/symfony/config/Definition/Builder/ArrayNodeDefinition.php
index 29d1e154fce8940053a189bf6fe69be39859fdbb..60491e0da32cd8b7c9772f29211f439e04f95610 100644
--- a/vendor/symfony/config/Definition/Builder/ArrayNodeDefinition.php
+++ b/vendor/symfony/config/Definition/Builder/ArrayNodeDefinition.php
@@ -39,7 +39,7 @@ class ArrayNodeDefinition extends NodeDefinition implements ParentNodeDefinition
     /**
      * {@inheritdoc}
      */
-    public function __construct($name, NodeParentInterface $parent = null)
+    public function __construct(?string $name, NodeParentInterface $parent = null)
     {
         parent::__construct($name, $parent);
 
@@ -393,7 +393,7 @@ protected function getNodeBuilder()
     protected function createNode()
     {
         if (null === $this->prototype) {
-            $node = new ArrayNode($this->name, $this->parent);
+            $node = new ArrayNode($this->name, $this->parent, $this->pathSeparator);
 
             $this->validateConcreteNode($node);
 
@@ -404,7 +404,7 @@ protected function createNode()
                 $node->addChild($child->getNode());
             }
         } else {
-            $node = new PrototypedArrayNode($this->name, $this->parent);
+            $node = new PrototypedArrayNode($this->name, $this->parent, $this->pathSeparator);
 
             $this->validatePrototypeNode($node);
 
@@ -412,11 +412,7 @@ protected function createNode()
                 $node->setKeyAttribute($this->key, $this->removeKeyItem);
             }
 
-            if (false === $this->allowEmptyValue) {
-                @trigger_error(sprintf('Using %s::cannotBeEmpty() at path "%s" has no effect, consider requiresAtLeastOneElement() instead. In 4.0 both methods will behave the same.', __CLASS__, $node->getPath()), E_USER_DEPRECATED);
-            }
-
-            if (true === $this->atLeastOne) {
+            if (true === $this->atLeastOne || false === $this->allowEmptyValue) {
                 $node->setMinNumberOfElements(1);
             }
 
@@ -476,7 +472,7 @@ protected function validateConcreteNode(ArrayNode $node)
         }
 
         if (false === $this->allowEmptyValue) {
-            @trigger_error(sprintf('->cannotBeEmpty() is not applicable to concrete nodes at path "%s". In 4.0 it will throw an exception.', $path), E_USER_DEPRECATED);
+            throw new InvalidDefinitionException(sprintf('->cannotBeEmpty() is not applicable to concrete nodes at path "%s".', $path));
         }
 
         if (true === $this->atLeastOne) {
@@ -519,4 +515,34 @@ protected function validatePrototypeNode(PrototypedArrayNode $node)
             }
         }
     }
+
+    /**
+     * @return NodeDefinition[]
+     */
+    public function getChildNodeDefinitions()
+    {
+        return $this->children;
+    }
+
+    /**
+     * Finds a node defined by the given $nodePath.
+     *
+     * @param string $nodePath The path of the node to find. e.g "doctrine.orm.mappings"
+     */
+    public function find(string $nodePath): NodeDefinition
+    {
+        $firstPathSegment = (false === $pathSeparatorPos = strpos($nodePath, $this->pathSeparator))
+            ? $nodePath
+            : substr($nodePath, 0, $pathSeparatorPos);
+
+        if (null === $node = ($this->children[$firstPathSegment] ?? null)) {
+            throw new \RuntimeException(sprintf('Node with name "%s" does not exist in the current node "%s".', $firstPathSegment, $this->name));
+        }
+
+        if (false === $pathSeparatorPos) {
+            return $node;
+        }
+
+        return $node->find(substr($nodePath, $pathSeparatorPos + \strlen($this->pathSeparator)));
+    }
 }
diff --git a/vendor/symfony/config/Definition/Builder/BooleanNodeDefinition.php b/vendor/symfony/config/Definition/Builder/BooleanNodeDefinition.php
index 28e56579ada52427784017c49572f046dcc70d4d..d19324273bff57fcb9c9283ff104b7aac3434b43 100644
--- a/vendor/symfony/config/Definition/Builder/BooleanNodeDefinition.php
+++ b/vendor/symfony/config/Definition/Builder/BooleanNodeDefinition.php
@@ -24,7 +24,7 @@ class BooleanNodeDefinition extends ScalarNodeDefinition
     /**
      * {@inheritdoc}
      */
-    public function __construct($name, NodeParentInterface $parent = null)
+    public function __construct(?string $name, NodeParentInterface $parent = null)
     {
         parent::__construct($name, $parent);
 
@@ -38,7 +38,7 @@ public function __construct($name, NodeParentInterface $parent = null)
      */
     protected function instantiateNode()
     {
-        return new BooleanNode($this->name, $this->parent);
+        return new BooleanNode($this->name, $this->parent, $this->pathSeparator);
     }
 
     /**
diff --git a/vendor/symfony/config/Definition/Builder/BuilderAwareInterface.php b/vendor/symfony/config/Definition/Builder/BuilderAwareInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..f30b8736cf3a348cb92f1c3d1966d789d84beaf6
--- /dev/null
+++ b/vendor/symfony/config/Definition/Builder/BuilderAwareInterface.php
@@ -0,0 +1,25 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Config\Definition\Builder;
+
+/**
+ * An interface that can be implemented by nodes which build other nodes.
+ *
+ * @author Roland Franssen <franssen.roland@gmail.com>
+ */
+interface BuilderAwareInterface
+{
+    /**
+     * Sets a custom children builder.
+     */
+    public function setBuilder(NodeBuilder $builder);
+}
diff --git a/vendor/symfony/config/Definition/Builder/EnumNodeDefinition.php b/vendor/symfony/config/Definition/Builder/EnumNodeDefinition.php
index 817906f5076295ea9a9e660bd31630f5a387459f..9a9c096e3dcd338da9a3ab62aaa9cd1a5e9ed403 100644
--- a/vendor/symfony/config/Definition/Builder/EnumNodeDefinition.php
+++ b/vendor/symfony/config/Definition/Builder/EnumNodeDefinition.php
@@ -51,6 +51,6 @@ protected function instantiateNode()
             throw new \RuntimeException('You must call ->values() on enum nodes.');
         }
 
-        return new EnumNode($this->name, $this->parent, $this->values);
+        return new EnumNode($this->name, $this->parent, $this->values, $this->pathSeparator);
     }
 }
diff --git a/vendor/symfony/config/Definition/Builder/FloatNodeDefinition.php b/vendor/symfony/config/Definition/Builder/FloatNodeDefinition.php
index c0bed462bf3850268a8cc5ff10daf733705cefff..7b74271ae498a134425b98255667a2f17112a73a 100644
--- a/vendor/symfony/config/Definition/Builder/FloatNodeDefinition.php
+++ b/vendor/symfony/config/Definition/Builder/FloatNodeDefinition.php
@@ -27,6 +27,6 @@ class FloatNodeDefinition extends NumericNodeDefinition
      */
     protected function instantiateNode()
     {
-        return new FloatNode($this->name, $this->parent, $this->min, $this->max);
+        return new FloatNode($this->name, $this->parent, $this->min, $this->max, $this->pathSeparator);
     }
 }
diff --git a/vendor/symfony/config/Definition/Builder/IntegerNodeDefinition.php b/vendor/symfony/config/Definition/Builder/IntegerNodeDefinition.php
index f6c3c147f3e6ab37cb4e2dc7f678e3bc6626e0d7..0472a9870d9dcc7d4e10bd2c750bae2bb9d86485 100644
--- a/vendor/symfony/config/Definition/Builder/IntegerNodeDefinition.php
+++ b/vendor/symfony/config/Definition/Builder/IntegerNodeDefinition.php
@@ -27,6 +27,6 @@ class IntegerNodeDefinition extends NumericNodeDefinition
      */
     protected function instantiateNode()
     {
-        return new IntegerNode($this->name, $this->parent, $this->min, $this->max);
+        return new IntegerNode($this->name, $this->parent, $this->min, $this->max, $this->pathSeparator);
     }
 }
diff --git a/vendor/symfony/config/Definition/Builder/NodeBuilder.php b/vendor/symfony/config/Definition/Builder/NodeBuilder.php
index 2809cb6c6f601ac2cffd6d03e5d49c581af516e7..be059f5d17fceeb65d763e564741b06cb029572f 100644
--- a/vendor/symfony/config/Definition/Builder/NodeBuilder.php
+++ b/vendor/symfony/config/Definition/Builder/NodeBuilder.php
@@ -179,7 +179,7 @@ public function node($name, $type)
      */
     public function append(NodeDefinition $node)
     {
-        if ($node instanceof ParentNodeDefinitionInterface) {
+        if ($node instanceof BuilderAwareInterface) {
             $builder = clone $this;
             $builder->setParent(null);
             $node->setBuilder($builder);
diff --git a/vendor/symfony/config/Definition/Builder/NodeDefinition.php b/vendor/symfony/config/Definition/Builder/NodeDefinition.php
index cc245d7489b0d6ff3c049bd6a93583794da5fab5..4d3b2f0bb119cb6dcfdcafb074da7b6d79ebec51 100644
--- a/vendor/symfony/config/Definition/Builder/NodeDefinition.php
+++ b/vendor/symfony/config/Definition/Builder/NodeDefinition.php
@@ -11,6 +11,7 @@
 
 namespace Symfony\Component\Config\Definition\Builder;
 
+use Symfony\Component\Config\Definition\BaseNode;
 use Symfony\Component\Config\Definition\Exception\InvalidDefinitionException;
 use Symfony\Component\Config\Definition\NodeInterface;
 
@@ -33,14 +34,11 @@ abstract class NodeDefinition implements NodeParentInterface
     protected $nullEquivalent;
     protected $trueEquivalent = true;
     protected $falseEquivalent = false;
+    protected $pathSeparator = BaseNode::DEFAULT_PATH_SEPARATOR;
     protected $parent;
     protected $attributes = [];
 
-    /**
-     * @param string|null              $name   The name of the node
-     * @param NodeParentInterface|null $parent The parent
-     */
-    public function __construct($name, NodeParentInterface $parent = null)
+    public function __construct(?string $name, NodeParentInterface $parent = null)
     {
         $this->parent = $parent;
         $this->name = $name;
@@ -350,4 +348,26 @@ protected function normalization()
      * @throws InvalidDefinitionException When the definition is invalid
      */
     abstract protected function createNode();
+
+    /**
+     * Set PathSeparator to use.
+     *
+     * @return $this
+     */
+    public function setPathSeparator(string $separator)
+    {
+        if ($this instanceof ParentNodeDefinitionInterface) {
+            if (method_exists($this, 'getChildNodeDefinitions')) {
+                foreach ($this->getChildNodeDefinitions() as $child) {
+                    $child->setPathSeparator($separator);
+                }
+            } else {
+                @trigger_error(sprintf('Not implementing the "%s::getChildNodeDefinitions()" method in "%s" is deprecated since Symfony 4.1.', ParentNodeDefinitionInterface::class, static::class), \E_USER_DEPRECATED);
+            }
+        }
+
+        $this->pathSeparator = $separator;
+
+        return $this;
+    }
 }
diff --git a/vendor/symfony/config/Definition/Builder/ParentNodeDefinitionInterface.php b/vendor/symfony/config/Definition/Builder/ParentNodeDefinitionInterface.php
index 1bf2ad4bf6d9699f9a75dbc9271ead33745f3c78..c6328c29449b8b6d74415945ed10dd3748d742a3 100644
--- a/vendor/symfony/config/Definition/Builder/ParentNodeDefinitionInterface.php
+++ b/vendor/symfony/config/Definition/Builder/ParentNodeDefinitionInterface.php
@@ -15,8 +15,10 @@
  * An interface that must be implemented by nodes which can have children.
  *
  * @author Victor Berchet <victor@suumit.com>
+ *
+ * @method NodeDefinition[] getChildNodeDefinitions() Gets the child node definitions - not implementing it is deprecated since Symfony 4.2
  */
-interface ParentNodeDefinitionInterface
+interface ParentNodeDefinitionInterface extends BuilderAwareInterface
 {
     /**
      * Returns a builder to add children nodes.
@@ -41,9 +43,4 @@ public function children();
      * @return $this
      */
     public function append(NodeDefinition $node);
-
-    /**
-     * Sets a custom children builder.
-     */
-    public function setBuilder(NodeBuilder $builder);
 }
diff --git a/vendor/symfony/config/Definition/Builder/ScalarNodeDefinition.php b/vendor/symfony/config/Definition/Builder/ScalarNodeDefinition.php
index 6170555ccf13945dbe572a45dc5caaa2106dd4ff..428f61290a063ec6a2fc852f64ae1ffa7e00e776 100644
--- a/vendor/symfony/config/Definition/Builder/ScalarNodeDefinition.php
+++ b/vendor/symfony/config/Definition/Builder/ScalarNodeDefinition.php
@@ -27,6 +27,6 @@ class ScalarNodeDefinition extends VariableNodeDefinition
      */
     protected function instantiateNode()
     {
-        return new ScalarNode($this->name, $this->parent);
+        return new ScalarNode($this->name, $this->parent, $this->pathSeparator);
     }
 }
diff --git a/vendor/symfony/config/Definition/Builder/TreeBuilder.php b/vendor/symfony/config/Definition/Builder/TreeBuilder.php
index 384477c501082e944d6deeb7f4d91d2d1df853a3..6605c0eb904e082f6a00e3a6b311876d1a2fb6ff 100644
--- a/vendor/symfony/config/Definition/Builder/TreeBuilder.php
+++ b/vendor/symfony/config/Definition/Builder/TreeBuilder.php
@@ -11,6 +11,7 @@
 
 namespace Symfony\Component\Config\Definition\Builder;
 
+use Symfony\Component\Config\Definition\Exception\TreeWithoutRootNodeException;
 use Symfony\Component\Config\Definition\NodeInterface;
 
 /**
@@ -23,29 +24,49 @@ class TreeBuilder implements NodeParentInterface
     protected $tree;
     protected $root;
 
-    /**
-     * @deprecated since 3.4. To be removed in 4.0
-     */
-    protected $builder;
+    public function __construct(string $name = null, string $type = 'array', NodeBuilder $builder = null)
+    {
+        if (null === $name) {
+            @trigger_error('A tree builder without a root node is deprecated since Symfony 4.2 and will not be supported anymore in 5.0.', \E_USER_DEPRECATED);
+        } else {
+            $builder = $builder ?: new NodeBuilder();
+            $this->root = $builder->node($name, $type)->setParent($this);
+        }
+    }
 
     /**
      * Creates the root node.
      *
-     * @param string      $name    The name of the root node
-     * @param string      $type    The type of the root node
-     * @param NodeBuilder $builder A custom node builder instance
+     * @param string $name The name of the root node
+     * @param string $type The type of the root node
      *
      * @return ArrayNodeDefinition|NodeDefinition The root node (as an ArrayNodeDefinition when the type is 'array')
      *
      * @throws \RuntimeException When the node type is not supported
+     *
+     * @deprecated since Symfony 4.3, pass the root name to the constructor instead
      */
     public function root($name, $type = 'array', NodeBuilder $builder = null)
     {
+        @trigger_error(sprintf('The "%s()" method called for the "%s" configuration is deprecated since Symfony 4.3, pass the root name to the constructor instead.', __METHOD__, $name), \E_USER_DEPRECATED);
+
         $builder = $builder ?: new NodeBuilder();
 
         return $this->root = $builder->node($name, $type)->setParent($this);
     }
 
+    /**
+     * @return NodeDefinition|ArrayNodeDefinition The root node (as an ArrayNodeDefinition when the type is 'array')
+     */
+    public function getRootNode(): NodeDefinition
+    {
+        if (null === $this->root) {
+            throw new \RuntimeException(sprintf('Calling "%s()" before creating the root node is not supported, migrate to the new constructor signature instead.', __METHOD__));
+        }
+
+        return $this->root;
+    }
+
     /**
      * Builds the tree.
      *
@@ -55,13 +76,31 @@ public function root($name, $type = 'array', NodeBuilder $builder = null)
      */
     public function buildTree()
     {
-        if (null === $this->root) {
-            throw new \RuntimeException('The configuration tree has no root node.');
-        }
+        $this->assertTreeHasRootNode();
         if (null !== $this->tree) {
             return $this->tree;
         }
 
         return $this->tree = $this->root->getNode(true);
     }
+
+    public function setPathSeparator(string $separator)
+    {
+        $this->assertTreeHasRootNode();
+
+        // unset last built as changing path separator changes all nodes
+        $this->tree = null;
+
+        $this->root->setPathSeparator($separator);
+    }
+
+    /**
+     * @throws \RuntimeException if root node is not defined
+     */
+    private function assertTreeHasRootNode()
+    {
+        if (null === $this->root) {
+            throw new TreeWithoutRootNodeException('The configuration tree has no root node.');
+        }
+    }
 }
diff --git a/vendor/symfony/config/Definition/Builder/VariableNodeDefinition.php b/vendor/symfony/config/Definition/Builder/VariableNodeDefinition.php
index 26565e1771d849a8a0abdbdff4a0386bc6e1a80f..39a564f4cdb76231013247da90961810c71d6112 100644
--- a/vendor/symfony/config/Definition/Builder/VariableNodeDefinition.php
+++ b/vendor/symfony/config/Definition/Builder/VariableNodeDefinition.php
@@ -27,7 +27,7 @@ class VariableNodeDefinition extends NodeDefinition
      */
     protected function instantiateNode()
     {
-        return new VariableNode($this->name, $this->parent);
+        return new VariableNode($this->name, $this->parent, $this->pathSeparator);
     }
 
     /**
diff --git a/vendor/symfony/config/Definition/Dumper/XmlReferenceDumper.php b/vendor/symfony/config/Definition/Dumper/XmlReferenceDumper.php
index 744f15fd81b5aa63f7128b764c18f0214e24944f..77d1664c74bdeb07ba56f9adb95048b278de7407 100644
--- a/vendor/symfony/config/Definition/Dumper/XmlReferenceDumper.php
+++ b/vendor/symfony/config/Definition/Dumper/XmlReferenceDumper.php
@@ -41,12 +41,7 @@ public function dumpNode(NodeInterface $node, $namespace = null)
         return $ref;
     }
 
-    /**
-     * @param int    $depth
-     * @param bool   $root      If the node is the root node
-     * @param string $namespace The namespace of the node
-     */
-    private function writeNode(NodeInterface $node, $depth = 0, $root = false, $namespace = null)
+    private function writeNode(NodeInterface $node, int $depth = 0, bool $root = false, string $namespace = null)
     {
         $rootName = ($root ? 'config' : $node->getName());
         $rootNamespace = ($namespace ?: ($root ? 'http://example.org/schema/dic/'.$node->getName() : null));
@@ -58,7 +53,7 @@ private function writeNode(NodeInterface $node, $depth = 0, $root = false, $name
             });
 
             if (\count($remapping)) {
-                list($singular) = current($remapping);
+                [$singular] = current($remapping);
                 $rootName = $singular;
             }
         }
@@ -96,7 +91,7 @@ private function writeNode(NodeInterface $node, $depth = 0, $root = false, $name
                 }
 
                 if ($prototype instanceof PrototypedArrayNode) {
-                    $prototype->setName($key);
+                    $prototype->setName($key ?? '');
                     $children = [$key => $prototype];
                 } elseif ($prototype instanceof ArrayNode) {
                     $children = $prototype->getChildren();
@@ -193,7 +188,7 @@ private function writeNode(NodeInterface $node, $depth = 0, $root = false, $name
                 $commentDepth = $depth + 4 + \strlen($attrName) + 2;
                 $commentLines = explode("\n", $comment);
                 $multiline = (\count($commentLines) > 1);
-                $comment = implode(PHP_EOL.str_repeat(' ', $commentDepth), $commentLines);
+                $comment = implode(\PHP_EOL.str_repeat(' ', $commentDepth), $commentLines);
 
                 if ($multiline) {
                     $this->writeLine('<!--', $depth);
@@ -258,26 +253,21 @@ private function writeNode(NodeInterface $node, $depth = 0, $root = false, $name
 
     /**
      * Outputs a single config reference line.
-     *
-     * @param string $text
-     * @param int    $indent
      */
-    private function writeLine($text, $indent = 0)
+    private function writeLine(string $text, int $indent = 0)
     {
         $indent = \strlen($text) + $indent;
         $format = '%'.$indent.'s';
 
-        $this->reference .= sprintf($format, $text).PHP_EOL;
+        $this->reference .= sprintf($format, $text).\PHP_EOL;
     }
 
     /**
      * Renders the string conversion of the value.
      *
      * @param mixed $value
-     *
-     * @return string
      */
-    private function writeValue($value)
+    private function writeValue($value): string
     {
         if ('%%%%not_defined%%%%' === $value) {
             return '';
diff --git a/vendor/symfony/config/Definition/Dumper/YamlReferenceDumper.php b/vendor/symfony/config/Definition/Dumper/YamlReferenceDumper.php
index ba355394602f7f8309c1869107b9e1b657222ca1..e19e09ca7c105d26d0c439557d5373ceb4767da8 100644
--- a/vendor/symfony/config/Definition/Dumper/YamlReferenceDumper.php
+++ b/vendor/symfony/config/Definition/Dumper/YamlReferenceDumper.php
@@ -69,11 +69,7 @@ public function dumpNode(NodeInterface $node)
         return $ref;
     }
 
-    /**
-     * @param int  $depth
-     * @param bool $prototypedArray
-     */
-    private function writeNode(NodeInterface $node, NodeInterface $parentNode = null, $depth = 0, $prototypedArray = false)
+    private function writeNode(NodeInterface $node, NodeInterface $parentNode = null, int $depth = 0, bool $prototypedArray = false)
     {
         $comments = [];
         $default = '';
@@ -177,11 +173,8 @@ private function writeNode(NodeInterface $node, NodeInterface $parentNode = null
 
     /**
      * Outputs a single config reference line.
-     *
-     * @param string $text
-     * @param int    $indent
      */
-    private function writeLine($text, $indent = 0)
+    private function writeLine(string $text, int $indent = 0)
     {
         $indent = \strlen($text) + $indent;
         $format = '%'.$indent.'s';
@@ -189,7 +182,7 @@ private function writeLine($text, $indent = 0)
         $this->reference .= sprintf($format, $text)."\n";
     }
 
-    private function writeArray(array $array, $depth)
+    private function writeArray(array $array, int $depth)
     {
         $isIndexed = array_values($array) === $array;
 
@@ -212,10 +205,7 @@ private function writeArray(array $array, $depth)
         }
     }
 
-    /**
-     * @return array
-     */
-    private function getPrototypeChildren(PrototypedArrayNode $node)
+    private function getPrototypeChildren(PrototypedArrayNode $node): array
     {
         $prototype = $node->getPrototype();
         $key = $node->getKeyAttribute();
diff --git a/vendor/symfony/config/Definition/EnumNode.php b/vendor/symfony/config/Definition/EnumNode.php
index 15c8db3e66e52c94824410392cbab761684a51ac..23fc508a78fa9c605182397f584346e5ba20c051 100644
--- a/vendor/symfony/config/Definition/EnumNode.php
+++ b/vendor/symfony/config/Definition/EnumNode.php
@@ -22,14 +22,14 @@ class EnumNode extends ScalarNode
 {
     private $values;
 
-    public function __construct($name, NodeInterface $parent = null, array $values = [])
+    public function __construct(?string $name, NodeInterface $parent = null, array $values = [], string $pathSeparator = BaseNode::DEFAULT_PATH_SEPARATOR)
     {
         $values = array_unique($values);
         if (empty($values)) {
             throw new \InvalidArgumentException('$values must contain at least one element.');
         }
 
-        parent::__construct($name, $parent);
+        parent::__construct($name, $parent, $pathSeparator);
         $this->values = $values;
     }
 
@@ -51,4 +51,12 @@ protected function finalizeValue($value)
 
         return $value;
     }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function allowPlaceholders(): bool
+    {
+        return false;
+    }
 }
diff --git a/vendor/symfony/config/Tests/Fixtures/Builder/VariableNodeDefinition.php b/vendor/symfony/config/Definition/Exception/TreeWithoutRootNodeException.php
similarity index 51%
rename from vendor/symfony/config/Tests/Fixtures/Builder/VariableNodeDefinition.php
rename to vendor/symfony/config/Definition/Exception/TreeWithoutRootNodeException.php
index 6126ed434f373335bab2a1cd0444b2cda64b7749..04406fc90b416c91396e421a4125d217d2eedbc0 100644
--- a/vendor/symfony/config/Tests/Fixtures/Builder/VariableNodeDefinition.php
+++ b/vendor/symfony/config/Definition/Exception/TreeWithoutRootNodeException.php
@@ -9,10 +9,13 @@
  * file that was distributed with this source code.
  */
 
-namespace Symfony\Component\Config\Tests\Fixtures\Builder;
+namespace Symfony\Component\Config\Definition\Exception;
 
-use Symfony\Component\Config\Definition\Builder\VariableNodeDefinition as BaseVariableNodeDefinition;
-
-class VariableNodeDefinition extends BaseVariableNodeDefinition
+/**
+ * @author Roland Franssen <franssen.roland@gmail.com>
+ *
+ * @internal
+ */
+class TreeWithoutRootNodeException extends \RuntimeException
 {
 }
diff --git a/vendor/symfony/config/Definition/FloatNode.php b/vendor/symfony/config/Definition/FloatNode.php
index 9eb8789950ecde9d36cab0003714fedd45a6138a..8e229ed4c59dc14db265c6efb6fd747539a29175 100644
--- a/vendor/symfony/config/Definition/FloatNode.php
+++ b/vendor/symfony/config/Definition/FloatNode.php
@@ -40,4 +40,12 @@ protected function validateType($value)
             throw $ex;
         }
     }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function getValidPlaceholderTypes(): array
+    {
+        return ['float'];
+    }
 }
diff --git a/vendor/symfony/config/Definition/IntegerNode.php b/vendor/symfony/config/Definition/IntegerNode.php
index 8ec068a84ecf98237f8f006ca311ebfa1b08f267..e8c6a81c303ea313aa20ef60df34b52c4863e62e 100644
--- a/vendor/symfony/config/Definition/IntegerNode.php
+++ b/vendor/symfony/config/Definition/IntegerNode.php
@@ -35,4 +35,12 @@ protected function validateType($value)
             throw $ex;
         }
     }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function getValidPlaceholderTypes(): array
+    {
+        return ['int'];
+    }
 }
diff --git a/vendor/symfony/config/Definition/NumericNode.php b/vendor/symfony/config/Definition/NumericNode.php
index 439935e4559f8c978dedcea4cc3f532adedcb290..19c96e8af764ceb3113262bec7c50b0dad6de1a6 100644
--- a/vendor/symfony/config/Definition/NumericNode.php
+++ b/vendor/symfony/config/Definition/NumericNode.php
@@ -23,9 +23,9 @@ class NumericNode extends ScalarNode
     protected $min;
     protected $max;
 
-    public function __construct($name, NodeInterface $parent = null, $min = null, $max = null)
+    public function __construct(?string $name, NodeInterface $parent = null, $min = null, $max = null, string $pathSeparator = BaseNode::DEFAULT_PATH_SEPARATOR)
     {
-        parent::__construct($name, $parent);
+        parent::__construct($name, $parent, $pathSeparator);
         $this->min = $min;
         $this->max = $max;
     }
diff --git a/vendor/symfony/config/Definition/Processor.php b/vendor/symfony/config/Definition/Processor.php
index 0a935eeb7ff1d1deeb48a95e373ffe2ab84bcc51..a878b90557a757c7979a2bf7ac1f0fea55b4575c 100644
--- a/vendor/symfony/config/Definition/Processor.php
+++ b/vendor/symfony/config/Definition/Processor.php
@@ -15,14 +15,15 @@
  * This class is the entry point for config normalization/merging/finalization.
  *
  * @author Johannes M. Schmitt <schmittjoh@gmail.com>
+ *
+ * @final since version 4.1
  */
 class Processor
 {
     /**
      * Processes an array of configurations.
      *
-     * @param NodeInterface $configTree The node tree describing the configuration
-     * @param array         $configs    An array of configuration items to process
+     * @param array $configs An array of configuration items to process
      *
      * @return array The processed configuration
      */
@@ -40,8 +41,7 @@ public function process(NodeInterface $configTree, array $configs)
     /**
      * Processes an array of configurations.
      *
-     * @param ConfigurationInterface $configuration The configuration class
-     * @param array                  $configs       An array of configuration items to process
+     * @param array $configs An array of configuration items to process
      *
      * @return array The processed configuration
      */
diff --git a/vendor/symfony/config/Definition/PrototypedArrayNode.php b/vendor/symfony/config/Definition/PrototypedArrayNode.php
index d18a109abc6a40640a9b29ed91bf72caa1e2d682..f48414e31817191cf78d575b340a5733e426df03 100644
--- a/vendor/symfony/config/Definition/PrototypedArrayNode.php
+++ b/vendor/symfony/config/Definition/PrototypedArrayNode.php
@@ -363,11 +363,9 @@ protected function mergeValues($leftSide, $rightSide)
      * Now, the key becomes 'name001' and the child node becomes 'value001' and
      * the prototype of child node 'name001' should be a ScalarNode instead of an ArrayNode instance.
      *
-     * @param string $key The key of the child node
-     *
      * @return mixed The prototype instance
      */
-    private function getPrototypeForChild($key)
+    private function getPrototypeForChild(string $key)
     {
         $prototype = isset($this->valuePrototypes[$key]) ? $this->valuePrototypes[$key] : $this->prototype;
         $prototype->setName($key);
diff --git a/vendor/symfony/config/Definition/ScalarNode.php b/vendor/symfony/config/Definition/ScalarNode.php
index 53c1ed29c299d4608333b946866199ac402e0eb1..5ad28ec4c53ab9fb60e30ccd9f17d37a6eea5d9c 100644
--- a/vendor/symfony/config/Definition/ScalarNode.php
+++ b/vendor/symfony/config/Definition/ScalarNode.php
@@ -48,6 +48,20 @@ protected function validateType($value)
      */
     protected function isValueEmpty($value)
     {
+        // assume environment variables are never empty (which in practice is likely to be true during runtime)
+        // not doing so breaks many configs that are valid today
+        if ($this->isHandlingPlaceholder()) {
+            return false;
+        }
+
         return null === $value || '' === $value;
     }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function getValidPlaceholderTypes(): array
+    {
+        return ['bool', 'int', 'float', 'string'];
+    }
 }
diff --git a/vendor/symfony/config/Definition/VariableNode.php b/vendor/symfony/config/Definition/VariableNode.php
index 1a3442d9613db1ca1223c5f659449cb22b608728..5c616f66612b6e8aa9c43dcb5d86fa1e72e5ca77 100644
--- a/vendor/symfony/config/Definition/VariableNode.php
+++ b/vendor/symfony/config/Definition/VariableNode.php
@@ -81,6 +81,19 @@ protected function validateType($value)
      */
     protected function finalizeValue($value)
     {
+        // deny environment variables only when using custom validators
+        // this avoids ever passing an empty value to final validation closures
+        if (!$this->allowEmptyValue && $this->isHandlingPlaceholder() && $this->finalValidationClosures) {
+            @trigger_error(sprintf('Setting path "%s" to an environment variable is deprecated since Symfony 4.3. Remove "cannotBeEmpty()", "validate()" or include a prefix/suffix value instead.', $this->getPath()), \E_USER_DEPRECATED);
+//            $e = new InvalidConfigurationException(sprintf('The path "%s" cannot contain an environment variable when empty values are not allowed by definition and are validated.', $this->getPath()));
+//            if ($hint = $this->getInfo()) {
+//                $e->addHint($hint);
+//            }
+//            $e->setPath($this->getPath());
+//
+//            throw $e;
+        }
+
         if (!$this->allowEmptyValue && $this->isValueEmpty($value)) {
             $ex = new InvalidConfigurationException(sprintf('The path "%s" cannot contain an empty value, but got %s.', $this->getPath(), json_encode($value)));
             if ($hint = $this->getInfo()) {
@@ -120,6 +133,8 @@ protected function mergeValues($leftSide, $rightSide)
      * @param mixed $value
      *
      * @return bool
+     *
+     * @see finalizeValue()
      */
     protected function isValueEmpty($value)
     {
diff --git a/vendor/symfony/config/DependencyInjection/ConfigCachePass.php b/vendor/symfony/config/DependencyInjection/ConfigCachePass.php
deleted file mode 100644
index 128bf7e28cd212011847b45bfdf8eb5545e53213..0000000000000000000000000000000000000000
--- a/vendor/symfony/config/DependencyInjection/ConfigCachePass.php
+++ /dev/null
@@ -1,52 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Config\DependencyInjection;
-
-@trigger_error(sprintf('The %s class is deprecated since Symfony 3.4 and will be removed in 4.0. Use tagged iterator arguments instead.', ConfigCachePass::class), E_USER_DEPRECATED);
-
-use Symfony\Component\DependencyInjection\Argument\IteratorArgument;
-use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
-use Symfony\Component\DependencyInjection\Compiler\PriorityTaggedServiceTrait;
-use Symfony\Component\DependencyInjection\ContainerBuilder;
-
-/**
- * Adds services tagged config_cache.resource_checker to the config_cache_factory service, ordering them by priority.
- *
- * @author Matthias Pigulla <mp@webfactory.de>
- * @author Benjamin Klotz <bk@webfactory.de>
- *
- * @deprecated since version 3.4, to be removed in 4.0. Use tagged iterator arguments instead.
- */
-class ConfigCachePass implements CompilerPassInterface
-{
-    use PriorityTaggedServiceTrait;
-
-    private $factoryServiceId;
-    private $resourceCheckerTag;
-
-    public function __construct($factoryServiceId = 'config_cache_factory', $resourceCheckerTag = 'config_cache.resource_checker')
-    {
-        $this->factoryServiceId = $factoryServiceId;
-        $this->resourceCheckerTag = $resourceCheckerTag;
-    }
-
-    public function process(ContainerBuilder $container)
-    {
-        $resourceCheckers = $this->findAndSortTaggedServices($this->resourceCheckerTag, $container);
-
-        if (empty($resourceCheckers)) {
-            return;
-        }
-
-        $container->getDefinition($this->factoryServiceId)->replaceArgument(0, new IteratorArgument($resourceCheckers));
-    }
-}
diff --git a/vendor/symfony/config/Exception/FileLoaderImportCircularReferenceException.php b/vendor/symfony/config/Exception/FileLoaderImportCircularReferenceException.php
index 6a3b01cfbe097a49bf2bfc03728440b891794aa0..8c5e736524c75ee07d9f3ae5ddb267ba28e5e4e0 100644
--- a/vendor/symfony/config/Exception/FileLoaderImportCircularReferenceException.php
+++ b/vendor/symfony/config/Exception/FileLoaderImportCircularReferenceException.php
@@ -16,9 +16,9 @@
  *
  * @author Fabien Potencier <fabien@symfony.com>
  */
-class FileLoaderImportCircularReferenceException extends FileLoaderLoadException
+class FileLoaderImportCircularReferenceException extends LoaderLoadException
 {
-    public function __construct(array $resources, $code = null, $previous = null)
+    public function __construct(array $resources, int $code = null, \Throwable $previous = null)
     {
         $message = sprintf('Circular reference detected in "%s" ("%s" > "%s").', $this->varToString($resources[0]), implode('" > "', $resources), $resources[0]);
 
diff --git a/vendor/symfony/config/Exception/FileLoaderLoadException.php b/vendor/symfony/config/Exception/FileLoaderLoadException.php
index 82d90eb39b6efe067e0dc760bf3f496a22885007..16beec5930c82c518da5d5a3945944ba8993be6d 100644
--- a/vendor/symfony/config/Exception/FileLoaderLoadException.php
+++ b/vendor/symfony/config/Exception/FileLoaderLoadException.php
@@ -15,6 +15,8 @@
  * Exception class for when a resource cannot be loaded or imported.
  *
  * @author Ryan Weaver <ryan@thatsquality.com>
+ *
+ * @deprecated since Symfony 4.2, use LoaderLoadException instead.
  */
 class FileLoaderLoadException extends \Exception
 {
@@ -22,10 +24,10 @@ class FileLoaderLoadException extends \Exception
      * @param string     $resource       The resource that could not be imported
      * @param string     $sourceResource The original resource importing the new resource
      * @param int        $code           The error code
-     * @param \Exception $previous       A previous exception
+     * @param \Throwable $previous       A previous exception
      * @param string     $type           The type of resource
      */
-    public function __construct($resource, $sourceResource = null, $code = null, $previous = null, $type = null)
+    public function __construct(string $resource, string $sourceResource = null, int $code = null, \Throwable $previous = null, string $type = null)
     {
         $message = '';
         if ($previous) {
@@ -42,17 +44,17 @@ public function __construct($resource, $sourceResource = null, $code = null, $pr
 
             // show tweaked trace to complete the human readable sentence
             if (null === $sourceResource) {
-                $message .= sprintf('(which is loaded in resource "%s")', $this->varToString($resource));
+                $message .= sprintf('(which is loaded in resource "%s")', $resource);
             } else {
-                $message .= sprintf('(which is being imported from "%s")', $this->varToString($sourceResource));
+                $message .= sprintf('(which is being imported from "%s")', $sourceResource);
             }
             $message .= '.';
 
         // if there's no previous message, present it the default way
         } elseif (null === $sourceResource) {
-            $message .= sprintf('Cannot load resource "%s".', $this->varToString($resource));
+            $message .= sprintf('Cannot load resource "%s".', $resource);
         } else {
-            $message .= sprintf('Cannot import resource "%s" from "%s".', $this->varToString($resource), $this->varToString($sourceResource));
+            $message .= sprintf('Cannot import resource "%s" from "%s".', $resource, $sourceResource);
         }
 
         // Is the resource located inside a bundle?
diff --git a/vendor/symfony/config/Exception/FileLocatorFileNotFoundException.php b/vendor/symfony/config/Exception/FileLocatorFileNotFoundException.php
index 648cf0e70769050791b198711eade17f298c343a..3ee4b938f417a3a15126dd16b685142bcc376fd1 100644
--- a/vendor/symfony/config/Exception/FileLocatorFileNotFoundException.php
+++ b/vendor/symfony/config/Exception/FileLocatorFileNotFoundException.php
@@ -20,7 +20,7 @@ class FileLocatorFileNotFoundException extends \InvalidArgumentException
 {
     private $paths;
 
-    public function __construct($message = '', $code = 0, $previous = null, array $paths = [])
+    public function __construct(string $message = '', int $code = 0, \Throwable $previous = null, array $paths = [])
     {
         parent::__construct($message, $code, $previous);
 
diff --git a/vendor/symfony/config/Exception/LoaderLoadException.php b/vendor/symfony/config/Exception/LoaderLoadException.php
new file mode 100644
index 0000000000000000000000000000000000000000..41a959d38df8fc959299b0d4376cffbdf390fc17
--- /dev/null
+++ b/vendor/symfony/config/Exception/LoaderLoadException.php
@@ -0,0 +1,21 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Config\Exception;
+
+/**
+ * Exception class for when a resource cannot be loaded or imported.
+ *
+ * @author Ryan Weaver <ryan@thatsquality.com>
+ */
+class LoaderLoadException extends FileLoaderLoadException
+{
+}
diff --git a/vendor/symfony/config/FileLocator.php b/vendor/symfony/config/FileLocator.php
index c125ba0b1377170c3ac5475af1fd46e5228b3e65..685ec5b6991f2a12548e223165a96e0564ee031b 100644
--- a/vendor/symfony/config/FileLocator.php
+++ b/vendor/symfony/config/FileLocator.php
@@ -23,7 +23,7 @@ class FileLocator implements FileLocatorInterface
     protected $paths;
 
     /**
-     * @param string|array $paths A path or an array of paths where to look for resources
+     * @param string|string[] $paths A path or an array of paths where to look for resources
      */
     public function __construct($paths = [])
     {
@@ -76,19 +76,15 @@ public function locate($name, $currentPath = null, $first = true)
 
     /**
      * Returns whether the file path is an absolute path.
-     *
-     * @param string $file A file path
-     *
-     * @return bool
      */
-    private function isAbsolutePath($file)
+    private function isAbsolutePath(string $file): bool
     {
         if ('/' === $file[0] || '\\' === $file[0]
             || (\strlen($file) > 3 && ctype_alpha($file[0])
                 && ':' === $file[1]
                 && ('\\' === $file[2] || '/' === $file[2])
             )
-            || null !== parse_url($file, PHP_URL_SCHEME)
+            || null !== parse_url($file, \PHP_URL_SCHEME)
         ) {
             return true;
         }
diff --git a/vendor/symfony/config/Loader/DelegatingLoader.php b/vendor/symfony/config/Loader/DelegatingLoader.php
index 452e81c58bf01110901f42e0dc20e0b1a57dca4a..e40e57d7af6aaaf93a362498b7706c6153604503 100644
--- a/vendor/symfony/config/Loader/DelegatingLoader.php
+++ b/vendor/symfony/config/Loader/DelegatingLoader.php
@@ -11,7 +11,7 @@
 
 namespace Symfony\Component\Config\Loader;
 
-use Symfony\Component\Config\Exception\FileLoaderLoadException;
+use Symfony\Component\Config\Exception\LoaderLoadException;
 
 /**
  * DelegatingLoader delegates loading to other loaders using a loader resolver.
@@ -34,7 +34,7 @@ public function __construct(LoaderResolverInterface $resolver)
     public function load($resource, $type = null)
     {
         if (false === $loader = $this->resolver->resolve($resource, $type)) {
-            throw new FileLoaderLoadException($resource, null, null, null, $type);
+            throw new LoaderLoadException($resource, null, null, null, $type);
         }
 
         return $loader->load($resource, $type);
diff --git a/vendor/symfony/config/Loader/FileLoader.php b/vendor/symfony/config/Loader/FileLoader.php
index 2f1d471bddc0e7ba9648576b1d094814a1ae146e..e87230785b2a041f67bc91d2791f49f7948ba7ec 100644
--- a/vendor/symfony/config/Loader/FileLoader.php
+++ b/vendor/symfony/config/Loader/FileLoader.php
@@ -12,8 +12,8 @@
 namespace Symfony\Component\Config\Loader;
 
 use Symfony\Component\Config\Exception\FileLoaderImportCircularReferenceException;
-use Symfony\Component\Config\Exception\FileLoaderLoadException;
 use Symfony\Component\Config\Exception\FileLocatorFileNotFoundException;
+use Symfony\Component\Config\Exception\LoaderLoadException;
 use Symfony\Component\Config\FileLocatorInterface;
 use Symfony\Component\Config\Resource\FileExistenceResource;
 use Symfony\Component\Config\Resource\GlobResource;
@@ -59,23 +59,37 @@ public function getLocator()
     /**
      * Imports a resource.
      *
-     * @param mixed       $resource       A Resource
-     * @param string|null $type           The resource type or null if unknown
-     * @param bool        $ignoreErrors   Whether to ignore import errors or not
-     * @param string|null $sourceResource The original resource importing the new resource
+     * @param mixed                $resource       A Resource
+     * @param string|null          $type           The resource type or null if unknown
+     * @param bool                 $ignoreErrors   Whether to ignore import errors or not
+     * @param string|null          $sourceResource The original resource importing the new resource
+     * @param string|string[]|null $exclude        Glob patterns to exclude from the import
      *
      * @return mixed
      *
-     * @throws FileLoaderLoadException
+     * @throws LoaderLoadException
      * @throws FileLoaderImportCircularReferenceException
      * @throws FileLocatorFileNotFoundException
      */
-    public function import($resource, $type = null, $ignoreErrors = false, $sourceResource = null)
+    public function import($resource, $type = null, $ignoreErrors = false, $sourceResource = null/*, $exclude = null*/)
     {
+        if (\func_num_args() < 5 && __CLASS__ !== static::class && 0 !== strpos(static::class, 'Symfony\Component\\') && __CLASS__ !== (new \ReflectionMethod($this, __FUNCTION__))->getDeclaringClass()->getName() && !$this instanceof \PHPUnit\Framework\MockObject\MockObject && !$this instanceof \Prophecy\Prophecy\ProphecySubjectInterface && !$this instanceof \Mockery\MockInterface) {
+            @trigger_error(sprintf('The "%s()" method will have a new "$exclude = null" argument in version 5.0, not defining it is deprecated since Symfony 4.4.', __METHOD__), \E_USER_DEPRECATED);
+        }
+        $exclude = \func_num_args() >= 5 ? func_get_arg(4) : null;
+
         if (\is_string($resource) && \strlen($resource) !== $i = strcspn($resource, '*?{[')) {
+            $excluded = [];
+            foreach ((array) $exclude as $pattern) {
+                foreach ($this->glob($pattern, true, $_, false, true) as $path => $info) {
+                    // normalize Windows slashes
+                    $excluded[str_replace('\\', '/', $path)] = true;
+                }
+            }
+
             $ret = [];
             $isSubpath = 0 !== $i && false !== strpos(substr($resource, 0, $i), '/');
-            foreach ($this->glob($resource, false, $_, $ignoreErrors || !$isSubpath) as $path => $info) {
+            foreach ($this->glob($resource, false, $_, $ignoreErrors || !$isSubpath, false, $excluded) as $path => $info) {
                 if (null !== $res = $this->doImport($path, 'glob' === $type ? null : $type, $ignoreErrors, $sourceResource)) {
                     $ret[] = $res;
                 }
@@ -93,7 +107,7 @@ public function import($resource, $type = null, $ignoreErrors = false, $sourceRe
     /**
      * @internal
      */
-    protected function glob($pattern, $recursive, &$resource = null, $ignoreErrors = false)
+    protected function glob(string $pattern, bool $recursive, &$resource = null, bool $ignoreErrors = false, bool $forExclusion = false, array $excluded = [])
     {
         if (\strlen($pattern) === $i = strcspn($pattern, '*?{[')) {
             $prefix = $pattern;
@@ -120,14 +134,12 @@ protected function glob($pattern, $recursive, &$resource = null, $ignoreErrors =
 
             return;
         }
-        $resource = new GlobResource($prefix, $pattern, $recursive);
+        $resource = new GlobResource($prefix, $pattern, $recursive, $forExclusion, $excluded);
 
-        foreach ($resource as $path => $info) {
-            yield $path => $info;
-        }
+        yield from $resource;
     }
 
-    private function doImport($resource, $type = null, $ignoreErrors = false, $sourceResource = null)
+    private function doImport($resource, string $type = null, bool $ignoreErrors = false, $sourceResource = null)
     {
         try {
             $loader = $this->resolve($resource, $type);
@@ -161,11 +173,11 @@ private function doImport($resource, $type = null, $ignoreErrors = false, $sourc
         } catch (\Exception $e) {
             if (!$ignoreErrors) {
                 // prevent embedded imports from nesting multiple exceptions
-                if ($e instanceof FileLoaderLoadException) {
+                if ($e instanceof LoaderLoadException) {
                     throw $e;
                 }
 
-                throw new FileLoaderLoadException($resource, $sourceResource, null, $e, $type);
+                throw new LoaderLoadException($resource, $sourceResource, null, $e, $type);
             }
         }
 
diff --git a/vendor/symfony/config/Loader/Loader.php b/vendor/symfony/config/Loader/Loader.php
index d2f2ec90b9b033e93cb5b5a3939b0572b125d1eb..698ab40afbf3dfe49372e71ae7a88c4aed4ad92c 100644
--- a/vendor/symfony/config/Loader/Loader.php
+++ b/vendor/symfony/config/Loader/Loader.php
@@ -11,7 +11,7 @@
 
 namespace Symfony\Component\Config\Loader;
 
-use Symfony\Component\Config\Exception\FileLoaderLoadException;
+use Symfony\Component\Config\Exception\LoaderLoadException;
 
 /**
  * Loader is the abstract class used by all built-in loaders.
@@ -59,7 +59,7 @@ public function import($resource, $type = null)
      *
      * @return $this|LoaderInterface
      *
-     * @throws FileLoaderLoadException If no loader is found
+     * @throws LoaderLoadException If no loader is found
      */
     public function resolve($resource, $type = null)
     {
@@ -70,7 +70,7 @@ public function resolve($resource, $type = null)
         $loader = null === $this->resolver ? false : $this->resolver->resolve($resource, $type);
 
         if (false === $loader) {
-            throw new FileLoaderLoadException($resource, null, null, null, $type);
+            throw new LoaderLoadException($resource, null, null, null, $type);
         }
 
         return $loader;
diff --git a/vendor/symfony/config/Resource/ClassExistenceResource.php b/vendor/symfony/config/Resource/ClassExistenceResource.php
index fc0259f418922cfe35a2dccb0560f87ba114e63e..da76a7b780637351ddcae516ba1411196656eda0 100644
--- a/vendor/symfony/config/Resource/ClassExistenceResource.php
+++ b/vendor/symfony/config/Resource/ClassExistenceResource.php
@@ -18,8 +18,10 @@
  * The resource must be a fully-qualified class name.
  *
  * @author Fabien Potencier <fabien@symfony.com>
+ *
+ * @final since Symfony 4.3
  */
-class ClassExistenceResource implements SelfCheckingResourceInterface, \Serializable
+class ClassExistenceResource implements SelfCheckingResourceInterface
 {
     private $resource;
     private $exists;
@@ -32,7 +34,7 @@ class ClassExistenceResource implements SelfCheckingResourceInterface, \Serializ
      * @param string    $resource The fully-qualified class name
      * @param bool|null $exists   Boolean when the existency check has already been done
      */
-    public function __construct($resource, $exists = null)
+    public function __construct(string $resource, bool $exists = null)
     {
         $this->resource = $resource;
         if (null !== $exists) {
@@ -112,22 +114,20 @@ public function isFresh($timestamp)
     /**
      * @internal
      */
-    public function serialize()
+    public function __sleep(): array
     {
         if (null === $this->exists) {
             $this->isFresh(0);
         }
 
-        return serialize([$this->resource, $this->exists]);
+        return ['resource', 'exists'];
     }
 
     /**
      * @internal
      */
-    public function unserialize($serialized)
+    public function __wakeup()
     {
-        list($this->resource, $this->exists) = unserialize($serialized);
-
         if (\is_bool($this->exists)) {
             $this->exists = [$this->exists, null];
         }
@@ -190,12 +190,17 @@ public static function throwOnRequiredClass($class, \Exception $previous = null)
             'args' => [$class],
         ];
 
-        if (false === $i = array_search($autoloadFrame, $trace, true)) {
+        if (\PHP_VERSION_ID >= 80000 && isset($trace[1])) {
+            $callerFrame = $trace[1];
+            $i = 2;
+        } elseif (false !== $i = array_search($autoloadFrame, $trace, true)) {
+            $callerFrame = $trace[++$i];
+        } else {
             throw $e;
         }
 
-        if (isset($trace[++$i]['function']) && !isset($trace[$i]['class'])) {
-            switch ($trace[$i]['function']) {
+        if (isset($callerFrame['function']) && !isset($callerFrame['class'])) {
+            switch ($callerFrame['function']) {
                 case 'get_class_methods':
                 case 'get_class_vars':
                 case 'get_parent_class':
@@ -214,8 +219,8 @@ public static function throwOnRequiredClass($class, \Exception $previous = null)
             }
 
             $props = [
-                'file' => isset($trace[$i]['file']) ? $trace[$i]['file'] : null,
-                'line' => isset($trace[$i]['line']) ? $trace[$i]['line'] : null,
+                'file' => isset($callerFrame['file']) ? $callerFrame['file'] : null,
+                'line' => isset($callerFrame['line']) ? $callerFrame['line'] : null,
                 'trace' => \array_slice($trace, 1 + $i),
             ];
 
diff --git a/vendor/symfony/config/Resource/ComposerResource.php b/vendor/symfony/config/Resource/ComposerResource.php
index 9fb304bea8f0602c8742811d4d15b59923e274b0..822766b75b1cb3c51352af827a9d59cc15f56490 100644
--- a/vendor/symfony/config/Resource/ComposerResource.php
+++ b/vendor/symfony/config/Resource/ComposerResource.php
@@ -15,8 +15,10 @@
  * ComposerResource tracks the PHP version and Composer dependencies.
  *
  * @author Nicolas Grekas <p@tchwork.com>
+ *
+ * @final since Symfony 4.3
  */
-class ComposerResource implements SelfCheckingResourceInterface, \Serializable
+class ComposerResource implements SelfCheckingResourceInterface
 {
     private $vendors;
 
@@ -51,22 +53,6 @@ public function isFresh($timestamp)
         return array_values(self::$runtimeVendors) === array_values($this->vendors);
     }
 
-    /**
-     * @internal
-     */
-    public function serialize()
-    {
-        return serialize($this->vendors);
-    }
-
-    /**
-     * @internal
-     */
-    public function unserialize($serialized)
-    {
-        $this->vendors = unserialize($serialized);
-    }
-
     private static function refresh()
     {
         self::$runtimeVendors = [];
@@ -74,7 +60,7 @@ private static function refresh()
         foreach (get_declared_classes() as $class) {
             if ('C' === $class[0] && 0 === strpos($class, 'ComposerAutoloaderInit')) {
                 $r = new \ReflectionClass($class);
-                $v = \dirname(\dirname($r->getFileName()));
+                $v = \dirname($r->getFileName(), 2);
                 if (file_exists($v.'/composer/installed.json')) {
                     self::$runtimeVendors[$v] = @filemtime($v.'/composer/installed.json');
                 }
diff --git a/vendor/symfony/config/Resource/DirectoryResource.php b/vendor/symfony/config/Resource/DirectoryResource.php
index e79b19ec2d7a0fa65c8a8e293988612e07cdaa01..3d703db7f6ebe835e7d6cf44efc1c7c18a730b18 100644
--- a/vendor/symfony/config/Resource/DirectoryResource.php
+++ b/vendor/symfony/config/Resource/DirectoryResource.php
@@ -15,8 +15,10 @@
  * DirectoryResource represents a resources stored in a subdirectory tree.
  *
  * @author Fabien Potencier <fabien@symfony.com>
+ *
+ * @final since Symfony 4.3
  */
-class DirectoryResource implements SelfCheckingResourceInterface, \Serializable
+class DirectoryResource implements SelfCheckingResourceInterface
 {
     private $resource;
     private $pattern;
@@ -27,7 +29,7 @@ class DirectoryResource implements SelfCheckingResourceInterface, \Serializable
      *
      * @throws \InvalidArgumentException
      */
-    public function __construct($resource, $pattern = null)
+    public function __construct(string $resource, string $pattern = null)
     {
         $this->resource = realpath($resource) ?: (file_exists($resource) ? $resource : false);
         $this->pattern = $pattern;
@@ -103,20 +105,4 @@ public function isFresh($timestamp)
 
         return true;
     }
-
-    /**
-     * @internal
-     */
-    public function serialize()
-    {
-        return serialize([$this->resource, $this->pattern]);
-    }
-
-    /**
-     * @internal
-     */
-    public function unserialize($serialized)
-    {
-        list($this->resource, $this->pattern) = unserialize($serialized);
-    }
 }
diff --git a/vendor/symfony/config/Resource/FileExistenceResource.php b/vendor/symfony/config/Resource/FileExistenceResource.php
index 34047651b7022324cc3973375420eb8d867194d8..57234161588c7e00ff288650c4df5e639cd3b436 100644
--- a/vendor/symfony/config/Resource/FileExistenceResource.php
+++ b/vendor/symfony/config/Resource/FileExistenceResource.php
@@ -18,8 +18,10 @@
  * The resource can be a file or a directory.
  *
  * @author Charles-Henri Bruyand <charleshenri.bruyand@gmail.com>
+ *
+ * @final since Symfony 4.3
  */
-class FileExistenceResource implements SelfCheckingResourceInterface, \Serializable
+class FileExistenceResource implements SelfCheckingResourceInterface
 {
     private $resource;
 
@@ -28,9 +30,9 @@ class FileExistenceResource implements SelfCheckingResourceInterface, \Serializa
     /**
      * @param string $resource The file path to the resource
      */
-    public function __construct($resource)
+    public function __construct(string $resource)
     {
-        $this->resource = (string) $resource;
+        $this->resource = $resource;
         $this->exists = file_exists($resource);
     }
 
@@ -57,20 +59,4 @@ public function isFresh($timestamp)
     {
         return file_exists($this->resource) === $this->exists;
     }
-
-    /**
-     * @internal
-     */
-    public function serialize()
-    {
-        return serialize([$this->resource, $this->exists]);
-    }
-
-    /**
-     * @internal
-     */
-    public function unserialize($serialized)
-    {
-        list($this->resource, $this->exists) = unserialize($serialized);
-    }
 }
diff --git a/vendor/symfony/config/Resource/FileResource.php b/vendor/symfony/config/Resource/FileResource.php
index bee062377b6b26f8444820f941578bd80f747574..95fe8a0bf802c18bcd9362bf6440e1b1abbfd51d 100644
--- a/vendor/symfony/config/Resource/FileResource.php
+++ b/vendor/symfony/config/Resource/FileResource.php
@@ -17,8 +17,10 @@
  * The resource can be a file or a directory.
  *
  * @author Fabien Potencier <fabien@symfony.com>
+ *
+ * @final since Symfony 4.3
  */
-class FileResource implements SelfCheckingResourceInterface, \Serializable
+class FileResource implements SelfCheckingResourceInterface
 {
     /**
      * @var string|false
@@ -30,7 +32,7 @@ class FileResource implements SelfCheckingResourceInterface, \Serializable
      *
      * @throws \InvalidArgumentException
      */
-    public function __construct($resource)
+    public function __construct(string $resource)
     {
         $this->resource = realpath($resource) ?: (file_exists($resource) ? $resource : false);
 
@@ -62,20 +64,4 @@ public function isFresh($timestamp)
     {
         return false !== ($filemtime = @filemtime($this->resource)) && $filemtime <= $timestamp;
     }
-
-    /**
-     * @internal
-     */
-    public function serialize()
-    {
-        return serialize($this->resource);
-    }
-
-    /**
-     * @internal
-     */
-    public function unserialize($serialized)
-    {
-        $this->resource = unserialize($serialized);
-    }
 }
diff --git a/vendor/symfony/config/Resource/GlobResource.php b/vendor/symfony/config/Resource/GlobResource.php
index 13d2ee7d703d737610fbe8e8c6e06c5f5877c532..f825a9291155809a102ef558af899170920bec94 100644
--- a/vendor/symfony/config/Resource/GlobResource.php
+++ b/vendor/symfony/config/Resource/GlobResource.php
@@ -20,13 +20,18 @@
  * Only existence/removal is tracked (not mtimes.)
  *
  * @author Nicolas Grekas <p@tchwork.com>
+ *
+ * @final since Symfony 4.3
  */
-class GlobResource implements \IteratorAggregate, SelfCheckingResourceInterface, \Serializable
+class GlobResource implements \IteratorAggregate, SelfCheckingResourceInterface
 {
     private $prefix;
     private $pattern;
     private $recursive;
     private $hash;
+    private $forExclusion;
+    private $excludedPrefixes;
+    private $globBrace;
 
     /**
      * @param string $prefix    A directory prefix
@@ -35,11 +40,15 @@ class GlobResource implements \IteratorAggregate, SelfCheckingResourceInterface,
      *
      * @throws \InvalidArgumentException
      */
-    public function __construct($prefix, $pattern, $recursive)
+    public function __construct(string $prefix, string $pattern, bool $recursive, bool $forExclusion = false, array $excludedPrefixes = [])
     {
+        ksort($excludedPrefixes);
         $this->prefix = realpath($prefix) ?: (file_exists($prefix) ? $prefix : false);
         $this->pattern = $pattern;
         $this->recursive = $recursive;
+        $this->forExclusion = $forExclusion;
+        $this->excludedPrefixes = $excludedPrefixes;
+        $this->globBrace = \defined('GLOB_BRACE') ? \GLOB_BRACE : 0;
 
         if (false === $this->prefix) {
             throw new \InvalidArgumentException(sprintf('The path "%s" does not exist.', $prefix));
@@ -56,7 +65,7 @@ public function getPrefix()
      */
     public function __toString()
     {
-        return 'glob.'.$this->prefix.$this->pattern.(int) $this->recursive;
+        return 'glob.'.$this->prefix.(int) $this->recursive.$this->pattern.(int) $this->forExclusion.implode("\0", $this->excludedPrefixes);
     }
 
     /**
@@ -76,52 +85,85 @@ public function isFresh($timestamp)
     /**
      * @internal
      */
-    public function serialize()
+    public function __sleep(): array
     {
         if (null === $this->hash) {
             $this->hash = $this->computeHash();
         }
 
-        return serialize([$this->prefix, $this->pattern, $this->recursive, $this->hash]);
+        return ['prefix', 'pattern', 'recursive', 'hash', 'forExclusion', 'excludedPrefixes'];
     }
 
     /**
      * @internal
      */
-    public function unserialize($serialized)
+    public function __wakeup(): void
     {
-        list($this->prefix, $this->pattern, $this->recursive, $this->hash) = unserialize($serialized);
+        $this->globBrace = \defined('GLOB_BRACE') ? \GLOB_BRACE : 0;
     }
 
+    /**
+     * @return \Traversable
+     */
     public function getIterator()
     {
         if (!file_exists($this->prefix) || (!$this->recursive && '' === $this->pattern)) {
             return;
         }
+        $prefix = str_replace('\\', '/', $this->prefix);
+        $paths = null;
+
+        if (0 !== strpos($this->prefix, 'phar://') && false === strpos($this->pattern, '/**/')) {
+            if ($this->globBrace || false === strpos($this->pattern, '{')) {
+                $paths = glob($this->prefix.$this->pattern, \GLOB_NOSORT | $this->globBrace);
+            } elseif (false === strpos($this->pattern, '\\') || !preg_match('/\\\\[,{}]/', $this->pattern)) {
+                foreach ($this->expandGlob($this->pattern) as $p) {
+                    $paths[] = glob($this->prefix.$p, \GLOB_NOSORT);
+                }
+                $paths = array_merge(...$paths);
+            }
+        }
 
-        if (0 !== strpos($this->prefix, 'phar://') && false === strpos($this->pattern, '/**/') && (\defined('GLOB_BRACE') || false === strpos($this->pattern, '{'))) {
-            $paths = glob($this->prefix.$this->pattern, GLOB_NOSORT | (\defined('GLOB_BRACE') ? GLOB_BRACE : 0));
+        if (null !== $paths) {
             sort($paths);
             foreach ($paths as $path) {
-                if ($this->recursive && is_dir($path)) {
-                    $files = iterator_to_array(new \RecursiveIteratorIterator(
-                        new \RecursiveCallbackFilterIterator(
-                            new \RecursiveDirectoryIterator($path, \FilesystemIterator::SKIP_DOTS | \FilesystemIterator::FOLLOW_SYMLINKS),
-                            function (\SplFileInfo $file) { return '.' !== $file->getBasename()[0]; }
-                        ),
-                        \RecursiveIteratorIterator::LEAVES_ONLY
-                    ));
-                    uasort($files, function (\SplFileInfo $a, \SplFileInfo $b) {
-                        return (string) $a > (string) $b ? 1 : -1;
-                    });
-
-                    foreach ($files as $path => $info) {
-                        if ($info->isFile()) {
-                            yield $path => $info;
+                if ($this->excludedPrefixes) {
+                    $normalizedPath = str_replace('\\', '/', $path);
+                    do {
+                        if (isset($this->excludedPrefixes[$dirPath = $normalizedPath])) {
+                            continue 2;
                         }
-                    }
-                } elseif (is_file($path)) {
+                    } while ($prefix !== $dirPath && $dirPath !== $normalizedPath = \dirname($dirPath));
+                }
+
+                if (is_file($path)) {
+                    yield $path => new \SplFileInfo($path);
+                }
+                if (!is_dir($path)) {
+                    continue;
+                }
+                if ($this->forExclusion) {
                     yield $path => new \SplFileInfo($path);
+                    continue;
+                }
+                if (!$this->recursive || isset($this->excludedPrefixes[str_replace('\\', '/', $path)])) {
+                    continue;
+                }
+                $files = iterator_to_array(new \RecursiveIteratorIterator(
+                    new \RecursiveCallbackFilterIterator(
+                        new \RecursiveDirectoryIterator($path, \FilesystemIterator::SKIP_DOTS | \FilesystemIterator::FOLLOW_SYMLINKS),
+                        function (\SplFileInfo $file, $path) {
+                            return !isset($this->excludedPrefixes[str_replace('\\', '/', $path)]) && '.' !== $file->getBasename()[0];
+                        }
+                    ),
+                    \RecursiveIteratorIterator::LEAVES_ONLY
+                ));
+                uasort($files, 'strnatcmp');
+
+                foreach ($files as $path => $info) {
+                    if ($info->isFile()) {
+                        yield $path => $info;
+                    }
                 }
             }
 
@@ -140,13 +182,23 @@ function (\SplFileInfo $file) { return '.' !== $file->getBasename()[0]; }
 
         $prefixLen = \strlen($this->prefix);
         foreach ($finder->followLinks()->sortByName()->in($this->prefix) as $path => $info) {
-            if (preg_match($regex, substr('\\' === \DIRECTORY_SEPARATOR ? str_replace('\\', '/', $path) : $path, $prefixLen)) && $info->isFile()) {
-                yield $path => $info;
+            $normalizedPath = str_replace('\\', '/', $path);
+            if (!preg_match($regex, substr($normalizedPath, $prefixLen)) || !$info->isFile()) {
+                continue;
             }
+            if ($this->excludedPrefixes) {
+                do {
+                    if (isset($this->excludedPrefixes[$dirPath = $normalizedPath])) {
+                        continue 2;
+                    }
+                } while ($prefix !== $dirPath && $dirPath !== $normalizedPath = \dirname($dirPath));
+            }
+
+            yield $path => $info;
         }
     }
 
-    private function computeHash()
+    private function computeHash(): string
     {
         $hash = hash_init('md5');
 
@@ -156,4 +208,34 @@ private function computeHash()
 
         return hash_final($hash);
     }
+
+    private function expandGlob(string $pattern): array
+    {
+        $segments = preg_split('/\{([^{}]*+)\}/', $pattern, -1, \PREG_SPLIT_DELIM_CAPTURE);
+        $paths = [$segments[0]];
+        $patterns = [];
+
+        for ($i = 1; $i < \count($segments); $i += 2) {
+            $patterns = [];
+
+            foreach (explode(',', $segments[$i]) as $s) {
+                foreach ($paths as $p) {
+                    $patterns[] = $p.$s.$segments[1 + $i];
+                }
+            }
+
+            $paths = $patterns;
+        }
+
+        $j = 0;
+        foreach ($patterns as $i => $p) {
+            if (false !== strpos($p, '{')) {
+                $p = $this->expandGlob($p);
+                array_splice($paths, $i + $j, 1, $p);
+                $j += \count($p) - 1;
+            }
+        }
+
+        return $paths;
+    }
 }
diff --git a/vendor/symfony/config/Resource/ReflectionClassResource.php b/vendor/symfony/config/Resource/ReflectionClassResource.php
index cfab1f6c10a655571a1e0c2ed32019ead5754216..2b58bd663258d73a06d90a15fdf7381754bce1d1 100644
--- a/vendor/symfony/config/Resource/ReflectionClassResource.php
+++ b/vendor/symfony/config/Resource/ReflectionClassResource.php
@@ -11,13 +11,17 @@
 
 namespace Symfony\Component\Config\Resource;
 
-use Symfony\Component\DependencyInjection\ServiceSubscriberInterface;
+use Symfony\Component\DependencyInjection\ServiceSubscriberInterface as LegacyServiceSubscriberInterface;
 use Symfony\Component\EventDispatcher\EventSubscriberInterface;
+use Symfony\Component\Messenger\Handler\MessageSubscriberInterface;
+use Symfony\Contracts\Service\ServiceSubscriberInterface;
 
 /**
  * @author Nicolas Grekas <p@tchwork.com>
+ *
+ * @final since Symfony 4.3
  */
-class ReflectionClassResource implements SelfCheckingResourceInterface, \Serializable
+class ReflectionClassResource implements SelfCheckingResourceInterface
 {
     private $files = [];
     private $className;
@@ -25,7 +29,7 @@ class ReflectionClassResource implements SelfCheckingResourceInterface, \Seriali
     private $excludedVendors = [];
     private $hash;
 
-    public function __construct(\ReflectionClass $classReflector, $excludedVendors = [])
+    public function __construct(\ReflectionClass $classReflector, array $excludedVendors = [])
     {
         $this->className = $classReflector->name;
         $this->classReflector = $classReflector;
@@ -60,22 +64,14 @@ public function __toString()
     /**
      * @internal
      */
-    public function serialize()
+    public function __sleep(): array
     {
         if (null === $this->hash) {
             $this->hash = $this->computeHash();
             $this->loadFiles($this->classReflector);
         }
 
-        return serialize([$this->files, $this->className, $this->hash]);
-    }
-
-    /**
-     * @internal
-     */
-    public function unserialize($serialized)
-    {
-        list($this->files, $this->className, $this->hash) = unserialize($serialized);
+        return ['files', 'className', 'hash'];
     }
 
     private function loadFiles(\ReflectionClass $class)
@@ -102,7 +98,7 @@ private function loadFiles(\ReflectionClass $class)
         } while ($class = $class->getParentClass());
     }
 
-    private function computeHash()
+    private function computeHash(): string
     {
         if (null === $this->classReflector) {
             try {
@@ -121,7 +117,7 @@ private function computeHash()
         return hash_final($hash);
     }
 
-    private function generateSignature(\ReflectionClass $class)
+    private function generateSignature(\ReflectionClass $class): iterable
     {
         yield $class->getDocComment();
         yield (int) $class->isFinal();
@@ -148,65 +144,60 @@ private function generateSignature(\ReflectionClass $class)
             }
         }
 
-        if (\defined('HHVM_VERSION')) {
-            foreach ($class->getMethods(\ReflectionMethod::IS_PUBLIC | \ReflectionMethod::IS_PROTECTED) as $m) {
-                // workaround HHVM bug with variadics, see https://github.com/facebook/hhvm/issues/5762
-                yield preg_replace('/^  @@.*/m', '', new ReflectionMethodHhvmWrapper($m->class, $m->name));
-            }
-        } else {
-            foreach ($class->getMethods(\ReflectionMethod::IS_PUBLIC | \ReflectionMethod::IS_PROTECTED) as $m) {
-                $defaults = [];
-                $parametersWithUndefinedConstants = [];
-                foreach ($m->getParameters() as $p) {
-                    if (!$p->isDefaultValueAvailable()) {
-                        $defaults[$p->name] = null;
+        foreach ($class->getMethods(\ReflectionMethod::IS_PUBLIC | \ReflectionMethod::IS_PROTECTED) as $m) {
+            $defaults = [];
+            $parametersWithUndefinedConstants = [];
+            foreach ($m->getParameters() as $p) {
+                if (!$p->isDefaultValueAvailable()) {
+                    $defaults[$p->name] = null;
 
-                        continue;
-                    }
+                    continue;
+                }
 
-                    if (!$p->isDefaultValueConstant() || \defined($p->getDefaultValueConstantName())) {
-                        $defaults[$p->name] = $p->getDefaultValue();
+                if (!$p->isDefaultValueConstant() || \defined($p->getDefaultValueConstantName())) {
+                    $defaults[$p->name] = $p->getDefaultValue();
 
-                        continue;
-                    }
-
-                    $defaults[$p->name] = $p->getDefaultValueConstantName();
-                    $parametersWithUndefinedConstants[$p->name] = true;
+                    continue;
                 }
 
-                if (!$parametersWithUndefinedConstants) {
-                    yield preg_replace('/^  @@.*/m', '', $m);
-                } else {
-                    $stack = [
-                        $m->getDocComment(),
-                        $m->getName(),
-                        $m->isAbstract(),
-                        $m->isFinal(),
-                        $m->isStatic(),
-                        $m->isPublic(),
-                        $m->isPrivate(),
-                        $m->isProtected(),
-                        $m->returnsReference(),
-                        \PHP_VERSION_ID >= 70000 && $m->hasReturnType() ? (\PHP_VERSION_ID >= 70100 ? $m->getReturnType()->getName() : (string) $m->getReturnType()) : '',
-                    ];
-
-                    foreach ($m->getParameters() as $p) {
-                        if (!isset($parametersWithUndefinedConstants[$p->name])) {
-                            $stack[] = (string) $p;
-                        } else {
-                            $stack[] = $p->isOptional();
-                            $stack[] = \PHP_VERSION_ID >= 70000 && $p->hasType() ? (\PHP_VERSION_ID >= 70100 ? $p->getType()->getName() : (string) $p->getType()) : '';
-                            $stack[] = $p->isPassedByReference();
-                            $stack[] = \PHP_VERSION_ID >= 50600 ? $p->isVariadic() : '';
-                            $stack[] = $p->getName();
-                        }
-                    }
+                $defaults[$p->name] = $p->getDefaultValueConstantName();
+                $parametersWithUndefinedConstants[$p->name] = true;
+            }
+
+            if (!$parametersWithUndefinedConstants) {
+                yield preg_replace('/^  @@.*/m', '', $m);
+            } else {
+                $t = $m->getReturnType();
+                $stack = [
+                    $m->getDocComment(),
+                    $m->getName(),
+                    $m->isAbstract(),
+                    $m->isFinal(),
+                    $m->isStatic(),
+                    $m->isPublic(),
+                    $m->isPrivate(),
+                    $m->isProtected(),
+                    $m->returnsReference(),
+                    $t instanceof \ReflectionNamedType ? ((string) $t->allowsNull()).$t->getName() : (string) $t,
+                ];
 
-                    yield implode(',', $stack);
+                foreach ($m->getParameters() as $p) {
+                    if (!isset($parametersWithUndefinedConstants[$p->name])) {
+                        $stack[] = (string) $p;
+                    } else {
+                        $t = $p->getType();
+                        $stack[] = $p->isOptional();
+                        $stack[] = $t instanceof \ReflectionNamedType ? ((string) $t->allowsNull()).$t->getName() : (string) $t;
+                        $stack[] = $p->isPassedByReference();
+                        $stack[] = $p->isVariadic();
+                        $stack[] = $p->getName();
+                    }
                 }
 
-                yield print_r($defaults, true);
+                yield implode(',', $stack);
             }
+
+            yield print_r($defaults, true);
         }
 
         if ($class->isAbstract() || $class->isInterface() || $class->isTrait()) {
@@ -215,40 +206,22 @@ private function generateSignature(\ReflectionClass $class)
 
         if (interface_exists(EventSubscriberInterface::class, false) && $class->isSubclassOf(EventSubscriberInterface::class)) {
             yield EventSubscriberInterface::class;
-            yield print_r(\call_user_func([$class->name, 'getSubscribedEvents']), true);
+            yield print_r($class->name::getSubscribedEvents(), true);
         }
 
-        if (interface_exists(ServiceSubscriberInterface::class, false) && $class->isSubclassOf(ServiceSubscriberInterface::class)) {
-            yield ServiceSubscriberInterface::class;
-            yield print_r(\call_user_func([$class->name, 'getSubscribedServices']), true);
+        if (interface_exists(MessageSubscriberInterface::class, false) && $class->isSubclassOf(MessageSubscriberInterface::class)) {
+            yield MessageSubscriberInterface::class;
+            foreach ($class->name::getHandledMessages() as $key => $value) {
+                yield $key.print_r($value, true);
+            }
         }
-    }
-}
-
-/**
- * @internal
- */
-class ReflectionMethodHhvmWrapper extends \ReflectionMethod
-{
-    public function getParameters()
-    {
-        $params = [];
 
-        foreach (parent::getParameters() as $i => $p) {
-            $params[] = new ReflectionParameterHhvmWrapper([$this->class, $this->name], $i);
+        if (interface_exists(LegacyServiceSubscriberInterface::class, false) && $class->isSubclassOf(LegacyServiceSubscriberInterface::class)) {
+            yield LegacyServiceSubscriberInterface::class;
+            yield print_r([$class->name, 'getSubscribedServices'](), true);
+        } elseif (interface_exists(ServiceSubscriberInterface::class, false) && $class->isSubclassOf(ServiceSubscriberInterface::class)) {
+            yield ServiceSubscriberInterface::class;
+            yield print_r($class->name::getSubscribedServices(), true);
         }
-
-        return $params;
-    }
-}
-
-/**
- * @internal
- */
-class ReflectionParameterHhvmWrapper extends \ReflectionParameter
-{
-    public function getDefaultValue()
-    {
-        return [$this->isVariadic(), $this->isDefaultValueAvailable() ? parent::getDefaultValue() : null];
     }
 }
diff --git a/vendor/symfony/config/ResourceCheckerConfigCache.php b/vendor/symfony/config/ResourceCheckerConfigCache.php
index 092b95bf0188b17ba38c63db81f8da267ccef189..d41b3c43c743e1661a0457c9a6582e75f065b364 100644
--- a/vendor/symfony/config/ResourceCheckerConfigCache.php
+++ b/vendor/symfony/config/ResourceCheckerConfigCache.php
@@ -37,7 +37,7 @@ class ResourceCheckerConfigCache implements ConfigCacheInterface
      * @param string                              $file             The absolute cache path
      * @param iterable|ResourceCheckerInterface[] $resourceCheckers The ResourceCheckers to use for the freshness check
      */
-    public function __construct($file, $resourceCheckers = [])
+    public function __construct(string $file, iterable $resourceCheckers = [])
     {
         $this->file = $file;
         $this->resourceCheckers = $resourceCheckers;
@@ -137,28 +137,25 @@ public function write($content, array $metadata = null)
             }
         }
 
-        if (\function_exists('opcache_invalidate') && filter_var(ini_get('opcache.enable'), FILTER_VALIDATE_BOOLEAN)) {
+        if (\function_exists('opcache_invalidate') && filter_var(ini_get('opcache.enable'), \FILTER_VALIDATE_BOOLEAN)) {
             @opcache_invalidate($this->file, true);
         }
     }
 
     /**
      * Gets the meta file path.
-     *
-     * @return string The meta file path
      */
-    private function getMetaFile()
+    private function getMetaFile(): string
     {
         return $this->file.'.meta';
     }
 
-    private function safelyUnserialize($file)
+    private function safelyUnserialize(string $file)
     {
-        $e = null;
         $meta = false;
         $content = file_get_contents($file);
         $signalingException = new \UnexpectedValueException();
-        $prevUnserializeHandler = ini_set('unserialize_callback_func', '');
+        $prevUnserializeHandler = ini_set('unserialize_callback_func', self::class.'::handleUnserializeCallback');
         $prevErrorHandler = set_error_handler(function ($type, $msg, $file, $line, $context = []) use (&$prevErrorHandler, $signalingException) {
             if (__FILE__ === $file) {
                 throw $signalingException;
@@ -169,15 +166,23 @@ private function safelyUnserialize($file)
 
         try {
             $meta = unserialize($content);
-        } catch (\Error $e) {
-        } catch (\Exception $e) {
-        }
-        restore_error_handler();
-        ini_set('unserialize_callback_func', $prevUnserializeHandler);
-        if (null !== $e && $e !== $signalingException) {
-            throw $e;
+        } catch (\Throwable $e) {
+            if ($e !== $signalingException) {
+                throw $e;
+            }
+        } finally {
+            restore_error_handler();
+            ini_set('unserialize_callback_func', $prevUnserializeHandler);
         }
 
         return $meta;
     }
+
+    /**
+     * @internal
+     */
+    public static function handleUnserializeCallback($class)
+    {
+        trigger_error('Class not found: '.$class);
+    }
 }
diff --git a/vendor/symfony/config/ResourceCheckerConfigCacheFactory.php b/vendor/symfony/config/ResourceCheckerConfigCacheFactory.php
index c00fa7db1b037c81dcbea16836d63792bb8d98a7..0338635ff5a628abddff310ae9d6c420d93707d8 100644
--- a/vendor/symfony/config/ResourceCheckerConfigCacheFactory.php
+++ b/vendor/symfony/config/ResourceCheckerConfigCacheFactory.php
@@ -24,7 +24,7 @@ class ResourceCheckerConfigCacheFactory implements ConfigCacheFactoryInterface
     /**
      * @param iterable|ResourceCheckerInterface[] $resourceCheckers
      */
-    public function __construct($resourceCheckers = [])
+    public function __construct(iterable $resourceCheckers = [])
     {
         $this->resourceCheckers = $resourceCheckers;
     }
@@ -40,7 +40,7 @@ public function cache($file, $callback)
 
         $cache = new ResourceCheckerConfigCache($file, $this->resourceCheckers);
         if (!$cache->isFresh()) {
-            \call_user_func($callback, $cache);
+            $callback($cache);
         }
 
         return $cache;
diff --git a/vendor/symfony/config/ResourceCheckerInterface.php b/vendor/symfony/config/ResourceCheckerInterface.php
index 612d77786446a492c417c5700868a900b49762b5..ac0d402495e7f72cfcd3dd02639b4cb5f451fc62 100644
--- a/vendor/symfony/config/ResourceCheckerInterface.php
+++ b/vendor/symfony/config/ResourceCheckerInterface.php
@@ -30,8 +30,6 @@ interface ResourceCheckerInterface
      * Queries the ResourceChecker whether it can validate a given
      * resource or not.
      *
-     * @param ResourceInterface $metadata The resource to be checked for freshness
-     *
      * @return bool True if the ResourceChecker can handle this resource type, false if not
      */
     public function supports(ResourceInterface $metadata);
@@ -39,8 +37,7 @@ public function supports(ResourceInterface $metadata);
     /**
      * Validates the resource.
      *
-     * @param ResourceInterface $resource  The resource to be validated
-     * @param int               $timestamp The timestamp at which the cache associated with this resource was created
+     * @param int $timestamp The timestamp at which the cache associated with this resource was created
      *
      * @return bool True if the resource has not changed since the given timestamp, false otherwise
      */
diff --git a/vendor/symfony/config/Tests/ConfigCacheFactoryTest.php b/vendor/symfony/config/Tests/ConfigCacheFactoryTest.php
deleted file mode 100644
index 6190b9b450b4079eef6788000c22f5db3f770d3a..0000000000000000000000000000000000000000
--- a/vendor/symfony/config/Tests/ConfigCacheFactoryTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Config\Tests;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Config\ConfigCacheFactory;
-
-class ConfigCacheFactoryTest extends TestCase
-{
-    public function testCacheWithInvalidCallback()
-    {
-        $this->expectException('InvalidArgumentException');
-        $this->expectExceptionMessage('Invalid type for callback argument. Expected callable, but got "object".');
-        $cacheFactory = new ConfigCacheFactory(true);
-
-        $cacheFactory->cache('file', new \stdClass());
-    }
-}
diff --git a/vendor/symfony/config/Tests/ConfigCacheTest.php b/vendor/symfony/config/Tests/ConfigCacheTest.php
deleted file mode 100644
index d0b70899b513a7cf64fe8dbcc04cc36fefe7d1a2..0000000000000000000000000000000000000000
--- a/vendor/symfony/config/Tests/ConfigCacheTest.php
+++ /dev/null
@@ -1,99 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Config\Tests;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Config\ConfigCache;
-use Symfony\Component\Config\Tests\Resource\ResourceStub;
-
-class ConfigCacheTest extends TestCase
-{
-    private $cacheFile = null;
-
-    protected function setUp()
-    {
-        $this->cacheFile = tempnam(sys_get_temp_dir(), 'config_');
-    }
-
-    protected function tearDown()
-    {
-        $files = [$this->cacheFile, $this->cacheFile.'.meta'];
-
-        foreach ($files as $file) {
-            if (file_exists($file)) {
-                unlink($file);
-            }
-        }
-    }
-
-    /**
-     * @dataProvider debugModes
-     */
-    public function testCacheIsNotValidIfNothingHasBeenCached($debug)
-    {
-        unlink($this->cacheFile); // remove tempnam() side effect
-        $cache = new ConfigCache($this->cacheFile, $debug);
-
-        $this->assertFalse($cache->isFresh());
-    }
-
-    public function testIsAlwaysFreshInProduction()
-    {
-        $staleResource = new ResourceStub();
-        $staleResource->setFresh(false);
-
-        $cache = new ConfigCache($this->cacheFile, false);
-        $cache->write('', [$staleResource]);
-
-        $this->assertTrue($cache->isFresh());
-    }
-
-    /**
-     * @dataProvider debugModes
-     */
-    public function testIsFreshWhenNoResourceProvided($debug)
-    {
-        $cache = new ConfigCache($this->cacheFile, $debug);
-        $cache->write('', []);
-        $this->assertTrue($cache->isFresh());
-    }
-
-    public function testFreshResourceInDebug()
-    {
-        $freshResource = new ResourceStub();
-        $freshResource->setFresh(true);
-
-        $cache = new ConfigCache($this->cacheFile, true);
-        $cache->write('', [$freshResource]);
-
-        $this->assertTrue($cache->isFresh());
-    }
-
-    public function testStaleResourceInDebug()
-    {
-        $staleResource = new ResourceStub();
-        $staleResource->setFresh(false);
-
-        $cache = new ConfigCache($this->cacheFile, true);
-        $cache->write('', [$staleResource]);
-
-        $this->assertFalse($cache->isFresh());
-    }
-
-    public function debugModes()
-    {
-        return [
-            [true],
-            [false],
-        ];
-    }
-}
diff --git a/vendor/symfony/config/Tests/Definition/ArrayNodeTest.php b/vendor/symfony/config/Tests/Definition/ArrayNodeTest.php
deleted file mode 100644
index 25c2cfc6990474f6ae94becaa65393a6be08f697..0000000000000000000000000000000000000000
--- a/vendor/symfony/config/Tests/Definition/ArrayNodeTest.php
+++ /dev/null
@@ -1,237 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Config\Tests\Definition;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Config\Definition\ArrayNode;
-use Symfony\Component\Config\Definition\Exception\InvalidConfigurationException;
-use Symfony\Component\Config\Definition\ScalarNode;
-
-class ArrayNodeTest extends TestCase
-{
-    public function testNormalizeThrowsExceptionWhenFalseIsNotAllowed()
-    {
-        $this->expectException('Symfony\Component\Config\Definition\Exception\InvalidTypeException');
-        $node = new ArrayNode('root');
-        $node->normalize(false);
-    }
-
-    public function testExceptionThrownOnUnrecognizedChild()
-    {
-        $this->expectException('Symfony\Component\Config\Definition\Exception\InvalidConfigurationException');
-        $this->expectExceptionMessage('Unrecognized option "foo" under "root"');
-        $node = new ArrayNode('root');
-        $node->normalize(['foo' => 'bar']);
-    }
-
-    public function ignoreAndRemoveMatrixProvider()
-    {
-        $unrecognizedOptionException = new InvalidConfigurationException('Unrecognized option "foo" under "root"');
-
-        return [
-            [true, true, [], 'no exception is thrown for an unrecognized child if the ignoreExtraKeys option is set to true'],
-            [true, false, ['foo' => 'bar'], 'extra keys are not removed when ignoreExtraKeys second option is set to false'],
-            [false, true, $unrecognizedOptionException],
-            [false, false, $unrecognizedOptionException],
-        ];
-    }
-
-    /**
-     * @dataProvider ignoreAndRemoveMatrixProvider
-     */
-    public function testIgnoreAndRemoveBehaviors($ignore, $remove, $expected, $message = '')
-    {
-        if ($expected instanceof \Exception) {
-            $this->expectException(\get_class($expected));
-            $this->expectExceptionMessage($expected->getMessage());
-        }
-        $node = new ArrayNode('root');
-        $node->setIgnoreExtraKeys($ignore, $remove);
-        $result = $node->normalize(['foo' => 'bar']);
-        $this->assertSame($expected, $result, $message);
-    }
-
-    /**
-     * @dataProvider getPreNormalizationTests
-     */
-    public function testPreNormalize($denormalized, $normalized)
-    {
-        $node = new ArrayNode('foo');
-
-        $r = new \ReflectionMethod($node, 'preNormalize');
-        $r->setAccessible(true);
-
-        $this->assertSame($normalized, $r->invoke($node, $denormalized));
-    }
-
-    public function getPreNormalizationTests()
-    {
-        return [
-            [
-                ['foo-bar' => 'foo'],
-                ['foo_bar' => 'foo'],
-            ],
-            [
-                ['foo-bar_moo' => 'foo'],
-                ['foo-bar_moo' => 'foo'],
-            ],
-            [
-                ['anything-with-dash-and-no-underscore' => 'first', 'no_dash' => 'second'],
-                ['anything_with_dash_and_no_underscore' => 'first', 'no_dash' => 'second'],
-            ],
-            [
-                ['foo-bar' => null, 'foo_bar' => 'foo'],
-                ['foo-bar' => null, 'foo_bar' => 'foo'],
-            ],
-        ];
-    }
-
-    /**
-     * @dataProvider getZeroNamedNodeExamplesData
-     */
-    public function testNodeNameCanBeZero($denormalized, $normalized)
-    {
-        $zeroNode = new ArrayNode(0);
-        $zeroNode->addChild(new ScalarNode('name'));
-        $fiveNode = new ArrayNode(5);
-        $fiveNode->addChild(new ScalarNode(0));
-        $fiveNode->addChild(new ScalarNode('new_key'));
-        $rootNode = new ArrayNode('root');
-        $rootNode->addChild($zeroNode);
-        $rootNode->addChild($fiveNode);
-        $rootNode->addChild(new ScalarNode('string_key'));
-        $r = new \ReflectionMethod($rootNode, 'normalizeValue');
-        $r->setAccessible(true);
-
-        $this->assertSame($normalized, $r->invoke($rootNode, $denormalized));
-    }
-
-    public function getZeroNamedNodeExamplesData()
-    {
-        return [
-            [
-                [
-                    0 => [
-                        'name' => 'something',
-                    ],
-                    5 => [
-                        0 => 'this won\'t work too',
-                        'new_key' => 'some other value',
-                    ],
-                    'string_key' => 'just value',
-                ],
-                [
-                    0 => [
-                        'name' => 'something',
-                    ],
-                    5 => [
-                        0 => 'this won\'t work too',
-                        'new_key' => 'some other value',
-                    ],
-                    'string_key' => 'just value',
-                ],
-            ],
-        ];
-    }
-
-    /**
-     * @dataProvider getPreNormalizedNormalizedOrderedData
-     */
-    public function testChildrenOrderIsMaintainedOnNormalizeValue($prenormalized, $normalized)
-    {
-        $scalar1 = new ScalarNode('1');
-        $scalar2 = new ScalarNode('2');
-        $scalar3 = new ScalarNode('3');
-        $node = new ArrayNode('foo');
-        $node->addChild($scalar1);
-        $node->addChild($scalar3);
-        $node->addChild($scalar2);
-
-        $r = new \ReflectionMethod($node, 'normalizeValue');
-        $r->setAccessible(true);
-
-        $this->assertSame($normalized, $r->invoke($node, $prenormalized));
-    }
-
-    public function getPreNormalizedNormalizedOrderedData()
-    {
-        return [
-            [
-                ['2' => 'two', '1' => 'one', '3' => 'three'],
-                ['2' => 'two', '1' => 'one', '3' => 'three'],
-            ],
-        ];
-    }
-
-    public function testAddChildEmptyName()
-    {
-        $this->expectException('InvalidArgumentException');
-        $this->expectExceptionMessage('Child nodes must be named.');
-        $node = new ArrayNode('root');
-
-        $childNode = new ArrayNode('');
-        $node->addChild($childNode);
-    }
-
-    public function testAddChildNameAlreadyExists()
-    {
-        $this->expectException('InvalidArgumentException');
-        $this->expectExceptionMessage('A child node named "foo" already exists.');
-        $node = new ArrayNode('root');
-
-        $childNode = new ArrayNode('foo');
-        $node->addChild($childNode);
-
-        $childNodeWithSameName = new ArrayNode('foo');
-        $node->addChild($childNodeWithSameName);
-    }
-
-    public function testGetDefaultValueWithoutDefaultValue()
-    {
-        $this->expectException('RuntimeException');
-        $this->expectExceptionMessage('The node at path "foo" has no default value.');
-        $node = new ArrayNode('foo');
-        $node->getDefaultValue();
-    }
-
-    public function testSetDeprecated()
-    {
-        $childNode = new ArrayNode('foo');
-        $childNode->setDeprecated('"%node%" is deprecated');
-
-        $this->assertTrue($childNode->isDeprecated());
-        $this->assertSame('"foo" is deprecated', $childNode->getDeprecationMessage($childNode->getName(), $childNode->getPath()));
-
-        $node = new ArrayNode('root');
-        $node->addChild($childNode);
-
-        $deprecationTriggered = false;
-        $deprecationHandler = function ($level, $message, $file, $line) use (&$prevErrorHandler, &$deprecationTriggered) {
-            if (E_USER_DEPRECATED === $level) {
-                return $deprecationTriggered = true;
-            }
-
-            return $prevErrorHandler ? $prevErrorHandler($level, $message, $file, $line) : false;
-        };
-
-        $prevErrorHandler = set_error_handler($deprecationHandler);
-        $node->finalize([]);
-        restore_error_handler();
-
-        $this->assertFalse($deprecationTriggered, '->finalize() should not trigger if the deprecated node is not set');
-
-        $prevErrorHandler = set_error_handler($deprecationHandler);
-        $node->finalize(['foo' => []]);
-        restore_error_handler();
-        $this->assertTrue($deprecationTriggered, '->finalize() should trigger if the deprecated node is set');
-    }
-}
diff --git a/vendor/symfony/config/Tests/Definition/BooleanNodeTest.php b/vendor/symfony/config/Tests/Definition/BooleanNodeTest.php
deleted file mode 100644
index 8552eeba39b75b1e39c882e4d82a9ce11dc5a6c7..0000000000000000000000000000000000000000
--- a/vendor/symfony/config/Tests/Definition/BooleanNodeTest.php
+++ /dev/null
@@ -1,74 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Config\Tests\Definition;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Config\Definition\BooleanNode;
-
-class BooleanNodeTest extends TestCase
-{
-    /**
-     * @dataProvider getValidValues
-     */
-    public function testNormalize($value)
-    {
-        $node = new BooleanNode('test');
-        $this->assertSame($value, $node->normalize($value));
-    }
-
-    /**
-     * @dataProvider getValidValues
-     *
-     * @param bool $value
-     */
-    public function testValidNonEmptyValues($value)
-    {
-        $node = new BooleanNode('test');
-        $node->setAllowEmptyValue(false);
-
-        $this->assertSame($value, $node->finalize($value));
-    }
-
-    public function getValidValues()
-    {
-        return [
-            [false],
-            [true],
-        ];
-    }
-
-    /**
-     * @dataProvider getInvalidValues
-     */
-    public function testNormalizeThrowsExceptionOnInvalidValues($value)
-    {
-        $this->expectException('Symfony\Component\Config\Definition\Exception\InvalidTypeException');
-        $node = new BooleanNode('test');
-        $node->normalize($value);
-    }
-
-    public function getInvalidValues()
-    {
-        return [
-            [null],
-            [''],
-            ['foo'],
-            [0],
-            [1],
-            [0.0],
-            [0.1],
-            [[]],
-            [['foo' => 'bar']],
-            [new \stdClass()],
-        ];
-    }
-}
diff --git a/vendor/symfony/config/Tests/Definition/Builder/ArrayNodeDefinitionTest.php b/vendor/symfony/config/Tests/Definition/Builder/ArrayNodeDefinitionTest.php
deleted file mode 100644
index 1123b41599021d321a464fa468c84169686dd607..0000000000000000000000000000000000000000
--- a/vendor/symfony/config/Tests/Definition/Builder/ArrayNodeDefinitionTest.php
+++ /dev/null
@@ -1,362 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Config\Tests\Definition\Builder;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition;
-use Symfony\Component\Config\Definition\Builder\ScalarNodeDefinition;
-use Symfony\Component\Config\Definition\Exception\InvalidDefinitionException;
-use Symfony\Component\Config\Definition\Processor;
-
-class ArrayNodeDefinitionTest extends TestCase
-{
-    public function testAppendingSomeNode()
-    {
-        $parent = new ArrayNodeDefinition('root');
-        $child = new ScalarNodeDefinition('child');
-
-        $parent
-            ->children()
-                ->scalarNode('foo')->end()
-                ->scalarNode('bar')->end()
-            ->end()
-            ->append($child);
-
-        $this->assertCount(3, $this->getField($parent, 'children'));
-        $this->assertContains($child, $this->getField($parent, 'children'));
-    }
-
-    /**
-     * @dataProvider providePrototypeNodeSpecificCalls
-     */
-    public function testPrototypeNodeSpecificOption($method, $args)
-    {
-        $this->expectException('Symfony\Component\Config\Definition\Exception\InvalidDefinitionException');
-        $node = new ArrayNodeDefinition('root');
-
-        \call_user_func_array([$node, $method], $args);
-
-        $node->getNode();
-    }
-
-    public function providePrototypeNodeSpecificCalls()
-    {
-        return [
-            ['defaultValue', [[]]],
-            ['addDefaultChildrenIfNoneSet', []],
-            ['requiresAtLeastOneElement', []],
-            ['useAttributeAsKey', ['foo']],
-        ];
-    }
-
-    public function testConcreteNodeSpecificOption()
-    {
-        $this->expectException('Symfony\Component\Config\Definition\Exception\InvalidDefinitionException');
-        $node = new ArrayNodeDefinition('root');
-        $node
-            ->addDefaultsIfNotSet()
-            ->prototype('array')
-        ;
-        $node->getNode();
-    }
-
-    public function testPrototypeNodesCantHaveADefaultValueWhenUsingDefaultChildren()
-    {
-        $this->expectException('Symfony\Component\Config\Definition\Exception\InvalidDefinitionException');
-        $node = new ArrayNodeDefinition('root');
-        $node
-            ->defaultValue([])
-            ->addDefaultChildrenIfNoneSet('foo')
-            ->prototype('array')
-        ;
-        $node->getNode();
-    }
-
-    public function testPrototypedArrayNodeDefaultWhenUsingDefaultChildren()
-    {
-        $node = new ArrayNodeDefinition('root');
-        $node
-            ->addDefaultChildrenIfNoneSet()
-            ->prototype('array')
-        ;
-        $tree = $node->getNode();
-        $this->assertEquals([[]], $tree->getDefaultValue());
-    }
-
-    /**
-     * @dataProvider providePrototypedArrayNodeDefaults
-     */
-    public function testPrototypedArrayNodeDefault($args, $shouldThrowWhenUsingAttrAsKey, $shouldThrowWhenNotUsingAttrAsKey, $defaults)
-    {
-        $node = new ArrayNodeDefinition('root');
-        $node
-            ->addDefaultChildrenIfNoneSet($args)
-            ->prototype('array')
-        ;
-
-        try {
-            $tree = $node->getNode();
-            $this->assertFalse($shouldThrowWhenNotUsingAttrAsKey);
-            $this->assertEquals($defaults, $tree->getDefaultValue());
-        } catch (InvalidDefinitionException $e) {
-            $this->assertTrue($shouldThrowWhenNotUsingAttrAsKey);
-        }
-
-        $node = new ArrayNodeDefinition('root');
-        $node
-            ->useAttributeAsKey('attr')
-            ->addDefaultChildrenIfNoneSet($args)
-            ->prototype('array')
-        ;
-
-        try {
-            $tree = $node->getNode();
-            $this->assertFalse($shouldThrowWhenUsingAttrAsKey);
-            $this->assertEquals($defaults, $tree->getDefaultValue());
-        } catch (InvalidDefinitionException $e) {
-            $this->assertTrue($shouldThrowWhenUsingAttrAsKey);
-        }
-    }
-
-    public function providePrototypedArrayNodeDefaults()
-    {
-        return [
-            [null, true, false, [[]]],
-            [2, true, false, [[], []]],
-            ['2', false, true, ['2' => []]],
-            ['foo', false, true, ['foo' => []]],
-            [['foo'], false, true, ['foo' => []]],
-            [['foo', 'bar'], false, true, ['foo' => [], 'bar' => []]],
-        ];
-    }
-
-    public function testNestedPrototypedArrayNodes()
-    {
-        $nodeDefinition = new ArrayNodeDefinition('root');
-        $nodeDefinition
-            ->addDefaultChildrenIfNoneSet()
-            ->prototype('array')
-                  ->prototype('array')
-        ;
-        $node = $nodeDefinition->getNode();
-
-        $this->assertInstanceOf('Symfony\Component\Config\Definition\PrototypedArrayNode', $node);
-        $this->assertInstanceOf('Symfony\Component\Config\Definition\PrototypedArrayNode', $node->getPrototype());
-    }
-
-    public function testEnabledNodeDefaults()
-    {
-        $node = new ArrayNodeDefinition('root');
-        $node
-            ->canBeEnabled()
-            ->children()
-                ->scalarNode('foo')->defaultValue('bar')->end()
-        ;
-
-        $this->assertEquals(['enabled' => false, 'foo' => 'bar'], $node->getNode()->getDefaultValue());
-    }
-
-    /**
-     * @dataProvider getEnableableNodeFixtures
-     */
-    public function testTrueEnableEnabledNode($expected, $config, $message)
-    {
-        $processor = new Processor();
-        $node = new ArrayNodeDefinition('root');
-        $node
-            ->canBeEnabled()
-            ->children()
-                ->scalarNode('foo')->defaultValue('bar')->end()
-        ;
-
-        $this->assertEquals(
-            $expected,
-            $processor->process($node->getNode(), $config),
-            $message
-        );
-    }
-
-    public function testCanBeDisabled()
-    {
-        $node = new ArrayNodeDefinition('root');
-        $node->canBeDisabled();
-
-        $this->assertTrue($this->getField($node, 'addDefaults'));
-        $this->assertEquals(['enabled' => false], $this->getField($node, 'falseEquivalent'));
-        $this->assertEquals(['enabled' => true], $this->getField($node, 'trueEquivalent'));
-        $this->assertEquals(['enabled' => true], $this->getField($node, 'nullEquivalent'));
-
-        $nodeChildren = $this->getField($node, 'children');
-        $this->assertArrayHasKey('enabled', $nodeChildren);
-
-        $enabledNode = $nodeChildren['enabled'];
-        $this->assertTrue($this->getField($enabledNode, 'default'));
-        $this->assertTrue($this->getField($enabledNode, 'defaultValue'));
-    }
-
-    public function testIgnoreExtraKeys()
-    {
-        $node = new ArrayNodeDefinition('root');
-
-        $this->assertFalse($this->getField($node, 'ignoreExtraKeys'));
-
-        $result = $node->ignoreExtraKeys();
-
-        $this->assertEquals($node, $result);
-        $this->assertTrue($this->getField($node, 'ignoreExtraKeys'));
-    }
-
-    public function testNormalizeKeys()
-    {
-        $node = new ArrayNodeDefinition('root');
-
-        $this->assertTrue($this->getField($node, 'normalizeKeys'));
-
-        $result = $node->normalizeKeys(false);
-
-        $this->assertEquals($node, $result);
-        $this->assertFalse($this->getField($node, 'normalizeKeys'));
-    }
-
-    public function testUnsetChild()
-    {
-        $node = new ArrayNodeDefinition('root');
-        $node
-            ->children()
-                ->scalarNode('value')
-                    ->beforeNormalization()
-                        ->ifTrue(function ($value) {
-                            return empty($value);
-                        })
-                        ->thenUnset()
-                    ->end()
-                ->end()
-            ->end()
-        ;
-
-        $this->assertSame([], $node->getNode()->normalize(['value' => null]));
-    }
-
-    public function testPrototypeVariable()
-    {
-        $node = new ArrayNodeDefinition('root');
-        $this->assertEquals($node->prototype('variable'), $node->variablePrototype());
-    }
-
-    public function testPrototypeScalar()
-    {
-        $node = new ArrayNodeDefinition('root');
-        $this->assertEquals($node->prototype('scalar'), $node->scalarPrototype());
-    }
-
-    public function testPrototypeBoolean()
-    {
-        $node = new ArrayNodeDefinition('root');
-        $this->assertEquals($node->prototype('boolean'), $node->booleanPrototype());
-    }
-
-    public function testPrototypeInteger()
-    {
-        $node = new ArrayNodeDefinition('root');
-        $this->assertEquals($node->prototype('integer'), $node->integerPrototype());
-    }
-
-    public function testPrototypeFloat()
-    {
-        $node = new ArrayNodeDefinition('root');
-        $this->assertEquals($node->prototype('float'), $node->floatPrototype());
-    }
-
-    public function testPrototypeArray()
-    {
-        $node = new ArrayNodeDefinition('root');
-        $this->assertEquals($node->prototype('array'), $node->arrayPrototype());
-    }
-
-    public function testPrototypeEnum()
-    {
-        $node = new ArrayNodeDefinition('root');
-        $this->assertEquals($node->prototype('enum'), $node->enumPrototype());
-    }
-
-    public function getEnableableNodeFixtures()
-    {
-        return [
-            [['enabled' => true, 'foo' => 'bar'], [true], 'true enables an enableable node'],
-            [['enabled' => true, 'foo' => 'bar'], [null], 'null enables an enableable node'],
-            [['enabled' => true, 'foo' => 'bar'], [['enabled' => true]], 'An enableable node can be enabled'],
-            [['enabled' => true, 'foo' => 'baz'], [['foo' => 'baz']], 'any configuration enables an enableable node'],
-            [['enabled' => false, 'foo' => 'baz'], [['foo' => 'baz', 'enabled' => false]], 'An enableable node can be disabled'],
-            [['enabled' => false, 'foo' => 'bar'], [false], 'false disables an enableable node'],
-        ];
-    }
-
-    public function testRequiresAtLeastOneElement()
-    {
-        $node = new ArrayNodeDefinition('root');
-        $node
-            ->requiresAtLeastOneElement()
-            ->integerPrototype();
-
-        $node->getNode()->finalize([1]);
-
-        $this->addToAssertionCount(1);
-    }
-
-    /**
-     * @group legacy
-     * @expectedDeprecation Using Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition::cannotBeEmpty() at path "root" has no effect, consider requiresAtLeastOneElement() instead. In 4.0 both methods will behave the same.
-     */
-    public function testCannotBeEmpty()
-    {
-        $node = new ArrayNodeDefinition('root');
-        $node
-            ->cannotBeEmpty()
-            ->integerPrototype();
-
-        $node->getNode()->finalize([]);
-    }
-
-    public function testSetDeprecated()
-    {
-        $node = new ArrayNodeDefinition('root');
-        $node
-            ->children()
-                ->arrayNode('foo')->setDeprecated('The "%path%" node is deprecated.')->end()
-            ->end()
-        ;
-        $deprecatedNode = $node->getNode()->getChildren()['foo'];
-
-        $this->assertTrue($deprecatedNode->isDeprecated());
-        $this->assertSame('The "root.foo" node is deprecated.', $deprecatedNode->getDeprecationMessage($deprecatedNode->getName(), $deprecatedNode->getPath()));
-    }
-
-    /**
-     * @group legacy
-     * @expectedDeprecation ->cannotBeEmpty() is not applicable to concrete nodes at path "root". In 4.0 it will throw an exception.
-     */
-    public function testCannotBeEmptyOnConcreteNode()
-    {
-        $node = new ArrayNodeDefinition('root');
-        $node->cannotBeEmpty();
-
-        $node->getNode()->finalize([]);
-    }
-
-    protected function getField($object, $field)
-    {
-        $reflection = new \ReflectionProperty($object, $field);
-        $reflection->setAccessible(true);
-
-        return $reflection->getValue($object);
-    }
-}
diff --git a/vendor/symfony/config/Tests/Definition/Builder/BooleanNodeDefinitionTest.php b/vendor/symfony/config/Tests/Definition/Builder/BooleanNodeDefinitionTest.php
deleted file mode 100644
index 6f568a2df64f7abde95139bf7d63583ab9c6159e..0000000000000000000000000000000000000000
--- a/vendor/symfony/config/Tests/Definition/Builder/BooleanNodeDefinitionTest.php
+++ /dev/null
@@ -1,37 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Config\Tests\Definition\Builder;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Config\Definition\Builder\BooleanNodeDefinition;
-
-class BooleanNodeDefinitionTest extends TestCase
-{
-    public function testCannotBeEmptyThrowsAnException()
-    {
-        $this->expectException('Symfony\Component\Config\Definition\Exception\InvalidDefinitionException');
-        $this->expectExceptionMessage('->cannotBeEmpty() is not applicable to BooleanNodeDefinition.');
-        $def = new BooleanNodeDefinition('foo');
-        $def->cannotBeEmpty();
-    }
-
-    public function testSetDeprecated()
-    {
-        $def = new BooleanNodeDefinition('foo');
-        $def->setDeprecated('The "%path%" node is deprecated.');
-
-        $node = $def->getNode();
-
-        $this->assertTrue($node->isDeprecated());
-        $this->assertSame('The "foo" node is deprecated.', $node->getDeprecationMessage($node->getName(), $node->getPath()));
-    }
-}
diff --git a/vendor/symfony/config/Tests/Definition/Builder/EnumNodeDefinitionTest.php b/vendor/symfony/config/Tests/Definition/Builder/EnumNodeDefinitionTest.php
deleted file mode 100644
index 2e43a1354de11818be4f2422e17f196437a42942..0000000000000000000000000000000000000000
--- a/vendor/symfony/config/Tests/Definition/Builder/EnumNodeDefinitionTest.php
+++ /dev/null
@@ -1,73 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Config\Tests\Definition\Builder;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Config\Definition\Builder\EnumNodeDefinition;
-
-class EnumNodeDefinitionTest extends TestCase
-{
-    public function testWithOneValue()
-    {
-        $def = new EnumNodeDefinition('foo');
-        $def->values(['foo']);
-
-        $node = $def->getNode();
-        $this->assertEquals(['foo'], $node->getValues());
-    }
-
-    public function testWithOneDistinctValue()
-    {
-        $def = new EnumNodeDefinition('foo');
-        $def->values(['foo', 'foo']);
-
-        $node = $def->getNode();
-        $this->assertEquals(['foo'], $node->getValues());
-    }
-
-    public function testNoValuesPassed()
-    {
-        $this->expectException('RuntimeException');
-        $this->expectExceptionMessage('You must call ->values() on enum nodes.');
-        $def = new EnumNodeDefinition('foo');
-        $def->getNode();
-    }
-
-    public function testWithNoValues()
-    {
-        $this->expectException('InvalidArgumentException');
-        $this->expectExceptionMessage('->values() must be called with at least one value.');
-        $def = new EnumNodeDefinition('foo');
-        $def->values([]);
-    }
-
-    public function testGetNode()
-    {
-        $def = new EnumNodeDefinition('foo');
-        $def->values(['foo', 'bar']);
-
-        $node = $def->getNode();
-        $this->assertEquals(['foo', 'bar'], $node->getValues());
-    }
-
-    public function testSetDeprecated()
-    {
-        $def = new EnumNodeDefinition('foo');
-        $def->values(['foo', 'bar']);
-        $def->setDeprecated('The "%path%" node is deprecated.');
-
-        $node = $def->getNode();
-
-        $this->assertTrue($node->isDeprecated());
-        $this->assertSame('The "foo" node is deprecated.', $def->getNode()->getDeprecationMessage($node->getName(), $node->getPath()));
-    }
-}
diff --git a/vendor/symfony/config/Tests/Definition/Builder/ExprBuilderTest.php b/vendor/symfony/config/Tests/Definition/Builder/ExprBuilderTest.php
deleted file mode 100644
index 2dfb7a0a39f8f02fe0704c212a9459eed0562b4f..0000000000000000000000000000000000000000
--- a/vendor/symfony/config/Tests/Definition/Builder/ExprBuilderTest.php
+++ /dev/null
@@ -1,264 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Config\Tests\Definition\Builder;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Config\Definition\Builder\TreeBuilder;
-
-class ExprBuilderTest extends TestCase
-{
-    public function testAlwaysExpression()
-    {
-        $test = $this->getTestBuilder()
-            ->always($this->returnClosure('new_value'))
-        ->end();
-
-        $this->assertFinalizedValueIs('new_value', $test);
-    }
-
-    public function testIfTrueExpression()
-    {
-        $test = $this->getTestBuilder()
-            ->ifTrue()
-            ->then($this->returnClosure('new_value'))
-        ->end();
-        $this->assertFinalizedValueIs('new_value', $test, ['key' => true]);
-
-        $test = $this->getTestBuilder()
-            ->ifTrue(function ($v) { return true; })
-            ->then($this->returnClosure('new_value'))
-        ->end();
-        $this->assertFinalizedValueIs('new_value', $test);
-
-        $test = $this->getTestBuilder()
-            ->ifTrue(function ($v) { return false; })
-            ->then($this->returnClosure('new_value'))
-        ->end();
-        $this->assertFinalizedValueIs('value', $test);
-    }
-
-    public function testIfStringExpression()
-    {
-        $test = $this->getTestBuilder()
-            ->ifString()
-            ->then($this->returnClosure('new_value'))
-        ->end();
-        $this->assertFinalizedValueIs('new_value', $test);
-
-        $test = $this->getTestBuilder()
-            ->ifString()
-            ->then($this->returnClosure('new_value'))
-        ->end();
-        $this->assertFinalizedValueIs(45, $test, ['key' => 45]);
-    }
-
-    public function testIfNullExpression()
-    {
-        $test = $this->getTestBuilder()
-            ->ifNull()
-            ->then($this->returnClosure('new_value'))
-        ->end();
-        $this->assertFinalizedValueIs('new_value', $test, ['key' => null]);
-
-        $test = $this->getTestBuilder()
-            ->ifNull()
-            ->then($this->returnClosure('new_value'))
-        ->end();
-        $this->assertFinalizedValueIs('value', $test);
-    }
-
-    public function testIfEmptyExpression()
-    {
-        $test = $this->getTestBuilder()
-            ->ifEmpty()
-            ->then($this->returnClosure('new_value'))
-        ->end();
-        $this->assertFinalizedValueIs('new_value', $test, ['key' => []]);
-
-        $test = $this->getTestBuilder()
-            ->ifEmpty()
-            ->then($this->returnClosure('new_value'))
-        ->end();
-        $this->assertFinalizedValueIs('value', $test);
-    }
-
-    public function testIfArrayExpression()
-    {
-        $test = $this->getTestBuilder()
-            ->ifArray()
-            ->then($this->returnClosure('new_value'))
-        ->end();
-        $this->assertFinalizedValueIs('new_value', $test, ['key' => []]);
-
-        $test = $this->getTestBuilder()
-            ->ifArray()
-            ->then($this->returnClosure('new_value'))
-        ->end();
-        $this->assertFinalizedValueIs('value', $test);
-    }
-
-    public function testIfInArrayExpression()
-    {
-        $test = $this->getTestBuilder()
-            ->ifInArray(['foo', 'bar', 'value'])
-            ->then($this->returnClosure('new_value'))
-        ->end();
-        $this->assertFinalizedValueIs('new_value', $test);
-
-        $test = $this->getTestBuilder()
-            ->ifInArray(['foo', 'bar'])
-            ->then($this->returnClosure('new_value'))
-        ->end();
-        $this->assertFinalizedValueIs('value', $test);
-    }
-
-    public function testIfNotInArrayExpression()
-    {
-        $test = $this->getTestBuilder()
-            ->ifNotInArray(['foo', 'bar'])
-            ->then($this->returnClosure('new_value'))
-        ->end();
-        $this->assertFinalizedValueIs('new_value', $test);
-
-        $test = $this->getTestBuilder()
-            ->ifNotInArray(['foo', 'bar', 'value_from_config'])
-            ->then($this->returnClosure('new_value'))
-        ->end();
-        $this->assertFinalizedValueIs('new_value', $test);
-    }
-
-    public function testThenEmptyArrayExpression()
-    {
-        $test = $this->getTestBuilder()
-            ->ifString()
-            ->thenEmptyArray()
-        ->end();
-        $this->assertFinalizedValueIs([], $test);
-    }
-
-    /**
-     * @dataProvider castToArrayValues
-     */
-    public function testCastToArrayExpression($configValue, $expectedValue)
-    {
-        $test = $this->getTestBuilder()
-            ->castToArray()
-        ->end();
-        $this->assertFinalizedValueIs($expectedValue, $test, ['key' => $configValue]);
-    }
-
-    public function castToArrayValues()
-    {
-        yield ['value', ['value']];
-        yield [-3.14, [-3.14]];
-        yield [null, [null]];
-        yield [['value'], ['value']];
-    }
-
-    public function testThenInvalid()
-    {
-        $this->expectException('Symfony\Component\Config\Definition\Exception\InvalidConfigurationException');
-        $test = $this->getTestBuilder()
-            ->ifString()
-            ->thenInvalid('Invalid value')
-        ->end();
-        $this->finalizeTestBuilder($test);
-    }
-
-    public function testThenUnsetExpression()
-    {
-        $test = $this->getTestBuilder()
-            ->ifString()
-            ->thenUnset()
-        ->end();
-        $this->assertEquals([], $this->finalizeTestBuilder($test));
-    }
-
-    public function testEndIfPartNotSpecified()
-    {
-        $this->expectException('RuntimeException');
-        $this->expectExceptionMessage('You must specify an if part.');
-        $this->getTestBuilder()->end();
-    }
-
-    public function testEndThenPartNotSpecified()
-    {
-        $this->expectException('RuntimeException');
-        $this->expectExceptionMessage('You must specify a then part.');
-        $builder = $this->getTestBuilder();
-        $builder->ifPart = 'test';
-        $builder->end();
-    }
-
-    /**
-     * Create a test treebuilder with a variable node, and init the validation.
-     *
-     * @return TreeBuilder
-     */
-    protected function getTestBuilder()
-    {
-        $builder = new TreeBuilder();
-
-        return $builder
-            ->root('test')
-            ->children()
-            ->variableNode('key')
-            ->validate()
-        ;
-    }
-
-    /**
-     * Close the validation process and finalize with the given config.
-     *
-     * @param TreeBuilder $testBuilder The tree builder to finalize
-     * @param array       $config      The config you want to use for the finalization, if nothing provided
-     *                                 a simple ['key'=>'value'] will be used
-     *
-     * @return array The finalized config values
-     */
-    protected function finalizeTestBuilder($testBuilder, $config = null)
-    {
-        return $testBuilder
-            ->end()
-            ->end()
-            ->end()
-            ->buildTree()
-            ->finalize(null === $config ? ['key' => 'value'] : $config)
-        ;
-    }
-
-    /**
-     * Return a closure that will return the given value.
-     *
-     * @param mixed $val The value that the closure must return
-     *
-     * @return \Closure
-     */
-    protected function returnClosure($val)
-    {
-        return function ($v) use ($val) {
-            return $val;
-        };
-    }
-
-    /**
-     * Assert that the given test builder, will return the given value.
-     *
-     * @param mixed       $value       The value to test
-     * @param TreeBuilder $treeBuilder The tree builder to finalize
-     * @param mixed       $config      The config values that new to be finalized
-     */
-    protected function assertFinalizedValueIs($value, $treeBuilder, $config = null)
-    {
-        $this->assertEquals(['key' => $value], $this->finalizeTestBuilder($treeBuilder, $config));
-    }
-}
diff --git a/vendor/symfony/config/Tests/Definition/Builder/NodeBuilderTest.php b/vendor/symfony/config/Tests/Definition/Builder/NodeBuilderTest.php
deleted file mode 100644
index 46518c659afbd058bc3b55685f86dc587cb37953..0000000000000000000000000000000000000000
--- a/vendor/symfony/config/Tests/Definition/Builder/NodeBuilderTest.php
+++ /dev/null
@@ -1,91 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Config\Tests\Definition\Builder;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Config\Definition\Builder\NodeBuilder as BaseNodeBuilder;
-use Symfony\Component\Config\Definition\Builder\VariableNodeDefinition as BaseVariableNodeDefinition;
-
-class NodeBuilderTest extends TestCase
-{
-    public function testThrowsAnExceptionWhenTryingToCreateANonRegisteredNodeType()
-    {
-        $this->expectException('RuntimeException');
-        $builder = new BaseNodeBuilder();
-        $builder->node('', 'foobar');
-    }
-
-    public function testThrowsAnExceptionWhenTheNodeClassIsNotFound()
-    {
-        $this->expectException('RuntimeException');
-        $builder = new BaseNodeBuilder();
-        $builder
-            ->setNodeClass('noclasstype', '\\foo\\bar\\noclass')
-            ->node('', 'noclasstype');
-    }
-
-    public function testAddingANewNodeType()
-    {
-        $class = SomeNodeDefinition::class;
-
-        $builder = new BaseNodeBuilder();
-        $node = $builder
-            ->setNodeClass('newtype', $class)
-            ->node('', 'newtype');
-
-        $this->assertInstanceOf($class, $node);
-    }
-
-    public function testOverridingAnExistingNodeType()
-    {
-        $class = SomeNodeDefinition::class;
-
-        $builder = new BaseNodeBuilder();
-        $node = $builder
-            ->setNodeClass('variable', $class)
-            ->node('', 'variable');
-
-        $this->assertInstanceOf($class, $node);
-    }
-
-    public function testNodeTypesAreNotCaseSensitive()
-    {
-        $builder = new BaseNodeBuilder();
-
-        $node1 = $builder->node('', 'VaRiAbLe');
-        $node2 = $builder->node('', 'variable');
-
-        $this->assertInstanceOf(\get_class($node1), $node2);
-
-        $builder->setNodeClass('CuStOm', SomeNodeDefinition::class);
-
-        $node1 = $builder->node('', 'CUSTOM');
-        $node2 = $builder->node('', 'custom');
-
-        $this->assertInstanceOf(\get_class($node1), $node2);
-    }
-
-    public function testNumericNodeCreation()
-    {
-        $builder = new BaseNodeBuilder();
-
-        $node = $builder->integerNode('foo')->min(3)->max(5);
-        $this->assertInstanceOf('Symfony\Component\Config\Definition\Builder\IntegerNodeDefinition', $node);
-
-        $node = $builder->floatNode('bar')->min(3.0)->max(5.0);
-        $this->assertInstanceOf('Symfony\Component\Config\Definition\Builder\FloatNodeDefinition', $node);
-    }
-}
-
-class SomeNodeDefinition extends BaseVariableNodeDefinition
-{
-}
diff --git a/vendor/symfony/config/Tests/Definition/Builder/NumericNodeDefinitionTest.php b/vendor/symfony/config/Tests/Definition/Builder/NumericNodeDefinitionTest.php
deleted file mode 100644
index aa938bbaa7ed1e6b9db38752f58babb000c70e98..0000000000000000000000000000000000000000
--- a/vendor/symfony/config/Tests/Definition/Builder/NumericNodeDefinitionTest.php
+++ /dev/null
@@ -1,89 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Config\Tests\Definition\Builder;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Config\Definition\Builder\FloatNodeDefinition;
-use Symfony\Component\Config\Definition\Builder\IntegerNodeDefinition;
-
-class NumericNodeDefinitionTest extends TestCase
-{
-    public function testIncoherentMinAssertion()
-    {
-        $this->expectException('InvalidArgumentException');
-        $this->expectExceptionMessage('You cannot define a min(4) as you already have a max(3)');
-        $def = new IntegerNodeDefinition('foo');
-        $def->max(3)->min(4);
-    }
-
-    public function testIncoherentMaxAssertion()
-    {
-        $this->expectException('InvalidArgumentException');
-        $this->expectExceptionMessage('You cannot define a max(2) as you already have a min(3)');
-        $node = new IntegerNodeDefinition('foo');
-        $node->min(3)->max(2);
-    }
-
-    public function testIntegerMinAssertion()
-    {
-        $this->expectException('Symfony\Component\Config\Definition\Exception\InvalidConfigurationException');
-        $this->expectExceptionMessage('The value 4 is too small for path "foo". Should be greater than or equal to 5');
-        $def = new IntegerNodeDefinition('foo');
-        $def->min(5)->getNode()->finalize(4);
-    }
-
-    public function testIntegerMaxAssertion()
-    {
-        $this->expectException('Symfony\Component\Config\Definition\Exception\InvalidConfigurationException');
-        $this->expectExceptionMessage('The value 4 is too big for path "foo". Should be less than or equal to 3');
-        $def = new IntegerNodeDefinition('foo');
-        $def->max(3)->getNode()->finalize(4);
-    }
-
-    public function testIntegerValidMinMaxAssertion()
-    {
-        $def = new IntegerNodeDefinition('foo');
-        $node = $def->min(3)->max(7)->getNode();
-        $this->assertEquals(4, $node->finalize(4));
-    }
-
-    public function testFloatMinAssertion()
-    {
-        $this->expectException('Symfony\Component\Config\Definition\Exception\InvalidConfigurationException');
-        $this->expectExceptionMessage('The value 400 is too small for path "foo". Should be greater than or equal to 500');
-        $def = new FloatNodeDefinition('foo');
-        $def->min(5E2)->getNode()->finalize(4e2);
-    }
-
-    public function testFloatMaxAssertion()
-    {
-        $this->expectException('Symfony\Component\Config\Definition\Exception\InvalidConfigurationException');
-        $this->expectExceptionMessage('The value 4.3 is too big for path "foo". Should be less than or equal to 0.3');
-        $def = new FloatNodeDefinition('foo');
-        $def->max(0.3)->getNode()->finalize(4.3);
-    }
-
-    public function testFloatValidMinMaxAssertion()
-    {
-        $def = new FloatNodeDefinition('foo');
-        $node = $def->min(3.0)->max(7e2)->getNode();
-        $this->assertEquals(4.5, $node->finalize(4.5));
-    }
-
-    public function testCannotBeEmptyThrowsAnException()
-    {
-        $this->expectException('Symfony\Component\Config\Definition\Exception\InvalidDefinitionException');
-        $this->expectExceptionMessage('->cannotBeEmpty() is not applicable to NumericNodeDefinition.');
-        $def = new IntegerNodeDefinition('foo');
-        $def->cannotBeEmpty();
-    }
-}
diff --git a/vendor/symfony/config/Tests/Definition/Builder/TreeBuilderTest.php b/vendor/symfony/config/Tests/Definition/Builder/TreeBuilderTest.php
deleted file mode 100644
index 53c9c256b32a09e5d18cf75aaec85a8c70253a6c..0000000000000000000000000000000000000000
--- a/vendor/symfony/config/Tests/Definition/Builder/TreeBuilderTest.php
+++ /dev/null
@@ -1,134 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Config\Tests\Definition\Builder;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Config\Definition\Builder\TreeBuilder;
-use Symfony\Component\Config\Tests\Fixtures\Builder\NodeBuilder as CustomNodeBuilder;
-
-class TreeBuilderTest extends TestCase
-{
-    public function testUsingACustomNodeBuilder()
-    {
-        $builder = new TreeBuilder();
-        $root = $builder->root('custom', 'array', new CustomNodeBuilder());
-
-        $nodeBuilder = $root->children();
-
-        $this->assertInstanceOf('Symfony\Component\Config\Tests\Fixtures\Builder\NodeBuilder', $nodeBuilder);
-
-        $nodeBuilder = $nodeBuilder->arrayNode('deeper')->children();
-
-        $this->assertInstanceOf('Symfony\Component\Config\Tests\Fixtures\Builder\NodeBuilder', $nodeBuilder);
-    }
-
-    public function testOverrideABuiltInNodeType()
-    {
-        $builder = new TreeBuilder();
-        $root = $builder->root('override', 'array', new CustomNodeBuilder());
-
-        $definition = $root->children()->variableNode('variable');
-
-        $this->assertInstanceOf('Symfony\Component\Config\Tests\Fixtures\Builder\VariableNodeDefinition', $definition);
-    }
-
-    public function testAddANodeType()
-    {
-        $builder = new TreeBuilder();
-        $root = $builder->root('override', 'array', new CustomNodeBuilder());
-
-        $definition = $root->children()->barNode('variable');
-
-        $this->assertInstanceOf('Symfony\Component\Config\Tests\Fixtures\Builder\BarNodeDefinition', $definition);
-    }
-
-    public function testCreateABuiltInNodeTypeWithACustomNodeBuilder()
-    {
-        $builder = new TreeBuilder();
-        $root = $builder->root('builtin', 'array', new CustomNodeBuilder());
-
-        $definition = $root->children()->booleanNode('boolean');
-
-        $this->assertInstanceOf('Symfony\Component\Config\Definition\Builder\BooleanNodeDefinition', $definition);
-    }
-
-    public function testPrototypedArrayNodeUseTheCustomNodeBuilder()
-    {
-        $builder = new TreeBuilder();
-        $root = $builder->root('override', 'array', new CustomNodeBuilder());
-
-        $root->prototype('bar')->end();
-
-        $this->assertInstanceOf('Symfony\Component\Config\Tests\Fixtures\BarNode', $root->getNode(true)->getPrototype());
-    }
-
-    public function testAnExtendedNodeBuilderGetsPropagatedToTheChildren()
-    {
-        $builder = new TreeBuilder();
-
-        $builder->root('propagation')
-            ->children()
-                ->setNodeClass('extended', 'Symfony\Component\Config\Definition\Builder\BooleanNodeDefinition')
-                ->node('foo', 'extended')->end()
-                ->arrayNode('child')
-                    ->children()
-                        ->node('foo', 'extended')
-                    ->end()
-                ->end()
-            ->end()
-        ->end();
-
-        $node = $builder->buildTree();
-        $children = $node->getChildren();
-
-        $this->assertInstanceOf('Symfony\Component\Config\Definition\BooleanNode', $children['foo']);
-
-        $childChildren = $children['child']->getChildren();
-
-        $this->assertInstanceOf('Symfony\Component\Config\Definition\BooleanNode', $childChildren['foo']);
-    }
-
-    public function testDefinitionInfoGetsTransferredToNode()
-    {
-        $builder = new TreeBuilder();
-
-        $builder->root('test')->info('root info')
-            ->children()
-                ->node('child', 'variable')->info('child info')->defaultValue('default')
-            ->end()
-        ->end();
-
-        $tree = $builder->buildTree();
-        $children = $tree->getChildren();
-
-        $this->assertEquals('root info', $tree->getInfo());
-        $this->assertEquals('child info', $children['child']->getInfo());
-    }
-
-    public function testDefinitionExampleGetsTransferredToNode()
-    {
-        $builder = new TreeBuilder();
-
-        $builder->root('test')
-            ->example(['key' => 'value'])
-            ->children()
-                ->node('child', 'variable')->info('child info')->defaultValue('default')->example('example')
-            ->end()
-        ->end();
-
-        $tree = $builder->buildTree();
-        $children = $tree->getChildren();
-
-        $this->assertIsArray($tree->getExample());
-        $this->assertEquals('example', $children['child']->getExample());
-    }
-}
diff --git a/vendor/symfony/config/Tests/Definition/Dumper/XmlReferenceDumperTest.php b/vendor/symfony/config/Tests/Definition/Dumper/XmlReferenceDumperTest.php
deleted file mode 100644
index 5bc961bab65cf046fdf702a132c2561603d022b7..0000000000000000000000000000000000000000
--- a/vendor/symfony/config/Tests/Definition/Dumper/XmlReferenceDumperTest.php
+++ /dev/null
@@ -1,114 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Config\Tests\Definition\Dumper;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Config\Definition\Dumper\XmlReferenceDumper;
-use Symfony\Component\Config\Tests\Fixtures\Configuration\ExampleConfiguration;
-
-class XmlReferenceDumperTest extends TestCase
-{
-    public function testDumper()
-    {
-        $configuration = new ExampleConfiguration();
-
-        $dumper = new XmlReferenceDumper();
-        $this->assertEquals($this->getConfigurationAsString(), $dumper->dump($configuration));
-    }
-
-    public function testNamespaceDumper()
-    {
-        $configuration = new ExampleConfiguration();
-
-        $dumper = new XmlReferenceDumper();
-        $this->assertEquals(str_replace('http://example.org/schema/dic/acme_root', 'http://symfony.com/schema/dic/symfony', $this->getConfigurationAsString()), $dumper->dump($configuration, 'http://symfony.com/schema/dic/symfony'));
-    }
-
-    private function getConfigurationAsString()
-    {
-        return str_replace("\n", PHP_EOL, <<<'EOL'
-<!-- Namespace: http://example.org/schema/dic/acme_root -->
-<!-- scalar-required: Required -->
-<!-- scalar-deprecated: Deprecated (The child node "scalar_deprecated" at path "acme_root" is deprecated.) -->
-<!-- scalar-deprecated-with-message: Deprecated (Deprecation custom message for "scalar_deprecated_with_message" at "acme_root") -->
-<!-- enum-with-default: One of "this"; "that" -->
-<!-- enum: One of "this"; "that" -->
-<config
-    boolean="true"
-    scalar-empty=""
-    scalar-null="null"
-    scalar-true="true"
-    scalar-false="false"
-    scalar-default="default"
-    scalar-array-empty=""
-    scalar-array-defaults="elem1,elem2"
-    scalar-required=""
-    scalar-deprecated=""
-    scalar-deprecated-with-message=""
-    node-with-a-looong-name=""
-    enum-with-default="this"
-    enum=""
->
-
-    <!-- some info -->
-    <!--
-        child3: this is a long
-                multi-line info text
-                which should be indented;
-                Example: example setting
-    -->
-    <array
-        child1=""
-        child2=""
-        child3=""
-    />
-
-    <!-- prototype -->
-    <scalar-prototyped>scalar value</scalar-prototyped>
-
-    <!-- prototype: Parameter name -->
-    <parameter name="parameter name">scalar value</parameter>
-
-    <!-- prototype -->
-    <connection
-        user=""
-        pass=""
-    />
-
-    <!-- prototype -->
-    <cms-page page="cms page page">
-
-        <!-- prototype -->
-        <!-- title: Required -->
-        <!-- path: Required -->
-        <page
-            locale="page locale"
-            title=""
-            path=""
-        />
-
-    </cms-page>
-
-    <!-- prototype -->
-    <pipou name="pipou name">
-
-        <!-- prototype -->
-        <name didou="" />
-
-    </pipou>
-
-</config>
-
-EOL
-        );
-    }
-}
diff --git a/vendor/symfony/config/Tests/Definition/Dumper/YamlReferenceDumperTest.php b/vendor/symfony/config/Tests/Definition/Dumper/YamlReferenceDumperTest.php
deleted file mode 100644
index 3cb9121ba60221a03b6bc24ea7426626c568ad6d..0000000000000000000000000000000000000000
--- a/vendor/symfony/config/Tests/Definition/Dumper/YamlReferenceDumperTest.php
+++ /dev/null
@@ -1,143 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Config\Tests\Definition\Dumper;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Config\Definition\Dumper\YamlReferenceDumper;
-use Symfony\Component\Config\Tests\Fixtures\Configuration\ExampleConfiguration;
-
-class YamlReferenceDumperTest extends TestCase
-{
-    public function testDumper()
-    {
-        $configuration = new ExampleConfiguration();
-
-        $dumper = new YamlReferenceDumper();
-
-        $this->assertEquals($this->getConfigurationAsString(), $dumper->dump($configuration));
-    }
-
-    public function provideDumpAtPath()
-    {
-        return [
-            'Regular node' => ['scalar_true', <<<EOL
-scalar_true:          true
-EOL
-            ],
-            'Array node' => ['array', <<<EOL
-# some info
-array:
-    child1:               ~
-    child2:               ~
-
-    # this is a long
-    # multi-line info text
-    # which should be indented
-    child3:               ~ # Example: example setting
-EOL
-            ],
-            'Regular nested' => ['array.child2', <<<EOL
-child2:               ~
-EOL
-            ],
-            'Prototype' => ['cms_pages.page', <<<EOL
-# Prototype
-page:
-
-    # Prototype
-    locale:
-        title:                ~ # Required
-        path:                 ~ # Required
-EOL
-            ],
-            'Nested prototype' => ['cms_pages.page.locale', <<<EOL
-# Prototype
-locale:
-    title:                ~ # Required
-    path:                 ~ # Required
-EOL
-            ],
-        ];
-    }
-
-    /**
-     * @dataProvider provideDumpAtPath
-     */
-    public function testDumpAtPath($path, $expected)
-    {
-        $configuration = new ExampleConfiguration();
-
-        $dumper = new YamlReferenceDumper();
-
-        $this->assertSame(trim($expected), trim($dumper->dumpAtPath($configuration, $path)));
-    }
-
-    private function getConfigurationAsString()
-    {
-        return <<<'EOL'
-acme_root:
-    boolean:              true
-    scalar_empty:         ~
-    scalar_null:          null
-    scalar_true:          true
-    scalar_false:         false
-    scalar_default:       default
-    scalar_array_empty:   []
-    scalar_array_defaults:
-
-        # Defaults:
-        - elem1
-        - elem2
-    scalar_required:      ~ # Required
-    scalar_deprecated:    ~ # Deprecated (The child node "scalar_deprecated" at path "acme_root" is deprecated.)
-    scalar_deprecated_with_message: ~ # Deprecated (Deprecation custom message for "scalar_deprecated_with_message" at "acme_root")
-    node_with_a_looong_name: ~
-    enum_with_default:    this # One of "this"; "that"
-    enum:                 ~ # One of "this"; "that"
-
-    # some info
-    array:
-        child1:               ~
-        child2:               ~
-
-        # this is a long
-        # multi-line info text
-        # which should be indented
-        child3:               ~ # Example: example setting
-    scalar_prototyped:    []
-    parameters:
-
-        # Prototype: Parameter name
-        name:                 ~
-    connections:
-
-        # Prototype
-        -
-            user:                 ~
-            pass:                 ~
-    cms_pages:
-
-        # Prototype
-        page:
-
-            # Prototype
-            locale:
-                title:                ~ # Required
-                path:                 ~ # Required
-    pipou:
-
-        # Prototype
-        name:                 []
-
-EOL;
-    }
-}
diff --git a/vendor/symfony/config/Tests/Definition/EnumNodeTest.php b/vendor/symfony/config/Tests/Definition/EnumNodeTest.php
deleted file mode 100644
index fa89eea23870b53cc25df71bd8e03f8c8a868da8..0000000000000000000000000000000000000000
--- a/vendor/symfony/config/Tests/Definition/EnumNodeTest.php
+++ /dev/null
@@ -1,51 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Config\Tests\Definition;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Config\Definition\EnumNode;
-
-class EnumNodeTest extends TestCase
-{
-    public function testFinalizeValue()
-    {
-        $node = new EnumNode('foo', null, ['foo', 'bar']);
-        $this->assertSame('foo', $node->finalize('foo'));
-    }
-
-    public function testConstructionWithNoValues()
-    {
-        $this->expectException('InvalidArgumentException');
-        $this->expectExceptionMessage('$values must contain at least one element.');
-        new EnumNode('foo', null, []);
-    }
-
-    public function testConstructionWithOneValue()
-    {
-        $node = new EnumNode('foo', null, ['foo']);
-        $this->assertSame('foo', $node->finalize('foo'));
-    }
-
-    public function testConstructionWithOneDistinctValue()
-    {
-        $node = new EnumNode('foo', null, ['foo', 'foo']);
-        $this->assertSame('foo', $node->finalize('foo'));
-    }
-
-    public function testFinalizeWithInvalidValue()
-    {
-        $this->expectException('Symfony\Component\Config\Definition\Exception\InvalidConfigurationException');
-        $this->expectExceptionMessage('The value "foobar" is not allowed for path "foo". Permissible values: "foo", "bar"');
-        $node = new EnumNode('foo', null, ['foo', 'bar']);
-        $node->finalize('foobar');
-    }
-}
diff --git a/vendor/symfony/config/Tests/Definition/FinalizationTest.php b/vendor/symfony/config/Tests/Definition/FinalizationTest.php
deleted file mode 100644
index be68a27c6906c51b0f18fe206dd6f6f0b80352b7..0000000000000000000000000000000000000000
--- a/vendor/symfony/config/Tests/Definition/FinalizationTest.php
+++ /dev/null
@@ -1,74 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Config\Tests\Definition;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Config\Definition\Builder\TreeBuilder;
-use Symfony\Component\Config\Definition\NodeInterface;
-use Symfony\Component\Config\Definition\Processor;
-
-class FinalizationTest extends TestCase
-{
-    public function testUnsetKeyWithDeepHierarchy()
-    {
-        $tb = new TreeBuilder();
-        $tree = $tb
-            ->root('config', 'array')
-                ->children()
-                    ->node('level1', 'array')
-                        ->canBeUnset()
-                        ->children()
-                            ->node('level2', 'array')
-                                ->canBeUnset()
-                                ->children()
-                                    ->node('somevalue', 'scalar')->end()
-                                    ->node('anothervalue', 'scalar')->end()
-                                ->end()
-                            ->end()
-                            ->node('level1_scalar', 'scalar')->end()
-                        ->end()
-                    ->end()
-                ->end()
-            ->end()
-            ->buildTree()
-        ;
-
-        $a = [
-            'level1' => [
-                'level2' => [
-                    'somevalue' => 'foo',
-                    'anothervalue' => 'bar',
-                ],
-                'level1_scalar' => 'foo',
-            ],
-        ];
-
-        $b = [
-            'level1' => [
-                'level2' => false,
-            ],
-        ];
-
-        $this->assertEquals([
-            'level1' => [
-                'level1_scalar' => 'foo',
-            ],
-        ], $this->process($tree, [$a, $b]));
-    }
-
-    protected function process(NodeInterface $tree, array $configs)
-    {
-        $processor = new Processor();
-
-        return $processor->process($tree, $configs);
-    }
-}
diff --git a/vendor/symfony/config/Tests/Definition/FloatNodeTest.php b/vendor/symfony/config/Tests/Definition/FloatNodeTest.php
deleted file mode 100644
index fed9f013db8ad62d99a50e0fb057d17bcb63820e..0000000000000000000000000000000000000000
--- a/vendor/symfony/config/Tests/Definition/FloatNodeTest.php
+++ /dev/null
@@ -1,78 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Config\Tests\Definition;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Config\Definition\FloatNode;
-
-class FloatNodeTest extends TestCase
-{
-    /**
-     * @dataProvider getValidValues
-     */
-    public function testNormalize($value)
-    {
-        $node = new FloatNode('test');
-        $this->assertSame($value, $node->normalize($value));
-    }
-
-    /**
-     * @dataProvider getValidValues
-     *
-     * @param int $value
-     */
-    public function testValidNonEmptyValues($value)
-    {
-        $node = new FloatNode('test');
-        $node->setAllowEmptyValue(false);
-
-        $this->assertSame($value, $node->finalize($value));
-    }
-
-    public function getValidValues()
-    {
-        return [
-            [1798.0],
-            [-678.987],
-            [12.56E45],
-            [0.0],
-            // Integer are accepted too, they will be cast
-            [17],
-            [-10],
-            [0],
-        ];
-    }
-
-    /**
-     * @dataProvider getInvalidValues
-     */
-    public function testNormalizeThrowsExceptionOnInvalidValues($value)
-    {
-        $this->expectException('Symfony\Component\Config\Definition\Exception\InvalidTypeException');
-        $node = new FloatNode('test');
-        $node->normalize($value);
-    }
-
-    public function getInvalidValues()
-    {
-        return [
-            [null],
-            [''],
-            ['foo'],
-            [true],
-            [false],
-            [[]],
-            [['foo' => 'bar']],
-            [new \stdClass()],
-        ];
-    }
-}
diff --git a/vendor/symfony/config/Tests/Definition/IntegerNodeTest.php b/vendor/symfony/config/Tests/Definition/IntegerNodeTest.php
deleted file mode 100644
index 3fb1b771e5f94aa71f6a680d7a5bc749e6c9083f..0000000000000000000000000000000000000000
--- a/vendor/symfony/config/Tests/Definition/IntegerNodeTest.php
+++ /dev/null
@@ -1,75 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Config\Tests\Definition;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Config\Definition\IntegerNode;
-
-class IntegerNodeTest extends TestCase
-{
-    /**
-     * @dataProvider getValidValues
-     */
-    public function testNormalize($value)
-    {
-        $node = new IntegerNode('test');
-        $this->assertSame($value, $node->normalize($value));
-    }
-
-    /**
-     * @dataProvider getValidValues
-     *
-     * @param int $value
-     */
-    public function testValidNonEmptyValues($value)
-    {
-        $node = new IntegerNode('test');
-        $node->setAllowEmptyValue(false);
-
-        $this->assertSame($value, $node->finalize($value));
-    }
-
-    public function getValidValues()
-    {
-        return [
-            [1798],
-            [-678],
-            [0],
-        ];
-    }
-
-    /**
-     * @dataProvider getInvalidValues
-     */
-    public function testNormalizeThrowsExceptionOnInvalidValues($value)
-    {
-        $this->expectException('Symfony\Component\Config\Definition\Exception\InvalidTypeException');
-        $node = new IntegerNode('test');
-        $node->normalize($value);
-    }
-
-    public function getInvalidValues()
-    {
-        return [
-            [null],
-            [''],
-            ['foo'],
-            [true],
-            [false],
-            [0.0],
-            [0.1],
-            [[]],
-            [['foo' => 'bar']],
-            [new \stdClass()],
-        ];
-    }
-}
diff --git a/vendor/symfony/config/Tests/Definition/MergeTest.php b/vendor/symfony/config/Tests/Definition/MergeTest.php
deleted file mode 100644
index 8fee2635c7622d1b8d4fb91ee2185ecd14b45167..0000000000000000000000000000000000000000
--- a/vendor/symfony/config/Tests/Definition/MergeTest.php
+++ /dev/null
@@ -1,192 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Config\Tests\Definition;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Config\Definition\Builder\TreeBuilder;
-
-class MergeTest extends TestCase
-{
-    public function testForbiddenOverwrite()
-    {
-        $this->expectException('Symfony\Component\Config\Definition\Exception\ForbiddenOverwriteException');
-        $tb = new TreeBuilder();
-        $tree = $tb
-            ->root('root', 'array')
-                ->children()
-                    ->node('foo', 'scalar')
-                        ->cannotBeOverwritten()
-                    ->end()
-                ->end()
-            ->end()
-            ->buildTree()
-        ;
-
-        $a = [
-            'foo' => 'bar',
-        ];
-
-        $b = [
-            'foo' => 'moo',
-        ];
-
-        $tree->merge($a, $b);
-    }
-
-    public function testUnsetKey()
-    {
-        $tb = new TreeBuilder();
-        $tree = $tb
-            ->root('root', 'array')
-                ->children()
-                    ->node('foo', 'scalar')->end()
-                    ->node('bar', 'scalar')->end()
-                    ->node('unsettable', 'array')
-                        ->canBeUnset()
-                        ->children()
-                            ->node('foo', 'scalar')->end()
-                            ->node('bar', 'scalar')->end()
-                        ->end()
-                    ->end()
-                    ->node('unsetted', 'array')
-                        ->canBeUnset()
-                        ->prototype('scalar')->end()
-                    ->end()
-                ->end()
-            ->end()
-            ->buildTree()
-        ;
-
-        $a = [
-            'foo' => 'bar',
-            'unsettable' => [
-                'foo' => 'a',
-                'bar' => 'b',
-            ],
-            'unsetted' => false,
-        ];
-
-        $b = [
-            'foo' => 'moo',
-            'bar' => 'b',
-            'unsettable' => false,
-            'unsetted' => ['a', 'b'],
-        ];
-
-        $this->assertEquals([
-            'foo' => 'moo',
-            'bar' => 'b',
-            'unsettable' => false,
-            'unsetted' => ['a', 'b'],
-        ], $tree->merge($a, $b));
-    }
-
-    public function testDoesNotAllowNewKeysInSubsequentConfigs()
-    {
-        $this->expectException('Symfony\Component\Config\Definition\Exception\InvalidConfigurationException');
-        $tb = new TreeBuilder();
-        $tree = $tb
-            ->root('config', 'array')
-                ->children()
-                    ->node('test', 'array')
-                        ->disallowNewKeysInSubsequentConfigs()
-                        ->useAttributeAsKey('key')
-                        ->prototype('array')
-                            ->children()
-                                ->node('value', 'scalar')->end()
-                            ->end()
-                        ->end()
-                    ->end()
-                ->end()
-            ->end()
-            ->buildTree();
-
-        $a = [
-            'test' => [
-                'a' => ['value' => 'foo'],
-            ],
-        ];
-
-        $b = [
-            'test' => [
-                'b' => ['value' => 'foo'],
-            ],
-        ];
-
-        $tree->merge($a, $b);
-    }
-
-    public function testPerformsNoDeepMerging()
-    {
-        $tb = new TreeBuilder();
-
-        $tree = $tb
-            ->root('config', 'array')
-                ->children()
-                    ->node('no_deep_merging', 'array')
-                        ->performNoDeepMerging()
-                        ->children()
-                            ->node('foo', 'scalar')->end()
-                            ->node('bar', 'scalar')->end()
-                        ->end()
-                    ->end()
-                ->end()
-            ->end()
-            ->buildTree()
-        ;
-
-        $a = [
-            'no_deep_merging' => [
-                'foo' => 'a',
-                'bar' => 'b',
-            ],
-        ];
-
-        $b = [
-            'no_deep_merging' => [
-                'c' => 'd',
-            ],
-        ];
-
-        $this->assertEquals([
-            'no_deep_merging' => [
-                'c' => 'd',
-            ],
-        ], $tree->merge($a, $b));
-    }
-
-    public function testPrototypeWithoutAKeyAttribute()
-    {
-        $tb = new TreeBuilder();
-
-        $tree = $tb
-            ->root('config', 'array')
-                ->children()
-                    ->arrayNode('append_elements')
-                        ->prototype('scalar')->end()
-                    ->end()
-                ->end()
-            ->end()
-            ->buildTree()
-        ;
-
-        $a = [
-            'append_elements' => ['a', 'b'],
-        ];
-
-        $b = [
-            'append_elements' => ['c', 'd'],
-        ];
-
-        $this->assertEquals(['append_elements' => ['a', 'b', 'c', 'd']], $tree->merge($a, $b));
-    }
-}
diff --git a/vendor/symfony/config/Tests/Definition/NormalizationTest.php b/vendor/symfony/config/Tests/Definition/NormalizationTest.php
deleted file mode 100644
index 200a985944f38a5b01311aca0b703ec089350920..0000000000000000000000000000000000000000
--- a/vendor/symfony/config/Tests/Definition/NormalizationTest.php
+++ /dev/null
@@ -1,228 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Config\Tests\Definition;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Config\Definition\Builder\TreeBuilder;
-use Symfony\Component\Config\Definition\NodeInterface;
-
-class NormalizationTest extends TestCase
-{
-    /**
-     * @dataProvider getEncoderTests
-     */
-    public function testNormalizeEncoders($denormalized)
-    {
-        $tb = new TreeBuilder();
-        $tree = $tb
-            ->root('root_name', 'array')
-                ->fixXmlConfig('encoder')
-                ->children()
-                    ->node('encoders', 'array')
-                        ->useAttributeAsKey('class')
-                        ->prototype('array')
-                            ->beforeNormalization()->ifString()->then(function ($v) { return ['algorithm' => $v]; })->end()
-                            ->children()
-                                ->node('algorithm', 'scalar')->end()
-                            ->end()
-                        ->end()
-                    ->end()
-                ->end()
-            ->end()
-            ->buildTree()
-        ;
-
-        $normalized = [
-            'encoders' => [
-                'foo' => ['algorithm' => 'plaintext'],
-            ],
-        ];
-
-        $this->assertNormalized($tree, $denormalized, $normalized);
-    }
-
-    public function getEncoderTests()
-    {
-        $configs = [];
-
-        // XML
-        $configs[] = [
-            'encoder' => [
-                ['class' => 'foo', 'algorithm' => 'plaintext'],
-            ],
-        ];
-
-        // XML when only one element of this type
-        $configs[] = [
-            'encoder' => ['class' => 'foo', 'algorithm' => 'plaintext'],
-        ];
-
-        // YAML/PHP
-        $configs[] = [
-            'encoders' => [
-                ['class' => 'foo', 'algorithm' => 'plaintext'],
-            ],
-        ];
-
-        // YAML/PHP
-        $configs[] = [
-            'encoders' => [
-                'foo' => 'plaintext',
-            ],
-        ];
-
-        // YAML/PHP
-        $configs[] = [
-            'encoders' => [
-                'foo' => ['algorithm' => 'plaintext'],
-            ],
-        ];
-
-        return array_map(function ($v) {
-            return [$v];
-        }, $configs);
-    }
-
-    /**
-     * @dataProvider getAnonymousKeysTests
-     */
-    public function testAnonymousKeysArray($denormalized)
-    {
-        $tb = new TreeBuilder();
-        $tree = $tb
-            ->root('root', 'array')
-                ->children()
-                    ->node('logout', 'array')
-                        ->fixXmlConfig('handler')
-                        ->children()
-                            ->node('handlers', 'array')
-                                ->prototype('scalar')->end()
-                            ->end()
-                        ->end()
-                    ->end()
-                ->end()
-            ->end()
-            ->buildTree()
-        ;
-
-        $normalized = ['logout' => ['handlers' => ['a', 'b', 'c']]];
-
-        $this->assertNormalized($tree, $denormalized, $normalized);
-    }
-
-    public function getAnonymousKeysTests()
-    {
-        $configs = [];
-
-        $configs[] = [
-            'logout' => [
-                'handlers' => ['a', 'b', 'c'],
-            ],
-        ];
-
-        $configs[] = [
-            'logout' => [
-                'handler' => ['a', 'b', 'c'],
-            ],
-        ];
-
-        return array_map(function ($v) { return [$v]; }, $configs);
-    }
-
-    /**
-     * @dataProvider getNumericKeysTests
-     */
-    public function testNumericKeysAsAttributes($denormalized)
-    {
-        $normalized = [
-            'thing' => [42 => ['foo', 'bar'], 1337 => ['baz', 'qux']],
-        ];
-
-        $this->assertNormalized($this->getNumericKeysTestTree(), $denormalized, $normalized);
-    }
-
-    public function getNumericKeysTests()
-    {
-        $configs = [];
-
-        $configs[] = [
-            'thing' => [
-                42 => ['foo', 'bar'], 1337 => ['baz', 'qux'],
-            ],
-        ];
-
-        $configs[] = [
-            'thing' => [
-                ['foo', 'bar', 'id' => 42], ['baz', 'qux', 'id' => 1337],
-            ],
-        ];
-
-        return array_map(function ($v) { return [$v]; }, $configs);
-    }
-
-    public function testNonAssociativeArrayThrowsExceptionIfAttributeNotSet()
-    {
-        $this->expectException('Symfony\Component\Config\Definition\Exception\InvalidConfigurationException');
-        $this->expectExceptionMessage('The attribute "id" must be set for path "root.thing".');
-        $denormalized = [
-            'thing' => [
-                ['foo', 'bar'], ['baz', 'qux'],
-            ],
-        ];
-
-        $this->assertNormalized($this->getNumericKeysTestTree(), $denormalized, []);
-    }
-
-    public function testAssociativeArrayPreserveKeys()
-    {
-        $tb = new TreeBuilder();
-        $tree = $tb
-            ->root('root', 'array')
-                ->prototype('array')
-                    ->children()
-                        ->node('foo', 'scalar')->end()
-                    ->end()
-                ->end()
-            ->end()
-            ->buildTree()
-        ;
-
-        $data = ['first' => ['foo' => 'bar']];
-
-        $this->assertNormalized($tree, $data, $data);
-    }
-
-    public static function assertNormalized(NodeInterface $tree, $denormalized, $normalized)
-    {
-        self::assertSame($normalized, $tree->normalize($denormalized));
-    }
-
-    private function getNumericKeysTestTree()
-    {
-        $tb = new TreeBuilder();
-        $tree = $tb
-            ->root('root', 'array')
-                ->children()
-                    ->node('thing', 'array')
-                        ->useAttributeAsKey('id')
-                        ->prototype('array')
-                            ->prototype('scalar')->end()
-                        ->end()
-                    ->end()
-                ->end()
-            ->end()
-            ->buildTree()
-        ;
-
-        return $tree;
-    }
-}
diff --git a/vendor/symfony/config/Tests/Definition/PrototypedArrayNodeTest.php b/vendor/symfony/config/Tests/Definition/PrototypedArrayNodeTest.php
deleted file mode 100644
index 7a58ead8da9676e13cc190341dac9364c300d057..0000000000000000000000000000000000000000
--- a/vendor/symfony/config/Tests/Definition/PrototypedArrayNodeTest.php
+++ /dev/null
@@ -1,341 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Config\Tests\Definition;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Config\Definition\ArrayNode;
-use Symfony\Component\Config\Definition\PrototypedArrayNode;
-use Symfony\Component\Config\Definition\ScalarNode;
-use Symfony\Component\Config\Definition\VariableNode;
-
-class PrototypedArrayNodeTest extends TestCase
-{
-    public function testGetDefaultValueReturnsAnEmptyArrayForPrototypes()
-    {
-        $node = new PrototypedArrayNode('root');
-        $prototype = new ArrayNode(null, $node);
-        $node->setPrototype($prototype);
-        $this->assertEmpty($node->getDefaultValue());
-    }
-
-    public function testGetDefaultValueReturnsDefaultValueForPrototypes()
-    {
-        $node = new PrototypedArrayNode('root');
-        $prototype = new ArrayNode(null, $node);
-        $node->setPrototype($prototype);
-        $node->setDefaultValue(['test']);
-        $this->assertEquals(['test'], $node->getDefaultValue());
-    }
-
-    // a remapped key (e.g. "mapping" -> "mappings") should be unset after being used
-    public function testRemappedKeysAreUnset()
-    {
-        $node = new ArrayNode('root');
-        $mappingsNode = new PrototypedArrayNode('mappings');
-        $node->addChild($mappingsNode);
-
-        // each item under mappings is just a scalar
-        $prototype = new ScalarNode(null, $mappingsNode);
-        $mappingsNode->setPrototype($prototype);
-
-        $remappings = [];
-        $remappings[] = ['mapping', 'mappings'];
-        $node->setXmlRemappings($remappings);
-
-        $normalized = $node->normalize(['mapping' => ['foo', 'bar']]);
-        $this->assertEquals(['mappings' => ['foo', 'bar']], $normalized);
-    }
-
-    /**
-     * Tests that when a key attribute is mapped, that key is removed from the array.
-     *
-     *     <things>
-     *         <option id="option1" value="foo">
-     *         <option id="option2" value="bar">
-     *     </things>
-     *
-     * The above should finally be mapped to an array that looks like this
-     * (because "id" is the key attribute).
-     *
-     *     [
-     *         'things' => [
-     *             'option1' => 'foo',
-     *             'option2' => 'bar',
-     *         ]
-     *     ]
-     */
-    public function testMappedAttributeKeyIsRemoved()
-    {
-        $node = new PrototypedArrayNode('root');
-        $node->setKeyAttribute('id', true);
-
-        // each item under the root is an array, with one scalar item
-        $prototype = new ArrayNode(null, $node);
-        $prototype->addChild(new ScalarNode('foo'));
-        $node->setPrototype($prototype);
-
-        $children = [];
-        $children[] = ['id' => 'item_name', 'foo' => 'bar'];
-        $normalized = $node->normalize($children);
-
-        $expected = [];
-        $expected['item_name'] = ['foo' => 'bar'];
-        $this->assertEquals($expected, $normalized);
-    }
-
-    /**
-     * Tests the opposite of the testMappedAttributeKeyIsRemoved because
-     * the removal can be toggled with an option.
-     */
-    public function testMappedAttributeKeyNotRemoved()
-    {
-        $node = new PrototypedArrayNode('root');
-        $node->setKeyAttribute('id', false);
-
-        // each item under the root is an array, with two scalar items
-        $prototype = new ArrayNode(null, $node);
-        $prototype->addChild(new ScalarNode('foo'));
-        $prototype->addChild(new ScalarNode('id')); // the key attribute will remain
-        $node->setPrototype($prototype);
-
-        $children = [];
-        $children[] = ['id' => 'item_name', 'foo' => 'bar'];
-        $normalized = $node->normalize($children);
-
-        $expected = [];
-        $expected['item_name'] = ['id' => 'item_name', 'foo' => 'bar'];
-        $this->assertEquals($expected, $normalized);
-    }
-
-    public function testAddDefaultChildren()
-    {
-        $node = $this->getPrototypeNodeWithDefaultChildren();
-        $node->setAddChildrenIfNoneSet();
-        $this->assertTrue($node->hasDefaultValue());
-        $this->assertEquals([['foo' => 'bar']], $node->getDefaultValue());
-
-        $node = $this->getPrototypeNodeWithDefaultChildren();
-        $node->setKeyAttribute('foobar');
-        $node->setAddChildrenIfNoneSet();
-        $this->assertTrue($node->hasDefaultValue());
-        $this->assertEquals(['defaults' => ['foo' => 'bar']], $node->getDefaultValue());
-
-        $node = $this->getPrototypeNodeWithDefaultChildren();
-        $node->setKeyAttribute('foobar');
-        $node->setAddChildrenIfNoneSet('defaultkey');
-        $this->assertTrue($node->hasDefaultValue());
-        $this->assertEquals(['defaultkey' => ['foo' => 'bar']], $node->getDefaultValue());
-
-        $node = $this->getPrototypeNodeWithDefaultChildren();
-        $node->setKeyAttribute('foobar');
-        $node->setAddChildrenIfNoneSet(['defaultkey']);
-        $this->assertTrue($node->hasDefaultValue());
-        $this->assertEquals(['defaultkey' => ['foo' => 'bar']], $node->getDefaultValue());
-
-        $node = $this->getPrototypeNodeWithDefaultChildren();
-        $node->setKeyAttribute('foobar');
-        $node->setAddChildrenIfNoneSet(['dk1', 'dk2']);
-        $this->assertTrue($node->hasDefaultValue());
-        $this->assertEquals(['dk1' => ['foo' => 'bar'], 'dk2' => ['foo' => 'bar']], $node->getDefaultValue());
-
-        $node = $this->getPrototypeNodeWithDefaultChildren();
-        $node->setAddChildrenIfNoneSet([5, 6]);
-        $this->assertTrue($node->hasDefaultValue());
-        $this->assertEquals([0 => ['foo' => 'bar'], 1 => ['foo' => 'bar']], $node->getDefaultValue());
-
-        $node = $this->getPrototypeNodeWithDefaultChildren();
-        $node->setAddChildrenIfNoneSet(2);
-        $this->assertTrue($node->hasDefaultValue());
-        $this->assertEquals([['foo' => 'bar'], ['foo' => 'bar']], $node->getDefaultValue());
-    }
-
-    public function testDefaultChildrenWinsOverDefaultValue()
-    {
-        $node = $this->getPrototypeNodeWithDefaultChildren();
-        $node->setAddChildrenIfNoneSet();
-        $node->setDefaultValue(['bar' => 'foo']);
-        $this->assertTrue($node->hasDefaultValue());
-        $this->assertEquals([['foo' => 'bar']], $node->getDefaultValue());
-    }
-
-    protected function getPrototypeNodeWithDefaultChildren()
-    {
-        $node = new PrototypedArrayNode('root');
-        $prototype = new ArrayNode(null, $node);
-        $child = new ScalarNode('foo');
-        $child->setDefaultValue('bar');
-        $prototype->addChild($child);
-        $prototype->setAddIfNotSet(true);
-        $node->setPrototype($prototype);
-
-        return $node;
-    }
-
-    /**
-     * Tests that when a key attribute is mapped, that key is removed from the array.
-     * And if only 'value' element is left in the array, it will replace its wrapper array.
-     *
-     *     <things>
-     *         <option id="option1" value="value1">
-     *     </things>
-     *
-     * The above should finally be mapped to an array that looks like this
-     * (because "id" is the key attribute).
-     *
-     *     [
-     *         'things' => [
-     *             'option1' => 'value1'
-     *         ]
-     *     ]
-     *
-     * It's also possible to mix 'value-only' and 'non-value-only' elements in the array.
-     *
-     * <things>
-     *     <option id="option1" value="value1">
-     *     <option id="option2" value="value2" foo="foo2">
-     * </things>
-     *
-     * The above should finally be mapped to an array as follows
-     *
-     * [
-     *     'things' => [
-     *         'option1' => 'value1',
-     *         'option2' => [
-     *             'value' => 'value2',
-     *             'foo' => 'foo2'
-     *         ]
-     *     ]
-     * ]
-     *
-     * The 'value' element can also be ArrayNode:
-     *
-     * <things>
-     *     <option id="option1">
-     *         <value>
-     *            <foo>foo1</foo>
-     *            <bar>bar1</bar>
-     *         </value>
-     *     </option>
-     * </things>
-     *
-     * The above should be finally be mapped to an array as follows
-     *
-     * [
-     *     'things' => [
-     *         'option1' => [
-     *             'foo' => 'foo1',
-     *             'bar' => 'bar1'
-     *         ]
-     *     ]
-     * ]
-     *
-     * If using VariableNode for value node, it's also possible to mix different types of value nodes:
-     *
-     * <things>
-     *     <option id="option1">
-     *         <value>
-     *            <foo>foo1</foo>
-     *            <bar>bar1</bar>
-     *         </value>
-     *     </option>
-     *     <option id="option2" value="value2">
-     * </things>
-     *
-     * The above should be finally mapped to an array as follows
-     *
-     * [
-     *     'things' => [
-     *         'option1' => [
-     *             'foo' => 'foo1',
-     *             'bar' => 'bar1'
-     *         ],
-     *         'option2' => 'value2'
-     *     ]
-     * ]
-     *
-     * @dataProvider getDataForKeyRemovedLeftValueOnly
-     */
-    public function testMappedAttributeKeyIsRemovedLeftValueOnly($value, $children, $expected)
-    {
-        $node = new PrototypedArrayNode('root');
-        $node->setKeyAttribute('id', true);
-
-        // each item under the root is an array, with one scalar item
-        $prototype = new ArrayNode(null, $node);
-        $prototype->addChild(new ScalarNode('id'));
-        $prototype->addChild(new ScalarNode('foo'));
-        $prototype->addChild($value);
-        $node->setPrototype($prototype);
-
-        $normalized = $node->normalize($children);
-        $this->assertEquals($expected, $normalized);
-    }
-
-    public function getDataForKeyRemovedLeftValueOnly()
-    {
-        $scalarValue = new ScalarNode('value');
-
-        $arrayValue = new ArrayNode('value');
-        $arrayValue->addChild(new ScalarNode('foo'));
-        $arrayValue->addChild(new ScalarNode('bar'));
-
-        $variableValue = new VariableNode('value');
-
-        return [
-           [
-               $scalarValue,
-               [
-                   ['id' => 'option1', 'value' => 'value1'],
-               ],
-               ['option1' => 'value1'],
-           ],
-
-           [
-               $scalarValue,
-               [
-                   ['id' => 'option1', 'value' => 'value1'],
-                   ['id' => 'option2', 'value' => 'value2', 'foo' => 'foo2'],
-               ],
-               [
-                   'option1' => 'value1',
-                   'option2' => ['value' => 'value2', 'foo' => 'foo2'],
-               ],
-           ],
-
-           [
-               $arrayValue,
-               [
-                   [
-                       'id' => 'option1',
-                       'value' => ['foo' => 'foo1', 'bar' => 'bar1'],
-                   ],
-               ],
-               [
-                   'option1' => ['foo' => 'foo1', 'bar' => 'bar1'],
-               ],
-           ],
-
-           [$variableValue,
-               [
-                   [
-                       'id' => 'option1', 'value' => ['foo' => 'foo1', 'bar' => 'bar1'],
-                   ],
-                   ['id' => 'option2', 'value' => 'value2'],
-               ],
-               [
-                   'option1' => ['foo' => 'foo1', 'bar' => 'bar1'],
-                   'option2' => 'value2',
-               ],
-           ],
-        ];
-    }
-}
diff --git a/vendor/symfony/config/Tests/Definition/ScalarNodeTest.php b/vendor/symfony/config/Tests/Definition/ScalarNodeTest.php
deleted file mode 100644
index 4413baf3c784141dd1dfbaef8cc433e9d742e786..0000000000000000000000000000000000000000
--- a/vendor/symfony/config/Tests/Definition/ScalarNodeTest.php
+++ /dev/null
@@ -1,161 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Config\Tests\Definition;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Config\Definition\ArrayNode;
-use Symfony\Component\Config\Definition\ScalarNode;
-
-class ScalarNodeTest extends TestCase
-{
-    /**
-     * @dataProvider getValidValues
-     */
-    public function testNormalize($value)
-    {
-        $node = new ScalarNode('test');
-        $this->assertSame($value, $node->normalize($value));
-    }
-
-    public function getValidValues()
-    {
-        return [
-            [false],
-            [true],
-            [null],
-            [''],
-            ['foo'],
-            [0],
-            [1],
-            [0.0],
-            [0.1],
-        ];
-    }
-
-    public function testSetDeprecated()
-    {
-        $childNode = new ScalarNode('foo');
-        $childNode->setDeprecated('"%node%" is deprecated');
-
-        $this->assertTrue($childNode->isDeprecated());
-        $this->assertSame('"foo" is deprecated', $childNode->getDeprecationMessage($childNode->getName(), $childNode->getPath()));
-
-        $node = new ArrayNode('root');
-        $node->addChild($childNode);
-
-        $deprecationTriggered = 0;
-        $deprecationHandler = function ($level, $message, $file, $line) use (&$prevErrorHandler, &$deprecationTriggered) {
-            if (E_USER_DEPRECATED === $level) {
-                return ++$deprecationTriggered;
-            }
-
-            return $prevErrorHandler ? $prevErrorHandler($level, $message, $file, $line) : false;
-        };
-
-        $prevErrorHandler = set_error_handler($deprecationHandler);
-        $node->finalize([]);
-        restore_error_handler();
-        $this->assertSame(0, $deprecationTriggered, '->finalize() should not trigger if the deprecated node is not set');
-
-        $prevErrorHandler = set_error_handler($deprecationHandler);
-        $node->finalize(['foo' => '']);
-        restore_error_handler();
-        $this->assertSame(1, $deprecationTriggered, '->finalize() should trigger if the deprecated node is set');
-    }
-
-    /**
-     * @dataProvider getInvalidValues
-     */
-    public function testNormalizeThrowsExceptionOnInvalidValues($value)
-    {
-        $this->expectException('Symfony\Component\Config\Definition\Exception\InvalidTypeException');
-        $node = new ScalarNode('test');
-        $node->normalize($value);
-    }
-
-    public function getInvalidValues()
-    {
-        return [
-            [[]],
-            [['foo' => 'bar']],
-            [new \stdClass()],
-        ];
-    }
-
-    public function testNormalizeThrowsExceptionWithoutHint()
-    {
-        $node = new ScalarNode('test');
-
-        $this->expectException('Symfony\Component\Config\Definition\Exception\InvalidTypeException');
-        $this->expectExceptionMessage('Invalid type for path "test". Expected scalar, but got array.');
-
-        $node->normalize([]);
-    }
-
-    public function testNormalizeThrowsExceptionWithErrorMessage()
-    {
-        $node = new ScalarNode('test');
-        $node->setInfo('"the test value"');
-
-        $this->expectException('Symfony\Component\Config\Definition\Exception\InvalidTypeException');
-        $this->expectExceptionMessage("Invalid type for path \"test\". Expected scalar, but got array.\nHint: \"the test value\"");
-
-        $node->normalize([]);
-    }
-
-    /**
-     * @dataProvider getValidNonEmptyValues
-     *
-     * @param mixed $value
-     */
-    public function testValidNonEmptyValues($value)
-    {
-        $node = new ScalarNode('test');
-        $node->setAllowEmptyValue(false);
-
-        $this->assertSame($value, $node->finalize($value));
-    }
-
-    public function getValidNonEmptyValues()
-    {
-        return [
-            [false],
-            [true],
-            ['foo'],
-            [0],
-            [1],
-            [0.0],
-            [0.1],
-        ];
-    }
-
-    /**
-     * @dataProvider getEmptyValues
-     *
-     * @param mixed $value
-     */
-    public function testNotAllowedEmptyValuesThrowException($value)
-    {
-        $this->expectException('Symfony\Component\Config\Definition\Exception\InvalidConfigurationException');
-        $node = new ScalarNode('test');
-        $node->setAllowEmptyValue(false);
-        $node->finalize($value);
-    }
-
-    public function getEmptyValues()
-    {
-        return [
-            [null],
-            [''],
-        ];
-    }
-}
diff --git a/vendor/symfony/config/Tests/DependencyInjection/ConfigCachePassTest.php b/vendor/symfony/config/Tests/DependencyInjection/ConfigCachePassTest.php
deleted file mode 100644
index c2b95195dcc4041f0c48fc0f7a0b86422eb200d9..0000000000000000000000000000000000000000
--- a/vendor/symfony/config/Tests/DependencyInjection/ConfigCachePassTest.php
+++ /dev/null
@@ -1,59 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Config\Tests\DependencyInjection;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Config\DependencyInjection\ConfigCachePass;
-use Symfony\Component\DependencyInjection\Argument\IteratorArgument;
-use Symfony\Component\DependencyInjection\ContainerBuilder;
-use Symfony\Component\DependencyInjection\Reference;
-
-/**
- * @group legacy
- */
-class ConfigCachePassTest extends TestCase
-{
-    public function testThatCheckersAreProcessedInPriorityOrder()
-    {
-        $container = new ContainerBuilder();
-
-        $definition = $container->register('config_cache_factory')->addArgument(null);
-        $container->register('checker_2')->addTag('config_cache.resource_checker', ['priority' => 100]);
-        $container->register('checker_1')->addTag('config_cache.resource_checker', ['priority' => 200]);
-        $container->register('checker_3')->addTag('config_cache.resource_checker');
-
-        $pass = new ConfigCachePass();
-        $pass->process($container);
-
-        $expected = new IteratorArgument([
-            new Reference('checker_1'),
-            new Reference('checker_2'),
-            new Reference('checker_3'),
-        ]);
-        $this->assertEquals($expected, $definition->getArgument(0));
-    }
-
-    public function testThatCheckersCanBeMissing()
-    {
-        $container = new ContainerBuilder();
-
-        $definitionsBefore = \count($container->getDefinitions());
-        $aliasesBefore = \count($container->getAliases());
-
-        $pass = new ConfigCachePass();
-        $pass->process($container);
-
-        // the container is untouched (i.e. no new definitions or aliases)
-        $this->assertCount($definitionsBefore, $container->getDefinitions());
-        $this->assertCount($aliasesBefore, $container->getAliases());
-    }
-}
diff --git a/vendor/symfony/config/Tests/Exception/FileLoaderLoadExceptionTest.php b/vendor/symfony/config/Tests/Exception/FileLoaderLoadExceptionTest.php
deleted file mode 100644
index 8363084c19a221f9d413362514a1380b53de4ae1..0000000000000000000000000000000000000000
--- a/vendor/symfony/config/Tests/Exception/FileLoaderLoadExceptionTest.php
+++ /dev/null
@@ -1,98 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Config\Tests\Exception;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Config\Exception\FileLoaderLoadException;
-
-class FileLoaderLoadExceptionTest extends TestCase
-{
-    public function testMessageCannotLoadResource()
-    {
-        $exception = new FileLoaderLoadException('resource', null);
-        $this->assertEquals('Cannot load resource "resource".', $exception->getMessage());
-    }
-
-    public function testMessageCannotLoadResourceWithType()
-    {
-        $exception = new FileLoaderLoadException('resource', null, null, null, 'foobar');
-        $this->assertEquals('Cannot load resource "resource". Make sure there is a loader supporting the "foobar" type.', $exception->getMessage());
-    }
-
-    public function testMessageCannotLoadResourceWithAnnotationType()
-    {
-        $exception = new FileLoaderLoadException('resource', null, null, null, 'annotation');
-        $this->assertEquals('Cannot load resource "resource". Make sure annotations are installed and enabled.', $exception->getMessage());
-    }
-
-    public function testMessageCannotImportResourceFromSource()
-    {
-        $exception = new FileLoaderLoadException('resource', 'sourceResource');
-        $this->assertEquals('Cannot import resource "resource" from "sourceResource".', $exception->getMessage());
-    }
-
-    public function testMessageCannotImportBundleResource()
-    {
-        $exception = new FileLoaderLoadException('@resource', 'sourceResource');
-        $this->assertEquals(
-            'Cannot import resource "@resource" from "sourceResource". '.
-            'Make sure the "resource" bundle is correctly registered and loaded in the application kernel class. '.
-            'If the bundle is registered, make sure the bundle path "@resource" is not empty.',
-            $exception->getMessage()
-        );
-    }
-
-    public function testMessageHasPreviousErrorWithDotAndUnableToLoad()
-    {
-        $exception = new FileLoaderLoadException(
-            'resource',
-            null,
-            null,
-            new \Exception('There was a previous error with an ending dot.')
-        );
-        $this->assertEquals(
-            'There was a previous error with an ending dot in resource (which is loaded in resource "resource").',
-            $exception->getMessage()
-        );
-    }
-
-    public function testMessageHasPreviousErrorWithoutDotAndUnableToLoad()
-    {
-        $exception = new FileLoaderLoadException(
-            'resource',
-            null,
-            null,
-            new \Exception('There was a previous error with no ending dot')
-        );
-        $this->assertEquals(
-            'There was a previous error with no ending dot in resource (which is loaded in resource "resource").',
-            $exception->getMessage()
-        );
-    }
-
-    public function testMessageHasPreviousErrorAndUnableToLoadBundle()
-    {
-        $exception = new FileLoaderLoadException(
-            '@resource',
-            null,
-            null,
-            new \Exception('There was a previous error with an ending dot.')
-        );
-        $this->assertEquals(
-            'There was a previous error with an ending dot in @resource '.
-            '(which is loaded in resource "@resource"). '.
-            'Make sure the "resource" bundle is correctly registered and loaded in the application kernel class. '.
-            'If the bundle is registered, make sure the bundle path "@resource" is not empty.',
-            $exception->getMessage()
-        );
-    }
-}
diff --git a/vendor/symfony/config/Tests/FileLocatorTest.php b/vendor/symfony/config/Tests/FileLocatorTest.php
deleted file mode 100644
index e931916af91871a90434802875eebca9ded51356..0000000000000000000000000000000000000000
--- a/vendor/symfony/config/Tests/FileLocatorTest.php
+++ /dev/null
@@ -1,114 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Config\Tests;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Config\FileLocator;
-
-class FileLocatorTest extends TestCase
-{
-    /**
-     * @dataProvider getIsAbsolutePathTests
-     */
-    public function testIsAbsolutePath($path)
-    {
-        $loader = new FileLocator([]);
-        $r = new \ReflectionObject($loader);
-        $m = $r->getMethod('isAbsolutePath');
-        $m->setAccessible(true);
-
-        $this->assertTrue($m->invoke($loader, $path), '->isAbsolutePath() returns true for an absolute path');
-    }
-
-    public function getIsAbsolutePathTests()
-    {
-        return [
-            ['/foo.xml'],
-            ['c:\\\\foo.xml'],
-            ['c:/foo.xml'],
-            ['\\server\\foo.xml'],
-            ['https://server/foo.xml'],
-            ['phar://server/foo.xml'],
-        ];
-    }
-
-    public function testLocate()
-    {
-        $loader = new FileLocator(__DIR__.'/Fixtures');
-
-        $this->assertEquals(
-            __DIR__.\DIRECTORY_SEPARATOR.'FileLocatorTest.php',
-            $loader->locate('FileLocatorTest.php', __DIR__),
-            '->locate() returns the absolute filename if the file exists in the given path'
-        );
-
-        $this->assertEquals(
-            __DIR__.'/Fixtures'.\DIRECTORY_SEPARATOR.'foo.xml',
-            $loader->locate('foo.xml', __DIR__),
-            '->locate() returns the absolute filename if the file exists in one of the paths given in the constructor'
-        );
-
-        $this->assertEquals(
-            __DIR__.'/Fixtures'.\DIRECTORY_SEPARATOR.'foo.xml',
-            $loader->locate(__DIR__.'/Fixtures'.\DIRECTORY_SEPARATOR.'foo.xml', __DIR__),
-            '->locate() returns the absolute filename if the file exists in one of the paths given in the constructor'
-        );
-
-        $loader = new FileLocator([__DIR__.'/Fixtures', __DIR__.'/Fixtures/Again']);
-
-        $this->assertEquals(
-            [__DIR__.'/Fixtures'.\DIRECTORY_SEPARATOR.'foo.xml', __DIR__.'/Fixtures/Again'.\DIRECTORY_SEPARATOR.'foo.xml'],
-            $loader->locate('foo.xml', __DIR__, false),
-            '->locate() returns an array of absolute filenames'
-        );
-
-        $this->assertEquals(
-            [__DIR__.'/Fixtures'.\DIRECTORY_SEPARATOR.'foo.xml', __DIR__.'/Fixtures/Again'.\DIRECTORY_SEPARATOR.'foo.xml'],
-            $loader->locate('foo.xml', __DIR__.'/Fixtures', false),
-            '->locate() returns an array of absolute filenames'
-        );
-
-        $loader = new FileLocator(__DIR__.'/Fixtures/Again');
-
-        $this->assertEquals(
-            [__DIR__.'/Fixtures'.\DIRECTORY_SEPARATOR.'foo.xml', __DIR__.'/Fixtures/Again'.\DIRECTORY_SEPARATOR.'foo.xml'],
-            $loader->locate('foo.xml', __DIR__.'/Fixtures', false),
-            '->locate() returns an array of absolute filenames'
-        );
-    }
-
-    public function testLocateThrowsAnExceptionIfTheFileDoesNotExists()
-    {
-        $this->expectException('Symfony\Component\Config\Exception\FileLocatorFileNotFoundException');
-        $this->expectExceptionMessage('The file "foobar.xml" does not exist');
-        $loader = new FileLocator([__DIR__.'/Fixtures']);
-
-        $loader->locate('foobar.xml', __DIR__);
-    }
-
-    public function testLocateThrowsAnExceptionIfTheFileDoesNotExistsInAbsolutePath()
-    {
-        $this->expectException('Symfony\Component\Config\Exception\FileLocatorFileNotFoundException');
-        $loader = new FileLocator([__DIR__.'/Fixtures']);
-
-        $loader->locate(__DIR__.'/Fixtures/foobar.xml', __DIR__);
-    }
-
-    public function testLocateEmpty()
-    {
-        $this->expectException('InvalidArgumentException');
-        $this->expectExceptionMessage('An empty file name is not valid to be located.');
-        $loader = new FileLocator([__DIR__.'/Fixtures']);
-
-        $loader->locate(null, __DIR__);
-    }
-}
diff --git a/vendor/symfony/config/Tests/Fixtures/Again/foo.xml b/vendor/symfony/config/Tests/Fixtures/Again/foo.xml
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/vendor/symfony/config/Tests/Fixtures/BadFileName.php b/vendor/symfony/config/Tests/Fixtures/BadFileName.php
deleted file mode 100644
index 0f79bdd523a7f25d18d41f13f2c8ce4c0877624f..0000000000000000000000000000000000000000
--- a/vendor/symfony/config/Tests/Fixtures/BadFileName.php
+++ /dev/null
@@ -1,9 +0,0 @@
-<?php
-
-namespace Symfony\Component\Config\Tests\Fixtures;
-
-class FileNameMismatchOnPurpose
-{
-}
-
-throw new \RuntimeException('Mismatch between file name and class name.');
diff --git a/vendor/symfony/config/Tests/Fixtures/BadParent.php b/vendor/symfony/config/Tests/Fixtures/BadParent.php
deleted file mode 100644
index 68d7296ed8696aebf15525917d245cdc7eada4c9..0000000000000000000000000000000000000000
--- a/vendor/symfony/config/Tests/Fixtures/BadParent.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-
-namespace Symfony\Component\Config\Tests\Fixtures;
-
-class BadParent extends MissingParent
-{
-}
diff --git a/vendor/symfony/config/Tests/Fixtures/Builder/BarNodeDefinition.php b/vendor/symfony/config/Tests/Fixtures/Builder/BarNodeDefinition.php
deleted file mode 100644
index b9c62e53771c265fdce99b796ea09d008528f592..0000000000000000000000000000000000000000
--- a/vendor/symfony/config/Tests/Fixtures/Builder/BarNodeDefinition.php
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Config\Tests\Fixtures\Builder;
-
-use Symfony\Component\Config\Definition\Builder\NodeDefinition;
-use Symfony\Component\Config\Tests\Fixtures\BarNode;
-
-class BarNodeDefinition extends NodeDefinition
-{
-    protected function createNode()
-    {
-        return new BarNode($this->name);
-    }
-}
diff --git a/vendor/symfony/config/Tests/Fixtures/Builder/NodeBuilder.php b/vendor/symfony/config/Tests/Fixtures/Builder/NodeBuilder.php
deleted file mode 100644
index 22b8b32fb6de5f72dcdde7795c43499d803df510..0000000000000000000000000000000000000000
--- a/vendor/symfony/config/Tests/Fixtures/Builder/NodeBuilder.php
+++ /dev/null
@@ -1,34 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Config\Tests\Fixtures\Builder;
-
-use Symfony\Component\Config\Definition\Builder\NodeBuilder as BaseNodeBuilder;
-
-class NodeBuilder extends BaseNodeBuilder
-{
-    public function barNode($name)
-    {
-        return $this->node($name, 'bar');
-    }
-
-    protected function getNodeClass($type)
-    {
-        switch ($type) {
-            case 'variable':
-                return __NAMESPACE__.'\\'.ucfirst($type).'NodeDefinition';
-            case 'bar':
-                return __NAMESPACE__.'\\'.ucfirst($type).'NodeDefinition';
-            default:
-                return parent::getNodeClass($type);
-        }
-    }
-}
diff --git a/vendor/symfony/config/Tests/Fixtures/Configuration/ExampleConfiguration.php b/vendor/symfony/config/Tests/Fixtures/Configuration/ExampleConfiguration.php
deleted file mode 100644
index 3f02700a18185ba1fe29ea56b7154419678971c7..0000000000000000000000000000000000000000
--- a/vendor/symfony/config/Tests/Fixtures/Configuration/ExampleConfiguration.php
+++ /dev/null
@@ -1,102 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Config\Tests\Fixtures\Configuration;
-
-use Symfony\Component\Config\Definition\Builder\TreeBuilder;
-use Symfony\Component\Config\Definition\ConfigurationInterface;
-
-class ExampleConfiguration implements ConfigurationInterface
-{
-    public function getConfigTreeBuilder()
-    {
-        $treeBuilder = new TreeBuilder();
-        $rootNode = $treeBuilder->root('acme_root');
-
-        $rootNode
-            ->fixXmlConfig('parameter')
-            ->fixXmlConfig('connection')
-            ->fixXmlConfig('cms_page')
-            ->children()
-                ->booleanNode('boolean')->defaultTrue()->end()
-                ->scalarNode('scalar_empty')->end()
-                ->scalarNode('scalar_null')->defaultNull()->end()
-                ->scalarNode('scalar_true')->defaultTrue()->end()
-                ->scalarNode('scalar_false')->defaultFalse()->end()
-                ->scalarNode('scalar_default')->defaultValue('default')->end()
-                ->scalarNode('scalar_array_empty')->defaultValue([])->end()
-                ->scalarNode('scalar_array_defaults')->defaultValue(['elem1', 'elem2'])->end()
-                ->scalarNode('scalar_required')->isRequired()->end()
-                ->scalarNode('scalar_deprecated')->setDeprecated()->end()
-                ->scalarNode('scalar_deprecated_with_message')->setDeprecated('Deprecation custom message for "%node%" at "%path%"')->end()
-                ->scalarNode('node_with_a_looong_name')->end()
-                ->enumNode('enum_with_default')->values(['this', 'that'])->defaultValue('this')->end()
-                ->enumNode('enum')->values(['this', 'that'])->end()
-                ->arrayNode('array')
-                    ->info('some info')
-                    ->canBeUnset()
-                    ->children()
-                        ->scalarNode('child1')->end()
-                        ->scalarNode('child2')->end()
-                        ->scalarNode('child3')
-                            ->info(
-                                "this is a long\n".
-                                "multi-line info text\n".
-                                'which should be indented'
-                            )
-                            ->example('example setting')
-                        ->end()
-                    ->end()
-                ->end()
-                ->arrayNode('scalar_prototyped')
-                    ->prototype('scalar')->end()
-                ->end()
-                ->arrayNode('parameters')
-                    ->useAttributeAsKey('name')
-                    ->prototype('scalar')->info('Parameter name')->end()
-                ->end()
-                ->arrayNode('connections')
-                    ->prototype('array')
-                        ->children()
-                            ->scalarNode('user')->end()
-                            ->scalarNode('pass')->end()
-                        ->end()
-                    ->end()
-                ->end()
-                ->arrayNode('cms_pages')
-                    ->useAttributeAsKey('page')
-                    ->prototype('array')
-                        ->useAttributeAsKey('locale')
-                        ->prototype('array')
-                            ->children()
-                                ->scalarNode('title')->isRequired()->end()
-                                ->scalarNode('path')->isRequired()->end()
-                            ->end()
-                        ->end()
-                    ->end()
-                ->end()
-                ->arrayNode('pipou')
-                    ->useAttributeAsKey('name')
-                    ->prototype('array')
-                        ->prototype('array')
-                            ->children()
-                                ->scalarNode('didou')
-                                ->end()
-                            ->end()
-                        ->end()
-                    ->end()
-                ->end()
-            ->end()
-        ;
-
-        return $treeBuilder;
-    }
-}
diff --git a/vendor/symfony/config/Tests/Fixtures/ParseError.php b/vendor/symfony/config/Tests/Fixtures/ParseError.php
deleted file mode 100644
index 6bb2213824830d8fd7d391430125c62722f8bada..0000000000000000000000000000000000000000
--- a/vendor/symfony/config/Tests/Fixtures/ParseError.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-
-namespace Symfony\Component\Config\Tests\Fixtures;
-
-class ParseError
-{
-// missing closing bracket
diff --git a/vendor/symfony/config/Tests/Fixtures/Resource/.hiddenFile b/vendor/symfony/config/Tests/Fixtures/Resource/.hiddenFile
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/vendor/symfony/config/Tests/Fixtures/Resource/ConditionalClass.php b/vendor/symfony/config/Tests/Fixtures/Resource/ConditionalClass.php
deleted file mode 100644
index 2ba48c5b05b58e3a1a311d84d32928c73a60ee0c..0000000000000000000000000000000000000000
--- a/vendor/symfony/config/Tests/Fixtures/Resource/ConditionalClass.php
+++ /dev/null
@@ -1,9 +0,0 @@
-<?php
-
-namespace Symfony\Component\Config\Tests\Fixtures\Resource;
-
-if (!class_exists(MissingClass::class)) {
-    class ConditionalClass
-    {
-    }
-}
diff --git a/vendor/symfony/config/Tests/Fixtures/Util/document_type.xml b/vendor/symfony/config/Tests/Fixtures/Util/document_type.xml
deleted file mode 100644
index 4c25228263bb80a9948184d2bf434a93dec8bae9..0000000000000000000000000000000000000000
--- a/vendor/symfony/config/Tests/Fixtures/Util/document_type.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE scan [<!ENTITY test SYSTEM "php://filter/read=convert.base64-encode/resource={{ resource }}">]>
-<scan></scan>
diff --git a/vendor/symfony/config/Tests/Fixtures/Util/invalid.xml b/vendor/symfony/config/Tests/Fixtures/Util/invalid.xml
deleted file mode 100644
index a07af9fd85eb076a1d93f2137908e7d37765a1fe..0000000000000000000000000000000000000000
--- a/vendor/symfony/config/Tests/Fixtures/Util/invalid.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<root>
diff --git a/vendor/symfony/config/Tests/Fixtures/Util/invalid_schema.xml b/vendor/symfony/config/Tests/Fixtures/Util/invalid_schema.xml
deleted file mode 100644
index e2725a2c2a8657d1078def881e94a423b3341e85..0000000000000000000000000000000000000000
--- a/vendor/symfony/config/Tests/Fixtures/Util/invalid_schema.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<root2 xmlns="http://example.com/schema" />
diff --git a/vendor/symfony/config/Tests/Fixtures/Util/not_readable.xml b/vendor/symfony/config/Tests/Fixtures/Util/not_readable.xml
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/vendor/symfony/config/Tests/Fixtures/Util/schema.xsd b/vendor/symfony/config/Tests/Fixtures/Util/schema.xsd
deleted file mode 100644
index e56820f69139126568527d4722d22618e9443bc8..0000000000000000000000000000000000000000
--- a/vendor/symfony/config/Tests/Fixtures/Util/schema.xsd
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<xsd:schema xmlns="http://example.com/schema"
-    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
-    targetNamespace="http://example.com/schema"
-    elementFormDefault="qualified">
-
-  <xsd:element name="root" />
-</xsd:schema>
diff --git a/vendor/symfony/config/Tests/Fixtures/Util/valid.xml b/vendor/symfony/config/Tests/Fixtures/Util/valid.xml
deleted file mode 100644
index a96bb38267664b0b4b53c35f07d6fa0dffb939a6..0000000000000000000000000000000000000000
--- a/vendor/symfony/config/Tests/Fixtures/Util/valid.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<root xmlns="http://example.com/schema">
-</root>
diff --git a/vendor/symfony/config/Tests/Fixtures/foo.xml b/vendor/symfony/config/Tests/Fixtures/foo.xml
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/vendor/symfony/config/Tests/Loader/DelegatingLoaderTest.php b/vendor/symfony/config/Tests/Loader/DelegatingLoaderTest.php
deleted file mode 100644
index 38ae6ff7b85298e6ff36e2388f5ae24aa3e7d338..0000000000000000000000000000000000000000
--- a/vendor/symfony/config/Tests/Loader/DelegatingLoaderTest.php
+++ /dev/null
@@ -1,69 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Config\Tests\Loader;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Config\Loader\DelegatingLoader;
-use Symfony\Component\Config\Loader\LoaderResolver;
-
-class DelegatingLoaderTest extends TestCase
-{
-    public function testConstructor()
-    {
-        new DelegatingLoader($resolver = new LoaderResolver());
-        $this->assertTrue(true, '__construct() takes a loader resolver as its first argument');
-    }
-
-    public function testGetSetResolver()
-    {
-        $resolver = new LoaderResolver();
-        $loader = new DelegatingLoader($resolver);
-        $this->assertSame($resolver, $loader->getResolver(), '->getResolver() gets the resolver loader');
-        $loader->setResolver($resolver = new LoaderResolver());
-        $this->assertSame($resolver, $loader->getResolver(), '->setResolver() sets the resolver loader');
-    }
-
-    public function testSupports()
-    {
-        $loader1 = $this->getMockBuilder('Symfony\Component\Config\Loader\LoaderInterface')->getMock();
-        $loader1->expects($this->once())->method('supports')->willReturn(true);
-        $loader = new DelegatingLoader(new LoaderResolver([$loader1]));
-        $this->assertTrue($loader->supports('foo.xml'), '->supports() returns true if the resource is loadable');
-
-        $loader1 = $this->getMockBuilder('Symfony\Component\Config\Loader\LoaderInterface')->getMock();
-        $loader1->expects($this->once())->method('supports')->willReturn(false);
-        $loader = new DelegatingLoader(new LoaderResolver([$loader1]));
-        $this->assertFalse($loader->supports('foo.foo'), '->supports() returns false if the resource is not loadable');
-    }
-
-    public function testLoad()
-    {
-        $loader = $this->getMockBuilder('Symfony\Component\Config\Loader\LoaderInterface')->getMock();
-        $loader->expects($this->once())->method('supports')->willReturn(true);
-        $loader->expects($this->once())->method('load');
-        $resolver = new LoaderResolver([$loader]);
-        $loader = new DelegatingLoader($resolver);
-
-        $loader->load('foo');
-    }
-
-    public function testLoadThrowsAnExceptionIfTheResourceCannotBeLoaded()
-    {
-        $this->expectException('Symfony\Component\Config\Exception\FileLoaderLoadException');
-        $loader = $this->getMockBuilder('Symfony\Component\Config\Loader\LoaderInterface')->getMock();
-        $loader->expects($this->once())->method('supports')->willReturn(false);
-        $resolver = new LoaderResolver([$loader]);
-        $loader = new DelegatingLoader($resolver);
-
-        $loader->load('foo');
-    }
-}
diff --git a/vendor/symfony/config/Tests/Loader/FileLoaderTest.php b/vendor/symfony/config/Tests/Loader/FileLoaderTest.php
deleted file mode 100644
index b59ace46f937aea9fb4f65dc02c7141897f25bec..0000000000000000000000000000000000000000
--- a/vendor/symfony/config/Tests/Loader/FileLoaderTest.php
+++ /dev/null
@@ -1,128 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Config\Tests\Loader;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Config\FileLocator;
-use Symfony\Component\Config\Loader\FileLoader;
-use Symfony\Component\Config\Loader\LoaderResolver;
-
-class FileLoaderTest extends TestCase
-{
-    public function testImportWithFileLocatorDelegation()
-    {
-        $locatorMock = $this->getMockBuilder('Symfony\Component\Config\FileLocatorInterface')->getMock();
-
-        $locatorMockForAdditionalLoader = $this->getMockBuilder('Symfony\Component\Config\FileLocatorInterface')->getMock();
-        $locatorMockForAdditionalLoader->expects($this->any())->method('locate')->will($this->onConsecutiveCalls(
-                ['path/to/file1'],                    // Default
-                ['path/to/file1', 'path/to/file2'],   // First is imported
-                ['path/to/file1', 'path/to/file2'],   // Second is imported
-                ['path/to/file1'],                    // Exception
-                ['path/to/file1', 'path/to/file2']    // Exception
-                ));
-
-        $fileLoader = new TestFileLoader($locatorMock);
-        $fileLoader->setSupports(false);
-        $fileLoader->setCurrentDir('.');
-
-        $additionalLoader = new TestFileLoader($locatorMockForAdditionalLoader);
-        $additionalLoader->setCurrentDir('.');
-
-        $fileLoader->setResolver($loaderResolver = new LoaderResolver([$fileLoader, $additionalLoader]));
-
-        // Default case
-        $this->assertSame('path/to/file1', $fileLoader->import('my_resource'));
-
-        // Check first file is imported if not already loading
-        $this->assertSame('path/to/file1', $fileLoader->import('my_resource'));
-
-        // Check second file is imported if first is already loading
-        $fileLoader->addLoading('path/to/file1');
-        $this->assertSame('path/to/file2', $fileLoader->import('my_resource'));
-
-        // Check exception throws if first (and only available) file is already loading
-        try {
-            $fileLoader->import('my_resource');
-            $this->fail('->import() throws a FileLoaderImportCircularReferenceException if the resource is already loading');
-        } catch (\Exception $e) {
-            $this->assertInstanceOf('Symfony\Component\Config\Exception\FileLoaderImportCircularReferenceException', $e, '->import() throws a FileLoaderImportCircularReferenceException if the resource is already loading');
-        }
-
-        // Check exception throws if all files are already loading
-        try {
-            $fileLoader->addLoading('path/to/file2');
-            $fileLoader->import('my_resource');
-            $this->fail('->import() throws a FileLoaderImportCircularReferenceException if the resource is already loading');
-        } catch (\Exception $e) {
-            $this->assertInstanceOf('Symfony\Component\Config\Exception\FileLoaderImportCircularReferenceException', $e, '->import() throws a FileLoaderImportCircularReferenceException if the resource is already loading');
-        }
-    }
-
-    public function testImportWithGlobLikeResource()
-    {
-        $locatorMock = $this->getMockBuilder('Symfony\Component\Config\FileLocatorInterface')->getMock();
-        $loader = new TestFileLoader($locatorMock);
-
-        $this->assertSame('[foo]', $loader->import('[foo]'));
-    }
-
-    public function testImportWithNoGlobMatch()
-    {
-        $locatorMock = $this->getMockBuilder('Symfony\Component\Config\FileLocatorInterface')->getMock();
-        $loader = new TestFileLoader($locatorMock);
-
-        $this->assertNull($loader->import('./*.abc'));
-    }
-
-    public function testImportWithSimpleGlob()
-    {
-        $loader = new TestFileLoader(new FileLocator(__DIR__));
-
-        $this->assertSame(__FILE__, strtr($loader->import('FileLoaderTest.*'), '/', \DIRECTORY_SEPARATOR));
-    }
-}
-
-class TestFileLoader extends FileLoader
-{
-    private $supports = true;
-
-    public function load($resource, $type = null)
-    {
-        return $resource;
-    }
-
-    public function supports($resource, $type = null)
-    {
-        return $this->supports;
-    }
-
-    public function addLoading($resource)
-    {
-        self::$loading[$resource] = true;
-    }
-
-    public function removeLoading($resource)
-    {
-        unset(self::$loading[$resource]);
-    }
-
-    public function clearLoading()
-    {
-        self::$loading = [];
-    }
-
-    public function setSupports($supports)
-    {
-        $this->supports = $supports;
-    }
-}
diff --git a/vendor/symfony/config/Tests/Loader/LoaderResolverTest.php b/vendor/symfony/config/Tests/Loader/LoaderResolverTest.php
deleted file mode 100644
index aabc2a600d8dd43d5c36a859fb2b0c04ada9f300..0000000000000000000000000000000000000000
--- a/vendor/symfony/config/Tests/Loader/LoaderResolverTest.php
+++ /dev/null
@@ -1,47 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Config\Tests\Loader;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Config\Loader\LoaderResolver;
-
-class LoaderResolverTest extends TestCase
-{
-    public function testConstructor()
-    {
-        $resolver = new LoaderResolver([
-            $loader = $this->getMockBuilder('Symfony\Component\Config\Loader\LoaderInterface')->getMock(),
-        ]);
-
-        $this->assertEquals([$loader], $resolver->getLoaders(), '__construct() takes an array of loaders as its first argument');
-    }
-
-    public function testResolve()
-    {
-        $loader = $this->getMockBuilder('Symfony\Component\Config\Loader\LoaderInterface')->getMock();
-        $resolver = new LoaderResolver([$loader]);
-        $this->assertFalse($resolver->resolve('foo.foo'), '->resolve() returns false if no loader is able to load the resource');
-
-        $loader = $this->getMockBuilder('Symfony\Component\Config\Loader\LoaderInterface')->getMock();
-        $loader->expects($this->once())->method('supports')->willReturn(true);
-        $resolver = new LoaderResolver([$loader]);
-        $this->assertEquals($loader, $resolver->resolve(function () {}), '->resolve() returns the loader for the given resource');
-    }
-
-    public function testLoaders()
-    {
-        $resolver = new LoaderResolver();
-        $resolver->addLoader($loader = $this->getMockBuilder('Symfony\Component\Config\Loader\LoaderInterface')->getMock());
-
-        $this->assertEquals([$loader], $resolver->getLoaders(), 'addLoader() adds a loader');
-    }
-}
diff --git a/vendor/symfony/config/Tests/Loader/LoaderTest.php b/vendor/symfony/config/Tests/Loader/LoaderTest.php
deleted file mode 100644
index 35a911ef3a2d9d046cb42802e3905b8a07106d04..0000000000000000000000000000000000000000
--- a/vendor/symfony/config/Tests/Loader/LoaderTest.php
+++ /dev/null
@@ -1,116 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Config\Tests\Loader;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Config\Loader\Loader;
-
-class LoaderTest extends TestCase
-{
-    public function testGetSetResolver()
-    {
-        $resolver = $this->getMockBuilder('Symfony\Component\Config\Loader\LoaderResolverInterface')->getMock();
-
-        $loader = new ProjectLoader1();
-        $loader->setResolver($resolver);
-
-        $this->assertSame($resolver, $loader->getResolver(), '->setResolver() sets the resolver loader');
-    }
-
-    public function testResolve()
-    {
-        $resolvedLoader = $this->getMockBuilder('Symfony\Component\Config\Loader\LoaderInterface')->getMock();
-
-        $resolver = $this->getMockBuilder('Symfony\Component\Config\Loader\LoaderResolverInterface')->getMock();
-        $resolver->expects($this->once())
-            ->method('resolve')
-            ->with('foo.xml')
-            ->willReturn($resolvedLoader);
-
-        $loader = new ProjectLoader1();
-        $loader->setResolver($resolver);
-
-        $this->assertSame($loader, $loader->resolve('foo.foo'), '->resolve() finds a loader');
-        $this->assertSame($resolvedLoader, $loader->resolve('foo.xml'), '->resolve() finds a loader');
-    }
-
-    public function testResolveWhenResolverCannotFindLoader()
-    {
-        $this->expectException('Symfony\Component\Config\Exception\FileLoaderLoadException');
-        $resolver = $this->getMockBuilder('Symfony\Component\Config\Loader\LoaderResolverInterface')->getMock();
-        $resolver->expects($this->once())
-            ->method('resolve')
-            ->with('FOOBAR')
-            ->willReturn(false);
-
-        $loader = new ProjectLoader1();
-        $loader->setResolver($resolver);
-
-        $loader->resolve('FOOBAR');
-    }
-
-    public function testImport()
-    {
-        $resolvedLoader = $this->getMockBuilder('Symfony\Component\Config\Loader\LoaderInterface')->getMock();
-        $resolvedLoader->expects($this->once())
-            ->method('load')
-            ->with('foo')
-            ->willReturn('yes');
-
-        $resolver = $this->getMockBuilder('Symfony\Component\Config\Loader\LoaderResolverInterface')->getMock();
-        $resolver->expects($this->once())
-            ->method('resolve')
-            ->with('foo')
-            ->willReturn($resolvedLoader);
-
-        $loader = new ProjectLoader1();
-        $loader->setResolver($resolver);
-
-        $this->assertEquals('yes', $loader->import('foo'));
-    }
-
-    public function testImportWithType()
-    {
-        $resolvedLoader = $this->getMockBuilder('Symfony\Component\Config\Loader\LoaderInterface')->getMock();
-        $resolvedLoader->expects($this->once())
-            ->method('load')
-            ->with('foo', 'bar')
-            ->willReturn('yes');
-
-        $resolver = $this->getMockBuilder('Symfony\Component\Config\Loader\LoaderResolverInterface')->getMock();
-        $resolver->expects($this->once())
-            ->method('resolve')
-            ->with('foo', 'bar')
-            ->willReturn($resolvedLoader);
-
-        $loader = new ProjectLoader1();
-        $loader->setResolver($resolver);
-
-        $this->assertEquals('yes', $loader->import('foo', 'bar'));
-    }
-}
-
-class ProjectLoader1 extends Loader
-{
-    public function load($resource, $type = null)
-    {
-    }
-
-    public function supports($resource, $type = null)
-    {
-        return \is_string($resource) && 'foo' === pathinfo($resource, PATHINFO_EXTENSION);
-    }
-
-    public function getType()
-    {
-    }
-}
diff --git a/vendor/symfony/config/Tests/Resource/ClassExistenceResourceTest.php b/vendor/symfony/config/Tests/Resource/ClassExistenceResourceTest.php
deleted file mode 100644
index 8020a57884e73ee31f6e249f6fb3298142019046..0000000000000000000000000000000000000000
--- a/vendor/symfony/config/Tests/Resource/ClassExistenceResourceTest.php
+++ /dev/null
@@ -1,130 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Config\Tests\Resource;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Config\Resource\ClassExistenceResource;
-use Symfony\Component\Config\Tests\Fixtures\BadFileName;
-use Symfony\Component\Config\Tests\Fixtures\BadParent;
-use Symfony\Component\Config\Tests\Fixtures\ParseError;
-use Symfony\Component\Config\Tests\Fixtures\Resource\ConditionalClass;
-
-class ClassExistenceResourceTest extends TestCase
-{
-    public function testToString()
-    {
-        $res = new ClassExistenceResource('BarClass');
-        $this->assertSame('BarClass', (string) $res);
-    }
-
-    public function testGetResource()
-    {
-        $res = new ClassExistenceResource('BarClass');
-        $this->assertSame('BarClass', $res->getResource());
-    }
-
-    public function testIsFreshWhenClassDoesNotExist()
-    {
-        $res = new ClassExistenceResource('Symfony\Component\Config\Tests\Fixtures\BarClass');
-
-        $this->assertTrue($res->isFresh(time()));
-
-        eval(<<<EOF
-namespace Symfony\Component\Config\Tests\Fixtures;
-
-class BarClass
-{
-}
-EOF
-        );
-
-        $this->assertFalse($res->isFresh(time()));
-    }
-
-    public function testIsFreshWhenClassExists()
-    {
-        $res = new ClassExistenceResource('Symfony\Component\Config\Tests\Resource\ClassExistenceResourceTest');
-
-        $this->assertTrue($res->isFresh(time()));
-    }
-
-    public function testExistsKo()
-    {
-        spl_autoload_register($autoloader = function ($class) use (&$loadedClass) { $loadedClass = $class; });
-
-        try {
-            $res = new ClassExistenceResource('MissingFooClass');
-            $this->assertTrue($res->isFresh(0));
-
-            $this->assertSame('MissingFooClass', $loadedClass);
-
-            $loadedClass = 123;
-
-            new ClassExistenceResource('MissingFooClass', false);
-
-            $this->assertSame(123, $loadedClass);
-        } finally {
-            spl_autoload_unregister($autoloader);
-        }
-    }
-
-    public function testBadParentWithTimestamp()
-    {
-        $res = new ClassExistenceResource(BadParent::class, false);
-        $this->assertTrue($res->isFresh(time()));
-    }
-
-    public function testBadParentWithNoTimestamp()
-    {
-        $this->expectException('ReflectionException');
-        $this->expectExceptionMessage('Class "Symfony\Component\Config\Tests\Fixtures\MissingParent" not found while loading "Symfony\Component\Config\Tests\Fixtures\BadParent".');
-
-        $res = new ClassExistenceResource(BadParent::class, false);
-        $res->isFresh(0);
-    }
-
-    public function testBadFileName()
-    {
-        $this->expectException('ReflectionException');
-        $this->expectExceptionMessage('Mismatch between file name and class name.');
-
-        $res = new ClassExistenceResource(BadFileName::class, false);
-        $res->isFresh(0);
-    }
-
-    public function testBadFileNameBis()
-    {
-        $this->expectException('ReflectionException');
-        $this->expectExceptionMessage('Mismatch between file name and class name.');
-
-        $res = new ClassExistenceResource(BadFileName::class, false);
-        $res->isFresh(0);
-    }
-
-    public function testConditionalClass()
-    {
-        $res = new ClassExistenceResource(ConditionalClass::class, false);
-
-        $this->assertFalse($res->isFresh(0));
-    }
-
-    /**
-     * @requires PHP 7
-     */
-    public function testParseError()
-    {
-        $this->expectException('ParseError');
-
-        $res = new ClassExistenceResource(ParseError::class, false);
-        $res->isFresh(0);
-    }
-}
diff --git a/vendor/symfony/config/Tests/Resource/ComposerResourceTest.php b/vendor/symfony/config/Tests/Resource/ComposerResourceTest.php
deleted file mode 100644
index 6857c766d13471fae55d18067aa8c107012c758f..0000000000000000000000000000000000000000
--- a/vendor/symfony/config/Tests/Resource/ComposerResourceTest.php
+++ /dev/null
@@ -1,47 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Config\Tests\Resource;
-
-use Composer\Autoload\ClassLoader;
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Config\Resource\ComposerResource;
-
-class ComposerResourceTest extends TestCase
-{
-    public function testGetVendor()
-    {
-        $res = new ComposerResource();
-
-        $r = new \ReflectionClass(ClassLoader::class);
-        $found = false;
-
-        foreach ($res->getVendors() as $vendor) {
-            if ($vendor && 0 === strpos($r->getFileName(), $vendor)) {
-                $found = true;
-                break;
-            }
-        }
-
-        $this->assertTrue($found);
-    }
-
-    public function testSerializeUnserialize()
-    {
-        $res = new ComposerResource();
-        $ser = unserialize(serialize($res));
-
-        $this->assertTrue($res->isFresh(0));
-        $this->assertTrue($ser->isFresh(0));
-
-        $this->assertEquals($res, $ser);
-    }
-}
diff --git a/vendor/symfony/config/Tests/Resource/DirectoryResourceTest.php b/vendor/symfony/config/Tests/Resource/DirectoryResourceTest.php
deleted file mode 100644
index 40b179010196d6b0556d180d48ecac169c8ad6f8..0000000000000000000000000000000000000000
--- a/vendor/symfony/config/Tests/Resource/DirectoryResourceTest.php
+++ /dev/null
@@ -1,181 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Config\Tests\Resource;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Config\Resource\DirectoryResource;
-
-class DirectoryResourceTest extends TestCase
-{
-    protected $directory;
-
-    protected function setUp()
-    {
-        $this->directory = sys_get_temp_dir().\DIRECTORY_SEPARATOR.'symfonyDirectoryIterator';
-        if (!file_exists($this->directory)) {
-            mkdir($this->directory);
-        }
-        touch($this->directory.'/tmp.xml');
-    }
-
-    protected function tearDown()
-    {
-        if (!is_dir($this->directory)) {
-            return;
-        }
-        $this->removeDirectory($this->directory);
-    }
-
-    protected function removeDirectory($directory)
-    {
-        $iterator = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($directory), \RecursiveIteratorIterator::CHILD_FIRST);
-        foreach ($iterator as $path) {
-            if (preg_match('#[/\\\\]\.\.?$#', $path->__toString())) {
-                continue;
-            }
-            if ($path->isDir()) {
-                rmdir($path->__toString());
-            } else {
-                unlink($path->__toString());
-            }
-        }
-        rmdir($directory);
-    }
-
-    public function testGetResource()
-    {
-        $resource = new DirectoryResource($this->directory);
-        $this->assertSame(realpath($this->directory), $resource->getResource(), '->getResource() returns the path to the resource');
-    }
-
-    public function testGetPattern()
-    {
-        $resource = new DirectoryResource($this->directory, 'bar');
-        $this->assertEquals('bar', $resource->getPattern());
-    }
-
-    public function testResourceDoesNotExist()
-    {
-        $this->expectException('InvalidArgumentException');
-        $this->expectExceptionMessageRegExp('/The directory ".*" does not exist./');
-        new DirectoryResource('/____foo/foobar'.mt_rand(1, 999999));
-    }
-
-    public function testIsFresh()
-    {
-        $resource = new DirectoryResource($this->directory);
-        $this->assertTrue($resource->isFresh(time() + 10), '->isFresh() returns true if the resource has not changed');
-        $this->assertFalse($resource->isFresh(time() - 86400), '->isFresh() returns false if the resource has been updated');
-    }
-
-    public function testIsFreshForDeletedResources()
-    {
-        $resource = new DirectoryResource($this->directory);
-        $this->removeDirectory($this->directory);
-
-        $this->assertFalse($resource->isFresh(time()), '->isFresh() returns false if the resource does not exist');
-    }
-
-    public function testIsFreshUpdateFile()
-    {
-        $resource = new DirectoryResource($this->directory);
-        touch($this->directory.'/tmp.xml', time() + 20);
-        $this->assertFalse($resource->isFresh(time() + 10), '->isFresh() returns false if an existing file is modified');
-    }
-
-    public function testIsFreshNewFile()
-    {
-        $resource = new DirectoryResource($this->directory);
-        touch($this->directory.'/new.xml', time() + 20);
-        $this->assertFalse($resource->isFresh(time() + 10), '->isFresh() returns false if a new file is added');
-    }
-
-    public function testIsFreshNewFileWithDifferentPattern()
-    {
-        $resource = new DirectoryResource($this->directory, '/.xml$/');
-        touch($this->directory.'/new.yaml', time() + 20);
-        $this->assertTrue($resource->isFresh(time() + 10), '->isFresh() returns true if a new file with a non-matching pattern is added');
-    }
-
-    public function testIsFreshDeleteFile()
-    {
-        $resource = new DirectoryResource($this->directory);
-        $time = time();
-        sleep(1);
-        unlink($this->directory.'/tmp.xml');
-        $this->assertFalse($resource->isFresh($time), '->isFresh() returns false if an existing file is removed');
-    }
-
-    public function testIsFreshDeleteDirectory()
-    {
-        $resource = new DirectoryResource($this->directory);
-        $this->removeDirectory($this->directory);
-        $this->assertFalse($resource->isFresh(time()), '->isFresh() returns false if the whole resource is removed');
-    }
-
-    public function testIsFreshCreateFileInSubdirectory()
-    {
-        $subdirectory = $this->directory.'/subdirectory';
-        mkdir($subdirectory);
-
-        $resource = new DirectoryResource($this->directory);
-        $this->assertTrue($resource->isFresh(time() + 10), '->isFresh() returns true if an unmodified subdirectory exists');
-
-        touch($subdirectory.'/newfile.xml', time() + 20);
-        $this->assertFalse($resource->isFresh(time() + 10), '->isFresh() returns false if a new file in a subdirectory is added');
-    }
-
-    public function testIsFreshModifySubdirectory()
-    {
-        $resource = new DirectoryResource($this->directory);
-
-        $subdirectory = $this->directory.'/subdirectory';
-        mkdir($subdirectory);
-        touch($subdirectory, time() + 20);
-
-        $this->assertFalse($resource->isFresh(time() + 10), '->isFresh() returns false if a subdirectory is modified (e.g. a file gets deleted)');
-    }
-
-    public function testFilterRegexListNoMatch()
-    {
-        $resource = new DirectoryResource($this->directory, '/\.(foo|xml)$/');
-
-        touch($this->directory.'/new.bar', time() + 20);
-        $this->assertTrue($resource->isFresh(time() + 10), '->isFresh() returns true if a new file not matching the filter regex is created');
-    }
-
-    public function testFilterRegexListMatch()
-    {
-        $resource = new DirectoryResource($this->directory, '/\.(foo|xml)$/');
-
-        touch($this->directory.'/new.xml', time() + 20);
-        $this->assertFalse($resource->isFresh(time() + 10), '->isFresh() returns false if an new file matching the filter regex is created ');
-    }
-
-    public function testSerializeUnserialize()
-    {
-        $resource = new DirectoryResource($this->directory, '/\.(foo|xml)$/');
-
-        unserialize(serialize($resource));
-
-        $this->assertSame(realpath($this->directory), $resource->getResource());
-        $this->assertSame('/\.(foo|xml)$/', $resource->getPattern());
-    }
-
-    public function testResourcesWithDifferentPatternsAreDifferent()
-    {
-        $resourceA = new DirectoryResource($this->directory, '/.xml$/');
-        $resourceB = new DirectoryResource($this->directory, '/.yaml$/');
-
-        $this->assertCount(2, array_unique([$resourceA, $resourceB]));
-    }
-}
diff --git a/vendor/symfony/config/Tests/Resource/FileExistenceResourceTest.php b/vendor/symfony/config/Tests/Resource/FileExistenceResourceTest.php
deleted file mode 100644
index 433f65e8203dbd65c2388297e033b3f83216b31a..0000000000000000000000000000000000000000
--- a/vendor/symfony/config/Tests/Resource/FileExistenceResourceTest.php
+++ /dev/null
@@ -1,71 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Config\Tests\Resource;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Config\Resource\FileExistenceResource;
-
-class FileExistenceResourceTest extends TestCase
-{
-    protected $resource;
-    protected $file;
-    protected $time;
-
-    protected function setUp()
-    {
-        $this->file = realpath(sys_get_temp_dir()).'/tmp.xml';
-        $this->time = time();
-        $this->resource = new FileExistenceResource($this->file);
-    }
-
-    protected function tearDown()
-    {
-        if (file_exists($this->file)) {
-            unlink($this->file);
-        }
-    }
-
-    public function testToString()
-    {
-        $this->assertSame($this->file, (string) $this->resource);
-    }
-
-    public function testGetResource()
-    {
-        $this->assertSame($this->file, $this->resource->getResource(), '->getResource() returns the path to the resource');
-    }
-
-    public function testIsFreshWithExistingResource()
-    {
-        touch($this->file, $this->time);
-        $serialized = serialize(new FileExistenceResource($this->file));
-
-        $resource = unserialize($serialized);
-        $this->assertTrue($resource->isFresh($this->time), '->isFresh() returns true if the resource is still present');
-
-        unlink($this->file);
-        $resource = unserialize($serialized);
-        $this->assertFalse($resource->isFresh($this->time), '->isFresh() returns false if the resource has been deleted');
-    }
-
-    public function testIsFreshWithAbsentResource()
-    {
-        $serialized = serialize(new FileExistenceResource($this->file));
-
-        $resource = unserialize($serialized);
-        $this->assertTrue($resource->isFresh($this->time), '->isFresh() returns true if the resource is still absent');
-
-        touch($this->file, $this->time);
-        $resource = unserialize($serialized);
-        $this->assertFalse($resource->isFresh($this->time), '->isFresh() returns false if the resource has been created');
-    }
-}
diff --git a/vendor/symfony/config/Tests/Resource/FileResourceTest.php b/vendor/symfony/config/Tests/Resource/FileResourceTest.php
deleted file mode 100644
index 968c7e92661694ecaba40f1c8e74ee2ae161cee5..0000000000000000000000000000000000000000
--- a/vendor/symfony/config/Tests/Resource/FileResourceTest.php
+++ /dev/null
@@ -1,83 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Config\Tests\Resource;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Config\Resource\FileResource;
-
-class FileResourceTest extends TestCase
-{
-    protected $resource;
-    protected $file;
-    protected $time;
-
-    protected function setUp()
-    {
-        $this->file = sys_get_temp_dir().'/tmp.xml';
-        $this->time = time();
-        touch($this->file, $this->time);
-        $this->resource = new FileResource($this->file);
-    }
-
-    protected function tearDown()
-    {
-        if (!file_exists($this->file)) {
-            return;
-        }
-
-        unlink($this->file);
-    }
-
-    public function testGetResource()
-    {
-        $this->assertSame(realpath($this->file), $this->resource->getResource(), '->getResource() returns the path to the resource');
-    }
-
-    public function testGetResourceWithScheme()
-    {
-        $resource = new FileResource('file://'.$this->file);
-        $this->assertSame('file://'.$this->file, $resource->getResource(), '->getResource() returns the path to the schemed resource');
-    }
-
-    public function testToString()
-    {
-        $this->assertSame(realpath($this->file), (string) $this->resource);
-    }
-
-    public function testResourceDoesNotExist()
-    {
-        $this->expectException('InvalidArgumentException');
-        $this->expectExceptionMessageRegExp('/The file ".*" does not exist./');
-        new FileResource('/____foo/foobar'.mt_rand(1, 999999));
-    }
-
-    public function testIsFresh()
-    {
-        $this->assertTrue($this->resource->isFresh($this->time), '->isFresh() returns true if the resource has not changed in same second');
-        $this->assertTrue($this->resource->isFresh($this->time + 10), '->isFresh() returns true if the resource has not changed');
-        $this->assertFalse($this->resource->isFresh($this->time - 86400), '->isFresh() returns false if the resource has been updated');
-    }
-
-    public function testIsFreshForDeletedResources()
-    {
-        unlink($this->file);
-
-        $this->assertFalse($this->resource->isFresh($this->time), '->isFresh() returns false if the resource does not exist');
-    }
-
-    public function testSerializeUnserialize()
-    {
-        unserialize(serialize($this->resource));
-
-        $this->assertSame(realpath($this->file), $this->resource->getResource());
-    }
-}
diff --git a/vendor/symfony/config/Tests/Resource/GlobResourceTest.php b/vendor/symfony/config/Tests/Resource/GlobResourceTest.php
deleted file mode 100644
index cfbfd2b4554e2d36eeaadae1e10144a3ca67f801..0000000000000000000000000000000000000000
--- a/vendor/symfony/config/Tests/Resource/GlobResourceTest.php
+++ /dev/null
@@ -1,114 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Config\Tests\Resource;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Config\Resource\GlobResource;
-
-class GlobResourceTest extends TestCase
-{
-    protected function tearDown()
-    {
-        $dir = \dirname(__DIR__).'/Fixtures';
-        @rmdir($dir.'/TmpGlob');
-        @unlink($dir.'/TmpGlob');
-        @unlink($dir.'/Resource/TmpGlob');
-        touch($dir.'/Resource/.hiddenFile');
-    }
-
-    public function testIterator()
-    {
-        $dir = \dirname(__DIR__).\DIRECTORY_SEPARATOR.'Fixtures';
-        $resource = new GlobResource($dir, '/Resource', true);
-
-        $paths = iterator_to_array($resource);
-
-        $file = $dir.'/Resource'.\DIRECTORY_SEPARATOR.'ConditionalClass.php';
-        $this->assertEquals([$file => new \SplFileInfo($file)], $paths);
-        $this->assertInstanceOf('SplFileInfo', current($paths));
-        $this->assertSame($dir, $resource->getPrefix());
-
-        $resource = new GlobResource($dir, '/**/Resource', true);
-
-        $paths = iterator_to_array($resource);
-
-        $file = $dir.\DIRECTORY_SEPARATOR.'Resource'.\DIRECTORY_SEPARATOR.'ConditionalClass.php';
-        $this->assertEquals([$file => $file], $paths);
-        $this->assertInstanceOf('SplFileInfo', current($paths));
-        $this->assertSame($dir, $resource->getPrefix());
-    }
-
-    public function testIsFreshNonRecursiveDetectsNewFile()
-    {
-        $dir = \dirname(__DIR__).'/Fixtures';
-        $resource = new GlobResource($dir, '/*', false);
-
-        $this->assertTrue($resource->isFresh(0));
-
-        mkdir($dir.'/TmpGlob');
-        $this->assertTrue($resource->isFresh(0));
-
-        rmdir($dir.'/TmpGlob');
-        $this->assertTrue($resource->isFresh(0));
-
-        touch($dir.'/TmpGlob');
-        $this->assertFalse($resource->isFresh(0));
-
-        unlink($dir.'/TmpGlob');
-        $this->assertTrue($resource->isFresh(0));
-    }
-
-    public function testIsFreshNonRecursiveDetectsRemovedFile()
-    {
-        $dir = \dirname(__DIR__).'/Fixtures';
-        $resource = new GlobResource($dir, '/*', false);
-
-        touch($dir.'/TmpGlob');
-        touch($dir.'/.TmpGlob');
-        $this->assertTrue($resource->isFresh(0));
-
-        unlink($dir.'/.TmpGlob');
-        $this->assertTrue($resource->isFresh(0));
-
-        unlink($dir.'/TmpGlob');
-        $this->assertFalse($resource->isFresh(0));
-    }
-
-    public function testIsFreshRecursiveDetectsRemovedFile()
-    {
-        $dir = \dirname(__DIR__).'/Fixtures';
-        $resource = new GlobResource($dir, '/*', true);
-
-        touch($dir.'/Resource/TmpGlob');
-        $this->assertTrue($resource->isFresh(0));
-
-        unlink($dir.'/Resource/TmpGlob');
-        $this->assertFalse($resource->isFresh(0));
-
-        touch($dir.'/Resource/TmpGlob');
-        $this->assertTrue($resource->isFresh(0));
-
-        unlink($dir.'/Resource/.hiddenFile');
-        $this->assertTrue($resource->isFresh(0));
-    }
-
-    public function testIsFreshRecursiveDetectsNewFile()
-    {
-        $dir = \dirname(__DIR__).'/Fixtures';
-        $resource = new GlobResource($dir, '/*', true);
-
-        $this->assertTrue($resource->isFresh(0));
-
-        touch($dir.'/Resource/TmpGlob');
-        $this->assertFalse($resource->isFresh(0));
-    }
-}
diff --git a/vendor/symfony/config/Tests/Resource/ReflectionClassResourceTest.php b/vendor/symfony/config/Tests/Resource/ReflectionClassResourceTest.php
deleted file mode 100644
index 74ed6b3edc2a999c91643b39d84a643bf55d616f..0000000000000000000000000000000000000000
--- a/vendor/symfony/config/Tests/Resource/ReflectionClassResourceTest.php
+++ /dev/null
@@ -1,223 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Config\Tests\Resource;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Config\Resource\ReflectionClassResource;
-use Symfony\Component\DependencyInjection\ServiceSubscriberInterface;
-use Symfony\Component\EventDispatcher\EventSubscriberInterface;
-
-class ReflectionClassResourceTest extends TestCase
-{
-    public function testToString()
-    {
-        $res = new ReflectionClassResource(new \ReflectionClass('ErrorException'));
-
-        $this->assertSame('reflection.ErrorException', (string) $res);
-    }
-
-    public function testSerializeUnserialize()
-    {
-        $res = new ReflectionClassResource(new \ReflectionClass(DummyInterface::class));
-        $ser = unserialize(serialize($res));
-
-        $this->assertTrue($res->isFresh(0));
-        $this->assertTrue($ser->isFresh(0));
-
-        $this->assertSame((string) $res, (string) $ser);
-    }
-
-    public function testIsFresh()
-    {
-        $res = new ReflectionClassResource(new \ReflectionClass(__CLASS__));
-        $mtime = filemtime(__FILE__);
-
-        $this->assertTrue($res->isFresh($mtime), '->isFresh() returns true if the resource has not changed in same second');
-        $this->assertTrue($res->isFresh($mtime + 10), '->isFresh() returns true if the resource has not changed');
-        $this->assertTrue($res->isFresh($mtime - 86400), '->isFresh() returns true if the resource has not changed');
-    }
-
-    public function testIsFreshForDeletedResources()
-    {
-        $now = time();
-        $tmp = sys_get_temp_dir().'/tmp.php';
-        file_put_contents($tmp, '<?php class ReflectionClassResourceTestClass {}');
-        require $tmp;
-
-        $res = new ReflectionClassResource(new \ReflectionClass('ReflectionClassResourceTestClass'));
-        $this->assertTrue($res->isFresh($now));
-
-        unlink($tmp);
-        $this->assertFalse($res->isFresh($now), '->isFresh() returns false if the resource does not exist');
-    }
-
-    /**
-     * @dataProvider provideHashedSignature
-     */
-    public function testHashedSignature($changeExpected, $changedLine, $changedCode, $setContext = null)
-    {
-        if ($setContext) {
-            $setContext();
-        }
-
-        $code = <<<'EOPHP'
-/* 0*/
-/* 1*/  class %s extends ErrorException
-/* 2*/  {
-/* 3*/      const FOO = 123;
-/* 4*/
-/* 5*/      public $pub = [];
-/* 6*/
-/* 7*/      protected $prot;
-/* 8*/
-/* 9*/      private $priv;
-/*10*/
-/*11*/      public function pub($arg = null) {}
-/*12*/
-/*13*/      protected function prot($a = []) {}
-/*14*/
-/*15*/      private function priv() {}
-/*16*/
-/*17*/      public function ccc($bar = A_CONSTANT_THAT_FOR_SURE_WILL_NEVER_BE_DEFINED_CCCCCC) {}
-/*18*/  }
-EOPHP;
-
-        static $expectedSignature, $generateSignature;
-
-        if (null === $expectedSignature) {
-            eval(sprintf($code, $class = 'Foo'.str_replace('.', '_', uniqid('', true))));
-            $r = new \ReflectionClass(ReflectionClassResource::class);
-            $generateSignature = $r->getMethod('generateSignature');
-            $generateSignature->setAccessible(true);
-            $generateSignature = $generateSignature->getClosure($r->newInstanceWithoutConstructor());
-            $expectedSignature = implode("\n", iterator_to_array($generateSignature(new \ReflectionClass($class))));
-        }
-
-        $code = explode("\n", $code);
-        if (null !== $changedCode) {
-            $code[$changedLine] = $changedCode;
-        }
-        eval(sprintf(implode("\n", $code), $class = 'Foo'.str_replace('.', '_', uniqid('', true))));
-        $signature = implode("\n", iterator_to_array($generateSignature(new \ReflectionClass($class))));
-
-        if ($changeExpected) {
-            $this->assertNotSame($expectedSignature, $signature);
-        } else {
-            $this->assertSame($expectedSignature, $signature);
-        }
-    }
-
-    public function provideHashedSignature()
-    {
-        yield [0, 0, "// line change\n\n"];
-        yield [1, 0, '/** class docblock */'];
-        yield [1, 1, 'abstract class %s'];
-        yield [1, 1, 'final class %s'];
-        yield [1, 1, 'class %s extends Exception'];
-        yield [1, 1, 'class %s implements '.DummyInterface::class];
-        yield [1, 3, 'const FOO = 456;'];
-        yield [1, 3, 'const BAR = 123;'];
-        yield [1, 4, '/** pub docblock */'];
-        yield [1, 5, 'protected $pub = [];'];
-        yield [1, 5, 'public $pub = [123];'];
-        yield [1, 6, '/** prot docblock */'];
-        yield [1, 7, 'private $prot;'];
-        yield [0, 8, '/** priv docblock */'];
-        yield [0, 9, 'private $priv = 123;'];
-        yield [1, 10, '/** pub docblock */'];
-        if (\PHP_VERSION_ID >= 50600) {
-            yield [1, 11, 'public function pub(...$arg) {}'];
-        }
-        if (\PHP_VERSION_ID >= 70000) {
-            yield [1, 11, 'public function pub($arg = null): Foo {}'];
-        }
-        yield [0, 11, "public function pub(\$arg = null) {\nreturn 123;\n}"];
-        yield [1, 12, '/** prot docblock */'];
-        yield [1, 13, 'protected function prot($a = [123]) {}'];
-        yield [0, 14, '/** priv docblock */'];
-        yield [0, 15, ''];
-
-        if (\PHP_VERSION_ID >= 70400) {
-            // PHP7.4 typed properties without default value are
-            // undefined, make sure this doesn't throw an error
-            yield [1, 5, 'public array $pub;'];
-            yield [0, 7, 'protected int $prot;'];
-            yield [0, 9, 'private string $priv;'];
-        }
-
-        yield [1, 17, 'public function ccc($bar = 187) {}'];
-        yield [1, 17, 'public function ccc($bar = ANOTHER_ONE_THAT_WILL_NEVER_BE_DEFINED_CCCCCCCCC) {}'];
-        yield [1, 17, null, static function () { \define('A_CONSTANT_THAT_FOR_SURE_WILL_NEVER_BE_DEFINED_CCCCCC', 'foo'); }];
-    }
-
-    public function testEventSubscriber()
-    {
-        $res = new ReflectionClassResource(new \ReflectionClass(TestEventSubscriber::class));
-        $this->assertTrue($res->isFresh(0));
-
-        TestEventSubscriber::$subscribedEvents = [123];
-        $this->assertFalse($res->isFresh(0));
-
-        $res = new ReflectionClassResource(new \ReflectionClass(TestEventSubscriber::class));
-        $this->assertTrue($res->isFresh(0));
-    }
-
-    public function testServiceSubscriber()
-    {
-        $res = new ReflectionClassResource(new \ReflectionClass(TestServiceSubscriber::class));
-        $this->assertTrue($res->isFresh(0));
-
-        TestServiceSubscriber::$subscribedServices = [123];
-        $this->assertFalse($res->isFresh(0));
-
-        $res = new ReflectionClassResource(new \ReflectionClass(TestServiceSubscriber::class));
-        $this->assertTrue($res->isFresh(0));
-    }
-
-    public function testIgnoresObjectsInSignature()
-    {
-        $res = new ReflectionClassResource(new \ReflectionClass(TestServiceWithStaticProperty::class));
-        $this->assertTrue($res->isFresh(0));
-
-        TestServiceWithStaticProperty::$initializedObject = new TestServiceWithStaticProperty();
-        $this->assertTrue($res->isFresh(0));
-    }
-}
-
-interface DummyInterface
-{
-}
-
-class TestEventSubscriber implements EventSubscriberInterface
-{
-    public static $subscribedEvents = [];
-
-    public static function getSubscribedEvents()
-    {
-        return self::$subscribedEvents;
-    }
-}
-
-class TestServiceSubscriber implements ServiceSubscriberInterface
-{
-    public static $subscribedServices = [];
-
-    public static function getSubscribedServices()
-    {
-        return self::$subscribedServices;
-    }
-}
-
-class TestServiceWithStaticProperty
-{
-    public static $initializedObject;
-}
diff --git a/vendor/symfony/config/Tests/Resource/ResourceStub.php b/vendor/symfony/config/Tests/Resource/ResourceStub.php
deleted file mode 100644
index b01729cbff8538e8e7d5a168d6bc6fb184ce6e50..0000000000000000000000000000000000000000
--- a/vendor/symfony/config/Tests/Resource/ResourceStub.php
+++ /dev/null
@@ -1,34 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Config\Tests\Resource;
-
-use Symfony\Component\Config\Resource\SelfCheckingResourceInterface;
-
-class ResourceStub implements SelfCheckingResourceInterface
-{
-    private $fresh = true;
-
-    public function setFresh($isFresh)
-    {
-        $this->fresh = $isFresh;
-    }
-
-    public function __toString()
-    {
-        return 'stub';
-    }
-
-    public function isFresh($timestamp)
-    {
-        return $this->fresh;
-    }
-}
diff --git a/vendor/symfony/config/Tests/ResourceCheckerConfigCacheTest.php b/vendor/symfony/config/Tests/ResourceCheckerConfigCacheTest.php
deleted file mode 100644
index a2c2eeb811b20b3ec6fa2cb344eb8a99b31ba174..0000000000000000000000000000000000000000
--- a/vendor/symfony/config/Tests/ResourceCheckerConfigCacheTest.php
+++ /dev/null
@@ -1,150 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Config\Tests;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Config\Resource\FileResource;
-use Symfony\Component\Config\ResourceCheckerConfigCache;
-use Symfony\Component\Config\Tests\Resource\ResourceStub;
-
-class ResourceCheckerConfigCacheTest extends TestCase
-{
-    private $cacheFile = null;
-
-    protected function setUp()
-    {
-        $this->cacheFile = tempnam(sys_get_temp_dir(), 'config_');
-    }
-
-    protected function tearDown()
-    {
-        $files = [$this->cacheFile, "{$this->cacheFile}.meta"];
-
-        foreach ($files as $file) {
-            if (file_exists($file)) {
-                unlink($file);
-            }
-        }
-    }
-
-    public function testGetPath()
-    {
-        $cache = new ResourceCheckerConfigCache($this->cacheFile);
-
-        $this->assertSame($this->cacheFile, $cache->getPath());
-    }
-
-    public function testCacheIsNotFreshIfEmpty()
-    {
-        $checker = $this->getMockBuilder('\Symfony\Component\Config\ResourceCheckerInterface')->getMock()
-            ->expects($this->never())->method('supports');
-
-        /* If there is nothing in the cache, it needs to be filled (and thus it's not fresh).
-            It does not matter if you provide checkers or not. */
-
-        unlink($this->cacheFile); // remove tempnam() side effect
-        $cache = new ResourceCheckerConfigCache($this->cacheFile, [$checker]);
-
-        $this->assertFalse($cache->isFresh());
-    }
-
-    public function testCacheIsFreshIfNoCheckerProvided()
-    {
-        /* For example in prod mode, you may choose not to run any checkers
-           at all. In that case, the cache should always be considered fresh. */
-        $cache = new ResourceCheckerConfigCache($this->cacheFile);
-        $this->assertTrue($cache->isFresh());
-    }
-
-    public function testCacheIsFreshIfEmptyCheckerIteratorProvided()
-    {
-        $cache = new ResourceCheckerConfigCache($this->cacheFile, new \ArrayIterator([]));
-        $this->assertTrue($cache->isFresh());
-    }
-
-    public function testResourcesWithoutcheckersAreIgnoredAndConsideredFresh()
-    {
-        /* As in the previous test, but this time we have a resource. */
-        $cache = new ResourceCheckerConfigCache($this->cacheFile);
-        $cache->write('', [new ResourceStub()]);
-
-        $this->assertTrue($cache->isFresh()); // no (matching) ResourceChecker passed
-    }
-
-    public function testIsFreshWithchecker()
-    {
-        $checker = $this->getMockBuilder('\Symfony\Component\Config\ResourceCheckerInterface')->getMock();
-
-        $checker->expects($this->once())
-                  ->method('supports')
-                  ->willReturn(true);
-
-        $checker->expects($this->once())
-                  ->method('isFresh')
-                  ->willReturn(true);
-
-        $cache = new ResourceCheckerConfigCache($this->cacheFile, [$checker]);
-        $cache->write('', [new ResourceStub()]);
-
-        $this->assertTrue($cache->isFresh());
-    }
-
-    public function testIsNotFreshWithchecker()
-    {
-        $checker = $this->getMockBuilder('\Symfony\Component\Config\ResourceCheckerInterface')->getMock();
-
-        $checker->expects($this->once())
-                  ->method('supports')
-                  ->willReturn(true);
-
-        $checker->expects($this->once())
-                  ->method('isFresh')
-                  ->willReturn(false);
-
-        $cache = new ResourceCheckerConfigCache($this->cacheFile, [$checker]);
-        $cache->write('', [new ResourceStub()]);
-
-        $this->assertFalse($cache->isFresh());
-    }
-
-    public function testCacheIsNotFreshWhenUnserializeFails()
-    {
-        $checker = $this->getMockBuilder('\Symfony\Component\Config\ResourceCheckerInterface')->getMock();
-        $cache = new ResourceCheckerConfigCache($this->cacheFile, [$checker]);
-        $cache->write('foo', [new FileResource(__FILE__)]);
-
-        $metaFile = "{$this->cacheFile}.meta";
-        file_put_contents($metaFile, str_replace('FileResource', 'ClassNotHere', file_get_contents($metaFile)));
-
-        $this->assertFalse($cache->isFresh());
-    }
-
-    public function testCacheKeepsContent()
-    {
-        $cache = new ResourceCheckerConfigCache($this->cacheFile);
-        $cache->write('FOOBAR');
-
-        $this->assertSame('FOOBAR', file_get_contents($cache->getPath()));
-    }
-
-    public function testCacheIsNotFreshIfNotExistsMetaFile()
-    {
-        $checker = $this->getMockBuilder('\Symfony\Component\Config\ResourceCheckerInterface')->getMock();
-        $cache = new ResourceCheckerConfigCache($this->cacheFile, [$checker]);
-        $cache->write('foo', [new FileResource(__FILE__)]);
-
-        $metaFile = "{$this->cacheFile}.meta";
-        unlink($metaFile);
-
-        $this->assertFalse($cache->isFresh());
-    }
-}
diff --git a/vendor/symfony/config/Tests/Util/XmlUtilsTest.php b/vendor/symfony/config/Tests/Util/XmlUtilsTest.php
deleted file mode 100644
index 2aecdf8259c657f29a74151e08919778c10079d2..0000000000000000000000000000000000000000
--- a/vendor/symfony/config/Tests/Util/XmlUtilsTest.php
+++ /dev/null
@@ -1,237 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Config\Tests\Util;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Config\Util\XmlUtils;
-
-class XmlUtilsTest extends TestCase
-{
-    public function testLoadFile()
-    {
-        $fixtures = __DIR__.'/../Fixtures/Util/';
-
-        try {
-            XmlUtils::loadFile($fixtures);
-            $this->fail();
-        } catch (\InvalidArgumentException $e) {
-            $this->assertStringContainsString('is not a file', $e->getMessage());
-        }
-
-        try {
-            XmlUtils::loadFile($fixtures.'non_existing.xml');
-            $this->fail();
-        } catch (\InvalidArgumentException $e) {
-            $this->assertStringContainsString('is not a file', $e->getMessage());
-        }
-
-        try {
-            if ('\\' === \DIRECTORY_SEPARATOR) {
-                $this->markTestSkipped('chmod is not supported on Windows');
-            }
-            chmod($fixtures.'not_readable.xml', 000);
-            XmlUtils::loadFile($fixtures.'not_readable.xml');
-            $this->fail();
-        } catch (\InvalidArgumentException $e) {
-            chmod($fixtures.'not_readable.xml', 0644);
-            $this->assertStringContainsString('is not readable', $e->getMessage());
-        }
-
-        try {
-            XmlUtils::loadFile($fixtures.'invalid.xml');
-            $this->fail();
-        } catch (\InvalidArgumentException $e) {
-            $this->assertStringContainsString('ERROR ', $e->getMessage());
-        }
-
-        try {
-            XmlUtils::loadFile($fixtures.'document_type.xml');
-            $this->fail();
-        } catch (\InvalidArgumentException $e) {
-            $this->assertStringContainsString('Document types are not allowed', $e->getMessage());
-        }
-
-        try {
-            XmlUtils::loadFile($fixtures.'invalid_schema.xml', $fixtures.'schema.xsd');
-            $this->fail();
-        } catch (\InvalidArgumentException $e) {
-            $this->assertStringContainsString('ERROR 1845', $e->getMessage());
-        }
-
-        try {
-            XmlUtils::loadFile($fixtures.'invalid_schema.xml', 'invalid_callback_or_file');
-            $this->fail();
-        } catch (\InvalidArgumentException $e) {
-            $this->assertStringContainsString('XSD file or callable', $e->getMessage());
-        }
-
-        $mock = $this->getMockBuilder(Validator::class)->getMock();
-        $mock->expects($this->exactly(2))->method('validate')->will($this->onConsecutiveCalls(false, true));
-
-        try {
-            XmlUtils::loadFile($fixtures.'valid.xml', [$mock, 'validate']);
-            $this->fail();
-        } catch (\InvalidArgumentException $e) {
-            $this->assertRegExp('/The XML file ".+" is not valid\./', $e->getMessage());
-        }
-
-        $this->assertInstanceOf('DOMDocument', XmlUtils::loadFile($fixtures.'valid.xml', [$mock, 'validate']));
-        $this->assertSame([], libxml_get_errors());
-    }
-
-    public function testParseWithInvalidValidatorCallable()
-    {
-        $this->expectException('Symfony\Component\Config\Util\Exception\InvalidXmlException');
-        $this->expectExceptionMessage('The XML is not valid');
-        $fixtures = __DIR__.'/../Fixtures/Util/';
-
-        $mock = $this->getMockBuilder(Validator::class)->getMock();
-        $mock->expects($this->once())->method('validate')->willReturn(false);
-
-        XmlUtils::parse(file_get_contents($fixtures.'valid.xml'), [$mock, 'validate']);
-    }
-
-    public function testLoadFileWithInternalErrorsEnabled()
-    {
-        $internalErrors = libxml_use_internal_errors(true);
-
-        $this->assertSame([], libxml_get_errors());
-        $this->assertInstanceOf('DOMDocument', XmlUtils::loadFile(__DIR__.'/../Fixtures/Util/invalid_schema.xml'));
-        $this->assertSame([], libxml_get_errors());
-
-        libxml_clear_errors();
-        libxml_use_internal_errors($internalErrors);
-    }
-
-    /**
-     * @dataProvider getDataForConvertDomToArray
-     */
-    public function testConvertDomToArray($expected, $xml, $root = false, $checkPrefix = true)
-    {
-        $dom = new \DOMDocument();
-        $dom->loadXML($root ? $xml : '<root>'.$xml.'</root>');
-
-        $this->assertSame($expected, XmlUtils::convertDomElementToArray($dom->documentElement, $checkPrefix));
-    }
-
-    public function getDataForConvertDomToArray()
-    {
-        return [
-            [null, ''],
-            ['bar', 'bar'],
-            [['bar' => 'foobar'], '<foo bar="foobar" />', true],
-            [['foo' => null], '<foo />'],
-            [['foo' => 'bar'], '<foo>bar</foo>'],
-            [['foo' => ['foo' => 'bar']], '<foo foo="bar"/>'],
-            [['foo' => ['foo' => 0]], '<foo><foo>0</foo></foo>'],
-            [['foo' => ['foo' => 'bar']], '<foo><foo>bar</foo></foo>'],
-            [['foo' => ['foo' => 'bar', 'value' => 'text']], '<foo foo="bar">text</foo>'],
-            [['foo' => ['attr' => 'bar', 'foo' => 'text']], '<foo attr="bar"><foo>text</foo></foo>'],
-            [['foo' => ['bar', 'text']], '<foo>bar</foo><foo>text</foo>'],
-            [['foo' => [['foo' => 'bar'], ['foo' => 'text']]], '<foo foo="bar"/><foo foo="text" />'],
-            [['foo' => ['foo' => ['bar', 'text']]], '<foo foo="bar"><foo>text</foo></foo>'],
-            [['foo' => 'bar'], '<foo><!-- Comment -->bar</foo>'],
-            [['foo' => 'text'], '<foo xmlns:h="http://www.example.org/bar" h:bar="bar">text</foo>'],
-            [['foo' => ['bar' => 'bar', 'value' => 'text']], '<foo xmlns:h="http://www.example.org/bar" h:bar="bar">text</foo>', false, false],
-            [['attr' => 1, 'b' => 'hello'], '<foo:a xmlns:foo="http://www.example.org/foo" xmlns:h="http://www.example.org/bar" attr="1" h:bar="bar"><foo:b>hello</foo:b><h:c>2</h:c></foo:a>', true],
-        ];
-    }
-
-    /**
-     * @dataProvider getDataForPhpize
-     */
-    public function testPhpize($expected, $value)
-    {
-        $this->assertSame($expected, XmlUtils::phpize($value));
-    }
-
-    public function getDataForPhpize()
-    {
-        return [
-            ['', ''],
-            [null, 'null'],
-            [true, 'true'],
-            [false, 'false'],
-            [null, 'Null'],
-            [true, 'True'],
-            [false, 'False'],
-            [0, '0'],
-            [1, '1'],
-            [-1, '-1'],
-            [0777, '0777'],
-            [255, '0xFF'],
-            [100.0, '1e2'],
-            [-120.0, '-1.2E2'],
-            [-10100.1, '-10100.1'],
-            ['-10,100.1', '-10,100.1'],
-            ['1234 5678 9101 1121 3141', '1234 5678 9101 1121 3141'],
-            ['1,2,3,4', '1,2,3,4'],
-            ['11,22,33,44', '11,22,33,44'],
-            ['11,222,333,4', '11,222,333,4'],
-            ['1,222,333,444', '1,222,333,444'],
-            ['11,222,333,444', '11,222,333,444'],
-            ['111,222,333,444', '111,222,333,444'],
-            ['1111,2222,3333,4444,5555', '1111,2222,3333,4444,5555'],
-            ['foo', 'foo'],
-            [6, '0b0110'],
-        ];
-    }
-
-    public function testLoadEmptyXmlFile()
-    {
-        $file = __DIR__.'/../Fixtures/foo.xml';
-
-        $this->expectException('InvalidArgumentException');
-        $this->expectExceptionMessage(sprintf('File "%s" does not contain valid XML, it is empty.', $file));
-
-        XmlUtils::loadFile($file);
-    }
-
-    // test for issue https://github.com/symfony/symfony/issues/9731
-    public function testLoadWrongEmptyXMLWithErrorHandler()
-    {
-        $originalDisableEntities = libxml_disable_entity_loader(false);
-        $errorReporting = error_reporting(-1);
-
-        set_error_handler(function ($errno, $errstr) {
-            throw new \Exception($errstr, $errno);
-        });
-
-        $file = __DIR__.'/../Fixtures/foo.xml';
-        try {
-            try {
-                XmlUtils::loadFile($file);
-                $this->fail('An exception should have been raised');
-            } catch (\InvalidArgumentException $e) {
-                $this->assertEquals(sprintf('File "%s" does not contain valid XML, it is empty.', $file), $e->getMessage());
-            }
-        } finally {
-            restore_error_handler();
-            error_reporting($errorReporting);
-        }
-
-        $disableEntities = libxml_disable_entity_loader(true);
-        libxml_disable_entity_loader($disableEntities);
-
-        libxml_disable_entity_loader($originalDisableEntities);
-
-        $this->assertFalse($disableEntities);
-
-        // should not throw an exception
-        XmlUtils::loadFile(__DIR__.'/../Fixtures/Util/valid.xml', __DIR__.'/../Fixtures/Util/schema.xsd');
-    }
-}
-
-interface Validator
-{
-    public function validate();
-}
diff --git a/vendor/symfony/config/Util/XmlUtils.php b/vendor/symfony/config/Util/XmlUtils.php
index c925f315e5ed3954020f2319644217a040b70d4a..12caa486bfc4c6687d9f04871900640a12451911 100644
--- a/vendor/symfony/config/Util/XmlUtils.php
+++ b/vendor/symfony/config/Util/XmlUtils.php
@@ -47,17 +47,21 @@ private function __construct()
     public static function parse($content, $schemaOrCallable = null)
     {
         if (!\extension_loaded('dom')) {
-            throw new \RuntimeException('Extension DOM is required.');
+            throw new \LogicException('Extension DOM is required.');
         }
 
         $internalErrors = libxml_use_internal_errors(true);
-        $disableEntities = libxml_disable_entity_loader(true);
+        if (\LIBXML_VERSION < 20900) {
+            $disableEntities = libxml_disable_entity_loader(true);
+        }
         libxml_clear_errors();
 
         $dom = new \DOMDocument();
         $dom->validateOnParse = true;
-        if (!$dom->loadXML($content, LIBXML_NONET | (\defined('LIBXML_COMPACT') ? LIBXML_COMPACT : 0))) {
-            libxml_disable_entity_loader($disableEntities);
+        if (!$dom->loadXML($content, \LIBXML_NONET | (\defined('LIBXML_COMPACT') ? \LIBXML_COMPACT : 0))) {
+            if (\LIBXML_VERSION < 20900) {
+                libxml_disable_entity_loader($disableEntities);
+            }
 
             throw new XmlParsingException(implode("\n", static::getXmlErrors($internalErrors)));
         }
@@ -65,10 +69,12 @@ public static function parse($content, $schemaOrCallable = null)
         $dom->normalizeDocument();
 
         libxml_use_internal_errors($internalErrors);
-        libxml_disable_entity_loader($disableEntities);
+        if (\LIBXML_VERSION < 20900) {
+            libxml_disable_entity_loader($disableEntities);
+        }
 
         foreach ($dom->childNodes as $child) {
-            if (XML_DOCUMENT_TYPE_NODE === $child->nodeType) {
+            if (\XML_DOCUMENT_TYPE_NODE === $child->nodeType) {
                 throw new XmlParsingException('Document types are not allowed.');
             }
         }
@@ -80,7 +86,7 @@ public static function parse($content, $schemaOrCallable = null)
             $e = null;
             if (\is_callable($schemaOrCallable)) {
                 try {
-                    $valid = \call_user_func($schemaOrCallable, $dom, $internalErrors);
+                    $valid = $schemaOrCallable($dom, $internalErrors);
                 } catch (\Exception $e) {
                     $valid = false;
                 }
@@ -261,7 +267,7 @@ protected static function getXmlErrors($internalErrors)
         $errors = [];
         foreach (libxml_get_errors() as $error) {
             $errors[] = sprintf('[%s %s] %s (in %s - line %d, column %d)',
-                LIBXML_ERR_WARNING == $error->level ? 'WARNING' : 'ERROR',
+                \LIBXML_ERR_WARNING == $error->level ? 'WARNING' : 'ERROR',
                 $error->code,
                 trim($error->message),
                 $error->file ?: 'n/a',
diff --git a/vendor/symfony/config/composer.json b/vendor/symfony/config/composer.json
index c04294dd4cba5646eeb540e49bd3a2a7bcfc9bba..fd26b4bd8c2a838edbfc7edba884481d6d7fb9ad 100644
--- a/vendor/symfony/config/composer.json
+++ b/vendor/symfony/config/composer.json
@@ -16,19 +16,19 @@
         }
     ],
     "require": {
-        "php": "^5.5.9|>=7.0.8",
-        "symfony/filesystem": "~2.8|~3.0|~4.0",
+        "php": ">=7.1.3",
+        "symfony/filesystem": "^3.4|^4.0|^5.0",
         "symfony/polyfill-ctype": "~1.8"
     },
     "require-dev": {
-        "symfony/finder": "~3.3|~4.0",
-        "symfony/yaml": "~3.0|~4.0",
-        "symfony/dependency-injection": "~3.3|~4.0",
-        "symfony/event-dispatcher": "~3.3|~4.0"
+        "symfony/event-dispatcher": "^3.4|^4.0|^5.0",
+        "symfony/finder": "^3.4|^4.0|^5.0",
+        "symfony/messenger": "^4.1|^5.0",
+        "symfony/service-contracts": "^1.1|^2",
+        "symfony/yaml": "^3.4|^4.0|^5.0"
     },
     "conflict": {
-        "symfony/finder": "<3.3",
-        "symfony/dependency-injection": "<3.3"
+        "symfony/finder": "<3.4"
     },
     "suggest": {
         "symfony/yaml": "To use the yaml reference dumper"
@@ -39,10 +39,5 @@
             "/Tests/"
         ]
     },
-    "minimum-stability": "dev",
-    "extra": {
-        "branch-alias": {
-            "dev-master": "3.4-dev"
-        }
-    }
+    "minimum-stability": "dev"
 }
diff --git a/vendor/symfony/config/phpunit.xml.dist b/vendor/symfony/config/phpunit.xml.dist
deleted file mode 100644
index 1cfdb3cdc67271a994db715a7c459921596af5da..0000000000000000000000000000000000000000
--- a/vendor/symfony/config/phpunit.xml.dist
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/5.2/phpunit.xsd"
-         backupGlobals="false"
-         colors="true"
-         bootstrap="vendor/autoload.php"
-         failOnRisky="true"
-         failOnWarning="true"
->
-    <php>
-        <ini name="error_reporting" value="-1" />
-    </php>
-
-    <testsuites>
-        <testsuite name="Symfony Config Component Test Suite">
-            <directory>./Tests/</directory>
-        </testsuite>
-    </testsuites>
-
-    <filter>
-        <whitelist>
-            <directory>./</directory>
-            <exclude>
-                <directory>./Resources</directory>
-                <directory>./Tests</directory>
-                <directory>./vendor</directory>
-            </exclude>
-        </whitelist>
-    </filter>
-</phpunit>
diff --git a/vendor/symfony/css-selector/.gitignore b/vendor/symfony/css-selector/.gitignore
deleted file mode 100644
index c49a5d8df5c6548379f00c77fe572a7217bce218..0000000000000000000000000000000000000000
--- a/vendor/symfony/css-selector/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-vendor/
-composer.lock
-phpunit.xml
diff --git a/vendor/symfony/css-selector/CHANGELOG.md b/vendor/symfony/css-selector/CHANGELOG.md
index 4061ff20c3d2ac1d5ad0cc1297dec2144cfb8060..de81fa2e7d437a8981af9853857b90f399feb3a1 100644
--- a/vendor/symfony/css-selector/CHANGELOG.md
+++ b/vendor/symfony/css-selector/CHANGELOG.md
@@ -1,6 +1,11 @@
 CHANGELOG
 =========
 
+4.4.0
+-----
+
+ * Added support for `*:only-of-type`
+
 2.8.0
 -----
 
diff --git a/vendor/symfony/css-selector/CssSelectorConverter.php b/vendor/symfony/css-selector/CssSelectorConverter.php
index 8d66dbd0e18f2325e203580c7af623c95323ea38..d1aeb7eb1702ea7c9a6ed55db29fb6303e7c1942 100644
--- a/vendor/symfony/css-selector/CssSelectorConverter.php
+++ b/vendor/symfony/css-selector/CssSelectorConverter.php
@@ -31,7 +31,7 @@ class CssSelectorConverter
     /**
      * @param bool $html Whether HTML support should be enabled. Disable it for XML documents
      */
-    public function __construct($html = true)
+    public function __construct(bool $html = true)
     {
         $this->translator = new Translator();
 
diff --git a/vendor/symfony/css-selector/Exception/ExceptionInterface.php b/vendor/symfony/css-selector/Exception/ExceptionInterface.php
index e4c5ae1b6b3eff833acc0b012e75d7f528d627fb..9e259006b0df65feca764e2f3f7fb4f483b31f5c 100644
--- a/vendor/symfony/css-selector/Exception/ExceptionInterface.php
+++ b/vendor/symfony/css-selector/Exception/ExceptionInterface.php
@@ -19,6 +19,6 @@
  *
  * @author Jean-François Simon <jeanfrancois.simon@sensiolabs.com>
  */
-interface ExceptionInterface
+interface ExceptionInterface extends \Throwable
 {
 }
diff --git a/vendor/symfony/css-selector/Exception/SyntaxErrorException.php b/vendor/symfony/css-selector/Exception/SyntaxErrorException.php
index cb3158a5536dc73b7652526db831c47bfdde945d..1200c979ea6acd0dfd0e72dac5a12d3f35224ed8 100644
--- a/vendor/symfony/css-selector/Exception/SyntaxErrorException.php
+++ b/vendor/symfony/css-selector/Exception/SyntaxErrorException.php
@@ -25,7 +25,6 @@ class SyntaxErrorException extends ParseException
 {
     /**
      * @param string $expectedValue
-     * @param Token  $foundToken
      *
      * @return self
      */
diff --git a/vendor/symfony/css-selector/LICENSE b/vendor/symfony/css-selector/LICENSE
index 21d7fb9e2f29b50caca3a76f0647e94e2cc8ddc1..9e936ec0448b8549e5edf08e5ac5f01491a8bfc8 100644
--- a/vendor/symfony/css-selector/LICENSE
+++ b/vendor/symfony/css-selector/LICENSE
@@ -1,4 +1,4 @@
-Copyright (c) 2004-2018 Fabien Potencier
+Copyright (c) 2004-2020 Fabien Potencier
 
 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to deal
diff --git a/vendor/symfony/css-selector/Node/AbstractNode.php b/vendor/symfony/css-selector/Node/AbstractNode.php
index 1d5d8ff7ba1d82daadebd337afabc17fe4a75ce5..1306aeacb95e358c55265cbd953813e502ebb93a 100644
--- a/vendor/symfony/css-selector/Node/AbstractNode.php
+++ b/vendor/symfony/css-selector/Node/AbstractNode.php
@@ -28,13 +28,10 @@ abstract class AbstractNode implements NodeInterface
      */
     private $nodeName;
 
-    /**
-     * @return string
-     */
-    public function getNodeName()
+    public function getNodeName(): string
     {
         if (null === $this->nodeName) {
-            $this->nodeName = preg_replace('~.*\\\\([^\\\\]+)Node$~', '$1', \get_called_class());
+            $this->nodeName = preg_replace('~.*\\\\([^\\\\]+)Node$~', '$1', static::class);
         }
 
         return $this->nodeName;
diff --git a/vendor/symfony/css-selector/Node/AttributeNode.php b/vendor/symfony/css-selector/Node/AttributeNode.php
index 1caccb6bfeefb62ad7fc11f86dae845e89e36aa2..bf702d9ce44e406f50e69b825ac870ee8cafb5da 100644
--- a/vendor/symfony/css-selector/Node/AttributeNode.php
+++ b/vendor/symfony/css-selector/Node/AttributeNode.php
@@ -29,14 +29,7 @@ class AttributeNode extends AbstractNode
     private $operator;
     private $value;
 
-    /**
-     * @param NodeInterface $selector
-     * @param string        $namespace
-     * @param string        $attribute
-     * @param string        $operator
-     * @param string        $value
-     */
-    public function __construct(NodeInterface $selector, $namespace, $attribute, $operator, $value)
+    public function __construct(NodeInterface $selector, ?string $namespace, string $attribute, string $operator, ?string $value)
     {
         $this->selector = $selector;
         $this->namespace = $namespace;
@@ -45,42 +38,27 @@ public function __construct(NodeInterface $selector, $namespace, $attribute, $op
         $this->value = $value;
     }
 
-    /**
-     * @return NodeInterface
-     */
-    public function getSelector()
+    public function getSelector(): NodeInterface
     {
         return $this->selector;
     }
 
-    /**
-     * @return string
-     */
-    public function getNamespace()
+    public function getNamespace(): ?string
     {
         return $this->namespace;
     }
 
-    /**
-     * @return string
-     */
-    public function getAttribute()
+    public function getAttribute(): string
     {
         return $this->attribute;
     }
 
-    /**
-     * @return string
-     */
-    public function getOperator()
+    public function getOperator(): string
     {
         return $this->operator;
     }
 
-    /**
-     * @return string
-     */
-    public function getValue()
+    public function getValue(): ?string
     {
         return $this->value;
     }
@@ -88,7 +66,7 @@ public function getValue()
     /**
      * {@inheritdoc}
      */
-    public function getSpecificity()
+    public function getSpecificity(): Specificity
     {
         return $this->selector->getSpecificity()->plus(new Specificity(0, 1, 0));
     }
@@ -96,7 +74,7 @@ public function getSpecificity()
     /**
      * {@inheritdoc}
      */
-    public function __toString()
+    public function __toString(): string
     {
         $attribute = $this->namespace ? $this->namespace.'|'.$this->attribute : $this->attribute;
 
diff --git a/vendor/symfony/css-selector/Node/ClassNode.php b/vendor/symfony/css-selector/Node/ClassNode.php
index 69462e8e7109112d70d706bcc384bd4a5a54a7c6..1998b4bd5b0ecd618cb913b865d6e0cc3b6eb448 100644
--- a/vendor/symfony/css-selector/Node/ClassNode.php
+++ b/vendor/symfony/css-selector/Node/ClassNode.php
@@ -26,28 +26,18 @@ class ClassNode extends AbstractNode
     private $selector;
     private $name;
 
-    /**
-     * @param NodeInterface $selector
-     * @param string        $name
-     */
-    public function __construct(NodeInterface $selector, $name)
+    public function __construct(NodeInterface $selector, string $name)
     {
         $this->selector = $selector;
         $this->name = $name;
     }
 
-    /**
-     * @return NodeInterface
-     */
-    public function getSelector()
+    public function getSelector(): NodeInterface
     {
         return $this->selector;
     }
 
-    /**
-     * @return string
-     */
-    public function getName()
+    public function getName(): string
     {
         return $this->name;
     }
@@ -55,7 +45,7 @@ public function getName()
     /**
      * {@inheritdoc}
      */
-    public function getSpecificity()
+    public function getSpecificity(): Specificity
     {
         return $this->selector->getSpecificity()->plus(new Specificity(0, 1, 0));
     }
@@ -63,7 +53,7 @@ public function getSpecificity()
     /**
      * {@inheritdoc}
      */
-    public function __toString()
+    public function __toString(): string
     {
         return sprintf('%s[%s.%s]', $this->getNodeName(), $this->selector, $this->name);
     }
diff --git a/vendor/symfony/css-selector/Node/CombinedSelectorNode.php b/vendor/symfony/css-selector/Node/CombinedSelectorNode.php
index 2aa583aaf69283e7384992e6c205140ba8b991f9..f97fd21aebba7c653fcaa07bd858a0b1668786df 100644
--- a/vendor/symfony/css-selector/Node/CombinedSelectorNode.php
+++ b/vendor/symfony/css-selector/Node/CombinedSelectorNode.php
@@ -27,38 +27,24 @@ class CombinedSelectorNode extends AbstractNode
     private $combinator;
     private $subSelector;
 
-    /**
-     * @param NodeInterface $selector
-     * @param string        $combinator
-     * @param NodeInterface $subSelector
-     */
-    public function __construct(NodeInterface $selector, $combinator, NodeInterface $subSelector)
+    public function __construct(NodeInterface $selector, string $combinator, NodeInterface $subSelector)
     {
         $this->selector = $selector;
         $this->combinator = $combinator;
         $this->subSelector = $subSelector;
     }
 
-    /**
-     * @return NodeInterface
-     */
-    public function getSelector()
+    public function getSelector(): NodeInterface
     {
         return $this->selector;
     }
 
-    /**
-     * @return string
-     */
-    public function getCombinator()
+    public function getCombinator(): string
     {
         return $this->combinator;
     }
 
-    /**
-     * @return NodeInterface
-     */
-    public function getSubSelector()
+    public function getSubSelector(): NodeInterface
     {
         return $this->subSelector;
     }
@@ -66,7 +52,7 @@ public function getSubSelector()
     /**
      * {@inheritdoc}
      */
-    public function getSpecificity()
+    public function getSpecificity(): Specificity
     {
         return $this->selector->getSpecificity()->plus($this->subSelector->getSpecificity());
     }
@@ -74,7 +60,7 @@ public function getSpecificity()
     /**
      * {@inheritdoc}
      */
-    public function __toString()
+    public function __toString(): string
     {
         $combinator = ' ' === $this->combinator ? '<followed>' : $this->combinator;
 
diff --git a/vendor/symfony/css-selector/Node/ElementNode.php b/vendor/symfony/css-selector/Node/ElementNode.php
index bcdce7a7a5207a1f52ddafadb2762e3f5eff4c86..7949ed919836888b7f963322a0cdf135208585df 100644
--- a/vendor/symfony/css-selector/Node/ElementNode.php
+++ b/vendor/symfony/css-selector/Node/ElementNode.php
@@ -26,28 +26,18 @@ class ElementNode extends AbstractNode
     private $namespace;
     private $element;
 
-    /**
-     * @param string|null $namespace
-     * @param string|null $element
-     */
-    public function __construct($namespace = null, $element = null)
+    public function __construct(string $namespace = null, string $element = null)
     {
         $this->namespace = $namespace;
         $this->element = $element;
     }
 
-    /**
-     * @return null|string
-     */
-    public function getNamespace()
+    public function getNamespace(): ?string
     {
         return $this->namespace;
     }
 
-    /**
-     * @return null|string
-     */
-    public function getElement()
+    public function getElement(): ?string
     {
         return $this->element;
     }
@@ -55,7 +45,7 @@ public function getElement()
     /**
      * {@inheritdoc}
      */
-    public function getSpecificity()
+    public function getSpecificity(): Specificity
     {
         return new Specificity(0, 0, $this->element ? 1 : 0);
     }
@@ -63,7 +53,7 @@ public function getSpecificity()
     /**
      * {@inheritdoc}
      */
-    public function __toString()
+    public function __toString(): string
     {
         $element = $this->element ?: '*';
 
diff --git a/vendor/symfony/css-selector/Node/FunctionNode.php b/vendor/symfony/css-selector/Node/FunctionNode.php
index 50268255ce525cd72584f399cd4c489d685ed6d7..d3e9b4fc7cbb0103ec60b8a2f9ebea9baf6dacaf 100644
--- a/vendor/symfony/css-selector/Node/FunctionNode.php
+++ b/vendor/symfony/css-selector/Node/FunctionNode.php
@@ -30,29 +30,21 @@ class FunctionNode extends AbstractNode
     private $arguments;
 
     /**
-     * @param NodeInterface $selector
-     * @param string        $name
-     * @param Token[]       $arguments
+     * @param Token[] $arguments
      */
-    public function __construct(NodeInterface $selector, $name, array $arguments = array())
+    public function __construct(NodeInterface $selector, string $name, array $arguments = [])
     {
         $this->selector = $selector;
         $this->name = strtolower($name);
         $this->arguments = $arguments;
     }
 
-    /**
-     * @return NodeInterface
-     */
-    public function getSelector()
+    public function getSelector(): NodeInterface
     {
         return $this->selector;
     }
 
-    /**
-     * @return string
-     */
-    public function getName()
+    public function getName(): string
     {
         return $this->name;
     }
@@ -60,7 +52,7 @@ public function getName()
     /**
      * @return Token[]
      */
-    public function getArguments()
+    public function getArguments(): array
     {
         return $this->arguments;
     }
@@ -68,7 +60,7 @@ public function getArguments()
     /**
      * {@inheritdoc}
      */
-    public function getSpecificity()
+    public function getSpecificity(): Specificity
     {
         return $this->selector->getSpecificity()->plus(new Specificity(0, 1, 0));
     }
@@ -76,7 +68,7 @@ public function getSpecificity()
     /**
      * {@inheritdoc}
      */
-    public function __toString()
+    public function __toString(): string
     {
         $arguments = implode(', ', array_map(function (Token $token) {
             return "'".$token->getValue()."'";
diff --git a/vendor/symfony/css-selector/Node/HashNode.php b/vendor/symfony/css-selector/Node/HashNode.php
index ebf9a9872a7d1b92b0c1325689821790860b5ca6..f73fa2e7402bd332da1152fc0cee188c14761e72 100644
--- a/vendor/symfony/css-selector/Node/HashNode.php
+++ b/vendor/symfony/css-selector/Node/HashNode.php
@@ -26,28 +26,18 @@ class HashNode extends AbstractNode
     private $selector;
     private $id;
 
-    /**
-     * @param NodeInterface $selector
-     * @param string        $id
-     */
-    public function __construct(NodeInterface $selector, $id)
+    public function __construct(NodeInterface $selector, string $id)
     {
         $this->selector = $selector;
         $this->id = $id;
     }
 
-    /**
-     * @return NodeInterface
-     */
-    public function getSelector()
+    public function getSelector(): NodeInterface
     {
         return $this->selector;
     }
 
-    /**
-     * @return string
-     */
-    public function getId()
+    public function getId(): string
     {
         return $this->id;
     }
@@ -55,7 +45,7 @@ public function getId()
     /**
      * {@inheritdoc}
      */
-    public function getSpecificity()
+    public function getSpecificity(): Specificity
     {
         return $this->selector->getSpecificity()->plus(new Specificity(1, 0, 0));
     }
@@ -63,7 +53,7 @@ public function getSpecificity()
     /**
      * {@inheritdoc}
      */
-    public function __toString()
+    public function __toString(): string
     {
         return sprintf('%s[%s#%s]', $this->getNodeName(), $this->selector, $this->id);
     }
diff --git a/vendor/symfony/css-selector/Node/NegationNode.php b/vendor/symfony/css-selector/Node/NegationNode.php
index bf97caeb58683d87c949f050c05331d6396d15d6..afa47cf878c6be3747fc93a73d55181e81f95052 100644
--- a/vendor/symfony/css-selector/Node/NegationNode.php
+++ b/vendor/symfony/css-selector/Node/NegationNode.php
@@ -32,18 +32,12 @@ public function __construct(NodeInterface $selector, NodeInterface $subSelector)
         $this->subSelector = $subSelector;
     }
 
-    /**
-     * @return NodeInterface
-     */
-    public function getSelector()
+    public function getSelector(): NodeInterface
     {
         return $this->selector;
     }
 
-    /**
-     * @return NodeInterface
-     */
-    public function getSubSelector()
+    public function getSubSelector(): NodeInterface
     {
         return $this->subSelector;
     }
@@ -51,7 +45,7 @@ public function getSubSelector()
     /**
      * {@inheritdoc}
      */
-    public function getSpecificity()
+    public function getSpecificity(): Specificity
     {
         return $this->selector->getSpecificity()->plus($this->subSelector->getSpecificity());
     }
@@ -59,7 +53,7 @@ public function getSpecificity()
     /**
      * {@inheritdoc}
      */
-    public function __toString()
+    public function __toString(): string
     {
         return sprintf('%s[%s:not(%s)]', $this->getNodeName(), $this->selector, $this->subSelector);
     }
diff --git a/vendor/symfony/css-selector/Node/NodeInterface.php b/vendor/symfony/css-selector/Node/NodeInterface.php
index d919e20c7107af85f35e386bafe11fd033b06e92..b078d26d4de314cd8d8764b56de2a38172d04aef 100644
--- a/vendor/symfony/css-selector/Node/NodeInterface.php
+++ b/vendor/symfony/css-selector/Node/NodeInterface.php
@@ -23,24 +23,9 @@
  */
 interface NodeInterface
 {
-    /**
-     * Returns node's name.
-     *
-     * @return string
-     */
-    public function getNodeName();
+    public function getNodeName(): string;
 
-    /**
-     * Returns node's specificity.
-     *
-     * @return Specificity
-     */
-    public function getSpecificity();
+    public function getSpecificity(): Specificity;
 
-    /**
-     * Returns node's string representation.
-     *
-     * @return string
-     */
-    public function __toString();
+    public function __toString(): string;
 }
diff --git a/vendor/symfony/css-selector/Node/PseudoNode.php b/vendor/symfony/css-selector/Node/PseudoNode.php
index 3842c695e852bb81f48b5e628fe6a4a2721aad2c..7d4a011e1faf39ee1f3b50d1ff4566c1a66c39cf 100644
--- a/vendor/symfony/css-selector/Node/PseudoNode.php
+++ b/vendor/symfony/css-selector/Node/PseudoNode.php
@@ -26,28 +26,18 @@ class PseudoNode extends AbstractNode
     private $selector;
     private $identifier;
 
-    /**
-     * @param NodeInterface $selector
-     * @param string        $identifier
-     */
-    public function __construct(NodeInterface $selector, $identifier)
+    public function __construct(NodeInterface $selector, string $identifier)
     {
         $this->selector = $selector;
         $this->identifier = strtolower($identifier);
     }
 
-    /**
-     * @return NodeInterface
-     */
-    public function getSelector()
+    public function getSelector(): NodeInterface
     {
         return $this->selector;
     }
 
-    /**
-     * @return string
-     */
-    public function getIdentifier()
+    public function getIdentifier(): string
     {
         return $this->identifier;
     }
@@ -55,7 +45,7 @@ public function getIdentifier()
     /**
      * {@inheritdoc}
      */
-    public function getSpecificity()
+    public function getSpecificity(): Specificity
     {
         return $this->selector->getSpecificity()->plus(new Specificity(0, 1, 0));
     }
@@ -63,7 +53,7 @@ public function getSpecificity()
     /**
      * {@inheritdoc}
      */
-    public function __toString()
+    public function __toString(): string
     {
         return sprintf('%s[%s:%s]', $this->getNodeName(), $this->selector, $this->identifier);
     }
diff --git a/vendor/symfony/css-selector/Node/SelectorNode.php b/vendor/symfony/css-selector/Node/SelectorNode.php
index 5ef2be62a41b4f37f7316f015b41bd64d6ebe3b6..a76aa5bb5f48ade4ff3b826a209c7190698e576d 100644
--- a/vendor/symfony/css-selector/Node/SelectorNode.php
+++ b/vendor/symfony/css-selector/Node/SelectorNode.php
@@ -26,28 +26,18 @@ class SelectorNode extends AbstractNode
     private $tree;
     private $pseudoElement;
 
-    /**
-     * @param NodeInterface $tree
-     * @param null|string   $pseudoElement
-     */
-    public function __construct(NodeInterface $tree, $pseudoElement = null)
+    public function __construct(NodeInterface $tree, string $pseudoElement = null)
     {
         $this->tree = $tree;
         $this->pseudoElement = $pseudoElement ? strtolower($pseudoElement) : null;
     }
 
-    /**
-     * @return NodeInterface
-     */
-    public function getTree()
+    public function getTree(): NodeInterface
     {
         return $this->tree;
     }
 
-    /**
-     * @return null|string
-     */
-    public function getPseudoElement()
+    public function getPseudoElement(): ?string
     {
         return $this->pseudoElement;
     }
@@ -55,7 +45,7 @@ public function getPseudoElement()
     /**
      * {@inheritdoc}
      */
-    public function getSpecificity()
+    public function getSpecificity(): Specificity
     {
         return $this->tree->getSpecificity()->plus(new Specificity(0, 0, $this->pseudoElement ? 1 : 0));
     }
@@ -63,7 +53,7 @@ public function getSpecificity()
     /**
      * {@inheritdoc}
      */
-    public function __toString()
+    public function __toString(): string
     {
         return sprintf('%s[%s%s]', $this->getNodeName(), $this->tree, $this->pseudoElement ? '::'.$this->pseudoElement : '');
     }
diff --git a/vendor/symfony/css-selector/Node/Specificity.php b/vendor/symfony/css-selector/Node/Specificity.php
index a11b7f73d89c8a62a05acf463ad937f093b2bb43..d0ac8aa1d72d29ca1063e8032beb6a16c9fe8b1b 100644
--- a/vendor/symfony/css-selector/Node/Specificity.php
+++ b/vendor/symfony/css-selector/Node/Specificity.php
@@ -33,32 +33,19 @@ class Specificity
     private $b;
     private $c;
 
-    /**
-     * @param int $a
-     * @param int $b
-     * @param int $c
-     */
-    public function __construct($a, $b, $c)
+    public function __construct(int $a, int $b, int $c)
     {
         $this->a = $a;
         $this->b = $b;
         $this->c = $c;
     }
 
-    /**
-     * @return self
-     */
-    public function plus(self $specificity)
+    public function plus(self $specificity): self
     {
         return new self($this->a + $specificity->a, $this->b + $specificity->b, $this->c + $specificity->c);
     }
 
-    /**
-     * Returns global specificity value.
-     *
-     * @return int
-     */
-    public function getValue()
+    public function getValue(): int
     {
         return $this->a * self::A_FACTOR + $this->b * self::B_FACTOR + $this->c * self::C_FACTOR;
     }
@@ -66,10 +53,8 @@ public function getValue()
     /**
      * Returns -1 if the object specificity is lower than the argument,
      * 0 if they are equal, and 1 if the argument is lower.
-     *
-     * @return int
      */
-    public function compareTo(self $specificity)
+    public function compareTo(self $specificity): int
     {
         if ($this->a !== $specificity->a) {
             return $this->a > $specificity->a ? 1 : -1;
diff --git a/vendor/symfony/css-selector/Parser/Handler/CommentHandler.php b/vendor/symfony/css-selector/Parser/Handler/CommentHandler.php
index a29775cab370f46f7fa2594c64181b8f33d501a0..93f318844a5bde5b14f8633faeb7aa73b9f40417 100644
--- a/vendor/symfony/css-selector/Parser/Handler/CommentHandler.php
+++ b/vendor/symfony/css-selector/Parser/Handler/CommentHandler.php
@@ -29,7 +29,7 @@ class CommentHandler implements HandlerInterface
     /**
      * {@inheritdoc}
      */
-    public function handle(Reader $reader, TokenStream $stream)
+    public function handle(Reader $reader, TokenStream $stream): bool
     {
         if ('/*' !== $reader->getSubstring(2)) {
             return false;
diff --git a/vendor/symfony/css-selector/Parser/Handler/HandlerInterface.php b/vendor/symfony/css-selector/Parser/Handler/HandlerInterface.php
index de931f6797080f7470b877d3edb525e090ba6ecf..9ec714d547721445037fc4ef07a9741bb6061f9a 100644
--- a/vendor/symfony/css-selector/Parser/Handler/HandlerInterface.php
+++ b/vendor/symfony/css-selector/Parser/Handler/HandlerInterface.php
@@ -26,8 +26,5 @@
  */
 interface HandlerInterface
 {
-    /**
-     * @return bool
-     */
-    public function handle(Reader $reader, TokenStream $stream);
+    public function handle(Reader $reader, TokenStream $stream): bool;
 }
diff --git a/vendor/symfony/css-selector/Parser/Handler/HashHandler.php b/vendor/symfony/css-selector/Parser/Handler/HashHandler.php
index e451328f1757c3f37398fde4fe5ef0b3352c45c7..7ae9b438ca0ab194a5e6702e0e7a99ffd4b6e731 100644
--- a/vendor/symfony/css-selector/Parser/Handler/HashHandler.php
+++ b/vendor/symfony/css-selector/Parser/Handler/HashHandler.php
@@ -41,7 +41,7 @@ public function __construct(TokenizerPatterns $patterns, TokenizerEscaping $esca
     /**
      * {@inheritdoc}
      */
-    public function handle(Reader $reader, TokenStream $stream)
+    public function handle(Reader $reader, TokenStream $stream): bool
     {
         $match = $reader->findPattern($this->patterns->getHashPattern());
 
diff --git a/vendor/symfony/css-selector/Parser/Handler/IdentifierHandler.php b/vendor/symfony/css-selector/Parser/Handler/IdentifierHandler.php
index 1591fcb54b59aabf33fe9e52a9e3283a54920856..7b2a14e2c33e6021ac26cc653f9a9b5d5127132f 100644
--- a/vendor/symfony/css-selector/Parser/Handler/IdentifierHandler.php
+++ b/vendor/symfony/css-selector/Parser/Handler/IdentifierHandler.php
@@ -41,7 +41,7 @@ public function __construct(TokenizerPatterns $patterns, TokenizerEscaping $esca
     /**
      * {@inheritdoc}
      */
-    public function handle(Reader $reader, TokenStream $stream)
+    public function handle(Reader $reader, TokenStream $stream): bool
     {
         $match = $reader->findPattern($this->patterns->getIdentifierPattern());
 
diff --git a/vendor/symfony/css-selector/Parser/Handler/NumberHandler.php b/vendor/symfony/css-selector/Parser/Handler/NumberHandler.php
index 5955903cd4a367ffeacf03492d2e43b0edca29b6..8291a68d13d43e65da0de1f60a837d92fb58a6a7 100644
--- a/vendor/symfony/css-selector/Parser/Handler/NumberHandler.php
+++ b/vendor/symfony/css-selector/Parser/Handler/NumberHandler.php
@@ -38,7 +38,7 @@ public function __construct(TokenizerPatterns $patterns)
     /**
      * {@inheritdoc}
      */
-    public function handle(Reader $reader, TokenStream $stream)
+    public function handle(Reader $reader, TokenStream $stream): bool
     {
         $match = $reader->findPattern($this->patterns->getNumberPattern());
 
diff --git a/vendor/symfony/css-selector/Parser/Handler/StringHandler.php b/vendor/symfony/css-selector/Parser/Handler/StringHandler.php
index 00155b04650d0a6dc7c99a570acd3821b45ca315..6ce83cdc9b1c32d88756c6accdb3795ce07e5f64 100644
--- a/vendor/symfony/css-selector/Parser/Handler/StringHandler.php
+++ b/vendor/symfony/css-selector/Parser/Handler/StringHandler.php
@@ -43,11 +43,11 @@ public function __construct(TokenizerPatterns $patterns, TokenizerEscaping $esca
     /**
      * {@inheritdoc}
      */
-    public function handle(Reader $reader, TokenStream $stream)
+    public function handle(Reader $reader, TokenStream $stream): bool
     {
         $quote = $reader->getSubstring(1);
 
-        if (!\in_array($quote, array("'", '"'))) {
+        if (!\in_array($quote, ["'", '"'])) {
             return false;
         }
 
@@ -55,7 +55,7 @@ public function handle(Reader $reader, TokenStream $stream)
         $match = $reader->findPattern($this->patterns->getQuotedStringPattern($quote));
 
         if (!$match) {
-            throw new InternalErrorException(sprintf('Should have found at least an empty match at %s.', $reader->getPosition()));
+            throw new InternalErrorException(sprintf('Should have found at least an empty match at %d.', $reader->getPosition()));
         }
 
         // check unclosed strings
diff --git a/vendor/symfony/css-selector/Parser/Handler/WhitespaceHandler.php b/vendor/symfony/css-selector/Parser/Handler/WhitespaceHandler.php
index 396467af0f7f3111e4aede60f4f6fd4c60e4b16d..21345e32c70da7ab3d6e7d758119d323ae00e60b 100644
--- a/vendor/symfony/css-selector/Parser/Handler/WhitespaceHandler.php
+++ b/vendor/symfony/css-selector/Parser/Handler/WhitespaceHandler.php
@@ -30,7 +30,7 @@ class WhitespaceHandler implements HandlerInterface
     /**
      * {@inheritdoc}
      */
-    public function handle(Reader $reader, TokenStream $stream)
+    public function handle(Reader $reader, TokenStream $stream): bool
     {
         $match = $reader->findPattern('~^[ \t\r\n\f]+~');
 
diff --git a/vendor/symfony/css-selector/Parser/Parser.php b/vendor/symfony/css-selector/Parser/Parser.php
index 87c05a74b59799444aabca60cbc5225c81fa1598..a03f1527f144be1c87d1dd9877abf66c36d9f3b6 100644
--- a/vendor/symfony/css-selector/Parser/Parser.php
+++ b/vendor/symfony/css-selector/Parser/Parser.php
@@ -37,7 +37,7 @@ public function __construct(Tokenizer $tokenizer = null)
     /**
      * {@inheritdoc}
      */
-    public function parse($source)
+    public function parse(string $source): array
     {
         $reader = new Reader($source);
         $stream = $this->tokenizer->tokenize($reader);
@@ -50,11 +50,9 @@ public function parse($source)
      *
      * @param Token[] $tokens
      *
-     * @return array
-     *
      * @throws SyntaxErrorException
      */
-    public static function parseSeries(array $tokens)
+    public static function parseSeries(array $tokens): array
     {
         foreach ($tokens as $token) {
             if ($token->isString()) {
@@ -76,38 +74,33 @@ public static function parseSeries(array $tokens)
 
         switch (true) {
             case 'odd' === $joined:
-                return array(2, 1);
+                return [2, 1];
             case 'even' === $joined:
-                return array(2, 0);
+                return [2, 0];
             case 'n' === $joined:
-                return array(1, 0);
+                return [1, 0];
             case false === strpos($joined, 'n'):
-                return array(0, $int($joined));
+                return [0, $int($joined)];
         }
 
         $split = explode('n', $joined);
         $first = isset($split[0]) ? $split[0] : null;
 
-        return array(
+        return [
             $first ? ('-' === $first || '+' === $first ? $int($first.'1') : $int($first)) : 1,
             isset($split[1]) && $split[1] ? $int($split[1]) : 0,
-        );
+        ];
     }
 
-    /**
-     * Parses selector nodes.
-     *
-     * @return array
-     */
-    private function parseSelectorList(TokenStream $stream)
+    private function parseSelectorList(TokenStream $stream): array
     {
         $stream->skipWhitespace();
-        $selectors = array();
+        $selectors = [];
 
         while (true) {
             $selectors[] = $this->parserSelectorNode($stream);
 
-            if ($stream->getPeek()->isDelimiter(array(','))) {
+            if ($stream->getPeek()->isDelimiter([','])) {
                 $stream->getNext();
                 $stream->skipWhitespace();
             } else {
@@ -118,22 +111,15 @@ private function parseSelectorList(TokenStream $stream)
         return $selectors;
     }
 
-    /**
-     * Parses next selector or combined node.
-     *
-     * @return Node\SelectorNode
-     *
-     * @throws SyntaxErrorException
-     */
-    private function parserSelectorNode(TokenStream $stream)
+    private function parserSelectorNode(TokenStream $stream): Node\SelectorNode
     {
-        list($result, $pseudoElement) = $this->parseSimpleSelector($stream);
+        [$result, $pseudoElement] = $this->parseSimpleSelector($stream);
 
         while (true) {
             $stream->skipWhitespace();
             $peek = $stream->getPeek();
 
-            if ($peek->isFileEnd() || $peek->isDelimiter(array(','))) {
+            if ($peek->isFileEnd() || $peek->isDelimiter([','])) {
                 break;
             }
 
@@ -141,14 +127,14 @@ private function parserSelectorNode(TokenStream $stream)
                 throw SyntaxErrorException::pseudoElementFound($pseudoElement, 'not at the end of a selector');
             }
 
-            if ($peek->isDelimiter(array('+', '>', '~'))) {
+            if ($peek->isDelimiter(['+', '>', '~'])) {
                 $combinator = $stream->getNext()->getValue();
                 $stream->skipWhitespace();
             } else {
                 $combinator = ' ';
             }
 
-            list($nextSelector, $pseudoElement) = $this->parseSimpleSelector($stream);
+            [$nextSelector, $pseudoElement] = $this->parseSimpleSelector($stream);
             $result = new Node\CombinedSelectorNode($result, $combinator, $nextSelector);
         }
 
@@ -158,14 +144,9 @@ private function parserSelectorNode(TokenStream $stream)
     /**
      * Parses next simple node (hash, class, pseudo, negation).
      *
-     * @param TokenStream $stream
-     * @param bool        $insideNegation
-     *
-     * @return array
-     *
      * @throws SyntaxErrorException
      */
-    private function parseSimpleSelector(TokenStream $stream, $insideNegation = false)
+    private function parseSimpleSelector(TokenStream $stream, bool $insideNegation = false): array
     {
         $stream->skipWhitespace();
 
@@ -177,8 +158,8 @@ private function parseSimpleSelector(TokenStream $stream, $insideNegation = fals
             $peek = $stream->getPeek();
             if ($peek->isWhitespace()
                 || $peek->isFileEnd()
-                || $peek->isDelimiter(array(',', '+', '>', '~'))
-                || ($insideNegation && $peek->isDelimiter(array(')')))
+                || $peek->isDelimiter([',', '+', '>', '~'])
+                || ($insideNegation && $peek->isDelimiter([')']))
             ) {
                 break;
             }
@@ -189,16 +170,16 @@ private function parseSimpleSelector(TokenStream $stream, $insideNegation = fals
 
             if ($peek->isHash()) {
                 $result = new Node\HashNode($result, $stream->getNext()->getValue());
-            } elseif ($peek->isDelimiter(array('.'))) {
+            } elseif ($peek->isDelimiter(['.'])) {
                 $stream->getNext();
                 $result = new Node\ClassNode($result, $stream->getNextIdentifier());
-            } elseif ($peek->isDelimiter(array('['))) {
+            } elseif ($peek->isDelimiter(['['])) {
                 $stream->getNext();
                 $result = $this->parseAttributeNode($result, $stream);
-            } elseif ($peek->isDelimiter(array(':'))) {
+            } elseif ($peek->isDelimiter([':'])) {
                 $stream->getNext();
 
-                if ($stream->getPeek()->isDelimiter(array(':'))) {
+                if ($stream->getPeek()->isDelimiter([':'])) {
                     $stream->getNext();
                     $pseudoElement = $stream->getNextIdentifier();
 
@@ -206,7 +187,7 @@ private function parseSimpleSelector(TokenStream $stream, $insideNegation = fals
                 }
 
                 $identifier = $stream->getNextIdentifier();
-                if (\in_array(strtolower($identifier), array('first-line', 'first-letter', 'before', 'after'))) {
+                if (\in_array(strtolower($identifier), ['first-line', 'first-letter', 'before', 'after'])) {
                     // Special case: CSS 2.1 pseudo-elements can have a single ':'.
                     // Any new pseudo-element must have two.
                     $pseudoElement = $identifier;
@@ -214,7 +195,7 @@ private function parseSimpleSelector(TokenStream $stream, $insideNegation = fals
                     continue;
                 }
 
-                if (!$stream->getPeek()->isDelimiter(array('('))) {
+                if (!$stream->getPeek()->isDelimiter(['('])) {
                     $result = new Node\PseudoNode($result, $identifier);
 
                     continue;
@@ -228,20 +209,20 @@ private function parseSimpleSelector(TokenStream $stream, $insideNegation = fals
                         throw SyntaxErrorException::nestedNot();
                     }
 
-                    list($argument, $argumentPseudoElement) = $this->parseSimpleSelector($stream, true);
+                    [$argument, $argumentPseudoElement] = $this->parseSimpleSelector($stream, true);
                     $next = $stream->getNext();
 
                     if (null !== $argumentPseudoElement) {
                         throw SyntaxErrorException::pseudoElementFound($argumentPseudoElement, 'inside ::not()');
                     }
 
-                    if (!$next->isDelimiter(array(')'))) {
+                    if (!$next->isDelimiter([')'])) {
                         throw SyntaxErrorException::unexpectedToken('")"', $next);
                     }
 
                     $result = new Node\NegationNode($result, $argument);
                 } else {
-                    $arguments = array();
+                    $arguments = [];
                     $next = null;
 
                     while (true) {
@@ -251,10 +232,10 @@ private function parseSimpleSelector(TokenStream $stream, $insideNegation = fals
                         if ($next->isIdentifier()
                             || $next->isString()
                             || $next->isNumber()
-                            || $next->isDelimiter(array('+', '-'))
+                            || $next->isDelimiter(['+', '-'])
                         ) {
                             $arguments[] = $next;
-                        } elseif ($next->isDelimiter(array(')'))) {
+                        } elseif ($next->isDelimiter([')'])) {
                             break;
                         } else {
                             throw SyntaxErrorException::unexpectedToken('an argument', $next);
@@ -276,19 +257,14 @@ private function parseSimpleSelector(TokenStream $stream, $insideNegation = fals
             throw SyntaxErrorException::unexpectedToken('selector', $stream->getPeek());
         }
 
-        return array($result, $pseudoElement);
+        return [$result, $pseudoElement];
     }
 
-    /**
-     * Parses next element node.
-     *
-     * @return Node\ElementNode
-     */
-    private function parseElementNode(TokenStream $stream)
+    private function parseElementNode(TokenStream $stream): Node\ElementNode
     {
         $peek = $stream->getPeek();
 
-        if ($peek->isIdentifier() || $peek->isDelimiter(array('*'))) {
+        if ($peek->isIdentifier() || $peek->isDelimiter(['*'])) {
             if ($peek->isIdentifier()) {
                 $namespace = $stream->getNext()->getValue();
             } else {
@@ -296,7 +272,7 @@ private function parseElementNode(TokenStream $stream)
                 $namespace = null;
             }
 
-            if ($stream->getPeek()->isDelimiter(array('|'))) {
+            if ($stream->getPeek()->isDelimiter(['|'])) {
                 $stream->getNext();
                 $element = $stream->getNextIdentifierOrStar();
             } else {
@@ -310,26 +286,19 @@ private function parseElementNode(TokenStream $stream)
         return new Node\ElementNode($namespace, $element);
     }
 
-    /**
-     * Parses next attribute node.
-     *
-     * @return Node\AttributeNode
-     *
-     * @throws SyntaxErrorException
-     */
-    private function parseAttributeNode(Node\NodeInterface $selector, TokenStream $stream)
+    private function parseAttributeNode(Node\NodeInterface $selector, TokenStream $stream): Node\AttributeNode
     {
         $stream->skipWhitespace();
         $attribute = $stream->getNextIdentifierOrStar();
 
-        if (null === $attribute && !$stream->getPeek()->isDelimiter(array('|'))) {
+        if (null === $attribute && !$stream->getPeek()->isDelimiter(['|'])) {
             throw SyntaxErrorException::unexpectedToken('"|"', $stream->getPeek());
         }
 
-        if ($stream->getPeek()->isDelimiter(array('|'))) {
+        if ($stream->getPeek()->isDelimiter(['|'])) {
             $stream->getNext();
 
-            if ($stream->getPeek()->isDelimiter(array('='))) {
+            if ($stream->getPeek()->isDelimiter(['='])) {
                 $namespace = null;
                 $stream->getNext();
                 $operator = '|=';
@@ -346,12 +315,12 @@ private function parseAttributeNode(Node\NodeInterface $selector, TokenStream $s
             $stream->skipWhitespace();
             $next = $stream->getNext();
 
-            if ($next->isDelimiter(array(']'))) {
+            if ($next->isDelimiter([']'])) {
                 return new Node\AttributeNode($selector, $namespace, $attribute, 'exists', null);
-            } elseif ($next->isDelimiter(array('='))) {
+            } elseif ($next->isDelimiter(['='])) {
                 $operator = '=';
-            } elseif ($next->isDelimiter(array('^', '$', '*', '~', '|', '!'))
-                && $stream->getPeek()->isDelimiter(array('='))
+            } elseif ($next->isDelimiter(['^', '$', '*', '~', '|', '!'])
+                && $stream->getPeek()->isDelimiter(['='])
             ) {
                 $operator = $next->getValue().'=';
                 $stream->getNext();
@@ -375,7 +344,7 @@ private function parseAttributeNode(Node\NodeInterface $selector, TokenStream $s
         $stream->skipWhitespace();
         $next = $stream->getNext();
 
-        if (!$next->isDelimiter(array(']'))) {
+        if (!$next->isDelimiter([']'])) {
             throw SyntaxErrorException::unexpectedToken('"]"', $next);
         }
 
diff --git a/vendor/symfony/css-selector/Parser/ParserInterface.php b/vendor/symfony/css-selector/Parser/ParserInterface.php
index c5af20367de8c889060c9eb952c3931311c2bf42..51c3d935069aa1b89c2a152d93b9d9ed247f500f 100644
--- a/vendor/symfony/css-selector/Parser/ParserInterface.php
+++ b/vendor/symfony/css-selector/Parser/ParserInterface.php
@@ -28,9 +28,7 @@ interface ParserInterface
     /**
      * Parses given selector source into an array of tokens.
      *
-     * @param string $source
-     *
      * @return SelectorNode[]
      */
-    public function parse($source);
+    public function parse(string $source): array;
 }
diff --git a/vendor/symfony/css-selector/Parser/Reader.php b/vendor/symfony/css-selector/Parser/Reader.php
index 076cb711c041a559488ad47a2409bd1c6d7dc896..4b43effed366791caf393fe27fcb7c86801be016 100644
--- a/vendor/symfony/css-selector/Parser/Reader.php
+++ b/vendor/symfony/css-selector/Parser/Reader.php
@@ -27,56 +27,33 @@ class Reader
     private $length;
     private $position = 0;
 
-    /**
-     * @param string $source
-     */
-    public function __construct($source)
+    public function __construct(string $source)
     {
         $this->source = $source;
         $this->length = \strlen($source);
     }
 
-    /**
-     * @return bool
-     */
-    public function isEOF()
+    public function isEOF(): bool
     {
         return $this->position >= $this->length;
     }
 
-    /**
-     * @return int
-     */
-    public function getPosition()
+    public function getPosition(): int
     {
         return $this->position;
     }
 
-    /**
-     * @return int
-     */
-    public function getRemainingLength()
+    public function getRemainingLength(): int
     {
         return $this->length - $this->position;
     }
 
-    /**
-     * @param int $length
-     * @param int $offset
-     *
-     * @return string
-     */
-    public function getSubstring($length, $offset = 0)
+    public function getSubstring(int $length, int $offset = 0): string
     {
         return substr($this->source, $this->position + $offset, $length);
     }
 
-    /**
-     * @param string $string
-     *
-     * @return int
-     */
-    public function getOffset($string)
+    public function getOffset(string $string)
     {
         $position = strpos($this->source, $string, $this->position);
 
@@ -84,11 +61,9 @@ public function getOffset($string)
     }
 
     /**
-     * @param string $pattern
-     *
      * @return array|false
      */
-    public function findPattern($pattern)
+    public function findPattern(string $pattern)
     {
         $source = substr($this->source, $this->position);
 
@@ -99,10 +74,7 @@ public function findPattern($pattern)
         return false;
     }
 
-    /**
-     * @param int $length
-     */
-    public function moveForward($length)
+    public function moveForward(int $length)
     {
         $this->position += $length;
     }
diff --git a/vendor/symfony/css-selector/Parser/Shortcut/ClassParser.php b/vendor/symfony/css-selector/Parser/Shortcut/ClassParser.php
index c513de5ff12ee68da5e992656be44a341a1b5b9e..17fa8c27e7fdb3a0954cb1761a9b998c3015eb5a 100644
--- a/vendor/symfony/css-selector/Parser/Shortcut/ClassParser.php
+++ b/vendor/symfony/css-selector/Parser/Shortcut/ClassParser.php
@@ -31,7 +31,7 @@ class ClassParser implements ParserInterface
     /**
      * {@inheritdoc}
      */
-    public function parse($source)
+    public function parse(string $source): array
     {
         // Matches an optional namespace, optional element, and required class
         // $source = 'test|input.ab6bd_field';
@@ -41,11 +41,11 @@ public function parse($source)
         //     2 => string 'input' (length=5)
         //     3 => string 'ab6bd_field' (length=11)
         if (preg_match('/^(?:([a-z]++)\|)?+([\w-]++|\*)?+\.([\w-]++)$/i', trim($source), $matches)) {
-            return array(
+            return [
                 new SelectorNode(new ClassNode(new ElementNode($matches[1] ?: null, $matches[2] ?: null), $matches[3])),
-            );
+            ];
         }
 
-        return array();
+        return [];
     }
 }
diff --git a/vendor/symfony/css-selector/Parser/Shortcut/ElementParser.php b/vendor/symfony/css-selector/Parser/Shortcut/ElementParser.php
index c29f5e442e739960d88c0757bf1131c18cf8596c..8b9a8638696fddde84e942a2fc259dc74b4265c0 100644
--- a/vendor/symfony/css-selector/Parser/Shortcut/ElementParser.php
+++ b/vendor/symfony/css-selector/Parser/Shortcut/ElementParser.php
@@ -30,7 +30,7 @@ class ElementParser implements ParserInterface
     /**
      * {@inheritdoc}
      */
-    public function parse($source)
+    public function parse(string $source): array
     {
         // Matches an optional namespace, required element or `*`
         // $source = 'testns|testel';
@@ -39,9 +39,9 @@ public function parse($source)
         //     1 => string 'testns' (length=6)
         //     2 => string 'testel' (length=6)
         if (preg_match('/^(?:([a-z]++)\|)?([\w-]++|\*)$/i', trim($source), $matches)) {
-            return array(new SelectorNode(new ElementNode($matches[1] ?: null, $matches[2])));
+            return [new SelectorNode(new ElementNode($matches[1] ?: null, $matches[2]))];
         }
 
-        return array();
+        return [];
     }
 }
diff --git a/vendor/symfony/css-selector/Parser/Shortcut/EmptyStringParser.php b/vendor/symfony/css-selector/Parser/Shortcut/EmptyStringParser.php
index 16d374af30ccc8b5c2d8396239eb8a6cea068602..222df5cd29dad735723c6c597a1a51d8c3f02629 100644
--- a/vendor/symfony/css-selector/Parser/Shortcut/EmptyStringParser.php
+++ b/vendor/symfony/css-selector/Parser/Shortcut/EmptyStringParser.php
@@ -34,13 +34,13 @@ class EmptyStringParser implements ParserInterface
     /**
      * {@inheritdoc}
      */
-    public function parse($source)
+    public function parse(string $source): array
     {
         // Matches an empty string
         if ('' == $source) {
-            return array(new SelectorNode(new ElementNode(null, '*')));
+            return [new SelectorNode(new ElementNode(null, '*'))];
         }
 
-        return array();
+        return [];
     }
 }
diff --git a/vendor/symfony/css-selector/Parser/Shortcut/HashParser.php b/vendor/symfony/css-selector/Parser/Shortcut/HashParser.php
index 3f3883bb8d2e91af8cbc3a5a79dfb387dc1d2259..fb07ee6cf86ffd4e87ab9d63837869ea23ca33cf 100644
--- a/vendor/symfony/css-selector/Parser/Shortcut/HashParser.php
+++ b/vendor/symfony/css-selector/Parser/Shortcut/HashParser.php
@@ -31,7 +31,7 @@ class HashParser implements ParserInterface
     /**
      * {@inheritdoc}
      */
-    public function parse($source)
+    public function parse(string $source): array
     {
         // Matches an optional namespace, optional element, and required id
         // $source = 'test|input#ab6bd_field';
@@ -41,11 +41,11 @@ public function parse($source)
         //     2 => string 'input' (length=5)
         //     3 => string 'ab6bd_field' (length=11)
         if (preg_match('/^(?:([a-z]++)\|)?+([\w-]++|\*)?+#([\w-]++)$/i', trim($source), $matches)) {
-            return array(
+            return [
                 new SelectorNode(new HashNode(new ElementNode($matches[1] ?: null, $matches[2] ?: null), $matches[3])),
-            );
+            ];
         }
 
-        return array();
+        return [];
     }
 }
diff --git a/vendor/symfony/css-selector/Parser/Token.php b/vendor/symfony/css-selector/Parser/Token.php
index 72baae776dab37072c8bd12a7222093bdeea470b..9a324854b255475a4a32e5eb40ec8f941a98ccaa 100644
--- a/vendor/symfony/css-selector/Parser/Token.php
+++ b/vendor/symfony/css-selector/Parser/Token.php
@@ -35,54 +35,34 @@ class Token
     private $value;
     private $position;
 
-    /**
-     * @param int    $type
-     * @param string $value
-     * @param int    $position
-     */
-    public function __construct($type, $value, $position)
+    public function __construct(?string $type, ?string $value, ?int $position)
     {
         $this->type = $type;
         $this->value = $value;
         $this->position = $position;
     }
 
-    /**
-     * @return int
-     */
-    public function getType()
+    public function getType(): ?int
     {
         return $this->type;
     }
 
-    /**
-     * @return string
-     */
-    public function getValue()
+    public function getValue(): ?string
     {
         return $this->value;
     }
 
-    /**
-     * @return int
-     */
-    public function getPosition()
+    public function getPosition(): ?int
     {
         return $this->position;
     }
 
-    /**
-     * @return bool
-     */
-    public function isFileEnd()
+    public function isFileEnd(): bool
     {
         return self::TYPE_FILE_END === $this->type;
     }
 
-    /**
-     * @return bool
-     */
-    public function isDelimiter(array $values = array())
+    public function isDelimiter(array $values = []): bool
     {
         if (self::TYPE_DELIMITER !== $this->type) {
             return false;
@@ -95,50 +75,32 @@ public function isDelimiter(array $values = array())
         return \in_array($this->value, $values);
     }
 
-    /**
-     * @return bool
-     */
-    public function isWhitespace()
+    public function isWhitespace(): bool
     {
         return self::TYPE_WHITESPACE === $this->type;
     }
 
-    /**
-     * @return bool
-     */
-    public function isIdentifier()
+    public function isIdentifier(): bool
     {
         return self::TYPE_IDENTIFIER === $this->type;
     }
 
-    /**
-     * @return bool
-     */
-    public function isHash()
+    public function isHash(): bool
     {
         return self::TYPE_HASH === $this->type;
     }
 
-    /**
-     * @return bool
-     */
-    public function isNumber()
+    public function isNumber(): bool
     {
         return self::TYPE_NUMBER === $this->type;
     }
 
-    /**
-     * @return bool
-     */
-    public function isString()
+    public function isString(): bool
     {
         return self::TYPE_STRING === $this->type;
     }
 
-    /**
-     * @return string
-     */
-    public function __toString()
+    public function __toString(): string
     {
         if ($this->value) {
             return sprintf('<%s "%s" at %s>', $this->type, $this->value, $this->position);
diff --git a/vendor/symfony/css-selector/Parser/TokenStream.php b/vendor/symfony/css-selector/Parser/TokenStream.php
index 24e8634ad6b86299ec673a206782534e7ab977fc..f4c2585aa03b2535aafd1e51704a0f545c46cf9c 100644
--- a/vendor/symfony/css-selector/Parser/TokenStream.php
+++ b/vendor/symfony/css-selector/Parser/TokenStream.php
@@ -29,12 +29,12 @@ class TokenStream
     /**
      * @var Token[]
      */
-    private $tokens = array();
+    private $tokens = [];
 
     /**
      * @var Token[]
      */
-    private $used = array();
+    private $used = [];
 
     /**
      * @var int
@@ -56,7 +56,7 @@ class TokenStream
      *
      * @return $this
      */
-    public function push(Token $token)
+    public function push(Token $token): self
     {
         $this->tokens[] = $token;
 
@@ -68,7 +68,7 @@ public function push(Token $token)
      *
      * @return $this
      */
-    public function freeze()
+    public function freeze(): self
     {
         return $this;
     }
@@ -76,11 +76,9 @@ public function freeze()
     /**
      * Returns next token.
      *
-     * @return Token
-     *
      * @throws InternalErrorException If there is no more token
      */
-    public function getNext()
+    public function getNext(): Token
     {
         if ($this->peeking) {
             $this->peeking = false;
@@ -98,10 +96,8 @@ public function getNext()
 
     /**
      * Returns peeked token.
-     *
-     * @return Token
      */
-    public function getPeek()
+    public function getPeek(): Token
     {
         if (!$this->peeking) {
             $this->peeked = $this->getNext();
@@ -116,7 +112,7 @@ public function getPeek()
      *
      * @return Token[]
      */
-    public function getUsed()
+    public function getUsed(): array
     {
         return $this->used;
     }
@@ -128,7 +124,7 @@ public function getUsed()
      *
      * @throws SyntaxErrorException If next token is not an identifier
      */
-    public function getNextIdentifier()
+    public function getNextIdentifier(): string
     {
         $next = $this->getNext();
 
@@ -142,11 +138,11 @@ public function getNextIdentifier()
     /**
      * Returns nex identifier or star delimiter token.
      *
-     * @return null|string The identifier token value or null if star found
+     * @return string|null The identifier token value or null if star found
      *
      * @throws SyntaxErrorException If next token is not an identifier or a star delimiter
      */
-    public function getNextIdentifierOrStar()
+    public function getNextIdentifierOrStar(): ?string
     {
         $next = $this->getNext();
 
@@ -154,8 +150,8 @@ public function getNextIdentifierOrStar()
             return $next->getValue();
         }
 
-        if ($next->isDelimiter(array('*'))) {
-            return;
+        if ($next->isDelimiter(['*'])) {
+            return null;
         }
 
         throw SyntaxErrorException::unexpectedToken('identifier or "*"', $next);
diff --git a/vendor/symfony/css-selector/Parser/Tokenizer/Tokenizer.php b/vendor/symfony/css-selector/Parser/Tokenizer/Tokenizer.php
index e32b4d20ce9f880d7b348b09406d221df51aece5..e0dcc5bf14219001ffb7e2dc69afe2765c56bc29 100644
--- a/vendor/symfony/css-selector/Parser/Tokenizer/Tokenizer.php
+++ b/vendor/symfony/css-selector/Parser/Tokenizer/Tokenizer.php
@@ -38,22 +38,20 @@ public function __construct()
         $patterns = new TokenizerPatterns();
         $escaping = new TokenizerEscaping($patterns);
 
-        $this->handlers = array(
+        $this->handlers = [
             new Handler\WhitespaceHandler(),
             new Handler\IdentifierHandler($patterns, $escaping),
             new Handler\HashHandler($patterns, $escaping),
             new Handler\StringHandler($patterns, $escaping),
             new Handler\NumberHandler($patterns),
             new Handler\CommentHandler(),
-        );
+        ];
     }
 
     /**
      * Tokenize selector source code.
-     *
-     * @return TokenStream
      */
-    public function tokenize(Reader $reader)
+    public function tokenize(Reader $reader): TokenStream
     {
         $stream = new TokenStream();
 
diff --git a/vendor/symfony/css-selector/Parser/Tokenizer/TokenizerEscaping.php b/vendor/symfony/css-selector/Parser/Tokenizer/TokenizerEscaping.php
index 55ea42149329e518ab0137a928491a3765310cb2..013e827d2b999698dcea0149cf63aed0c8b6a0fc 100644
--- a/vendor/symfony/css-selector/Parser/Tokenizer/TokenizerEscaping.php
+++ b/vendor/symfony/css-selector/Parser/Tokenizer/TokenizerEscaping.php
@@ -30,36 +30,21 @@ public function __construct(TokenizerPatterns $patterns)
         $this->patterns = $patterns;
     }
 
-    /**
-     * @param string $value
-     *
-     * @return string
-     */
-    public function escapeUnicode($value)
+    public function escapeUnicode(string $value): string
     {
         $value = $this->replaceUnicodeSequences($value);
 
         return preg_replace($this->patterns->getSimpleEscapePattern(), '$1', $value);
     }
 
-    /**
-     * @param string $value
-     *
-     * @return string
-     */
-    public function escapeUnicodeAndNewLine($value)
+    public function escapeUnicodeAndNewLine(string $value): string
     {
         $value = preg_replace($this->patterns->getNewLineEscapePattern(), '', $value);
 
         return $this->escapeUnicode($value);
     }
 
-    /**
-     * @param string $value
-     *
-     * @return string
-     */
-    private function replaceUnicodeSequences($value)
+    private function replaceUnicodeSequences(string $value): string
     {
         return preg_replace_callback($this->patterns->getUnicodeEscapePattern(), function ($match) {
             $c = hexdec($match[1]);
@@ -73,6 +58,8 @@ private function replaceUnicodeSequences($value)
             if (0x10000 > $c) {
                 return \chr(0xE0 | $c >> 12).\chr(0x80 | $c >> 6 & 0x3F).\chr(0x80 | $c & 0x3F);
             }
+
+            return '';
         }, $value);
     }
 }
diff --git a/vendor/symfony/css-selector/Parser/Tokenizer/TokenizerPatterns.php b/vendor/symfony/css-selector/Parser/Tokenizer/TokenizerPatterns.php
index bc6130d7d3002c00863a8a9e8ff1eef0418eee47..5f16ac48f8aa512ee7ea841578156ac19516828b 100644
--- a/vendor/symfony/css-selector/Parser/Tokenizer/TokenizerPatterns.php
+++ b/vendor/symfony/css-selector/Parser/Tokenizer/TokenizerPatterns.php
@@ -52,60 +52,37 @@ public function __construct()
         $this->quotedStringPattern = '([^\n\r\f%s]|'.$this->stringEscapePattern.')*';
     }
 
-    /**
-     * @return string
-     */
-    public function getNewLineEscapePattern()
+    public function getNewLineEscapePattern(): string
     {
         return '~^'.$this->newLineEscapePattern.'~';
     }
 
-    /**
-     * @return string
-     */
-    public function getSimpleEscapePattern()
+    public function getSimpleEscapePattern(): string
     {
         return '~^'.$this->simpleEscapePattern.'~';
     }
 
-    /**
-     * @return string
-     */
-    public function getUnicodeEscapePattern()
+    public function getUnicodeEscapePattern(): string
     {
         return '~^'.$this->unicodeEscapePattern.'~i';
     }
 
-    /**
-     * @return string
-     */
-    public function getIdentifierPattern()
+    public function getIdentifierPattern(): string
     {
         return '~^'.$this->identifierPattern.'~i';
     }
 
-    /**
-     * @return string
-     */
-    public function getHashPattern()
+    public function getHashPattern(): string
     {
         return '~^'.$this->hashPattern.'~i';
     }
 
-    /**
-     * @return string
-     */
-    public function getNumberPattern()
+    public function getNumberPattern(): string
     {
         return '~^'.$this->numberPattern.'~';
     }
 
-    /**
-     * @param string $quote
-     *
-     * @return string
-     */
-    public function getQuotedStringPattern($quote)
+    public function getQuotedStringPattern(string $quote): string
     {
         return '~^'.sprintf($this->quotedStringPattern, $quote).'~i';
     }
diff --git a/vendor/symfony/css-selector/Tests/CssSelectorConverterTest.php b/vendor/symfony/css-selector/Tests/CssSelectorConverterTest.php
deleted file mode 100644
index a3eea7ad2186965283894054ba8cb9c1b1eefb72..0000000000000000000000000000000000000000
--- a/vendor/symfony/css-selector/Tests/CssSelectorConverterTest.php
+++ /dev/null
@@ -1,76 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\CssSelector\Tests;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\CssSelector\CssSelectorConverter;
-
-class CssSelectorConverterTest extends TestCase
-{
-    public function testCssToXPath()
-    {
-        $converter = new CssSelectorConverter();
-
-        $this->assertEquals('descendant-or-self::*', $converter->toXPath(''));
-        $this->assertEquals('descendant-or-self::h1', $converter->toXPath('h1'));
-        $this->assertEquals("descendant-or-self::h1[@id = 'foo']", $converter->toXPath('h1#foo'));
-        $this->assertEquals("descendant-or-self::h1[@class and contains(concat(' ', normalize-space(@class), ' '), ' foo ')]", $converter->toXPath('h1.foo'));
-        $this->assertEquals('descendant-or-self::foo:h1', $converter->toXPath('foo|h1'));
-        $this->assertEquals('descendant-or-self::h1', $converter->toXPath('H1'));
-    }
-
-    public function testCssToXPathXml()
-    {
-        $converter = new CssSelectorConverter(false);
-
-        $this->assertEquals('descendant-or-self::H1', $converter->toXPath('H1'));
-    }
-
-    /**
-     * @expectedException \Symfony\Component\CssSelector\Exception\ParseException
-     * @expectedExceptionMessage Expected identifier, but <eof at 3> found.
-     */
-    public function testParseExceptions()
-    {
-        $converter = new CssSelectorConverter();
-        $converter->toXPath('h1:');
-    }
-
-    /** @dataProvider getCssToXPathWithoutPrefixTestData */
-    public function testCssToXPathWithoutPrefix($css, $xpath)
-    {
-        $converter = new CssSelectorConverter();
-
-        $this->assertEquals($xpath, $converter->toXPath($css, ''), '->parse() parses an input string and returns a node');
-    }
-
-    public function getCssToXPathWithoutPrefixTestData()
-    {
-        return array(
-            array('h1', 'h1'),
-            array('foo|h1', 'foo:h1'),
-            array('h1, h2, h3', 'h1 | h2 | h3'),
-            array('h1:nth-child(3n+1)', "*/*[(name() = 'h1') and (position() - 1 >= 0 and (position() - 1) mod 3 = 0)]"),
-            array('h1 > p', 'h1/p'),
-            array('h1#foo', "h1[@id = 'foo']"),
-            array('h1.foo', "h1[@class and contains(concat(' ', normalize-space(@class), ' '), ' foo ')]"),
-            array('h1[class*="foo bar"]', "h1[@class and contains(@class, 'foo bar')]"),
-            array('h1[foo|class*="foo bar"]', "h1[@foo:class and contains(@foo:class, 'foo bar')]"),
-            array('h1[class]', 'h1[@class]'),
-            array('h1 .foo', "h1/descendant-or-self::*/*[@class and contains(concat(' ', normalize-space(@class), ' '), ' foo ')]"),
-            array('h1 #foo', "h1/descendant-or-self::*/*[@id = 'foo']"),
-            array('h1 [class*=foo]', "h1/descendant-or-self::*/*[@class and contains(@class, 'foo')]"),
-            array('div>.foo', "div/*[@class and contains(concat(' ', normalize-space(@class), ' '), ' foo ')]"),
-            array('div > .foo', "div/*[@class and contains(concat(' ', normalize-space(@class), ' '), ' foo ')]"),
-        );
-    }
-}
diff --git a/vendor/symfony/css-selector/Tests/Node/AbstractNodeTest.php b/vendor/symfony/css-selector/Tests/Node/AbstractNodeTest.php
deleted file mode 100644
index 595551338061ee95d367694b85cd11f0e78ad90c..0000000000000000000000000000000000000000
--- a/vendor/symfony/css-selector/Tests/Node/AbstractNodeTest.php
+++ /dev/null
@@ -1,34 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\CssSelector\Tests\Node;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\CssSelector\Node\NodeInterface;
-
-abstract class AbstractNodeTest extends TestCase
-{
-    /** @dataProvider getToStringConversionTestData */
-    public function testToStringConversion(NodeInterface $node, $representation)
-    {
-        $this->assertEquals($representation, (string) $node);
-    }
-
-    /** @dataProvider getSpecificityValueTestData */
-    public function testSpecificityValue(NodeInterface $node, $value)
-    {
-        $this->assertEquals($value, $node->getSpecificity()->getValue());
-    }
-
-    abstract public function getToStringConversionTestData();
-
-    abstract public function getSpecificityValueTestData();
-}
diff --git a/vendor/symfony/css-selector/Tests/Node/AttributeNodeTest.php b/vendor/symfony/css-selector/Tests/Node/AttributeNodeTest.php
deleted file mode 100644
index 1fd090f5a6e8c1f1109282f65d85f24f28f29289..0000000000000000000000000000000000000000
--- a/vendor/symfony/css-selector/Tests/Node/AttributeNodeTest.php
+++ /dev/null
@@ -1,37 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\CssSelector\Tests\Node;
-
-use Symfony\Component\CssSelector\Node\AttributeNode;
-use Symfony\Component\CssSelector\Node\ElementNode;
-
-class AttributeNodeTest extends AbstractNodeTest
-{
-    public function getToStringConversionTestData()
-    {
-        return array(
-            array(new AttributeNode(new ElementNode(), null, 'attribute', 'exists', null), 'Attribute[Element[*][attribute]]'),
-            array(new AttributeNode(new ElementNode(), null, 'attribute', '$=', 'value'), "Attribute[Element[*][attribute $= 'value']]"),
-            array(new AttributeNode(new ElementNode(), 'namespace', 'attribute', '$=', 'value'), "Attribute[Element[*][namespace|attribute $= 'value']]"),
-        );
-    }
-
-    public function getSpecificityValueTestData()
-    {
-        return array(
-            array(new AttributeNode(new ElementNode(), null, 'attribute', 'exists', null), 10),
-            array(new AttributeNode(new ElementNode(null, 'element'), null, 'attribute', 'exists', null), 11),
-            array(new AttributeNode(new ElementNode(), null, 'attribute', '$=', 'value'), 10),
-            array(new AttributeNode(new ElementNode(), 'namespace', 'attribute', '$=', 'value'), 10),
-        );
-    }
-}
diff --git a/vendor/symfony/css-selector/Tests/Node/ClassNodeTest.php b/vendor/symfony/css-selector/Tests/Node/ClassNodeTest.php
deleted file mode 100644
index e0ab45accc31de8f51013ab80e37f239d16657fd..0000000000000000000000000000000000000000
--- a/vendor/symfony/css-selector/Tests/Node/ClassNodeTest.php
+++ /dev/null
@@ -1,33 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\CssSelector\Tests\Node;
-
-use Symfony\Component\CssSelector\Node\ClassNode;
-use Symfony\Component\CssSelector\Node\ElementNode;
-
-class ClassNodeTest extends AbstractNodeTest
-{
-    public function getToStringConversionTestData()
-    {
-        return array(
-            array(new ClassNode(new ElementNode(), 'class'), 'Class[Element[*].class]'),
-        );
-    }
-
-    public function getSpecificityValueTestData()
-    {
-        return array(
-            array(new ClassNode(new ElementNode(), 'class'), 10),
-            array(new ClassNode(new ElementNode(null, 'element'), 'class'), 11),
-        );
-    }
-}
diff --git a/vendor/symfony/css-selector/Tests/Node/CombinedSelectorNodeTest.php b/vendor/symfony/css-selector/Tests/Node/CombinedSelectorNodeTest.php
deleted file mode 100644
index 9547298a6fdf3faee1450dee4539d80f049b5cd5..0000000000000000000000000000000000000000
--- a/vendor/symfony/css-selector/Tests/Node/CombinedSelectorNodeTest.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\CssSelector\Tests\Node;
-
-use Symfony\Component\CssSelector\Node\CombinedSelectorNode;
-use Symfony\Component\CssSelector\Node\ElementNode;
-
-class CombinedSelectorNodeTest extends AbstractNodeTest
-{
-    public function getToStringConversionTestData()
-    {
-        return array(
-            array(new CombinedSelectorNode(new ElementNode(), '>', new ElementNode()), 'CombinedSelector[Element[*] > Element[*]]'),
-            array(new CombinedSelectorNode(new ElementNode(), ' ', new ElementNode()), 'CombinedSelector[Element[*] <followed> Element[*]]'),
-        );
-    }
-
-    public function getSpecificityValueTestData()
-    {
-        return array(
-            array(new CombinedSelectorNode(new ElementNode(), '>', new ElementNode()), 0),
-            array(new CombinedSelectorNode(new ElementNode(null, 'element'), '>', new ElementNode()), 1),
-            array(new CombinedSelectorNode(new ElementNode(null, 'element'), '>', new ElementNode(null, 'element')), 2),
-        );
-    }
-}
diff --git a/vendor/symfony/css-selector/Tests/Node/ElementNodeTest.php b/vendor/symfony/css-selector/Tests/Node/ElementNodeTest.php
deleted file mode 100644
index 6d24789320561905a29555d7ea307f1b7d1ac29c..0000000000000000000000000000000000000000
--- a/vendor/symfony/css-selector/Tests/Node/ElementNodeTest.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\CssSelector\Tests\Node;
-
-use Symfony\Component\CssSelector\Node\ElementNode;
-
-class ElementNodeTest extends AbstractNodeTest
-{
-    public function getToStringConversionTestData()
-    {
-        return array(
-            array(new ElementNode(), 'Element[*]'),
-            array(new ElementNode(null, 'element'), 'Element[element]'),
-            array(new ElementNode('namespace', 'element'), 'Element[namespace|element]'),
-        );
-    }
-
-    public function getSpecificityValueTestData()
-    {
-        return array(
-            array(new ElementNode(), 0),
-            array(new ElementNode(null, 'element'), 1),
-            array(new ElementNode('namespace', 'element'), 1),
-        );
-    }
-}
diff --git a/vendor/symfony/css-selector/Tests/Node/FunctionNodeTest.php b/vendor/symfony/css-selector/Tests/Node/FunctionNodeTest.php
deleted file mode 100644
index ee3ce51ba549954ecf473d313fa96638e8ab98fd..0000000000000000000000000000000000000000
--- a/vendor/symfony/css-selector/Tests/Node/FunctionNodeTest.php
+++ /dev/null
@@ -1,47 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\CssSelector\Tests\Node;
-
-use Symfony\Component\CssSelector\Node\ElementNode;
-use Symfony\Component\CssSelector\Node\FunctionNode;
-use Symfony\Component\CssSelector\Parser\Token;
-
-class FunctionNodeTest extends AbstractNodeTest
-{
-    public function getToStringConversionTestData()
-    {
-        return array(
-            array(new FunctionNode(new ElementNode(), 'function'), 'Function[Element[*]:function()]'),
-            array(new FunctionNode(new ElementNode(), 'function', array(
-                new Token(Token::TYPE_IDENTIFIER, 'value', 0),
-            )), "Function[Element[*]:function(['value'])]"),
-            array(new FunctionNode(new ElementNode(), 'function', array(
-                new Token(Token::TYPE_STRING, 'value1', 0),
-                new Token(Token::TYPE_NUMBER, 'value2', 0),
-            )), "Function[Element[*]:function(['value1', 'value2'])]"),
-        );
-    }
-
-    public function getSpecificityValueTestData()
-    {
-        return array(
-            array(new FunctionNode(new ElementNode(), 'function'), 10),
-            array(new FunctionNode(new ElementNode(), 'function', array(
-                new Token(Token::TYPE_IDENTIFIER, 'value', 0),
-            )), 10),
-            array(new FunctionNode(new ElementNode(), 'function', array(
-                new Token(Token::TYPE_STRING, 'value1', 0),
-                new Token(Token::TYPE_NUMBER, 'value2', 0),
-            )), 10),
-        );
-    }
-}
diff --git a/vendor/symfony/css-selector/Tests/Node/HashNodeTest.php b/vendor/symfony/css-selector/Tests/Node/HashNodeTest.php
deleted file mode 100644
index 3bc74da9459c360dc3293ac3f51ae7c44abe1f62..0000000000000000000000000000000000000000
--- a/vendor/symfony/css-selector/Tests/Node/HashNodeTest.php
+++ /dev/null
@@ -1,33 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\CssSelector\Tests\Node;
-
-use Symfony\Component\CssSelector\Node\ElementNode;
-use Symfony\Component\CssSelector\Node\HashNode;
-
-class HashNodeTest extends AbstractNodeTest
-{
-    public function getToStringConversionTestData()
-    {
-        return array(
-            array(new HashNode(new ElementNode(), 'id'), 'Hash[Element[*]#id]'),
-        );
-    }
-
-    public function getSpecificityValueTestData()
-    {
-        return array(
-            array(new HashNode(new ElementNode(), 'id'), 100),
-            array(new HashNode(new ElementNode(null, 'id'), 'class'), 101),
-        );
-    }
-}
diff --git a/vendor/symfony/css-selector/Tests/Node/NegationNodeTest.php b/vendor/symfony/css-selector/Tests/Node/NegationNodeTest.php
deleted file mode 100644
index ed4d2482c391e63b5619f536ecc52465288ae2bf..0000000000000000000000000000000000000000
--- a/vendor/symfony/css-selector/Tests/Node/NegationNodeTest.php
+++ /dev/null
@@ -1,33 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\CssSelector\Tests\Node;
-
-use Symfony\Component\CssSelector\Node\ClassNode;
-use Symfony\Component\CssSelector\Node\ElementNode;
-use Symfony\Component\CssSelector\Node\NegationNode;
-
-class NegationNodeTest extends AbstractNodeTest
-{
-    public function getToStringConversionTestData()
-    {
-        return array(
-            array(new NegationNode(new ElementNode(), new ClassNode(new ElementNode(), 'class')), 'Negation[Element[*]:not(Class[Element[*].class])]'),
-        );
-    }
-
-    public function getSpecificityValueTestData()
-    {
-        return array(
-            array(new NegationNode(new ElementNode(), new ClassNode(new ElementNode(), 'class')), 10),
-        );
-    }
-}
diff --git a/vendor/symfony/css-selector/Tests/Node/PseudoNodeTest.php b/vendor/symfony/css-selector/Tests/Node/PseudoNodeTest.php
deleted file mode 100644
index bc57813cc8fe16300834a2ab1e5c100d6e2870ae..0000000000000000000000000000000000000000
--- a/vendor/symfony/css-selector/Tests/Node/PseudoNodeTest.php
+++ /dev/null
@@ -1,32 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\CssSelector\Tests\Node;
-
-use Symfony\Component\CssSelector\Node\ElementNode;
-use Symfony\Component\CssSelector\Node\PseudoNode;
-
-class PseudoNodeTest extends AbstractNodeTest
-{
-    public function getToStringConversionTestData()
-    {
-        return array(
-            array(new PseudoNode(new ElementNode(), 'pseudo'), 'Pseudo[Element[*]:pseudo]'),
-        );
-    }
-
-    public function getSpecificityValueTestData()
-    {
-        return array(
-            array(new PseudoNode(new ElementNode(), 'pseudo'), 10),
-        );
-    }
-}
diff --git a/vendor/symfony/css-selector/Tests/Node/SelectorNodeTest.php b/vendor/symfony/css-selector/Tests/Node/SelectorNodeTest.php
deleted file mode 100644
index 5badf71d16d1bb9f92714e24414f91ca541607e3..0000000000000000000000000000000000000000
--- a/vendor/symfony/css-selector/Tests/Node/SelectorNodeTest.php
+++ /dev/null
@@ -1,34 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\CssSelector\Tests\Node;
-
-use Symfony\Component\CssSelector\Node\ElementNode;
-use Symfony\Component\CssSelector\Node\SelectorNode;
-
-class SelectorNodeTest extends AbstractNodeTest
-{
-    public function getToStringConversionTestData()
-    {
-        return array(
-            array(new SelectorNode(new ElementNode()), 'Selector[Element[*]]'),
-            array(new SelectorNode(new ElementNode(), 'pseudo'), 'Selector[Element[*]::pseudo]'),
-        );
-    }
-
-    public function getSpecificityValueTestData()
-    {
-        return array(
-            array(new SelectorNode(new ElementNode()), 0),
-            array(new SelectorNode(new ElementNode(), 'pseudo'), 1),
-        );
-    }
-}
diff --git a/vendor/symfony/css-selector/Tests/Node/SpecificityTest.php b/vendor/symfony/css-selector/Tests/Node/SpecificityTest.php
deleted file mode 100644
index b58eb8929c85e4c562938659b877133eed004281..0000000000000000000000000000000000000000
--- a/vendor/symfony/css-selector/Tests/Node/SpecificityTest.php
+++ /dev/null
@@ -1,63 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\CssSelector\Tests\Node;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\CssSelector\Node\Specificity;
-
-class SpecificityTest extends TestCase
-{
-    /** @dataProvider getValueTestData */
-    public function testValue(Specificity $specificity, $value)
-    {
-        $this->assertEquals($value, $specificity->getValue());
-    }
-
-    /** @dataProvider getValueTestData */
-    public function testPlusValue(Specificity $specificity, $value)
-    {
-        $this->assertEquals($value + 123, $specificity->plus(new Specificity(1, 2, 3))->getValue());
-    }
-
-    public function getValueTestData()
-    {
-        return array(
-            array(new Specificity(0, 0, 0), 0),
-            array(new Specificity(0, 0, 2), 2),
-            array(new Specificity(0, 3, 0), 30),
-            array(new Specificity(4, 0, 0), 400),
-            array(new Specificity(4, 3, 2), 432),
-        );
-    }
-
-    /** @dataProvider getCompareTestData */
-    public function testCompareTo(Specificity $a, Specificity $b, $result)
-    {
-        $this->assertEquals($result, $a->compareTo($b));
-    }
-
-    public function getCompareTestData()
-    {
-        return array(
-            array(new Specificity(0, 0, 0), new Specificity(0, 0, 0), 0),
-            array(new Specificity(0, 0, 1), new Specificity(0, 0, 1), 0),
-            array(new Specificity(0, 0, 2), new Specificity(0, 0, 1), 1),
-            array(new Specificity(0, 0, 2), new Specificity(0, 0, 3), -1),
-            array(new Specificity(0, 4, 0), new Specificity(0, 4, 0), 0),
-            array(new Specificity(0, 6, 0), new Specificity(0, 5, 11), 1),
-            array(new Specificity(0, 7, 0), new Specificity(0, 8, 0), -1),
-            array(new Specificity(9, 0, 0), new Specificity(9, 0, 0), 0),
-            array(new Specificity(11, 0, 0), new Specificity(10, 11, 0), 1),
-            array(new Specificity(12, 11, 0), new Specificity(13, 0, 0), -1),
-        );
-    }
-}
diff --git a/vendor/symfony/css-selector/Tests/Parser/Handler/AbstractHandlerTest.php b/vendor/symfony/css-selector/Tests/Parser/Handler/AbstractHandlerTest.php
deleted file mode 100644
index f5c9dc8bfecb75130e9844697557b1b6c2773b0a..0000000000000000000000000000000000000000
--- a/vendor/symfony/css-selector/Tests/Parser/Handler/AbstractHandlerTest.php
+++ /dev/null
@@ -1,70 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\CssSelector\Tests\Parser\Handler;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\CssSelector\Parser\Reader;
-use Symfony\Component\CssSelector\Parser\Token;
-use Symfony\Component\CssSelector\Parser\TokenStream;
-
-/**
- * @author Jean-François Simon <contact@jfsimon.fr>
- */
-abstract class AbstractHandlerTest extends TestCase
-{
-    /** @dataProvider getHandleValueTestData */
-    public function testHandleValue($value, Token $expectedToken, $remainingContent)
-    {
-        $reader = new Reader($value);
-        $stream = new TokenStream();
-
-        $this->assertTrue($this->generateHandler()->handle($reader, $stream));
-        $this->assertEquals($expectedToken, $stream->getNext());
-        $this->assertRemainingContent($reader, $remainingContent);
-    }
-
-    /** @dataProvider getDontHandleValueTestData */
-    public function testDontHandleValue($value)
-    {
-        $reader = new Reader($value);
-        $stream = new TokenStream();
-
-        $this->assertFalse($this->generateHandler()->handle($reader, $stream));
-        $this->assertStreamEmpty($stream);
-        $this->assertRemainingContent($reader, $value);
-    }
-
-    abstract public function getHandleValueTestData();
-
-    abstract public function getDontHandleValueTestData();
-
-    abstract protected function generateHandler();
-
-    protected function assertStreamEmpty(TokenStream $stream)
-    {
-        $property = new \ReflectionProperty($stream, 'tokens');
-        $property->setAccessible(true);
-
-        $this->assertEquals(array(), $property->getValue($stream));
-    }
-
-    protected function assertRemainingContent(Reader $reader, $remainingContent)
-    {
-        if ('' === $remainingContent) {
-            $this->assertEquals(0, $reader->getRemainingLength());
-            $this->assertTrue($reader->isEOF());
-        } else {
-            $this->assertEquals(\strlen($remainingContent), $reader->getRemainingLength());
-            $this->assertEquals(0, $reader->getOffset($remainingContent));
-        }
-    }
-}
diff --git a/vendor/symfony/css-selector/Tests/Parser/Handler/CommentHandlerTest.php b/vendor/symfony/css-selector/Tests/Parser/Handler/CommentHandlerTest.php
deleted file mode 100644
index 3961bf7d55ad9ee48d6356cd3ea02a34ff9c6eca..0000000000000000000000000000000000000000
--- a/vendor/symfony/css-selector/Tests/Parser/Handler/CommentHandlerTest.php
+++ /dev/null
@@ -1,55 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\CssSelector\Tests\Parser\Handler;
-
-use Symfony\Component\CssSelector\Parser\Handler\CommentHandler;
-use Symfony\Component\CssSelector\Parser\Reader;
-use Symfony\Component\CssSelector\Parser\Token;
-use Symfony\Component\CssSelector\Parser\TokenStream;
-
-class CommentHandlerTest extends AbstractHandlerTest
-{
-    /** @dataProvider getHandleValueTestData */
-    public function testHandleValue($value, Token $unusedArgument, $remainingContent)
-    {
-        $reader = new Reader($value);
-        $stream = new TokenStream();
-
-        $this->assertTrue($this->generateHandler()->handle($reader, $stream));
-        // comments are ignored (not pushed as token in stream)
-        $this->assertStreamEmpty($stream);
-        $this->assertRemainingContent($reader, $remainingContent);
-    }
-
-    public function getHandleValueTestData()
-    {
-        return array(
-            // 2nd argument only exists for inherited method compatibility
-            array('/* comment */', new Token(null, null, null), ''),
-            array('/* comment */foo', new Token(null, null, null), 'foo'),
-        );
-    }
-
-    public function getDontHandleValueTestData()
-    {
-        return array(
-            array('>'),
-            array('+'),
-            array(' '),
-        );
-    }
-
-    protected function generateHandler()
-    {
-        return new CommentHandler();
-    }
-}
diff --git a/vendor/symfony/css-selector/Tests/Parser/Handler/HashHandlerTest.php b/vendor/symfony/css-selector/Tests/Parser/Handler/HashHandlerTest.php
deleted file mode 100644
index 5730120bf74d286c696d2d69ffaf6e252e427aac..0000000000000000000000000000000000000000
--- a/vendor/symfony/css-selector/Tests/Parser/Handler/HashHandlerTest.php
+++ /dev/null
@@ -1,49 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\CssSelector\Tests\Parser\Handler;
-
-use Symfony\Component\CssSelector\Parser\Handler\HashHandler;
-use Symfony\Component\CssSelector\Parser\Token;
-use Symfony\Component\CssSelector\Parser\Tokenizer\TokenizerEscaping;
-use Symfony\Component\CssSelector\Parser\Tokenizer\TokenizerPatterns;
-
-class HashHandlerTest extends AbstractHandlerTest
-{
-    public function getHandleValueTestData()
-    {
-        return array(
-            array('#id', new Token(Token::TYPE_HASH, 'id', 0), ''),
-            array('#123', new Token(Token::TYPE_HASH, '123', 0), ''),
-
-            array('#id.class', new Token(Token::TYPE_HASH, 'id', 0), '.class'),
-            array('#id element', new Token(Token::TYPE_HASH, 'id', 0), ' element'),
-        );
-    }
-
-    public function getDontHandleValueTestData()
-    {
-        return array(
-            array('id'),
-            array('123'),
-            array('<'),
-            array('<'),
-            array('#'),
-        );
-    }
-
-    protected function generateHandler()
-    {
-        $patterns = new TokenizerPatterns();
-
-        return new HashHandler($patterns, new TokenizerEscaping($patterns));
-    }
-}
diff --git a/vendor/symfony/css-selector/Tests/Parser/Handler/IdentifierHandlerTest.php b/vendor/symfony/css-selector/Tests/Parser/Handler/IdentifierHandlerTest.php
deleted file mode 100644
index f56430c7e83ab7544b875252db29807862602f0f..0000000000000000000000000000000000000000
--- a/vendor/symfony/css-selector/Tests/Parser/Handler/IdentifierHandlerTest.php
+++ /dev/null
@@ -1,49 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\CssSelector\Tests\Parser\Handler;
-
-use Symfony\Component\CssSelector\Parser\Handler\IdentifierHandler;
-use Symfony\Component\CssSelector\Parser\Token;
-use Symfony\Component\CssSelector\Parser\Tokenizer\TokenizerEscaping;
-use Symfony\Component\CssSelector\Parser\Tokenizer\TokenizerPatterns;
-
-class IdentifierHandlerTest extends AbstractHandlerTest
-{
-    public function getHandleValueTestData()
-    {
-        return array(
-            array('foo', new Token(Token::TYPE_IDENTIFIER, 'foo', 0), ''),
-            array('foo|bar', new Token(Token::TYPE_IDENTIFIER, 'foo', 0), '|bar'),
-            array('foo.class', new Token(Token::TYPE_IDENTIFIER, 'foo', 0), '.class'),
-            array('foo[attr]', new Token(Token::TYPE_IDENTIFIER, 'foo', 0), '[attr]'),
-            array('foo bar', new Token(Token::TYPE_IDENTIFIER, 'foo', 0), ' bar'),
-        );
-    }
-
-    public function getDontHandleValueTestData()
-    {
-        return array(
-            array('>'),
-            array('+'),
-            array(' '),
-            array('*|foo'),
-            array('/* comment */'),
-        );
-    }
-
-    protected function generateHandler()
-    {
-        $patterns = new TokenizerPatterns();
-
-        return new IdentifierHandler($patterns, new TokenizerEscaping($patterns));
-    }
-}
diff --git a/vendor/symfony/css-selector/Tests/Parser/Handler/NumberHandlerTest.php b/vendor/symfony/css-selector/Tests/Parser/Handler/NumberHandlerTest.php
deleted file mode 100644
index 675fd05b43ef895ab439939ef0c04deb2bb46349..0000000000000000000000000000000000000000
--- a/vendor/symfony/css-selector/Tests/Parser/Handler/NumberHandlerTest.php
+++ /dev/null
@@ -1,50 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\CssSelector\Tests\Parser\Handler;
-
-use Symfony\Component\CssSelector\Parser\Handler\NumberHandler;
-use Symfony\Component\CssSelector\Parser\Token;
-use Symfony\Component\CssSelector\Parser\Tokenizer\TokenizerPatterns;
-
-class NumberHandlerTest extends AbstractHandlerTest
-{
-    public function getHandleValueTestData()
-    {
-        return array(
-            array('12', new Token(Token::TYPE_NUMBER, '12', 0), ''),
-            array('12.34', new Token(Token::TYPE_NUMBER, '12.34', 0), ''),
-            array('+12.34', new Token(Token::TYPE_NUMBER, '+12.34', 0), ''),
-            array('-12.34', new Token(Token::TYPE_NUMBER, '-12.34', 0), ''),
-
-            array('12 arg', new Token(Token::TYPE_NUMBER, '12', 0), ' arg'),
-            array('12]', new Token(Token::TYPE_NUMBER, '12', 0), ']'),
-        );
-    }
-
-    public function getDontHandleValueTestData()
-    {
-        return array(
-            array('hello'),
-            array('>'),
-            array('+'),
-            array(' '),
-            array('/* comment */'),
-        );
-    }
-
-    protected function generateHandler()
-    {
-        $patterns = new TokenizerPatterns();
-
-        return new NumberHandler($patterns);
-    }
-}
diff --git a/vendor/symfony/css-selector/Tests/Parser/Handler/StringHandlerTest.php b/vendor/symfony/css-selector/Tests/Parser/Handler/StringHandlerTest.php
deleted file mode 100644
index 8ea5d4d58776cc508fc3f8a2f620c3e3684de18b..0000000000000000000000000000000000000000
--- a/vendor/symfony/css-selector/Tests/Parser/Handler/StringHandlerTest.php
+++ /dev/null
@@ -1,50 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\CssSelector\Tests\Parser\Handler;
-
-use Symfony\Component\CssSelector\Parser\Handler\StringHandler;
-use Symfony\Component\CssSelector\Parser\Token;
-use Symfony\Component\CssSelector\Parser\Tokenizer\TokenizerEscaping;
-use Symfony\Component\CssSelector\Parser\Tokenizer\TokenizerPatterns;
-
-class StringHandlerTest extends AbstractHandlerTest
-{
-    public function getHandleValueTestData()
-    {
-        return array(
-            array('"hello"', new Token(Token::TYPE_STRING, 'hello', 1), ''),
-            array('"1"', new Token(Token::TYPE_STRING, '1', 1), ''),
-            array('" "', new Token(Token::TYPE_STRING, ' ', 1), ''),
-            array('""', new Token(Token::TYPE_STRING, '', 1), ''),
-            array("'hello'", new Token(Token::TYPE_STRING, 'hello', 1), ''),
-
-            array("'foo'bar", new Token(Token::TYPE_STRING, 'foo', 1), 'bar'),
-        );
-    }
-
-    public function getDontHandleValueTestData()
-    {
-        return array(
-            array('hello'),
-            array('>'),
-            array('1'),
-            array(' '),
-        );
-    }
-
-    protected function generateHandler()
-    {
-        $patterns = new TokenizerPatterns();
-
-        return new StringHandler($patterns, new TokenizerEscaping($patterns));
-    }
-}
diff --git a/vendor/symfony/css-selector/Tests/Parser/Handler/WhitespaceHandlerTest.php b/vendor/symfony/css-selector/Tests/Parser/Handler/WhitespaceHandlerTest.php
deleted file mode 100644
index f5f9e71dc228782051938ca231c5d61589419ef6..0000000000000000000000000000000000000000
--- a/vendor/symfony/css-selector/Tests/Parser/Handler/WhitespaceHandlerTest.php
+++ /dev/null
@@ -1,44 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\CssSelector\Tests\Parser\Handler;
-
-use Symfony\Component\CssSelector\Parser\Handler\WhitespaceHandler;
-use Symfony\Component\CssSelector\Parser\Token;
-
-class WhitespaceHandlerTest extends AbstractHandlerTest
-{
-    public function getHandleValueTestData()
-    {
-        return array(
-            array(' ', new Token(Token::TYPE_WHITESPACE, ' ', 0), ''),
-            array("\n", new Token(Token::TYPE_WHITESPACE, "\n", 0), ''),
-            array("\t", new Token(Token::TYPE_WHITESPACE, "\t", 0), ''),
-
-            array(' foo', new Token(Token::TYPE_WHITESPACE, ' ', 0), 'foo'),
-            array(' .foo', new Token(Token::TYPE_WHITESPACE, ' ', 0), '.foo'),
-        );
-    }
-
-    public function getDontHandleValueTestData()
-    {
-        return array(
-            array('>'),
-            array('1'),
-            array('a'),
-        );
-    }
-
-    protected function generateHandler()
-    {
-        return new WhitespaceHandler();
-    }
-}
diff --git a/vendor/symfony/css-selector/Tests/Parser/ParserTest.php b/vendor/symfony/css-selector/Tests/Parser/ParserTest.php
deleted file mode 100644
index 53b35a95473cc03ed00f0bc6fab3be5b704c8373..0000000000000000000000000000000000000000
--- a/vendor/symfony/css-selector/Tests/Parser/ParserTest.php
+++ /dev/null
@@ -1,250 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\CssSelector\Tests\Parser;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\CssSelector\Exception\SyntaxErrorException;
-use Symfony\Component\CssSelector\Node\FunctionNode;
-use Symfony\Component\CssSelector\Node\SelectorNode;
-use Symfony\Component\CssSelector\Parser\Parser;
-use Symfony\Component\CssSelector\Parser\Token;
-
-class ParserTest extends TestCase
-{
-    /** @dataProvider getParserTestData */
-    public function testParser($source, $representation)
-    {
-        $parser = new Parser();
-
-        $this->assertEquals($representation, array_map(function (SelectorNode $node) {
-            return (string) $node->getTree();
-        }, $parser->parse($source)));
-    }
-
-    /** @dataProvider getParserExceptionTestData */
-    public function testParserException($source, $message)
-    {
-        $parser = new Parser();
-
-        try {
-            $parser->parse($source);
-            $this->fail('Parser should throw a SyntaxErrorException.');
-        } catch (SyntaxErrorException $e) {
-            $this->assertEquals($message, $e->getMessage());
-        }
-    }
-
-    /** @dataProvider getPseudoElementsTestData */
-    public function testPseudoElements($source, $element, $pseudo)
-    {
-        $parser = new Parser();
-        $selectors = $parser->parse($source);
-        $this->assertCount(1, $selectors);
-
-        /** @var SelectorNode $selector */
-        $selector = $selectors[0];
-        $this->assertEquals($element, (string) $selector->getTree());
-        $this->assertEquals($pseudo, (string) $selector->getPseudoElement());
-    }
-
-    /** @dataProvider getSpecificityTestData */
-    public function testSpecificity($source, $value)
-    {
-        $parser = new Parser();
-        $selectors = $parser->parse($source);
-        $this->assertCount(1, $selectors);
-
-        /** @var SelectorNode $selector */
-        $selector = $selectors[0];
-        $this->assertEquals($value, $selector->getSpecificity()->getValue());
-    }
-
-    /** @dataProvider getParseSeriesTestData */
-    public function testParseSeries($series, $a, $b)
-    {
-        $parser = new Parser();
-        $selectors = $parser->parse(sprintf(':nth-child(%s)', $series));
-        $this->assertCount(1, $selectors);
-
-        /** @var FunctionNode $function */
-        $function = $selectors[0]->getTree();
-        $this->assertEquals(array($a, $b), Parser::parseSeries($function->getArguments()));
-    }
-
-    /** @dataProvider getParseSeriesExceptionTestData */
-    public function testParseSeriesException($series)
-    {
-        $parser = new Parser();
-        $selectors = $parser->parse(sprintf(':nth-child(%s)', $series));
-        $this->assertCount(1, $selectors);
-
-        /** @var FunctionNode $function */
-        $function = $selectors[0]->getTree();
-        $this->{method_exists($this, $_ = 'expectException') ? $_ : 'setExpectedException'}('Symfony\Component\CssSelector\Exception\SyntaxErrorException');
-        Parser::parseSeries($function->getArguments());
-    }
-
-    public function getParserTestData()
-    {
-        return array(
-            array('*', array('Element[*]')),
-            array('*|*', array('Element[*]')),
-            array('*|foo', array('Element[foo]')),
-            array('foo|*', array('Element[foo|*]')),
-            array('foo|bar', array('Element[foo|bar]')),
-            array('#foo#bar', array('Hash[Hash[Element[*]#foo]#bar]')),
-            array('div>.foo', array('CombinedSelector[Element[div] > Class[Element[*].foo]]')),
-            array('div> .foo', array('CombinedSelector[Element[div] > Class[Element[*].foo]]')),
-            array('div >.foo', array('CombinedSelector[Element[div] > Class[Element[*].foo]]')),
-            array('div > .foo', array('CombinedSelector[Element[div] > Class[Element[*].foo]]')),
-            array("div \n>  \t \t .foo", array('CombinedSelector[Element[div] > Class[Element[*].foo]]')),
-            array('td.foo,.bar', array('Class[Element[td].foo]', 'Class[Element[*].bar]')),
-            array('td.foo, .bar', array('Class[Element[td].foo]', 'Class[Element[*].bar]')),
-            array("td.foo\t\r\n\f ,\t\r\n\f .bar", array('Class[Element[td].foo]', 'Class[Element[*].bar]')),
-            array('td.foo,.bar', array('Class[Element[td].foo]', 'Class[Element[*].bar]')),
-            array('td.foo, .bar', array('Class[Element[td].foo]', 'Class[Element[*].bar]')),
-            array("td.foo\t\r\n\f ,\t\r\n\f .bar", array('Class[Element[td].foo]', 'Class[Element[*].bar]')),
-            array('div, td.foo, div.bar span', array('Element[div]', 'Class[Element[td].foo]', 'CombinedSelector[Class[Element[div].bar] <followed> Element[span]]')),
-            array('div > p', array('CombinedSelector[Element[div] > Element[p]]')),
-            array('td:first', array('Pseudo[Element[td]:first]')),
-            array('td :first', array('CombinedSelector[Element[td] <followed> Pseudo[Element[*]:first]]')),
-            array('a[name]', array('Attribute[Element[a][name]]')),
-            array("a[ name\t]", array('Attribute[Element[a][name]]')),
-            array('a [name]', array('CombinedSelector[Element[a] <followed> Attribute[Element[*][name]]]')),
-            array('a[rel="include"]', array("Attribute[Element[a][rel = 'include']]")),
-            array('a[rel = include]', array("Attribute[Element[a][rel = 'include']]")),
-            array("a[hreflang |= 'en']", array("Attribute[Element[a][hreflang |= 'en']]")),
-            array('a[hreflang|=en]', array("Attribute[Element[a][hreflang |= 'en']]")),
-            array('div:nth-child(10)', array("Function[Element[div]:nth-child(['10'])]")),
-            array(':nth-child(2n+2)', array("Function[Element[*]:nth-child(['2', 'n', '+2'])]")),
-            array('div:nth-of-type(10)', array("Function[Element[div]:nth-of-type(['10'])]")),
-            array('div div:nth-of-type(10) .aclass', array("CombinedSelector[CombinedSelector[Element[div] <followed> Function[Element[div]:nth-of-type(['10'])]] <followed> Class[Element[*].aclass]]")),
-            array('label:only', array('Pseudo[Element[label]:only]')),
-            array('a:lang(fr)', array("Function[Element[a]:lang(['fr'])]")),
-            array('div:contains("foo")', array("Function[Element[div]:contains(['foo'])]")),
-            array('div#foobar', array('Hash[Element[div]#foobar]')),
-            array('div:not(div.foo)', array('Negation[Element[div]:not(Class[Element[div].foo])]')),
-            array('td ~ th', array('CombinedSelector[Element[td] ~ Element[th]]')),
-            array('.foo[data-bar][data-baz=0]', array("Attribute[Attribute[Class[Element[*].foo][data-bar]][data-baz = '0']]")),
-        );
-    }
-
-    public function getParserExceptionTestData()
-    {
-        return array(
-            array('attributes(href)/html/body/a', SyntaxErrorException::unexpectedToken('selector', new Token(Token::TYPE_DELIMITER, '(', 10))->getMessage()),
-            array('attributes(href)', SyntaxErrorException::unexpectedToken('selector', new Token(Token::TYPE_DELIMITER, '(', 10))->getMessage()),
-            array('html/body/a', SyntaxErrorException::unexpectedToken('selector', new Token(Token::TYPE_DELIMITER, '/', 4))->getMessage()),
-            array(' ', SyntaxErrorException::unexpectedToken('selector', new Token(Token::TYPE_FILE_END, '', 1))->getMessage()),
-            array('div, ', SyntaxErrorException::unexpectedToken('selector', new Token(Token::TYPE_FILE_END, '', 5))->getMessage()),
-            array(' , div', SyntaxErrorException::unexpectedToken('selector', new Token(Token::TYPE_DELIMITER, ',', 1))->getMessage()),
-            array('p, , div', SyntaxErrorException::unexpectedToken('selector', new Token(Token::TYPE_DELIMITER, ',', 3))->getMessage()),
-            array('div > ', SyntaxErrorException::unexpectedToken('selector', new Token(Token::TYPE_FILE_END, '', 6))->getMessage()),
-            array('  > div', SyntaxErrorException::unexpectedToken('selector', new Token(Token::TYPE_DELIMITER, '>', 2))->getMessage()),
-            array('foo|#bar', SyntaxErrorException::unexpectedToken('identifier or "*"', new Token(Token::TYPE_HASH, 'bar', 4))->getMessage()),
-            array('#.foo', SyntaxErrorException::unexpectedToken('selector', new Token(Token::TYPE_DELIMITER, '#', 0))->getMessage()),
-            array('.#foo', SyntaxErrorException::unexpectedToken('identifier', new Token(Token::TYPE_HASH, 'foo', 1))->getMessage()),
-            array(':#foo', SyntaxErrorException::unexpectedToken('identifier', new Token(Token::TYPE_HASH, 'foo', 1))->getMessage()),
-            array('[*]', SyntaxErrorException::unexpectedToken('"|"', new Token(Token::TYPE_DELIMITER, ']', 2))->getMessage()),
-            array('[foo|]', SyntaxErrorException::unexpectedToken('identifier', new Token(Token::TYPE_DELIMITER, ']', 5))->getMessage()),
-            array('[#]', SyntaxErrorException::unexpectedToken('identifier or "*"', new Token(Token::TYPE_DELIMITER, '#', 1))->getMessage()),
-            array('[foo=#]', SyntaxErrorException::unexpectedToken('string or identifier', new Token(Token::TYPE_DELIMITER, '#', 5))->getMessage()),
-            array(':nth-child()', SyntaxErrorException::unexpectedToken('at least one argument', new Token(Token::TYPE_DELIMITER, ')', 11))->getMessage()),
-            array('[href]a', SyntaxErrorException::unexpectedToken('selector', new Token(Token::TYPE_IDENTIFIER, 'a', 6))->getMessage()),
-            array('[rel:stylesheet]', SyntaxErrorException::unexpectedToken('operator', new Token(Token::TYPE_DELIMITER, ':', 4))->getMessage()),
-            array('[rel=stylesheet', SyntaxErrorException::unexpectedToken('"]"', new Token(Token::TYPE_FILE_END, '', 15))->getMessage()),
-            array(':lang(fr', SyntaxErrorException::unexpectedToken('an argument', new Token(Token::TYPE_FILE_END, '', 8))->getMessage()),
-            array(':contains("foo', SyntaxErrorException::unclosedString(10)->getMessage()),
-            array('foo!', SyntaxErrorException::unexpectedToken('selector', new Token(Token::TYPE_DELIMITER, '!', 3))->getMessage()),
-        );
-    }
-
-    public function getPseudoElementsTestData()
-    {
-        return array(
-            array('foo', 'Element[foo]', ''),
-            array('*', 'Element[*]', ''),
-            array(':empty', 'Pseudo[Element[*]:empty]', ''),
-            array(':BEfore', 'Element[*]', 'before'),
-            array(':aftER', 'Element[*]', 'after'),
-            array(':First-Line', 'Element[*]', 'first-line'),
-            array(':First-Letter', 'Element[*]', 'first-letter'),
-            array('::befoRE', 'Element[*]', 'before'),
-            array('::AFter', 'Element[*]', 'after'),
-            array('::firsT-linE', 'Element[*]', 'first-line'),
-            array('::firsT-letteR', 'Element[*]', 'first-letter'),
-            array('::Selection', 'Element[*]', 'selection'),
-            array('foo:after', 'Element[foo]', 'after'),
-            array('foo::selection', 'Element[foo]', 'selection'),
-            array('lorem#ipsum ~ a#b.c[href]:empty::selection', 'CombinedSelector[Hash[Element[lorem]#ipsum] ~ Pseudo[Attribute[Class[Hash[Element[a]#b].c][href]]:empty]]', 'selection'),
-            array('video::-webkit-media-controls', 'Element[video]', '-webkit-media-controls'),
-        );
-    }
-
-    public function getSpecificityTestData()
-    {
-        return array(
-            array('*', 0),
-            array(' foo', 1),
-            array(':empty ', 10),
-            array(':before', 1),
-            array('*:before', 1),
-            array(':nth-child(2)', 10),
-            array('.bar', 10),
-            array('[baz]', 10),
-            array('[baz="4"]', 10),
-            array('[baz^="4"]', 10),
-            array('#lipsum', 100),
-            array(':not(*)', 0),
-            array(':not(foo)', 1),
-            array(':not(.foo)', 10),
-            array(':not([foo])', 10),
-            array(':not(:empty)', 10),
-            array(':not(#foo)', 100),
-            array('foo:empty', 11),
-            array('foo:before', 2),
-            array('foo::before', 2),
-            array('foo:empty::before', 12),
-            array('#lorem + foo#ipsum:first-child > bar:first-line', 213),
-        );
-    }
-
-    public function getParseSeriesTestData()
-    {
-        return array(
-            array('1n+3', 1, 3),
-            array('1n +3', 1, 3),
-            array('1n + 3', 1, 3),
-            array('1n+ 3', 1, 3),
-            array('1n-3', 1, -3),
-            array('1n -3', 1, -3),
-            array('1n - 3', 1, -3),
-            array('1n- 3', 1, -3),
-            array('n-5', 1, -5),
-            array('odd', 2, 1),
-            array('even', 2, 0),
-            array('3n', 3, 0),
-            array('n', 1, 0),
-            array('+n', 1, 0),
-            array('-n', -1, 0),
-            array('5', 0, 5),
-        );
-    }
-
-    public function getParseSeriesExceptionTestData()
-    {
-        return array(
-            array('foo'),
-            array('n+'),
-        );
-    }
-}
diff --git a/vendor/symfony/css-selector/Tests/Parser/ReaderTest.php b/vendor/symfony/css-selector/Tests/Parser/ReaderTest.php
deleted file mode 100644
index 21eb60846240d0b538a056911d5734d2fecb9309..0000000000000000000000000000000000000000
--- a/vendor/symfony/css-selector/Tests/Parser/ReaderTest.php
+++ /dev/null
@@ -1,102 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\CssSelector\Tests\Parser;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\CssSelector\Parser\Reader;
-
-class ReaderTest extends TestCase
-{
-    public function testIsEOF()
-    {
-        $reader = new Reader('');
-        $this->assertTrue($reader->isEOF());
-
-        $reader = new Reader('hello');
-        $this->assertFalse($reader->isEOF());
-
-        $this->assignPosition($reader, 2);
-        $this->assertFalse($reader->isEOF());
-
-        $this->assignPosition($reader, 5);
-        $this->assertTrue($reader->isEOF());
-    }
-
-    public function testGetRemainingLength()
-    {
-        $reader = new Reader('hello');
-        $this->assertEquals(5, $reader->getRemainingLength());
-
-        $this->assignPosition($reader, 2);
-        $this->assertEquals(3, $reader->getRemainingLength());
-
-        $this->assignPosition($reader, 5);
-        $this->assertEquals(0, $reader->getRemainingLength());
-    }
-
-    public function testGetSubstring()
-    {
-        $reader = new Reader('hello');
-        $this->assertEquals('he', $reader->getSubstring(2));
-        $this->assertEquals('el', $reader->getSubstring(2, 1));
-
-        $this->assignPosition($reader, 2);
-        $this->assertEquals('ll', $reader->getSubstring(2));
-        $this->assertEquals('lo', $reader->getSubstring(2, 1));
-    }
-
-    public function testGetOffset()
-    {
-        $reader = new Reader('hello');
-        $this->assertEquals(2, $reader->getOffset('ll'));
-        $this->assertFalse($reader->getOffset('w'));
-
-        $this->assignPosition($reader, 2);
-        $this->assertEquals(0, $reader->getOffset('ll'));
-        $this->assertFalse($reader->getOffset('he'));
-    }
-
-    public function testFindPattern()
-    {
-        $reader = new Reader('hello');
-
-        $this->assertFalse($reader->findPattern('/world/'));
-        $this->assertEquals(array('hello', 'h'), $reader->findPattern('/^([a-z]).*/'));
-
-        $this->assignPosition($reader, 2);
-        $this->assertFalse($reader->findPattern('/^h.*/'));
-        $this->assertEquals(array('llo'), $reader->findPattern('/^llo$/'));
-    }
-
-    public function testMoveForward()
-    {
-        $reader = new Reader('hello');
-        $this->assertEquals(0, $reader->getPosition());
-
-        $reader->moveForward(2);
-        $this->assertEquals(2, $reader->getPosition());
-    }
-
-    public function testToEnd()
-    {
-        $reader = new Reader('hello');
-        $reader->moveToEnd();
-        $this->assertTrue($reader->isEOF());
-    }
-
-    private function assignPosition(Reader $reader, $value)
-    {
-        $position = new \ReflectionProperty($reader, 'position');
-        $position->setAccessible(true);
-        $position->setValue($reader, $value);
-    }
-}
diff --git a/vendor/symfony/css-selector/Tests/Parser/Shortcut/ClassParserTest.php b/vendor/symfony/css-selector/Tests/Parser/Shortcut/ClassParserTest.php
deleted file mode 100644
index 7e92f5baeed18c9898cfc24a7cfb2580eab05216..0000000000000000000000000000000000000000
--- a/vendor/symfony/css-selector/Tests/Parser/Shortcut/ClassParserTest.php
+++ /dev/null
@@ -1,45 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\CssSelector\Tests\Parser\Shortcut;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\CssSelector\Node\SelectorNode;
-use Symfony\Component\CssSelector\Parser\Shortcut\ClassParser;
-
-/**
- * @author Jean-François Simon <jeanfrancois.simon@sensiolabs.com>
- */
-class ClassParserTest extends TestCase
-{
-    /** @dataProvider getParseTestData */
-    public function testParse($source, $representation)
-    {
-        $parser = new ClassParser();
-        $selectors = $parser->parse($source);
-        $this->assertCount(1, $selectors);
-
-        /** @var SelectorNode $selector */
-        $selector = $selectors[0];
-        $this->assertEquals($representation, (string) $selector->getTree());
-    }
-
-    public function getParseTestData()
-    {
-        return array(
-            array('.testclass', 'Class[Element[*].testclass]'),
-            array('testel.testclass', 'Class[Element[testel].testclass]'),
-            array('testns|.testclass', 'Class[Element[testns|*].testclass]'),
-            array('testns|*.testclass', 'Class[Element[testns|*].testclass]'),
-            array('testns|testel.testclass', 'Class[Element[testns|testel].testclass]'),
-        );
-    }
-}
diff --git a/vendor/symfony/css-selector/Tests/Parser/Shortcut/ElementParserTest.php b/vendor/symfony/css-selector/Tests/Parser/Shortcut/ElementParserTest.php
deleted file mode 100644
index 05a730fde15a2083e2424944a42db850ac96b672..0000000000000000000000000000000000000000
--- a/vendor/symfony/css-selector/Tests/Parser/Shortcut/ElementParserTest.php
+++ /dev/null
@@ -1,44 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\CssSelector\Tests\Parser\Shortcut;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\CssSelector\Node\SelectorNode;
-use Symfony\Component\CssSelector\Parser\Shortcut\ElementParser;
-
-/**
- * @author Jean-François Simon <jeanfrancois.simon@sensiolabs.com>
- */
-class ElementParserTest extends TestCase
-{
-    /** @dataProvider getParseTestData */
-    public function testParse($source, $representation)
-    {
-        $parser = new ElementParser();
-        $selectors = $parser->parse($source);
-        $this->assertCount(1, $selectors);
-
-        /** @var SelectorNode $selector */
-        $selector = $selectors[0];
-        $this->assertEquals($representation, (string) $selector->getTree());
-    }
-
-    public function getParseTestData()
-    {
-        return array(
-            array('*', 'Element[*]'),
-            array('testel', 'Element[testel]'),
-            array('testns|*', 'Element[testns|*]'),
-            array('testns|testel', 'Element[testns|testel]'),
-        );
-    }
-}
diff --git a/vendor/symfony/css-selector/Tests/Parser/Shortcut/EmptyStringParserTest.php b/vendor/symfony/css-selector/Tests/Parser/Shortcut/EmptyStringParserTest.php
deleted file mode 100644
index 1cf742cf201609977c15eea3dade8d8cac235a83..0000000000000000000000000000000000000000
--- a/vendor/symfony/css-selector/Tests/Parser/Shortcut/EmptyStringParserTest.php
+++ /dev/null
@@ -1,36 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\CssSelector\Tests\Parser\Shortcut;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\CssSelector\Node\SelectorNode;
-use Symfony\Component\CssSelector\Parser\Shortcut\EmptyStringParser;
-
-/**
- * @author Jean-François Simon <jeanfrancois.simon@sensiolabs.com>
- */
-class EmptyStringParserTest extends TestCase
-{
-    public function testParse()
-    {
-        $parser = new EmptyStringParser();
-        $selectors = $parser->parse('');
-        $this->assertCount(1, $selectors);
-
-        /** @var SelectorNode $selector */
-        $selector = $selectors[0];
-        $this->assertEquals('Element[*]', (string) $selector->getTree());
-
-        $selectors = $parser->parse('this will produce an empty array');
-        $this->assertCount(0, $selectors);
-    }
-}
diff --git a/vendor/symfony/css-selector/Tests/Parser/Shortcut/HashParserTest.php b/vendor/symfony/css-selector/Tests/Parser/Shortcut/HashParserTest.php
deleted file mode 100644
index 82f555d9abf165de34568d80fe1239faa8c22a51..0000000000000000000000000000000000000000
--- a/vendor/symfony/css-selector/Tests/Parser/Shortcut/HashParserTest.php
+++ /dev/null
@@ -1,45 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\CssSelector\Tests\Parser\Shortcut;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\CssSelector\Node\SelectorNode;
-use Symfony\Component\CssSelector\Parser\Shortcut\HashParser;
-
-/**
- * @author Jean-François Simon <jeanfrancois.simon@sensiolabs.com>
- */
-class HashParserTest extends TestCase
-{
-    /** @dataProvider getParseTestData */
-    public function testParse($source, $representation)
-    {
-        $parser = new HashParser();
-        $selectors = $parser->parse($source);
-        $this->assertCount(1, $selectors);
-
-        /** @var SelectorNode $selector */
-        $selector = $selectors[0];
-        $this->assertEquals($representation, (string) $selector->getTree());
-    }
-
-    public function getParseTestData()
-    {
-        return array(
-            array('#testid', 'Hash[Element[*]#testid]'),
-            array('testel#testid', 'Hash[Element[testel]#testid]'),
-            array('testns|#testid', 'Hash[Element[testns|*]#testid]'),
-            array('testns|*#testid', 'Hash[Element[testns|*]#testid]'),
-            array('testns|testel#testid', 'Hash[Element[testns|testel]#testid]'),
-        );
-    }
-}
diff --git a/vendor/symfony/css-selector/Tests/Parser/TokenStreamTest.php b/vendor/symfony/css-selector/Tests/Parser/TokenStreamTest.php
deleted file mode 100644
index 44c751ac865d2f98384759635436c5588ee3c551..0000000000000000000000000000000000000000
--- a/vendor/symfony/css-selector/Tests/Parser/TokenStreamTest.php
+++ /dev/null
@@ -1,96 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\CssSelector\Tests\Parser;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\CssSelector\Parser\Token;
-use Symfony\Component\CssSelector\Parser\TokenStream;
-
-class TokenStreamTest extends TestCase
-{
-    public function testGetNext()
-    {
-        $stream = new TokenStream();
-        $stream->push($t1 = new Token(Token::TYPE_IDENTIFIER, 'h1', 0));
-        $stream->push($t2 = new Token(Token::TYPE_DELIMITER, '.', 2));
-        $stream->push($t3 = new Token(Token::TYPE_IDENTIFIER, 'title', 3));
-
-        $this->assertSame($t1, $stream->getNext());
-        $this->assertSame($t2, $stream->getNext());
-        $this->assertSame($t3, $stream->getNext());
-    }
-
-    public function testGetPeek()
-    {
-        $stream = new TokenStream();
-        $stream->push($t1 = new Token(Token::TYPE_IDENTIFIER, 'h1', 0));
-        $stream->push($t2 = new Token(Token::TYPE_DELIMITER, '.', 2));
-        $stream->push($t3 = new Token(Token::TYPE_IDENTIFIER, 'title', 3));
-
-        $this->assertSame($t1, $stream->getPeek());
-        $this->assertSame($t1, $stream->getNext());
-        $this->assertSame($t2, $stream->getPeek());
-        $this->assertSame($t2, $stream->getPeek());
-        $this->assertSame($t2, $stream->getNext());
-    }
-
-    public function testGetNextIdentifier()
-    {
-        $stream = new TokenStream();
-        $stream->push(new Token(Token::TYPE_IDENTIFIER, 'h1', 0));
-
-        $this->assertEquals('h1', $stream->getNextIdentifier());
-    }
-
-    public function testFailToGetNextIdentifier()
-    {
-        $this->{method_exists($this, $_ = 'expectException') ? $_ : 'setExpectedException'}('Symfony\Component\CssSelector\Exception\SyntaxErrorException');
-
-        $stream = new TokenStream();
-        $stream->push(new Token(Token::TYPE_DELIMITER, '.', 2));
-        $stream->getNextIdentifier();
-    }
-
-    public function testGetNextIdentifierOrStar()
-    {
-        $stream = new TokenStream();
-
-        $stream->push(new Token(Token::TYPE_IDENTIFIER, 'h1', 0));
-        $this->assertEquals('h1', $stream->getNextIdentifierOrStar());
-
-        $stream->push(new Token(Token::TYPE_DELIMITER, '*', 0));
-        $this->assertNull($stream->getNextIdentifierOrStar());
-    }
-
-    public function testFailToGetNextIdentifierOrStar()
-    {
-        $this->{method_exists($this, $_ = 'expectException') ? $_ : 'setExpectedException'}('Symfony\Component\CssSelector\Exception\SyntaxErrorException');
-
-        $stream = new TokenStream();
-        $stream->push(new Token(Token::TYPE_DELIMITER, '.', 2));
-        $stream->getNextIdentifierOrStar();
-    }
-
-    public function testSkipWhitespace()
-    {
-        $stream = new TokenStream();
-        $stream->push($t1 = new Token(Token::TYPE_IDENTIFIER, 'h1', 0));
-        $stream->push($t2 = new Token(Token::TYPE_WHITESPACE, ' ', 2));
-        $stream->push($t3 = new Token(Token::TYPE_IDENTIFIER, 'h1', 3));
-
-        $stream->skipWhitespace();
-        $this->assertSame($t1, $stream->getNext());
-
-        $stream->skipWhitespace();
-        $this->assertSame($t3, $stream->getNext());
-    }
-}
diff --git a/vendor/symfony/css-selector/Tests/XPath/Fixtures/ids.html b/vendor/symfony/css-selector/Tests/XPath/Fixtures/ids.html
deleted file mode 100644
index 5799fad25ecfb33bca8ab42c615253160c061636..0000000000000000000000000000000000000000
--- a/vendor/symfony/css-selector/Tests/XPath/Fixtures/ids.html
+++ /dev/null
@@ -1,48 +0,0 @@
-<html id="html"><head>
-  <link id="link-href" href="foo" />
-  <link id="link-nohref" />
-</head><body>
-<div id="outer-div">
- <a id="name-anchor" name="foo"></a>
- <a id="tag-anchor" rel="tag" href="http://localhost/foo">link</a>
- <a id="nofollow-anchor" rel="nofollow" href="https://example.org">
-    link</a>
- <ol id="first-ol" class="a b c">
-   <li id="first-li">content</li>
-   <li id="second-li" lang="En-us">
-     <div id="li-div">
-     </div>
-   </li>
-   <li id="third-li" class="ab c"></li>
-   <li id="fourth-li" class="ab
-c"></li>
-   <li id="fifth-li"></li>
-   <li id="sixth-li"></li>
-   <li id="seventh-li">  </li>
- </ol>
- <p id="paragraph">
-   <b id="p-b">hi</b> <em id="p-em">there</em>
-   <b id="p-b2">guy</b>
-   <input type="checkbox" id="checkbox-unchecked" />
-   <input type="checkbox" id="checkbox-disabled" disabled="" />
-   <input type="text" id="text-checked" checked="checked" />
-   <input type="hidden" />
-   <input type="hidden" disabled="disabled" />
-   <input type="checkbox" id="checkbox-checked" checked="checked" />
-   <input type="checkbox" id="checkbox-disabled-checked"
-          disabled="disabled" checked="checked" />
-   <fieldset id="fieldset" disabled="disabled">
-     <input type="checkbox" id="checkbox-fieldset-disabled" />
-     <input type="hidden" />
-   </fieldset>
- </p>
- <ol id="second-ol">
- </ol>
- <map name="dummymap">
-   <area shape="circle" coords="200,250,25" href="foo.html" id="area-href" />
-   <area shape="default" id="area-nohref" />
- </map>
-</div>
-<div id="foobar-div" foobar="ab bc
-cde"><span id="foobar-span"></span></div>
-</body></html>
diff --git a/vendor/symfony/css-selector/Tests/XPath/Fixtures/lang.xml b/vendor/symfony/css-selector/Tests/XPath/Fixtures/lang.xml
deleted file mode 100644
index 14f8dbed681f6f52eb9c7f7bbc021ccdee4533bb..0000000000000000000000000000000000000000
--- a/vendor/symfony/css-selector/Tests/XPath/Fixtures/lang.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<test>
-  <a id="first" xml:lang="en">a</a>
-  <b id="second" xml:lang="en-US">b</b>
-  <c id="third" xml:lang="en-Nz">c</c>
-  <d id="fourth" xml:lang="En-us">d</d>
-  <e id="fifth" xml:lang="fr">e</e>
-  <f id="sixth" xml:lang="ru">f</f>
-  <g id="seventh" xml:lang="de">
-    <h id="eighth" xml:lang="zh"/>
-  </g>
-</test>
diff --git a/vendor/symfony/css-selector/Tests/XPath/Fixtures/shakespear.html b/vendor/symfony/css-selector/Tests/XPath/Fixtures/shakespear.html
deleted file mode 100644
index 15d1ad33a3192dd9e141a5ac006465fd7f4315ba..0000000000000000000000000000000000000000
--- a/vendor/symfony/css-selector/Tests/XPath/Fixtures/shakespear.html
+++ /dev/null
@@ -1,308 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
-	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" debug="true">
-<head>
-	<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
-</head>
-<body>
-	<div id="test">
-	<div class="dialog">
-	<h2>As You Like It</h2>
-	<div id="playwright">
-	  by William Shakespeare
-	</div>
-	<div class="dialog scene thirdClass" id="scene1">
-	  <h3>ACT I, SCENE III. A room in the palace.</h3>
-	  <div class="dialog">
-	  <div class="direction">Enter CELIA and ROSALIND</div>
-	  </div>
-	  <div id="speech1" class="character">CELIA</div>
-	  <div class="dialog">
-	  <div id="scene1.3.1">Why, cousin! why, Rosalind! Cupid have mercy! not a word?</div>
-	  </div>
-	  <div id="speech2" class="character">ROSALIND</div>
-	  <div class="dialog">
-	  <div id="scene1.3.2">Not one to throw at a dog.</div>
-	  </div>
-	  <div id="speech3" class="character">CELIA</div>
-	  <div class="dialog">
-	  <div id="scene1.3.3">No, thy words are too precious to be cast away upon</div>
-	  <div id="scene1.3.4">curs; throw some of them at me; come, lame me with reasons.</div>
-	  </div>
-	  <div id="speech4" class="character">ROSALIND</div>
-	  <div id="speech5" class="character">CELIA</div>
-	  <div class="dialog">
-	  <div id="scene1.3.8">But is all this for your father?</div>
-	  </div>
-	  <div class="dialog">
-	  <div id="scene1.3.5">Then there were two cousins laid up; when the one</div>
-	  <div id="scene1.3.6">should be lamed with reasons and the other mad</div>
-	  <div id="scene1.3.7">without any.</div>
-	  </div>
-	  <div id="speech6" class="character">ROSALIND</div>
-	  <div class="dialog">
-	  <div id="scene1.3.9">No, some of it is for my child's father. O, how</div>
-	  <div id="scene1.3.10">full of briers is this working-day world!</div>
-	  </div>
-	  <div id="speech7" class="character">CELIA</div>
-	  <div class="dialog">
-	  <div id="scene1.3.11">They are but burs, cousin, thrown upon thee in</div>
-	  <div id="scene1.3.12">holiday foolery: if we walk not in the trodden</div>
-	  <div id="scene1.3.13">paths our very petticoats will catch them.</div>
-	  </div>
-	  <div id="speech8" class="character">ROSALIND</div>
-	  <div class="dialog">
-	  <div id="scene1.3.14">I could shake them off my coat: these burs are in my heart.</div>
-	  </div>
-	  <div id="speech9" class="character">CELIA</div>
-	  <div class="dialog">
-	  <div id="scene1.3.15">Hem them away.</div>
-	  </div>
-	  <div id="speech10" class="character">ROSALIND</div>
-	  <div class="dialog">
-	  <div id="scene1.3.16">I would try, if I could cry 'hem' and have him.</div>
-	  </div>
-	  <div id="speech11" class="character">CELIA</div>
-	  <div class="dialog">
-	  <div id="scene1.3.17">Come, come, wrestle with thy affections.</div>
-	  </div>
-	  <div id="speech12" class="character">ROSALIND</div>
-	  <div class="dialog">
-	  <div id="scene1.3.18">O, they take the part of a better wrestler than myself!</div>
-	  </div>
-	  <div id="speech13" class="character">CELIA</div>
-	  <div class="dialog">
-	  <div id="scene1.3.19">O, a good wish upon you! you will try in time, in</div>
-	  <div id="scene1.3.20">despite of a fall. But, turning these jests out of</div>
-	  <div id="scene1.3.21">service, let us talk in good earnest: is it</div>
-	  <div id="scene1.3.22">possible, on such a sudden, you should fall into so</div>
-	  <div id="scene1.3.23">strong a liking with old Sir Rowland's youngest son?</div>
-	  </div>
-	  <div id="speech14" class="character">ROSALIND</div>
-	  <div class="dialog">
-	  <div id="scene1.3.24">The duke my father loved his father dearly.</div>
-	  </div>
-	  <div id="speech15" class="character">CELIA</div>
-	  <div class="dialog">
-	  <div id="scene1.3.25">Doth it therefore ensue that you should love his son</div>
-	  <div id="scene1.3.26">dearly? By this kind of chase, I should hate him,</div>
-	  <div id="scene1.3.27">for my father hated his father dearly; yet I hate</div>
-	  <div id="scene1.3.28">not Orlando.</div>
-	  </div>
-	  <div id="speech16" class="character">ROSALIND</div>
-	  <div title="wtf" class="dialog">
-	  <div id="scene1.3.29">No, faith, hate him not, for my sake.</div>
-	  </div>
-	  <div id="speech17" class="character">CELIA</div>
-	  <div class="dialog">
-	  <div id="scene1.3.30">Why should I not? doth he not deserve well?</div>
-	  </div>
-	  <div id="speech18" class="character">ROSALIND</div>
-	  <div class="dialog">
-	  <div id="scene1.3.31">Let me love him for that, and do you love him</div>
-	  <div id="scene1.3.32">because I do. Look, here comes the duke.</div>
-	  </div>
-	  <div id="speech19" class="character">CELIA</div>
-	  <div class="dialog">
-	  <div id="scene1.3.33">With his eyes full of anger.</div>
-	  <div class="direction">Enter DUKE FREDERICK, with Lords</div>
-	  </div>
-	  <div id="speech20" class="character">DUKE FREDERICK</div>
-	  <div class="dialog">
-	  <div id="scene1.3.34">Mistress, dispatch you with your safest haste</div>
-	  <div id="scene1.3.35">And get you from our court.</div>
-	  </div>
-	  <div id="speech21" class="character">ROSALIND</div>
-	  <div class="dialog">
-	  <div id="scene1.3.36">Me, uncle?</div>
-	  </div>
-	  <div id="speech22" class="character">DUKE FREDERICK</div>
-	  <div class="dialog">
-	  <div id="scene1.3.37">You, cousin</div>
-	  <div id="scene1.3.38">Within these ten days if that thou be'st found</div>
-	  <div id="scene1.3.39">So near our public court as twenty miles,</div>
-	  <div id="scene1.3.40">Thou diest for it.</div>
-	  </div>
-	  <div id="speech23" class="character">ROSALIND</div>
-	  <div class="dialog">
-	  <div id="scene1.3.41">                  I do beseech your grace,</div>
-	  <div id="scene1.3.42">Let me the knowledge of my fault bear with me:</div>
-	  <div id="scene1.3.43">If with myself I hold intelligence</div>
-	  <div id="scene1.3.44">Or have acquaintance with mine own desires,</div>
-	  <div id="scene1.3.45">If that I do not dream or be not frantic,--</div>
-	  <div id="scene1.3.46">As I do trust I am not--then, dear uncle,</div>
-	  <div id="scene1.3.47">Never so much as in a thought unborn</div>
-	  <div id="scene1.3.48">Did I offend your highness.</div>
-	  </div>
-	  <div id="speech24" class="character">DUKE FREDERICK</div>
-	  <div class="dialog">
-	  <div id="scene1.3.49">Thus do all traitors:</div>
-	  <div id="scene1.3.50">If their purgation did consist in words,</div>
-	  <div id="scene1.3.51">They are as innocent as grace itself:</div>
-	  <div id="scene1.3.52">Let it suffice thee that I trust thee not.</div>
-	  </div>
-	  <div id="speech25" class="character">ROSALIND</div>
-	  <div class="dialog">
-	  <div id="scene1.3.53">Yet your mistrust cannot make me a traitor:</div>
-	  <div id="scene1.3.54">Tell me whereon the likelihood depends.</div>
-	  </div>
-	  <div id="speech26" class="character">DUKE FREDERICK</div>
-	  <div class="dialog">
-	  <div id="scene1.3.55">Thou art thy father's daughter; there's enough.</div>
-	  </div>
-	  <div id="speech27" class="character">ROSALIND</div>
-	  <div class="dialog">
-	  <div id="scene1.3.56">So was I when your highness took his dukedom;</div>
-	  <div id="scene1.3.57">So was I when your highness banish'd him:</div>
-	  <div id="scene1.3.58">Treason is not inherited, my lord;</div>
-	  <div id="scene1.3.59">Or, if we did derive it from our friends,</div>
-	  <div id="scene1.3.60">What's that to me? my father was no traitor:</div>
-	  <div id="scene1.3.61">Then, good my liege, mistake me not so much</div>
-	  <div id="scene1.3.62">To think my poverty is treacherous.</div>
-	  </div>
-	  <div id="speech28" class="character">CELIA</div>
-	  <div class="dialog">
-	  <div id="scene1.3.63">Dear sovereign, hear me speak.</div>
-	  </div>
-	  <div id="speech29" class="character">DUKE FREDERICK</div>
-	  <div class="dialog">
-	  <div id="scene1.3.64">Ay, Celia; we stay'd her for your sake,</div>
-	  <div id="scene1.3.65">Else had she with her father ranged along.</div>
-	  </div>
-	  <div id="speech30" class="character">CELIA</div>
-	  <div class="dialog">
-	  <div id="scene1.3.66">I did not then entreat to have her stay;</div>
-	  <div id="scene1.3.67">It was your pleasure and your own remorse:</div>
-	  <div id="scene1.3.68">I was too young that time to value her;</div>
-	  <div id="scene1.3.69">But now I know her: if she be a traitor,</div>
-	  <div id="scene1.3.70">Why so am I; we still have slept together,</div>
-	  <div id="scene1.3.71">Rose at an instant, learn'd, play'd, eat together,</div>
-	  <div id="scene1.3.72">And wheresoever we went, like Juno's swans,</div>
-	  <div id="scene1.3.73">Still we went coupled and inseparable.</div>
-	  </div>
-	  <div id="speech31" class="character">DUKE FREDERICK</div>
-	  <div class="dialog">
-	  <div id="scene1.3.74">She is too subtle for thee; and her smoothness,</div>
-	  <div id="scene1.3.75">Her very silence and her patience</div>
-	  <div id="scene1.3.76">Speak to the people, and they pity her.</div>
-	  <div id="scene1.3.77">Thou art a fool: she robs thee of thy name;</div>
-	  <div id="scene1.3.78">And thou wilt show more bright and seem more virtuous</div>
-	  <div id="scene1.3.79">When she is gone. Then open not thy lips:</div>
-	  <div id="scene1.3.80">Firm and irrevocable is my doom</div>
-	  <div id="scene1.3.81">Which I have pass'd upon her; she is banish'd.</div>
-	  </div>
-	  <div id="speech32" class="character">CELIA</div>
-	  <div class="dialog">
-	  <div id="scene1.3.82">Pronounce that sentence then on me, my liege:</div>
-	  <div id="scene1.3.83">I cannot live out of her company.</div>
-	  </div>
-	  <div id="speech33" class="character">DUKE FREDERICK</div>
-	  <div class="dialog">
-	  <div id="scene1.3.84">You are a fool. You, niece, provide yourself:</div>
-	  <div id="scene1.3.85">If you outstay the time, upon mine honour,</div>
-	  <div id="scene1.3.86">And in the greatness of my word, you die.</div>
-	  <div class="direction">Exeunt DUKE FREDERICK and Lords</div>
-	  </div>
-	  <div id="speech34" class="character">CELIA</div>
-	  <div class="dialog">
-	  <div id="scene1.3.87">O my poor Rosalind, whither wilt thou go?</div>
-	  <div id="scene1.3.88">Wilt thou change fathers? I will give thee mine.</div>
-	  <div id="scene1.3.89">I charge thee, be not thou more grieved than I am.</div>
-	  </div>
-	  <div id="speech35" class="character">ROSALIND</div>
-	  <div class="dialog">
-	  <div id="scene1.3.90">I have more cause.</div>
-	  </div>
-	  <div id="speech36" class="character">CELIA</div>
-	  <div class="dialog">
-	  <div id="scene1.3.91">                  Thou hast not, cousin;</div>
-	  <div id="scene1.3.92">Prithee be cheerful: know'st thou not, the duke</div>
-	  <div id="scene1.3.93">Hath banish'd me, his daughter?</div>
-	  </div>
-	  <div id="speech37" class="character">ROSALIND</div>
-	  <div class="dialog">
-	  <div id="scene1.3.94">That he hath not.</div>
-	  </div>
-	  <div id="speech38" class="character">CELIA</div>
-	  <div class="dialog">
-	  <div id="scene1.3.95">No, hath not? Rosalind lacks then the love</div>
-	  <div id="scene1.3.96">Which teacheth thee that thou and I am one:</div>
-	  <div id="scene1.3.97">Shall we be sunder'd? shall we part, sweet girl?</div>
-	  <div id="scene1.3.98">No: let my father seek another heir.</div>
-	  <div id="scene1.3.99">Therefore devise with me how we may fly,</div>
-	  <div id="scene1.3.100">Whither to go and what to bear with us;</div>
-	  <div id="scene1.3.101">And do not seek to take your change upon you,</div>
-	  <div id="scene1.3.102">To bear your griefs yourself and leave me out;</div>
-	  <div id="scene1.3.103">For, by this heaven, now at our sorrows pale,</div>
-	  <div id="scene1.3.104">Say what thou canst, I'll go along with thee.</div>
-	  </div>
-	  <div id="speech39" class="character">ROSALIND</div>
-	  <div class="dialog">
-	  <div id="scene1.3.105">Why, whither shall we go?</div>
-	  </div>
-	  <div id="speech40" class="character">CELIA</div>
-	  <div class="dialog">
-	  <div id="scene1.3.106">To seek my uncle in the forest of Arden.</div>
-	  </div>
-	  <div id="speech41" class="character">ROSALIND</div>
-	  <div class="dialog">
-	  <div id="scene1.3.107">Alas, what danger will it be to us,</div>
-	  <div id="scene1.3.108">Maids as we are, to travel forth so far!</div>
-	  <div id="scene1.3.109">Beauty provoketh thieves sooner than gold.</div>
-	  </div>
-	  <div id="speech42" class="character">CELIA</div>
-	  <div class="dialog">
-	  <div id="scene1.3.110">I'll put myself in poor and mean attire</div>
-	  <div id="scene1.3.111">And with a kind of umber smirch my face;</div>
-	  <div id="scene1.3.112">The like do you: so shall we pass along</div>
-	  <div id="scene1.3.113">And never stir assailants.</div>
-	  </div>
-	  <div id="speech43" class="character">ROSALIND</div>
-	  <div class="dialog">
-	  <div id="scene1.3.114">Were it not better,</div>
-	  <div id="scene1.3.115">Because that I am more than common tall,</div>
-	  <div id="scene1.3.116">That I did suit me all points like a man?</div>
-	  <div id="scene1.3.117">A gallant curtle-axe upon my thigh,</div>
-	  <div id="scene1.3.118">A boar-spear in my hand; and--in my heart</div>
-	  <div id="scene1.3.119">Lie there what hidden woman's fear there will--</div>
-	  <div id="scene1.3.120">We'll have a swashing and a martial outside,</div>
-	  <div id="scene1.3.121">As many other mannish cowards have</div>
-	  <div id="scene1.3.122">That do outface it with their semblances.</div>
-	  </div>
-	  <div id="speech44" class="character">CELIA</div>
-	  <div class="dialog">
-	  <div id="scene1.3.123">What shall I call thee when thou art a man?</div>
-	  </div>
-	  <div id="speech45" class="character">ROSALIND</div>
-	  <div class="dialog">
-	  <div id="scene1.3.124">I'll have no worse a name than Jove's own page;</div>
-	  <div id="scene1.3.125">And therefore look you call me Ganymede.</div>
-	  <div id="scene1.3.126">But what will you be call'd?</div>
-	  </div>
-	  <div id="speech46" class="character">CELIA</div>
-	  <div class="dialog">
-	  <div id="scene1.3.127">Something that hath a reference to my state</div>
-	  <div id="scene1.3.128">No longer Celia, but Aliena.</div>
-	  </div>
-	  <div id="speech47" class="character">ROSALIND</div>
-	  <div class="dialog">
-	  <div id="scene1.3.129">But, cousin, what if we assay'd to steal</div>
-	  <div id="scene1.3.130">The clownish fool out of your father's court?</div>
-	  <div id="scene1.3.131">Would he not be a comfort to our travel?</div>
-	  </div>
-	  <div id="speech48" class="character">CELIA</div>
-	  <div class="dialog">
-	  <div id="scene1.3.132">He'll go along o'er the wide world with me;</div>
-	  <div id="scene1.3.133">Leave me alone to woo him. Let's away,</div>
-	  <div id="scene1.3.134">And get our jewels and our wealth together,</div>
-	  <div id="scene1.3.135">Devise the fittest time and safest way</div>
-	  <div id="scene1.3.136">To hide us from pursuit that will be made</div>
-	  <div id="scene1.3.137">After my flight. Now go we in content</div>
-	  <div id="scene1.3.138">To liberty and not to banishment.</div>
-	  <div class="direction">Exeunt</div>
-	  </div>
-	</div>
-	</div>
-</div>
-</body>
-</html>
diff --git a/vendor/symfony/css-selector/Tests/XPath/TranslatorTest.php b/vendor/symfony/css-selector/Tests/XPath/TranslatorTest.php
deleted file mode 100644
index 610458297ecec7168893ddde268a2407d2aa00fb..0000000000000000000000000000000000000000
--- a/vendor/symfony/css-selector/Tests/XPath/TranslatorTest.php
+++ /dev/null
@@ -1,327 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\CssSelector\Tests\XPath;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\CssSelector\XPath\Extension\HtmlExtension;
-use Symfony\Component\CssSelector\XPath\Translator;
-
-class TranslatorTest extends TestCase
-{
-    /** @dataProvider getXpathLiteralTestData */
-    public function testXpathLiteral($value, $literal)
-    {
-        $this->assertEquals($literal, Translator::getXpathLiteral($value));
-    }
-
-    /** @dataProvider getCssToXPathTestData */
-    public function testCssToXPath($css, $xpath)
-    {
-        $translator = new Translator();
-        $translator->registerExtension(new HtmlExtension($translator));
-        $this->assertEquals($xpath, $translator->cssToXPath($css, ''));
-    }
-
-    /** @dataProvider getXmlLangTestData */
-    public function testXmlLang($css, array $elementsId)
-    {
-        $translator = new Translator();
-        $document = new \SimpleXMLElement(file_get_contents(__DIR__.'/Fixtures/lang.xml'));
-        $elements = $document->xpath($translator->cssToXPath($css));
-        $this->assertCount(\count($elementsId), $elements);
-        foreach ($elements as $element) {
-            $this->assertTrue(\in_array($element->attributes()->id, $elementsId));
-        }
-    }
-
-    /** @dataProvider getHtmlIdsTestData */
-    public function testHtmlIds($css, array $elementsId)
-    {
-        $translator = new Translator();
-        $translator->registerExtension(new HtmlExtension($translator));
-        $document = new \DOMDocument();
-        $document->strictErrorChecking = false;
-        $internalErrors = libxml_use_internal_errors(true);
-        $document->loadHTMLFile(__DIR__.'/Fixtures/ids.html');
-        $document = simplexml_import_dom($document);
-        $elements = $document->xpath($translator->cssToXPath($css));
-        $this->assertCount(\count($elementsId), $elementsId);
-        foreach ($elements as $element) {
-            if (null !== $element->attributes()->id) {
-                $this->assertTrue(\in_array($element->attributes()->id, $elementsId));
-            }
-        }
-        libxml_clear_errors();
-        libxml_use_internal_errors($internalErrors);
-    }
-
-    /** @dataProvider getHtmlShakespearTestData */
-    public function testHtmlShakespear($css, $count)
-    {
-        $translator = new Translator();
-        $translator->registerExtension(new HtmlExtension($translator));
-        $document = new \DOMDocument();
-        $document->strictErrorChecking = false;
-        $document->loadHTMLFile(__DIR__.'/Fixtures/shakespear.html');
-        $document = simplexml_import_dom($document);
-        $bodies = $document->xpath('//body');
-        $elements = $bodies[0]->xpath($translator->cssToXPath($css));
-        $this->assertCount($count, $elements);
-    }
-
-    public function getXpathLiteralTestData()
-    {
-        return array(
-            array('foo', "'foo'"),
-            array("foo's bar", '"foo\'s bar"'),
-            array("foo's \"middle\" bar", 'concat(\'foo\', "\'", \'s "middle" bar\')'),
-            array("foo's 'middle' \"bar\"", 'concat(\'foo\', "\'", \'s \', "\'", \'middle\', "\'", \' "bar"\')'),
-        );
-    }
-
-    public function getCssToXPathTestData()
-    {
-        return array(
-            array('*', '*'),
-            array('e', 'e'),
-            array('*|e', 'e'),
-            array('e|f', 'e:f'),
-            array('e[foo]', 'e[@foo]'),
-            array('e[foo|bar]', 'e[@foo:bar]'),
-            array('e[foo="bar"]', "e[@foo = 'bar']"),
-            array('e[foo~="bar"]', "e[@foo and contains(concat(' ', normalize-space(@foo), ' '), ' bar ')]"),
-            array('e[foo^="bar"]', "e[@foo and starts-with(@foo, 'bar')]"),
-            array('e[foo$="bar"]', "e[@foo and substring(@foo, string-length(@foo)-2) = 'bar']"),
-            array('e[foo*="bar"]', "e[@foo and contains(@foo, 'bar')]"),
-            array('e[foo!="bar"]', "e[not(@foo) or @foo != 'bar']"),
-            array('e[foo!="bar"][foo!="baz"]', "e[(not(@foo) or @foo != 'bar') and (not(@foo) or @foo != 'baz')]"),
-            array('e[hreflang|="en"]', "e[@hreflang and (@hreflang = 'en' or starts-with(@hreflang, 'en-'))]"),
-            array('e:nth-child(1)', "*/*[(name() = 'e') and (position() = 1)]"),
-            array('e:nth-last-child(1)', "*/*[(name() = 'e') and (position() = last() - 0)]"),
-            array('e:nth-last-child(2n+2)', "*/*[(name() = 'e') and (last() - position() - 1 >= 0 and (last() - position() - 1) mod 2 = 0)]"),
-            array('e:nth-of-type(1)', '*/e[position() = 1]'),
-            array('e:nth-last-of-type(1)', '*/e[position() = last() - 0]'),
-            array('div e:nth-last-of-type(1) .aclass', "div/descendant-or-self::*/e[position() = last() - 0]/descendant-or-self::*/*[@class and contains(concat(' ', normalize-space(@class), ' '), ' aclass ')]"),
-            array('e:first-child', "*/*[(name() = 'e') and (position() = 1)]"),
-            array('e:last-child', "*/*[(name() = 'e') and (position() = last())]"),
-            array('e:first-of-type', '*/e[position() = 1]'),
-            array('e:last-of-type', '*/e[position() = last()]'),
-            array('e:only-child', "*/*[(name() = 'e') and (last() = 1)]"),
-            array('e:only-of-type', 'e[last() = 1]'),
-            array('e:empty', 'e[not(*) and not(string-length())]'),
-            array('e:EmPTY', 'e[not(*) and not(string-length())]'),
-            array('e:root', 'e[not(parent::*)]'),
-            array('e:hover', 'e[0]'),
-            array('e:contains("foo")', "e[contains(string(.), 'foo')]"),
-            array('e:ConTains(foo)', "e[contains(string(.), 'foo')]"),
-            array('e.warning', "e[@class and contains(concat(' ', normalize-space(@class), ' '), ' warning ')]"),
-            array('e#myid', "e[@id = 'myid']"),
-            array('e:not(:nth-child(odd))', 'e[not(position() - 1 >= 0 and (position() - 1) mod 2 = 0)]'),
-            array('e:nOT(*)', 'e[0]'),
-            array('e f', 'e/descendant-or-self::*/f'),
-            array('e > f', 'e/f'),
-            array('e + f', "e/following-sibling::*[(name() = 'f') and (position() = 1)]"),
-            array('e ~ f', 'e/following-sibling::f'),
-            array('div#container p', "div[@id = 'container']/descendant-or-self::*/p"),
-        );
-    }
-
-    public function getXmlLangTestData()
-    {
-        return array(
-            array(':lang("EN")', array('first', 'second', 'third', 'fourth')),
-            array(':lang("en-us")', array('second', 'fourth')),
-            array(':lang(en-nz)', array('third')),
-            array(':lang(fr)', array('fifth')),
-            array(':lang(ru)', array('sixth')),
-            array(":lang('ZH')", array('eighth')),
-            array(':lang(de) :lang(zh)', array('eighth')),
-            array(':lang(en), :lang(zh)', array('first', 'second', 'third', 'fourth', 'eighth')),
-            array(':lang(es)', array()),
-        );
-    }
-
-    public function getHtmlIdsTestData()
-    {
-        return array(
-            array('div', array('outer-div', 'li-div', 'foobar-div')),
-            array('DIV', array('outer-div', 'li-div', 'foobar-div')),  // case-insensitive in HTML
-            array('div div', array('li-div')),
-            array('div, div div', array('outer-div', 'li-div', 'foobar-div')),
-            array('a[name]', array('name-anchor')),
-            array('a[NAme]', array('name-anchor')), // case-insensitive in HTML:
-            array('a[rel]', array('tag-anchor', 'nofollow-anchor')),
-            array('a[rel="tag"]', array('tag-anchor')),
-            array('a[href*="localhost"]', array('tag-anchor')),
-            array('a[href*=""]', array()),
-            array('a[href^="http"]', array('tag-anchor', 'nofollow-anchor')),
-            array('a[href^="http:"]', array('tag-anchor')),
-            array('a[href^=""]', array()),
-            array('a[href$="org"]', array('nofollow-anchor')),
-            array('a[href$=""]', array()),
-            array('div[foobar~="bc"]', array('foobar-div')),
-            array('div[foobar~="cde"]', array('foobar-div')),
-            array('[foobar~="ab bc"]', array('foobar-div')),
-            array('[foobar~=""]', array()),
-            array('[foobar~=" \t"]', array()),
-            array('div[foobar~="cd"]', array()),
-            array('*[lang|="En"]', array('second-li')),
-            array('[lang|="En-us"]', array('second-li')),
-            // Attribute values are case sensitive
-            array('*[lang|="en"]', array()),
-            array('[lang|="en-US"]', array()),
-            array('*[lang|="e"]', array()),
-            // ... :lang() is not.
-            array(':lang("EN")', array('second-li', 'li-div')),
-            array('*:lang(en-US)', array('second-li', 'li-div')),
-            array(':lang("e")', array()),
-            array('li:nth-child(3)', array('third-li')),
-            array('li:nth-child(10)', array()),
-            array('li:nth-child(2n)', array('second-li', 'fourth-li', 'sixth-li')),
-            array('li:nth-child(even)', array('second-li', 'fourth-li', 'sixth-li')),
-            array('li:nth-child(2n+0)', array('second-li', 'fourth-li', 'sixth-li')),
-            array('li:nth-child(+2n+1)', array('first-li', 'third-li', 'fifth-li', 'seventh-li')),
-            array('li:nth-child(odd)', array('first-li', 'third-li', 'fifth-li', 'seventh-li')),
-            array('li:nth-child(2n+4)', array('fourth-li', 'sixth-li')),
-            array('li:nth-child(3n+1)', array('first-li', 'fourth-li', 'seventh-li')),
-            array('li:nth-child(n)', array('first-li', 'second-li', 'third-li', 'fourth-li', 'fifth-li', 'sixth-li', 'seventh-li')),
-            array('li:nth-child(n-1)', array('first-li', 'second-li', 'third-li', 'fourth-li', 'fifth-li', 'sixth-li', 'seventh-li')),
-            array('li:nth-child(n+1)', array('first-li', 'second-li', 'third-li', 'fourth-li', 'fifth-li', 'sixth-li', 'seventh-li')),
-            array('li:nth-child(n+3)', array('third-li', 'fourth-li', 'fifth-li', 'sixth-li', 'seventh-li')),
-            array('li:nth-child(-n)', array()),
-            array('li:nth-child(-n-1)', array()),
-            array('li:nth-child(-n+1)', array('first-li')),
-            array('li:nth-child(-n+3)', array('first-li', 'second-li', 'third-li')),
-            array('li:nth-last-child(0)', array()),
-            array('li:nth-last-child(2n)', array('second-li', 'fourth-li', 'sixth-li')),
-            array('li:nth-last-child(even)', array('second-li', 'fourth-li', 'sixth-li')),
-            array('li:nth-last-child(2n+2)', array('second-li', 'fourth-li', 'sixth-li')),
-            array('li:nth-last-child(n)', array('first-li', 'second-li', 'third-li', 'fourth-li', 'fifth-li', 'sixth-li', 'seventh-li')),
-            array('li:nth-last-child(n-1)', array('first-li', 'second-li', 'third-li', 'fourth-li', 'fifth-li', 'sixth-li', 'seventh-li')),
-            array('li:nth-last-child(n-3)', array('first-li', 'second-li', 'third-li', 'fourth-li', 'fifth-li', 'sixth-li', 'seventh-li')),
-            array('li:nth-last-child(n+1)', array('first-li', 'second-li', 'third-li', 'fourth-li', 'fifth-li', 'sixth-li', 'seventh-li')),
-            array('li:nth-last-child(n+3)', array('first-li', 'second-li', 'third-li', 'fourth-li', 'fifth-li')),
-            array('li:nth-last-child(-n)', array()),
-            array('li:nth-last-child(-n-1)', array()),
-            array('li:nth-last-child(-n+1)', array('seventh-li')),
-            array('li:nth-last-child(-n+3)', array('fifth-li', 'sixth-li', 'seventh-li')),
-            array('ol:first-of-type', array('first-ol')),
-            array('ol:nth-child(1)', array('first-ol')),
-            array('ol:nth-of-type(2)', array('second-ol')),
-            array('ol:nth-last-of-type(1)', array('second-ol')),
-            array('span:only-child', array('foobar-span')),
-            array('li div:only-child', array('li-div')),
-            array('div *:only-child', array('li-div', 'foobar-span')),
-            array('p:only-of-type', array('paragraph')),
-            array('a:empty', array('name-anchor')),
-            array('a:EMpty', array('name-anchor')),
-            array('li:empty', array('third-li', 'fourth-li', 'fifth-li', 'sixth-li')),
-            array(':root', array('html')),
-            array('html:root', array('html')),
-            array('li:root', array()),
-            array('* :root', array()),
-            array('*:contains("link")', array('html', 'outer-div', 'tag-anchor', 'nofollow-anchor')),
-            array(':CONtains("link")', array('html', 'outer-div', 'tag-anchor', 'nofollow-anchor')),
-            array('*:contains("LInk")', array()),  // case sensitive
-            array('*:contains("e")', array('html', 'nil', 'outer-div', 'first-ol', 'first-li', 'paragraph', 'p-em')),
-            array('*:contains("E")', array()),  // case-sensitive
-            array('.a', array('first-ol')),
-            array('.b', array('first-ol')),
-            array('*.a', array('first-ol')),
-            array('ol.a', array('first-ol')),
-            array('.c', array('first-ol', 'third-li', 'fourth-li')),
-            array('*.c', array('first-ol', 'third-li', 'fourth-li')),
-            array('ol *.c', array('third-li', 'fourth-li')),
-            array('ol li.c', array('third-li', 'fourth-li')),
-            array('li ~ li.c', array('third-li', 'fourth-li')),
-            array('ol > li.c', array('third-li', 'fourth-li')),
-            array('#first-li', array('first-li')),
-            array('li#first-li', array('first-li')),
-            array('*#first-li', array('first-li')),
-            array('li div', array('li-div')),
-            array('li > div', array('li-div')),
-            array('div div', array('li-div')),
-            array('div > div', array()),
-            array('div>.c', array('first-ol')),
-            array('div > .c', array('first-ol')),
-            array('div + div', array('foobar-div')),
-            array('a ~ a', array('tag-anchor', 'nofollow-anchor')),
-            array('a[rel="tag"] ~ a', array('nofollow-anchor')),
-            array('ol#first-ol li:last-child', array('seventh-li')),
-            array('ol#first-ol *:last-child', array('li-div', 'seventh-li')),
-            array('#outer-div:first-child', array('outer-div')),
-            array('#outer-div :first-child', array('name-anchor', 'first-li', 'li-div', 'p-b', 'checkbox-fieldset-disabled', 'area-href')),
-            array('a[href]', array('tag-anchor', 'nofollow-anchor')),
-            array(':not(*)', array()),
-            array('a:not([href])', array('name-anchor')),
-            array('ol :Not(li[class])', array('first-li', 'second-li', 'li-div', 'fifth-li', 'sixth-li', 'seventh-li')),
-            // HTML-specific
-            array(':link', array('link-href', 'tag-anchor', 'nofollow-anchor', 'area-href')),
-            array(':visited', array()),
-            array(':enabled', array('link-href', 'tag-anchor', 'nofollow-anchor', 'checkbox-unchecked', 'text-checked', 'checkbox-checked', 'area-href')),
-            array(':disabled', array('checkbox-disabled', 'checkbox-disabled-checked', 'fieldset', 'checkbox-fieldset-disabled')),
-            array(':checked', array('checkbox-checked', 'checkbox-disabled-checked')),
-        );
-    }
-
-    public function getHtmlShakespearTestData()
-    {
-        return array(
-            array('*', 246),
-            array('div:contains(CELIA)', 26),
-            array('div:only-child', 22), // ?
-            array('div:nth-child(even)', 106),
-            array('div:nth-child(2n)', 106),
-            array('div:nth-child(odd)', 137),
-            array('div:nth-child(2n+1)', 137),
-            array('div:nth-child(n)', 243),
-            array('div:last-child', 53),
-            array('div:first-child', 51),
-            array('div > div', 242),
-            array('div + div', 190),
-            array('div ~ div', 190),
-            array('body', 1),
-            array('body div', 243),
-            array('div', 243),
-            array('div div', 242),
-            array('div div div', 241),
-            array('div, div, div', 243),
-            array('div, a, span', 243),
-            array('.dialog', 51),
-            array('div.dialog', 51),
-            array('div .dialog', 51),
-            array('div.character, div.dialog', 99),
-            array('div.direction.dialog', 0),
-            array('div.dialog.direction', 0),
-            array('div.dialog.scene', 1),
-            array('div.scene.scene', 1),
-            array('div.scene .scene', 0),
-            array('div.direction .dialog ', 0),
-            array('div .dialog .direction', 4),
-            array('div.dialog .dialog .direction', 4),
-            array('#speech5', 1),
-            array('div#speech5', 1),
-            array('div #speech5', 1),
-            array('div.scene div.dialog', 49),
-            array('div#scene1 div.dialog div', 142),
-            array('#scene1 #speech1', 1),
-            array('div[class]', 103),
-            array('div[class=dialog]', 50),
-            array('div[class^=dia]', 51),
-            array('div[class$=log]', 50),
-            array('div[class*=sce]', 1),
-            array('div[class|=dialog]', 50), // ? Seems right
-            array('div[class!=madeup]', 243), // ? Seems right
-            array('div[class~=dialog]', 51), // ? Seems right
-        );
-    }
-}
diff --git a/vendor/symfony/css-selector/XPath/Extension/AbstractExtension.php b/vendor/symfony/css-selector/XPath/Extension/AbstractExtension.php
index 026ac06c79f21a657f80bc00ade72fe8ed1a2e2a..44e0035a78757939ca974961cfbf7956455ac479 100644
--- a/vendor/symfony/css-selector/XPath/Extension/AbstractExtension.php
+++ b/vendor/symfony/css-selector/XPath/Extension/AbstractExtension.php
@@ -26,40 +26,40 @@ abstract class AbstractExtension implements ExtensionInterface
     /**
      * {@inheritdoc}
      */
-    public function getNodeTranslators()
+    public function getNodeTranslators(): array
     {
-        return array();
+        return [];
     }
 
     /**
      * {@inheritdoc}
      */
-    public function getCombinationTranslators()
+    public function getCombinationTranslators(): array
     {
-        return array();
+        return [];
     }
 
     /**
      * {@inheritdoc}
      */
-    public function getFunctionTranslators()
+    public function getFunctionTranslators(): array
     {
-        return array();
+        return [];
     }
 
     /**
      * {@inheritdoc}
      */
-    public function getPseudoClassTranslators()
+    public function getPseudoClassTranslators(): array
     {
-        return array();
+        return [];
     }
 
     /**
      * {@inheritdoc}
      */
-    public function getAttributeMatchingTranslators()
+    public function getAttributeMatchingTranslators(): array
     {
-        return array();
+        return [];
     }
 }
diff --git a/vendor/symfony/css-selector/XPath/Extension/AttributeMatchingExtension.php b/vendor/symfony/css-selector/XPath/Extension/AttributeMatchingExtension.php
index 2078dca61da10535ce48f32b5f168cf9a1f2149f..a9879f1be8077c7f982475cdccafc702d7cfa419 100644
--- a/vendor/symfony/css-selector/XPath/Extension/AttributeMatchingExtension.php
+++ b/vendor/symfony/css-selector/XPath/Extension/AttributeMatchingExtension.php
@@ -29,52 +29,31 @@ class AttributeMatchingExtension extends AbstractExtension
     /**
      * {@inheritdoc}
      */
-    public function getAttributeMatchingTranslators()
+    public function getAttributeMatchingTranslators(): array
     {
-        return array(
-            'exists' => array($this, 'translateExists'),
-            '=' => array($this, 'translateEquals'),
-            '~=' => array($this, 'translateIncludes'),
-            '|=' => array($this, 'translateDashMatch'),
-            '^=' => array($this, 'translatePrefixMatch'),
-            '$=' => array($this, 'translateSuffixMatch'),
-            '*=' => array($this, 'translateSubstringMatch'),
-            '!=' => array($this, 'translateDifferent'),
-        );
+        return [
+            'exists' => [$this, 'translateExists'],
+            '=' => [$this, 'translateEquals'],
+            '~=' => [$this, 'translateIncludes'],
+            '|=' => [$this, 'translateDashMatch'],
+            '^=' => [$this, 'translatePrefixMatch'],
+            '$=' => [$this, 'translateSuffixMatch'],
+            '*=' => [$this, 'translateSubstringMatch'],
+            '!=' => [$this, 'translateDifferent'],
+        ];
     }
 
-    /**
-     * @param XPathExpr $xpath
-     * @param string    $attribute
-     * @param string    $value
-     *
-     * @return XPathExpr
-     */
-    public function translateExists(XPathExpr $xpath, $attribute, $value)
+    public function translateExists(XPathExpr $xpath, string $attribute, ?string $value): XPathExpr
     {
         return $xpath->addCondition($attribute);
     }
 
-    /**
-     * @param XPathExpr $xpath
-     * @param string    $attribute
-     * @param string    $value
-     *
-     * @return XPathExpr
-     */
-    public function translateEquals(XPathExpr $xpath, $attribute, $value)
+    public function translateEquals(XPathExpr $xpath, string $attribute, ?string $value): XPathExpr
     {
         return $xpath->addCondition(sprintf('%s = %s', $attribute, Translator::getXpathLiteral($value)));
     }
 
-    /**
-     * @param XPathExpr $xpath
-     * @param string    $attribute
-     * @param string    $value
-     *
-     * @return XPathExpr
-     */
-    public function translateIncludes(XPathExpr $xpath, $attribute, $value)
+    public function translateIncludes(XPathExpr $xpath, string $attribute, ?string $value): XPathExpr
     {
         return $xpath->addCondition($value ? sprintf(
             '%1$s and contains(concat(\' \', normalize-space(%1$s), \' \'), %2$s)',
@@ -83,14 +62,7 @@ public function translateIncludes(XPathExpr $xpath, $attribute, $value)
         ) : '0');
     }
 
-    /**
-     * @param XPathExpr $xpath
-     * @param string    $attribute
-     * @param string    $value
-     *
-     * @return XPathExpr
-     */
-    public function translateDashMatch(XPathExpr $xpath, $attribute, $value)
+    public function translateDashMatch(XPathExpr $xpath, string $attribute, ?string $value): XPathExpr
     {
         return $xpath->addCondition(sprintf(
             '%1$s and (%1$s = %2$s or starts-with(%1$s, %3$s))',
@@ -100,14 +72,7 @@ public function translateDashMatch(XPathExpr $xpath, $attribute, $value)
         ));
     }
 
-    /**
-     * @param XPathExpr $xpath
-     * @param string    $attribute
-     * @param string    $value
-     *
-     * @return XPathExpr
-     */
-    public function translatePrefixMatch(XPathExpr $xpath, $attribute, $value)
+    public function translatePrefixMatch(XPathExpr $xpath, string $attribute, ?string $value): XPathExpr
     {
         return $xpath->addCondition($value ? sprintf(
             '%1$s and starts-with(%1$s, %2$s)',
@@ -116,14 +81,7 @@ public function translatePrefixMatch(XPathExpr $xpath, $attribute, $value)
         ) : '0');
     }
 
-    /**
-     * @param XPathExpr $xpath
-     * @param string    $attribute
-     * @param string    $value
-     *
-     * @return XPathExpr
-     */
-    public function translateSuffixMatch(XPathExpr $xpath, $attribute, $value)
+    public function translateSuffixMatch(XPathExpr $xpath, string $attribute, ?string $value): XPathExpr
     {
         return $xpath->addCondition($value ? sprintf(
             '%1$s and substring(%1$s, string-length(%1$s)-%2$s) = %3$s',
@@ -133,14 +91,7 @@ public function translateSuffixMatch(XPathExpr $xpath, $attribute, $value)
         ) : '0');
     }
 
-    /**
-     * @param XPathExpr $xpath
-     * @param string    $attribute
-     * @param string    $value
-     *
-     * @return XPathExpr
-     */
-    public function translateSubstringMatch(XPathExpr $xpath, $attribute, $value)
+    public function translateSubstringMatch(XPathExpr $xpath, string $attribute, ?string $value): XPathExpr
     {
         return $xpath->addCondition($value ? sprintf(
             '%1$s and contains(%1$s, %2$s)',
@@ -149,14 +100,7 @@ public function translateSubstringMatch(XPathExpr $xpath, $attribute, $value)
         ) : '0');
     }
 
-    /**
-     * @param XPathExpr $xpath
-     * @param string    $attribute
-     * @param string    $value
-     *
-     * @return XPathExpr
-     */
-    public function translateDifferent(XPathExpr $xpath, $attribute, $value)
+    public function translateDifferent(XPathExpr $xpath, string $attribute, ?string $value): XPathExpr
     {
         return $xpath->addCondition(sprintf(
             $value ? 'not(%1$s) or %1$s != %2$s' : '%s != %s',
@@ -168,7 +112,7 @@ public function translateDifferent(XPathExpr $xpath, $attribute, $value)
     /**
      * {@inheritdoc}
      */
-    public function getName()
+    public function getName(): string
     {
         return 'attribute-matching';
     }
diff --git a/vendor/symfony/css-selector/XPath/Extension/CombinationExtension.php b/vendor/symfony/css-selector/XPath/Extension/CombinationExtension.php
index 0c9cc0320c3c2dcfc4a7e4090bc637380a732531..aee976e9493efac4142bceca37a4f42d27e30bb9 100644
--- a/vendor/symfony/css-selector/XPath/Extension/CombinationExtension.php
+++ b/vendor/symfony/css-selector/XPath/Extension/CombinationExtension.php
@@ -28,36 +28,27 @@ class CombinationExtension extends AbstractExtension
     /**
      * {@inheritdoc}
      */
-    public function getCombinationTranslators()
+    public function getCombinationTranslators(): array
     {
-        return array(
-            ' ' => array($this, 'translateDescendant'),
-            '>' => array($this, 'translateChild'),
-            '+' => array($this, 'translateDirectAdjacent'),
-            '~' => array($this, 'translateIndirectAdjacent'),
-        );
+        return [
+            ' ' => [$this, 'translateDescendant'],
+            '>' => [$this, 'translateChild'],
+            '+' => [$this, 'translateDirectAdjacent'],
+            '~' => [$this, 'translateIndirectAdjacent'],
+        ];
     }
 
-    /**
-     * @return XPathExpr
-     */
-    public function translateDescendant(XPathExpr $xpath, XPathExpr $combinedXpath)
+    public function translateDescendant(XPathExpr $xpath, XPathExpr $combinedXpath): XPathExpr
     {
         return $xpath->join('/descendant-or-self::*/', $combinedXpath);
     }
 
-    /**
-     * @return XPathExpr
-     */
-    public function translateChild(XPathExpr $xpath, XPathExpr $combinedXpath)
+    public function translateChild(XPathExpr $xpath, XPathExpr $combinedXpath): XPathExpr
     {
         return $xpath->join('/', $combinedXpath);
     }
 
-    /**
-     * @return XPathExpr
-     */
-    public function translateDirectAdjacent(XPathExpr $xpath, XPathExpr $combinedXpath)
+    public function translateDirectAdjacent(XPathExpr $xpath, XPathExpr $combinedXpath): XPathExpr
     {
         return $xpath
             ->join('/following-sibling::', $combinedXpath)
@@ -65,10 +56,7 @@ public function translateDirectAdjacent(XPathExpr $xpath, XPathExpr $combinedXpa
             ->addCondition('position() = 1');
     }
 
-    /**
-     * @return XPathExpr
-     */
-    public function translateIndirectAdjacent(XPathExpr $xpath, XPathExpr $combinedXpath)
+    public function translateIndirectAdjacent(XPathExpr $xpath, XPathExpr $combinedXpath): XPathExpr
     {
         return $xpath->join('/following-sibling::', $combinedXpath);
     }
@@ -76,7 +64,7 @@ public function translateIndirectAdjacent(XPathExpr $xpath, XPathExpr $combinedX
     /**
      * {@inheritdoc}
      */
-    public function getName()
+    public function getName(): string
     {
         return 'combination';
     }
diff --git a/vendor/symfony/css-selector/XPath/Extension/ExtensionInterface.php b/vendor/symfony/css-selector/XPath/Extension/ExtensionInterface.php
index 3607022891f95d3de665822bffd828af948a34c0..1a74b90acc6c3ced21c522abcbee429441b473c6 100644
--- a/vendor/symfony/css-selector/XPath/Extension/ExtensionInterface.php
+++ b/vendor/symfony/css-selector/XPath/Extension/ExtensionInterface.php
@@ -30,40 +30,38 @@ interface ExtensionInterface
      *
      * @return callable[]
      */
-    public function getNodeTranslators();
+    public function getNodeTranslators(): array;
 
     /**
      * Returns combination translators.
      *
      * @return callable[]
      */
-    public function getCombinationTranslators();
+    public function getCombinationTranslators(): array;
 
     /**
      * Returns function translators.
      *
      * @return callable[]
      */
-    public function getFunctionTranslators();
+    public function getFunctionTranslators(): array;
 
     /**
      * Returns pseudo-class translators.
      *
      * @return callable[]
      */
-    public function getPseudoClassTranslators();
+    public function getPseudoClassTranslators(): array;
 
     /**
      * Returns attribute operation translators.
      *
      * @return callable[]
      */
-    public function getAttributeMatchingTranslators();
+    public function getAttributeMatchingTranslators(): array;
 
     /**
      * Returns extension name.
-     *
-     * @return string
      */
-    public function getName();
+    public function getName(): string;
 }
diff --git a/vendor/symfony/css-selector/XPath/Extension/FunctionExtension.php b/vendor/symfony/css-selector/XPath/Extension/FunctionExtension.php
index c2606b5ad4308b6c1f1e3f4b371bc3323afd54c4..d3f7222a4d0abda27858f4a7fc41f39e3a226c76 100644
--- a/vendor/symfony/css-selector/XPath/Extension/FunctionExtension.php
+++ b/vendor/symfony/css-selector/XPath/Extension/FunctionExtension.php
@@ -33,34 +33,27 @@ class FunctionExtension extends AbstractExtension
     /**
      * {@inheritdoc}
      */
-    public function getFunctionTranslators()
+    public function getFunctionTranslators(): array
     {
-        return array(
-            'nth-child' => array($this, 'translateNthChild'),
-            'nth-last-child' => array($this, 'translateNthLastChild'),
-            'nth-of-type' => array($this, 'translateNthOfType'),
-            'nth-last-of-type' => array($this, 'translateNthLastOfType'),
-            'contains' => array($this, 'translateContains'),
-            'lang' => array($this, 'translateLang'),
-        );
+        return [
+            'nth-child' => [$this, 'translateNthChild'],
+            'nth-last-child' => [$this, 'translateNthLastChild'],
+            'nth-of-type' => [$this, 'translateNthOfType'],
+            'nth-last-of-type' => [$this, 'translateNthLastOfType'],
+            'contains' => [$this, 'translateContains'],
+            'lang' => [$this, 'translateLang'],
+        ];
     }
 
     /**
-     * @param XPathExpr    $xpath
-     * @param FunctionNode $function
-     * @param bool         $last
-     * @param bool         $addNameTest
-     *
-     * @return XPathExpr
-     *
      * @throws ExpressionErrorException
      */
-    public function translateNthChild(XPathExpr $xpath, FunctionNode $function, $last = false, $addNameTest = true)
+    public function translateNthChild(XPathExpr $xpath, FunctionNode $function, bool $last = false, bool $addNameTest = true): XPathExpr
     {
         try {
-            list($a, $b) = Parser::parseSeries($function->getArguments());
+            [$a, $b] = Parser::parseSeries($function->getArguments());
         } catch (SyntaxErrorException $e) {
-            throw new ExpressionErrorException(sprintf('Invalid series: %s', implode(', ', $function->getArguments())), 0, $e);
+            throw new ExpressionErrorException(sprintf('Invalid series: "%s".', implode('", "', $function->getArguments())), 0, $e);
         }
 
         $xpath->addStarPrefix();
@@ -93,7 +86,7 @@ public function translateNthChild(XPathExpr $xpath, FunctionNode $function, $las
             $expr .= ' - '.$b;
         }
 
-        $conditions = array(sprintf('%s %s 0', $expr, $sign));
+        $conditions = [sprintf('%s %s 0', $expr, $sign)];
 
         if (1 !== $a && -1 !== $a) {
             $conditions[] = sprintf('(%s) mod %d = 0', $expr, $a);
@@ -110,28 +103,20 @@ public function translateNthChild(XPathExpr $xpath, FunctionNode $function, $las
         // -1n+6 means elements 6 and previous
     }
 
-    /**
-     * @return XPathExpr
-     */
-    public function translateNthLastChild(XPathExpr $xpath, FunctionNode $function)
+    public function translateNthLastChild(XPathExpr $xpath, FunctionNode $function): XPathExpr
     {
         return $this->translateNthChild($xpath, $function, true);
     }
 
-    /**
-     * @return XPathExpr
-     */
-    public function translateNthOfType(XPathExpr $xpath, FunctionNode $function)
+    public function translateNthOfType(XPathExpr $xpath, FunctionNode $function): XPathExpr
     {
         return $this->translateNthChild($xpath, $function, false, false);
     }
 
     /**
-     * @return XPathExpr
-     *
      * @throws ExpressionErrorException
      */
-    public function translateNthLastOfType(XPathExpr $xpath, FunctionNode $function)
+    public function translateNthLastOfType(XPathExpr $xpath, FunctionNode $function): XPathExpr
     {
         if ('*' === $xpath->getElement()) {
             throw new ExpressionErrorException('"*:nth-of-type()" is not implemented.');
@@ -141,19 +126,14 @@ public function translateNthLastOfType(XPathExpr $xpath, FunctionNode $function)
     }
 
     /**
-     * @return XPathExpr
-     *
      * @throws ExpressionErrorException
      */
-    public function translateContains(XPathExpr $xpath, FunctionNode $function)
+    public function translateContains(XPathExpr $xpath, FunctionNode $function): XPathExpr
     {
         $arguments = $function->getArguments();
         foreach ($arguments as $token) {
             if (!($token->isString() || $token->isIdentifier())) {
-                throw new ExpressionErrorException(
-                    'Expected a single string or identifier for :contains(), got '
-                    .implode(', ', $arguments)
-                );
+                throw new ExpressionErrorException('Expected a single string or identifier for :contains(), got '.implode(', ', $arguments));
             }
         }
 
@@ -164,19 +144,14 @@ public function translateContains(XPathExpr $xpath, FunctionNode $function)
     }
 
     /**
-     * @return XPathExpr
-     *
      * @throws ExpressionErrorException
      */
-    public function translateLang(XPathExpr $xpath, FunctionNode $function)
+    public function translateLang(XPathExpr $xpath, FunctionNode $function): XPathExpr
     {
         $arguments = $function->getArguments();
         foreach ($arguments as $token) {
             if (!($token->isString() || $token->isIdentifier())) {
-                throw new ExpressionErrorException(
-                    'Expected a single string or identifier for :lang(), got '
-                    .implode(', ', $arguments)
-                );
+                throw new ExpressionErrorException('Expected a single string or identifier for :lang(), got '.implode(', ', $arguments));
             }
         }
 
@@ -189,7 +164,7 @@ public function translateLang(XPathExpr $xpath, FunctionNode $function)
     /**
      * {@inheritdoc}
      */
-    public function getName()
+    public function getName(): string
     {
         return 'function';
     }
diff --git a/vendor/symfony/css-selector/XPath/Extension/HtmlExtension.php b/vendor/symfony/css-selector/XPath/Extension/HtmlExtension.php
index 625ffa5cad67035e0b6dfad161479c037bb4599c..6edc085810d77e6fa13f154ca0fabe77bdeaf85f 100644
--- a/vendor/symfony/css-selector/XPath/Extension/HtmlExtension.php
+++ b/vendor/symfony/css-selector/XPath/Extension/HtmlExtension.php
@@ -39,34 +39,31 @@ public function __construct(Translator $translator)
     /**
      * {@inheritdoc}
      */
-    public function getPseudoClassTranslators()
+    public function getPseudoClassTranslators(): array
     {
-        return array(
-            'checked' => array($this, 'translateChecked'),
-            'link' => array($this, 'translateLink'),
-            'disabled' => array($this, 'translateDisabled'),
-            'enabled' => array($this, 'translateEnabled'),
-            'selected' => array($this, 'translateSelected'),
-            'invalid' => array($this, 'translateInvalid'),
-            'hover' => array($this, 'translateHover'),
-            'visited' => array($this, 'translateVisited'),
-        );
+        return [
+            'checked' => [$this, 'translateChecked'],
+            'link' => [$this, 'translateLink'],
+            'disabled' => [$this, 'translateDisabled'],
+            'enabled' => [$this, 'translateEnabled'],
+            'selected' => [$this, 'translateSelected'],
+            'invalid' => [$this, 'translateInvalid'],
+            'hover' => [$this, 'translateHover'],
+            'visited' => [$this, 'translateVisited'],
+        ];
     }
 
     /**
      * {@inheritdoc}
      */
-    public function getFunctionTranslators()
+    public function getFunctionTranslators(): array
     {
-        return array(
-            'lang' => array($this, 'translateLang'),
-        );
+        return [
+            'lang' => [$this, 'translateLang'],
+        ];
     }
 
-    /**
-     * @return XPathExpr
-     */
-    public function translateChecked(XPathExpr $xpath)
+    public function translateChecked(XPathExpr $xpath): XPathExpr
     {
         return $xpath->addCondition(
             '(@checked '
@@ -75,18 +72,12 @@ public function translateChecked(XPathExpr $xpath)
         );
     }
 
-    /**
-     * @return XPathExpr
-     */
-    public function translateLink(XPathExpr $xpath)
+    public function translateLink(XPathExpr $xpath): XPathExpr
     {
         return $xpath->addCondition("@href and (name(.) = 'a' or name(.) = 'link' or name(.) = 'area')");
     }
 
-    /**
-     * @return XPathExpr
-     */
-    public function translateDisabled(XPathExpr $xpath)
+    public function translateDisabled(XPathExpr $xpath): XPathExpr
     {
         return $xpath->addCondition(
             '('
@@ -112,10 +103,7 @@ public function translateDisabled(XPathExpr $xpath)
         // todo: in the second half, add "and is not a descendant of that fieldset element's first legend element child, if any."
     }
 
-    /**
-     * @return XPathExpr
-     */
-    public function translateEnabled(XPathExpr $xpath)
+    public function translateEnabled(XPathExpr $xpath): XPathExpr
     {
         return $xpath->addCondition(
             '('
@@ -149,19 +137,14 @@ public function translateEnabled(XPathExpr $xpath)
     }
 
     /**
-     * @return XPathExpr
-     *
      * @throws ExpressionErrorException
      */
-    public function translateLang(XPathExpr $xpath, FunctionNode $function)
+    public function translateLang(XPathExpr $xpath, FunctionNode $function): XPathExpr
     {
         $arguments = $function->getArguments();
         foreach ($arguments as $token) {
             if (!($token->isString() || $token->isIdentifier())) {
-                throw new ExpressionErrorException(
-                    'Expected a single string or identifier for :lang(), got '
-                    .implode(', ', $arguments)
-                );
+                throw new ExpressionErrorException('Expected a single string or identifier for :lang(), got '.implode(', ', $arguments));
             }
         }
 
@@ -174,34 +157,22 @@ public function translateLang(XPathExpr $xpath, FunctionNode $function)
         ));
     }
 
-    /**
-     * @return XPathExpr
-     */
-    public function translateSelected(XPathExpr $xpath)
+    public function translateSelected(XPathExpr $xpath): XPathExpr
     {
         return $xpath->addCondition("(@selected and name(.) = 'option')");
     }
 
-    /**
-     * @return XPathExpr
-     */
-    public function translateInvalid(XPathExpr $xpath)
+    public function translateInvalid(XPathExpr $xpath): XPathExpr
     {
         return $xpath->addCondition('0');
     }
 
-    /**
-     * @return XPathExpr
-     */
-    public function translateHover(XPathExpr $xpath)
+    public function translateHover(XPathExpr $xpath): XPathExpr
     {
         return $xpath->addCondition('0');
     }
 
-    /**
-     * @return XPathExpr
-     */
-    public function translateVisited(XPathExpr $xpath)
+    public function translateVisited(XPathExpr $xpath): XPathExpr
     {
         return $xpath->addCondition('0');
     }
@@ -209,7 +180,7 @@ public function translateVisited(XPathExpr $xpath)
     /**
      * {@inheritdoc}
      */
-    public function getName()
+    public function getName(): string
     {
         return 'html';
     }
diff --git a/vendor/symfony/css-selector/XPath/Extension/NodeExtension.php b/vendor/symfony/css-selector/XPath/Extension/NodeExtension.php
index 715d9611a8267cbb5df811e34da411f0c04392ab..3a26a886d7bc4122b8c15974d497517cb770601a 100644
--- a/vendor/symfony/css-selector/XPath/Extension/NodeExtension.php
+++ b/vendor/symfony/css-selector/XPath/Extension/NodeExtension.php
@@ -33,21 +33,15 @@ class NodeExtension extends AbstractExtension
 
     private $flags;
 
-    /**
-     * @param int $flags
-     */
-    public function __construct($flags = 0)
+    public function __construct(int $flags = 0)
     {
         $this->flags = $flags;
     }
 
     /**
-     * @param int  $flag
-     * @param bool $on
-     *
      * @return $this
      */
-    public function setFlag($flag, $on)
+    public function setFlag(int $flag, bool $on): self
     {
         if ($on && !$this->hasFlag($flag)) {
             $this->flags += $flag;
@@ -60,12 +54,7 @@ public function setFlag($flag, $on)
         return $this;
     }
 
-    /**
-     * @param int $flag
-     *
-     * @return bool
-     */
-    public function hasFlag($flag)
+    public function hasFlag(int $flag): bool
     {
         return (bool) ($this->flags & $flag);
     }
@@ -73,41 +62,32 @@ public function hasFlag($flag)
     /**
      * {@inheritdoc}
      */
-    public function getNodeTranslators()
+    public function getNodeTranslators(): array
     {
-        return array(
-            'Selector' => array($this, 'translateSelector'),
-            'CombinedSelector' => array($this, 'translateCombinedSelector'),
-            'Negation' => array($this, 'translateNegation'),
-            'Function' => array($this, 'translateFunction'),
-            'Pseudo' => array($this, 'translatePseudo'),
-            'Attribute' => array($this, 'translateAttribute'),
-            'Class' => array($this, 'translateClass'),
-            'Hash' => array($this, 'translateHash'),
-            'Element' => array($this, 'translateElement'),
-        );
+        return [
+            'Selector' => [$this, 'translateSelector'],
+            'CombinedSelector' => [$this, 'translateCombinedSelector'],
+            'Negation' => [$this, 'translateNegation'],
+            'Function' => [$this, 'translateFunction'],
+            'Pseudo' => [$this, 'translatePseudo'],
+            'Attribute' => [$this, 'translateAttribute'],
+            'Class' => [$this, 'translateClass'],
+            'Hash' => [$this, 'translateHash'],
+            'Element' => [$this, 'translateElement'],
+        ];
     }
 
-    /**
-     * @return XPathExpr
-     */
-    public function translateSelector(Node\SelectorNode $node, Translator $translator)
+    public function translateSelector(Node\SelectorNode $node, Translator $translator): XPathExpr
     {
         return $translator->nodeToXPath($node->getTree());
     }
 
-    /**
-     * @return XPathExpr
-     */
-    public function translateCombinedSelector(Node\CombinedSelectorNode $node, Translator $translator)
+    public function translateCombinedSelector(Node\CombinedSelectorNode $node, Translator $translator): XPathExpr
     {
         return $translator->addCombination($node->getCombinator(), $node->getSelector(), $node->getSubSelector());
     }
 
-    /**
-     * @return XPathExpr
-     */
-    public function translateNegation(Node\NegationNode $node, Translator $translator)
+    public function translateNegation(Node\NegationNode $node, Translator $translator): XPathExpr
     {
         $xpath = $translator->nodeToXPath($node->getSelector());
         $subXpath = $translator->nodeToXPath($node->getSubSelector());
@@ -120,30 +100,21 @@ public function translateNegation(Node\NegationNode $node, Translator $translato
         return $xpath->addCondition('0');
     }
 
-    /**
-     * @return XPathExpr
-     */
-    public function translateFunction(Node\FunctionNode $node, Translator $translator)
+    public function translateFunction(Node\FunctionNode $node, Translator $translator): XPathExpr
     {
         $xpath = $translator->nodeToXPath($node->getSelector());
 
         return $translator->addFunction($xpath, $node);
     }
 
-    /**
-     * @return XPathExpr
-     */
-    public function translatePseudo(Node\PseudoNode $node, Translator $translator)
+    public function translatePseudo(Node\PseudoNode $node, Translator $translator): XPathExpr
     {
         $xpath = $translator->nodeToXPath($node->getSelector());
 
         return $translator->addPseudoClass($xpath, $node->getIdentifier());
     }
 
-    /**
-     * @return XPathExpr
-     */
-    public function translateAttribute(Node\AttributeNode $node, Translator $translator)
+    public function translateAttribute(Node\AttributeNode $node, Translator $translator): XPathExpr
     {
         $name = $node->getAttribute();
         $safe = $this->isSafeName($name);
@@ -168,30 +139,21 @@ public function translateAttribute(Node\AttributeNode $node, Translator $transla
         return $translator->addAttributeMatching($xpath, $node->getOperator(), $attribute, $value);
     }
 
-    /**
-     * @return XPathExpr
-     */
-    public function translateClass(Node\ClassNode $node, Translator $translator)
+    public function translateClass(Node\ClassNode $node, Translator $translator): XPathExpr
     {
         $xpath = $translator->nodeToXPath($node->getSelector());
 
         return $translator->addAttributeMatching($xpath, '~=', '@class', $node->getName());
     }
 
-    /**
-     * @return XPathExpr
-     */
-    public function translateHash(Node\HashNode $node, Translator $translator)
+    public function translateHash(Node\HashNode $node, Translator $translator): XPathExpr
     {
         $xpath = $translator->nodeToXPath($node->getSelector());
 
         return $translator->addAttributeMatching($xpath, '=', '@id', $node->getId());
     }
 
-    /**
-     * @return XPathExpr
-     */
-    public function translateElement(Node\ElementNode $node)
+    public function translateElement(Node\ElementNode $node): XPathExpr
     {
         $element = $node->getElement();
 
@@ -223,19 +185,12 @@ public function translateElement(Node\ElementNode $node)
     /**
      * {@inheritdoc}
      */
-    public function getName()
+    public function getName(): string
     {
         return 'node';
     }
 
-    /**
-     * Tests if given name is safe.
-     *
-     * @param string $name
-     *
-     * @return bool
-     */
-    private function isSafeName($name)
+    private function isSafeName(string $name): bool
     {
         return 0 < preg_match('~^[a-zA-Z_][a-zA-Z0-9_.-]*$~', $name);
     }
diff --git a/vendor/symfony/css-selector/XPath/Extension/PseudoClassExtension.php b/vendor/symfony/css-selector/XPath/Extension/PseudoClassExtension.php
index 378dfb7de17736700131d27cc3b88964f6252ffb..a50b0486ac8e2c3fe7ff21cd6f280a13850911e0 100644
--- a/vendor/symfony/css-selector/XPath/Extension/PseudoClassExtension.php
+++ b/vendor/symfony/css-selector/XPath/Extension/PseudoClassExtension.php
@@ -29,32 +29,26 @@ class PseudoClassExtension extends AbstractExtension
     /**
      * {@inheritdoc}
      */
-    public function getPseudoClassTranslators()
+    public function getPseudoClassTranslators(): array
     {
-        return array(
-            'root' => array($this, 'translateRoot'),
-            'first-child' => array($this, 'translateFirstChild'),
-            'last-child' => array($this, 'translateLastChild'),
-            'first-of-type' => array($this, 'translateFirstOfType'),
-            'last-of-type' => array($this, 'translateLastOfType'),
-            'only-child' => array($this, 'translateOnlyChild'),
-            'only-of-type' => array($this, 'translateOnlyOfType'),
-            'empty' => array($this, 'translateEmpty'),
-        );
+        return [
+            'root' => [$this, 'translateRoot'],
+            'first-child' => [$this, 'translateFirstChild'],
+            'last-child' => [$this, 'translateLastChild'],
+            'first-of-type' => [$this, 'translateFirstOfType'],
+            'last-of-type' => [$this, 'translateLastOfType'],
+            'only-child' => [$this, 'translateOnlyChild'],
+            'only-of-type' => [$this, 'translateOnlyOfType'],
+            'empty' => [$this, 'translateEmpty'],
+        ];
     }
 
-    /**
-     * @return XPathExpr
-     */
-    public function translateRoot(XPathExpr $xpath)
+    public function translateRoot(XPathExpr $xpath): XPathExpr
     {
         return $xpath->addCondition('not(parent::*)');
     }
 
-    /**
-     * @return XPathExpr
-     */
-    public function translateFirstChild(XPathExpr $xpath)
+    public function translateFirstChild(XPathExpr $xpath): XPathExpr
     {
         return $xpath
             ->addStarPrefix()
@@ -62,10 +56,7 @@ public function translateFirstChild(XPathExpr $xpath)
             ->addCondition('position() = 1');
     }
 
-    /**
-     * @return XPathExpr
-     */
-    public function translateLastChild(XPathExpr $xpath)
+    public function translateLastChild(XPathExpr $xpath): XPathExpr
     {
         return $xpath
             ->addStarPrefix()
@@ -74,11 +65,9 @@ public function translateLastChild(XPathExpr $xpath)
     }
 
     /**
-     * @return XPathExpr
-     *
      * @throws ExpressionErrorException
      */
-    public function translateFirstOfType(XPathExpr $xpath)
+    public function translateFirstOfType(XPathExpr $xpath): XPathExpr
     {
         if ('*' === $xpath->getElement()) {
             throw new ExpressionErrorException('"*:first-of-type" is not implemented.');
@@ -90,11 +79,9 @@ public function translateFirstOfType(XPathExpr $xpath)
     }
 
     /**
-     * @return XPathExpr
-     *
      * @throws ExpressionErrorException
      */
-    public function translateLastOfType(XPathExpr $xpath)
+    public function translateLastOfType(XPathExpr $xpath): XPathExpr
     {
         if ('*' === $xpath->getElement()) {
             throw new ExpressionErrorException('"*:last-of-type" is not implemented.');
@@ -105,10 +92,7 @@ public function translateLastOfType(XPathExpr $xpath)
             ->addCondition('position() = last()');
     }
 
-    /**
-     * @return XPathExpr
-     */
-    public function translateOnlyChild(XPathExpr $xpath)
+    public function translateOnlyChild(XPathExpr $xpath): XPathExpr
     {
         return $xpath
             ->addStarPrefix()
@@ -116,24 +100,14 @@ public function translateOnlyChild(XPathExpr $xpath)
             ->addCondition('last() = 1');
     }
 
-    /**
-     * @return XPathExpr
-     *
-     * @throws ExpressionErrorException
-     */
-    public function translateOnlyOfType(XPathExpr $xpath)
+    public function translateOnlyOfType(XPathExpr $xpath): XPathExpr
     {
-        if ('*' === $xpath->getElement()) {
-            throw new ExpressionErrorException('"*:only-of-type" is not implemented.');
-        }
+        $element = $xpath->getElement();
 
-        return $xpath->addCondition('last() = 1');
+        return $xpath->addCondition(sprintf('count(preceding-sibling::%s)=0 and count(following-sibling::%s)=0', $element, $element));
     }
 
-    /**
-     * @return XPathExpr
-     */
-    public function translateEmpty(XPathExpr $xpath)
+    public function translateEmpty(XPathExpr $xpath): XPathExpr
     {
         return $xpath->addCondition('not(*) and not(string-length())');
     }
@@ -141,7 +115,7 @@ public function translateEmpty(XPathExpr $xpath)
     /**
      * {@inheritdoc}
      */
-    public function getName()
+    public function getName(): string
     {
         return 'pseudo-class';
     }
diff --git a/vendor/symfony/css-selector/XPath/Translator.php b/vendor/symfony/css-selector/XPath/Translator.php
index dcf9071ed958641dc088850afb7f395f1d87322c..d1b65187ecbd12d01c9eeecda3aa8bdacd6fa6f5 100644
--- a/vendor/symfony/css-selector/XPath/Translator.php
+++ b/vendor/symfony/css-selector/XPath/Translator.php
@@ -35,18 +35,18 @@ class Translator implements TranslatorInterface
     /**
      * @var ParserInterface[]
      */
-    private $shortcutParsers = array();
+    private $shortcutParsers = [];
 
     /**
      * @var Extension\ExtensionInterface[]
      */
-    private $extensions = array();
+    private $extensions = [];
 
-    private $nodeTranslators = array();
-    private $combinationTranslators = array();
-    private $functionTranslators = array();
-    private $pseudoClassTranslators = array();
-    private $attributeMatchingTranslators = array();
+    private $nodeTranslators = [];
+    private $combinationTranslators = [];
+    private $functionTranslators = [];
+    private $pseudoClassTranslators = [];
+    private $attributeMatchingTranslators = [];
 
     public function __construct(ParserInterface $parser = null)
     {
@@ -61,12 +61,7 @@ public function __construct(ParserInterface $parser = null)
         ;
     }
 
-    /**
-     * @param string $element
-     *
-     * @return string
-     */
-    public static function getXpathLiteral($element)
+    public static function getXpathLiteral(string $element): string
     {
         if (false === strpos($element, "'")) {
             return "'".$element."'";
@@ -77,7 +72,7 @@ public static function getXpathLiteral($element)
         }
 
         $string = $element;
-        $parts = array();
+        $parts = [];
         while (true) {
             if (false !== $pos = strpos($string, "'")) {
                 $parts[] = sprintf("'%s'", substr($string, 0, $pos));
@@ -89,13 +84,13 @@ public static function getXpathLiteral($element)
             }
         }
 
-        return sprintf('concat(%s)', implode($parts, ', '));
+        return sprintf('concat(%s)', implode(', ', $parts));
     }
 
     /**
      * {@inheritdoc}
      */
-    public function cssToXPath($cssExpr, $prefix = 'descendant-or-self::')
+    public function cssToXPath(string $cssExpr, string $prefix = 'descendant-or-self::'): string
     {
         $selectors = $this->parseSelectors($cssExpr);
 
@@ -114,17 +109,15 @@ public function cssToXPath($cssExpr, $prefix = 'descendant-or-self::')
     /**
      * {@inheritdoc}
      */
-    public function selectorToXPath(SelectorNode $selector, $prefix = 'descendant-or-self::')
+    public function selectorToXPath(SelectorNode $selector, string $prefix = 'descendant-or-self::'): string
     {
         return ($prefix ?: '').$this->nodeToXPath($selector);
     }
 
     /**
-     * Registers an extension.
-     *
      * @return $this
      */
-    public function registerExtension(Extension\ExtensionInterface $extension)
+    public function registerExtension(Extension\ExtensionInterface $extension): self
     {
         $this->extensions[$extension->getName()] = $extension;
 
@@ -138,13 +131,9 @@ public function registerExtension(Extension\ExtensionInterface $extension)
     }
 
     /**
-     * @param string $name
-     *
-     * @return Extension\ExtensionInterface
-     *
      * @throws ExpressionErrorException
      */
-    public function getExtension($name)
+    public function getExtension(string $name): Extension\ExtensionInterface
     {
         if (!isset($this->extensions[$name])) {
             throw new ExpressionErrorException(sprintf('Extension "%s" not registered.', $name));
@@ -154,11 +143,9 @@ public function getExtension($name)
     }
 
     /**
-     * Registers a shortcut parser.
-     *
      * @return $this
      */
-    public function registerParserShortcut(ParserInterface $shortcut)
+    public function registerParserShortcut(ParserInterface $shortcut): self
     {
         $this->shortcutParsers[] = $shortcut;
 
@@ -166,93 +153,69 @@ public function registerParserShortcut(ParserInterface $shortcut)
     }
 
     /**
-     * @return XPathExpr
-     *
      * @throws ExpressionErrorException
      */
-    public function nodeToXPath(NodeInterface $node)
+    public function nodeToXPath(NodeInterface $node): XPathExpr
     {
         if (!isset($this->nodeTranslators[$node->getNodeName()])) {
             throw new ExpressionErrorException(sprintf('Node "%s" not supported.', $node->getNodeName()));
         }
 
-        return \call_user_func($this->nodeTranslators[$node->getNodeName()], $node, $this);
+        return $this->nodeTranslators[$node->getNodeName()]($node, $this);
     }
 
     /**
-     * @param string        $combiner
-     * @param NodeInterface $xpath
-     * @param NodeInterface $combinedXpath
-     *
-     * @return XPathExpr
-     *
      * @throws ExpressionErrorException
      */
-    public function addCombination($combiner, NodeInterface $xpath, NodeInterface $combinedXpath)
+    public function addCombination(string $combiner, NodeInterface $xpath, NodeInterface $combinedXpath): XPathExpr
     {
         if (!isset($this->combinationTranslators[$combiner])) {
             throw new ExpressionErrorException(sprintf('Combiner "%s" not supported.', $combiner));
         }
 
-        return \call_user_func($this->combinationTranslators[$combiner], $this->nodeToXPath($xpath), $this->nodeToXPath($combinedXpath));
+        return $this->combinationTranslators[$combiner]($this->nodeToXPath($xpath), $this->nodeToXPath($combinedXpath));
     }
 
     /**
-     * @return XPathExpr
-     *
      * @throws ExpressionErrorException
      */
-    public function addFunction(XPathExpr $xpath, FunctionNode $function)
+    public function addFunction(XPathExpr $xpath, FunctionNode $function): XPathExpr
     {
         if (!isset($this->functionTranslators[$function->getName()])) {
             throw new ExpressionErrorException(sprintf('Function "%s" not supported.', $function->getName()));
         }
 
-        return \call_user_func($this->functionTranslators[$function->getName()], $xpath, $function);
+        return $this->functionTranslators[$function->getName()]($xpath, $function);
     }
 
     /**
-     * @param XPathExpr $xpath
-     * @param string    $pseudoClass
-     *
-     * @return XPathExpr
-     *
      * @throws ExpressionErrorException
      */
-    public function addPseudoClass(XPathExpr $xpath, $pseudoClass)
+    public function addPseudoClass(XPathExpr $xpath, string $pseudoClass): XPathExpr
     {
         if (!isset($this->pseudoClassTranslators[$pseudoClass])) {
             throw new ExpressionErrorException(sprintf('Pseudo-class "%s" not supported.', $pseudoClass));
         }
 
-        return \call_user_func($this->pseudoClassTranslators[$pseudoClass], $xpath);
+        return $this->pseudoClassTranslators[$pseudoClass]($xpath);
     }
 
     /**
-     * @param XPathExpr $xpath
-     * @param string    $operator
-     * @param string    $attribute
-     * @param string    $value
-     *
-     * @return XPathExpr
-     *
      * @throws ExpressionErrorException
      */
-    public function addAttributeMatching(XPathExpr $xpath, $operator, $attribute, $value)
+    public function addAttributeMatching(XPathExpr $xpath, string $operator, string $attribute, $value): XPathExpr
     {
         if (!isset($this->attributeMatchingTranslators[$operator])) {
             throw new ExpressionErrorException(sprintf('Attribute matcher operator "%s" not supported.', $operator));
         }
 
-        return \call_user_func($this->attributeMatchingTranslators[$operator], $xpath, $attribute, $value);
+        return $this->attributeMatchingTranslators[$operator]($xpath, $attribute, $value);
     }
 
     /**
-     * @param string $css
-     *
      * @return SelectorNode[]
      */
-    private function parseSelectors($css)
+    private function parseSelectors(string $css): array
     {
         foreach ($this->shortcutParsers as $shortcut) {
             $tokens = $shortcut->parse($css);
diff --git a/vendor/symfony/css-selector/XPath/TranslatorInterface.php b/vendor/symfony/css-selector/XPath/TranslatorInterface.php
index 0b5de83d5712487a6fdb7b8b403fe1e4314cf3a4..c19eefb9c99d0171d2f23a7021df8a6bcd77a426 100644
--- a/vendor/symfony/css-selector/XPath/TranslatorInterface.php
+++ b/vendor/symfony/css-selector/XPath/TranslatorInterface.php
@@ -27,21 +27,11 @@ interface TranslatorInterface
 {
     /**
      * Translates a CSS selector to an XPath expression.
-     *
-     * @param string $cssExpr
-     * @param string $prefix
-     *
-     * @return string
      */
-    public function cssToXPath($cssExpr, $prefix = 'descendant-or-self::');
+    public function cssToXPath(string $cssExpr, string $prefix = 'descendant-or-self::'): string;
 
     /**
      * Translates a parsed selector node to an XPath expression.
-     *
-     * @param SelectorNode $selector
-     * @param string       $prefix
-     *
-     * @return string
      */
-    public function selectorToXPath(SelectorNode $selector, $prefix = 'descendant-or-self::');
+    public function selectorToXPath(SelectorNode $selector, string $prefix = 'descendant-or-self::'): string;
 }
diff --git a/vendor/symfony/css-selector/XPath/XPathExpr.php b/vendor/symfony/css-selector/XPath/XPathExpr.php
index a1e244c9e45d8214aead05dddc38c1bcfe8b8334..638cbd0fe06190ba565bc82327f344a2cfc0794f 100644
--- a/vendor/symfony/css-selector/XPath/XPathExpr.php
+++ b/vendor/symfony/css-selector/XPath/XPathExpr.php
@@ -27,13 +27,7 @@ class XPathExpr
     private $element;
     private $condition;
 
-    /**
-     * @param string $path
-     * @param string $element
-     * @param string $condition
-     * @param bool   $starPrefix
-     */
-    public function __construct($path = '', $element = '*', $condition = '', $starPrefix = false)
+    public function __construct(string $path = '', string $element = '*', string $condition = '', bool $starPrefix = false)
     {
         $this->path = $path;
         $this->element = $element;
@@ -44,36 +38,24 @@ public function __construct($path = '', $element = '*', $condition = '', $starPr
         }
     }
 
-    /**
-     * @return string
-     */
-    public function getElement()
+    public function getElement(): string
     {
         return $this->element;
     }
 
-    /**
-     * @return $this
-     */
-    public function addCondition($condition)
+    public function addCondition(string $condition): self
     {
         $this->condition = $this->condition ? sprintf('(%s) and (%s)', $this->condition, $condition) : $condition;
 
         return $this;
     }
 
-    /**
-     * @return string
-     */
-    public function getCondition()
+    public function getCondition(): string
     {
         return $this->condition;
     }
 
-    /**
-     * @return $this
-     */
-    public function addNameTest()
+    public function addNameTest(): self
     {
         if ('*' !== $this->element) {
             $this->addCondition('name() = '.Translator::getXpathLiteral($this->element));
@@ -83,10 +65,7 @@ public function addNameTest()
         return $this;
     }
 
-    /**
-     * @return $this
-     */
-    public function addStarPrefix()
+    public function addStarPrefix(): self
     {
         $this->path .= '*/';
 
@@ -96,12 +75,9 @@ public function addStarPrefix()
     /**
      * Joins another XPathExpr with a combiner.
      *
-     * @param string    $combiner
-     * @param XPathExpr $expr
-     *
      * @return $this
      */
-    public function join($combiner, self $expr)
+    public function join(string $combiner, self $expr): self
     {
         $path = $this->__toString().$combiner;
 
@@ -116,10 +92,7 @@ public function join($combiner, self $expr)
         return $this;
     }
 
-    /**
-     * @return string
-     */
-    public function __toString()
+    public function __toString(): string
     {
         $path = $this->path.$this->element;
         $condition = null === $this->condition || '' === $this->condition ? '' : '['.$this->condition.']';
diff --git a/vendor/symfony/css-selector/composer.json b/vendor/symfony/css-selector/composer.json
index 56ab35b81408af4c43eb4a6d6e21f46b12f375e9..667e443ce89cb4554a9dc9e76b9ddc4e0c192b12 100644
--- a/vendor/symfony/css-selector/composer.json
+++ b/vendor/symfony/css-selector/composer.json
@@ -20,7 +20,7 @@
         }
     ],
     "require": {
-        "php": "^5.5.9|>=7.0.8"
+        "php": ">=7.1.3"
     },
     "autoload": {
         "psr-4": { "Symfony\\Component\\CssSelector\\": "" },
@@ -28,10 +28,5 @@
             "/Tests/"
         ]
     },
-    "minimum-stability": "dev",
-    "extra": {
-        "branch-alias": {
-            "dev-master": "3.4-dev"
-        }
-    }
+    "minimum-stability": "dev"
 }
diff --git a/vendor/symfony/css-selector/phpunit.xml.dist b/vendor/symfony/css-selector/phpunit.xml.dist
deleted file mode 100644
index 65ff1827a3babc55824df746e24760d2eba4a31f..0000000000000000000000000000000000000000
--- a/vendor/symfony/css-selector/phpunit.xml.dist
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/4.1/phpunit.xsd"
-         backupGlobals="false"
-         colors="true"
-         bootstrap="vendor/autoload.php"
-         failOnRisky="true"
-         failOnWarning="true"
->
-    <php>
-        <ini name="error_reporting" value="-1" />
-    </php>
-
-    <testsuites>
-        <testsuite name="Symfony CssSelector Component Test Suite">
-            <directory>./Tests/</directory>
-        </testsuite>
-    </testsuites>
-
-    <filter>
-        <whitelist>
-            <directory>./</directory>
-            <exclude>
-                <directory>./Resources</directory>
-                <directory>./Tests</directory>
-                <directory>./vendor</directory>
-            </exclude>
-        </whitelist>
-    </filter>
-</phpunit>
diff --git a/vendor/symfony/dom-crawler/AbstractUriElement.php b/vendor/symfony/dom-crawler/AbstractUriElement.php
index 192d7922f479d31f9ca33939004f8501c5ba03db..1ef51df59be6b51869cd8d04ed13ff3d43228349 100644
--- a/vendor/symfony/dom-crawler/AbstractUriElement.php
+++ b/vendor/symfony/dom-crawler/AbstractUriElement.php
@@ -36,19 +36,21 @@ abstract class AbstractUriElement
     /**
      * @param \DOMElement $node       A \DOMElement instance
      * @param string      $currentUri The URI of the page where the link is embedded (or the base href)
-     * @param string      $method     The method to use for the link (get by default)
+     * @param string      $method     The method to use for the link (GET by default)
      *
      * @throws \InvalidArgumentException if the node is not a link
      */
-    public function __construct(\DOMElement $node, $currentUri, $method = 'GET')
+    public function __construct(\DOMElement $node, string $currentUri = null, ?string $method = 'GET')
     {
-        if (!\in_array(strtolower(substr($currentUri, 0, 4)), array('http', 'file'))) {
-            throw new \InvalidArgumentException(sprintf('Current URI must be an absolute URL ("%s").', $currentUri));
-        }
-
         $this->setNode($node);
         $this->method = $method ? strtoupper($method) : null;
         $this->currentUri = $currentUri;
+
+        $elementUriIsRelative = null === parse_url(trim($this->getRawUri()), PHP_URL_SCHEME);
+        $baseUriIsAbsolute = \in_array(strtolower(substr($this->currentUri, 0, 4)), ['http', 'file']);
+        if ($elementUriIsRelative && !$baseUriIsAbsolute) {
+            throw new \InvalidArgumentException(sprintf('The URL of the element is relative, so you must define its base URI passing an absolute URL to the constructor of the %s class ("%s" was passed).', __CLASS__, $this->currentUri));
+        }
     }
 
     /**
@@ -144,7 +146,7 @@ protected function canonicalizePath($path)
             $path .= '/';
         }
 
-        $output = array();
+        $output = [];
 
         foreach (explode('/', $path) as $segment) {
             if ('..' === $segment) {
@@ -168,24 +170,16 @@ abstract protected function setNode(\DOMElement $node);
 
     /**
      * Removes the query string and the anchor from the given uri.
-     *
-     * @param string $uri The uri to clean
-     *
-     * @return string
      */
-    private function cleanupUri($uri)
+    private function cleanupUri(string $uri): string
     {
         return $this->cleanupQuery($this->cleanupAnchor($uri));
     }
 
     /**
      * Remove the query string from the uri.
-     *
-     * @param string $uri
-     *
-     * @return string
      */
-    private function cleanupQuery($uri)
+    private function cleanupQuery(string $uri): string
     {
         if (false !== $pos = strpos($uri, '?')) {
             return substr($uri, 0, $pos);
@@ -196,12 +190,8 @@ private function cleanupQuery($uri)
 
     /**
      * Remove the anchor from the uri.
-     *
-     * @param string $uri
-     *
-     * @return string
      */
-    private function cleanupAnchor($uri)
+    private function cleanupAnchor(string $uri): string
     {
         if (false !== $pos = strpos($uri, '#')) {
             return substr($uri, 0, $pos);
diff --git a/vendor/symfony/dom-crawler/CHANGELOG.md b/vendor/symfony/dom-crawler/CHANGELOG.md
index e65176f5ac0b4d040beb8f0c3275fa685b310a6d..dc773be06d65b58d4fc679ff51d5c3b5548b3881 100644
--- a/vendor/symfony/dom-crawler/CHANGELOG.md
+++ b/vendor/symfony/dom-crawler/CHANGELOG.md
@@ -1,6 +1,14 @@
 CHANGELOG
 =========
 
+4.2.0
+-----
+
+* The `$currentUri` constructor argument of the `AbstractUriElement`, `Link` and
+  `Image` classes is now optional.
+* The `Crawler::children()` method will have a new `$selector` argument in version 5.0, 
+  not defining it is deprecated.
+
 3.1.0
 -----
 
diff --git a/vendor/symfony/dom-crawler/Crawler.php b/vendor/symfony/dom-crawler/Crawler.php
index 4244700d6371b197f90a0b00a8d0c91dbe0c8111..1c99293c0d2134a324e836f30e79ad96027a4429 100644
--- a/vendor/symfony/dom-crawler/Crawler.php
+++ b/vendor/symfony/dom-crawler/Crawler.php
@@ -30,7 +30,7 @@ class Crawler implements \Countable, \IteratorAggregate
     /**
      * @var array A map of manually registered namespaces
      */
-    private $namespaces = array();
+    private $namespaces = [];
 
     /**
      * @var string The base href value
@@ -45,7 +45,7 @@ class Crawler implements \Countable, \IteratorAggregate
     /**
      * @var \DOMElement[]
      */
-    private $nodes = array();
+    private $nodes = [];
 
     /**
      * Whether the Crawler contains HTML or XML content (used when converting CSS to XPath).
@@ -59,7 +59,7 @@ class Crawler implements \Countable, \IteratorAggregate
      * @param string $uri      The current URI
      * @param string $baseHref The base href value
      */
-    public function __construct($node = null, $uri = null, $baseHref = null)
+    public function __construct($node = null, string $uri = null, string $baseHref = null)
     {
         $this->uri = $uri;
         $this->baseHref = $baseHref ?: $uri;
@@ -92,7 +92,7 @@ public function getBaseHref()
      */
     public function clear()
     {
-        $this->nodes = array();
+        $this->nodes = [];
         $this->document = null;
     }
 
@@ -129,7 +129,7 @@ public function add($node)
      * HTTP 1.1 specification.
      *
      * @param string      $content A string to parse as HTML/XML
-     * @param null|string $type    The content type of the string
+     * @param string|null $type    The content type of the string
      */
     public function addContent($content, $type = null)
     {
@@ -208,7 +208,7 @@ public function addHtmlContent($content, $charset = 'UTF-8')
 
         $this->addDocument($dom);
 
-        $base = $this->filterRelativeXPath('descendant-or-self::base')->extract(array('href'));
+        $base = $this->filterRelativeXPath('descendant-or-self::base')->extract(['href']);
 
         $baseHref = current($base);
         if (\count($base) && !empty($baseHref)) {
@@ -363,7 +363,7 @@ public function eq($position)
      */
     public function each(\Closure $closure)
     {
-        $data = array();
+        $data = [];
         foreach ($this->nodes as $i => $node) {
             $data[] = $closure($this->createSubCrawler($node), $i);
         }
@@ -395,7 +395,7 @@ public function slice($offset = 0, $length = null)
      */
     public function reduce(\Closure $closure)
     {
-        $nodes = array();
+        $nodes = [];
         foreach ($this->nodes as $i => $node) {
             if (false !== $closure($this->createSubCrawler($node), $i)) {
                 $nodes[] = $node;
@@ -487,7 +487,7 @@ public function parents()
         }
 
         $node = $this->getNode(0);
-        $nodes = array();
+        $nodes = [];
 
         while ($node = $node->parentNode) {
             if (XML_ELEMENT_NODE === $node->nodeType) {
@@ -501,19 +501,34 @@ public function parents()
     /**
      * Returns the children nodes of the current selection.
      *
+     * @param string|null $selector An optional CSS selector to filter children
+     *
      * @return self
      *
      * @throws \InvalidArgumentException When current node is empty
+     * @throws \RuntimeException         If the CssSelector Component is not available and $selector is provided
      */
-    public function children()
+    public function children(/* string $selector = null */)
     {
+        if (\func_num_args() < 1 && __CLASS__ !== \get_class($this) && __CLASS__ !== (new \ReflectionMethod($this, __FUNCTION__))->getDeclaringClass()->getName() && !$this instanceof \PHPUnit\Framework\MockObject\MockObject && !$this instanceof \Prophecy\Prophecy\ProphecySubjectInterface) {
+            @trigger_error(sprintf('The "%s()" method will have a new "string $selector = null" argument in version 5.0, not defining it is deprecated since Symfony 4.2.', __METHOD__), E_USER_DEPRECATED);
+        }
+        $selector = 0 < \func_num_args() ? func_get_arg(0) : null;
+
         if (!$this->nodes) {
             throw new \InvalidArgumentException('The current node list is empty.');
         }
 
+        if (null !== $selector) {
+            $converter = $this->createCssSelectorConverter();
+            $xpath = $converter->toXPath($selector, 'child::');
+
+            return $this->filterRelativeXPath($xpath);
+        }
+
         $node = $this->getNode(0)->firstChild;
 
-        return $this->createSubCrawler($node ? $this->sibling($node) : array());
+        return $this->createSubCrawler($node ? $this->sibling($node) : []);
     }
 
     /**
@@ -605,7 +620,7 @@ public function evaluate($xpath)
             throw new \LogicException('Cannot evaluate the expression on an uninitialized crawler.');
         }
 
-        $data = array();
+        $data = [];
         $domxpath = $this->createDOMXPath($this->document, $this->findNamespacePrefixes($xpath));
 
         foreach ($this->nodes as $node) {
@@ -626,7 +641,7 @@ public function evaluate($xpath)
      *
      * Example:
      *
-     * $crawler->filter('h1 a')->extract(array('_text', 'href'));
+     *     $crawler->filter('h1 a')->extract(['_text', 'href']);
      *
      * @param array $attributes An array of attributes
      *
@@ -637,9 +652,9 @@ public function extract($attributes)
         $attributes = (array) $attributes;
         $count = \count($attributes);
 
-        $data = array();
+        $data = [];
         foreach ($this->nodes as $node) {
-            $elements = array();
+            $elements = [];
             foreach ($attributes as $attribute) {
                 if ('_text' === $attribute) {
                     $elements[] = $node->nodeValue;
@@ -691,11 +706,7 @@ public function filterXPath($xpath)
      */
     public function filter($selector)
     {
-        if (!class_exists(CssSelectorConverter::class)) {
-            throw new \RuntimeException('To filter with a CSS selector, install the CssSelector component ("composer require symfony/css-selector"). Or use filterXpath instead.');
-        }
-
-        $converter = new CssSelectorConverter($this->isHtml);
+        $converter = $this->createCssSelectorConverter();
 
         // The CssSelector already prefixes the selector with descendant-or-self::
         return $this->filterRelativeXPath($converter->toXPath($selector));
@@ -710,10 +721,9 @@ public function filter($selector)
      */
     public function selectLink($value)
     {
-        $xpath = sprintf('descendant-or-self::a[contains(concat(\' \', normalize-space(string(.)), \' \'), %s) ', static::xpathLiteral(' '.$value.' ')).
-                            sprintf('or ./img[contains(concat(\' \', normalize-space(string(@alt)), \' \'), %s)]]', static::xpathLiteral(' '.$value.' '));
-
-        return $this->filterRelativeXPath($xpath);
+        return $this->filterRelativeXPath(
+            sprintf('descendant-or-self::a[contains(concat(\' \', normalize-space(string(.)), \' \'), %1$s) or ./img[contains(concat(\' \', normalize-space(string(@alt)), \' \'), %1$s)]]', static::xpathLiteral(' '.$value.' '))
+        );
     }
 
     /**
@@ -739,12 +749,9 @@ public function selectImage($value)
      */
     public function selectButton($value)
     {
-        $translate = 'translate(@type, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "abcdefghijklmnopqrstuvwxyz")';
-        $xpath = sprintf('descendant-or-self::input[((contains(%s, "submit") or contains(%1$s, "button")) and contains(concat(\' \', normalize-space(string(@value)), \' \'), %s)) ', $translate, static::xpathLiteral(' '.$value.' ')).
-                         sprintf('or (contains(%s, "image") and contains(concat(\' \', normalize-space(string(@alt)), \' \'), %s)) or @id=%s or @name=%s] ', $translate, static::xpathLiteral(' '.$value.' '), static::xpathLiteral($value), static::xpathLiteral($value)).
-                         sprintf('| descendant-or-self::button[contains(concat(\' \', normalize-space(string(.)), \' \'), %s) or @id=%s or @name=%s]', static::xpathLiteral(' '.$value.' '), static::xpathLiteral($value), static::xpathLiteral($value));
-
-        return $this->filterRelativeXPath($xpath);
+        return $this->filterRelativeXPath(
+            sprintf('descendant-or-self::input[((contains(%1$s, "submit") or contains(%1$s, "button")) and contains(concat(\' \', normalize-space(string(@value)), \' \'), %2$s)) or (contains(%1$s, "image") and contains(concat(\' \', normalize-space(string(@alt)), \' \'), %2$s)) or @id=%3$s or @name=%3$s] | descendant-or-self::button[contains(concat(\' \', normalize-space(string(.)), \' \'), %2$s) or @id=%3$s or @name=%3$s]', 'translate(@type, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "abcdefghijklmnopqrstuvwxyz")', static::xpathLiteral(' '.$value.' '), static::xpathLiteral($value))
+        );
     }
 
     /**
@@ -780,7 +787,7 @@ public function link($method = 'get')
      */
     public function links()
     {
-        $links = array();
+        $links = [];
         foreach ($this->nodes as $node) {
             if (!$node instanceof \DOMElement) {
                 throw new \InvalidArgumentException(sprintf('The current node list should contain only DOMElement instances, "%s" found.', \get_class($node)));
@@ -821,7 +828,7 @@ public function image()
      */
     public function images()
     {
-        $images = array();
+        $images = [];
         foreach ($this as $node) {
             if (!$node instanceof \DOMElement) {
                 throw new \InvalidArgumentException(sprintf('The current node list should contain only DOMElement instances, "%s" found.', \get_class($node)));
@@ -889,7 +896,7 @@ public function registerNamespace($prefix, $namespace)
      * Escaped characters are: quotes (") and apostrophe (').
      *
      *  Examples:
-     *  <code>
+     *
      *     echo Crawler::xpathLiteral('foo " bar');
      *     //prints 'foo " bar'
      *
@@ -898,7 +905,7 @@ public function registerNamespace($prefix, $namespace)
      *
      *     echo Crawler::xpathLiteral('a\'b"c');
      *     //prints concat('a', "'", 'b"c')
-     *  </code>
+     *
      *
      * @param string $s String to be escaped
      *
@@ -915,7 +922,7 @@ public static function xpathLiteral($s)
         }
 
         $string = $s;
-        $parts = array();
+        $parts = [];
         while (true) {
             if (false !== $pos = strpos($string, "'")) {
                 $parts[] = sprintf("'%s'", substr($string, 0, $pos));
@@ -958,17 +965,13 @@ private function filterRelativeXPath($xpath)
      *
      * The returned XPath will match elements matching the XPath inside the current crawler
      * when running in the context of a node of the crawler.
-     *
-     * @param string $xpath
-     *
-     * @return string
      */
-    private function relativize($xpath)
+    private function relativize(string $xpath): string
     {
-        $expressions = array();
+        $expressions = [];
 
         // An expression which will never match to replace expressions which cannot match in the crawler
-        // We cannot simply drop
+        // We cannot drop
         $nonMatchingExpression = 'a[name() = "b"]';
 
         $xpathLen = \strlen($xpath);
@@ -1083,10 +1086,11 @@ public function getIterator()
      */
     protected function sibling($node, $siblingDir = 'nextSibling')
     {
-        $nodes = array();
+        $nodes = [];
 
+        $currentNode = $this->getNode(0);
         do {
-            if ($node !== $this->getNode(0) && 1 === $node->nodeType) {
+            if ($node !== $currentNode && XML_ELEMENT_NODE === $node->nodeType) {
                 $nodes[] = $node;
             }
         } while ($node = $node->$siblingDir);
@@ -1095,14 +1099,9 @@ protected function sibling($node, $siblingDir = 'nextSibling')
     }
 
     /**
-     * @param \DOMDocument $document
-     * @param array        $prefixes
-     *
-     * @return \DOMXPath
-     *
      * @throws \InvalidArgumentException
      */
-    private function createDOMXPath(\DOMDocument $document, array $prefixes = array())
+    private function createDOMXPath(\DOMDocument $document, array $prefixes = []): \DOMXPath
     {
         $domxpath = new \DOMXPath($document);
 
@@ -1117,14 +1116,9 @@ private function createDOMXPath(\DOMDocument $document, array $prefixes = array(
     }
 
     /**
-     * @param \DOMXPath $domxpath
-     * @param string    $prefix
-     *
-     * @return string
-     *
      * @throws \InvalidArgumentException
      */
-    private function discoverNamespace(\DOMXPath $domxpath, $prefix)
+    private function discoverNamespace(\DOMXPath $domxpath, string $prefix): ?string
     {
         if (isset($this->namespaces[$prefix])) {
             return $this->namespaces[$prefix];
@@ -1136,20 +1130,17 @@ private function discoverNamespace(\DOMXPath $domxpath, $prefix)
         if ($node = $namespaces->item(0)) {
             return $node->nodeValue;
         }
+
+        return null;
     }
 
-    /**
-     * @param string $xpath
-     *
-     * @return array
-     */
-    private function findNamespacePrefixes($xpath)
+    private function findNamespacePrefixes(string $xpath): array
     {
         if (preg_match_all('/(?P<prefix>[a-z_][a-z_0-9\-\.]*+):[^"\/:]/i', $xpath, $matches)) {
             return array_unique($matches['prefix']);
         }
 
-        return array();
+        return [];
     }
 
     /**
@@ -1168,4 +1159,16 @@ private function createSubCrawler($nodes)
 
         return $crawler;
     }
+
+    /**
+     * @throws \RuntimeException If the CssSelector Component is not available
+     */
+    private function createCssSelectorConverter(): CssSelectorConverter
+    {
+        if (!class_exists(CssSelectorConverter::class)) {
+            throw new \LogicException('To filter with a CSS selector, install the CssSelector component ("composer require symfony/css-selector"). Or use filterXpath instead.');
+        }
+
+        return new CssSelectorConverter($this->isHtml);
+    }
 }
diff --git a/vendor/symfony/dom-crawler/Field/ChoiceFormField.php b/vendor/symfony/dom-crawler/Field/ChoiceFormField.php
index 6f112b535007971bca78a8b1304832c22d008216..8fa19037557a4864f11f11b9fd1d6593b4ff9713 100644
--- a/vendor/symfony/dom-crawler/Field/ChoiceFormField.php
+++ b/vendor/symfony/dom-crawler/Field/ChoiceFormField.php
@@ -45,7 +45,7 @@ class ChoiceFormField extends FormField
     public function hasValue()
     {
         // don't send a value for unchecked checkboxes
-        if (\in_array($this->type, array('checkbox', 'radio')) && null === $this->value) {
+        if (\in_array($this->type, ['checkbox', 'radio']) && null === $this->value) {
             return false;
         }
 
@@ -211,7 +211,7 @@ protected function initialize()
         }
 
         $this->value = null;
-        $this->options = array();
+        $this->options = [];
         $this->multiple = false;
 
         if ('input' == $this->node->nodeName) {
@@ -226,7 +226,7 @@ protected function initialize()
             $this->type = 'select';
             if ($this->node->hasAttribute('multiple')) {
                 $this->multiple = true;
-                $this->value = array();
+                $this->value = [];
                 $this->name = str_replace('[]', '', $this->name);
             }
 
@@ -254,14 +254,10 @@ protected function initialize()
 
     /**
      * Returns option value with associated disabled flag.
-     *
-     * @param \DOMElement $node
-     *
-     * @return array
      */
-    private function buildOptionValue(\DOMElement $node)
+    private function buildOptionValue(\DOMElement $node): array
     {
-        $option = array();
+        $option = [];
 
         $defaultDefaultValue = 'select' === $this->node->nodeName ? '' : 'on';
         $defaultValue = (isset($node->nodeValue) && !empty($node->nodeValue)) ? $node->nodeValue : $defaultDefaultValue;
@@ -301,7 +297,7 @@ public function containsOption($optionValue, $options)
      */
     public function availableOptionValues()
     {
-        $values = array();
+        $values = [];
 
         foreach ($this->options as $option) {
             $values[] = $option['value'];
diff --git a/vendor/symfony/dom-crawler/Field/FileFormField.php b/vendor/symfony/dom-crawler/Field/FileFormField.php
index 3288fc135a77846539368271803af23d87b969c2..9e21c9c4b9bd11952a4a6e4cef2f38d86c7f3f03 100644
--- a/vendor/symfony/dom-crawler/Field/FileFormField.php
+++ b/vendor/symfony/dom-crawler/Field/FileFormField.php
@@ -27,12 +27,12 @@ class FileFormField extends FormField
      */
     public function setErrorCode($error)
     {
-        $codes = array(UPLOAD_ERR_INI_SIZE, UPLOAD_ERR_FORM_SIZE, UPLOAD_ERR_PARTIAL, UPLOAD_ERR_NO_FILE, UPLOAD_ERR_NO_TMP_DIR, UPLOAD_ERR_CANT_WRITE, UPLOAD_ERR_EXTENSION);
+        $codes = [UPLOAD_ERR_INI_SIZE, UPLOAD_ERR_FORM_SIZE, UPLOAD_ERR_PARTIAL, UPLOAD_ERR_NO_FILE, UPLOAD_ERR_NO_TMP_DIR, UPLOAD_ERR_CANT_WRITE, UPLOAD_ERR_EXTENSION];
         if (!\in_array($error, $codes)) {
             throw new \InvalidArgumentException(sprintf('The error code %s is not valid.', $error));
         }
 
-        $this->value = array('name' => '', 'type' => '', 'tmp_name' => '', 'error' => $error, 'size' => 0);
+        $this->value = ['name' => '', 'type' => '', 'tmp_name' => '', 'error' => $error, 'size' => 0];
     }
 
     /**
@@ -60,7 +60,7 @@ public function setValue($value)
 
             // copy to a tmp location
             $tmp = sys_get_temp_dir().'/'.strtr(substr(base64_encode(hash('sha256', uniqid(mt_rand(), true), true)), 0, 7), '/', '_');
-            if (array_key_exists('extension', $info)) {
+            if (\array_key_exists('extension', $info)) {
                 $tmp .= '.'.$info['extension'];
             }
             if (is_file($tmp)) {
@@ -75,7 +75,7 @@ public function setValue($value)
             $value = '';
         }
 
-        $this->value = array('name' => $name, 'type' => '', 'tmp_name' => $value, 'error' => $error, 'size' => $size);
+        $this->value = ['name' => $name, 'type' => '', 'tmp_name' => $value, 'error' => $error, 'size' => $size];
     }
 
     /**
diff --git a/vendor/symfony/dom-crawler/Form.php b/vendor/symfony/dom-crawler/Form.php
index 8584e016b0d7e61ca7b43a3a65be938695a0907b..8bdd3643476019e6a239fc1b9f9d2b7562945a7e 100644
--- a/vendor/symfony/dom-crawler/Form.php
+++ b/vendor/symfony/dom-crawler/Form.php
@@ -44,7 +44,7 @@ class Form extends Link implements \ArrayAccess
      *
      * @throws \LogicException if the node is not a button inside a form tag
      */
-    public function __construct(\DOMElement $node, $currentUri, $method = null, $baseHref = null)
+    public function __construct(\DOMElement $node, string $currentUri = null, string $method = null, string $baseHref = null)
     {
         parent::__construct($node, $currentUri, $method);
         $this->baseHref = $baseHref;
@@ -87,7 +87,7 @@ public function setValues(array $values)
      */
     public function getValues()
     {
-        $values = array();
+        $values = [];
         foreach ($this->fields->all() as $name => $field) {
             if ($field->isDisabled()) {
                 continue;
@@ -108,11 +108,11 @@ public function getValues()
      */
     public function getFiles()
     {
-        if (!\in_array($this->getMethod(), array('POST', 'PUT', 'DELETE', 'PATCH'))) {
-            return array();
+        if (!\in_array($this->getMethod(), ['POST', 'PUT', 'DELETE', 'PATCH'])) {
+            return [];
         }
 
-        $files = array();
+        $files = [];
 
         foreach ($this->fields->all() as $name => $field) {
             if ($field->isDisabled()) {
@@ -137,13 +137,13 @@ public function getFiles()
      */
     public function getPhpValues()
     {
-        $values = array();
+        $values = [];
         foreach ($this->getValues() as $name => $value) {
-            $qs = http_build_query(array($name => $value), '', '&');
+            $qs = http_build_query([$name => $value], '', '&');
             if (!empty($qs)) {
                 parse_str($qs, $expandedValue);
                 $varName = substr($name, 0, \strlen(key($expandedValue)));
-                $values = array_replace_recursive($values, array($varName => current($expandedValue)));
+                $values = array_replace_recursive($values, [$varName => current($expandedValue)]);
             }
         }
 
@@ -164,9 +164,9 @@ public function getPhpValues()
      */
     public function getPhpFiles()
     {
-        $values = array();
+        $values = [];
         foreach ($this->getFiles() as $name => $value) {
-            $qs = http_build_query(array($name => $value), '', '&');
+            $qs = http_build_query([$name => $value], '', '&');
             if (!empty($qs)) {
                 parse_str($qs, $expandedValue);
                 $varName = substr($name, 0, \strlen(key($expandedValue)));
@@ -182,7 +182,7 @@ function (&$value, $key) {
 
                 reset($expandedValue);
 
-                $values = array_replace_recursive($values, array($varName => current($expandedValue)));
+                $values = array_replace_recursive($values, [$varName => current($expandedValue)]);
             }
         }
 
@@ -202,9 +202,9 @@ public function getUri()
     {
         $uri = parent::getUri();
 
-        if (!\in_array($this->getMethod(), array('POST', 'PUT', 'DELETE', 'PATCH'))) {
+        if (!\in_array($this->getMethod(), ['POST', 'PUT', 'DELETE', 'PATCH'])) {
             $query = parse_url($uri, PHP_URL_QUERY);
-            $currentParameters = array();
+            $currentParameters = [];
             if ($query) {
                 parse_str($query, $currentParameters);
             }
@@ -379,7 +379,7 @@ public function disableValidation()
     protected function setNode(\DOMElement $node)
     {
         $this->button = $node;
-        if ('button' === $node->nodeName || ('input' === $node->nodeName && \in_array(strtolower($node->getAttribute('type')), array('submit', 'button', 'image')))) {
+        if ('button' === $node->nodeName || ('input' === $node->nodeName && \in_array(strtolower($node->getAttribute('type')), ['submit', 'button', 'image']))) {
             if ($node->hasAttribute('form')) {
                 // if the node has the HTML5-compliant 'form' attribute, use it
                 $formId = $node->getAttribute('form');
@@ -443,14 +443,14 @@ private function initialize()
             // corresponding elements are either descendants or have a matching HTML5 form attribute
             $formId = Crawler::xpathLiteral($this->node->getAttribute('id'));
 
-            $fieldNodes = $xpath->query(sprintf('descendant::input[@form=%s] | descendant::button[@form=%1$s] | descendant::textarea[@form=%1$s] | descendant::select[@form=%1$s] | //form[@id=%1$s]//input[not(@form)] | //form[@id=%1$s]//button[not(@form)] | //form[@id=%1$s]//textarea[not(@form)] | //form[@id=%1$s]//select[not(@form)]', $formId));
+            $fieldNodes = $xpath->query(sprintf('( descendant::input[@form=%s] | descendant::button[@form=%1$s] | descendant::textarea[@form=%1$s] | descendant::select[@form=%1$s] | //form[@id=%1$s]//input[not(@form)] | //form[@id=%1$s]//button[not(@form)] | //form[@id=%1$s]//textarea[not(@form)] | //form[@id=%1$s]//select[not(@form)] )[not(ancestor::template)]', $formId));
             foreach ($fieldNodes as $node) {
                 $this->addField($node);
             }
         } else {
             // do the xpath query with $this->node as the context node, to only find descendant elements
             // however, descendant elements with form attribute are not part of this form
-            $fieldNodes = $xpath->query('descendant::input[not(@form)] | descendant::button[not(@form)] | descendant::textarea[not(@form)] | descendant::select[not(@form)]', $this->node);
+            $fieldNodes = $xpath->query('( descendant::input[not(@form)] | descendant::button[not(@form)] | descendant::textarea[not(@form)] | descendant::select[not(@form)] )[not(ancestor::template)]', $this->node);
             foreach ($fieldNodes as $node) {
                 $this->addField($node);
             }
@@ -480,7 +480,7 @@ private function addField(\DOMElement $node)
             }
         } elseif ('input' == $nodeName && 'file' == strtolower($node->getAttribute('type'))) {
             $this->set(new Field\FileFormField($node));
-        } elseif ('input' == $nodeName && !\in_array(strtolower($node->getAttribute('type')), array('submit', 'button', 'image'))) {
+        } elseif ('input' == $nodeName && !\in_array(strtolower($node->getAttribute('type')), ['submit', 'button', 'image'])) {
             $this->set(new Field\InputFormField($node));
         } elseif ('textarea' == $nodeName) {
             $this->set(new Field\TextareaFormField($node));
diff --git a/vendor/symfony/dom-crawler/FormFieldRegistry.php b/vendor/symfony/dom-crawler/FormFieldRegistry.php
index d2acb15adac06d6c07de5d5f8ec0b0b7c6186d46..8f432cfbbb830abb96f6298f188b0dfd67d92f3f 100644
--- a/vendor/symfony/dom-crawler/FormFieldRegistry.php
+++ b/vendor/symfony/dom-crawler/FormFieldRegistry.php
@@ -20,7 +20,7 @@
  */
 class FormFieldRegistry
 {
-    private $fields = array();
+    private $fields = [];
 
     private $base;
 
@@ -34,7 +34,7 @@ public function add(FormField $field)
         $target = &$this->fields;
         while ($segments) {
             if (!\is_array($target)) {
-                $target = array();
+                $target = [];
             }
             $path = array_shift($segments);
             if ('' === $path) {
@@ -57,7 +57,7 @@ public function remove($name)
         $target = &$this->fields;
         while (\count($segments) > 1) {
             $path = array_shift($segments);
-            if (!array_key_exists($path, $target)) {
+            if (!\array_key_exists($path, $target)) {
                 return;
             }
             $target = &$target[$path];
@@ -80,7 +80,7 @@ public function &get($name)
         $target = &$this->fields;
         while ($segments) {
             $path = array_shift($segments);
-            if (!array_key_exists($path, $target)) {
+            if (!\array_key_exists($path, $target)) {
                 throw new \InvalidArgumentException(sprintf('Unreachable field "%s"', $path));
             }
             $target = &$target[$path];
@@ -133,7 +133,7 @@ public function set($name, $value)
     /**
      * Returns the list of field with their value.
      *
-     * @return FormField[] The list of fields as array((string) Fully qualified name => (mixed) value)
+     * @return FormField[] The list of fields as [string] Fully qualified name => (mixed) value)
      */
     public function all()
     {
@@ -167,9 +167,9 @@ private static function create($base, array $values)
      * @param string $base   The name of the base field
      * @param array  $output The initial values
      *
-     * @return array The list of fields as array((string) Fully qualified name => (mixed) value)
+     * @return array The list of fields as [string] Fully qualified name => (mixed) value)
      */
-    private function walk(array $array, $base = '', array &$output = array())
+    private function walk(array $array, $base = '', array &$output = [])
     {
         foreach ($array as $k => $v) {
             $path = empty($base) ? $k : sprintf('%s[%s]', $base, $k);
@@ -186,9 +186,7 @@ private function walk(array $array, $base = '', array &$output = array())
     /**
      * Splits a field name into segments as a web browser would do.
      *
-     * <code>
-     *     getSegments('base[foo][3][]') = array('base', 'foo, '3', '');
-     * </code>
+     *     getSegments('base[foo][3][]') = ['base', 'foo, '3', ''];
      *
      * @param string $name The name of the field
      *
@@ -197,7 +195,7 @@ private function walk(array $array, $base = '', array &$output = array())
     private function getSegments($name)
     {
         if (preg_match('/^(?P<base>[^[]+)(?P<extra>(\[.*)|$)/', $name, $m)) {
-            $segments = array($m['base']);
+            $segments = [$m['base']];
             while (!empty($m['extra'])) {
                 $extra = $m['extra'];
                 if (preg_match('/^\[(?P<segment>.*?)\](?P<extra>.*)$/', $extra, $m)) {
@@ -210,6 +208,6 @@ private function getSegments($name)
             return $segments;
         }
 
-        return array($name);
+        return [$name];
     }
 }
diff --git a/vendor/symfony/dom-crawler/Image.php b/vendor/symfony/dom-crawler/Image.php
index 4d6403258057c9dd8fd8ee5ef58ab7ece93a962b..b1ac5ca2ccb42446f2fb9a98b0a58c5eba586733 100644
--- a/vendor/symfony/dom-crawler/Image.php
+++ b/vendor/symfony/dom-crawler/Image.php
@@ -16,7 +16,7 @@
  */
 class Image extends AbstractUriElement
 {
-    public function __construct(\DOMElement $node, $currentUri)
+    public function __construct(\DOMElement $node, string $currentUri = null)
     {
         parent::__construct($node, $currentUri, 'GET');
     }
diff --git a/vendor/symfony/dom-crawler/LICENSE b/vendor/symfony/dom-crawler/LICENSE
index 21d7fb9e2f29b50caca3a76f0647e94e2cc8ddc1..a677f43763ca467472898351b328aee41e2edd7c 100644
--- a/vendor/symfony/dom-crawler/LICENSE
+++ b/vendor/symfony/dom-crawler/LICENSE
@@ -1,4 +1,4 @@
-Copyright (c) 2004-2018 Fabien Potencier
+Copyright (c) 2004-2019 Fabien Potencier
 
 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to deal
diff --git a/vendor/symfony/dom-crawler/Tests/CrawlerTest.php b/vendor/symfony/dom-crawler/Tests/CrawlerTest.php
index 9b2d1241949d1cbc4d7a6b6021459f3663c92a0b..548fd1833f114114bef45568e0090aa4e12bc7c8 100644
--- a/vendor/symfony/dom-crawler/Tests/CrawlerTest.php
+++ b/vendor/symfony/dom-crawler/Tests/CrawlerTest.php
@@ -52,7 +52,7 @@ public function testAdd()
         $crawler->add($this->createNodeList());
         $this->assertEquals('foo', $crawler->filterXPath('//div')->attr('class'), '->add() adds nodes from a \DOMNodeList');
 
-        $list = array();
+        $list = [];
         foreach ($this->createNodeList() as $node) {
             $list[] = $node;
         }
@@ -269,7 +269,7 @@ public function testAddNodeList()
 
     public function testAddNodes()
     {
-        $list = array();
+        $list = [];
         foreach ($this->createNodeList() as $node) {
             $list[] = $node;
         }
@@ -314,7 +314,7 @@ public function testEach()
             return $i.'-'.$node->text();
         });
 
-        $this->assertEquals(array('0-One', '1-Two', '2-Three'), $data, '->each() executes an anonymous function on each node of the list');
+        $this->assertEquals(['0-One', '1-Two', '2-Three'], $data, '->each() executes an anonymous function on each node of the list');
     }
 
     public function testIteration()
@@ -411,11 +411,11 @@ public function testExtract()
     {
         $crawler = $this->createTestCrawler()->filterXPath('//ul[1]/li');
 
-        $this->assertEquals(array('One', 'Two', 'Three'), $crawler->extract('_text'), '->extract() returns an array of extracted data from the node list');
-        $this->assertEquals(array(array('One', 'first'), array('Two', ''), array('Three', '')), $crawler->extract(array('_text', 'class')), '->extract() returns an array of extracted data from the node list');
-        $this->assertEquals(array(array(), array(), array()), $crawler->extract(array()), '->extract() returns empty arrays if the attribute list is empty');
+        $this->assertEquals(['One', 'Two', 'Three'], $crawler->extract('_text'), '->extract() returns an array of extracted data from the node list');
+        $this->assertEquals([['One', 'first'], ['Two', ''], ['Three', '']], $crawler->extract(['_text', 'class']), '->extract() returns an array of extracted data from the node list');
+        $this->assertEquals([[], [], []], $crawler->extract([]), '->extract() returns empty arrays if the attribute list is empty');
 
-        $this->assertEquals(array(), $this->createTestCrawler()->filterXPath('//ol')->extract('_text'), '->extract() returns an empty array if the node list is empty');
+        $this->assertEquals([], $this->createTestCrawler()->filterXPath('//ol')->extract('_text'), '->extract() returns an empty array if the node list is empty');
     }
 
     public function testFilterXpathComplexQueries()
@@ -849,7 +849,7 @@ public function testLinks()
         $links = $crawler->links();
         $this->assertInstanceOf('Symfony\\Component\\DomCrawler\\Link', $links[0], '->links() returns an array of Link instances');
 
-        $this->assertEquals(array(), $this->createTestCrawler()->filterXPath('//ol')->links(), '->links() returns an empty array if the node selection is empty');
+        $this->assertEquals([], $this->createTestCrawler()->filterXPath('//ol')->links(), '->links() returns an empty array if the node selection is empty');
     }
 
     public function testImages()
@@ -861,7 +861,7 @@ public function testImages()
         $images = $crawler->images();
         $this->assertInstanceOf('Symfony\\Component\\DomCrawler\\Image', $images[0], '->images() returns an array of Image instances');
 
-        $this->assertEquals(array(), $this->createTestCrawler()->filterXPath('//ol')->links(), '->links() returns an empty array if the node selection is empty');
+        $this->assertEquals([], $this->createTestCrawler()->filterXPath('//ol')->links(), '->links() returns an empty array if the node selection is empty');
     }
 
     public function testForm()
@@ -874,9 +874,9 @@ public function testForm()
 
         $this->assertEquals($crawler->form()->getFormNode()->getAttribute('id'), $crawler2->form()->getFormNode()->getAttribute('id'), '->form() works on elements with form attribute');
 
-        $this->assertEquals(array('FooName' => 'FooBar', 'TextName' => 'TextValue', 'FooTextName' => 'FooTextValue'), $crawler->form(array('FooName' => 'FooBar'))->getValues(), '->form() takes an array of values to submit as its first argument');
-        $this->assertEquals(array('FooName' => 'FooValue', 'TextName' => 'TextValue', 'FooTextName' => 'FooTextValue'), $crawler->form()->getValues(), '->getValues() returns correct form values');
-        $this->assertEquals(array('FooBarName' => 'FooBarValue', 'TextName' => 'TextValue', 'FooTextName' => 'FooTextValue'), $crawler2->form()->getValues(), '->getValues() returns correct form values');
+        $this->assertEquals(['FooName' => 'FooBar', 'TextName' => 'TextValue', 'FooTextName' => 'FooTextValue'], $crawler->form(['FooName' => 'FooBar'])->getValues(), '->form() takes an array of values to submit as its first argument');
+        $this->assertEquals(['FooName' => 'FooValue', 'TextName' => 'TextValue', 'FooTextName' => 'FooTextValue'], $crawler->form()->getValues(), '->getValues() returns correct form values');
+        $this->assertEquals(['FooBarName' => 'FooBarValue', 'TextName' => 'TextValue', 'FooTextName' => 'FooTextValue'], $crawler2->form()->getValues(), '->getValues() returns correct form values');
 
         try {
             $this->createTestCrawler()->filterXPath('//ol')->form();
@@ -1004,6 +1004,37 @@ public function testChildren()
         }
     }
 
+    public function testFilteredChildren()
+    {
+        $html = <<<'HTML'
+<!DOCTYPE html>
+<html lang="en">
+<body>
+    <div id="foo">
+        <div class="lorem">
+            <p class="lorem"></p>
+        </div>
+        <div class="lorem">
+            <span class="lorem"></span>
+        </div>
+        <span class="ipsum"></span>
+    </div>
+</body>
+</html>
+HTML;
+
+        $crawler = new Crawler($html);
+        $foo = $crawler->filter('#foo');
+
+        $this->assertEquals(3, $foo->children()->count());
+        $this->assertEquals(2, $foo->children('.lorem')->count());
+        $this->assertEquals(2, $foo->children('div')->count());
+        $this->assertEquals(2, $foo->children('div.lorem')->count());
+        $this->assertEquals(1, $foo->children('span')->count());
+        $this->assertEquals(1, $foo->children('span.ipsum')->count());
+        $this->assertEquals(1, $foo->children('.ipsum')->count());
+    }
+
     public function testParents()
     {
         $crawler = $this->createTestCrawler()->filterXPath('//li[1]');
@@ -1035,13 +1066,13 @@ public function testBaseTag($baseValue, $linkValue, $expectedUri, $currentUri =
 
     public function getBaseTagData()
     {
-        return array(
-            array('http://base.com', 'link', 'http://base.com/link'),
-            array('//base.com', 'link', 'https://base.com/link', 'https://domain.com', '<base> tag can use a schema-less URL'),
-            array('path/', 'link', 'https://domain.com/path/link', 'https://domain.com', '<base> tag can set a path'),
-            array('http://base.com', '#', 'http://base.com#', 'http://domain.com/path/link', '<base> tag does work with links to an anchor'),
-            array('http://base.com', '', 'http://base.com', 'http://domain.com/path/link', '<base> tag does work with empty links'),
-        );
+        return [
+            ['http://base.com', 'link', 'http://base.com/link'],
+            ['//base.com', 'link', 'https://base.com/link', 'https://domain.com', '<base> tag can use a schema-less URL'],
+            ['path/', 'link', 'https://domain.com/path/link', 'https://domain.com', '<base> tag can set a path'],
+            ['http://base.com', '#', 'http://base.com#', 'http://domain.com/path/link', '<base> tag does work with links to an anchor'],
+            ['http://base.com', '', 'http://base.com', 'http://domain.com/path/link', '<base> tag does work with empty links'],
+        ];
     }
 
     /**
@@ -1055,14 +1086,15 @@ public function testBaseTagWithForm($baseValue, $actionValue, $expectedUri, $cur
 
     public function getBaseTagWithFormData()
     {
-        return array(
-            array('https://base.com/', 'link/', 'https://base.com/link/', 'https://base.com/link/', '<base> tag does work with a path and relative form action'),
-            array('/basepath', '/registration', 'http://domain.com/registration', 'http://domain.com/registration', '<base> tag does work with a path and form action'),
-            array('/basepath', '', 'http://domain.com/registration', 'http://domain.com/registration', '<base> tag does work with a path and empty form action'),
-            array('http://base.com/', '/registration', 'http://base.com/registration', 'http://domain.com/registration', '<base> tag does work with a URL and form action'),
-            array('http://base.com', '', 'http://domain.com/path/form', 'http://domain.com/path/form', '<base> tag does work with a URL and an empty form action'),
-            array('http://base.com/path', '/registration', 'http://base.com/registration', 'http://domain.com/path/form', '<base> tag does work with a URL and form action'),
-        );
+        return [
+            ['https://base.com/', 'link/', 'https://base.com/link/', 'https://base.com/link/', '<base> tag does work with a path and relative form action'],
+            ['/basepath', '/registration', 'http://domain.com/registration', 'http://domain.com/registration', '<base> tag does work with a path and form action'],
+            ['/basepath', '', 'http://domain.com/registration', 'http://domain.com/registration', '<base> tag does work with a path and empty form action'],
+            ['http://base.com/', '/registration', 'http://base.com/registration', 'http://domain.com/registration', '<base> tag does work with a URL and form action'],
+            ['http://base.com/', 'http://base.com/registration', 'http://base.com/registration', null, '<base> tag does work with a URL and form action'],
+            ['http://base.com', '', 'http://domain.com/path/form', 'http://domain.com/path/form', '<base> tag does work with a URL and an empty form action'],
+            ['http://base.com/path', '/registration', 'http://base.com/registration', 'http://domain.com/path/form', '<base> tag does work with a URL and form action'],
+        ];
     }
 
     public function testCountOfNestedElements()
@@ -1078,7 +1110,7 @@ public function testEvaluateReturnsTypedResultOfXPathExpressionOnADocumentSubset
 
         $result = $crawler->filterXPath('//form/input')->evaluate('substring-before(@name, "Name")');
 
-        $this->assertSame(array('Text', 'Foo', 'Bar'), $result);
+        $this->assertSame(['Text', 'Foo', 'Bar'], $result);
     }
 
     public function testEvaluateReturnsTypedResultOfNamespacedXPathExpressionOnADocumentSubset()
@@ -1087,7 +1119,7 @@ public function testEvaluateReturnsTypedResultOfNamespacedXPathExpressionOnADocu
 
         $result = $crawler->filterXPath('//yt:accessControl/@action')->evaluate('string(.)');
 
-        $this->assertSame(array('comment', 'videoRespond'), $result);
+        $this->assertSame(['comment', 'videoRespond'], $result);
     }
 
     public function testEvaluateReturnsTypedResultOfNamespacedXPathExpression()
@@ -1097,7 +1129,7 @@ public function testEvaluateReturnsTypedResultOfNamespacedXPathExpression()
 
         $result = $crawler->evaluate('string(//youtube:accessControl/@action)');
 
-        $this->assertSame(array('comment'), $result);
+        $this->assertSame(['comment'], $result);
     }
 
     public function testEvaluateReturnsACrawlerIfXPathExpressionEvaluatesToANode()
@@ -1117,6 +1149,62 @@ public function testEvaluateThrowsAnExceptionIfDocumentIsEmpty()
         (new Crawler())->evaluate('//form/input[1]');
     }
 
+    /**
+     * @group legacy
+     * @expectedDeprecation The "Symfony\Component\DomCrawler\Crawler::children()" method will have a new "string $selector = null" argument in version 5.0, not defining it is deprecated since Symfony 4.2.
+     */
+    public function testInheritedClassCallChildrenWithoutArgument()
+    {
+        $dom = new \DOMDocument();
+        $dom->loadHTML('
+            <html>
+                <body>
+                    <a href="foo">Foo</a>
+                    <a href="/foo">   Fabien\'s Foo   </a>
+                    <a href="/foo">Fabien"s Foo</a>
+                    <a href="/foo">\' Fabien"s Foo</a>
+
+                    <a href="/bar"><img alt="Bar"/></a>
+                    <a href="/bar"><img alt="   Fabien\'s Bar   "/></a>
+                    <a href="/bar"><img alt="Fabien&quot;s Bar"/></a>
+                    <a href="/bar"><img alt="\' Fabien&quot;s Bar"/></a>
+
+                    <a href="?get=param">GetLink</a>
+
+                    <a href="/example">Klausi|Claudiu</a>
+
+                    <form action="foo" id="FooFormId">
+                        <input type="text" value="TextValue" name="TextName" />
+                        <input type="submit" value="FooValue" name="FooName" id="FooId" />
+                        <input type="button" value="BarValue" name="BarName" id="BarId" />
+                        <button value="ButtonValue" name="ButtonName" id="ButtonId" />
+                    </form>
+
+                    <input type="submit" value="FooBarValue" name="FooBarName" form="FooFormId" />
+                    <input type="text" value="FooTextValue" name="FooTextName" form="FooFormId" />
+
+                    <ul class="first">
+                        <li class="first">One</li>
+                        <li>Two</li>
+                        <li>Three</li>
+                    </ul>
+                    <ul>
+                        <li>One Bis</li>
+                        <li>Two Bis</li>
+                        <li>Three Bis</li>
+                    </ul>
+                    <div id="parent">
+                        <div id="child"></div>
+                        <div id="child2" xmlns:foo="http://example.com"></div>
+                    </div>
+                    <div id="sibling"><img /></div>
+                </body>
+            </html>
+        ');
+        $crawlerChild = new ClassThatInheritCrawler($dom);
+        $crawlerChild->children();
+    }
+
     public function createTestCrawler($uri = null)
     {
         $dom = new \DOMDocument();
@@ -1203,3 +1291,11 @@ protected function createNodeList()
         return $domxpath->query('//div');
     }
 }
+
+class ClassThatInheritCrawler extends Crawler
+{
+    public function children()
+    {
+        parent::children();
+    }
+}
diff --git a/vendor/symfony/dom-crawler/Tests/Field/ChoiceFormFieldTest.php b/vendor/symfony/dom-crawler/Tests/Field/ChoiceFormFieldTest.php
index 959228630565111b267975320afc153b8629076d..61e776736a4b579a069adb817bccee914e6d22e3 100644
--- a/vendor/symfony/dom-crawler/Tests/Field/ChoiceFormFieldTest.php
+++ b/vendor/symfony/dom-crawler/Tests/Field/ChoiceFormFieldTest.php
@@ -25,7 +25,7 @@ public function testInitialize()
             $this->assertTrue(true, '->initialize() throws a \LogicException if the node is not an input or a select');
         }
 
-        $node = $this->createNode('input', '', array('type' => 'text'));
+        $node = $this->createNode('input', '', ['type' => 'text']);
         try {
             $field = new ChoiceFormField($node);
             $this->fail('->initialize() throws a \LogicException if the node is an input with a type different from checkbox or radio');
@@ -36,12 +36,12 @@ public function testInitialize()
 
     public function testGetType()
     {
-        $node = $this->createNode('input', '', array('type' => 'radio', 'name' => 'name', 'value' => 'foo'));
+        $node = $this->createNode('input', '', ['type' => 'radio', 'name' => 'name', 'value' => 'foo']);
         $field = new ChoiceFormField($node);
 
         $this->assertEquals('radio', $field->getType(), '->getType() returns radio for radio buttons');
 
-        $node = $this->createNode('input', '', array('type' => 'checkbox', 'name' => 'name', 'value' => 'foo'));
+        $node = $this->createNode('input', '', ['type' => 'checkbox', 'name' => 'name', 'value' => 'foo']);
         $field = new ChoiceFormField($node);
 
         $this->assertEquals('checkbox', $field->getType(), '->getType() returns radio for a checkbox');
@@ -54,12 +54,12 @@ public function testGetType()
 
     public function testIsMultiple()
     {
-        $node = $this->createNode('input', '', array('type' => 'radio', 'name' => 'name', 'value' => 'foo'));
+        $node = $this->createNode('input', '', ['type' => 'radio', 'name' => 'name', 'value' => 'foo']);
         $field = new ChoiceFormField($node);
 
         $this->assertFalse($field->isMultiple(), '->isMultiple() returns false for radio buttons');
 
-        $node = $this->createNode('input', '', array('type' => 'checkbox', 'name' => 'name', 'value' => 'foo'));
+        $node = $this->createNode('input', '', ['type' => 'checkbox', 'name' => 'name', 'value' => 'foo']);
         $field = new ChoiceFormField($node);
 
         $this->assertFalse($field->isMultiple(), '->isMultiple() returns false for checkboxes');
@@ -69,12 +69,12 @@ public function testIsMultiple()
 
         $this->assertFalse($field->isMultiple(), '->isMultiple() returns false for selects without the multiple attribute');
 
-        $node = $this->createNode('select', '', array('multiple' => 'multiple'));
+        $node = $this->createNode('select', '', ['multiple' => 'multiple']);
         $field = new ChoiceFormField($node);
 
         $this->assertTrue($field->isMultiple(), '->isMultiple() returns true for selects with the multiple attribute');
 
-        $node = $this->createNode('select', '', array('multiple' => ''));
+        $node = $this->createNode('select', '', ['multiple' => '']);
         $field = new ChoiceFormField($node);
 
         $this->assertTrue($field->isMultiple(), '->isMultiple() returns true for selects with an empty multiple attribute');
@@ -82,14 +82,14 @@ public function testIsMultiple()
 
     public function testSelects()
     {
-        $node = $this->createSelectNode(array('foo' => false, 'bar' => false));
+        $node = $this->createSelectNode(['foo' => false, 'bar' => false]);
         $field = new ChoiceFormField($node);
 
         $this->assertTrue($field->hasValue(), '->hasValue() returns true for selects');
         $this->assertEquals('foo', $field->getValue(), '->getValue() returns the first option if none are selected');
         $this->assertFalse($field->isMultiple(), '->isMultiple() returns false when no multiple attribute is defined');
 
-        $node = $this->createSelectNode(array('foo' => false, 'bar' => true));
+        $node = $this->createSelectNode(['foo' => false, 'bar' => true]);
         $field = new ChoiceFormField($node);
 
         $this->assertEquals('bar', $field->getValue(), '->getValue() returns the selected option');
@@ -105,7 +105,7 @@ public function testSelects()
         }
 
         try {
-            $field->setValue(array('foobar'));
+            $field->setValue(['foobar']);
             $this->fail('->setValue() throws an \InvalidArgumentException if the value is an array');
         } catch (\InvalidArgumentException $e) {
             $this->assertTrue(true, '->setValue() throws an \InvalidArgumentException if the value is an array');
@@ -114,7 +114,7 @@ public function testSelects()
 
     public function testSelectWithEmptyBooleanAttribute()
     {
-        $node = $this->createSelectNode(array('foo' => false, 'bar' => true), array(), '');
+        $node = $this->createSelectNode(['foo' => false, 'bar' => true], [], '');
         $field = new ChoiceFormField($node);
 
         $this->assertEquals('bar', $field->getValue());
@@ -122,7 +122,7 @@ public function testSelectWithEmptyBooleanAttribute()
 
     public function testSelectIsDisabled()
     {
-        $node = $this->createSelectNode(array('foo' => false, 'bar' => true), array('disabled' => 'disabled'));
+        $node = $this->createSelectNode(['foo' => false, 'bar' => true], ['disabled' => 'disabled']);
         $field = new ChoiceFormField($node);
 
         $this->assertTrue($field->isDisabled(), '->isDisabled() returns true for selects with a disabled attribute');
@@ -130,27 +130,27 @@ public function testSelectIsDisabled()
 
     public function testMultipleSelects()
     {
-        $node = $this->createSelectNode(array('foo' => false, 'bar' => false), array('multiple' => 'multiple'));
+        $node = $this->createSelectNode(['foo' => false, 'bar' => false], ['multiple' => 'multiple']);
         $field = new ChoiceFormField($node);
 
-        $this->assertEquals(array(), $field->getValue(), '->setValue() returns an empty array if multiple is true and no option is selected');
+        $this->assertEquals([], $field->getValue(), '->setValue() returns an empty array if multiple is true and no option is selected');
 
         $field->setValue('foo');
-        $this->assertEquals(array('foo'), $field->getValue(), '->setValue() returns an array of options if multiple is true');
+        $this->assertEquals(['foo'], $field->getValue(), '->setValue() returns an array of options if multiple is true');
 
         $field->setValue('bar');
-        $this->assertEquals(array('bar'), $field->getValue(), '->setValue() returns an array of options if multiple is true');
+        $this->assertEquals(['bar'], $field->getValue(), '->setValue() returns an array of options if multiple is true');
 
-        $field->setValue(array('foo', 'bar'));
-        $this->assertEquals(array('foo', 'bar'), $field->getValue(), '->setValue() returns an array of options if multiple is true');
+        $field->setValue(['foo', 'bar']);
+        $this->assertEquals(['foo', 'bar'], $field->getValue(), '->setValue() returns an array of options if multiple is true');
 
-        $node = $this->createSelectNode(array('foo' => true, 'bar' => true), array('multiple' => 'multiple'));
+        $node = $this->createSelectNode(['foo' => true, 'bar' => true], ['multiple' => 'multiple']);
         $field = new ChoiceFormField($node);
 
-        $this->assertEquals(array('foo', 'bar'), $field->getValue(), '->getValue() returns the selected options');
+        $this->assertEquals(['foo', 'bar'], $field->getValue(), '->getValue() returns the selected options');
 
         try {
-            $field->setValue(array('foobar'));
+            $field->setValue(['foobar']);
             $this->fail('->setValue() throws an \InvalidArgumentException if the value is not one of the options');
         } catch (\InvalidArgumentException $e) {
             $this->assertTrue(true, '->setValue() throws an \InvalidArgumentException if the value is not one of the options');
@@ -159,18 +159,18 @@ public function testMultipleSelects()
 
     public function testRadioButtons()
     {
-        $node = $this->createNode('input', '', array('type' => 'radio', 'name' => 'name', 'value' => 'foo'));
+        $node = $this->createNode('input', '', ['type' => 'radio', 'name' => 'name', 'value' => 'foo']);
         $field = new ChoiceFormField($node);
-        $node = $this->createNode('input', '', array('type' => 'radio', 'name' => 'name', 'value' => 'bar'));
+        $node = $this->createNode('input', '', ['type' => 'radio', 'name' => 'name', 'value' => 'bar']);
         $field->addChoice($node);
 
         $this->assertFalse($field->hasValue(), '->hasValue() returns false when no radio button is selected');
         $this->assertNull($field->getValue(), '->getValue() returns null if no radio button is selected');
         $this->assertFalse($field->isMultiple(), '->isMultiple() returns false for radio buttons');
 
-        $node = $this->createNode('input', '', array('type' => 'radio', 'name' => 'name', 'value' => 'foo'));
+        $node = $this->createNode('input', '', ['type' => 'radio', 'name' => 'name', 'value' => 'foo']);
         $field = new ChoiceFormField($node);
-        $node = $this->createNode('input', '', array('type' => 'radio', 'name' => 'name', 'value' => 'bar', 'checked' => 'checked'));
+        $node = $this->createNode('input', '', ['type' => 'radio', 'name' => 'name', 'value' => 'bar', 'checked' => 'checked']);
         $field->addChoice($node);
 
         $this->assertTrue($field->hasValue(), '->hasValue() returns true when a radio button is selected');
@@ -189,9 +189,9 @@ public function testRadioButtons()
 
     public function testRadioButtonsWithEmptyBooleanAttribute()
     {
-        $node = $this->createNode('input', '', array('type' => 'radio', 'name' => 'name', 'value' => 'foo'));
+        $node = $this->createNode('input', '', ['type' => 'radio', 'name' => 'name', 'value' => 'foo']);
         $field = new ChoiceFormField($node);
-        $node = $this->createNode('input', '', array('type' => 'radio', 'name' => 'name', 'value' => 'bar', 'checked' => ''));
+        $node = $this->createNode('input', '', ['type' => 'radio', 'name' => 'name', 'value' => 'bar', 'checked' => '']);
         $field->addChoice($node);
 
         $this->assertTrue($field->hasValue(), '->hasValue() returns true when a radio button is selected');
@@ -200,11 +200,11 @@ public function testRadioButtonsWithEmptyBooleanAttribute()
 
     public function testRadioButtonIsDisabled()
     {
-        $node = $this->createNode('input', '', array('type' => 'radio', 'name' => 'name', 'value' => 'foo', 'disabled' => 'disabled'));
+        $node = $this->createNode('input', '', ['type' => 'radio', 'name' => 'name', 'value' => 'foo', 'disabled' => 'disabled']);
         $field = new ChoiceFormField($node);
-        $node = $this->createNode('input', '', array('type' => 'radio', 'name' => 'name', 'value' => 'bar'));
+        $node = $this->createNode('input', '', ['type' => 'radio', 'name' => 'name', 'value' => 'bar']);
         $field->addChoice($node);
-        $node = $this->createNode('input', '', array('type' => 'radio', 'name' => 'name', 'value' => 'baz', 'disabled' => ''));
+        $node = $this->createNode('input', '', ['type' => 'radio', 'name' => 'name', 'value' => 'baz', 'disabled' => '']);
         $field->addChoice($node);
 
         $field->select('foo');
@@ -222,7 +222,7 @@ public function testRadioButtonIsDisabled()
 
     public function testCheckboxes()
     {
-        $node = $this->createNode('input', '', array('type' => 'checkbox', 'name' => 'name'));
+        $node = $this->createNode('input', '', ['type' => 'checkbox', 'name' => 'name']);
         $field = new ChoiceFormField($node);
 
         $this->assertFalse($field->hasValue(), '->hasValue() returns false when the checkbox is not checked');
@@ -235,18 +235,18 @@ public function testCheckboxes()
             $this->assertTrue(true, '->initialize() throws a \LogicException for checkboxes');
         }
 
-        $node = $this->createNode('input', '', array('type' => 'checkbox', 'name' => 'name', 'checked' => 'checked'));
+        $node = $this->createNode('input', '', ['type' => 'checkbox', 'name' => 'name', 'checked' => 'checked']);
         $field = new ChoiceFormField($node);
 
         $this->assertTrue($field->hasValue(), '->hasValue() returns true when the checkbox is checked');
         $this->assertEquals('on', $field->getValue(), '->getValue() returns 1 if the checkbox is checked and has no value attribute');
 
-        $node = $this->createNode('input', '', array('type' => 'checkbox', 'name' => 'name', 'checked' => 'checked', 'value' => 'foo'));
+        $node = $this->createNode('input', '', ['type' => 'checkbox', 'name' => 'name', 'checked' => 'checked', 'value' => 'foo']);
         $field = new ChoiceFormField($node);
 
         $this->assertEquals('foo', $field->getValue(), '->getValue() returns the value attribute if the checkbox is checked');
 
-        $node = $this->createNode('input', '', array('type' => 'checkbox', 'name' => 'name', 'checked' => 'checked', 'value' => 'foo'));
+        $node = $this->createNode('input', '', ['type' => 'checkbox', 'name' => 'name', 'checked' => 'checked', 'value' => 'foo']);
         $field = new ChoiceFormField($node);
 
         $field->setValue(false);
@@ -265,7 +265,7 @@ public function testCheckboxes()
 
     public function testCheckboxWithEmptyBooleanAttribute()
     {
-        $node = $this->createNode('input', '', array('type' => 'checkbox', 'name' => 'name', 'value' => 'foo', 'checked' => ''));
+        $node = $this->createNode('input', '', ['type' => 'checkbox', 'name' => 'name', 'value' => 'foo', 'checked' => '']);
         $field = new ChoiceFormField($node);
 
         $this->assertTrue($field->hasValue(), '->hasValue() returns true when the checkbox is checked');
@@ -274,7 +274,7 @@ public function testCheckboxWithEmptyBooleanAttribute()
 
     public function testTick()
     {
-        $node = $this->createSelectNode(array('foo' => false, 'bar' => false));
+        $node = $this->createSelectNode(['foo' => false, 'bar' => false]);
         $field = new ChoiceFormField($node);
 
         try {
@@ -284,7 +284,7 @@ public function testTick()
             $this->assertTrue(true, '->tick() throws a \LogicException for select boxes');
         }
 
-        $node = $this->createNode('input', '', array('type' => 'checkbox', 'name' => 'name'));
+        $node = $this->createNode('input', '', ['type' => 'checkbox', 'name' => 'name']);
         $field = new ChoiceFormField($node);
         $field->tick();
         $this->assertEquals('on', $field->getValue(), '->tick() ticks checkboxes');
@@ -292,7 +292,7 @@ public function testTick()
 
     public function testUntick()
     {
-        $node = $this->createSelectNode(array('foo' => false, 'bar' => false));
+        $node = $this->createSelectNode(['foo' => false, 'bar' => false]);
         $field = new ChoiceFormField($node);
 
         try {
@@ -302,7 +302,7 @@ public function testUntick()
             $this->assertTrue(true, '->untick() throws a \LogicException for select boxes');
         }
 
-        $node = $this->createNode('input', '', array('type' => 'checkbox', 'name' => 'name', 'checked' => 'checked'));
+        $node = $this->createNode('input', '', ['type' => 'checkbox', 'name' => 'name', 'checked' => 'checked']);
         $field = new ChoiceFormField($node);
         $field->untick();
         $this->assertNull($field->getValue(), '->untick() unticks checkboxes');
@@ -310,14 +310,14 @@ public function testUntick()
 
     public function testSelect()
     {
-        $node = $this->createNode('input', '', array('type' => 'checkbox', 'name' => 'name', 'checked' => 'checked'));
+        $node = $this->createNode('input', '', ['type' => 'checkbox', 'name' => 'name', 'checked' => 'checked']);
         $field = new ChoiceFormField($node);
         $field->select(true);
         $this->assertEquals('on', $field->getValue(), '->select() changes the value of the field');
         $field->select(false);
         $this->assertNull($field->getValue(), '->select() changes the value of the field');
 
-        $node = $this->createSelectNode(array('foo' => false, 'bar' => false));
+        $node = $this->createSelectNode(['foo' => false, 'bar' => false]);
         $field = new ChoiceFormField($node);
         $field->select('foo');
         $this->assertEquals('foo', $field->getValue(), '->select() changes the selected option');
@@ -325,11 +325,11 @@ public function testSelect()
 
     public function testOptionWithNoValue()
     {
-        $node = $this->createSelectNodeWithEmptyOption(array('foo' => false, 'bar' => false));
+        $node = $this->createSelectNodeWithEmptyOption(['foo' => false, 'bar' => false]);
         $field = new ChoiceFormField($node);
         $this->assertEquals('foo', $field->getValue());
 
-        $node = $this->createSelectNodeWithEmptyOption(array('foo' => false, 'bar' => true));
+        $node = $this->createSelectNodeWithEmptyOption(['foo' => false, 'bar' => true]);
         $field = new ChoiceFormField($node);
         $this->assertEquals('bar', $field->getValue());
         $field->select('foo');
@@ -338,28 +338,28 @@ public function testOptionWithNoValue()
 
     public function testDisableValidation()
     {
-        $node = $this->createSelectNode(array('foo' => false, 'bar' => false));
+        $node = $this->createSelectNode(['foo' => false, 'bar' => false]);
         $field = new ChoiceFormField($node);
         $field->disableValidation();
         $field->setValue('foobar');
         $this->assertEquals('foobar', $field->getValue(), '->disableValidation() allows to set a value which is not in the selected options.');
 
-        $node = $this->createSelectNode(array('foo' => false, 'bar' => false), array('multiple' => 'multiple'));
+        $node = $this->createSelectNode(['foo' => false, 'bar' => false], ['multiple' => 'multiple']);
         $field = new ChoiceFormField($node);
         $field->disableValidation();
-        $field->setValue(array('foobar'));
-        $this->assertEquals(array('foobar'), $field->getValue(), '->disableValidation() allows to set a value which is not in the selected options.');
+        $field->setValue(['foobar']);
+        $this->assertEquals(['foobar'], $field->getValue(), '->disableValidation() allows to set a value which is not in the selected options.');
     }
 
     public function testSelectWithEmptyValue()
     {
-        $node = $this->createSelectNodeWithEmptyOption(array('' => true, 'Female' => false, 'Male' => false));
+        $node = $this->createSelectNodeWithEmptyOption(['' => true, 'Female' => false, 'Male' => false]);
         $field = new ChoiceFormField($node);
 
         $this->assertSame('', $field->getValue());
     }
 
-    protected function createSelectNode($options, $attributes = array(), $selectedAttrText = 'selected')
+    protected function createSelectNode($options, $attributes = [], $selectedAttrText = 'selected')
     {
         $document = new \DOMDocument();
         $node = $document->createElement('select');
@@ -381,7 +381,7 @@ protected function createSelectNode($options, $attributes = array(), $selectedAt
         return $node;
     }
 
-    protected function createSelectNodeWithEmptyOption($options, $attributes = array())
+    protected function createSelectNodeWithEmptyOption($options, $attributes = [])
     {
         $document = new \DOMDocument();
         $node = $document->createElement('select');
diff --git a/vendor/symfony/dom-crawler/Tests/Field/FileFormFieldTest.php b/vendor/symfony/dom-crawler/Tests/Field/FileFormFieldTest.php
index 3ce49a46ef732479a9e059d30d694d52b8307ade..03ab383cbbaf1cd8a18f2879bffabcdf5f61d6a7 100644
--- a/vendor/symfony/dom-crawler/Tests/Field/FileFormFieldTest.php
+++ b/vendor/symfony/dom-crawler/Tests/Field/FileFormFieldTest.php
@@ -17,10 +17,10 @@ class FileFormFieldTest extends FormFieldTestCase
 {
     public function testInitialize()
     {
-        $node = $this->createNode('input', '', array('type' => 'file'));
+        $node = $this->createNode('input', '', ['type' => 'file']);
         $field = new FileFormField($node);
 
-        $this->assertEquals(array('name' => '', 'type' => '', 'tmp_name' => '', 'error' => UPLOAD_ERR_NO_FILE, 'size' => 0), $field->getValue(), '->initialize() sets the value of the field to no file uploaded');
+        $this->assertEquals(['name' => '', 'type' => '', 'tmp_name' => '', 'error' => UPLOAD_ERR_NO_FILE, 'size' => 0], $field->getValue(), '->initialize() sets the value of the field to no file uploaded');
 
         $node = $this->createNode('textarea', '');
         try {
@@ -30,7 +30,7 @@ public function testInitialize()
             $this->assertTrue(true, '->initialize() throws a \LogicException if the node is not an input field');
         }
 
-        $node = $this->createNode('input', '', array('type' => 'text'));
+        $node = $this->createNode('input', '', ['type' => 'text']);
         try {
             $field = new FileFormField($node);
             $this->fail('->initialize() throws a \LogicException if the node is not a file input field');
@@ -44,11 +44,11 @@ public function testInitialize()
      */
     public function testSetValue($method)
     {
-        $node = $this->createNode('input', '', array('type' => 'file'));
+        $node = $this->createNode('input', '', ['type' => 'file']);
         $field = new FileFormField($node);
 
         $field->$method(null);
-        $this->assertEquals(array('name' => '', 'type' => '', 'tmp_name' => '', 'error' => UPLOAD_ERR_NO_FILE, 'size' => 0), $field->getValue(), "->$method() clears the uploaded file if the value is null");
+        $this->assertEquals(['name' => '', 'type' => '', 'tmp_name' => '', 'error' => UPLOAD_ERR_NO_FILE, 'size' => 0], $field->getValue(), "->$method() clears the uploaded file if the value is null");
 
         $field->$method(__FILE__);
         $value = $field->getValue();
@@ -80,15 +80,15 @@ public function testSetValue($method)
 
     public function getSetValueMethods()
     {
-        return array(
-            array('setValue'),
-            array('upload'),
-        );
+        return [
+            ['setValue'],
+            ['upload'],
+        ];
     }
 
     public function testSetErrorCode()
     {
-        $node = $this->createNode('input', '', array('type' => 'file'));
+        $node = $this->createNode('input', '', ['type' => 'file']);
         $field = new FileFormField($node);
 
         $field->setErrorCode(UPLOAD_ERR_FORM_SIZE);
@@ -105,7 +105,7 @@ public function testSetErrorCode()
 
     public function testSetRawFilePath()
     {
-        $node = $this->createNode('input', '', array('type' => 'file'));
+        $node = $this->createNode('input', '', ['type' => 'file']);
         $field = new FileFormField($node);
         $field->setFilePath(__FILE__);
 
diff --git a/vendor/symfony/dom-crawler/Tests/Field/FormFieldTest.php b/vendor/symfony/dom-crawler/Tests/Field/FormFieldTest.php
index d150eb3ac73b1e77d35212e8a7184a3d0b7d4bac..e2daa039871699b891745fe54466814fce1e4590 100644
--- a/vendor/symfony/dom-crawler/Tests/Field/FormFieldTest.php
+++ b/vendor/symfony/dom-crawler/Tests/Field/FormFieldTest.php
@@ -17,7 +17,7 @@ class FormFieldTest extends FormFieldTestCase
 {
     public function testGetName()
     {
-        $node = $this->createNode('input', '', array('type' => 'text', 'name' => 'name', 'value' => 'value'));
+        $node = $this->createNode('input', '', ['type' => 'text', 'name' => 'name', 'value' => 'value']);
         $field = new InputFormField($node);
 
         $this->assertEquals('name', $field->getName(), '->getName() returns the name of the field');
@@ -25,7 +25,7 @@ public function testGetName()
 
     public function testGetSetHasValue()
     {
-        $node = $this->createNode('input', '', array('type' => 'text', 'name' => 'name', 'value' => 'value'));
+        $node = $this->createNode('input', '', ['type' => 'text', 'name' => 'name', 'value' => 'value']);
         $field = new InputFormField($node);
 
         $this->assertEquals('value', $field->getValue(), '->getValue() returns the value of the field');
diff --git a/vendor/symfony/dom-crawler/Tests/Field/FormFieldTestCase.php b/vendor/symfony/dom-crawler/Tests/Field/FormFieldTestCase.php
index 2059d049c1d0f5cf7bb5201a2d827ec005e9f0a1..5ca19d95416f61890963724030362121664ddbda 100644
--- a/vendor/symfony/dom-crawler/Tests/Field/FormFieldTestCase.php
+++ b/vendor/symfony/dom-crawler/Tests/Field/FormFieldTestCase.php
@@ -15,7 +15,7 @@
 
 class FormFieldTestCase extends TestCase
 {
-    protected function createNode($tag, $value, $attributes = array())
+    protected function createNode($tag, $value, $attributes = [])
     {
         $document = new \DOMDocument();
         $node = $document->createElement($tag, $value);
diff --git a/vendor/symfony/dom-crawler/Tests/Field/InputFormFieldTest.php b/vendor/symfony/dom-crawler/Tests/Field/InputFormFieldTest.php
index 193d301de691ea003d9145f6c8226a6618f178c9..5758f1b7bb3fe5904d4d78fd79218441db58bcf4 100644
--- a/vendor/symfony/dom-crawler/Tests/Field/InputFormFieldTest.php
+++ b/vendor/symfony/dom-crawler/Tests/Field/InputFormFieldTest.php
@@ -17,7 +17,7 @@ class InputFormFieldTest extends FormFieldTestCase
 {
     public function testInitialize()
     {
-        $node = $this->createNode('input', '', array('type' => 'text', 'name' => 'name', 'value' => 'value'));
+        $node = $this->createNode('input', '', ['type' => 'text', 'name' => 'name', 'value' => 'value']);
         $field = new InputFormField($node);
 
         $this->assertEquals('value', $field->getValue(), '->initialize() sets the value of the field to the value attribute value');
@@ -30,7 +30,7 @@ public function testInitialize()
             $this->assertTrue(true, '->initialize() throws a \LogicException if the node is not an input');
         }
 
-        $node = $this->createNode('input', '', array('type' => 'checkbox'));
+        $node = $this->createNode('input', '', ['type' => 'checkbox']);
         try {
             $field = new InputFormField($node);
             $this->fail('->initialize() throws a \LogicException if the node is a checkbox');
@@ -38,7 +38,7 @@ public function testInitialize()
             $this->assertTrue(true, '->initialize() throws a \LogicException if the node is a checkbox');
         }
 
-        $node = $this->createNode('input', '', array('type' => 'file'));
+        $node = $this->createNode('input', '', ['type' => 'file']);
         try {
             $field = new InputFormField($node);
             $this->fail('->initialize() throws a \LogicException if the node is a file');
diff --git a/vendor/symfony/dom-crawler/Tests/FormTest.php b/vendor/symfony/dom-crawler/Tests/FormTest.php
index 2f653d6c58158e4b80d70eb177f438c6323637b7..2c0ee22c1fc45527e5ed6ee971acea02253e3565 100644
--- a/vendor/symfony/dom-crawler/Tests/FormTest.php
+++ b/vendor/symfony/dom-crawler/Tests/FormTest.php
@@ -129,18 +129,18 @@ public function testConstructorHandlesFormValues()
         $form2 = new Form($buttonElements->item(0), 'http://example.com');
 
         // Tests if form values are correctly assigned to forms
-        $values1 = array(
-            'apples' => array('1', '2'),
+        $values1 = [
+            'apples' => ['1', '2'],
             'form_name' => 'form-1',
             'button_1' => 'Capture fields',
             'outer_field' => 'success',
-        );
-        $values2 = array(
-            'oranges' => array('1', '2', '3'),
+        ];
+        $values2 = [
+            'oranges' => ['1', '2', '3'],
             'form_name' => 'form_2',
             'button_2' => '',
-            'app_frontend_form_type_contact_form_type' => array('contactType' => '', 'firstName' => 'John'),
-        );
+            'app_frontend_form_type_contact_form_type' => ['contactType' => '', 'firstName' => 'John'],
+        ];
 
         $this->assertEquals($values1, $form1->getPhpValues(), 'HTML5-compliant form attribute handled incorrectly');
         $this->assertEquals($values2, $form2->getPhpValues(), 'HTML5-compliant form attribute handled incorrectly');
@@ -161,7 +161,7 @@ public function testMultiValuedFields()
 
         $this->assertEquals(
             array_keys($form->all()),
-            array('foo[2]', 'foo[3]', 'bar[foo][0]', 'bar[foo][foobar]')
+            ['foo[2]', 'foo[3]', 'bar[foo][0]', 'bar[foo][foobar]']
         );
 
         $this->assertEquals($form->get('foo[2]')->getValue(), 'foo');
@@ -175,7 +175,7 @@ public function testMultiValuedFields()
         $this->assertEquals($form->get('foo[2]')->getValue(), 'bar');
         $this->assertEquals($form->get('foo[3]')->getValue(), 'bar');
 
-        $form['bar'] = array('foo' => array('0' => 'bar', 'foobar' => 'foobar'));
+        $form['bar'] = ['foo' => ['0' => 'bar', 'foobar' => 'foobar']];
 
         $this->assertEquals($form->get('bar[foo][0]')->getValue(), 'bar');
         $this->assertEquals($form->get('bar[foo][foobar]')->getValue(), 'foobar');
@@ -193,7 +193,7 @@ public function testConstructor($message, $form, $values)
                 function ($field) {
                     $class = \get_class($field);
 
-                    return array(substr($class, strrpos($class, '\\') + 1), $field->getValue());
+                    return [substr($class, strrpos($class, '\\') + 1), $field->getValue()];
                 },
                 $form->all()
             ),
@@ -203,84 +203,84 @@ function ($field) {
 
     public function provideInitializeValues()
     {
-        return array(
-            array(
+        return [
+            [
                 'does not take into account input fields without a name attribute',
                 '<input type="text" value="foo" />
                  <input type="submit" />',
-                array(),
-            ),
-            array(
+                [],
+            ],
+            [
                 'does not take into account input fields with an empty name attribute value',
                 '<input type="text" name="" value="foo" />
                  <input type="submit" />',
-                array(),
-            ),
-            array(
+                [],
+            ],
+            [
                 'takes into account disabled input fields',
                 '<input type="text" name="foo" value="foo" disabled="disabled" />
                  <input type="submit" />',
-                array('foo' => array('InputFormField', 'foo')),
-            ),
-            array(
+                ['foo' => ['InputFormField', 'foo']],
+            ],
+            [
                 'appends the submitted button value',
                 '<input type="submit" name="bar" value="bar" />',
-                array('bar' => array('InputFormField', 'bar')),
-            ),
-            array(
+                ['bar' => ['InputFormField', 'bar']],
+            ],
+            [
                 'appends the submitted button value for Button element',
                 '<button type="submit" name="bar" value="bar">Bar</button>',
-                array('bar' => array('InputFormField', 'bar')),
-            ),
-            array(
+                ['bar' => ['InputFormField', 'bar']],
+            ],
+            [
                 'appends the submitted button value but not other submit buttons',
                 '<input type="submit" name="bar" value="bar" />
                  <input type="submit" name="foobar" value="foobar" />',
-                 array('foobar' => array('InputFormField', 'foobar')),
-            ),
-            array(
+                 ['foobar' => ['InputFormField', 'foobar']],
+            ],
+            [
                 'turns an image input into x and y fields',
                 '<input type="image" name="bar" />',
-                array('bar.x' => array('InputFormField', '0'), 'bar.y' => array('InputFormField', '0')),
-            ),
-            array(
+                ['bar.x' => ['InputFormField', '0'], 'bar.y' => ['InputFormField', '0']],
+            ],
+            [
                 'returns textareas',
                 '<textarea name="foo">foo</textarea>
                  <input type="submit" />',
-                 array('foo' => array('TextareaFormField', 'foo')),
-            ),
-            array(
+                 ['foo' => ['TextareaFormField', 'foo']],
+            ],
+            [
                 'returns inputs',
                 '<input type="text" name="foo" value="foo" />
                  <input type="submit" />',
-                 array('foo' => array('InputFormField', 'foo')),
-            ),
-            array(
+                 ['foo' => ['InputFormField', 'foo']],
+            ],
+            [
                 'returns checkboxes',
                 '<input type="checkbox" name="foo" value="foo" checked="checked" />
                  <input type="submit" />',
-                 array('foo' => array('ChoiceFormField', 'foo')),
-            ),
-            array(
+                 ['foo' => ['ChoiceFormField', 'foo']],
+            ],
+            [
                 'returns not-checked checkboxes',
                 '<input type="checkbox" name="foo" value="foo" />
                  <input type="submit" />',
-                 array('foo' => array('ChoiceFormField', false)),
-            ),
-            array(
+                 ['foo' => ['ChoiceFormField', false]],
+            ],
+            [
                 'returns radio buttons',
                 '<input type="radio" name="foo" value="foo" />
                  <input type="radio" name="foo" value="bar" checked="bar" />
                  <input type="submit" />',
-                 array('foo' => array('ChoiceFormField', 'bar')),
-            ),
-            array(
+                 ['foo' => ['ChoiceFormField', 'bar']],
+            ],
+            [
                 'returns file inputs',
                 '<input type="file" name="foo" />
                  <input type="submit" />',
-                 array('foo' => array('FileFormField', array('name' => '', 'type' => '', 'tmp_name' => '', 'error' => 4, 'size' => 0))),
-            ),
-        );
+                 ['foo' => ['FileFormField', ['name' => '', 'type' => '', 'tmp_name' => '', 'error' => 4, 'size' => 0]]],
+            ],
+        ];
     }
 
     public function testGetFormNode()
@@ -390,78 +390,86 @@ public function testOffsetExists()
     public function testGetValues()
     {
         $form = $this->createForm('<form><input type="text" name="foo[bar]" value="foo" /><input type="text" name="bar" value="bar" /><select multiple="multiple" name="baz[]"></select><input type="submit" /></form>');
-        $this->assertEquals(array('foo[bar]' => 'foo', 'bar' => 'bar', 'baz' => array()), $form->getValues(), '->getValues() returns all form field values');
+        $this->assertEquals(['foo[bar]' => 'foo', 'bar' => 'bar', 'baz' => []], $form->getValues(), '->getValues() returns all form field values');
 
         $form = $this->createForm('<form><input type="checkbox" name="foo" value="foo" /><input type="text" name="bar" value="bar" /><input type="submit" /></form>');
-        $this->assertEquals(array('bar' => 'bar'), $form->getValues(), '->getValues() does not include not-checked checkboxes');
+        $this->assertEquals(['bar' => 'bar'], $form->getValues(), '->getValues() does not include not-checked checkboxes');
 
         $form = $this->createForm('<form><input type="file" name="foo" value="foo" /><input type="text" name="bar" value="bar" /><input type="submit" /></form>');
-        $this->assertEquals(array('bar' => 'bar'), $form->getValues(), '->getValues() does not include file input fields');
+        $this->assertEquals(['bar' => 'bar'], $form->getValues(), '->getValues() does not include file input fields');
 
         $form = $this->createForm('<form><input type="text" name="foo" value="foo" disabled="disabled" /><input type="text" name="bar" value="bar" /><input type="submit" /></form>');
-        $this->assertEquals(array('bar' => 'bar'), $form->getValues(), '->getValues() does not include disabled fields');
+        $this->assertEquals(['bar' => 'bar'], $form->getValues(), '->getValues() does not include disabled fields');
+
+        $form = $this->createForm('<form><template><input type="text" name="foo" value="foo" /></template><input type="text" name="bar" value="bar" /><input type="submit" /></form>');
+        $this->assertEquals(['bar' => 'bar'], $form->getValues(), '->getValues() does not include template fields');
+        $this->assertFalse($form->has('foo'));
     }
 
     public function testSetValues()
     {
         $form = $this->createForm('<form><input type="checkbox" name="foo" value="foo" checked="checked" /><input type="text" name="bar" value="bar" /><input type="submit" /></form>');
-        $form->setValues(array('foo' => false, 'bar' => 'foo'));
-        $this->assertEquals(array('bar' => 'foo'), $form->getValues(), '->setValues() sets the values of fields');
+        $form->setValues(['foo' => false, 'bar' => 'foo']);
+        $this->assertEquals(['bar' => 'foo'], $form->getValues(), '->setValues() sets the values of fields');
     }
 
     public function testMultiselectSetValues()
     {
         $form = $this->createForm('<form><select multiple="multiple" name="multi"><option value="foo">foo</option><option value="bar">bar</option></select><input type="submit" /></form>');
-        $form->setValues(array('multi' => array('foo', 'bar')));
-        $this->assertEquals(array('multi' => array('foo', 'bar')), $form->getValues(), '->setValue() sets the values of select');
+        $form->setValues(['multi' => ['foo', 'bar']]);
+        $this->assertEquals(['multi' => ['foo', 'bar']], $form->getValues(), '->setValue() sets the values of select');
     }
 
     public function testGetPhpValues()
     {
         $form = $this->createForm('<form><input type="text" name="foo[bar]" value="foo" /><input type="text" name="bar" value="bar" /><input type="submit" /></form>');
-        $this->assertEquals(array('foo' => array('bar' => 'foo'), 'bar' => 'bar'), $form->getPhpValues(), '->getPhpValues() converts keys with [] to arrays');
+        $this->assertEquals(['foo' => ['bar' => 'foo'], 'bar' => 'bar'], $form->getPhpValues(), '->getPhpValues() converts keys with [] to arrays');
 
         $form = $this->createForm('<form><input type="text" name="fo.o[ba.r]" value="foo" /><input type="text" name="ba r" value="bar" /><input type="submit" /></form>');
-        $this->assertEquals(array('fo.o' => array('ba.r' => 'foo'), 'ba r' => 'bar'), $form->getPhpValues(), '->getPhpValues() preserves periods and spaces in names');
+        $this->assertEquals(['fo.o' => ['ba.r' => 'foo'], 'ba r' => 'bar'], $form->getPhpValues(), '->getPhpValues() preserves periods and spaces in names');
 
         $form = $this->createForm('<form><input type="text" name="fo.o[ba.r][]" value="foo" /><input type="text" name="fo.o[ba.r][ba.z]" value="bar" /><input type="submit" /></form>');
-        $this->assertEquals(array('fo.o' => array('ba.r' => array('foo', 'ba.z' => 'bar'))), $form->getPhpValues(), '->getPhpValues() preserves periods and spaces in names recursively');
+        $this->assertEquals(['fo.o' => ['ba.r' => ['foo', 'ba.z' => 'bar']]], $form->getPhpValues(), '->getPhpValues() preserves periods and spaces in names recursively');
 
         $form = $this->createForm('<form><input type="text" name="foo[bar]" value="foo" /><input type="text" name="bar" value="bar" /><select multiple="multiple" name="baz[]"></select><input type="submit" /></form>');
-        $this->assertEquals(array('foo' => array('bar' => 'foo'), 'bar' => 'bar'), $form->getPhpValues(), "->getPhpValues() doesn't return empty values");
+        $this->assertEquals(['foo' => ['bar' => 'foo'], 'bar' => 'bar'], $form->getPhpValues(), "->getPhpValues() doesn't return empty values");
     }
 
     public function testGetFiles()
     {
         $form = $this->createForm('<form><input type="file" name="foo[bar]" /><input type="text" name="bar" value="bar" /><input type="submit" /></form>');
-        $this->assertEquals(array(), $form->getFiles(), '->getFiles() returns an empty array if method is get');
+        $this->assertEquals([], $form->getFiles(), '->getFiles() returns an empty array if method is get');
 
         $form = $this->createForm('<form method="post"><input type="file" name="foo[bar]" /><input type="text" name="bar" value="bar" /><input type="submit" /></form>');
-        $this->assertEquals(array('foo[bar]' => array('name' => '', 'type' => '', 'tmp_name' => '', 'error' => 4, 'size' => 0)), $form->getFiles(), '->getFiles() only returns file fields for POST');
+        $this->assertEquals(['foo[bar]' => ['name' => '', 'type' => '', 'tmp_name' => '', 'error' => 4, 'size' => 0]], $form->getFiles(), '->getFiles() only returns file fields for POST');
 
         $form = $this->createForm('<form method="post"><input type="file" name="foo[bar]" /><input type="text" name="bar" value="bar" /><input type="submit" /></form>', 'put');
-        $this->assertEquals(array('foo[bar]' => array('name' => '', 'type' => '', 'tmp_name' => '', 'error' => 4, 'size' => 0)), $form->getFiles(), '->getFiles() only returns file fields for PUT');
+        $this->assertEquals(['foo[bar]' => ['name' => '', 'type' => '', 'tmp_name' => '', 'error' => 4, 'size' => 0]], $form->getFiles(), '->getFiles() only returns file fields for PUT');
 
         $form = $this->createForm('<form method="post"><input type="file" name="foo[bar]" /><input type="text" name="bar" value="bar" /><input type="submit" /></form>', 'delete');
-        $this->assertEquals(array('foo[bar]' => array('name' => '', 'type' => '', 'tmp_name' => '', 'error' => 4, 'size' => 0)), $form->getFiles(), '->getFiles() only returns file fields for DELETE');
+        $this->assertEquals(['foo[bar]' => ['name' => '', 'type' => '', 'tmp_name' => '', 'error' => 4, 'size' => 0]], $form->getFiles(), '->getFiles() only returns file fields for DELETE');
 
         $form = $this->createForm('<form method="post"><input type="file" name="foo[bar]" /><input type="text" name="bar" value="bar" /><input type="submit" /></form>', 'patch');
-        $this->assertEquals(array('foo[bar]' => array('name' => '', 'type' => '', 'tmp_name' => '', 'error' => 4, 'size' => 0)), $form->getFiles(), '->getFiles() only returns file fields for PATCH');
+        $this->assertEquals(['foo[bar]' => ['name' => '', 'type' => '', 'tmp_name' => '', 'error' => 4, 'size' => 0]], $form->getFiles(), '->getFiles() only returns file fields for PATCH');
 
         $form = $this->createForm('<form method="post"><input type="file" name="foo[bar]" disabled="disabled" /><input type="submit" /></form>');
-        $this->assertEquals(array(), $form->getFiles(), '->getFiles() does not include disabled file fields');
+        $this->assertEquals([], $form->getFiles(), '->getFiles() does not include disabled file fields');
+
+        $form = $this->createForm('<form method="post"><template><input type="file" name="foo"/></template><input type="text" name="bar" value="bar"/><input type="submit"/></form>');
+        $this->assertEquals([], $form->getFiles(), '->getFiles() does not include template file fields');
+        $this->assertFalse($form->has('foo'));
     }
 
     public function testGetPhpFiles()
     {
         $form = $this->createForm('<form method="post"><input type="file" name="foo[bar]" /><input type="text" name="bar" value="bar" /><input type="submit" /></form>');
-        $this->assertEquals(array('foo' => array('bar' => array('name' => '', 'type' => '', 'tmp_name' => '', 'error' => 4, 'size' => 0))), $form->getPhpFiles(), '->getPhpFiles() converts keys with [] to arrays');
+        $this->assertEquals(['foo' => ['bar' => ['name' => '', 'type' => '', 'tmp_name' => '', 'error' => 4, 'size' => 0]]], $form->getPhpFiles(), '->getPhpFiles() converts keys with [] to arrays');
 
         $form = $this->createForm('<form method="post"><input type="file" name="f.o o[bar]" /><input type="text" name="bar" value="bar" /><input type="submit" /></form>');
-        $this->assertEquals(array('f.o o' => array('bar' => array('name' => '', 'type' => '', 'tmp_name' => '', 'error' => 4, 'size' => 0))), $form->getPhpFiles(), '->getPhpFiles() preserves periods and spaces in names');
+        $this->assertEquals(['f.o o' => ['bar' => ['name' => '', 'type' => '', 'tmp_name' => '', 'error' => 4, 'size' => 0]]], $form->getPhpFiles(), '->getPhpFiles() preserves periods and spaces in names');
 
         $form = $this->createForm('<form method="post"><input type="file" name="f.o o[bar][ba.z]" /><input type="file" name="f.o o[bar][]" /><input type="text" name="bar" value="bar" /><input type="submit" /></form>');
-        $this->assertEquals(array('f.o o' => array('bar' => array('ba.z' => array('name' => '', 'type' => '', 'tmp_name' => '', 'error' => 4, 'size' => 0), array('name' => '', 'type' => '', 'tmp_name' => '', 'error' => 4, 'size' => 0)))), $form->getPhpFiles(), '->getPhpFiles() preserves periods and spaces in names recursively');
+        $this->assertEquals(['f.o o' => ['bar' => ['ba.z' => ['name' => '', 'type' => '', 'tmp_name' => '', 'error' => 4, 'size' => 0], ['name' => '', 'type' => '', 'tmp_name' => '', 'error' => 4, 'size' => 0]]]], $form->getPhpFiles(), '->getPhpFiles() preserves periods and spaces in names recursively');
 
         $form = $this->createForm('<form method="post"><input type="file" name="foo[bar]" /><input type="text" name="bar" value="bar" /><input type="submit" /></form>');
         $files = $form->getPhpFiles();
@@ -470,7 +478,7 @@ public function testGetPhpFiles()
         $this->assertSame(4, $files['foo']['bar']['error'], '->getPhpFiles() converts error to int');
 
         $form = $this->createForm('<form method="post"><input type="file" name="size[error]" /><input type="text" name="error" value="error" /><input type="submit" /></form>');
-        $this->assertEquals(array('size' => array('error' => array('name' => '', 'type' => '', 'tmp_name' => '', 'error' => 4, 'size' => 0))), $form->getPhpFiles(), '->getPhpFiles() int conversion does not collide with file names');
+        $this->assertEquals(['size' => ['error' => ['name' => '', 'type' => '', 'tmp_name' => '', 'error' => 4, 'size' => 0]]], $form->getPhpFiles(), '->getPhpFiles() int conversion does not collide with file names');
     }
 
     /**
@@ -551,83 +559,83 @@ public function testGetUriWithActionOverride()
 
     public function provideGetUriValues()
     {
-        return array(
-            array(
+        return [
+            [
                 'returns the URI of the form',
                 '<form action="/foo"><input type="submit" /></form>',
-                array(),
+                [],
                 '/foo',
-            ),
-            array(
+            ],
+            [
                 'appends the form values if the method is get',
                 '<form action="/foo"><input type="text" name="foo" value="foo" /><input type="submit" /></form>',
-                array(),
+                [],
                 '/foo?foo=foo',
-            ),
-            array(
+            ],
+            [
                 'appends the form values and merges the submitted values',
                 '<form action="/foo"><input type="text" name="foo" value="foo" /><input type="submit" /></form>',
-                array('foo' => 'bar'),
+                ['foo' => 'bar'],
                 '/foo?foo=bar',
-            ),
-            array(
+            ],
+            [
                 'does not append values if the method is post',
                 '<form action="/foo" method="post"><input type="text" name="foo" value="foo" /><input type="submit" /></form>',
-                array(),
+                [],
                 '/foo',
-            ),
-            array(
+            ],
+            [
                 'does not append values if the method is patch',
                 '<form action="/foo" method="post"><input type="text" name="foo" value="foo" /><input type="submit" /></form>',
-                array(),
+                [],
                 '/foo',
                 'PUT',
-            ),
-            array(
+            ],
+            [
                 'does not append values if the method is delete',
                 '<form action="/foo" method="post"><input type="text" name="foo" value="foo" /><input type="submit" /></form>',
-                array(),
+                [],
                 '/foo',
                 'DELETE',
-            ),
-            array(
+            ],
+            [
                 'does not append values if the method is put',
                 '<form action="/foo" method="post"><input type="text" name="foo" value="foo" /><input type="submit" /></form>',
-                array(),
+                [],
                 '/foo',
                 'PATCH',
-            ),
-            array(
+            ],
+            [
                 'appends the form values to an existing query string',
                 '<form action="/foo?bar=bar"><input type="text" name="foo" value="foo" /><input type="submit" /></form>',
-                array(),
+                [],
                 '/foo?bar=bar&foo=foo',
-            ),
-            array(
+            ],
+            [
                 'replaces query values with the form values',
                 '<form action="/foo?bar=bar"><input type="text" name="bar" value="foo" /><input type="submit" /></form>',
-                array(),
+                [],
                 '/foo?bar=foo',
-            ),
-            array(
+            ],
+            [
                 'returns an empty URI if the action is empty',
                 '<form><input type="submit" /></form>',
-                array(),
+                [],
                 '/',
-            ),
-            array(
+            ],
+            [
                 'appends the form values even if the action is empty',
                 '<form><input type="text" name="foo" value="foo" /><input type="submit" /></form>',
-                array(),
+                [],
                 '/?foo=foo',
-            ),
-            array(
+            ],
+            [
                 'chooses the path if the action attribute value is a sharp (#)',
                 '<form action="#" method="post"><input type="text" name="foo" value="foo" /><input type="submit" /></form>',
-                array(),
+                [],
                 '/#',
-            ),
-        );
+            ],
+        ];
     }
 
     public function testHas()
@@ -753,7 +761,7 @@ public function testFormRegistrySupportsMultivaluedFields()
         $registry->add($this->getFormFieldMock('bar[baz]'));
 
         $this->assertEquals(
-            array('foo[0]', 'foo[1]', 'bar[5]', 'bar[6]', 'bar[baz]'),
+            ['foo[0]', 'foo[1]', 'bar[5]', 'bar[6]', 'bar[baz]'],
             array_keys($registry->all())
         );
     }
@@ -787,13 +795,13 @@ public function testFormRegistrySetValues()
         $registry->set('foo[3]', 3);
         $registry->set('foo[bar][baz]', 'fbb');
 
-        $registry->set('foo', array(
+        $registry->set('foo', [
             2 => 2,
             3 => 3,
-            'bar' => array(
+            'bar' => [
                 'baz' => 'fbb',
-             ),
-        ));
+             ],
+        ]);
     }
 
     /**
@@ -817,7 +825,7 @@ public function testFormRegistrySetArrayOnNotCompoundField()
         $registry = new FormFieldRegistry();
         $registry->add($this->getFormFieldMock('bar'));
 
-        $registry->set('bar', array('baz'));
+        $registry->set('bar', ['baz']);
     }
 
     public function testDifferentFieldTypesWithSameName()
@@ -846,7 +854,7 @@ protected function getFormFieldMock($name, $value = null)
     {
         $field = $this
             ->getMockBuilder('Symfony\\Component\\DomCrawler\\Field\\FormField')
-            ->setMethods(array('getName', 'getValue', 'setValue', 'initialize'))
+            ->setMethods(['getName', 'getValue', 'setValue', 'initialize'])
             ->disableOriginalConstructor()
             ->getMock()
         ;
@@ -854,13 +862,13 @@ protected function getFormFieldMock($name, $value = null)
         $field
             ->expects($this->any())
             ->method('getName')
-            ->will($this->returnValue($name))
+            ->willReturn($name)
         ;
 
         $field
             ->expects($this->any())
             ->method('getValue')
-            ->will($this->returnValue($value))
+            ->willReturn($value)
         ;
 
         return $field;
@@ -869,7 +877,7 @@ protected function getFormFieldMock($name, $value = null)
     protected function createForm($form, $method = null, $currentUri = null)
     {
         $dom = new \DOMDocument();
-        $dom->loadHTML('<html>'.$form.'</html>');
+        @$dom->loadHTML('<html>'.$form.'</html>');
 
         $xPath = new \DOMXPath($dom);
         $nodes = $xPath->query('//input | //button');
@@ -948,15 +956,15 @@ public function testgetPhpValuesWithEmptyTextarea()
     {
         $dom = new \DOMDocument();
         $dom->loadHTML('
-              <html>
-                  <form>
-                      <textarea name="example"></textarea>
-                  </form>
-              </html>
-          ');
+            <html>
+                <form>
+                    <textarea name="example"></textarea>
+                </form>
+            </html>'
+        );
 
         $nodes = $dom->getElementsByTagName('form');
         $form = new Form($nodes->item(0), 'http://example.com');
-        $this->assertEquals($form->getPhpValues(), array('example' => ''));
+        $this->assertEquals($form->getPhpValues(), ['example' => '']);
     }
 }
diff --git a/vendor/symfony/dom-crawler/Tests/ImageTest.php b/vendor/symfony/dom-crawler/Tests/ImageTest.php
index 309578a90233e7e399fa5b2717ef29d729037ca0..6aecadbc1459ac49aaf89357dd8ec9aaaf9fee08 100644
--- a/vendor/symfony/dom-crawler/Tests/ImageTest.php
+++ b/vendor/symfony/dom-crawler/Tests/ImageTest.php
@@ -27,6 +27,27 @@ public function testConstructorWithANonImgTag()
         new Image($dom->getElementsByTagName('div')->item(0), 'http://www.example.com/');
     }
 
+    public function testBaseUriIsOptionalWhenImageUrlIsAbsolute()
+    {
+        $dom = new \DOMDocument();
+        $dom->loadHTML('<html><img alt="foo" src="https://example.com/foo" /></html>');
+
+        $image = new Image($dom->getElementsByTagName('img')->item(0));
+        $this->assertSame('https://example.com/foo', $image->getUri());
+    }
+
+    /**
+     * @expectedException \InvalidArgumentException
+     */
+    public function testAbsoluteBaseUriIsMandatoryWhenImageUrlIsRelative()
+    {
+        $dom = new \DOMDocument();
+        $dom->loadHTML('<html><img alt="foo" src="/foo" /></html>');
+
+        $image = new Image($dom->getElementsByTagName('img')->item(0), 'example.com');
+        $image->getUri();
+    }
+
     /**
      * @dataProvider getGetUriTests
      */
@@ -41,9 +62,9 @@ public function testGetUri($url, $currentUri, $expected)
 
     public function getGetUriTests()
     {
-        return array(
-            array('/foo.png', 'http://localhost/bar/foo/', 'http://localhost/foo.png'),
-            array('foo.png', 'http://localhost/bar/foo/', 'http://localhost/bar/foo/foo.png'),
-        );
+        return [
+            ['/foo.png', 'http://localhost/bar/foo/', 'http://localhost/foo.png'],
+            ['foo.png', 'http://localhost/bar/foo/', 'http://localhost/bar/foo/foo.png'],
+        ];
     }
 }
diff --git a/vendor/symfony/dom-crawler/Tests/LinkTest.php b/vendor/symfony/dom-crawler/Tests/LinkTest.php
index 3f0364705f986fc6618d03e7c0d7c9c74830f253..76805bb764fa7556eab432542bd640a1fa8273f9 100644
--- a/vendor/symfony/dom-crawler/Tests/LinkTest.php
+++ b/vendor/symfony/dom-crawler/Tests/LinkTest.php
@@ -27,15 +27,25 @@ public function testConstructorWithANonATag()
         new Link($dom->getElementsByTagName('div')->item(0), 'http://www.example.com/');
     }
 
+    public function testBaseUriIsOptionalWhenLinkUrlIsAbsolute()
+    {
+        $dom = new \DOMDocument();
+        $dom->loadHTML('<html><a href="https://example.com/foo">foo</a></html>');
+
+        $link = new Link($dom->getElementsByTagName('a')->item(0));
+        $this->assertSame('https://example.com/foo', $link->getUri());
+    }
+
     /**
      * @expectedException \InvalidArgumentException
      */
-    public function testConstructorWithAnInvalidCurrentUri()
+    public function testAbsoluteBaseUriIsMandatoryWhenLinkUrlIsRelative()
     {
         $dom = new \DOMDocument();
         $dom->loadHTML('<html><a href="/foo">foo</a></html>');
 
-        new Link($dom->getElementsByTagName('a')->item(0), 'example.com');
+        $link = new Link($dom->getElementsByTagName('a')->item(0), 'example.com');
+        $link->getUri();
     }
 
     public function testGetNode()
@@ -101,61 +111,61 @@ public function testGetUriOnLink($url, $currentUri, $expected)
 
     public function getGetUriTests()
     {
-        return array(
-            array('/foo', 'http://localhost/bar/foo/', 'http://localhost/foo'),
-            array('/foo', 'http://localhost/bar/foo', 'http://localhost/foo'),
-            array('
-            /foo', 'http://localhost/bar/foo/', 'http://localhost/foo'),
-            array('/foo
-            ', 'http://localhost/bar/foo', 'http://localhost/foo'),
-
-            array('foo', 'http://localhost/bar/foo/', 'http://localhost/bar/foo/foo'),
-            array('foo', 'http://localhost/bar/foo', 'http://localhost/bar/foo'),
-
-            array('', 'http://localhost/bar/', 'http://localhost/bar/'),
-            array('#', 'http://localhost/bar/', 'http://localhost/bar/#'),
-            array('#bar', 'http://localhost/bar?a=b', 'http://localhost/bar?a=b#bar'),
-            array('#bar', 'http://localhost/bar/#foo', 'http://localhost/bar/#bar'),
-            array('?a=b', 'http://localhost/bar#foo', 'http://localhost/bar?a=b'),
-            array('?a=b', 'http://localhost/bar/', 'http://localhost/bar/?a=b'),
-
-            array('http://login.foo.com/foo', 'http://localhost/bar/', 'http://login.foo.com/foo'),
-            array('https://login.foo.com/foo', 'https://localhost/bar/', 'https://login.foo.com/foo'),
-            array('mailto:foo@bar.com', 'http://localhost/foo', 'mailto:foo@bar.com'),
+        return [
+            ['/foo', 'http://localhost/bar/foo/', 'http://localhost/foo'],
+            ['/foo', 'http://localhost/bar/foo', 'http://localhost/foo'],
+            ['
+            /foo', 'http://localhost/bar/foo/', 'http://localhost/foo'],
+            ['/foo
+            ', 'http://localhost/bar/foo', 'http://localhost/foo'],
+
+            ['foo', 'http://localhost/bar/foo/', 'http://localhost/bar/foo/foo'],
+            ['foo', 'http://localhost/bar/foo', 'http://localhost/bar/foo'],
+
+            ['', 'http://localhost/bar/', 'http://localhost/bar/'],
+            ['#', 'http://localhost/bar/', 'http://localhost/bar/#'],
+            ['#bar', 'http://localhost/bar?a=b', 'http://localhost/bar?a=b#bar'],
+            ['#bar', 'http://localhost/bar/#foo', 'http://localhost/bar/#bar'],
+            ['?a=b', 'http://localhost/bar#foo', 'http://localhost/bar?a=b'],
+            ['?a=b', 'http://localhost/bar/', 'http://localhost/bar/?a=b'],
+
+            ['http://login.foo.com/foo', 'http://localhost/bar/', 'http://login.foo.com/foo'],
+            ['https://login.foo.com/foo', 'https://localhost/bar/', 'https://login.foo.com/foo'],
+            ['mailto:foo@bar.com', 'http://localhost/foo', 'mailto:foo@bar.com'],
 
             // tests schema relative URL (issue #7169)
-            array('//login.foo.com/foo', 'http://localhost/bar/', 'http://login.foo.com/foo'),
-            array('//login.foo.com/foo', 'https://localhost/bar/', 'https://login.foo.com/foo'),
-
-            array('?foo=2', 'http://localhost?foo=1', 'http://localhost?foo=2'),
-            array('?foo=2', 'http://localhost/?foo=1', 'http://localhost/?foo=2'),
-            array('?foo=2', 'http://localhost/bar?foo=1', 'http://localhost/bar?foo=2'),
-            array('?foo=2', 'http://localhost/bar/?foo=1', 'http://localhost/bar/?foo=2'),
-            array('?bar=2', 'http://localhost?foo=1', 'http://localhost?bar=2'),
-
-            array('foo', 'http://login.foo.com/bar/baz?/query/string', 'http://login.foo.com/bar/foo'),
-
-            array('.', 'http://localhost/foo/bar/baz', 'http://localhost/foo/bar/'),
-            array('./', 'http://localhost/foo/bar/baz', 'http://localhost/foo/bar/'),
-            array('./foo', 'http://localhost/foo/bar/baz', 'http://localhost/foo/bar/foo'),
-            array('..', 'http://localhost/foo/bar/baz', 'http://localhost/foo/'),
-            array('../', 'http://localhost/foo/bar/baz', 'http://localhost/foo/'),
-            array('../foo', 'http://localhost/foo/bar/baz', 'http://localhost/foo/foo'),
-            array('../..', 'http://localhost/foo/bar/baz', 'http://localhost/'),
-            array('../../', 'http://localhost/foo/bar/baz', 'http://localhost/'),
-            array('../../foo', 'http://localhost/foo/bar/baz', 'http://localhost/foo'),
-            array('../../foo', 'http://localhost/bar/foo/', 'http://localhost/foo'),
-            array('../bar/../../foo', 'http://localhost/bar/foo/', 'http://localhost/foo'),
-            array('../bar/./../../foo', 'http://localhost/bar/foo/', 'http://localhost/foo'),
-            array('../../', 'http://localhost/', 'http://localhost/'),
-            array('../../', 'http://localhost', 'http://localhost/'),
-
-            array('/foo', 'http://localhost?bar=1', 'http://localhost/foo'),
-            array('/foo', 'http://localhost#bar', 'http://localhost/foo'),
-            array('/foo', 'file:///', 'file:///foo'),
-            array('/foo', 'file:///bar/baz', 'file:///foo'),
-            array('foo', 'file:///', 'file:///foo'),
-            array('foo', 'file:///bar/baz', 'file:///bar/foo'),
-        );
+            ['//login.foo.com/foo', 'http://localhost/bar/', 'http://login.foo.com/foo'],
+            ['//login.foo.com/foo', 'https://localhost/bar/', 'https://login.foo.com/foo'],
+
+            ['?foo=2', 'http://localhost?foo=1', 'http://localhost?foo=2'],
+            ['?foo=2', 'http://localhost/?foo=1', 'http://localhost/?foo=2'],
+            ['?foo=2', 'http://localhost/bar?foo=1', 'http://localhost/bar?foo=2'],
+            ['?foo=2', 'http://localhost/bar/?foo=1', 'http://localhost/bar/?foo=2'],
+            ['?bar=2', 'http://localhost?foo=1', 'http://localhost?bar=2'],
+
+            ['foo', 'http://login.foo.com/bar/baz?/query/string', 'http://login.foo.com/bar/foo'],
+
+            ['.', 'http://localhost/foo/bar/baz', 'http://localhost/foo/bar/'],
+            ['./', 'http://localhost/foo/bar/baz', 'http://localhost/foo/bar/'],
+            ['./foo', 'http://localhost/foo/bar/baz', 'http://localhost/foo/bar/foo'],
+            ['..', 'http://localhost/foo/bar/baz', 'http://localhost/foo/'],
+            ['../', 'http://localhost/foo/bar/baz', 'http://localhost/foo/'],
+            ['../foo', 'http://localhost/foo/bar/baz', 'http://localhost/foo/foo'],
+            ['../..', 'http://localhost/foo/bar/baz', 'http://localhost/'],
+            ['../../', 'http://localhost/foo/bar/baz', 'http://localhost/'],
+            ['../../foo', 'http://localhost/foo/bar/baz', 'http://localhost/foo'],
+            ['../../foo', 'http://localhost/bar/foo/', 'http://localhost/foo'],
+            ['../bar/../../foo', 'http://localhost/bar/foo/', 'http://localhost/foo'],
+            ['../bar/./../../foo', 'http://localhost/bar/foo/', 'http://localhost/foo'],
+            ['../../', 'http://localhost/', 'http://localhost/'],
+            ['../../', 'http://localhost', 'http://localhost/'],
+
+            ['/foo', 'http://localhost?bar=1', 'http://localhost/foo'],
+            ['/foo', 'http://localhost#bar', 'http://localhost/foo'],
+            ['/foo', 'file:///', 'file:///foo'],
+            ['/foo', 'file:///bar/baz', 'file:///foo'],
+            ['foo', 'file:///', 'file:///foo'],
+            ['foo', 'file:///bar/baz', 'file:///bar/foo'],
+        ];
     }
 }
diff --git a/vendor/symfony/dom-crawler/composer.json b/vendor/symfony/dom-crawler/composer.json
index ed50e6ee6b4f1bd1a092ebc654e3249f359bff27..167d0fdfe50c99a8c383675acf9b56d19aef8b50 100644
--- a/vendor/symfony/dom-crawler/composer.json
+++ b/vendor/symfony/dom-crawler/composer.json
@@ -16,12 +16,12 @@
         }
     ],
     "require": {
-        "php": "^5.5.9|>=7.0.8",
+        "php": "^7.1.3",
         "symfony/polyfill-ctype": "~1.8",
         "symfony/polyfill-mbstring": "~1.0"
     },
     "require-dev": {
-        "symfony/css-selector": "~2.8|~3.0|~4.0"
+        "symfony/css-selector": "~3.4|~4.0"
     },
     "suggest": {
         "symfony/css-selector": ""
@@ -35,7 +35,7 @@
     "minimum-stability": "dev",
     "extra": {
         "branch-alias": {
-            "dev-master": "3.4-dev"
+            "dev-master": "4.2-dev"
         }
     }
 }
diff --git a/vendor/symfony/dom-crawler/phpunit.xml.dist b/vendor/symfony/dom-crawler/phpunit.xml.dist
index ad714a8fd81c050539e7abcf2b62dd32bd0f33c0..5f63490ce99d5122589938631151e8e856642031 100644
--- a/vendor/symfony/dom-crawler/phpunit.xml.dist
+++ b/vendor/symfony/dom-crawler/phpunit.xml.dist
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
 <phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/4.1/phpunit.xsd"
+         xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/5.2/phpunit.xsd"
          backupGlobals="false"
          colors="true"
          bootstrap="vendor/autoload.php"
diff --git a/vendor/symfony/filesystem/.gitignore b/vendor/symfony/filesystem/.gitignore
deleted file mode 100644
index c49a5d8df5c6548379f00c77fe572a7217bce218..0000000000000000000000000000000000000000
--- a/vendor/symfony/filesystem/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-vendor/
-composer.lock
-phpunit.xml
diff --git a/vendor/symfony/filesystem/CHANGELOG.md b/vendor/symfony/filesystem/CHANGELOG.md
index d01f5f45e1a7dbd03323e3ef5565cf049f0cbe1d..0b633ef2a7726fb7b4120633a990ff2a74eaa676 100644
--- a/vendor/symfony/filesystem/CHANGELOG.md
+++ b/vendor/symfony/filesystem/CHANGELOG.md
@@ -1,6 +1,23 @@
 CHANGELOG
 =========
 
+4.4.0
+-----
+
+ * support for passing a `null` value to `Filesystem::isAbsolutePath()` is deprecated and will be removed in 5.0
+
+4.3.0
+-----
+
+ * support for passing arrays to `Filesystem::dumpFile()` is deprecated and will be removed in 5.0
+ * support for passing arrays to `Filesystem::appendToFile()` is deprecated and will be removed in 5.0
+
+4.0.0
+-----
+
+ * removed `LockHandler`
+ * Support for passing relative paths to `Filesystem::makePathRelative()` has been removed.
+
 3.4.0
 -----
 
diff --git a/vendor/symfony/filesystem/Exception/ExceptionInterface.php b/vendor/symfony/filesystem/Exception/ExceptionInterface.php
index 8f4f10aac70925334ddb7a14ab3ee79cd19de680..fc438d9f313853eada7be7a3a7afc2fc898ec7bf 100644
--- a/vendor/symfony/filesystem/Exception/ExceptionInterface.php
+++ b/vendor/symfony/filesystem/Exception/ExceptionInterface.php
@@ -16,6 +16,6 @@
  *
  * @author Romain Neutron <imprec@gmail.com>
  */
-interface ExceptionInterface
+interface ExceptionInterface extends \Throwable
 {
 }
diff --git a/vendor/symfony/filesystem/Exception/FileNotFoundException.php b/vendor/symfony/filesystem/Exception/FileNotFoundException.php
index bcc8fe81fcef4159ef6042cb1bd023109f7e26c6..48b6408095a13f524f47cadd5347934ad807a3bc 100644
--- a/vendor/symfony/filesystem/Exception/FileNotFoundException.php
+++ b/vendor/symfony/filesystem/Exception/FileNotFoundException.php
@@ -19,7 +19,7 @@
  */
 class FileNotFoundException extends IOException
 {
-    public function __construct($message = null, $code = 0, \Exception $previous = null, $path = null)
+    public function __construct(string $message = null, int $code = 0, \Throwable $previous = null, string $path = null)
     {
         if (null === $message) {
             if (null === $path) {
diff --git a/vendor/symfony/filesystem/Exception/IOException.php b/vendor/symfony/filesystem/Exception/IOException.php
index 144e0e602bdfe15d9ba0268b3c55e775f058f8ab..fea26e4ddc40c87e2f43f031bc073784a3eb6dad 100644
--- a/vendor/symfony/filesystem/Exception/IOException.php
+++ b/vendor/symfony/filesystem/Exception/IOException.php
@@ -22,7 +22,7 @@ class IOException extends \RuntimeException implements IOExceptionInterface
 {
     private $path;
 
-    public function __construct($message, $code = 0, \Exception $previous = null, $path = null)
+    public function __construct(string $message, int $code = 0, \Throwable $previous = null, string $path = null)
     {
         $this->path = $path;
 
diff --git a/vendor/symfony/filesystem/Exception/InvalidArgumentException.php b/vendor/symfony/filesystem/Exception/InvalidArgumentException.php
new file mode 100644
index 0000000000000000000000000000000000000000..abadc200297635622b72635608b02ec9ce6e5c9a
--- /dev/null
+++ b/vendor/symfony/filesystem/Exception/InvalidArgumentException.php
@@ -0,0 +1,19 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Filesystem\Exception;
+
+/**
+ * @author Christian Flothmann <christian.flothmann@sensiolabs.de>
+ */
+class InvalidArgumentException extends \InvalidArgumentException implements ExceptionInterface
+{
+}
diff --git a/vendor/symfony/filesystem/Filesystem.php b/vendor/symfony/filesystem/Filesystem.php
index 0b5297ecf0666e2f9382bc9776e79770b80f855a..95e4a801071b81ed377bfd2bf27a37644744ee21 100644
--- a/vendor/symfony/filesystem/Filesystem.php
+++ b/vendor/symfony/filesystem/Filesystem.php
@@ -12,6 +12,7 @@
 namespace Symfony\Component\Filesystem;
 
 use Symfony\Component\Filesystem\Exception\FileNotFoundException;
+use Symfony\Component\Filesystem\Exception\InvalidArgumentException;
 use Symfony\Component\Filesystem\Exception\IOException;
 
 /**
@@ -47,7 +48,7 @@ public function copy($originFile, $targetFile, $overwriteNewerFiles = false)
         $this->mkdir(\dirname($targetFile));
 
         $doCopy = true;
-        if (!$overwriteNewerFiles && null === parse_url($originFile, PHP_URL_HOST) && is_file($targetFile)) {
+        if (!$overwriteNewerFiles && null === parse_url($originFile, \PHP_URL_HOST) && is_file($targetFile)) {
             $doCopy = filemtime($originFile) > filemtime($targetFile);
         }
 
@@ -118,7 +119,7 @@ public function mkdir($dirs, $mode = 0777)
      */
     public function exists($files)
     {
-        $maxPathLength = PHP_MAXPATHLEN - 2;
+        $maxPathLength = \PHP_MAXPATHLEN - 2;
 
         foreach ($this->toIterable($files) as $file) {
             if (\strlen($file) > $maxPathLength) {
@@ -179,7 +180,7 @@ public function remove($files)
                 if (!self::box('rmdir', $file) && file_exists($file)) {
                     throw new IOException(sprintf('Failed to remove directory "%s": ', $file).self::$lastError);
                 }
-            } elseif (!self::box('unlink', $file) && file_exists($file)) {
+            } elseif (!self::box('unlink', $file) && (false !== strpos(self::$lastError, 'Permission denied') || file_exists($file))) {
                 throw new IOException(sprintf('Failed to remove file "%s": ', $file).self::$lastError);
             }
         }
@@ -198,7 +199,7 @@ public function remove($files)
     public function chmod($files, $mode, $umask = 0000, $recursive = false)
     {
         foreach ($this->toIterable($files) as $file) {
-            if (true !== @chmod($file, $mode & ~$umask)) {
+            if ((\PHP_VERSION_ID < 80000 || \is_int($mode)) && true !== @chmod($file, $mode & ~$umask)) {
                 throw new IOException(sprintf('Failed to chmod file "%s".', $file), 0, null, $file);
             }
             if ($recursive && is_dir($file) && !is_link($file)) {
@@ -250,7 +251,7 @@ public function chgrp($files, $group, $recursive = false)
                 $this->chgrp(new \FilesystemIterator($file), $group, true);
             }
             if (is_link($file) && \function_exists('lchgrp')) {
-                if (true !== @lchgrp($file, $group) || (\defined('HHVM_VERSION') && !posix_getgrnam($group))) {
+                if (true !== @lchgrp($file, $group)) {
                     throw new IOException(sprintf('Failed to chgrp file "%s".', $file), 0, null, $file);
                 }
             } else {
@@ -293,15 +294,11 @@ public function rename($origin, $target, $overwrite = false)
     /**
      * Tells whether a file exists and is readable.
      *
-     * @param string $filename Path to the file
-     *
-     * @return bool
-     *
      * @throws IOException When windows path is longer than 258 characters
      */
-    private function isReadable($filename)
+    private function isReadable(string $filename): bool
     {
-        $maxPathLength = PHP_MAXPATHLEN - 2;
+        $maxPathLength = \PHP_MAXPATHLEN - 2;
 
         if (\strlen($filename) > $maxPathLength) {
             throw new IOException(sprintf('Could not check if file is readable because path length exceeds %d characters.', $maxPathLength), 0, null, $filename);
@@ -380,11 +377,9 @@ public function hardlink($originFile, $targetFiles)
     }
 
     /**
-     * @param string $origin
-     * @param string $target
      * @param string $linkType Name of the link type, typically 'symbolic' or 'hard'
      */
-    private function linkException($origin, $target, $linkType)
+    private function linkException(string $origin, string $target, string $linkType)
     {
         if (self::$lastError) {
             if ('\\' === \DIRECTORY_SEPARATOR && false !== strpos(self::$lastError, 'error code(1314)')) {
@@ -445,8 +440,12 @@ public function readlink($path, $canonicalize = false)
      */
     public function makePathRelative($endPath, $startPath)
     {
-        if (!$this->isAbsolutePath($endPath) || !$this->isAbsolutePath($startPath)) {
-            @trigger_error(sprintf('Support for passing relative paths to %s() is deprecated since Symfony 3.4 and will be removed in 4.0.', __METHOD__), E_USER_DEPRECATED);
+        if (!$this->isAbsolutePath($startPath)) {
+            throw new InvalidArgumentException(sprintf('The start path "%s" is not absolute.', $startPath));
+        }
+
+        if (!$this->isAbsolutePath($endPath)) {
+            throw new InvalidArgumentException(sprintf('The end path "%s" is not absolute.', $endPath));
         }
 
         // Normalize separators on Windows
@@ -461,11 +460,11 @@ public function makePathRelative($endPath, $startPath)
                 : [$path, null];
         };
 
-        $splitPath = function ($path, $absolute) {
+        $splitPath = function ($path) {
             $result = [];
 
             foreach (explode('/', trim($path, '/')) as $segment) {
-                if ('..' === $segment && ($absolute || \count($result))) {
+                if ('..' === $segment) {
                     array_pop($result);
                 } elseif ('.' !== $segment && '' !== $segment) {
                     $result[] = $segment;
@@ -475,11 +474,11 @@ public function makePathRelative($endPath, $startPath)
             return $result;
         };
 
-        list($endPath, $endDriveLetter) = $splitDriveLetter($endPath);
-        list($startPath, $startDriveLetter) = $splitDriveLetter($startPath);
+        [$endPath, $endDriveLetter] = $splitDriveLetter($endPath);
+        [$startPath, $startDriveLetter] = $splitDriveLetter($startPath);
 
-        $startPathArr = $splitPath($startPath, static::isAbsolutePath($startPath));
-        $endPathArr = $splitPath($endPath, static::isAbsolutePath($endPath));
+        $startPathArr = $splitPath($startPath);
+        $endPathArr = $splitPath($endPath);
 
         if ($endDriveLetter && $startDriveLetter && $endDriveLetter != $startDriveLetter) {
             // End path is on another drive, so no relative path exists
@@ -535,6 +534,10 @@ public function mirror($originDir, $targetDir, \Traversable $iterator = null, $o
         $originDir = rtrim($originDir, '/\\');
         $originDirLen = \strlen($originDir);
 
+        if (!$this->exists($originDir)) {
+            throw new IOException(sprintf('The origin directory specified "%s" was not found.', $originDir), 0, null, $originDir);
+        }
+
         // Iterate in destination folder to remove obsolete entries
         if ($this->exists($targetDir) && isset($options['delete']) && $options['delete']) {
             $deleteIterator = $iterator;
@@ -551,41 +554,32 @@ public function mirror($originDir, $targetDir, \Traversable $iterator = null, $o
             }
         }
 
-        $copyOnWindows = false;
-        if (isset($options['copy_on_windows'])) {
-            $copyOnWindows = $options['copy_on_windows'];
-        }
+        $copyOnWindows = $options['copy_on_windows'] ?? false;
 
         if (null === $iterator) {
             $flags = $copyOnWindows ? \FilesystemIterator::SKIP_DOTS | \FilesystemIterator::FOLLOW_SYMLINKS : \FilesystemIterator::SKIP_DOTS;
             $iterator = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($originDir, $flags), \RecursiveIteratorIterator::SELF_FIRST);
         }
 
-        if ($this->exists($originDir)) {
-            $this->mkdir($targetDir);
-        }
+        $this->mkdir($targetDir);
+        $filesCreatedWhileMirroring = [];
 
         foreach ($iterator as $file) {
+            if ($file->getPathname() === $targetDir || $file->getRealPath() === $targetDir || isset($filesCreatedWhileMirroring[$file->getRealPath()])) {
+                continue;
+            }
+
             $target = $targetDir.substr($file->getPathname(), $originDirLen);
+            $filesCreatedWhileMirroring[$target] = true;
 
-            if ($copyOnWindows) {
-                if (is_file($file)) {
-                    $this->copy($file, $target, isset($options['override']) ? $options['override'] : false);
-                } elseif (is_dir($file)) {
-                    $this->mkdir($target);
-                } else {
-                    throw new IOException(sprintf('Unable to guess "%s" file type.', $file), 0, null, $file);
-                }
+            if (!$copyOnWindows && is_link($file)) {
+                $this->symlink($file->getLinkTarget(), $target);
+            } elseif (is_dir($file)) {
+                $this->mkdir($target);
+            } elseif (is_file($file)) {
+                $this->copy($file, $target, isset($options['override']) ? $options['override'] : false);
             } else {
-                if (is_link($file)) {
-                    $this->symlink($file->getLinkTarget(), $target);
-                } elseif (is_dir($file)) {
-                    $this->mkdir($target);
-                } elseif (is_file($file)) {
-                    $this->copy($file, $target, isset($options['override']) ? $options['override'] : false);
-                } else {
-                    throw new IOException(sprintf('Unable to guess "%s" file type.', $file), 0, null, $file);
-                }
+                throw new IOException(sprintf('Unable to guess "%s" file type.', $file), 0, null, $file);
             }
         }
     }
@@ -599,13 +593,17 @@ public function mirror($originDir, $targetDir, \Traversable $iterator = null, $o
      */
     public function isAbsolutePath($file)
     {
-        return strspn($file, '/\\', 0, 1)
+        if (null === $file) {
+            @trigger_error(sprintf('Calling "%s()" with a null in the $file argument is deprecated since Symfony 4.4.', __METHOD__), \E_USER_DEPRECATED);
+        }
+
+        return '' !== (string) $file && (strspn($file, '/\\', 0, 1)
             || (\strlen($file) > 3 && ctype_alpha($file[0])
                 && ':' === $file[1]
                 && strspn($file, '/\\', 2, 1)
             )
-            || null !== parse_url($file, PHP_URL_SCHEME)
-        ;
+            || null !== parse_url($file, \PHP_URL_SCHEME)
+        );
     }
 
     /**
@@ -619,7 +617,7 @@ public function isAbsolutePath($file)
      */
     public function tempnam($dir, $prefix)
     {
-        list($scheme, $hierarchy) = $this->getSchemeAndHierarchy($dir);
+        [$scheme, $hierarchy] = $this->getSchemeAndHierarchy($dir);
 
         // If no scheme or scheme is "file" or "gs" (Google Cloud) create temp file in local filesystem
         if (null === $scheme || 'file' === $scheme || 'gs' === $scheme) {
@@ -663,13 +661,17 @@ public function tempnam($dir, $prefix)
     /**
      * Atomically dumps content into a file.
      *
-     * @param string $filename The file to be written to
-     * @param string $content  The data to write into the file
+     * @param string          $filename The file to be written to
+     * @param string|resource $content  The data to write into the file
      *
      * @throws IOException if the file cannot be written to
      */
     public function dumpFile($filename, $content)
     {
+        if (\is_array($content)) {
+            @trigger_error(sprintf('Calling "%s()" with an array in the $content argument is deprecated since Symfony 4.3.', __METHOD__), \E_USER_DEPRECATED);
+        }
+
         $dir = \dirname($filename);
 
         if (!is_dir($dir)) {
@@ -684,25 +686,33 @@ public function dumpFile($filename, $content)
         // when the filesystem supports chmod.
         $tmpFile = $this->tempnam($dir, basename($filename));
 
-        if (false === @file_put_contents($tmpFile, $content)) {
-            throw new IOException(sprintf('Failed to write file "%s".', $filename), 0, null, $filename);
-        }
+        try {
+            if (false === @file_put_contents($tmpFile, $content)) {
+                throw new IOException(sprintf('Failed to write file "%s".', $filename), 0, null, $filename);
+            }
 
-        @chmod($tmpFile, file_exists($filename) ? fileperms($filename) : 0666 & ~umask());
+            @chmod($tmpFile, file_exists($filename) ? fileperms($filename) : 0666 & ~umask());
 
-        $this->rename($tmpFile, $filename, true);
+            $this->rename($tmpFile, $filename, true);
+        } finally {
+            @unlink($tmpFile);
+        }
     }
 
     /**
      * Appends content to an existing file.
      *
-     * @param string $filename The file to which to append content
-     * @param string $content  The content to append
+     * @param string          $filename The file to which to append content
+     * @param string|resource $content  The content to append
      *
      * @throws IOException If the file is not writable
      */
     public function appendToFile($filename, $content)
     {
+        if (\is_array($content)) {
+            @trigger_error(sprintf('Calling "%s()" with an array in the $content argument is deprecated since Symfony 4.3.', __METHOD__), \E_USER_DEPRECATED);
+        }
+
         $dir = \dirname($filename);
 
         if (!is_dir($dir)) {
@@ -713,29 +723,20 @@ public function appendToFile($filename, $content)
             throw new IOException(sprintf('Unable to write to the "%s" directory.', $dir), 0, null, $dir);
         }
 
-        if (false === @file_put_contents($filename, $content, FILE_APPEND)) {
+        if (false === @file_put_contents($filename, $content, \FILE_APPEND)) {
             throw new IOException(sprintf('Failed to write file "%s".', $filename), 0, null, $filename);
         }
     }
 
-    /**
-     * @param mixed $files
-     *
-     * @return array|\Traversable
-     */
-    private function toIterable($files)
+    private function toIterable($files): iterable
     {
         return \is_array($files) || $files instanceof \Traversable ? $files : [$files];
     }
 
     /**
      * Gets a 2-tuple of scheme (may be null) and hierarchical part of a filename (e.g. file:///tmp -> [file, tmp]).
-     *
-     * @param string $filename The filename to be parsed
-     *
-     * @return array The filename scheme and hierarchical part
      */
-    private function getSchemeAndHierarchy($filename)
+    private function getSchemeAndHierarchy(string $filename): array
     {
         $components = explode('://', $filename, 2);
 
@@ -743,21 +744,18 @@ private function getSchemeAndHierarchy($filename)
     }
 
     /**
-     * @param callable $func
-     *
      * @return mixed
      */
-    private static function box($func)
+    private static function box(callable $func)
     {
         self::$lastError = null;
         set_error_handler(__CLASS__.'::handleError');
         try {
-            $result = \call_user_func_array($func, \array_slice(\func_get_args(), 1));
+            $result = $func(...\array_slice(\func_get_args(), 1));
             restore_error_handler();
 
             return $result;
         } catch (\Throwable $e) {
-        } catch (\Exception $e) {
         }
         restore_error_handler();
 
diff --git a/vendor/symfony/filesystem/LockHandler.php b/vendor/symfony/filesystem/LockHandler.php
deleted file mode 100644
index 8e0eb741213b2e1c03bd62fbf86ea1450e0ad692..0000000000000000000000000000000000000000
--- a/vendor/symfony/filesystem/LockHandler.php
+++ /dev/null
@@ -1,121 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Filesystem;
-
-use Symfony\Component\Filesystem\Exception\IOException;
-use Symfony\Component\Lock\Store\FlockStore;
-use Symfony\Component\Lock\Store\SemaphoreStore;
-
-@trigger_error(sprintf('The %s class is deprecated since Symfony 3.4 and will be removed in 4.0. Use %s or %s instead.', LockHandler::class, SemaphoreStore::class, FlockStore::class), E_USER_DEPRECATED);
-
-/**
- * LockHandler class provides a simple abstraction to lock anything by means of
- * a file lock.
- *
- * A locked file is created based on the lock name when calling lock(). Other
- * lock handlers will not be able to lock the same name until it is released
- * (explicitly by calling release() or implicitly when the instance holding the
- * lock is destroyed).
- *
- * @author Grégoire Pineau <lyrixx@lyrixx.info>
- * @author Romain Neutron <imprec@gmail.com>
- * @author Nicolas Grekas <p@tchwork.com>
- *
- * @deprecated since version 3.4, to be removed in 4.0. Use Symfony\Component\Lock\Store\SemaphoreStore or Symfony\Component\Lock\Store\FlockStore instead.
- */
-class LockHandler
-{
-    private $file;
-    private $handle;
-
-    /**
-     * @param string      $name     The lock name
-     * @param string|null $lockPath The directory to store the lock. Default values will use temporary directory
-     *
-     * @throws IOException If the lock directory could not be created or is not writable
-     */
-    public function __construct($name, $lockPath = null)
-    {
-        $lockPath = $lockPath ?: sys_get_temp_dir();
-
-        if (!is_dir($lockPath)) {
-            $fs = new Filesystem();
-            $fs->mkdir($lockPath);
-        }
-
-        if (!is_writable($lockPath)) {
-            throw new IOException(sprintf('The directory "%s" is not writable.', $lockPath), 0, null, $lockPath);
-        }
-
-        $this->file = sprintf('%s/sf.%s.%s.lock', $lockPath, preg_replace('/[^a-z0-9\._-]+/i', '-', $name), hash('sha256', $name));
-    }
-
-    /**
-     * Lock the resource.
-     *
-     * @param bool $blocking Wait until the lock is released
-     *
-     * @return bool Returns true if the lock was acquired, false otherwise
-     *
-     * @throws IOException If the lock file could not be created or opened
-     */
-    public function lock($blocking = false)
-    {
-        if ($this->handle) {
-            return true;
-        }
-
-        $error = null;
-
-        // Silence error reporting
-        set_error_handler(function ($errno, $msg) use (&$error) {
-            $error = $msg;
-        });
-
-        if (!$this->handle = fopen($this->file, 'r+') ?: fopen($this->file, 'r')) {
-            if ($this->handle = fopen($this->file, 'x')) {
-                chmod($this->file, 0666);
-            } elseif (!$this->handle = fopen($this->file, 'r+') ?: fopen($this->file, 'r')) {
-                usleep(100); // Give some time for chmod() to complete
-                $this->handle = fopen($this->file, 'r+') ?: fopen($this->file, 'r');
-            }
-        }
-        restore_error_handler();
-
-        if (!$this->handle) {
-            throw new IOException($error, 0, null, $this->file);
-        }
-
-        // On Windows, even if PHP doc says the contrary, LOCK_NB works, see
-        // https://bugs.php.net/54129
-        if (!flock($this->handle, LOCK_EX | ($blocking ? 0 : LOCK_NB))) {
-            fclose($this->handle);
-            $this->handle = null;
-
-            return false;
-        }
-
-        return true;
-    }
-
-    /**
-     * Release the resource.
-     */
-    public function release()
-    {
-        if ($this->handle) {
-            flock($this->handle, LOCK_UN | LOCK_NB);
-            fclose($this->handle);
-            $this->handle = null;
-        }
-    }
-}
diff --git a/vendor/symfony/filesystem/Tests/ExceptionTest.php b/vendor/symfony/filesystem/Tests/ExceptionTest.php
deleted file mode 100644
index 300acf10342365e9209fa817e7e3f658a218437f..0000000000000000000000000000000000000000
--- a/vendor/symfony/filesystem/Tests/ExceptionTest.php
+++ /dev/null
@@ -1,47 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Filesystem\Tests;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Filesystem\Exception\FileNotFoundException;
-use Symfony\Component\Filesystem\Exception\IOException;
-
-/**
- * Test class for Filesystem.
- */
-class ExceptionTest extends TestCase
-{
-    public function testGetPath()
-    {
-        $e = new IOException('', 0, null, '/foo');
-        $this->assertEquals('/foo', $e->getPath(), 'The pass should be returned.');
-    }
-
-    public function testGeneratedMessage()
-    {
-        $e = new FileNotFoundException(null, 0, null, '/foo');
-        $this->assertEquals('/foo', $e->getPath());
-        $this->assertEquals('File "/foo" could not be found.', $e->getMessage(), 'A message should be generated.');
-    }
-
-    public function testGeneratedMessageWithoutPath()
-    {
-        $e = new FileNotFoundException();
-        $this->assertEquals('File could not be found.', $e->getMessage(), 'A message should be generated.');
-    }
-
-    public function testCustomMessage()
-    {
-        $e = new FileNotFoundException('bar', 0, null, '/foo');
-        $this->assertEquals('bar', $e->getMessage(), 'A custom message should be possible still.');
-    }
-}
diff --git a/vendor/symfony/filesystem/Tests/FilesystemTest.php b/vendor/symfony/filesystem/Tests/FilesystemTest.php
deleted file mode 100644
index 8ac80437fe5dc9c04e17193622df42d7f0ffecae..0000000000000000000000000000000000000000
--- a/vendor/symfony/filesystem/Tests/FilesystemTest.php
+++ /dev/null
@@ -1,1660 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Filesystem\Tests;
-
-/**
- * Test class for Filesystem.
- */
-class FilesystemTest extends FilesystemTestCase
-{
-    public function testCopyCreatesNewFile()
-    {
-        $sourceFilePath = $this->workspace.\DIRECTORY_SEPARATOR.'copy_source_file';
-        $targetFilePath = $this->workspace.\DIRECTORY_SEPARATOR.'copy_target_file';
-
-        file_put_contents($sourceFilePath, 'SOURCE FILE');
-
-        $this->filesystem->copy($sourceFilePath, $targetFilePath);
-
-        $this->assertFileExists($targetFilePath);
-        $this->assertStringEqualsFile($targetFilePath, 'SOURCE FILE');
-    }
-
-    public function testCopyFails()
-    {
-        $this->expectException('Symfony\Component\Filesystem\Exception\IOException');
-        $sourceFilePath = $this->workspace.\DIRECTORY_SEPARATOR.'copy_source_file';
-        $targetFilePath = $this->workspace.\DIRECTORY_SEPARATOR.'copy_target_file';
-
-        $this->filesystem->copy($sourceFilePath, $targetFilePath);
-    }
-
-    public function testCopyUnreadableFileFails()
-    {
-        $this->expectException('Symfony\Component\Filesystem\Exception\IOException');
-        // skip test on Windows; PHP can't easily set file as unreadable on Windows
-        if ('\\' === \DIRECTORY_SEPARATOR) {
-            $this->markTestSkipped('This test cannot run on Windows.');
-        }
-
-        if (!getenv('USER') || 'root' === getenv('USER')) {
-            $this->markTestSkipped('This test will fail if run under superuser');
-        }
-
-        $sourceFilePath = $this->workspace.\DIRECTORY_SEPARATOR.'copy_source_file';
-        $targetFilePath = $this->workspace.\DIRECTORY_SEPARATOR.'copy_target_file';
-
-        file_put_contents($sourceFilePath, 'SOURCE FILE');
-
-        // make sure target cannot be read
-        $this->filesystem->chmod($sourceFilePath, 0222);
-
-        $this->filesystem->copy($sourceFilePath, $targetFilePath);
-    }
-
-    public function testCopyOverridesExistingFileIfModified()
-    {
-        $sourceFilePath = $this->workspace.\DIRECTORY_SEPARATOR.'copy_source_file';
-        $targetFilePath = $this->workspace.\DIRECTORY_SEPARATOR.'copy_target_file';
-
-        file_put_contents($sourceFilePath, 'SOURCE FILE');
-        file_put_contents($targetFilePath, 'TARGET FILE');
-        touch($targetFilePath, time() - 1000);
-
-        $this->filesystem->copy($sourceFilePath, $targetFilePath);
-
-        $this->assertFileExists($targetFilePath);
-        $this->assertStringEqualsFile($targetFilePath, 'SOURCE FILE');
-    }
-
-    public function testCopyDoesNotOverrideExistingFileByDefault()
-    {
-        $sourceFilePath = $this->workspace.\DIRECTORY_SEPARATOR.'copy_source_file';
-        $targetFilePath = $this->workspace.\DIRECTORY_SEPARATOR.'copy_target_file';
-
-        file_put_contents($sourceFilePath, 'SOURCE FILE');
-        file_put_contents($targetFilePath, 'TARGET FILE');
-
-        // make sure both files have the same modification time
-        $modificationTime = time() - 1000;
-        touch($sourceFilePath, $modificationTime);
-        touch($targetFilePath, $modificationTime);
-
-        $this->filesystem->copy($sourceFilePath, $targetFilePath);
-
-        $this->assertFileExists($targetFilePath);
-        $this->assertStringEqualsFile($targetFilePath, 'TARGET FILE');
-    }
-
-    public function testCopyOverridesExistingFileIfForced()
-    {
-        $sourceFilePath = $this->workspace.\DIRECTORY_SEPARATOR.'copy_source_file';
-        $targetFilePath = $this->workspace.\DIRECTORY_SEPARATOR.'copy_target_file';
-
-        file_put_contents($sourceFilePath, 'SOURCE FILE');
-        file_put_contents($targetFilePath, 'TARGET FILE');
-
-        // make sure both files have the same modification time
-        $modificationTime = time() - 1000;
-        touch($sourceFilePath, $modificationTime);
-        touch($targetFilePath, $modificationTime);
-
-        $this->filesystem->copy($sourceFilePath, $targetFilePath, true);
-
-        $this->assertFileExists($targetFilePath);
-        $this->assertStringEqualsFile($targetFilePath, 'SOURCE FILE');
-    }
-
-    public function testCopyWithOverrideWithReadOnlyTargetFails()
-    {
-        $this->expectException('Symfony\Component\Filesystem\Exception\IOException');
-        // skip test on Windows; PHP can't easily set file as unwritable on Windows
-        if ('\\' === \DIRECTORY_SEPARATOR) {
-            $this->markTestSkipped('This test cannot run on Windows.');
-        }
-
-        if (!getenv('USER') || 'root' === getenv('USER')) {
-            $this->markTestSkipped('This test will fail if run under superuser');
-        }
-
-        $sourceFilePath = $this->workspace.\DIRECTORY_SEPARATOR.'copy_source_file';
-        $targetFilePath = $this->workspace.\DIRECTORY_SEPARATOR.'copy_target_file';
-
-        file_put_contents($sourceFilePath, 'SOURCE FILE');
-        file_put_contents($targetFilePath, 'TARGET FILE');
-
-        // make sure both files have the same modification time
-        $modificationTime = time() - 1000;
-        touch($sourceFilePath, $modificationTime);
-        touch($targetFilePath, $modificationTime);
-
-        // make sure target is read-only
-        $this->filesystem->chmod($targetFilePath, 0444);
-
-        $this->filesystem->copy($sourceFilePath, $targetFilePath, true);
-    }
-
-    public function testCopyCreatesTargetDirectoryIfItDoesNotExist()
-    {
-        $sourceFilePath = $this->workspace.\DIRECTORY_SEPARATOR.'copy_source_file';
-        $targetFileDirectory = $this->workspace.\DIRECTORY_SEPARATOR.'directory';
-        $targetFilePath = $targetFileDirectory.\DIRECTORY_SEPARATOR.'copy_target_file';
-
-        file_put_contents($sourceFilePath, 'SOURCE FILE');
-
-        $this->filesystem->copy($sourceFilePath, $targetFilePath);
-
-        $this->assertDirectoryExists($targetFileDirectory);
-        $this->assertFileExists($targetFilePath);
-        $this->assertStringEqualsFile($targetFilePath, 'SOURCE FILE');
-    }
-
-    /**
-     * @group network
-     */
-    public function testCopyForOriginUrlsAndExistingLocalFileDefaultsToCopy()
-    {
-        if (!\in_array('https', stream_get_wrappers())) {
-            $this->markTestSkipped('"https" stream wrapper is not enabled.');
-        }
-        $sourceFilePath = 'https://symfony.com/images/common/logo/logo_symfony_header.png';
-        $targetFilePath = $this->workspace.\DIRECTORY_SEPARATOR.'copy_target_file';
-
-        file_put_contents($targetFilePath, 'TARGET FILE');
-
-        $this->filesystem->copy($sourceFilePath, $targetFilePath, false);
-
-        $this->assertFileExists($targetFilePath);
-        $this->assertEquals(file_get_contents($sourceFilePath), file_get_contents($targetFilePath));
-    }
-
-    public function testMkdirCreatesDirectoriesRecursively()
-    {
-        $directory = $this->workspace
-            .\DIRECTORY_SEPARATOR.'directory'
-            .\DIRECTORY_SEPARATOR.'sub_directory';
-
-        $this->filesystem->mkdir($directory);
-
-        $this->assertDirectoryExists($directory);
-    }
-
-    public function testMkdirCreatesDirectoriesFromArray()
-    {
-        $basePath = $this->workspace.\DIRECTORY_SEPARATOR;
-        $directories = [
-            $basePath.'1', $basePath.'2', $basePath.'3',
-        ];
-
-        $this->filesystem->mkdir($directories);
-
-        $this->assertDirectoryExists($basePath.'1');
-        $this->assertDirectoryExists($basePath.'2');
-        $this->assertDirectoryExists($basePath.'3');
-    }
-
-    public function testMkdirCreatesDirectoriesFromTraversableObject()
-    {
-        $basePath = $this->workspace.\DIRECTORY_SEPARATOR;
-        $directories = new \ArrayObject([
-            $basePath.'1', $basePath.'2', $basePath.'3',
-        ]);
-
-        $this->filesystem->mkdir($directories);
-
-        $this->assertDirectoryExists($basePath.'1');
-        $this->assertDirectoryExists($basePath.'2');
-        $this->assertDirectoryExists($basePath.'3');
-    }
-
-    public function testMkdirCreatesDirectoriesFails()
-    {
-        $this->expectException('Symfony\Component\Filesystem\Exception\IOException');
-        $basePath = $this->workspace.\DIRECTORY_SEPARATOR;
-        $dir = $basePath.'2';
-
-        file_put_contents($dir, '');
-
-        $this->filesystem->mkdir($dir);
-    }
-
-    public function testTouchCreatesEmptyFile()
-    {
-        $file = $this->workspace.\DIRECTORY_SEPARATOR.'1';
-
-        $this->filesystem->touch($file);
-
-        $this->assertFileExists($file);
-    }
-
-    public function testTouchFails()
-    {
-        $this->expectException('Symfony\Component\Filesystem\Exception\IOException');
-        $file = $this->workspace.\DIRECTORY_SEPARATOR.'1'.\DIRECTORY_SEPARATOR.'2';
-
-        $this->filesystem->touch($file);
-    }
-
-    public function testTouchCreatesEmptyFilesFromArray()
-    {
-        $basePath = $this->workspace.\DIRECTORY_SEPARATOR;
-        $files = [
-            $basePath.'1', $basePath.'2', $basePath.'3',
-        ];
-
-        $this->filesystem->touch($files);
-
-        $this->assertFileExists($basePath.'1');
-        $this->assertFileExists($basePath.'2');
-        $this->assertFileExists($basePath.'3');
-    }
-
-    public function testTouchCreatesEmptyFilesFromTraversableObject()
-    {
-        $basePath = $this->workspace.\DIRECTORY_SEPARATOR;
-        $files = new \ArrayObject([
-            $basePath.'1', $basePath.'2', $basePath.'3',
-        ]);
-
-        $this->filesystem->touch($files);
-
-        $this->assertFileExists($basePath.'1');
-        $this->assertFileExists($basePath.'2');
-        $this->assertFileExists($basePath.'3');
-    }
-
-    public function testRemoveCleansFilesAndDirectoriesIteratively()
-    {
-        $basePath = $this->workspace.\DIRECTORY_SEPARATOR.'directory'.\DIRECTORY_SEPARATOR;
-
-        mkdir($basePath);
-        mkdir($basePath.'dir');
-        touch($basePath.'file');
-
-        $this->filesystem->remove($basePath);
-
-        $this->assertFileNotExists($basePath);
-    }
-
-    public function testRemoveCleansArrayOfFilesAndDirectories()
-    {
-        $basePath = $this->workspace.\DIRECTORY_SEPARATOR;
-
-        mkdir($basePath.'dir');
-        touch($basePath.'file');
-
-        $files = [
-            $basePath.'dir', $basePath.'file',
-        ];
-
-        $this->filesystem->remove($files);
-
-        $this->assertFileNotExists($basePath.'dir');
-        $this->assertFileNotExists($basePath.'file');
-    }
-
-    public function testRemoveCleansTraversableObjectOfFilesAndDirectories()
-    {
-        $basePath = $this->workspace.\DIRECTORY_SEPARATOR;
-
-        mkdir($basePath.'dir');
-        touch($basePath.'file');
-
-        $files = new \ArrayObject([
-            $basePath.'dir', $basePath.'file',
-        ]);
-
-        $this->filesystem->remove($files);
-
-        $this->assertFileNotExists($basePath.'dir');
-        $this->assertFileNotExists($basePath.'file');
-    }
-
-    public function testRemoveIgnoresNonExistingFiles()
-    {
-        $basePath = $this->workspace.\DIRECTORY_SEPARATOR;
-
-        mkdir($basePath.'dir');
-
-        $files = [
-            $basePath.'dir', $basePath.'file',
-        ];
-
-        $this->filesystem->remove($files);
-
-        $this->assertFileNotExists($basePath.'dir');
-    }
-
-    public function testRemoveCleansInvalidLinks()
-    {
-        $this->markAsSkippedIfSymlinkIsMissing();
-
-        $basePath = $this->workspace.\DIRECTORY_SEPARATOR.'directory'.\DIRECTORY_SEPARATOR;
-
-        mkdir($basePath);
-        mkdir($basePath.'dir');
-        // create symlink to nonexistent file
-        @symlink($basePath.'file', $basePath.'file-link');
-
-        // create symlink to dir using trailing forward slash
-        $this->filesystem->symlink($basePath.'dir/', $basePath.'dir-link');
-        $this->assertDirectoryExists($basePath.'dir-link');
-
-        // create symlink to nonexistent dir
-        rmdir($basePath.'dir');
-        $this->assertFalse('\\' === \DIRECTORY_SEPARATOR ? @readlink($basePath.'dir-link') : is_dir($basePath.'dir-link'));
-
-        $this->filesystem->remove($basePath);
-
-        $this->assertFileNotExists($basePath);
-    }
-
-    public function testFilesExists()
-    {
-        $basePath = $this->workspace.\DIRECTORY_SEPARATOR.'directory'.\DIRECTORY_SEPARATOR;
-
-        mkdir($basePath);
-        touch($basePath.'file1');
-        mkdir($basePath.'folder');
-
-        $this->assertTrue($this->filesystem->exists($basePath.'file1'));
-        $this->assertTrue($this->filesystem->exists($basePath.'folder'));
-    }
-
-    public function testFilesExistsFails()
-    {
-        $this->expectException('Symfony\Component\Filesystem\Exception\IOException');
-        if ('\\' !== \DIRECTORY_SEPARATOR) {
-            $this->markTestSkipped('Long file names are an issue on Windows');
-        }
-        $basePath = $this->workspace.'\\directory\\';
-        $maxPathLength = PHP_MAXPATHLEN - 2;
-
-        $oldPath = getcwd();
-        mkdir($basePath);
-        chdir($basePath);
-        $file = str_repeat('T', $maxPathLength - \strlen($basePath) + 1);
-        $path = $basePath.$file;
-        exec('TYPE NUL >>'.$file); // equivalent of touch, we can not use the php touch() here because it suffers from the same limitation
-        $this->longPathNamesWindows[] = $path; // save this so we can clean up later
-        chdir($oldPath);
-        $this->filesystem->exists($path);
-    }
-
-    public function testFilesExistsTraversableObjectOfFilesAndDirectories()
-    {
-        $basePath = $this->workspace.\DIRECTORY_SEPARATOR;
-
-        mkdir($basePath.'dir');
-        touch($basePath.'file');
-
-        $files = new \ArrayObject([
-            $basePath.'dir', $basePath.'file',
-        ]);
-
-        $this->assertTrue($this->filesystem->exists($files));
-    }
-
-    public function testFilesNotExistsTraversableObjectOfFilesAndDirectories()
-    {
-        $basePath = $this->workspace.\DIRECTORY_SEPARATOR;
-
-        mkdir($basePath.'dir');
-        touch($basePath.'file');
-        touch($basePath.'file2');
-
-        $files = new \ArrayObject([
-            $basePath.'dir', $basePath.'file', $basePath.'file2',
-        ]);
-
-        unlink($basePath.'file');
-
-        $this->assertFalse($this->filesystem->exists($files));
-    }
-
-    public function testInvalidFileNotExists()
-    {
-        $basePath = $this->workspace.\DIRECTORY_SEPARATOR.'directory'.\DIRECTORY_SEPARATOR;
-
-        $this->assertFalse($this->filesystem->exists($basePath.time()));
-    }
-
-    public function testChmodChangesFileMode()
-    {
-        $this->markAsSkippedIfChmodIsMissing();
-
-        $dir = $this->workspace.\DIRECTORY_SEPARATOR.'dir';
-        mkdir($dir);
-        $file = $dir.\DIRECTORY_SEPARATOR.'file';
-        touch($file);
-
-        $this->filesystem->chmod($file, 0400);
-        $this->filesystem->chmod($dir, 0753);
-
-        $this->assertFilePermissions(753, $dir);
-        $this->assertFilePermissions(400, $file);
-    }
-
-    public function testChmodWithWrongModLeavesPreviousPermissionsUntouched()
-    {
-        $this->markAsSkippedIfChmodIsMissing();
-
-        if (\defined('HHVM_VERSION')) {
-            $this->markTestSkipped('chmod() changes permissions even when passing invalid modes on HHVM');
-        }
-
-        $dir = $this->workspace.\DIRECTORY_SEPARATOR.'file';
-        touch($dir);
-
-        $permissions = fileperms($dir);
-
-        $this->filesystem->chmod($dir, 'Wrongmode');
-
-        $this->assertSame($permissions, fileperms($dir));
-    }
-
-    public function testChmodRecursive()
-    {
-        $this->markAsSkippedIfChmodIsMissing();
-
-        $dir = $this->workspace.\DIRECTORY_SEPARATOR.'dir';
-        mkdir($dir);
-        $file = $dir.\DIRECTORY_SEPARATOR.'file';
-        touch($file);
-
-        $this->filesystem->chmod($file, 0400, 0000, true);
-        $this->filesystem->chmod($dir, 0753, 0000, true);
-
-        $this->assertFilePermissions(753, $dir);
-        $this->assertFilePermissions(753, $file);
-    }
-
-    public function testChmodAppliesUmask()
-    {
-        $this->markAsSkippedIfChmodIsMissing();
-
-        $file = $this->workspace.\DIRECTORY_SEPARATOR.'file';
-        touch($file);
-
-        $this->filesystem->chmod($file, 0770, 0022);
-        $this->assertFilePermissions(750, $file);
-    }
-
-    public function testChmodChangesModeOfArrayOfFiles()
-    {
-        $this->markAsSkippedIfChmodIsMissing();
-
-        $directory = $this->workspace.\DIRECTORY_SEPARATOR.'directory';
-        $file = $this->workspace.\DIRECTORY_SEPARATOR.'file';
-        $files = [$directory, $file];
-
-        mkdir($directory);
-        touch($file);
-
-        $this->filesystem->chmod($files, 0753);
-
-        $this->assertFilePermissions(753, $file);
-        $this->assertFilePermissions(753, $directory);
-    }
-
-    public function testChmodChangesModeOfTraversableFileObject()
-    {
-        $this->markAsSkippedIfChmodIsMissing();
-
-        $directory = $this->workspace.\DIRECTORY_SEPARATOR.'directory';
-        $file = $this->workspace.\DIRECTORY_SEPARATOR.'file';
-        $files = new \ArrayObject([$directory, $file]);
-
-        mkdir($directory);
-        touch($file);
-
-        $this->filesystem->chmod($files, 0753);
-
-        $this->assertFilePermissions(753, $file);
-        $this->assertFilePermissions(753, $directory);
-    }
-
-    public function testChmodChangesZeroModeOnSubdirectoriesOnRecursive()
-    {
-        $this->markAsSkippedIfChmodIsMissing();
-
-        $directory = $this->workspace.\DIRECTORY_SEPARATOR.'directory';
-        $subdirectory = $directory.\DIRECTORY_SEPARATOR.'subdirectory';
-
-        mkdir($directory);
-        mkdir($subdirectory);
-        chmod($subdirectory, 0000);
-
-        $this->filesystem->chmod($directory, 0753, 0000, true);
-
-        $this->assertFilePermissions(753, $subdirectory);
-    }
-
-    public function testChown()
-    {
-        $this->markAsSkippedIfPosixIsMissing();
-
-        $dir = $this->workspace.\DIRECTORY_SEPARATOR.'dir';
-        mkdir($dir);
-
-        $owner = $this->getFileOwner($dir);
-        $this->filesystem->chown($dir, $owner);
-
-        $this->assertSame($owner, $this->getFileOwner($dir));
-    }
-
-    public function testChownRecursive()
-    {
-        $this->markAsSkippedIfPosixIsMissing();
-
-        $dir = $this->workspace.\DIRECTORY_SEPARATOR.'dir';
-        mkdir($dir);
-        $file = $dir.\DIRECTORY_SEPARATOR.'file';
-        touch($file);
-
-        $owner = $this->getFileOwner($dir);
-        $this->filesystem->chown($dir, $owner, true);
-
-        $this->assertSame($owner, $this->getFileOwner($file));
-    }
-
-    public function testChownSymlink()
-    {
-        $this->markAsSkippedIfSymlinkIsMissing();
-
-        $file = $this->workspace.\DIRECTORY_SEPARATOR.'file';
-        $link = $this->workspace.\DIRECTORY_SEPARATOR.'link';
-
-        touch($file);
-
-        $this->filesystem->symlink($file, $link);
-
-        $owner = $this->getFileOwner($link);
-        $this->filesystem->chown($link, $owner);
-
-        $this->assertSame($owner, $this->getFileOwner($link));
-    }
-
-    public function testChownLink()
-    {
-        $this->markAsSkippedIfLinkIsMissing();
-
-        $file = $this->workspace.\DIRECTORY_SEPARATOR.'file';
-        $link = $this->workspace.\DIRECTORY_SEPARATOR.'link';
-
-        touch($file);
-
-        $this->filesystem->hardlink($file, $link);
-
-        $owner = $this->getFileOwner($link);
-        $this->filesystem->chown($link, $owner);
-
-        $this->assertSame($owner, $this->getFileOwner($link));
-    }
-
-    public function testChownSymlinkFails()
-    {
-        $this->expectException('Symfony\Component\Filesystem\Exception\IOException');
-        $this->markAsSkippedIfSymlinkIsMissing();
-
-        $file = $this->workspace.\DIRECTORY_SEPARATOR.'file';
-        $link = $this->workspace.\DIRECTORY_SEPARATOR.'link';
-
-        touch($file);
-
-        $this->filesystem->symlink($file, $link);
-
-        $this->filesystem->chown($link, 'user'.time().mt_rand(1000, 9999));
-    }
-
-    public function testChownLinkFails()
-    {
-        $this->expectException('Symfony\Component\Filesystem\Exception\IOException');
-        $this->markAsSkippedIfLinkIsMissing();
-
-        $file = $this->workspace.\DIRECTORY_SEPARATOR.'file';
-        $link = $this->workspace.\DIRECTORY_SEPARATOR.'link';
-
-        touch($file);
-
-        $this->filesystem->hardlink($file, $link);
-
-        $this->filesystem->chown($link, 'user'.time().mt_rand(1000, 9999));
-    }
-
-    public function testChownFail()
-    {
-        $this->expectException('Symfony\Component\Filesystem\Exception\IOException');
-        $this->markAsSkippedIfPosixIsMissing();
-
-        $dir = $this->workspace.\DIRECTORY_SEPARATOR.'dir';
-        mkdir($dir);
-
-        $this->filesystem->chown($dir, 'user'.time().mt_rand(1000, 9999));
-    }
-
-    public function testChgrp()
-    {
-        $this->markAsSkippedIfPosixIsMissing();
-
-        $dir = $this->workspace.\DIRECTORY_SEPARATOR.'dir';
-        mkdir($dir);
-
-        $group = $this->getFileGroup($dir);
-        $this->filesystem->chgrp($dir, $group);
-
-        $this->assertSame($group, $this->getFileGroup($dir));
-    }
-
-    public function testChgrpRecursive()
-    {
-        $this->markAsSkippedIfPosixIsMissing();
-
-        $dir = $this->workspace.\DIRECTORY_SEPARATOR.'dir';
-        mkdir($dir);
-        $file = $dir.\DIRECTORY_SEPARATOR.'file';
-        touch($file);
-
-        $group = $this->getFileGroup($dir);
-        $this->filesystem->chgrp($dir, $group, true);
-
-        $this->assertSame($group, $this->getFileGroup($file));
-    }
-
-    public function testChgrpSymlink()
-    {
-        $this->markAsSkippedIfSymlinkIsMissing();
-
-        $file = $this->workspace.\DIRECTORY_SEPARATOR.'file';
-        $link = $this->workspace.\DIRECTORY_SEPARATOR.'link';
-
-        touch($file);
-
-        $this->filesystem->symlink($file, $link);
-
-        $group = $this->getFileGroup($link);
-        $this->filesystem->chgrp($link, $group);
-
-        $this->assertSame($group, $this->getFileGroup($link));
-    }
-
-    public function testChgrpLink()
-    {
-        $this->markAsSkippedIfLinkIsMissing();
-
-        $file = $this->workspace.\DIRECTORY_SEPARATOR.'file';
-        $link = $this->workspace.\DIRECTORY_SEPARATOR.'link';
-
-        touch($file);
-
-        $this->filesystem->hardlink($file, $link);
-
-        $group = $this->getFileGroup($link);
-        $this->filesystem->chgrp($link, $group);
-
-        $this->assertSame($group, $this->getFileGroup($link));
-    }
-
-    public function testChgrpSymlinkFails()
-    {
-        $this->expectException('Symfony\Component\Filesystem\Exception\IOException');
-        $this->markAsSkippedIfSymlinkIsMissing();
-
-        $file = $this->workspace.\DIRECTORY_SEPARATOR.'file';
-        $link = $this->workspace.\DIRECTORY_SEPARATOR.'link';
-
-        touch($file);
-
-        $this->filesystem->symlink($file, $link);
-
-        $this->filesystem->chgrp($link, 'user'.time().mt_rand(1000, 9999));
-    }
-
-    public function testChgrpLinkFails()
-    {
-        $this->expectException('Symfony\Component\Filesystem\Exception\IOException');
-        $this->markAsSkippedIfLinkIsMissing();
-
-        $file = $this->workspace.\DIRECTORY_SEPARATOR.'file';
-        $link = $this->workspace.\DIRECTORY_SEPARATOR.'link';
-
-        touch($file);
-
-        $this->filesystem->hardlink($file, $link);
-
-        $this->filesystem->chgrp($link, 'user'.time().mt_rand(1000, 9999));
-    }
-
-    public function testChgrpFail()
-    {
-        $this->expectException('Symfony\Component\Filesystem\Exception\IOException');
-        $this->markAsSkippedIfPosixIsMissing();
-
-        $dir = $this->workspace.\DIRECTORY_SEPARATOR.'dir';
-        mkdir($dir);
-
-        $this->filesystem->chgrp($dir, 'user'.time().mt_rand(1000, 9999));
-    }
-
-    public function testRename()
-    {
-        $file = $this->workspace.\DIRECTORY_SEPARATOR.'file';
-        $newPath = $this->workspace.\DIRECTORY_SEPARATOR.'new_file';
-        touch($file);
-
-        $this->filesystem->rename($file, $newPath);
-
-        $this->assertFileNotExists($file);
-        $this->assertFileExists($newPath);
-    }
-
-    public function testRenameThrowsExceptionIfTargetAlreadyExists()
-    {
-        $this->expectException('Symfony\Component\Filesystem\Exception\IOException');
-        $file = $this->workspace.\DIRECTORY_SEPARATOR.'file';
-        $newPath = $this->workspace.\DIRECTORY_SEPARATOR.'new_file';
-
-        touch($file);
-        touch($newPath);
-
-        $this->filesystem->rename($file, $newPath);
-    }
-
-    public function testRenameOverwritesTheTargetIfItAlreadyExists()
-    {
-        $file = $this->workspace.\DIRECTORY_SEPARATOR.'file';
-        $newPath = $this->workspace.\DIRECTORY_SEPARATOR.'new_file';
-
-        touch($file);
-        touch($newPath);
-
-        $this->filesystem->rename($file, $newPath, true);
-
-        $this->assertFileNotExists($file);
-        $this->assertFileExists($newPath);
-    }
-
-    public function testRenameThrowsExceptionOnError()
-    {
-        $this->expectException('Symfony\Component\Filesystem\Exception\IOException');
-        $file = $this->workspace.\DIRECTORY_SEPARATOR.uniqid('fs_test_', true);
-        $newPath = $this->workspace.\DIRECTORY_SEPARATOR.'new_file';
-
-        $this->filesystem->rename($file, $newPath);
-    }
-
-    public function testSymlink()
-    {
-        if ('\\' === \DIRECTORY_SEPARATOR) {
-            $this->markTestSkipped('Windows does not support creating "broken" symlinks');
-        }
-
-        $file = $this->workspace.\DIRECTORY_SEPARATOR.'file';
-        $link = $this->workspace.\DIRECTORY_SEPARATOR.'link';
-
-        // $file does not exist right now: creating "broken" links is a wanted feature
-        $this->filesystem->symlink($file, $link);
-
-        $this->assertTrue(is_link($link));
-
-        // Create the linked file AFTER creating the link
-        touch($file);
-
-        $this->assertEquals($file, readlink($link));
-    }
-
-    /**
-     * @depends testSymlink
-     */
-    public function testRemoveSymlink()
-    {
-        $this->markAsSkippedIfSymlinkIsMissing();
-
-        $link = $this->workspace.\DIRECTORY_SEPARATOR.'link';
-
-        $this->filesystem->remove($link);
-
-        $this->assertFalse(is_link($link));
-        $this->assertFalse(is_file($link));
-        $this->assertDirectoryNotExists($link);
-    }
-
-    public function testSymlinkIsOverwrittenIfPointsToDifferentTarget()
-    {
-        $this->markAsSkippedIfSymlinkIsMissing();
-
-        $file = $this->workspace.\DIRECTORY_SEPARATOR.'file';
-        $link = $this->workspace.\DIRECTORY_SEPARATOR.'link';
-
-        touch($file);
-        symlink($this->workspace, $link);
-
-        $this->filesystem->symlink($file, $link);
-
-        $this->assertTrue(is_link($link));
-        $this->assertEquals($file, readlink($link));
-    }
-
-    public function testSymlinkIsNotOverwrittenIfAlreadyCreated()
-    {
-        $this->markAsSkippedIfSymlinkIsMissing();
-
-        $file = $this->workspace.\DIRECTORY_SEPARATOR.'file';
-        $link = $this->workspace.\DIRECTORY_SEPARATOR.'link';
-
-        touch($file);
-        symlink($file, $link);
-
-        $this->filesystem->symlink($file, $link);
-
-        $this->assertTrue(is_link($link));
-        $this->assertEquals($file, readlink($link));
-    }
-
-    public function testSymlinkCreatesTargetDirectoryIfItDoesNotExist()
-    {
-        $this->markAsSkippedIfSymlinkIsMissing();
-
-        $file = $this->workspace.\DIRECTORY_SEPARATOR.'file';
-        $link1 = $this->workspace.\DIRECTORY_SEPARATOR.'dir'.\DIRECTORY_SEPARATOR.'link';
-        $link2 = $this->workspace.\DIRECTORY_SEPARATOR.'dir'.\DIRECTORY_SEPARATOR.'subdir'.\DIRECTORY_SEPARATOR.'link';
-
-        touch($file);
-
-        $this->filesystem->symlink($file, $link1);
-        $this->filesystem->symlink($file, $link2);
-
-        $this->assertTrue(is_link($link1));
-        $this->assertEquals($file, readlink($link1));
-        $this->assertTrue(is_link($link2));
-        $this->assertEquals($file, readlink($link2));
-    }
-
-    public function testLink()
-    {
-        $this->markAsSkippedIfLinkIsMissing();
-
-        $file = $this->workspace.\DIRECTORY_SEPARATOR.'file';
-        $link = $this->workspace.\DIRECTORY_SEPARATOR.'link';
-
-        touch($file);
-        $this->filesystem->hardlink($file, $link);
-
-        $this->assertTrue(is_file($link));
-        $this->assertEquals(fileinode($file), fileinode($link));
-    }
-
-    /**
-     * @depends testLink
-     */
-    public function testRemoveLink()
-    {
-        $this->markAsSkippedIfLinkIsMissing();
-
-        $link = $this->workspace.\DIRECTORY_SEPARATOR.'link';
-
-        $this->filesystem->remove($link);
-
-        $this->assertTrue(!is_file($link));
-    }
-
-    public function testLinkIsOverwrittenIfPointsToDifferentTarget()
-    {
-        $this->markAsSkippedIfLinkIsMissing();
-
-        $file = $this->workspace.\DIRECTORY_SEPARATOR.'file';
-        $file2 = $this->workspace.\DIRECTORY_SEPARATOR.'file2';
-        $link = $this->workspace.\DIRECTORY_SEPARATOR.'link';
-
-        touch($file);
-        touch($file2);
-        link($file2, $link);
-
-        $this->filesystem->hardlink($file, $link);
-
-        $this->assertTrue(is_file($link));
-        $this->assertEquals(fileinode($file), fileinode($link));
-    }
-
-    public function testLinkIsNotOverwrittenIfAlreadyCreated()
-    {
-        $this->markAsSkippedIfLinkIsMissing();
-
-        $file = $this->workspace.\DIRECTORY_SEPARATOR.'file';
-        $link = $this->workspace.\DIRECTORY_SEPARATOR.'link';
-
-        touch($file);
-        link($file, $link);
-
-        $this->filesystem->hardlink($file, $link);
-
-        $this->assertTrue(is_file($link));
-        $this->assertEquals(fileinode($file), fileinode($link));
-    }
-
-    public function testLinkWithSeveralTargets()
-    {
-        $this->markAsSkippedIfLinkIsMissing();
-
-        $file = $this->workspace.\DIRECTORY_SEPARATOR.'file';
-        $link1 = $this->workspace.\DIRECTORY_SEPARATOR.'link';
-        $link2 = $this->workspace.\DIRECTORY_SEPARATOR.'link2';
-
-        touch($file);
-
-        $this->filesystem->hardlink($file, [$link1, $link2]);
-
-        $this->assertTrue(is_file($link1));
-        $this->assertEquals(fileinode($file), fileinode($link1));
-        $this->assertTrue(is_file($link2));
-        $this->assertEquals(fileinode($file), fileinode($link2));
-    }
-
-    public function testLinkWithSameTarget()
-    {
-        $this->markAsSkippedIfLinkIsMissing();
-
-        $file = $this->workspace.\DIRECTORY_SEPARATOR.'file';
-        $link = $this->workspace.\DIRECTORY_SEPARATOR.'link';
-
-        touch($file);
-
-        // practically same as testLinkIsNotOverwrittenIfAlreadyCreated
-        $this->filesystem->hardlink($file, [$link, $link]);
-
-        $this->assertTrue(is_file($link));
-        $this->assertEquals(fileinode($file), fileinode($link));
-    }
-
-    public function testReadRelativeLink()
-    {
-        $this->markAsSkippedIfSymlinkIsMissing();
-
-        if ('\\' === \DIRECTORY_SEPARATOR) {
-            $this->markTestSkipped('Relative symbolic links are not supported on Windows');
-        }
-
-        $file = $this->workspace.'/file';
-        $link1 = $this->workspace.'/dir/link';
-        $link2 = $this->workspace.'/dir/link2';
-        touch($file);
-
-        $this->filesystem->symlink('../file', $link1);
-        $this->filesystem->symlink('link', $link2);
-
-        $this->assertEquals($this->normalize('../file'), $this->filesystem->readlink($link1));
-        $this->assertEquals('link', $this->filesystem->readlink($link2));
-        $this->assertEquals($file, $this->filesystem->readlink($link1, true));
-        $this->assertEquals($file, $this->filesystem->readlink($link2, true));
-        $this->assertEquals($file, $this->filesystem->readlink($file, true));
-    }
-
-    public function testReadAbsoluteLink()
-    {
-        $this->markAsSkippedIfSymlinkIsMissing();
-
-        $file = $this->normalize($this->workspace.'/file');
-        $link1 = $this->normalize($this->workspace.'/dir/link');
-        $link2 = $this->normalize($this->workspace.'/dir/link2');
-        touch($file);
-
-        $this->filesystem->symlink($file, $link1);
-        $this->filesystem->symlink($link1, $link2);
-
-        $this->assertEquals($file, $this->filesystem->readlink($link1));
-        $this->assertEquals($link1, $this->filesystem->readlink($link2));
-        $this->assertEquals($file, $this->filesystem->readlink($link1, true));
-        $this->assertEquals($file, $this->filesystem->readlink($link2, true));
-        $this->assertEquals($file, $this->filesystem->readlink($file, true));
-    }
-
-    public function testReadBrokenLink()
-    {
-        $this->markAsSkippedIfSymlinkIsMissing();
-
-        if ('\\' === \DIRECTORY_SEPARATOR) {
-            $this->markTestSkipped('Windows does not support creating "broken" symlinks');
-        }
-
-        $file = $this->workspace.'/file';
-        $link = $this->workspace.'/link';
-
-        $this->filesystem->symlink($file, $link);
-
-        $this->assertEquals($file, $this->filesystem->readlink($link));
-        $this->assertNull($this->filesystem->readlink($link, true));
-
-        touch($file);
-        $this->assertEquals($file, $this->filesystem->readlink($link, true));
-    }
-
-    public function testReadLinkDefaultPathDoesNotExist()
-    {
-        $this->assertNull($this->filesystem->readlink($this->normalize($this->workspace.'/invalid')));
-    }
-
-    public function testReadLinkDefaultPathNotLink()
-    {
-        $file = $this->normalize($this->workspace.'/file');
-        touch($file);
-
-        $this->assertNull($this->filesystem->readlink($file));
-    }
-
-    public function testReadLinkCanonicalizePath()
-    {
-        $this->markAsSkippedIfSymlinkIsMissing();
-
-        $file = $this->normalize($this->workspace.'/file');
-        mkdir($this->normalize($this->workspace.'/dir'));
-        touch($file);
-
-        $this->assertEquals($file, $this->filesystem->readlink($this->normalize($this->workspace.'/dir/../file'), true));
-    }
-
-    public function testReadLinkCanonicalizedPathDoesNotExist()
-    {
-        $this->assertNull($this->filesystem->readlink($this->normalize($this->workspace.'invalid'), true));
-    }
-
-    /**
-     * @dataProvider providePathsForMakePathRelative
-     */
-    public function testMakePathRelative($endPath, $startPath, $expectedPath)
-    {
-        $path = $this->filesystem->makePathRelative($endPath, $startPath);
-
-        $this->assertEquals($expectedPath, $path);
-    }
-
-    public function providePathsForMakePathRelative()
-    {
-        $paths = [
-            ['/var/lib/symfony/src/Symfony/', '/var/lib/symfony/src/Symfony/Component', '../'],
-            ['/var/lib/symfony/src/Symfony/', '/var/lib/symfony/src/Symfony/Component/', '../'],
-            ['/var/lib/symfony/src/Symfony', '/var/lib/symfony/src/Symfony/Component', '../'],
-            ['/var/lib/symfony/src/Symfony', '/var/lib/symfony/src/Symfony/Component/', '../'],
-            ['/usr/lib/symfony/', '/var/lib/symfony/src/Symfony/Component', '../../../../../../usr/lib/symfony/'],
-            ['/var/lib/symfony/src/Symfony/', '/var/lib/symfony/', 'src/Symfony/'],
-            ['/aa/bb', '/aa/bb', './'],
-            ['/aa/bb', '/aa/bb/', './'],
-            ['/aa/bb/', '/aa/bb', './'],
-            ['/aa/bb/', '/aa/bb/', './'],
-            ['/aa/bb/cc', '/aa/bb/cc/dd', '../'],
-            ['/aa/bb/cc', '/aa/bb/cc/dd/', '../'],
-            ['/aa/bb/cc/', '/aa/bb/cc/dd', '../'],
-            ['/aa/bb/cc/', '/aa/bb/cc/dd/', '../'],
-            ['/aa/bb/cc', '/aa', 'bb/cc/'],
-            ['/aa/bb/cc', '/aa/', 'bb/cc/'],
-            ['/aa/bb/cc/', '/aa', 'bb/cc/'],
-            ['/aa/bb/cc/', '/aa/', 'bb/cc/'],
-            ['/a/aab/bb', '/a/aa', '../aab/bb/'],
-            ['/a/aab/bb', '/a/aa/', '../aab/bb/'],
-            ['/a/aab/bb/', '/a/aa', '../aab/bb/'],
-            ['/a/aab/bb/', '/a/aa/', '../aab/bb/'],
-            ['/a/aab/bb/', '/', 'a/aab/bb/'],
-            ['/a/aab/bb/', '/b/aab', '../../a/aab/bb/'],
-            ['/aab/bb', '/aa', '../aab/bb/'],
-            ['/aab', '/aa', '../aab/'],
-            ['/aa/bb/cc', '/aa/dd/..', 'bb/cc/'],
-            ['/aa/../bb/cc', '/aa/dd/..', '../bb/cc/'],
-            ['/aa/bb/../../cc', '/aa/../dd/..', 'cc/'],
-            ['/../aa/bb/cc', '/aa/dd/..', 'bb/cc/'],
-            ['/../../aa/../bb/cc', '/aa/dd/..', '../bb/cc/'],
-            ['C:/aa/bb/cc', 'C:/aa/dd/..', 'bb/cc/'],
-            ['C:/aa/bb/cc', 'c:/aa/dd/..', 'bb/cc/'],
-            ['c:/aa/../bb/cc', 'c:/aa/dd/..', '../bb/cc/'],
-            ['C:/aa/bb/../../cc', 'C:/aa/../dd/..', 'cc/'],
-            ['C:/../aa/bb/cc', 'C:/aa/dd/..', 'bb/cc/'],
-            ['C:/../../aa/../bb/cc', 'C:/aa/dd/..', '../bb/cc/'],
-            ['D:/', 'C:/aa/../bb/cc', 'D:/'],
-            ['D:/aa/bb', 'C:/aa', 'D:/aa/bb/'],
-            ['D:/../../aa/../bb/cc', 'C:/aa/dd/..', 'D:/bb/cc/'],
-        ];
-
-        if ('\\' === \DIRECTORY_SEPARATOR) {
-            $paths[] = ['c:\var\lib/symfony/src/Symfony/', 'c:/var/lib/symfony/', 'src/Symfony/'];
-        }
-
-        return $paths;
-    }
-
-    /**
-     * @group legacy
-     * @dataProvider provideLegacyPathsForMakePathRelativeWithRelativePaths
-     * @expectedDeprecation Support for passing relative paths to Symfony\Component\Filesystem\Filesystem::makePathRelative() is deprecated since Symfony 3.4 and will be removed in 4.0.
-     */
-    public function testMakePathRelativeWithRelativePaths($endPath, $startPath, $expectedPath)
-    {
-        $path = $this->filesystem->makePathRelative($endPath, $startPath);
-
-        $this->assertEquals($expectedPath, $path);
-    }
-
-    public function provideLegacyPathsForMakePathRelativeWithRelativePaths()
-    {
-        return [
-            ['usr/lib/symfony/', 'var/lib/symfony/src/Symfony/Component', '../../../../../../usr/lib/symfony/'],
-            ['aa/bb', 'aa/cc', '../bb/'],
-            ['aa/cc', 'bb/cc', '../../aa/cc/'],
-            ['aa/bb', 'aa/./cc', '../bb/'],
-            ['aa/./bb', 'aa/cc', '../bb/'],
-            ['aa/./bb', 'aa/./cc', '../bb/'],
-            ['../../', '../../', './'],
-            ['../aa/bb/', 'aa/bb/', '../../../aa/bb/'],
-            ['../../../', '../../', '../'],
-            ['', '', './'],
-            ['', 'aa/', '../'],
-            ['aa/', '', 'aa/'],
-        ];
-    }
-
-    public function testMirrorCopiesFilesAndDirectoriesRecursively()
-    {
-        $sourcePath = $this->workspace.\DIRECTORY_SEPARATOR.'source'.\DIRECTORY_SEPARATOR;
-        $directory = $sourcePath.'directory'.\DIRECTORY_SEPARATOR;
-        $file1 = $directory.'file1';
-        $file2 = $sourcePath.'file2';
-
-        mkdir($sourcePath);
-        mkdir($directory);
-        file_put_contents($file1, 'FILE1');
-        file_put_contents($file2, 'FILE2');
-
-        $targetPath = $this->workspace.\DIRECTORY_SEPARATOR.'target'.\DIRECTORY_SEPARATOR;
-
-        $this->filesystem->mirror($sourcePath, $targetPath);
-
-        $this->assertDirectoryExists($targetPath);
-        $this->assertDirectoryExists($targetPath.'directory');
-        $this->assertFileEquals($file1, $targetPath.'directory'.\DIRECTORY_SEPARATOR.'file1');
-        $this->assertFileEquals($file2, $targetPath.'file2');
-
-        $this->filesystem->remove($file1);
-
-        $this->filesystem->mirror($sourcePath, $targetPath, null, ['delete' => false]);
-        $this->assertTrue($this->filesystem->exists($targetPath.'directory'.\DIRECTORY_SEPARATOR.'file1'));
-
-        $this->filesystem->mirror($sourcePath, $targetPath, null, ['delete' => true]);
-        $this->assertFalse($this->filesystem->exists($targetPath.'directory'.\DIRECTORY_SEPARATOR.'file1'));
-
-        file_put_contents($file1, 'FILE1');
-
-        $this->filesystem->mirror($sourcePath, $targetPath, null, ['delete' => true]);
-        $this->assertTrue($this->filesystem->exists($targetPath.'directory'.\DIRECTORY_SEPARATOR.'file1'));
-
-        $this->filesystem->remove($directory);
-        $this->filesystem->mirror($sourcePath, $targetPath, null, ['delete' => true]);
-        $this->assertFalse($this->filesystem->exists($targetPath.'directory'));
-        $this->assertFalse($this->filesystem->exists($targetPath.'directory'.\DIRECTORY_SEPARATOR.'file1'));
-    }
-
-    public function testMirrorCreatesEmptyDirectory()
-    {
-        $sourcePath = $this->workspace.\DIRECTORY_SEPARATOR.'source'.\DIRECTORY_SEPARATOR;
-
-        mkdir($sourcePath);
-
-        $targetPath = $this->workspace.\DIRECTORY_SEPARATOR.'target'.\DIRECTORY_SEPARATOR;
-
-        $this->filesystem->mirror($sourcePath, $targetPath);
-
-        $this->assertDirectoryExists($targetPath);
-
-        $this->filesystem->remove($sourcePath);
-    }
-
-    public function testMirrorCopiesLinks()
-    {
-        $this->markAsSkippedIfSymlinkIsMissing();
-
-        $sourcePath = $this->workspace.\DIRECTORY_SEPARATOR.'source'.\DIRECTORY_SEPARATOR;
-
-        mkdir($sourcePath);
-        file_put_contents($sourcePath.'file1', 'FILE1');
-        symlink($sourcePath.'file1', $sourcePath.'link1');
-
-        $targetPath = $this->workspace.\DIRECTORY_SEPARATOR.'target'.\DIRECTORY_SEPARATOR;
-
-        $this->filesystem->mirror($sourcePath, $targetPath);
-
-        $this->assertDirectoryExists($targetPath);
-        $this->assertFileEquals($sourcePath.'file1', $targetPath.'link1');
-        $this->assertTrue(is_link($targetPath.\DIRECTORY_SEPARATOR.'link1'));
-    }
-
-    public function testMirrorCopiesLinkedDirectoryContents()
-    {
-        $this->markAsSkippedIfSymlinkIsMissing(true);
-
-        $sourcePath = $this->workspace.\DIRECTORY_SEPARATOR.'source'.\DIRECTORY_SEPARATOR;
-
-        mkdir($sourcePath.'nested/', 0777, true);
-        file_put_contents($sourcePath.'/nested/file1.txt', 'FILE1');
-        // Note: We symlink directory, not file
-        symlink($sourcePath.'nested', $sourcePath.'link1');
-
-        $targetPath = $this->workspace.\DIRECTORY_SEPARATOR.'target'.\DIRECTORY_SEPARATOR;
-
-        $this->filesystem->mirror($sourcePath, $targetPath);
-
-        $this->assertDirectoryExists($targetPath);
-        $this->assertFileEquals($sourcePath.'/nested/file1.txt', $targetPath.'link1/file1.txt');
-        $this->assertTrue(is_link($targetPath.\DIRECTORY_SEPARATOR.'link1'));
-    }
-
-    public function testMirrorCopiesRelativeLinkedContents()
-    {
-        $this->markAsSkippedIfSymlinkIsMissing(true);
-
-        $sourcePath = $this->workspace.\DIRECTORY_SEPARATOR.'source'.\DIRECTORY_SEPARATOR;
-        $oldPath = getcwd();
-
-        mkdir($sourcePath.'nested/', 0777, true);
-        file_put_contents($sourcePath.'/nested/file1.txt', 'FILE1');
-        // Note: Create relative symlink
-        chdir($sourcePath);
-        symlink('nested', 'link1');
-
-        chdir($oldPath);
-
-        $targetPath = $this->workspace.\DIRECTORY_SEPARATOR.'target'.\DIRECTORY_SEPARATOR;
-
-        $this->filesystem->mirror($sourcePath, $targetPath);
-
-        $this->assertDirectoryExists($targetPath);
-        $this->assertFileEquals($sourcePath.'/nested/file1.txt', $targetPath.'link1/file1.txt');
-        $this->assertTrue(is_link($targetPath.\DIRECTORY_SEPARATOR.'link1'));
-        $this->assertEquals('\\' === \DIRECTORY_SEPARATOR ? realpath($sourcePath.'\nested') : 'nested', readlink($targetPath.\DIRECTORY_SEPARATOR.'link1'));
-    }
-
-    public function testMirrorContentsWithSameNameAsSourceOrTargetWithoutDeleteOption()
-    {
-        $sourcePath = $this->workspace.\DIRECTORY_SEPARATOR.'source'.\DIRECTORY_SEPARATOR;
-
-        mkdir($sourcePath);
-        touch($sourcePath.'source');
-        touch($sourcePath.'target');
-
-        $targetPath = $this->workspace.\DIRECTORY_SEPARATOR.'target'.\DIRECTORY_SEPARATOR;
-
-        $oldPath = getcwd();
-        chdir($this->workspace);
-
-        $this->filesystem->mirror('source', $targetPath);
-
-        chdir($oldPath);
-
-        $this->assertDirectoryExists($targetPath);
-        $this->assertFileExists($targetPath.'source');
-        $this->assertFileExists($targetPath.'target');
-    }
-
-    public function testMirrorContentsWithSameNameAsSourceOrTargetWithDeleteOption()
-    {
-        $sourcePath = $this->workspace.\DIRECTORY_SEPARATOR.'source'.\DIRECTORY_SEPARATOR;
-
-        mkdir($sourcePath);
-        touch($sourcePath.'source');
-
-        $targetPath = $this->workspace.\DIRECTORY_SEPARATOR.'target'.\DIRECTORY_SEPARATOR;
-
-        mkdir($targetPath);
-        touch($targetPath.'source');
-        touch($targetPath.'target');
-
-        $oldPath = getcwd();
-        chdir($this->workspace);
-
-        $this->filesystem->mirror('source', 'target', null, ['delete' => true]);
-
-        chdir($oldPath);
-
-        $this->assertDirectoryExists($targetPath);
-        $this->assertFileExists($targetPath.'source');
-        $this->assertFileNotExists($targetPath.'target');
-    }
-
-    public function testMirrorFromSubdirectoryInToParentDirectory()
-    {
-        $targetPath = $this->workspace.\DIRECTORY_SEPARATOR.'foo'.\DIRECTORY_SEPARATOR;
-        $sourcePath = $targetPath.'bar'.\DIRECTORY_SEPARATOR;
-        $file1 = $sourcePath.'file1';
-        $file2 = $sourcePath.'file2';
-
-        $this->filesystem->mkdir($sourcePath);
-        file_put_contents($file1, 'FILE1');
-        file_put_contents($file2, 'FILE2');
-
-        $this->filesystem->mirror($sourcePath, $targetPath);
-
-        $this->assertFileEquals($file1, $targetPath.'file1');
-    }
-
-    /**
-     * @dataProvider providePathsForIsAbsolutePath
-     */
-    public function testIsAbsolutePath($path, $expectedResult)
-    {
-        $result = $this->filesystem->isAbsolutePath($path);
-
-        $this->assertEquals($expectedResult, $result);
-    }
-
-    public function providePathsForIsAbsolutePath()
-    {
-        return [
-            ['/var/lib', true],
-            ['c:\\\\var\\lib', true],
-            ['\\var\\lib', true],
-            ['var/lib', false],
-            ['../var/lib', false],
-            ['', false],
-            [null, false],
-        ];
-    }
-
-    public function testTempnam()
-    {
-        $dirname = $this->workspace;
-
-        $filename = $this->filesystem->tempnam($dirname, 'foo');
-
-        $this->assertFileExists($filename);
-    }
-
-    public function testTempnamWithFileScheme()
-    {
-        $scheme = 'file://';
-        $dirname = $scheme.$this->workspace;
-
-        $filename = $this->filesystem->tempnam($dirname, 'foo');
-
-        $this->assertStringStartsWith($scheme, $filename);
-        $this->assertFileExists($filename);
-    }
-
-    public function testTempnamWithMockScheme()
-    {
-        stream_wrapper_register('mock', 'Symfony\Component\Filesystem\Tests\Fixtures\MockStream\MockStream');
-
-        $scheme = 'mock://';
-        $dirname = $scheme.$this->workspace;
-
-        $filename = $this->filesystem->tempnam($dirname, 'foo');
-
-        $this->assertStringStartsWith($scheme, $filename);
-        $this->assertFileExists($filename);
-    }
-
-    public function testTempnamWithZlibSchemeFails()
-    {
-        $this->expectException('Symfony\Component\Filesystem\Exception\IOException');
-        $scheme = 'compress.zlib://';
-        $dirname = $scheme.$this->workspace;
-
-        // The compress.zlib:// stream does not support mode x: creates the file, errors "failed to open stream: operation failed" and returns false
-        $this->filesystem->tempnam($dirname, 'bar');
-    }
-
-    public function testTempnamWithPHPTempSchemeFails()
-    {
-        $scheme = 'php://temp';
-        $dirname = $scheme;
-
-        $filename = $this->filesystem->tempnam($dirname, 'bar');
-
-        $this->assertStringStartsWith($scheme, $filename);
-
-        // The php://temp stream deletes the file after close
-        $this->assertFileNotExists($filename);
-    }
-
-    public function testTempnamWithPharSchemeFails()
-    {
-        $this->expectException('Symfony\Component\Filesystem\Exception\IOException');
-        // Skip test if Phar disabled phar.readonly must be 0 in php.ini
-        if (!\Phar::canWrite()) {
-            $this->markTestSkipped('This test cannot run when phar.readonly is 1.');
-        }
-
-        $scheme = 'phar://';
-        $dirname = $scheme.$this->workspace;
-        $pharname = 'foo.phar';
-
-        new \Phar($this->workspace.'/'.$pharname, 0, $pharname);
-        // The phar:// stream does not support mode x: fails to create file, errors "failed to open stream: phar error: "$filename" is not a file in phar "$pharname"" and returns false
-        $this->filesystem->tempnam($dirname, $pharname.'/bar');
-    }
-
-    public function testTempnamWithHTTPSchemeFails()
-    {
-        $this->expectException('Symfony\Component\Filesystem\Exception\IOException');
-        $scheme = 'http://';
-        $dirname = $scheme.$this->workspace;
-
-        // The http:// scheme is read-only
-        $this->filesystem->tempnam($dirname, 'bar');
-    }
-
-    public function testTempnamOnUnwritableFallsBackToSysTmp()
-    {
-        $scheme = 'file://';
-        $dirname = $scheme.$this->workspace.\DIRECTORY_SEPARATOR.'does_not_exist';
-
-        $filename = $this->filesystem->tempnam($dirname, 'bar');
-        $realTempDir = realpath(sys_get_temp_dir());
-        $this->assertStringStartsWith(rtrim($scheme.$realTempDir, \DIRECTORY_SEPARATOR), $filename);
-        $this->assertFileExists($filename);
-
-        // Tear down
-        @unlink($filename);
-    }
-
-    public function testDumpFile()
-    {
-        $filename = $this->workspace.\DIRECTORY_SEPARATOR.'foo'.\DIRECTORY_SEPARATOR.'baz.txt';
-
-        // skip mode check on Windows
-        if ('\\' !== \DIRECTORY_SEPARATOR) {
-            $oldMask = umask(0002);
-        }
-
-        $this->filesystem->dumpFile($filename, 'bar');
-        $this->assertFileExists($filename);
-        $this->assertStringEqualsFile($filename, 'bar');
-
-        // skip mode check on Windows
-        if ('\\' !== \DIRECTORY_SEPARATOR) {
-            $this->assertFilePermissions(664, $filename);
-            umask($oldMask);
-        }
-    }
-
-    public function testDumpFileWithArray()
-    {
-        $filename = $this->workspace.\DIRECTORY_SEPARATOR.'foo'.\DIRECTORY_SEPARATOR.'baz.txt';
-
-        $this->filesystem->dumpFile($filename, ['bar']);
-
-        $this->assertFileExists($filename);
-        $this->assertStringEqualsFile($filename, 'bar');
-    }
-
-    public function testDumpFileWithResource()
-    {
-        $filename = $this->workspace.\DIRECTORY_SEPARATOR.'foo'.\DIRECTORY_SEPARATOR.'baz.txt';
-
-        $resource = fopen('php://memory', 'rw');
-        fwrite($resource, 'bar');
-        fseek($resource, 0);
-
-        $this->filesystem->dumpFile($filename, $resource);
-
-        fclose($resource);
-        $this->assertFileExists($filename);
-        $this->assertStringEqualsFile($filename, 'bar');
-    }
-
-    public function testDumpFileOverwritesAnExistingFile()
-    {
-        $filename = $this->workspace.\DIRECTORY_SEPARATOR.'foo.txt';
-        file_put_contents($filename, 'FOO BAR');
-
-        $this->filesystem->dumpFile($filename, 'bar');
-
-        $this->assertFileExists($filename);
-        $this->assertStringEqualsFile($filename, 'bar');
-    }
-
-    public function testDumpFileWithFileScheme()
-    {
-        if (\defined('HHVM_VERSION')) {
-            $this->markTestSkipped('HHVM does not handle the file:// scheme correctly');
-        }
-
-        $scheme = 'file://';
-        $filename = $scheme.$this->workspace.\DIRECTORY_SEPARATOR.'foo'.\DIRECTORY_SEPARATOR.'baz.txt';
-
-        $this->filesystem->dumpFile($filename, 'bar');
-
-        $this->assertFileExists($filename);
-        $this->assertStringEqualsFile($filename, 'bar');
-    }
-
-    public function testDumpFileWithZlibScheme()
-    {
-        $scheme = 'compress.zlib://';
-        $filename = $this->workspace.\DIRECTORY_SEPARATOR.'foo'.\DIRECTORY_SEPARATOR.'baz.txt';
-
-        $this->filesystem->dumpFile($filename, 'bar');
-
-        // Zlib stat uses file:// wrapper so remove scheme
-        $this->assertFileExists(str_replace($scheme, '', $filename));
-        $this->assertStringEqualsFile($filename, 'bar');
-    }
-
-    public function testAppendToFile()
-    {
-        $filename = $this->workspace.\DIRECTORY_SEPARATOR.'foo'.\DIRECTORY_SEPARATOR.'bar.txt';
-
-        // skip mode check on Windows
-        if ('\\' !== \DIRECTORY_SEPARATOR) {
-            $oldMask = umask(0002);
-        }
-
-        $this->filesystem->dumpFile($filename, 'foo');
-
-        $this->filesystem->appendToFile($filename, 'bar');
-
-        $this->assertFileExists($filename);
-        $this->assertStringEqualsFile($filename, 'foobar');
-
-        // skip mode check on Windows
-        if ('\\' !== \DIRECTORY_SEPARATOR) {
-            $this->assertFilePermissions(664, $filename);
-            umask($oldMask);
-        }
-    }
-
-    public function testAppendToFileWithScheme()
-    {
-        if (\defined('HHVM_VERSION')) {
-            $this->markTestSkipped('HHVM does not handle the file:// scheme correctly');
-        }
-
-        $scheme = 'file://';
-        $filename = $scheme.$this->workspace.\DIRECTORY_SEPARATOR.'foo'.\DIRECTORY_SEPARATOR.'baz.txt';
-        $this->filesystem->dumpFile($filename, 'foo');
-
-        $this->filesystem->appendToFile($filename, 'bar');
-
-        $this->assertFileExists($filename);
-        $this->assertStringEqualsFile($filename, 'foobar');
-    }
-
-    public function testAppendToFileWithZlibScheme()
-    {
-        $scheme = 'compress.zlib://';
-        $filename = $this->workspace.\DIRECTORY_SEPARATOR.'foo'.\DIRECTORY_SEPARATOR.'baz.txt';
-        $this->filesystem->dumpFile($filename, 'foo');
-
-        // Zlib stat uses file:// wrapper so remove it
-        $this->assertStringEqualsFile(str_replace($scheme, '', $filename), 'foo');
-
-        $this->filesystem->appendToFile($filename, 'bar');
-
-        $this->assertFileExists($filename);
-        $this->assertStringEqualsFile($filename, 'foobar');
-    }
-
-    public function testAppendToFileCreateTheFileIfNotExists()
-    {
-        $filename = $this->workspace.\DIRECTORY_SEPARATOR.'foo'.\DIRECTORY_SEPARATOR.'bar.txt';
-
-        // skip mode check on Windows
-        if ('\\' !== \DIRECTORY_SEPARATOR) {
-            $oldMask = umask(0002);
-        }
-
-        $this->filesystem->appendToFile($filename, 'bar');
-
-        // skip mode check on Windows
-        if ('\\' !== \DIRECTORY_SEPARATOR) {
-            $this->assertFilePermissions(664, $filename);
-            umask($oldMask);
-        }
-
-        $this->assertFileExists($filename);
-        $this->assertStringEqualsFile($filename, 'bar');
-    }
-
-    public function testDumpKeepsExistingPermissionsWhenOverwritingAnExistingFile()
-    {
-        $this->markAsSkippedIfChmodIsMissing();
-
-        $filename = $this->workspace.\DIRECTORY_SEPARATOR.'foo.txt';
-        file_put_contents($filename, 'FOO BAR');
-        chmod($filename, 0745);
-
-        $this->filesystem->dumpFile($filename, 'bar', null);
-
-        $this->assertFilePermissions(745, $filename);
-    }
-
-    public function testCopyShouldKeepExecutionPermission()
-    {
-        $this->markAsSkippedIfChmodIsMissing();
-
-        $sourceFilePath = $this->workspace.\DIRECTORY_SEPARATOR.'copy_source_file';
-        $targetFilePath = $this->workspace.\DIRECTORY_SEPARATOR.'copy_target_file';
-
-        file_put_contents($sourceFilePath, 'SOURCE FILE');
-        chmod($sourceFilePath, 0745);
-
-        $this->filesystem->copy($sourceFilePath, $targetFilePath);
-
-        $this->assertFilePermissions(767, $targetFilePath);
-    }
-
-    /**
-     * Normalize the given path (transform each blackslash into a real directory separator).
-     *
-     * @param string $path
-     *
-     * @return string
-     */
-    private function normalize($path)
-    {
-        return str_replace('/', \DIRECTORY_SEPARATOR, $path);
-    }
-}
diff --git a/vendor/symfony/filesystem/Tests/FilesystemTestCase.php b/vendor/symfony/filesystem/Tests/FilesystemTestCase.php
deleted file mode 100644
index 6fb9eba7334ffb6485a4ce6871cfb528c31d47ba..0000000000000000000000000000000000000000
--- a/vendor/symfony/filesystem/Tests/FilesystemTestCase.php
+++ /dev/null
@@ -1,165 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Filesystem\Tests;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Filesystem\Filesystem;
-
-class FilesystemTestCase extends TestCase
-{
-    private $umask;
-
-    protected $longPathNamesWindows = [];
-
-    /**
-     * @var Filesystem
-     */
-    protected $filesystem = null;
-
-    /**
-     * @var string
-     */
-    protected $workspace = null;
-
-    /**
-     * @var bool|null Flag for hard links on Windows
-     */
-    private static $linkOnWindows = null;
-
-    /**
-     * @var bool|null Flag for symbolic links on Windows
-     */
-    private static $symlinkOnWindows = null;
-
-    public static function setUpBeforeClass()
-    {
-        if ('\\' === \DIRECTORY_SEPARATOR) {
-            self::$linkOnWindows = true;
-            $originFile = tempnam(sys_get_temp_dir(), 'li');
-            $targetFile = tempnam(sys_get_temp_dir(), 'li');
-            if (true !== @link($originFile, $targetFile)) {
-                $report = error_get_last();
-                if (\is_array($report) && false !== strpos($report['message'], 'error code(1314)')) {
-                    self::$linkOnWindows = false;
-                }
-            } else {
-                @unlink($targetFile);
-            }
-
-            self::$symlinkOnWindows = true;
-            $originDir = tempnam(sys_get_temp_dir(), 'sl');
-            $targetDir = tempnam(sys_get_temp_dir(), 'sl');
-            if (true !== @symlink($originDir, $targetDir)) {
-                $report = error_get_last();
-                if (\is_array($report) && false !== strpos($report['message'], 'error code(1314)')) {
-                    self::$symlinkOnWindows = false;
-                }
-            } else {
-                @unlink($targetDir);
-            }
-        }
-    }
-
-    protected function setUp()
-    {
-        $this->umask = umask(0);
-        $this->filesystem = new Filesystem();
-        $this->workspace = sys_get_temp_dir().'/'.microtime(true).'.'.mt_rand();
-        mkdir($this->workspace, 0777, true);
-        $this->workspace = realpath($this->workspace);
-    }
-
-    protected function tearDown()
-    {
-        if (!empty($this->longPathNamesWindows)) {
-            foreach ($this->longPathNamesWindows as $path) {
-                exec('DEL '.$path);
-            }
-            $this->longPathNamesWindows = [];
-        }
-
-        $this->filesystem->remove($this->workspace);
-        umask($this->umask);
-    }
-
-    /**
-     * @param int    $expectedFilePerms Expected file permissions as three digits (i.e. 755)
-     * @param string $filePath
-     */
-    protected function assertFilePermissions($expectedFilePerms, $filePath)
-    {
-        $actualFilePerms = (int) substr(sprintf('%o', fileperms($filePath)), -3);
-        $this->assertEquals(
-            $expectedFilePerms,
-            $actualFilePerms,
-            sprintf('File permissions for %s must be %s. Actual %s', $filePath, $expectedFilePerms, $actualFilePerms)
-        );
-    }
-
-    protected function getFileOwner($filepath)
-    {
-        $this->markAsSkippedIfPosixIsMissing();
-
-        $infos = stat($filepath);
-
-        return ($datas = posix_getpwuid($infos['uid'])) ? $datas['name'] : null;
-    }
-
-    protected function getFileGroup($filepath)
-    {
-        $this->markAsSkippedIfPosixIsMissing();
-
-        $infos = stat($filepath);
-        if ($datas = posix_getgrgid($infos['gid'])) {
-            return $datas['name'];
-        }
-
-        $this->markTestSkipped('Unable to retrieve file group name');
-    }
-
-    protected function markAsSkippedIfLinkIsMissing()
-    {
-        if (!\function_exists('link')) {
-            $this->markTestSkipped('link is not supported');
-        }
-
-        if ('\\' === \DIRECTORY_SEPARATOR && false === self::$linkOnWindows) {
-            $this->markTestSkipped('link requires "Create hard links" privilege on windows');
-        }
-    }
-
-    protected function markAsSkippedIfSymlinkIsMissing($relative = false)
-    {
-        if ('\\' === \DIRECTORY_SEPARATOR && false === self::$symlinkOnWindows) {
-            $this->markTestSkipped('symlink requires "Create symbolic links" privilege on Windows');
-        }
-
-        // https://bugs.php.net/69473
-        if ($relative && '\\' === \DIRECTORY_SEPARATOR && 1 === PHP_ZTS) {
-            $this->markTestSkipped('symlink does not support relative paths on thread safe Windows PHP versions');
-        }
-    }
-
-    protected function markAsSkippedIfChmodIsMissing()
-    {
-        if ('\\' === \DIRECTORY_SEPARATOR) {
-            $this->markTestSkipped('chmod is not supported on Windows');
-        }
-    }
-
-    protected function markAsSkippedIfPosixIsMissing()
-    {
-        if (!\function_exists('posix_isatty')) {
-            $this->markTestSkipped('Function posix_isatty is required.');
-        }
-    }
-}
diff --git a/vendor/symfony/filesystem/Tests/Fixtures/MockStream/MockStream.php b/vendor/symfony/filesystem/Tests/Fixtures/MockStream/MockStream.php
deleted file mode 100644
index 3d80a90582ce8aad418833b14eabee4e86e7a4d3..0000000000000000000000000000000000000000
--- a/vendor/symfony/filesystem/Tests/Fixtures/MockStream/MockStream.php
+++ /dev/null
@@ -1,46 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Filesystem\Tests\Fixtures\MockStream;
-
-/**
- * Mock stream class to be used with stream_wrapper_register.
- * stream_wrapper_register('mock', 'Symfony\Component\Filesystem\Tests\Fixtures\MockStream\MockStream').
- */
-class MockStream
-{
-    /**
-     * Opens file or URL.
-     *
-     * @param string $path        Specifies the URL that was passed to the original function
-     * @param string $mode        The mode used to open the file, as detailed for fopen()
-     * @param int    $options     Holds additional flags set by the streams API
-     * @param string $opened_path If the path is opened successfully, and STREAM_USE_PATH is set in options,
-     *                            opened_path should be set to the full path of the file/resource that was actually opened
-     *
-     * @return bool
-     */
-    public function stream_open($path, $mode, $options, &$opened_path)
-    {
-        return true;
-    }
-
-    /**
-     * @param string $path  The file path or URL to stat
-     * @param array  $flags Holds additional flags set by the streams API
-     *
-     * @return array File stats
-     */
-    public function url_stat($path, $flags)
-    {
-        return [];
-    }
-}
diff --git a/vendor/symfony/filesystem/Tests/LockHandlerTest.php b/vendor/symfony/filesystem/Tests/LockHandlerTest.php
deleted file mode 100644
index b63e0c224fde82cce0067fd771a04d532edfe33b..0000000000000000000000000000000000000000
--- a/vendor/symfony/filesystem/Tests/LockHandlerTest.php
+++ /dev/null
@@ -1,144 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Filesystem\Tests;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Filesystem\Exception\IOException;
-use Symfony\Component\Filesystem\Filesystem;
-use Symfony\Component\Filesystem\LockHandler;
-
-/**
- * @group legacy
- */
-class LockHandlerTest extends TestCase
-{
-    public function testConstructWhenRepositoryDoesNotExist()
-    {
-        $this->expectException('Symfony\Component\Filesystem\Exception\IOException');
-        $this->expectExceptionMessage('Failed to create "/a/b/c/d/e": mkdir(): Permission denied');
-        if (!getenv('USER') || 'root' === getenv('USER')) {
-            $this->markTestSkipped('This test will fail if run under superuser');
-        }
-        new LockHandler('lock', '/a/b/c/d/e');
-    }
-
-    public function testConstructWhenRepositoryIsNotWriteable()
-    {
-        $this->expectException('Symfony\Component\Filesystem\Exception\IOException');
-        $this->expectExceptionMessage('The directory "/" is not writable.');
-        if (!getenv('USER') || 'root' === getenv('USER')) {
-            $this->markTestSkipped('This test will fail if run under superuser');
-        }
-        new LockHandler('lock', '/');
-    }
-
-    public function testErrorHandlingInLockIfLockPathBecomesUnwritable()
-    {
-        // skip test on Windows; PHP can't easily set file as unreadable on Windows
-        if ('\\' === \DIRECTORY_SEPARATOR) {
-            $this->markTestSkipped('This test cannot run on Windows.');
-        }
-
-        if (!getenv('USER') || 'root' === getenv('USER')) {
-            $this->markTestSkipped('This test will fail if run under superuser');
-        }
-
-        $lockPath = sys_get_temp_dir().'/'.uniqid('', true);
-        $e = null;
-        $wrongMessage = null;
-
-        try {
-            mkdir($lockPath);
-
-            $lockHandler = new LockHandler('lock', $lockPath);
-
-            chmod($lockPath, 0444);
-
-            $lockHandler->lock();
-        } catch (IOException $e) {
-            if (false === strpos($e->getMessage(), 'Permission denied')) {
-                $wrongMessage = $e->getMessage();
-            } else {
-                $this->addToAssertionCount(1);
-            }
-        } catch (\Exception $e) {
-        } catch (\Throwable $e) {
-        }
-
-        if (is_dir($lockPath)) {
-            $fs = new Filesystem();
-            $fs->remove($lockPath);
-        }
-
-        $this->assertInstanceOf('Symfony\Component\Filesystem\Exception\IOException', $e, sprintf('Expected IOException to be thrown, got %s instead.', \get_class($e)));
-        $this->assertNull($wrongMessage, sprintf('Expected exception message to contain "Permission denied", got "%s" instead.', $wrongMessage));
-    }
-
-    public function testConstructSanitizeName()
-    {
-        $lock = new LockHandler('<?php echo "% hello word ! %" ?>');
-
-        $file = sprintf('%s/sf.-php-echo-hello-word-.4b3d9d0d27ddef3a78a64685dda3a963e478659a9e5240feaf7b4173a8f28d5f.lock', sys_get_temp_dir());
-        // ensure the file does not exist before the lock
-        @unlink($file);
-
-        $lock->lock();
-
-        $this->assertFileExists($file);
-
-        $lock->release();
-    }
-
-    public function testLockRelease()
-    {
-        $name = 'symfony-test-filesystem.lock';
-
-        $l1 = new LockHandler($name);
-        $l2 = new LockHandler($name);
-
-        $this->assertTrue($l1->lock());
-        $this->assertFalse($l2->lock());
-
-        $l1->release();
-
-        $this->assertTrue($l2->lock());
-        $l2->release();
-    }
-
-    public function testLockTwice()
-    {
-        $name = 'symfony-test-filesystem.lock';
-
-        $lockHandler = new LockHandler($name);
-
-        $this->assertTrue($lockHandler->lock());
-        $this->assertTrue($lockHandler->lock());
-
-        $lockHandler->release();
-    }
-
-    public function testLockIsReleased()
-    {
-        $name = 'symfony-test-filesystem.lock';
-
-        $l1 = new LockHandler($name);
-        $l2 = new LockHandler($name);
-
-        $this->assertTrue($l1->lock());
-        $this->assertFalse($l2->lock());
-
-        $l1 = null;
-
-        $this->assertTrue($l2->lock());
-        $l2->release();
-    }
-}
diff --git a/vendor/symfony/filesystem/composer.json b/vendor/symfony/filesystem/composer.json
index 0fc8043cc092a08a3c876504766ba3615e594f8e..95df9d3e5898185b36a1d4cd19070eb55d260aaf 100644
--- a/vendor/symfony/filesystem/composer.json
+++ b/vendor/symfony/filesystem/composer.json
@@ -16,7 +16,7 @@
         }
     ],
     "require": {
-        "php": "^5.5.9|>=7.0.8",
+        "php": ">=7.1.3",
         "symfony/polyfill-ctype": "~1.8"
     },
     "autoload": {
@@ -25,10 +25,5 @@
             "/Tests/"
         ]
     },
-    "minimum-stability": "dev",
-    "extra": {
-        "branch-alias": {
-            "dev-master": "3.4-dev"
-        }
-    }
+    "minimum-stability": "dev"
 }
diff --git a/vendor/symfony/filesystem/phpunit.xml.dist b/vendor/symfony/filesystem/phpunit.xml.dist
deleted file mode 100644
index 5515fff1ac944fbe1f73b96c4c1f4ad191738102..0000000000000000000000000000000000000000
--- a/vendor/symfony/filesystem/phpunit.xml.dist
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/5.2/phpunit.xsd"
-         backupGlobals="false"
-         colors="true"
-         bootstrap="vendor/autoload.php"
-         failOnRisky="true"
-         failOnWarning="true"
->
-    <php>
-        <ini name="error_reporting" value="-1" />
-    </php>
-
-    <testsuites>
-        <testsuite name="Symfony Filesystem Component Test Suite">
-            <directory>./Tests/</directory>
-        </testsuite>
-    </testsuites>
-
-    <filter>
-        <whitelist>
-            <directory>./</directory>
-            <exclude>
-                <directory>./Tests</directory>
-                <directory>./vendor</directory>
-            </exclude>
-        </whitelist>
-    </filter>
-</phpunit>
diff --git a/vendor/symfony/finder/.gitignore b/vendor/symfony/finder/.gitignore
deleted file mode 100644
index c49a5d8df5c6548379f00c77fe572a7217bce218..0000000000000000000000000000000000000000
--- a/vendor/symfony/finder/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-vendor/
-composer.lock
-phpunit.xml
diff --git a/vendor/symfony/finder/CHANGELOG.md b/vendor/symfony/finder/CHANGELOG.md
index 53c34be860c565ecd4e088479246cb9a0d269f9a..2045184e833312bb0121215de46f5da8cca9769e 100644
--- a/vendor/symfony/finder/CHANGELOG.md
+++ b/vendor/symfony/finder/CHANGELOG.md
@@ -1,6 +1,25 @@
 CHANGELOG
 =========
 
+4.3.0
+-----
+
+ * added Finder::ignoreVCSIgnored() to ignore files based on rules listed in .gitignore
+
+4.2.0
+-----
+
+ * added $useNaturalSort option to Finder::sortByName() method
+ * the `Finder::sortByName()` method will have a new `$useNaturalSort`
+   argument in version 5.0, not defining it is deprecated
+ * added `Finder::reverseSorting()` to reverse the sorting
+
+4.0.0
+-----
+
+ * removed `ExceptionInterface`
+ * removed `Symfony\Component\Finder\Iterator\FilterIterator`
+
 3.4.0
 -----
 
diff --git a/vendor/symfony/finder/Comparator/DateComparator.php b/vendor/symfony/finder/Comparator/DateComparator.php
index 3de43ef4b8ddb757ee0d977d1679175c349e63e1..d17c77a9d3fd048b112c32b7ed6b6c18b2440c9b 100644
--- a/vendor/symfony/finder/Comparator/DateComparator.php
+++ b/vendor/symfony/finder/Comparator/DateComparator.php
@@ -23,7 +23,7 @@ class DateComparator extends Comparator
      *
      * @throws \InvalidArgumentException If the test is not understood
      */
-    public function __construct($test)
+    public function __construct(string $test)
     {
         if (!preg_match('#^\s*(==|!=|[<>]=?|after|since|before|until)?\s*(.+?)\s*$#i', $test, $matches)) {
             throw new \InvalidArgumentException(sprintf('Don\'t understand "%s" as a date test.', $test));
diff --git a/vendor/symfony/finder/Comparator/NumberComparator.php b/vendor/symfony/finder/Comparator/NumberComparator.php
index f62c0e5740f69f51d4d7b315faa55b0ac5bc6270..80667c9dddd51518951fd7af8ea825f1f8ccb499 100644
--- a/vendor/symfony/finder/Comparator/NumberComparator.php
+++ b/vendor/symfony/finder/Comparator/NumberComparator.php
@@ -39,7 +39,7 @@ class NumberComparator extends Comparator
      *
      * @throws \InvalidArgumentException If the test is not understood
      */
-    public function __construct($test)
+    public function __construct(?string $test)
     {
         if (!preg_match('#^\s*(==|!=|[<>]=?)?\s*([0-9\.]+)\s*([kmg]i?)?\s*$#i', $test, $matches)) {
             throw new \InvalidArgumentException(sprintf('Don\'t understand "%s" as a number test.', $test));
diff --git a/vendor/symfony/config/Tests/Fixtures/BarNode.php b/vendor/symfony/finder/Exception/DirectoryNotFoundException.php
similarity index 57%
rename from vendor/symfony/config/Tests/Fixtures/BarNode.php
rename to vendor/symfony/finder/Exception/DirectoryNotFoundException.php
index 0b9c32dedaf1f12471839e5297afa84c13db600f..c6cc0f2736370cf796d7e2d34c6f1efff85db3a6 100644
--- a/vendor/symfony/config/Tests/Fixtures/BarNode.php
+++ b/vendor/symfony/finder/Exception/DirectoryNotFoundException.php
@@ -9,10 +9,11 @@
  * file that was distributed with this source code.
  */
 
-namespace Symfony\Component\Config\Tests\Fixtures;
+namespace Symfony\Component\Finder\Exception;
 
-use Symfony\Component\Config\Definition\ArrayNode;
-
-class BarNode extends ArrayNode
+/**
+ * @author Andreas Erhard <andreas.erhard@i-med.ac.at>
+ */
+class DirectoryNotFoundException extends \InvalidArgumentException
 {
 }
diff --git a/vendor/symfony/finder/Exception/ExceptionInterface.php b/vendor/symfony/finder/Exception/ExceptionInterface.php
deleted file mode 100644
index 161e9686d2b70f4d89d241008f0edf7f9f3be9af..0000000000000000000000000000000000000000
--- a/vendor/symfony/finder/Exception/ExceptionInterface.php
+++ /dev/null
@@ -1,25 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Finder\Exception;
-
-/**
- * @author Jean-François Simon <contact@jfsimon.fr>
- *
- * @deprecated since 3.3, to be removed in 4.0.
- */
-interface ExceptionInterface
-{
-    /**
-     * @return \Symfony\Component\Finder\Adapter\AdapterInterface
-     */
-    public function getAdapter();
-}
diff --git a/vendor/symfony/finder/Finder.php b/vendor/symfony/finder/Finder.php
index 133c4b8c50b1558406a8f676fcb7761b0871315d..cf914362141c53764e64642907da0c21f5ed5e38 100644
--- a/vendor/symfony/finder/Finder.php
+++ b/vendor/symfony/finder/Finder.php
@@ -13,6 +13,7 @@
 
 use Symfony\Component\Finder\Comparator\DateComparator;
 use Symfony\Component\Finder\Comparator\NumberComparator;
+use Symfony\Component\Finder\Exception\DirectoryNotFoundException;
 use Symfony\Component\Finder\Iterator\CustomFilterIterator;
 use Symfony\Component\Finder\Iterator\DateRangeFilterIterator;
 use Symfony\Component\Finder\Iterator\DepthRangeFilterIterator;
@@ -39,6 +40,7 @@ class Finder implements \IteratorAggregate, \Countable
 {
     const IGNORE_VCS_FILES = 1;
     const IGNORE_DOT_FILES = 2;
+    const IGNORE_VCS_IGNORED_FILES = 4;
 
     private $mode = 0;
     private $names = [];
@@ -48,6 +50,7 @@ class Finder implements \IteratorAggregate, \Countable
     private $depths = [];
     private $sizes = [];
     private $followLinks = false;
+    private $reverseSorting = false;
     private $sort = false;
     private $ignore = 0;
     private $dirs = [];
@@ -107,17 +110,20 @@ public function files()
      *
      *     $finder->depth('> 1') // the Finder will start matching at level 1.
      *     $finder->depth('< 3') // the Finder will descend at most 3 levels of directories below the starting point.
+     *     $finder->depth(['>= 1', '< 3'])
      *
-     * @param string|int $level The depth level expression
+     * @param string|int|string[]|int[] $levels The depth level expression or an array of depth levels
      *
      * @return $this
      *
      * @see DepthRangeFilterIterator
      * @see NumberComparator
      */
-    public function depth($level)
+    public function depth($levels)
     {
-        $this->depths[] = new Comparator\NumberComparator($level);
+        foreach ((array) $levels as $level) {
+            $this->depths[] = new Comparator\NumberComparator($level);
+        }
 
         return $this;
     }
@@ -131,8 +137,9 @@ public function depth($level)
      *     $finder->date('until 2 days ago');
      *     $finder->date('> now - 2 hours');
      *     $finder->date('>= 2005-10-15');
+     *     $finder->date(['>= 2005-10-15', '<= 2006-05-27']);
      *
-     * @param string $date A date range string
+     * @param string|string[] $dates A date range string or an array of date ranges
      *
      * @return $this
      *
@@ -140,9 +147,11 @@ public function depth($level)
      * @see DateRangeFilterIterator
      * @see DateComparator
      */
-    public function date($date)
+    public function date($dates)
     {
-        $this->dates[] = new Comparator\DateComparator($date);
+        foreach ((array) $dates as $date) {
+            $this->dates[] = new Comparator\DateComparator($date);
+        }
 
         return $this;
     }
@@ -155,16 +164,17 @@ public function date($date)
      *     $finder->name('*.php')
      *     $finder->name('/\.php$/') // same as above
      *     $finder->name('test.php')
+     *     $finder->name(['test.py', 'test.php'])
      *
-     * @param string $pattern A pattern (a regexp, a glob, or a string)
+     * @param string|string[] $patterns A pattern (a regexp, a glob, or a string) or an array of patterns
      *
      * @return $this
      *
      * @see FilenameFilterIterator
      */
-    public function name($pattern)
+    public function name($patterns)
     {
-        $this->names[] = $pattern;
+        $this->names = array_merge($this->names, (array) $patterns);
 
         return $this;
     }
@@ -172,15 +182,15 @@ public function name($pattern)
     /**
      * Adds rules that files must not match.
      *
-     * @param string $pattern A pattern (a regexp, a glob, or a string)
+     * @param string|string[] $patterns A pattern (a regexp, a glob, or a string) or an array of patterns
      *
      * @return $this
      *
      * @see FilenameFilterIterator
      */
-    public function notName($pattern)
+    public function notName($patterns)
     {
-        $this->notNames[] = $pattern;
+        $this->notNames = array_merge($this->notNames, (array) $patterns);
 
         return $this;
     }
@@ -192,16 +202,17 @@ public function notName($pattern)
      *
      *     $finder->contains('Lorem ipsum')
      *     $finder->contains('/Lorem ipsum/i')
+     *     $finder->contains(['dolor', '/ipsum/i'])
      *
-     * @param string $pattern A pattern (string or regexp)
+     * @param string|string[] $patterns A pattern (string or regexp) or an array of patterns
      *
      * @return $this
      *
      * @see FilecontentFilterIterator
      */
-    public function contains($pattern)
+    public function contains($patterns)
     {
-        $this->contains[] = $pattern;
+        $this->contains = array_merge($this->contains, (array) $patterns);
 
         return $this;
     }
@@ -213,16 +224,17 @@ public function contains($pattern)
      *
      *     $finder->notContains('Lorem ipsum')
      *     $finder->notContains('/Lorem ipsum/i')
+     *     $finder->notContains(['lorem', '/dolor/i'])
      *
-     * @param string $pattern A pattern (string or regexp)
+     * @param string|string[] $patterns A pattern (string or regexp) or an array of patterns
      *
      * @return $this
      *
      * @see FilecontentFilterIterator
      */
-    public function notContains($pattern)
+    public function notContains($patterns)
     {
-        $this->notContains[] = $pattern;
+        $this->notContains = array_merge($this->notContains, (array) $patterns);
 
         return $this;
     }
@@ -234,18 +246,19 @@ public function notContains($pattern)
      *
      *     $finder->path('some/special/dir')
      *     $finder->path('/some\/special\/dir/') // same as above
+     *     $finder->path(['some dir', 'another/dir'])
      *
      * Use only / as dirname separator.
      *
-     * @param string $pattern A pattern (a regexp or a string)
+     * @param string|string[] $patterns A pattern (a regexp or a string) or an array of patterns
      *
      * @return $this
      *
      * @see FilenameFilterIterator
      */
-    public function path($pattern)
+    public function path($patterns)
     {
-        $this->paths[] = $pattern;
+        $this->paths = array_merge($this->paths, (array) $patterns);
 
         return $this;
     }
@@ -257,18 +270,19 @@ public function path($pattern)
      *
      *     $finder->notPath('some/special/dir')
      *     $finder->notPath('/some\/special\/dir/') // same as above
+     *     $finder->notPath(['some/file.txt', 'another/file.log'])
      *
      * Use only / as dirname separator.
      *
-     * @param string $pattern A pattern (a regexp or a string)
+     * @param string|string[] $patterns A pattern (a regexp or a string) or an array of patterns
      *
      * @return $this
      *
      * @see FilenameFilterIterator
      */
-    public function notPath($pattern)
+    public function notPath($patterns)
     {
-        $this->notPaths[] = $pattern;
+        $this->notPaths = array_merge($this->notPaths, (array) $patterns);
 
         return $this;
     }
@@ -279,17 +293,20 @@ public function notPath($pattern)
      *     $finder->size('> 10K');
      *     $finder->size('<= 1Ki');
      *     $finder->size(4);
+     *     $finder->size(['> 10K', '< 20K'])
      *
-     * @param string|int $size A size range string or an integer
+     * @param string|int|string[]|int[] $sizes A size range string or an integer or an array of size ranges
      *
      * @return $this
      *
      * @see SizeRangeFilterIterator
      * @see NumberComparator
      */
-    public function size($size)
+    public function size($sizes)
     {
-        $this->sizes[] = new Comparator\NumberComparator($size);
+        foreach ((array) $sizes as $size) {
+            $this->sizes[] = new Comparator\NumberComparator($size);
+        }
 
         return $this;
     }
@@ -358,6 +375,24 @@ public function ignoreVCS($ignoreVCS)
         return $this;
     }
 
+    /**
+     * Forces Finder to obey .gitignore and ignore files based on rules listed there.
+     *
+     * This option is disabled by default.
+     *
+     * @return $this
+     */
+    public function ignoreVCSIgnored(bool $ignoreVCSIgnored)
+    {
+        if ($ignoreVCSIgnored) {
+            $this->ignore |= static::IGNORE_VCS_IGNORED_FILES;
+        } else {
+            $this->ignore &= ~static::IGNORE_VCS_IGNORED_FILES;
+        }
+
+        return $this;
+    }
+
     /**
      * Adds VCS patterns.
      *
@@ -397,13 +432,20 @@ public function sort(\Closure $closure)
      *
      * This can be slow as all the matching files and directories must be retrieved for comparison.
      *
+     * @param bool $useNaturalSort Whether to use natural sort or not, disabled by default
+     *
      * @return $this
      *
      * @see SortableIterator
      */
-    public function sortByName()
+    public function sortByName(/* bool $useNaturalSort = false */)
     {
-        $this->sort = Iterator\SortableIterator::SORT_BY_NAME;
+        if (\func_num_args() < 1 && __CLASS__ !== static::class && __CLASS__ !== (new \ReflectionMethod($this, __FUNCTION__))->getDeclaringClass()->getName() && !$this instanceof \PHPUnit\Framework\MockObject\MockObject && !$this instanceof \Prophecy\Prophecy\ProphecySubjectInterface && !$this instanceof \Mockery\MockInterface) {
+            @trigger_error(sprintf('The "%s()" method will have a new "bool $useNaturalSort = false" argument in version 5.0, not defining it is deprecated since Symfony 4.2.', __METHOD__), \E_USER_DEPRECATED);
+        }
+        $useNaturalSort = 0 < \func_num_args() && func_get_arg(0);
+
+        $this->sort = $useNaturalSort ? Iterator\SortableIterator::SORT_BY_NAME_NATURAL : Iterator\SortableIterator::SORT_BY_NAME;
 
         return $this;
     }
@@ -442,6 +484,18 @@ public function sortByAccessedTime()
         return $this;
     }
 
+    /**
+     * Reverses the sorting.
+     *
+     * @return $this
+     */
+    public function reverseSorting()
+    {
+        $this->reverseSorting = true;
+
+        return $this;
+    }
+
     /**
      * Sorts files and directories by the last inode changed time.
      *
@@ -528,11 +582,11 @@ public function ignoreUnreadableDirs($ignore = true)
     /**
      * Searches files and directories which match defined rules.
      *
-     * @param string|array $dirs A directory path or an array of directories
+     * @param string|string[] $dirs A directory path or an array of directories
      *
      * @return $this
      *
-     * @throws \InvalidArgumentException if one of the directories does not exist
+     * @throws DirectoryNotFoundException if one of the directories does not exist
      */
     public function in($dirs)
     {
@@ -541,10 +595,11 @@ public function in($dirs)
         foreach ((array) $dirs as $dir) {
             if (is_dir($dir)) {
                 $resolvedDirs[] = $this->normalizeDir($dir);
-            } elseif ($glob = glob($dir, (\defined('GLOB_BRACE') ? GLOB_BRACE : 0) | GLOB_ONLYDIR)) {
+            } elseif ($glob = glob($dir, (\defined('GLOB_BRACE') ? \GLOB_BRACE : 0) | \GLOB_ONLYDIR | \GLOB_NOSORT)) {
+                sort($glob);
                 $resolvedDirs = array_merge($resolvedDirs, array_map([$this, 'normalizeDir'], $glob));
             } else {
-                throw new \InvalidArgumentException(sprintf('The "%s" directory does not exist.', $dir));
+                throw new DirectoryNotFoundException(sprintf('The "%s" directory does not exist.', $dir));
             }
         }
 
@@ -615,7 +670,7 @@ public function append($iterator)
     }
 
     /**
-     * Check if the any results were found.
+     * Check if any results were found.
      *
      * @return bool
      */
@@ -638,12 +693,7 @@ public function count()
         return iterator_count($this->getIterator());
     }
 
-    /**
-     * @param string $dir
-     *
-     * @return \Iterator
-     */
-    private function searchInDirectory($dir)
+    private function searchInDirectory(string $dir): \Iterator
     {
         $exclude = $this->exclude;
         $notPaths = $this->notPaths;
@@ -656,8 +706,16 @@ private function searchInDirectory($dir)
             $notPaths[] = '#(^|/)\..+(/|$)#';
         }
 
+        if (static::IGNORE_VCS_IGNORED_FILES === (static::IGNORE_VCS_IGNORED_FILES & $this->ignore)) {
+            $gitignoreFilePath = sprintf('%s/.gitignore', $dir);
+            if (!is_readable($gitignoreFilePath)) {
+                throw new \RuntimeException(sprintf('The "ignoreVCSIgnored" option cannot be used by the Finder as the "%s" file is not readable.', $gitignoreFilePath));
+            }
+            $notPaths = array_merge($notPaths, [Gitignore::toRegex(file_get_contents($gitignoreFilePath))]);
+        }
+
         $minDepth = 0;
-        $maxDepth = PHP_INT_MAX;
+        $maxDepth = \PHP_INT_MAX;
 
         foreach ($this->depths as $comparator) {
             switch ($comparator->getOperator()) {
@@ -692,7 +750,7 @@ private function searchInDirectory($dir)
 
         $iterator = new \RecursiveIteratorIterator($iterator, \RecursiveIteratorIterator::SELF_FIRST);
 
-        if ($minDepth > 0 || $maxDepth < PHP_INT_MAX) {
+        if ($minDepth > 0 || $maxDepth < \PHP_INT_MAX) {
             $iterator = new Iterator\DepthRangeFilterIterator($iterator, $minDepth, $maxDepth);
         }
 
@@ -724,8 +782,8 @@ private function searchInDirectory($dir)
             $iterator = new Iterator\PathFilterIterator($iterator, $this->paths, $notPaths);
         }
 
-        if ($this->sort) {
-            $iteratorAggregate = new Iterator\SortableIterator($iterator, $this->sort);
+        if ($this->sort || $this->reverseSorting) {
+            $iteratorAggregate = new Iterator\SortableIterator($iterator, $this->sort, $this->reverseSorting);
             $iterator = $iteratorAggregate->getIterator();
         }
 
@@ -735,17 +793,17 @@ private function searchInDirectory($dir)
     /**
      * Normalizes given directory names by removing trailing slashes.
      *
-     * Excluding: (s)ftp:// wrapper
-     *
-     * @param string $dir
-     *
-     * @return string
+     * Excluding: (s)ftp:// or ssh2.(s)ftp:// wrapper
      */
-    private function normalizeDir($dir)
+    private function normalizeDir(string $dir): string
     {
+        if ('/' === $dir) {
+            return $dir;
+        }
+
         $dir = rtrim($dir, '/'.\DIRECTORY_SEPARATOR);
 
-        if (preg_match('#^s?ftp://#', $dir)) {
+        if (preg_match('#^(ssh2\.)?s?ftp://#', $dir)) {
             $dir .= '/';
         }
 
diff --git a/vendor/symfony/finder/Gitignore.php b/vendor/symfony/finder/Gitignore.php
new file mode 100644
index 0000000000000000000000000000000000000000..dfe0a0a26d7d9e582f4588f1240f73486c310785
--- /dev/null
+++ b/vendor/symfony/finder/Gitignore.php
@@ -0,0 +1,133 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Finder;
+
+/**
+ * Gitignore matches against text.
+ *
+ * @author Ahmed Abdou <mail@ahmd.io>
+ */
+class Gitignore
+{
+    /**
+     * Returns a regexp which is the equivalent of the gitignore pattern.
+     *
+     * @return string The regexp
+     */
+    public static function toRegex(string $gitignoreFileContent): string
+    {
+        $gitignoreFileContent = preg_replace('/^[^\\\r\n]*#.*/m', '', $gitignoreFileContent);
+        $gitignoreLines = preg_split('/\r\n|\r|\n/', $gitignoreFileContent);
+
+        $positives = [];
+        $negatives = [];
+        foreach ($gitignoreLines as $i => $line) {
+            $line = trim($line);
+            if ('' === $line) {
+                continue;
+            }
+
+            if (1 === preg_match('/^!/', $line)) {
+                $positives[$i] = null;
+                $negatives[$i] = self::getRegexFromGitignore(preg_replace('/^!(.*)/', '${1}', $line), true);
+
+                continue;
+            }
+            $negatives[$i] = null;
+            $positives[$i] = self::getRegexFromGitignore($line);
+        }
+
+        $index = 0;
+        $patterns = [];
+        foreach ($positives as $pattern) {
+            if (null === $pattern) {
+                continue;
+            }
+
+            $negativesAfter = array_filter(\array_slice($negatives, ++$index));
+            if ([] !== $negativesAfter) {
+                $pattern .= sprintf('(?<!%s)', implode('|', $negativesAfter));
+            }
+
+            $patterns[] = $pattern;
+        }
+
+        return sprintf('/^((%s))$/', implode(')|(', $patterns));
+    }
+
+    private static function getRegexFromGitignore(string $gitignorePattern, bool $negative = false): string
+    {
+        $regex = '';
+        $isRelativePath = false;
+        // If there is a separator at the beginning or middle (or both) of the pattern, then the pattern is relative to the directory level of the particular .gitignore file itself
+        $slashPosition = strpos($gitignorePattern, '/');
+        if (false !== $slashPosition && \strlen($gitignorePattern) - 1 !== $slashPosition) {
+            if (0 === $slashPosition) {
+                $gitignorePattern = substr($gitignorePattern, 1);
+            }
+
+            $isRelativePath = true;
+            $regex .= '^';
+        }
+
+        if ('/' === $gitignorePattern[\strlen($gitignorePattern) - 1]) {
+            $gitignorePattern = substr($gitignorePattern, 0, -1);
+        }
+
+        $iMax = \strlen($gitignorePattern);
+        for ($i = 0; $i < $iMax; ++$i) {
+            $tripleChars = substr($gitignorePattern, $i, 3);
+            if ('**/' === $tripleChars || '/**' === $tripleChars) {
+                $regex .= '.*';
+                $i += 2;
+                continue;
+            }
+
+            $doubleChars = substr($gitignorePattern, $i, 2);
+            if ('**' === $doubleChars) {
+                $regex .= '.*';
+                ++$i;
+                continue;
+            }
+            if ('*/' === $doubleChars) {
+                $regex .= '[^\/]*\/?[^\/]*';
+                ++$i;
+                continue;
+            }
+
+            $c = $gitignorePattern[$i];
+            switch ($c) {
+                case '*':
+                    $regex .= $isRelativePath ? '[^\/]*' : '[^\/]*\/?[^\/]*';
+                    break;
+                case '/':
+                case '.':
+                case ':':
+                case '(':
+                case ')':
+                case '{':
+                case '}':
+                    $regex .= '\\'.$c;
+                    break;
+                default:
+                    $regex .= $c;
+            }
+        }
+
+        if ($negative) {
+            // a lookbehind assertion has to be a fixed width (it can not have nested '|' statements)
+            return sprintf('%s$|%s\/$', $regex, $regex);
+        }
+
+        return '(?>'.$regex.'($|\/.*))';
+    }
+}
diff --git a/vendor/symfony/finder/Iterator/CustomFilterIterator.php b/vendor/symfony/finder/Iterator/CustomFilterIterator.php
index 896f7e912f087563a55b7592a48a6123918b7285..a30bbd0b9d265309945212914866566e84679c4f 100644
--- a/vendor/symfony/finder/Iterator/CustomFilterIterator.php
+++ b/vendor/symfony/finder/Iterator/CustomFilterIterator.php
@@ -19,7 +19,7 @@
  *
  * @author Fabien Potencier <fabien@symfony.com>
  */
-class CustomFilterIterator extends FilterIterator
+class CustomFilterIterator extends \FilterIterator
 {
     private $filters = [];
 
@@ -51,7 +51,7 @@ public function accept()
         $fileinfo = $this->current();
 
         foreach ($this->filters as $filter) {
-            if (false === \call_user_func($filter, $fileinfo)) {
+            if (false === $filter($fileinfo)) {
                 return false;
             }
         }
diff --git a/vendor/symfony/finder/Iterator/DateRangeFilterIterator.php b/vendor/symfony/finder/Iterator/DateRangeFilterIterator.php
index 8a47321a3c3709911149637621fab481241b6163..2e97e00d374562c6915df6a806ddcb00e07589aa 100644
--- a/vendor/symfony/finder/Iterator/DateRangeFilterIterator.php
+++ b/vendor/symfony/finder/Iterator/DateRangeFilterIterator.php
@@ -18,7 +18,7 @@
  *
  * @author Fabien Potencier <fabien@symfony.com>
  */
-class DateRangeFilterIterator extends FilterIterator
+class DateRangeFilterIterator extends \FilterIterator
 {
     private $comparators = [];
 
diff --git a/vendor/symfony/finder/Iterator/DepthRangeFilterIterator.php b/vendor/symfony/finder/Iterator/DepthRangeFilterIterator.php
index ce9d3aa73a13e5da737ff629bc85caa78b38e7a7..18e751d77b928ea9934fd9a53218c588cf160237 100644
--- a/vendor/symfony/finder/Iterator/DepthRangeFilterIterator.php
+++ b/vendor/symfony/finder/Iterator/DepthRangeFilterIterator.php
@@ -16,7 +16,7 @@
  *
  * @author Fabien Potencier <fabien@symfony.com>
  */
-class DepthRangeFilterIterator extends FilterIterator
+class DepthRangeFilterIterator extends \FilterIterator
 {
     private $minDepth = 0;
 
@@ -25,10 +25,10 @@ class DepthRangeFilterIterator extends FilterIterator
      * @param int                        $minDepth The min depth
      * @param int                        $maxDepth The max depth
      */
-    public function __construct(\RecursiveIteratorIterator $iterator, $minDepth = 0, $maxDepth = PHP_INT_MAX)
+    public function __construct(\RecursiveIteratorIterator $iterator, int $minDepth = 0, int $maxDepth = \PHP_INT_MAX)
     {
         $this->minDepth = $minDepth;
-        $iterator->setMaxDepth(PHP_INT_MAX === $maxDepth ? -1 : $maxDepth);
+        $iterator->setMaxDepth(\PHP_INT_MAX === $maxDepth ? -1 : $maxDepth);
 
         parent::__construct($iterator);
     }
diff --git a/vendor/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.php b/vendor/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.php
index bc0e6fc1e1a9f6b4fc89e010d7230544d46480c4..6a1b291adea3037b071e2ffd209497b8afddf326 100644
--- a/vendor/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.php
+++ b/vendor/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.php
@@ -16,7 +16,7 @@
  *
  * @author Fabien Potencier <fabien@symfony.com>
  */
-class ExcludeDirectoryFilterIterator extends FilterIterator implements \RecursiveIterator
+class ExcludeDirectoryFilterIterator extends \FilterIterator implements \RecursiveIterator
 {
     private $iterator;
     private $isRecursive;
@@ -25,7 +25,7 @@ class ExcludeDirectoryFilterIterator extends FilterIterator implements \Recursiv
 
     /**
      * @param \Iterator $iterator    The Iterator to filter
-     * @param array     $directories An array of directories to exclude
+     * @param string[]  $directories An array of directories to exclude
      */
     public function __construct(\Iterator $iterator, array $directories)
     {
@@ -68,6 +68,9 @@ public function accept()
         return true;
     }
 
+    /**
+     * @return bool
+     */
     public function hasChildren()
     {
         return $this->isRecursive && $this->iterator->hasChildren();
diff --git a/vendor/symfony/finder/Iterator/FileTypeFilterIterator.php b/vendor/symfony/finder/Iterator/FileTypeFilterIterator.php
index e9811d4a03ee6b2a65180fd92eaa9bdab08e3ec7..a4c4eec72e90d6b7f1cd7e7e61f3854603036afd 100644
--- a/vendor/symfony/finder/Iterator/FileTypeFilterIterator.php
+++ b/vendor/symfony/finder/Iterator/FileTypeFilterIterator.php
@@ -16,7 +16,7 @@
  *
  * @author Fabien Potencier <fabien@symfony.com>
  */
-class FileTypeFilterIterator extends FilterIterator
+class FileTypeFilterIterator extends \FilterIterator
 {
     const ONLY_FILES = 1;
     const ONLY_DIRECTORIES = 2;
@@ -27,7 +27,7 @@ class FileTypeFilterIterator extends FilterIterator
      * @param \Iterator $iterator The Iterator to filter
      * @param int       $mode     The mode (self::ONLY_FILES or self::ONLY_DIRECTORIES)
      */
-    public function __construct(\Iterator $iterator, $mode)
+    public function __construct(\Iterator $iterator, int $mode)
     {
         $this->mode = $mode;
 
diff --git a/vendor/symfony/finder/Iterator/FilterIterator.php b/vendor/symfony/finder/Iterator/FilterIterator.php
deleted file mode 100644
index c16dd8fa9e4a0b15fb2e4e57c8fda9401ffa62b8..0000000000000000000000000000000000000000
--- a/vendor/symfony/finder/Iterator/FilterIterator.php
+++ /dev/null
@@ -1,60 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Finder\Iterator;
-
-/**
- * This iterator just overrides the rewind method in order to correct a PHP bug,
- * which existed before version 5.5.23/5.6.7.
- *
- * @see https://bugs.php.net/68557
- *
- * @author Alex Bogomazov
- *
- * @deprecated since 3.4, to be removed in 4.0.
- */
-abstract class FilterIterator extends \FilterIterator
-{
-    /**
-     * This is a workaround for the problem with \FilterIterator leaving inner \FilesystemIterator in wrong state after
-     * rewind in some cases.
-     *
-     * @see FilterIterator::rewind()
-     */
-    public function rewind()
-    {
-        if (\PHP_VERSION_ID > 50607 || (\PHP_VERSION_ID > 50523 && \PHP_VERSION_ID < 50600)) {
-            parent::rewind();
-
-            return;
-        }
-
-        $iterator = $this;
-        while ($iterator instanceof \OuterIterator) {
-            $innerIterator = $iterator->getInnerIterator();
-
-            if ($innerIterator instanceof RecursiveDirectoryIterator) {
-                // this condition is necessary for iterators to work properly with non-local filesystems like ftp
-                if ($innerIterator->isRewindable()) {
-                    $innerIterator->next();
-                    $innerIterator->rewind();
-                }
-            } elseif ($innerIterator instanceof \FilesystemIterator) {
-                $innerIterator->next();
-                $innerIterator->rewind();
-            }
-
-            $iterator = $innerIterator;
-        }
-
-        parent::rewind();
-    }
-}
diff --git a/vendor/symfony/finder/Iterator/MultiplePcreFilterIterator.php b/vendor/symfony/finder/Iterator/MultiplePcreFilterIterator.php
index ee365a58b084f60e9f6311075cb529b41d4ffa8f..18b082ec0b10b775a49dd24c52090dea9f7f8932 100644
--- a/vendor/symfony/finder/Iterator/MultiplePcreFilterIterator.php
+++ b/vendor/symfony/finder/Iterator/MultiplePcreFilterIterator.php
@@ -16,7 +16,7 @@
  *
  * @author Fabien Potencier <fabien@symfony.com>
  */
-abstract class MultiplePcreFilterIterator extends FilterIterator
+abstract class MultiplePcreFilterIterator extends \FilterIterator
 {
     protected $matchRegexps = [];
     protected $noMatchRegexps = [];
diff --git a/vendor/symfony/finder/Iterator/RecursiveDirectoryIterator.php b/vendor/symfony/finder/Iterator/RecursiveDirectoryIterator.php
index ab48a2b8a174de51b89ef29c285f65f839d66a81..7616b14a245b504d3ce0ca972ef21839d770061f 100644
--- a/vendor/symfony/finder/Iterator/RecursiveDirectoryIterator.php
+++ b/vendor/symfony/finder/Iterator/RecursiveDirectoryIterator.php
@@ -37,13 +37,9 @@ class RecursiveDirectoryIterator extends \RecursiveDirectoryIterator
     private $directorySeparator = '/';
 
     /**
-     * @param string $path
-     * @param int    $flags
-     * @param bool   $ignoreUnreadableDirs
-     *
      * @throws \RuntimeException
      */
-    public function __construct($path, $flags, $ignoreUnreadableDirs = false)
+    public function __construct(string $path, int $flags, bool $ignoreUnreadableDirs = false)
     {
         if ($flags & (self::CURRENT_AS_PATHNAME | self::CURRENT_AS_SELF)) {
             throw new \RuntimeException('This iterator only support returning current as fileinfo.');
@@ -74,7 +70,11 @@ public function current()
         }
         $subPathname .= $this->getFilename();
 
-        return new SplFileInfo($this->rootPath.$this->directorySeparator.$subPathname, $this->subPath, $subPathname);
+        if ('/' !== $basePath = $this->rootPath) {
+            $basePath .= $this->directorySeparator;
+        }
+
+        return new SplFileInfo($basePath.$subPathname, $this->subPath, $subPathname);
     }
 
     /**
@@ -116,11 +116,6 @@ public function rewind()
             return;
         }
 
-        // @see https://bugs.php.net/68557
-        if (\PHP_VERSION_ID < 50523 || \PHP_VERSION_ID >= 50600 && \PHP_VERSION_ID < 50607) {
-            parent::next();
-        }
-
         parent::rewind();
     }
 
@@ -135,11 +130,6 @@ public function isRewindable()
             return $this->rewindable;
         }
 
-        // workaround for an HHVM bug, should be removed when https://github.com/facebook/hhvm/issues/7281 is fixed
-        if ('' === $this->getPath()) {
-            return $this->rewindable = false;
-        }
-
         if (false !== $stream = @opendir($this->getPath())) {
             $infos = stream_get_meta_data($stream);
             closedir($stream);
diff --git a/vendor/symfony/finder/Iterator/SizeRangeFilterIterator.php b/vendor/symfony/finder/Iterator/SizeRangeFilterIterator.php
index 4e521c8c9040c9fb90fc94344194b4c82ff02f09..2aeef67b87f739db1741a157fb02c9d5990d604c 100644
--- a/vendor/symfony/finder/Iterator/SizeRangeFilterIterator.php
+++ b/vendor/symfony/finder/Iterator/SizeRangeFilterIterator.php
@@ -18,7 +18,7 @@
  *
  * @author Fabien Potencier <fabien@symfony.com>
  */
-class SizeRangeFilterIterator extends FilterIterator
+class SizeRangeFilterIterator extends \FilterIterator
 {
     private $comparators = [];
 
diff --git a/vendor/symfony/finder/Iterator/SortableIterator.php b/vendor/symfony/finder/Iterator/SortableIterator.php
index 3c7157adb9258b1266c9ad43cf9ab85376b3b06d..8f0090c746dfe80199cd3e1e289cb910f6e71a71 100644
--- a/vendor/symfony/finder/Iterator/SortableIterator.php
+++ b/vendor/symfony/finder/Iterator/SortableIterator.php
@@ -18,11 +18,13 @@
  */
 class SortableIterator implements \IteratorAggregate
 {
+    const SORT_BY_NONE = 0;
     const SORT_BY_NAME = 1;
     const SORT_BY_TYPE = 2;
     const SORT_BY_ACCESSED_TIME = 3;
     const SORT_BY_CHANGED_TIME = 4;
     const SORT_BY_MODIFIED_TIME = 5;
+    const SORT_BY_NAME_NATURAL = 6;
 
     private $iterator;
     private $sort;
@@ -33,47 +35,66 @@ class SortableIterator implements \IteratorAggregate
      *
      * @throws \InvalidArgumentException
      */
-    public function __construct(\Traversable $iterator, $sort)
+    public function __construct(\Traversable $iterator, $sort, bool $reverseOrder = false)
     {
         $this->iterator = $iterator;
+        $order = $reverseOrder ? -1 : 1;
 
         if (self::SORT_BY_NAME === $sort) {
-            $this->sort = function ($a, $b) {
-                return strcmp($a->getRealPath() ?: $a->getPathname(), $b->getRealPath() ?: $b->getPathname());
+            $this->sort = static function ($a, $b) use ($order) {
+                return $order * strcmp($a->getRealPath() ?: $a->getPathname(), $b->getRealPath() ?: $b->getPathname());
+            };
+        } elseif (self::SORT_BY_NAME_NATURAL === $sort) {
+            $this->sort = static function ($a, $b) use ($order) {
+                return $order * strnatcmp($a->getRealPath() ?: $a->getPathname(), $b->getRealPath() ?: $b->getPathname());
             };
         } elseif (self::SORT_BY_TYPE === $sort) {
-            $this->sort = function ($a, $b) {
+            $this->sort = static function ($a, $b) use ($order) {
                 if ($a->isDir() && $b->isFile()) {
-                    return -1;
+                    return -$order;
                 } elseif ($a->isFile() && $b->isDir()) {
-                    return 1;
+                    return $order;
                 }
 
-                return strcmp($a->getRealPath() ?: $a->getPathname(), $b->getRealPath() ?: $b->getPathname());
+                return $order * strcmp($a->getRealPath() ?: $a->getPathname(), $b->getRealPath() ?: $b->getPathname());
             };
         } elseif (self::SORT_BY_ACCESSED_TIME === $sort) {
-            $this->sort = function ($a, $b) {
-                return $a->getATime() - $b->getATime();
+            $this->sort = static function ($a, $b) use ($order) {
+                return $order * ($a->getATime() - $b->getATime());
             };
         } elseif (self::SORT_BY_CHANGED_TIME === $sort) {
-            $this->sort = function ($a, $b) {
-                return $a->getCTime() - $b->getCTime();
+            $this->sort = static function ($a, $b) use ($order) {
+                return $order * ($a->getCTime() - $b->getCTime());
             };
         } elseif (self::SORT_BY_MODIFIED_TIME === $sort) {
-            $this->sort = function ($a, $b) {
-                return $a->getMTime() - $b->getMTime();
+            $this->sort = static function ($a, $b) use ($order) {
+                return $order * ($a->getMTime() - $b->getMTime());
             };
+        } elseif (self::SORT_BY_NONE === $sort) {
+            $this->sort = $order;
         } elseif (\is_callable($sort)) {
-            $this->sort = $sort;
+            $this->sort = $reverseOrder ? static function ($a, $b) use ($sort) { return -$sort($a, $b); } : $sort;
         } else {
             throw new \InvalidArgumentException('The SortableIterator takes a PHP callable or a valid built-in sort algorithm as an argument.');
         }
     }
 
+    /**
+     * @return \Traversable
+     */
     public function getIterator()
     {
+        if (1 === $this->sort) {
+            return $this->iterator;
+        }
+
         $array = iterator_to_array($this->iterator, true);
-        uasort($array, $this->sort);
+
+        if (-1 === $this->sort) {
+            $array = array_reverse($array);
+        } else {
+            uasort($array, $this->sort);
+        }
 
         return new \ArrayIterator($array);
     }
diff --git a/vendor/symfony/finder/LICENSE b/vendor/symfony/finder/LICENSE
index a677f43763ca467472898351b328aee41e2edd7c..9e936ec0448b8549e5edf08e5ac5f01491a8bfc8 100644
--- a/vendor/symfony/finder/LICENSE
+++ b/vendor/symfony/finder/LICENSE
@@ -1,4 +1,4 @@
-Copyright (c) 2004-2019 Fabien Potencier
+Copyright (c) 2004-2020 Fabien Potencier
 
 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to deal
diff --git a/vendor/symfony/finder/SplFileInfo.php b/vendor/symfony/finder/SplFileInfo.php
index 0f4e025b22bd20362736c83160694ffd6f547c36..62c9faa6e9147b7d93755ebd2b710420e805fcc6 100644
--- a/vendor/symfony/finder/SplFileInfo.php
+++ b/vendor/symfony/finder/SplFileInfo.php
@@ -26,7 +26,7 @@ class SplFileInfo extends \SplFileInfo
      * @param string $relativePath     The relative path
      * @param string $relativePathname The relative path name
      */
-    public function __construct($file, $relativePath, $relativePathname)
+    public function __construct(string $file, string $relativePath, string $relativePathname)
     {
         parent::__construct($file);
         $this->relativePath = $relativePath;
@@ -57,6 +57,13 @@ public function getRelativePathname()
         return $this->relativePathname;
     }
 
+    public function getFilenameWithoutExtension(): string
+    {
+        $filename = $this->getFilename();
+
+        return pathinfo($filename, \PATHINFO_FILENAME);
+    }
+
     /**
      * Returns the contents of the file.
      *
diff --git a/vendor/symfony/finder/Tests/Comparator/ComparatorTest.php b/vendor/symfony/finder/Tests/Comparator/ComparatorTest.php
deleted file mode 100644
index 2f56092ed8760bb8b8e71caa6df780950eac71bb..0000000000000000000000000000000000000000
--- a/vendor/symfony/finder/Tests/Comparator/ComparatorTest.php
+++ /dev/null
@@ -1,65 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Finder\Tests\Comparator;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Finder\Comparator\Comparator;
-
-class ComparatorTest extends TestCase
-{
-    public function testGetSetOperator()
-    {
-        $comparator = new Comparator();
-        try {
-            $comparator->setOperator('foo');
-            $this->fail('->setOperator() throws an \InvalidArgumentException if the operator is not valid.');
-        } catch (\Exception $e) {
-            $this->assertInstanceOf('InvalidArgumentException', $e, '->setOperator() throws an \InvalidArgumentException if the operator is not valid.');
-        }
-
-        $comparator = new Comparator();
-        $comparator->setOperator('>');
-        $this->assertEquals('>', $comparator->getOperator(), '->getOperator() returns the current operator');
-    }
-
-    public function testGetSetTarget()
-    {
-        $comparator = new Comparator();
-        $comparator->setTarget(8);
-        $this->assertEquals(8, $comparator->getTarget(), '->getTarget() returns the target');
-    }
-
-    /**
-     * @dataProvider getTestData
-     */
-    public function testTest($operator, $target, $match, $noMatch)
-    {
-        $c = new Comparator();
-        $c->setOperator($operator);
-        $c->setTarget($target);
-
-        foreach ($match as $m) {
-            $this->assertTrue($c->test($m), '->test() tests a string against the expression');
-        }
-
-        foreach ($noMatch as $m) {
-            $this->assertFalse($c->test($m), '->test() tests a string against the expression');
-        }
-    }
-
-    public function getTestData()
-    {
-        return [
-            ['<', '1000', ['500', '999'], ['1000', '1500']],
-        ];
-    }
-}
diff --git a/vendor/symfony/finder/Tests/Comparator/DateComparatorTest.php b/vendor/symfony/finder/Tests/Comparator/DateComparatorTest.php
deleted file mode 100644
index 3aebf524499f7971ebc96eeb1ec1adb3839526af..0000000000000000000000000000000000000000
--- a/vendor/symfony/finder/Tests/Comparator/DateComparatorTest.php
+++ /dev/null
@@ -1,64 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Finder\Tests\Comparator;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Finder\Comparator\DateComparator;
-
-class DateComparatorTest extends TestCase
-{
-    public function testConstructor()
-    {
-        try {
-            new DateComparator('foobar');
-            $this->fail('__construct() throws an \InvalidArgumentException if the test expression is not valid.');
-        } catch (\Exception $e) {
-            $this->assertInstanceOf('InvalidArgumentException', $e, '__construct() throws an \InvalidArgumentException if the test expression is not valid.');
-        }
-
-        try {
-            new DateComparator('');
-            $this->fail('__construct() throws an \InvalidArgumentException if the test expression is not valid.');
-        } catch (\Exception $e) {
-            $this->assertInstanceOf('InvalidArgumentException', $e, '__construct() throws an \InvalidArgumentException if the test expression is not valid.');
-        }
-    }
-
-    /**
-     * @dataProvider getTestData
-     */
-    public function testTest($test, $match, $noMatch)
-    {
-        $c = new DateComparator($test);
-
-        foreach ($match as $m) {
-            $this->assertTrue($c->test($m), '->test() tests a string against the expression');
-        }
-
-        foreach ($noMatch as $m) {
-            $this->assertFalse($c->test($m), '->test() tests a string against the expression');
-        }
-    }
-
-    public function getTestData()
-    {
-        return [
-            ['< 2005-10-10', [strtotime('2005-10-09')], [strtotime('2005-10-15')]],
-            ['until 2005-10-10', [strtotime('2005-10-09')], [strtotime('2005-10-15')]],
-            ['before 2005-10-10', [strtotime('2005-10-09')], [strtotime('2005-10-15')]],
-            ['> 2005-10-10', [strtotime('2005-10-15')], [strtotime('2005-10-09')]],
-            ['after 2005-10-10', [strtotime('2005-10-15')], [strtotime('2005-10-09')]],
-            ['since 2005-10-10', [strtotime('2005-10-15')], [strtotime('2005-10-09')]],
-            ['!= 2005-10-10', [strtotime('2005-10-11')], [strtotime('2005-10-10')]],
-        ];
-    }
-}
diff --git a/vendor/symfony/finder/Tests/Comparator/NumberComparatorTest.php b/vendor/symfony/finder/Tests/Comparator/NumberComparatorTest.php
deleted file mode 100644
index 5b49b660a77603e00868362baa1078aebd0031c9..0000000000000000000000000000000000000000
--- a/vendor/symfony/finder/Tests/Comparator/NumberComparatorTest.php
+++ /dev/null
@@ -1,108 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Finder\Tests\Comparator;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Finder\Comparator\NumberComparator;
-
-class NumberComparatorTest extends TestCase
-{
-    /**
-     * @dataProvider getConstructorTestData
-     */
-    public function testConstructor($successes, $failures)
-    {
-        foreach ($successes as $s) {
-            new NumberComparator($s);
-        }
-
-        foreach ($failures as $f) {
-            try {
-                new NumberComparator($f);
-                $this->fail('__construct() throws an \InvalidArgumentException if the test expression is not valid.');
-            } catch (\Exception $e) {
-                $this->assertInstanceOf('InvalidArgumentException', $e, '__construct() throws an \InvalidArgumentException if the test expression is not valid.');
-            }
-        }
-    }
-
-    /**
-     * @dataProvider getTestData
-     */
-    public function testTest($test, $match, $noMatch)
-    {
-        $c = new NumberComparator($test);
-
-        foreach ($match as $m) {
-            $this->assertTrue($c->test($m), '->test() tests a string against the expression');
-        }
-
-        foreach ($noMatch as $m) {
-            $this->assertFalse($c->test($m), '->test() tests a string against the expression');
-        }
-    }
-
-    public function getTestData()
-    {
-        return [
-            ['< 1000', ['500', '999'], ['1000', '1500']],
-
-            ['< 1K', ['500', '999'], ['1000', '1500']],
-            ['<1k', ['500', '999'], ['1000', '1500']],
-            ['  < 1 K ', ['500', '999'], ['1000', '1500']],
-            ['<= 1K', ['1000'], ['1001']],
-            ['> 1K', ['1001'], ['1000']],
-            ['>= 1K', ['1000'], ['999']],
-
-            ['< 1KI', ['500', '1023'], ['1024', '1500']],
-            ['<= 1KI', ['1024'], ['1025']],
-            ['> 1KI', ['1025'], ['1024']],
-            ['>= 1KI', ['1024'], ['1023']],
-
-            ['1KI', ['1024'], ['1023', '1025']],
-            ['==1KI', ['1024'], ['1023', '1025']],
-
-            ['==1m', ['1000000'], ['999999', '1000001']],
-            ['==1mi', [1024 * 1024], [1024 * 1024 - 1, 1024 * 1024 + 1]],
-
-            ['==1g', ['1000000000'], ['999999999', '1000000001']],
-            ['==1gi', [1024 * 1024 * 1024], [1024 * 1024 * 1024 - 1, 1024 * 1024 * 1024 + 1]],
-
-            ['!= 1000', ['500', '999'], ['1000']],
-        ];
-    }
-
-    public function getConstructorTestData()
-    {
-        return [
-            [
-                [
-                    '1', '0',
-                    '3.5', '33.55', '123.456', '123456.78',
-                    '.1', '.123',
-                    '.0', '0.0',
-                    '1.', '0.', '123.',
-                    '==1', '!=1', '<1', '>1', '<=1', '>=1',
-                    '==1k', '==1ki', '==1m', '==1mi', '==1g', '==1gi',
-                    '1k', '1ki', '1m', '1mi', '1g', '1gi',
-                ],
-                [
-                    false, null, '',
-                    ' ', 'foobar',
-                    '=1', '===1',
-                    '0 . 1', '123 .45', '234. 567',
-                    '..', '.0.', '0.1.2',
-                ],
-            ],
-        ];
-    }
-}
diff --git a/vendor/symfony/finder/Tests/FinderTest.php b/vendor/symfony/finder/Tests/FinderTest.php
deleted file mode 100644
index c0eac6da12b596821bb1f301473ff7b5e1e0a5ef..0000000000000000000000000000000000000000
--- a/vendor/symfony/finder/Tests/FinderTest.php
+++ /dev/null
@@ -1,764 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Finder\Tests;
-
-use Symfony\Component\Finder\Finder;
-
-class FinderTest extends Iterator\RealIteratorTestCase
-{
-    public function testCreate()
-    {
-        $this->assertInstanceOf('Symfony\Component\Finder\Finder', Finder::create());
-    }
-
-    public function testDirectories()
-    {
-        $finder = $this->buildFinder();
-        $this->assertSame($finder, $finder->directories());
-        $this->assertIterator($this->toAbsolute(['foo', 'toto']), $finder->in(self::$tmpDir)->getIterator());
-
-        $finder = $this->buildFinder();
-        $finder->directories();
-        $finder->files();
-        $finder->directories();
-        $this->assertIterator($this->toAbsolute(['foo', 'toto']), $finder->in(self::$tmpDir)->getIterator());
-    }
-
-    public function testFiles()
-    {
-        $finder = $this->buildFinder();
-        $this->assertSame($finder, $finder->files());
-        $this->assertIterator($this->toAbsolute(['foo/bar.tmp', 'test.php', 'test.py', 'foo bar']), $finder->in(self::$tmpDir)->getIterator());
-
-        $finder = $this->buildFinder();
-        $finder->files();
-        $finder->directories();
-        $finder->files();
-        $this->assertIterator($this->toAbsolute(['foo/bar.tmp', 'test.php', 'test.py', 'foo bar']), $finder->in(self::$tmpDir)->getIterator());
-    }
-
-    public function testRemoveTrailingSlash()
-    {
-        $finder = $this->buildFinder();
-
-        $expected = $this->toAbsolute(['foo/bar.tmp', 'test.php', 'test.py', 'foo bar']);
-        $in = self::$tmpDir.'//';
-
-        $this->assertIterator($expected, $finder->in($in)->files()->getIterator());
-    }
-
-    public function testSymlinksNotResolved()
-    {
-        if ('\\' === \DIRECTORY_SEPARATOR) {
-            $this->markTestSkipped('symlinks are not supported on Windows');
-        }
-
-        $finder = $this->buildFinder();
-
-        symlink($this->toAbsolute('foo'), $this->toAbsolute('baz'));
-        $expected = $this->toAbsolute(['baz/bar.tmp']);
-        $in = self::$tmpDir.'/baz/';
-        try {
-            $this->assertIterator($expected, $finder->in($in)->files()->getIterator());
-            unlink($this->toAbsolute('baz'));
-        } catch (\Exception $e) {
-            unlink($this->toAbsolute('baz'));
-            throw $e;
-        }
-    }
-
-    public function testBackPathNotNormalized()
-    {
-        $finder = $this->buildFinder();
-
-        $expected = $this->toAbsolute(['foo/../foo/bar.tmp']);
-        $in = self::$tmpDir.'/foo/../foo/';
-        $this->assertIterator($expected, $finder->in($in)->files()->getIterator());
-    }
-
-    public function testDepth()
-    {
-        $finder = $this->buildFinder();
-        $this->assertSame($finder, $finder->depth('< 1'));
-        $this->assertIterator($this->toAbsolute(['foo', 'test.php', 'test.py', 'toto', 'foo bar']), $finder->in(self::$tmpDir)->getIterator());
-
-        $finder = $this->buildFinder();
-        $this->assertSame($finder, $finder->depth('<= 0'));
-        $this->assertIterator($this->toAbsolute(['foo', 'test.php', 'test.py', 'toto', 'foo bar']), $finder->in(self::$tmpDir)->getIterator());
-
-        $finder = $this->buildFinder();
-        $this->assertSame($finder, $finder->depth('>= 1'));
-        $this->assertIterator($this->toAbsolute(['foo/bar.tmp']), $finder->in(self::$tmpDir)->getIterator());
-
-        $finder = $this->buildFinder();
-        $finder->depth('< 1')->depth('>= 1');
-        $this->assertIterator([], $finder->in(self::$tmpDir)->getIterator());
-    }
-
-    public function testName()
-    {
-        $finder = $this->buildFinder();
-        $this->assertSame($finder, $finder->name('*.php'));
-        $this->assertIterator($this->toAbsolute(['test.php']), $finder->in(self::$tmpDir)->getIterator());
-
-        $finder = $this->buildFinder();
-        $finder->name('test.ph*');
-        $finder->name('test.py');
-        $this->assertIterator($this->toAbsolute(['test.php', 'test.py']), $finder->in(self::$tmpDir)->getIterator());
-
-        $finder = $this->buildFinder();
-        $finder->name('~^test~i');
-        $this->assertIterator($this->toAbsolute(['test.php', 'test.py']), $finder->in(self::$tmpDir)->getIterator());
-
-        $finder = $this->buildFinder();
-        $finder->name('~\\.php$~i');
-        $this->assertIterator($this->toAbsolute(['test.php']), $finder->in(self::$tmpDir)->getIterator());
-
-        $finder = $this->buildFinder();
-        $finder->name('test.p{hp,y}');
-        $this->assertIterator($this->toAbsolute(['test.php', 'test.py']), $finder->in(self::$tmpDir)->getIterator());
-    }
-
-    public function testNotName()
-    {
-        $finder = $this->buildFinder();
-        $this->assertSame($finder, $finder->notName('*.php'));
-        $this->assertIterator($this->toAbsolute(['foo', 'foo/bar.tmp', 'test.py', 'toto', 'foo bar']), $finder->in(self::$tmpDir)->getIterator());
-
-        $finder = $this->buildFinder();
-        $finder->notName('*.php');
-        $finder->notName('*.py');
-        $this->assertIterator($this->toAbsolute(['foo', 'foo/bar.tmp', 'toto', 'foo bar']), $finder->in(self::$tmpDir)->getIterator());
-
-        $finder = $this->buildFinder();
-        $finder->name('test.ph*');
-        $finder->name('test.py');
-        $finder->notName('*.php');
-        $finder->notName('*.py');
-        $this->assertIterator([], $finder->in(self::$tmpDir)->getIterator());
-
-        $finder = $this->buildFinder();
-        $finder->name('test.ph*');
-        $finder->name('test.py');
-        $finder->notName('*.p{hp,y}');
-        $this->assertIterator([], $finder->in(self::$tmpDir)->getIterator());
-    }
-
-    /**
-     * @dataProvider getRegexNameTestData
-     */
-    public function testRegexName($regex)
-    {
-        $finder = $this->buildFinder();
-        $finder->name($regex);
-        $this->assertIterator($this->toAbsolute(['test.py', 'test.php']), $finder->in(self::$tmpDir)->getIterator());
-    }
-
-    public function testSize()
-    {
-        $finder = $this->buildFinder();
-        $this->assertSame($finder, $finder->files()->size('< 1K')->size('> 500'));
-        $this->assertIterator($this->toAbsolute(['test.php']), $finder->in(self::$tmpDir)->getIterator());
-    }
-
-    public function testDate()
-    {
-        $finder = $this->buildFinder();
-        $this->assertSame($finder, $finder->files()->date('until last month'));
-        $this->assertIterator($this->toAbsolute(['foo/bar.tmp', 'test.php']), $finder->in(self::$tmpDir)->getIterator());
-    }
-
-    public function testExclude()
-    {
-        $finder = $this->buildFinder();
-        $this->assertSame($finder, $finder->exclude('foo'));
-        $this->assertIterator($this->toAbsolute(['test.php', 'test.py', 'toto', 'foo bar']), $finder->in(self::$tmpDir)->getIterator());
-    }
-
-    public function testIgnoreVCS()
-    {
-        $finder = $this->buildFinder();
-        $this->assertSame($finder, $finder->ignoreVCS(false)->ignoreDotFiles(false));
-        $this->assertIterator($this->toAbsolute(['.git', 'foo', 'foo/bar.tmp', 'test.php', 'test.py', 'toto', 'toto/.git', '.bar', '.foo', '.foo/.bar', '.foo/bar', 'foo bar']), $finder->in(self::$tmpDir)->getIterator());
-
-        $finder = $this->buildFinder();
-        $finder->ignoreVCS(false)->ignoreVCS(false)->ignoreDotFiles(false);
-        $this->assertIterator($this->toAbsolute(['.git', 'foo', 'foo/bar.tmp', 'test.php', 'test.py', 'toto', 'toto/.git', '.bar', '.foo', '.foo/.bar', '.foo/bar', 'foo bar']), $finder->in(self::$tmpDir)->getIterator());
-
-        $finder = $this->buildFinder();
-        $this->assertSame($finder, $finder->ignoreVCS(true)->ignoreDotFiles(false));
-        $this->assertIterator($this->toAbsolute(['foo', 'foo/bar.tmp', 'test.php', 'test.py', 'toto', '.bar', '.foo', '.foo/.bar', '.foo/bar', 'foo bar']), $finder->in(self::$tmpDir)->getIterator());
-    }
-
-    public function testIgnoreVCSCanBeDisabledAfterFirstIteration()
-    {
-        $finder = $this->buildFinder();
-        $finder->in(self::$tmpDir);
-        $finder->ignoreDotFiles(false);
-
-        $this->assertIterator($this->toAbsolute(['foo', 'foo/bar.tmp', 'test.php', 'test.py', 'toto', '.bar', '.foo', '.foo/.bar', '.foo/bar', 'foo bar']), $finder->getIterator());
-
-        $finder->ignoreVCS(false);
-        $this->assertIterator($this->toAbsolute(['.git', 'foo', 'foo/bar.tmp', 'test.php', 'test.py', 'toto', 'toto/.git', '.bar', '.foo', '.foo/.bar', '.foo/bar', 'foo bar']), $finder->getIterator());
-    }
-
-    public function testIgnoreDotFiles()
-    {
-        $finder = $this->buildFinder();
-        $this->assertSame($finder, $finder->ignoreDotFiles(false)->ignoreVCS(false));
-        $this->assertIterator($this->toAbsolute(['.git', '.bar', '.foo', '.foo/.bar', '.foo/bar', 'foo', 'foo/bar.tmp', 'test.php', 'test.py', 'toto', 'toto/.git', 'foo bar']), $finder->in(self::$tmpDir)->getIterator());
-
-        $finder = $this->buildFinder();
-        $finder->ignoreDotFiles(false)->ignoreDotFiles(false)->ignoreVCS(false);
-        $this->assertIterator($this->toAbsolute(['.git', '.bar', '.foo', '.foo/.bar', '.foo/bar', 'foo', 'foo/bar.tmp', 'test.php', 'test.py', 'toto', 'toto/.git', 'foo bar']), $finder->in(self::$tmpDir)->getIterator());
-
-        $finder = $this->buildFinder();
-        $this->assertSame($finder, $finder->ignoreDotFiles(true)->ignoreVCS(false));
-        $this->assertIterator($this->toAbsolute(['foo', 'foo/bar.tmp', 'test.php', 'test.py', 'toto', 'foo bar']), $finder->in(self::$tmpDir)->getIterator());
-    }
-
-    public function testIgnoreDotFilesCanBeDisabledAfterFirstIteration()
-    {
-        $finder = $this->buildFinder();
-        $finder->in(self::$tmpDir);
-
-        $this->assertIterator($this->toAbsolute(['foo', 'foo/bar.tmp', 'test.php', 'test.py', 'toto', 'foo bar']), $finder->getIterator());
-
-        $finder->ignoreDotFiles(false);
-        $this->assertIterator($this->toAbsolute(['foo', 'foo/bar.tmp', 'test.php', 'test.py', 'toto', '.bar', '.foo', '.foo/.bar', '.foo/bar', 'foo bar']), $finder->getIterator());
-    }
-
-    public function testSortByName()
-    {
-        $finder = $this->buildFinder();
-        $this->assertSame($finder, $finder->sortByName());
-        $this->assertIterator($this->toAbsolute(['foo', 'foo bar', 'foo/bar.tmp', 'test.php', 'test.py', 'toto']), $finder->in(self::$tmpDir)->getIterator());
-    }
-
-    public function testSortByType()
-    {
-        $finder = $this->buildFinder();
-        $this->assertSame($finder, $finder->sortByType());
-        $this->assertIterator($this->toAbsolute(['foo', 'foo bar', 'toto', 'foo/bar.tmp', 'test.php', 'test.py']), $finder->in(self::$tmpDir)->getIterator());
-    }
-
-    public function testSortByAccessedTime()
-    {
-        $finder = $this->buildFinder();
-        $this->assertSame($finder, $finder->sortByAccessedTime());
-        $this->assertIterator($this->toAbsolute(['foo/bar.tmp', 'test.php', 'toto', 'test.py', 'foo', 'foo bar']), $finder->in(self::$tmpDir)->getIterator());
-    }
-
-    public function testSortByChangedTime()
-    {
-        $finder = $this->buildFinder();
-        $this->assertSame($finder, $finder->sortByChangedTime());
-        $this->assertIterator($this->toAbsolute(['toto', 'test.py', 'test.php', 'foo/bar.tmp', 'foo', 'foo bar']), $finder->in(self::$tmpDir)->getIterator());
-    }
-
-    public function testSortByModifiedTime()
-    {
-        $finder = $this->buildFinder();
-        $this->assertSame($finder, $finder->sortByModifiedTime());
-        $this->assertIterator($this->toAbsolute(['foo/bar.tmp', 'test.php', 'toto', 'test.py', 'foo', 'foo bar']), $finder->in(self::$tmpDir)->getIterator());
-    }
-
-    public function testSort()
-    {
-        $finder = $this->buildFinder();
-        $this->assertSame($finder, $finder->sort(function (\SplFileInfo $a, \SplFileInfo $b) { return strcmp($a->getRealPath(), $b->getRealPath()); }));
-        $this->assertIterator($this->toAbsolute(['foo', 'foo bar', 'foo/bar.tmp', 'test.php', 'test.py', 'toto']), $finder->in(self::$tmpDir)->getIterator());
-    }
-
-    public function testFilter()
-    {
-        $finder = $this->buildFinder();
-        $this->assertSame($finder, $finder->filter(function (\SplFileInfo $f) { return false !== strpos($f, 'test'); }));
-        $this->assertIterator($this->toAbsolute(['test.php', 'test.py']), $finder->in(self::$tmpDir)->getIterator());
-    }
-
-    public function testFollowLinks()
-    {
-        if ('\\' == \DIRECTORY_SEPARATOR) {
-            $this->markTestSkipped('symlinks are not supported on Windows');
-        }
-
-        $finder = $this->buildFinder();
-        $this->assertSame($finder, $finder->followLinks());
-        $this->assertIterator($this->toAbsolute(['foo', 'foo/bar.tmp', 'test.php', 'test.py', 'toto', 'foo bar']), $finder->in(self::$tmpDir)->getIterator());
-    }
-
-    public function testIn()
-    {
-        $finder = $this->buildFinder();
-        $iterator = $finder->files()->name('*.php')->depth('< 1')->in([self::$tmpDir, __DIR__])->getIterator();
-
-        $expected = [
-            self::$tmpDir.\DIRECTORY_SEPARATOR.'test.php',
-            __DIR__.\DIRECTORY_SEPARATOR.'FinderTest.php',
-            __DIR__.\DIRECTORY_SEPARATOR.'GlobTest.php',
-        ];
-
-        $this->assertIterator($expected, $iterator);
-    }
-
-    /**
-     * @expectedException \InvalidArgumentException
-     */
-    public function testInWithNonExistentDirectory()
-    {
-        $finder = new Finder();
-        $finder->in('foobar');
-    }
-
-    public function testInWithGlob()
-    {
-        $finder = $this->buildFinder();
-        $finder->in([__DIR__.'/Fixtures/*/B/C/', __DIR__.'/Fixtures/*/*/B/C/'])->getIterator();
-
-        $this->assertIterator($this->toAbsoluteFixtures(['A/B/C/abc.dat', 'copy/A/B/C/abc.dat.copy']), $finder);
-    }
-
-    /**
-     * @expectedException \InvalidArgumentException
-     */
-    public function testInWithNonDirectoryGlob()
-    {
-        $finder = new Finder();
-        $finder->in(__DIR__.'/Fixtures/A/a*');
-    }
-
-    public function testInWithGlobBrace()
-    {
-        if (!\defined('GLOB_BRACE')) {
-            $this->markTestSkipped('Glob brace is not supported on this system.');
-        }
-
-        $finder = $this->buildFinder();
-        $finder->in([__DIR__.'/Fixtures/{A,copy/A}/B/C'])->getIterator();
-
-        $this->assertIterator($this->toAbsoluteFixtures(['A/B/C/abc.dat', 'copy/A/B/C/abc.dat.copy']), $finder);
-    }
-
-    /**
-     * @expectedException \LogicException
-     */
-    public function testGetIteratorWithoutIn()
-    {
-        $finder = Finder::create();
-        $finder->getIterator();
-    }
-
-    public function testGetIterator()
-    {
-        $finder = $this->buildFinder();
-        $dirs = [];
-        foreach ($finder->directories()->in(self::$tmpDir) as $dir) {
-            $dirs[] = (string) $dir;
-        }
-
-        $expected = $this->toAbsolute(['foo', 'toto']);
-
-        sort($dirs);
-        sort($expected);
-
-        $this->assertEquals($expected, $dirs, 'implements the \IteratorAggregate interface');
-
-        $finder = $this->buildFinder();
-        $this->assertEquals(2, iterator_count($finder->directories()->in(self::$tmpDir)), 'implements the \IteratorAggregate interface');
-
-        $finder = $this->buildFinder();
-        $a = iterator_to_array($finder->directories()->in(self::$tmpDir));
-        $a = array_values(array_map('strval', $a));
-        sort($a);
-        $this->assertEquals($expected, $a, 'implements the \IteratorAggregate interface');
-    }
-
-    public function testRelativePath()
-    {
-        $finder = $this->buildFinder()->in(self::$tmpDir);
-
-        $paths = [];
-
-        foreach ($finder as $file) {
-            $paths[] = $file->getRelativePath();
-        }
-
-        $ref = ['', '', '', '', 'foo', ''];
-
-        sort($ref);
-        sort($paths);
-
-        $this->assertEquals($ref, $paths);
-    }
-
-    public function testRelativePathname()
-    {
-        $finder = $this->buildFinder()->in(self::$tmpDir)->sortByName();
-
-        $paths = [];
-
-        foreach ($finder as $file) {
-            $paths[] = $file->getRelativePathname();
-        }
-
-        $ref = ['test.php', 'toto', 'test.py', 'foo', 'foo'.\DIRECTORY_SEPARATOR.'bar.tmp', 'foo bar'];
-
-        sort($paths);
-        sort($ref);
-
-        $this->assertEquals($ref, $paths);
-    }
-
-    public function testAppendWithAFinder()
-    {
-        $finder = $this->buildFinder();
-        $finder->files()->in(self::$tmpDir.\DIRECTORY_SEPARATOR.'foo');
-
-        $finder1 = $this->buildFinder();
-        $finder1->directories()->in(self::$tmpDir);
-
-        $finder = $finder->append($finder1);
-
-        $this->assertIterator($this->toAbsolute(['foo', 'foo/bar.tmp', 'toto']), $finder->getIterator());
-    }
-
-    public function testAppendWithAnArray()
-    {
-        $finder = $this->buildFinder();
-        $finder->files()->in(self::$tmpDir.\DIRECTORY_SEPARATOR.'foo');
-
-        $finder->append($this->toAbsolute(['foo', 'toto']));
-
-        $this->assertIterator($this->toAbsolute(['foo', 'foo/bar.tmp', 'toto']), $finder->getIterator());
-    }
-
-    public function testAppendReturnsAFinder()
-    {
-        $this->assertInstanceOf('Symfony\\Component\\Finder\\Finder', Finder::create()->append([]));
-    }
-
-    public function testAppendDoesNotRequireIn()
-    {
-        $finder = $this->buildFinder();
-        $finder->in(self::$tmpDir.\DIRECTORY_SEPARATOR.'foo');
-
-        $finder1 = Finder::create()->append($finder);
-
-        $this->assertIterator(iterator_to_array($finder->getIterator()), $finder1->getIterator());
-    }
-
-    public function testCountDirectories()
-    {
-        $directory = Finder::create()->directories()->in(self::$tmpDir);
-        $i = 0;
-
-        foreach ($directory as $dir) {
-            ++$i;
-        }
-
-        $this->assertCount($i, $directory);
-    }
-
-    public function testCountFiles()
-    {
-        $files = Finder::create()->files()->in(__DIR__.\DIRECTORY_SEPARATOR.'Fixtures');
-        $i = 0;
-
-        foreach ($files as $file) {
-            ++$i;
-        }
-
-        $this->assertCount($i, $files);
-    }
-
-    /**
-     * @expectedException \LogicException
-     */
-    public function testCountWithoutIn()
-    {
-        $finder = Finder::create()->files();
-        \count($finder);
-    }
-
-    public function testHasResults()
-    {
-        $finder = $this->buildFinder();
-        $finder->in(__DIR__);
-        $this->assertTrue($finder->hasResults());
-    }
-
-    public function testNoResults()
-    {
-        $finder = $this->buildFinder();
-        $finder->in(__DIR__)->name('DoesNotExist');
-        $this->assertFalse($finder->hasResults());
-    }
-
-    /**
-     * @dataProvider getContainsTestData
-     */
-    public function testContains($matchPatterns, $noMatchPatterns, $expected)
-    {
-        $finder = $this->buildFinder();
-        $finder->in(__DIR__.\DIRECTORY_SEPARATOR.'Fixtures')
-            ->name('*.txt')->sortByName()
-            ->contains($matchPatterns)
-            ->notContains($noMatchPatterns);
-
-        $this->assertIterator($this->toAbsoluteFixtures($expected), $finder);
-    }
-
-    public function testContainsOnDirectory()
-    {
-        $finder = $this->buildFinder();
-        $finder->in(__DIR__)
-            ->directories()
-            ->name('Fixtures')
-            ->contains('abc');
-        $this->assertIterator([], $finder);
-    }
-
-    public function testNotContainsOnDirectory()
-    {
-        $finder = $this->buildFinder();
-        $finder->in(__DIR__)
-            ->directories()
-            ->name('Fixtures')
-            ->notContains('abc');
-        $this->assertIterator([], $finder);
-    }
-
-    /**
-     * Searching in multiple locations involves AppendIterator which does an unnecessary rewind which leaves FilterIterator
-     * with inner FilesystemIterator in an invalid state.
-     *
-     * @see https://bugs.php.net/68557
-     */
-    public function testMultipleLocations()
-    {
-        $locations = [
-            self::$tmpDir.'/',
-            self::$tmpDir.'/toto/',
-        ];
-
-        // it is expected that there are test.py test.php in the tmpDir
-        $finder = new Finder();
-        $finder->in($locations)
-            // the default flag IGNORE_DOT_FILES fixes the problem indirectly
-            // so we set it to false for better isolation
-            ->ignoreDotFiles(false)
-            ->depth('< 1')->name('test.php');
-
-        $this->assertCount(1, $finder);
-    }
-
-    /**
-     * Searching in multiple locations with sub directories involves
-     * AppendIterator which does an unnecessary rewind which leaves
-     * FilterIterator with inner FilesystemIterator in an invalid state.
-     *
-     * @see https://bugs.php.net/68557
-     */
-    public function testMultipleLocationsWithSubDirectories()
-    {
-        $locations = [
-            __DIR__.'/Fixtures/one',
-            self::$tmpDir.\DIRECTORY_SEPARATOR.'toto',
-        ];
-
-        $finder = $this->buildFinder();
-        $finder->in($locations)->depth('< 10')->name('*.neon');
-
-        $expected = [
-            __DIR__.'/Fixtures/one'.\DIRECTORY_SEPARATOR.'b'.\DIRECTORY_SEPARATOR.'c.neon',
-            __DIR__.'/Fixtures/one'.\DIRECTORY_SEPARATOR.'b'.\DIRECTORY_SEPARATOR.'d.neon',
-        ];
-
-        $this->assertIterator($expected, $finder);
-        $this->assertIteratorInForeach($expected, $finder);
-    }
-
-    /**
-     * Iterator keys must be the file pathname.
-     */
-    public function testIteratorKeys()
-    {
-        $finder = $this->buildFinder()->in(self::$tmpDir);
-        foreach ($finder as $key => $file) {
-            $this->assertEquals($file->getPathname(), $key);
-        }
-    }
-
-    public function testRegexSpecialCharsLocationWithPathRestrictionContainingStartFlag()
-    {
-        $finder = $this->buildFinder();
-        $finder->in(__DIR__.\DIRECTORY_SEPARATOR.'Fixtures'.\DIRECTORY_SEPARATOR.'r+e.gex[c]a(r)s')
-            ->path('/^dir/');
-
-        $expected = ['r+e.gex[c]a(r)s'.\DIRECTORY_SEPARATOR.'dir', 'r+e.gex[c]a(r)s'.\DIRECTORY_SEPARATOR.'dir'.\DIRECTORY_SEPARATOR.'bar.dat'];
-        $this->assertIterator($this->toAbsoluteFixtures($expected), $finder);
-    }
-
-    public function getContainsTestData()
-    {
-        return [
-            ['', '', []],
-            ['foo', 'bar', []],
-            ['', 'foobar', ['dolor.txt', 'ipsum.txt', 'lorem.txt']],
-            ['lorem ipsum dolor sit amet', 'foobar', ['lorem.txt']],
-            ['sit', 'bar', ['dolor.txt', 'ipsum.txt', 'lorem.txt']],
-            ['dolor sit amet', '@^L@m', ['dolor.txt', 'ipsum.txt']],
-            ['/^lorem ipsum dolor sit amet$/m', 'foobar', ['lorem.txt']],
-            ['lorem', 'foobar', ['lorem.txt']],
-            ['', 'lorem', ['dolor.txt', 'ipsum.txt']],
-            ['ipsum dolor sit amet', '/^IPSUM/m', ['lorem.txt']],
-        ];
-    }
-
-    public function getRegexNameTestData()
-    {
-        return [
-            ['~.+\\.p.+~i'],
-            ['~t.*s~i'],
-        ];
-    }
-
-    /**
-     * @dataProvider getTestPathData
-     */
-    public function testPath($matchPatterns, $noMatchPatterns, array $expected)
-    {
-        $finder = $this->buildFinder();
-        $finder->in(__DIR__.\DIRECTORY_SEPARATOR.'Fixtures')
-            ->path($matchPatterns)
-            ->notPath($noMatchPatterns);
-
-        $this->assertIterator($this->toAbsoluteFixtures($expected), $finder);
-    }
-
-    public function getTestPathData()
-    {
-        return [
-            ['', '', []],
-            ['/^A\/B\/C/', '/C$/',
-                ['A'.\DIRECTORY_SEPARATOR.'B'.\DIRECTORY_SEPARATOR.'C'.\DIRECTORY_SEPARATOR.'abc.dat'],
-            ],
-            ['/^A\/B/', 'foobar',
-                [
-                    'A'.\DIRECTORY_SEPARATOR.'B',
-                    'A'.\DIRECTORY_SEPARATOR.'B'.\DIRECTORY_SEPARATOR.'C',
-                    'A'.\DIRECTORY_SEPARATOR.'B'.\DIRECTORY_SEPARATOR.'ab.dat',
-                    'A'.\DIRECTORY_SEPARATOR.'B'.\DIRECTORY_SEPARATOR.'C'.\DIRECTORY_SEPARATOR.'abc.dat',
-                ],
-            ],
-            ['A/B/C', 'foobar',
-                [
-                    'A'.\DIRECTORY_SEPARATOR.'B'.\DIRECTORY_SEPARATOR.'C',
-                    'A'.\DIRECTORY_SEPARATOR.'B'.\DIRECTORY_SEPARATOR.'C'.\DIRECTORY_SEPARATOR.'abc.dat',
-                    'copy'.\DIRECTORY_SEPARATOR.'A'.\DIRECTORY_SEPARATOR.'B'.\DIRECTORY_SEPARATOR.'C',
-                    'copy'.\DIRECTORY_SEPARATOR.'A'.\DIRECTORY_SEPARATOR.'B'.\DIRECTORY_SEPARATOR.'C'.\DIRECTORY_SEPARATOR.'abc.dat.copy',
-                ],
-            ],
-            ['A/B', 'foobar',
-                [
-                    //dirs
-                    'A'.\DIRECTORY_SEPARATOR.'B',
-                    'A'.\DIRECTORY_SEPARATOR.'B'.\DIRECTORY_SEPARATOR.'C',
-                    'copy'.\DIRECTORY_SEPARATOR.'A'.\DIRECTORY_SEPARATOR.'B',
-                    'copy'.\DIRECTORY_SEPARATOR.'A'.\DIRECTORY_SEPARATOR.'B'.\DIRECTORY_SEPARATOR.'C',
-                    //files
-                    'A'.\DIRECTORY_SEPARATOR.'B'.\DIRECTORY_SEPARATOR.'ab.dat',
-                    'A'.\DIRECTORY_SEPARATOR.'B'.\DIRECTORY_SEPARATOR.'C'.\DIRECTORY_SEPARATOR.'abc.dat',
-                    'copy'.\DIRECTORY_SEPARATOR.'A'.\DIRECTORY_SEPARATOR.'B'.\DIRECTORY_SEPARATOR.'ab.dat.copy',
-                    'copy'.\DIRECTORY_SEPARATOR.'A'.\DIRECTORY_SEPARATOR.'B'.\DIRECTORY_SEPARATOR.'C'.\DIRECTORY_SEPARATOR.'abc.dat.copy',
-                ],
-            ],
-            ['/^with space\//', 'foobar',
-                [
-                    'with space'.\DIRECTORY_SEPARATOR.'foo.txt',
-                ],
-            ],
-        ];
-    }
-
-    public function testAccessDeniedException()
-    {
-        if ('\\' === \DIRECTORY_SEPARATOR) {
-            $this->markTestSkipped('chmod is not supported on Windows');
-        }
-
-        $finder = $this->buildFinder();
-        $finder->files()->in(self::$tmpDir);
-
-        // make 'foo' directory non-readable
-        $testDir = self::$tmpDir.\DIRECTORY_SEPARATOR.'foo';
-        chmod($testDir, 0333);
-
-        if (false === $couldRead = is_readable($testDir)) {
-            try {
-                $this->assertIterator($this->toAbsolute(['foo bar', 'test.php', 'test.py']), $finder->getIterator());
-                $this->fail('Finder should throw an exception when opening a non-readable directory.');
-            } catch (\Exception $e) {
-                $expectedExceptionClass = 'Symfony\\Component\\Finder\\Exception\\AccessDeniedException';
-                if ($e instanceof \PHPUnit_Framework_ExpectationFailedException) {
-                    $this->fail(sprintf("Expected exception:\n%s\nGot:\n%s\nWith comparison failure:\n%s", $expectedExceptionClass, 'PHPUnit_Framework_ExpectationFailedException', $e->getComparisonFailure()->getExpectedAsString()));
-                }
-
-                if ($e instanceof \PHPUnit\Framework\ExpectationFailedException) {
-                    $this->fail(sprintf("Expected exception:\n%s\nGot:\n%s\nWith comparison failure:\n%s", $expectedExceptionClass, '\PHPUnit\Framework\ExpectationFailedException', $e->getComparisonFailure()->getExpectedAsString()));
-                }
-
-                $this->assertInstanceOf($expectedExceptionClass, $e);
-            }
-        }
-
-        // restore original permissions
-        chmod($testDir, 0777);
-        clearstatcache(true, $testDir);
-
-        if ($couldRead) {
-            $this->markTestSkipped('could read test files while test requires unreadable');
-        }
-    }
-
-    public function testIgnoredAccessDeniedException()
-    {
-        if ('\\' === \DIRECTORY_SEPARATOR) {
-            $this->markTestSkipped('chmod is not supported on Windows');
-        }
-
-        $finder = $this->buildFinder();
-        $finder->files()->ignoreUnreadableDirs()->in(self::$tmpDir);
-
-        // make 'foo' directory non-readable
-        $testDir = self::$tmpDir.\DIRECTORY_SEPARATOR.'foo';
-        chmod($testDir, 0333);
-
-        if (false === ($couldRead = is_readable($testDir))) {
-            $this->assertIterator($this->toAbsolute(['foo bar', 'test.php', 'test.py']), $finder->getIterator());
-        }
-
-        // restore original permissions
-        chmod($testDir, 0777);
-        clearstatcache(true, $testDir);
-
-        if ($couldRead) {
-            $this->markTestSkipped('could read test files while test requires unreadable');
-        }
-    }
-
-    protected function buildFinder()
-    {
-        return Finder::create();
-    }
-}
diff --git a/vendor/symfony/finder/Tests/Fixtures/.dot/a b/vendor/symfony/finder/Tests/Fixtures/.dot/a
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/vendor/symfony/finder/Tests/Fixtures/.dot/b/c.neon b/vendor/symfony/finder/Tests/Fixtures/.dot/b/c.neon
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/vendor/symfony/finder/Tests/Fixtures/.dot/b/d.neon b/vendor/symfony/finder/Tests/Fixtures/.dot/b/d.neon
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/vendor/symfony/finder/Tests/Fixtures/A/B/C/abc.dat b/vendor/symfony/finder/Tests/Fixtures/A/B/C/abc.dat
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/vendor/symfony/finder/Tests/Fixtures/A/B/ab.dat b/vendor/symfony/finder/Tests/Fixtures/A/B/ab.dat
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/vendor/symfony/finder/Tests/Fixtures/A/a.dat b/vendor/symfony/finder/Tests/Fixtures/A/a.dat
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/vendor/symfony/finder/Tests/Fixtures/copy/A/B/C/abc.dat.copy b/vendor/symfony/finder/Tests/Fixtures/copy/A/B/C/abc.dat.copy
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/vendor/symfony/finder/Tests/Fixtures/copy/A/B/ab.dat.copy b/vendor/symfony/finder/Tests/Fixtures/copy/A/B/ab.dat.copy
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/vendor/symfony/finder/Tests/Fixtures/copy/A/a.dat.copy b/vendor/symfony/finder/Tests/Fixtures/copy/A/a.dat.copy
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/vendor/symfony/finder/Tests/Fixtures/dolor.txt b/vendor/symfony/finder/Tests/Fixtures/dolor.txt
deleted file mode 100644
index 658bec69852205f9ee697700da37619ac57212ae..0000000000000000000000000000000000000000
--- a/vendor/symfony/finder/Tests/Fixtures/dolor.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-dolor sit amet
-DOLOR SIT AMET
\ No newline at end of file
diff --git a/vendor/symfony/finder/Tests/Fixtures/ipsum.txt b/vendor/symfony/finder/Tests/Fixtures/ipsum.txt
deleted file mode 100644
index c7f392d6fbbea8f667bf4ee86214868b5c414ede..0000000000000000000000000000000000000000
--- a/vendor/symfony/finder/Tests/Fixtures/ipsum.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-ipsum dolor sit amet
-IPSUM DOLOR SIT AMET
\ No newline at end of file
diff --git a/vendor/symfony/finder/Tests/Fixtures/lorem.txt b/vendor/symfony/finder/Tests/Fixtures/lorem.txt
deleted file mode 100644
index 2991a2cacbea49652f55eaa113ff52382eb49a7b..0000000000000000000000000000000000000000
--- a/vendor/symfony/finder/Tests/Fixtures/lorem.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-lorem ipsum dolor sit amet
-LOREM IPSUM DOLOR SIT AMET
\ No newline at end of file
diff --git a/vendor/symfony/finder/Tests/Fixtures/one/.dot b/vendor/symfony/finder/Tests/Fixtures/one/.dot
deleted file mode 100644
index 1028065f8a33788f841786ac2d2d18337beabbd8..0000000000000000000000000000000000000000
--- a/vendor/symfony/finder/Tests/Fixtures/one/.dot
+++ /dev/null
@@ -1 +0,0 @@
-.dot
\ No newline at end of file
diff --git a/vendor/symfony/finder/Tests/Fixtures/one/a b/vendor/symfony/finder/Tests/Fixtures/one/a
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/vendor/symfony/finder/Tests/Fixtures/one/b/c.neon b/vendor/symfony/finder/Tests/Fixtures/one/b/c.neon
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/vendor/symfony/finder/Tests/Fixtures/one/b/d.neon b/vendor/symfony/finder/Tests/Fixtures/one/b/d.neon
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/vendor/symfony/finder/Tests/Fixtures/r+e.gex[c]a(r)s/dir/bar.dat b/vendor/symfony/finder/Tests/Fixtures/r+e.gex[c]a(r)s/dir/bar.dat
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/vendor/symfony/finder/Tests/Fixtures/with space/foo.txt b/vendor/symfony/finder/Tests/Fixtures/with space/foo.txt
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/vendor/symfony/finder/Tests/GlobTest.php b/vendor/symfony/finder/Tests/GlobTest.php
deleted file mode 100644
index 2d48799c5cfa68293b37a7d4a728a90d0a28206b..0000000000000000000000000000000000000000
--- a/vendor/symfony/finder/Tests/GlobTest.php
+++ /dev/null
@@ -1,95 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Finder\Tests;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Finder\Finder;
-use Symfony\Component\Finder\Glob;
-
-class GlobTest extends TestCase
-{
-    public function testGlobToRegexDelimiters()
-    {
-        $this->assertEquals('#^(?=[^\.])\#$#', Glob::toRegex('#'));
-        $this->assertEquals('#^\.[^/]*$#', Glob::toRegex('.*'));
-        $this->assertEquals('^\.[^/]*$', Glob::toRegex('.*', true, true, ''));
-        $this->assertEquals('/^\.[^/]*$/', Glob::toRegex('.*', true, true, '/'));
-    }
-
-    public function testGlobToRegexDoubleStarStrictDots()
-    {
-        $finder = new Finder();
-        $finder->ignoreDotFiles(false);
-        $regex = Glob::toRegex('/**/*.neon');
-
-        foreach ($finder->in(__DIR__) as $k => $v) {
-            $k = str_replace(\DIRECTORY_SEPARATOR, '/', $k);
-            if (preg_match($regex, substr($k, \strlen(__DIR__)))) {
-                $match[] = substr($k, 10 + \strlen(__DIR__));
-            }
-        }
-        sort($match);
-
-        $this->assertSame(['one/b/c.neon', 'one/b/d.neon'], $match);
-    }
-
-    public function testGlobToRegexDoubleStarNonStrictDots()
-    {
-        $finder = new Finder();
-        $finder->ignoreDotFiles(false);
-        $regex = Glob::toRegex('/**/*.neon', false);
-
-        foreach ($finder->in(__DIR__) as $k => $v) {
-            $k = str_replace(\DIRECTORY_SEPARATOR, '/', $k);
-            if (preg_match($regex, substr($k, \strlen(__DIR__)))) {
-                $match[] = substr($k, 10 + \strlen(__DIR__));
-            }
-        }
-        sort($match);
-
-        $this->assertSame(['.dot/b/c.neon', '.dot/b/d.neon', 'one/b/c.neon', 'one/b/d.neon'], $match);
-    }
-
-    public function testGlobToRegexDoubleStarWithoutLeadingSlash()
-    {
-        $finder = new Finder();
-        $finder->ignoreDotFiles(false);
-        $regex = Glob::toRegex('/Fixtures/one/**');
-
-        foreach ($finder->in(__DIR__) as $k => $v) {
-            $k = str_replace(\DIRECTORY_SEPARATOR, '/', $k);
-            if (preg_match($regex, substr($k, \strlen(__DIR__)))) {
-                $match[] = substr($k, 10 + \strlen(__DIR__));
-            }
-        }
-        sort($match);
-
-        $this->assertSame(['one/a', 'one/b', 'one/b/c.neon', 'one/b/d.neon'], $match);
-    }
-
-    public function testGlobToRegexDoubleStarWithoutLeadingSlashNotStrictLeadingDot()
-    {
-        $finder = new Finder();
-        $finder->ignoreDotFiles(false);
-        $regex = Glob::toRegex('/Fixtures/one/**', false);
-
-        foreach ($finder->in(__DIR__) as $k => $v) {
-            $k = str_replace(\DIRECTORY_SEPARATOR, '/', $k);
-            if (preg_match($regex, substr($k, \strlen(__DIR__)))) {
-                $match[] = substr($k, 10 + \strlen(__DIR__));
-            }
-        }
-        sort($match);
-
-        $this->assertSame(['one/.dot', 'one/a', 'one/b', 'one/b/c.neon', 'one/b/d.neon'], $match);
-    }
-}
diff --git a/vendor/symfony/finder/Tests/Iterator/CustomFilterIteratorTest.php b/vendor/symfony/finder/Tests/Iterator/CustomFilterIteratorTest.php
deleted file mode 100644
index ad0187e032afcbf9d7c33ec4f108e51077839f46..0000000000000000000000000000000000000000
--- a/vendor/symfony/finder/Tests/Iterator/CustomFilterIteratorTest.php
+++ /dev/null
@@ -1,46 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Finder\Tests\Iterator;
-
-use Symfony\Component\Finder\Iterator\CustomFilterIterator;
-
-class CustomFilterIteratorTest extends IteratorTestCase
-{
-    /**
-     * @expectedException \InvalidArgumentException
-     */
-    public function testWithInvalidFilter()
-    {
-        new CustomFilterIterator(new Iterator(), ['foo']);
-    }
-
-    /**
-     * @dataProvider getAcceptData
-     */
-    public function testAccept($filters, $expected)
-    {
-        $inner = new Iterator(['test.php', 'test.py', 'foo.php']);
-
-        $iterator = new CustomFilterIterator($inner, $filters);
-
-        $this->assertIterator($expected, $iterator);
-    }
-
-    public function getAcceptData()
-    {
-        return [
-            [[function (\SplFileInfo $fileinfo) { return false; }], []],
-            [[function (\SplFileInfo $fileinfo) { return 0 === strpos($fileinfo, 'test'); }], ['test.php', 'test.py']],
-            [['is_dir'], []],
-        ];
-    }
-}
diff --git a/vendor/symfony/finder/Tests/Iterator/DateRangeFilterIteratorTest.php b/vendor/symfony/finder/Tests/Iterator/DateRangeFilterIteratorTest.php
deleted file mode 100644
index 7b1800b157a0052da10c4ef4b1bb2d429b9dd4cb..0000000000000000000000000000000000000000
--- a/vendor/symfony/finder/Tests/Iterator/DateRangeFilterIteratorTest.php
+++ /dev/null
@@ -1,74 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Finder\Tests\Iterator;
-
-use Symfony\Component\Finder\Comparator\DateComparator;
-use Symfony\Component\Finder\Iterator\DateRangeFilterIterator;
-
-class DateRangeFilterIteratorTest extends RealIteratorTestCase
-{
-    /**
-     * @dataProvider getAcceptData
-     */
-    public function testAccept($size, $expected)
-    {
-        $files = self::$files;
-        $files[] = self::toAbsolute('doesnotexist');
-        $inner = new Iterator($files);
-
-        $iterator = new DateRangeFilterIterator($inner, $size);
-
-        $this->assertIterator($expected, $iterator);
-    }
-
-    public function getAcceptData()
-    {
-        $since20YearsAgo = [
-            '.git',
-            'test.py',
-            'foo',
-            'foo/bar.tmp',
-            'test.php',
-            'toto',
-            'toto/.git',
-            '.bar',
-            '.foo',
-            '.foo/.bar',
-            'foo bar',
-            '.foo/bar',
-        ];
-
-        $since2MonthsAgo = [
-            '.git',
-            'test.py',
-            'foo',
-            'toto',
-            'toto/.git',
-            '.bar',
-            '.foo',
-            '.foo/.bar',
-            'foo bar',
-            '.foo/bar',
-        ];
-
-        $untilLastMonth = [
-            'foo/bar.tmp',
-            'test.php',
-        ];
-
-        return [
-            [[new DateComparator('since 20 years ago')], $this->toAbsolute($since20YearsAgo)],
-            [[new DateComparator('since 2 months ago')], $this->toAbsolute($since2MonthsAgo)],
-            [[new DateComparator('until last month')], $this->toAbsolute($untilLastMonth)],
-        ];
-    }
-}
diff --git a/vendor/symfony/finder/Tests/Iterator/DepthRangeFilterIteratorTest.php b/vendor/symfony/finder/Tests/Iterator/DepthRangeFilterIteratorTest.php
deleted file mode 100644
index dab9723d7ed2f42b6ea1c5cf51e7066a0ec5caf7..0000000000000000000000000000000000000000
--- a/vendor/symfony/finder/Tests/Iterator/DepthRangeFilterIteratorTest.php
+++ /dev/null
@@ -1,83 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Finder\Tests\Iterator;
-
-use Symfony\Component\Finder\Iterator\DepthRangeFilterIterator;
-
-class DepthRangeFilterIteratorTest extends RealIteratorTestCase
-{
-    /**
-     * @dataProvider getAcceptData
-     */
-    public function testAccept($minDepth, $maxDepth, $expected)
-    {
-        $inner = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($this->toAbsolute(), \FilesystemIterator::SKIP_DOTS), \RecursiveIteratorIterator::SELF_FIRST);
-
-        $iterator = new DepthRangeFilterIterator($inner, $minDepth, $maxDepth);
-
-        $actual = array_keys(iterator_to_array($iterator));
-        sort($expected);
-        sort($actual);
-        $this->assertEquals($expected, $actual);
-    }
-
-    public function getAcceptData()
-    {
-        $lessThan1 = [
-            '.git',
-            'test.py',
-            'foo',
-            'test.php',
-            'toto',
-            '.foo',
-            '.bar',
-            'foo bar',
-        ];
-
-        $lessThanOrEqualTo1 = [
-            '.git',
-            'test.py',
-            'foo',
-            'foo/bar.tmp',
-            'test.php',
-            'toto',
-            'toto/.git',
-            '.foo',
-            '.foo/.bar',
-            '.bar',
-            'foo bar',
-            '.foo/bar',
-        ];
-
-        $graterThanOrEqualTo1 = [
-            'toto/.git',
-            'foo/bar.tmp',
-            '.foo/.bar',
-            '.foo/bar',
-        ];
-
-        $equalTo1 = [
-            'toto/.git',
-            'foo/bar.tmp',
-            '.foo/.bar',
-            '.foo/bar',
-        ];
-
-        return [
-            [0, 0, $this->toAbsolute($lessThan1)],
-            [0, 1, $this->toAbsolute($lessThanOrEqualTo1)],
-            [2, PHP_INT_MAX, []],
-            [1, PHP_INT_MAX, $this->toAbsolute($graterThanOrEqualTo1)],
-            [1, 1, $this->toAbsolute($equalTo1)],
-        ];
-    }
-}
diff --git a/vendor/symfony/finder/Tests/Iterator/ExcludeDirectoryFilterIteratorTest.php b/vendor/symfony/finder/Tests/Iterator/ExcludeDirectoryFilterIteratorTest.php
deleted file mode 100644
index 2835ba57c817e81c31810b6eb8d421cc33cab618..0000000000000000000000000000000000000000
--- a/vendor/symfony/finder/Tests/Iterator/ExcludeDirectoryFilterIteratorTest.php
+++ /dev/null
@@ -1,80 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Finder\Tests\Iterator;
-
-use Symfony\Component\Finder\Iterator\ExcludeDirectoryFilterIterator;
-use Symfony\Component\Finder\Iterator\RecursiveDirectoryIterator;
-
-class ExcludeDirectoryFilterIteratorTest extends RealIteratorTestCase
-{
-    /**
-     * @dataProvider getAcceptData
-     */
-    public function testAccept($directories, $expected)
-    {
-        $inner = new \RecursiveIteratorIterator(new RecursiveDirectoryIterator($this->toAbsolute(), \FilesystemIterator::SKIP_DOTS), \RecursiveIteratorIterator::SELF_FIRST);
-
-        $iterator = new ExcludeDirectoryFilterIterator($inner, $directories);
-
-        $this->assertIterator($expected, $iterator);
-    }
-
-    public function getAcceptData()
-    {
-        $foo = [
-            '.bar',
-            '.foo',
-            '.foo/.bar',
-            '.foo/bar',
-            '.git',
-            'test.py',
-            'test.php',
-            'toto',
-            'toto/.git',
-            'foo bar',
-        ];
-
-        $fo = [
-            '.bar',
-            '.foo',
-            '.foo/.bar',
-            '.foo/bar',
-            '.git',
-            'test.py',
-            'foo',
-            'foo/bar.tmp',
-            'test.php',
-            'toto',
-            'toto/.git',
-            'foo bar',
-        ];
-
-        $toto = [
-            '.bar',
-            '.foo',
-            '.foo/.bar',
-            '.foo/bar',
-            '.git',
-            'test.py',
-            'foo',
-            'foo/bar.tmp',
-            'test.php',
-            'foo bar',
-        ];
-
-        return [
-            [['foo'], $this->toAbsolute($foo)],
-            [['fo'], $this->toAbsolute($fo)],
-            [['toto/'], $this->toAbsolute($toto)],
-        ];
-    }
-}
diff --git a/vendor/symfony/finder/Tests/Iterator/FileTypeFilterIteratorTest.php b/vendor/symfony/finder/Tests/Iterator/FileTypeFilterIteratorTest.php
deleted file mode 100644
index fe03b434ad558c02b7c8b50b0d6d8dd452c5837d..0000000000000000000000000000000000000000
--- a/vendor/symfony/finder/Tests/Iterator/FileTypeFilterIteratorTest.php
+++ /dev/null
@@ -1,73 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Finder\Tests\Iterator;
-
-use Symfony\Component\Finder\Iterator\FileTypeFilterIterator;
-
-class FileTypeFilterIteratorTest extends RealIteratorTestCase
-{
-    /**
-     * @dataProvider getAcceptData
-     */
-    public function testAccept($mode, $expected)
-    {
-        $inner = new InnerTypeIterator(self::$files);
-
-        $iterator = new FileTypeFilterIterator($inner, $mode);
-
-        $this->assertIterator($expected, $iterator);
-    }
-
-    public function getAcceptData()
-    {
-        $onlyFiles = [
-            'test.py',
-            'foo/bar.tmp',
-            'test.php',
-            '.bar',
-            '.foo/.bar',
-            '.foo/bar',
-            'foo bar',
-        ];
-
-        $onlyDirectories = [
-            '.git',
-            'foo',
-            'toto',
-            'toto/.git',
-            '.foo',
-        ];
-
-        return [
-            [FileTypeFilterIterator::ONLY_FILES, $this->toAbsolute($onlyFiles)],
-            [FileTypeFilterIterator::ONLY_DIRECTORIES, $this->toAbsolute($onlyDirectories)],
-        ];
-    }
-}
-
-class InnerTypeIterator extends \ArrayIterator
-{
-    public function current()
-    {
-        return new \SplFileInfo(parent::current());
-    }
-
-    public function isFile()
-    {
-        return $this->current()->isFile();
-    }
-
-    public function isDir()
-    {
-        return $this->current()->isDir();
-    }
-}
diff --git a/vendor/symfony/finder/Tests/Iterator/FilecontentFilterIteratorTest.php b/vendor/symfony/finder/Tests/Iterator/FilecontentFilterIteratorTest.php
deleted file mode 100644
index f4f70c8e8c73866e65500223d0b1ab8c66a73c13..0000000000000000000000000000000000000000
--- a/vendor/symfony/finder/Tests/Iterator/FilecontentFilterIteratorTest.php
+++ /dev/null
@@ -1,86 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Finder\Tests\Iterator;
-
-use Symfony\Component\Finder\Iterator\FilecontentFilterIterator;
-
-class FilecontentFilterIteratorTest extends IteratorTestCase
-{
-    public function testAccept()
-    {
-        $inner = new MockFileListIterator(['test.txt']);
-        $iterator = new FilecontentFilterIterator($inner, [], []);
-        $this->assertIterator(['test.txt'], $iterator);
-    }
-
-    public function testDirectory()
-    {
-        $inner = new MockFileListIterator(['directory']);
-        $iterator = new FilecontentFilterIterator($inner, ['directory'], []);
-        $this->assertIterator([], $iterator);
-    }
-
-    public function testUnreadableFile()
-    {
-        $inner = new MockFileListIterator(['file r-']);
-        $iterator = new FilecontentFilterIterator($inner, ['file r-'], []);
-        $this->assertIterator([], $iterator);
-    }
-
-    /**
-     * @dataProvider getTestFilterData
-     */
-    public function testFilter(\Iterator $inner, array $matchPatterns, array $noMatchPatterns, array $resultArray)
-    {
-        $iterator = new FilecontentFilterIterator($inner, $matchPatterns, $noMatchPatterns);
-        $this->assertIterator($resultArray, $iterator);
-    }
-
-    public function getTestFilterData()
-    {
-        $inner = new MockFileListIterator();
-
-        $inner[] = new MockSplFileInfo([
-            'name' => 'a.txt',
-            'contents' => 'Lorem ipsum...',
-            'type' => 'file',
-            'mode' => 'r+', ]
-        );
-
-        $inner[] = new MockSplFileInfo([
-            'name' => 'b.yml',
-            'contents' => 'dolor sit...',
-            'type' => 'file',
-            'mode' => 'r+', ]
-        );
-
-        $inner[] = new MockSplFileInfo([
-            'name' => 'some/other/dir/third.php',
-            'contents' => 'amet...',
-            'type' => 'file',
-            'mode' => 'r+', ]
-        );
-
-        $inner[] = new MockSplFileInfo([
-            'name' => 'unreadable-file.txt',
-            'contents' => false,
-            'type' => 'file',
-            'mode' => 'r+', ]
-        );
-
-        return [
-            [$inner, ['.'], [], ['a.txt', 'b.yml', 'some/other/dir/third.php']],
-            [$inner, ['ipsum'], [], ['a.txt']],
-            [$inner, ['i', 'amet'], ['Lorem', 'amet'], ['b.yml']],
-        ];
-    }
-}
diff --git a/vendor/symfony/finder/Tests/Iterator/FilenameFilterIteratorTest.php b/vendor/symfony/finder/Tests/Iterator/FilenameFilterIteratorTest.php
deleted file mode 100644
index 9270dd1cd3a3d0e2fba5be48015baf1c14a7ce68..0000000000000000000000000000000000000000
--- a/vendor/symfony/finder/Tests/Iterator/FilenameFilterIteratorTest.php
+++ /dev/null
@@ -1,54 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Finder\Tests\Iterator;
-
-use Symfony\Component\Finder\Iterator\FilenameFilterIterator;
-
-class FilenameFilterIteratorTest extends IteratorTestCase
-{
-    /**
-     * @dataProvider getAcceptData
-     */
-    public function testAccept($matchPatterns, $noMatchPatterns, $expected)
-    {
-        $inner = new InnerNameIterator(['test.php', 'test.py', 'foo.php']);
-
-        $iterator = new FilenameFilterIterator($inner, $matchPatterns, $noMatchPatterns);
-
-        $this->assertIterator($expected, $iterator);
-    }
-
-    public function getAcceptData()
-    {
-        return [
-            [['test.*'], [], ['test.php', 'test.py']],
-            [[], ['test.*'], ['foo.php']],
-            [['*.php'], ['test.*'], ['foo.php']],
-            [['*.php', '*.py'], ['foo.*'], ['test.php', 'test.py']],
-            [['/\.php$/'], [], ['test.php', 'foo.php']],
-            [[], ['/\.php$/'], ['test.py']],
-        ];
-    }
-}
-
-class InnerNameIterator extends \ArrayIterator
-{
-    public function current()
-    {
-        return new \SplFileInfo(parent::current());
-    }
-
-    public function getFilename()
-    {
-        return parent::current();
-    }
-}
diff --git a/vendor/symfony/finder/Tests/Iterator/FilterIteratorTest.php b/vendor/symfony/finder/Tests/Iterator/FilterIteratorTest.php
deleted file mode 100644
index b26f7ba6bdd288fb873ad6b17e499043448cf951..0000000000000000000000000000000000000000
--- a/vendor/symfony/finder/Tests/Iterator/FilterIteratorTest.php
+++ /dev/null
@@ -1,53 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Finder\Tests\Iterator;
-
-/**
- * @author Alex Bogomazov
- *
- * @group legacy
- */
-class FilterIteratorTest extends RealIteratorTestCase
-{
-    public function testFilterFilesystemIterators()
-    {
-        $i = new \FilesystemIterator($this->toAbsolute());
-
-        // it is expected that there are test.py test.php in the tmpDir
-        $i = $this->getMockForAbstractClass('Symfony\Component\Finder\Iterator\FilterIterator', [$i]);
-        $i->expects($this->any())
-            ->method('accept')
-            ->will($this->returnCallback(function () use ($i) {
-                return (bool) preg_match('/\.php/', (string) $i->current());
-            })
-        );
-
-        $c = 0;
-        foreach ($i as $item) {
-            ++$c;
-        }
-
-        $this->assertEquals(1, $c);
-
-        $i->rewind();
-
-        $c = 0;
-        foreach ($i as $item) {
-            ++$c;
-        }
-
-        // This would fail in php older than 5.5.23/5.6.7 with \FilterIterator
-        // but works with Symfony\Component\Finder\Iterator\FilterIterator
-        // see https://bugs.php.net/68557
-        $this->assertEquals(1, $c);
-    }
-}
diff --git a/vendor/symfony/finder/Tests/Iterator/Iterator.php b/vendor/symfony/finder/Tests/Iterator/Iterator.php
deleted file mode 100644
index 3e21a070047aab0567a421e1380e2dfac02a894f..0000000000000000000000000000000000000000
--- a/vendor/symfony/finder/Tests/Iterator/Iterator.php
+++ /dev/null
@@ -1,55 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Finder\Tests\Iterator;
-
-class Iterator implements \Iterator
-{
-    protected $values = [];
-
-    public function __construct(array $values = [])
-    {
-        foreach ($values as $value) {
-            $this->attach(new \SplFileInfo($value));
-        }
-        $this->rewind();
-    }
-
-    public function attach(\SplFileInfo $fileinfo)
-    {
-        $this->values[] = $fileinfo;
-    }
-
-    public function rewind()
-    {
-        reset($this->values);
-    }
-
-    public function valid()
-    {
-        return false !== $this->current();
-    }
-
-    public function next()
-    {
-        next($this->values);
-    }
-
-    public function current()
-    {
-        return current($this->values);
-    }
-
-    public function key()
-    {
-        return key($this->values);
-    }
-}
diff --git a/vendor/symfony/finder/Tests/Iterator/IteratorTestCase.php b/vendor/symfony/finder/Tests/Iterator/IteratorTestCase.php
deleted file mode 100644
index 796dc6ac360bb58d91800f75e8cdccf69e8ce9bf..0000000000000000000000000000000000000000
--- a/vendor/symfony/finder/Tests/Iterator/IteratorTestCase.php
+++ /dev/null
@@ -1,100 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Finder\Tests\Iterator;
-
-use PHPUnit\Framework\TestCase;
-
-abstract class IteratorTestCase extends TestCase
-{
-    protected function assertIterator($expected, \Traversable $iterator)
-    {
-        // set iterator_to_array $use_key to false to avoid values merge
-        // this made FinderTest::testAppendWithAnArray() fail with GnuFinderAdapter
-        $values = array_map(function (\SplFileInfo $fileinfo) { return str_replace('/', \DIRECTORY_SEPARATOR, $fileinfo->getPathname()); }, iterator_to_array($iterator, false));
-
-        $expected = array_map(function ($path) { return str_replace('/', \DIRECTORY_SEPARATOR, $path); }, $expected);
-
-        sort($values);
-        sort($expected);
-
-        $this->assertEquals($expected, array_values($values));
-    }
-
-    protected function assertOrderedIterator($expected, \Traversable $iterator)
-    {
-        $values = array_map(function (\SplFileInfo $fileinfo) { return $fileinfo->getPathname(); }, iterator_to_array($iterator));
-
-        $this->assertEquals($expected, array_values($values));
-    }
-
-    /**
-     *  Same as assertOrderedIterator, but checks the order of groups of
-     *  array elements.
-     *
-     *  @param array $expected - an array of arrays. For any two subarrays
-     *      $a and $b such that $a goes before $b in $expected, the method
-     *      asserts that any element of $a goes before any element of $b
-     *      in the sequence generated by $iterator
-     *  @param \Traversable $iterator
-     */
-    protected function assertOrderedIteratorForGroups($expected, \Traversable $iterator)
-    {
-        $values = array_values(array_map(function (\SplFileInfo $fileinfo) { return $fileinfo->getPathname(); }, iterator_to_array($iterator)));
-
-        foreach ($expected as $subarray) {
-            $temp = [];
-            while (\count($values) && \count($temp) < \count($subarray)) {
-                $temp[] = array_shift($values);
-            }
-            sort($temp);
-            sort($subarray);
-            $this->assertEquals($subarray, $temp);
-        }
-    }
-
-    /**
-     * Same as IteratorTestCase::assertIterator with foreach usage.
-     *
-     * @param array        $expected
-     * @param \Traversable $iterator
-     */
-    protected function assertIteratorInForeach($expected, \Traversable $iterator)
-    {
-        $values = [];
-        foreach ($iterator as $file) {
-            $this->assertInstanceOf('Symfony\\Component\\Finder\\SplFileInfo', $file);
-            $values[] = $file->getPathname();
-        }
-
-        sort($values);
-        sort($expected);
-
-        $this->assertEquals($expected, array_values($values));
-    }
-
-    /**
-     * Same as IteratorTestCase::assertOrderedIterator with foreach usage.
-     *
-     * @param array        $expected
-     * @param \Traversable $iterator
-     */
-    protected function assertOrderedIteratorInForeach($expected, \Traversable $iterator)
-    {
-        $values = [];
-        foreach ($iterator as $file) {
-            $this->assertInstanceOf('Symfony\\Component\\Finder\\SplFileInfo', $file);
-            $values[] = $file->getPathname();
-        }
-
-        $this->assertEquals($expected, array_values($values));
-    }
-}
diff --git a/vendor/symfony/finder/Tests/Iterator/MockFileListIterator.php b/vendor/symfony/finder/Tests/Iterator/MockFileListIterator.php
deleted file mode 100644
index 670478d7a7524af88a68671de1ad82093e6ca127..0000000000000000000000000000000000000000
--- a/vendor/symfony/finder/Tests/Iterator/MockFileListIterator.php
+++ /dev/null
@@ -1,21 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Finder\Tests\Iterator;
-
-class MockFileListIterator extends \ArrayIterator
-{
-    public function __construct(array $filesArray = [])
-    {
-        $files = array_map(function ($file) { return new MockSplFileInfo($file); }, $filesArray);
-        parent::__construct($files);
-    }
-}
diff --git a/vendor/symfony/finder/Tests/Iterator/MockSplFileInfo.php b/vendor/symfony/finder/Tests/Iterator/MockSplFileInfo.php
deleted file mode 100644
index 58bb5979e97a399edba4b63f2bfcd95001d0a698..0000000000000000000000000000000000000000
--- a/vendor/symfony/finder/Tests/Iterator/MockSplFileInfo.php
+++ /dev/null
@@ -1,132 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Finder\Tests\Iterator;
-
-class MockSplFileInfo extends \SplFileInfo
-{
-    const TYPE_DIRECTORY = 1;
-    const TYPE_FILE = 2;
-    const TYPE_UNKNOWN = 3;
-
-    private $contents = null;
-    private $mode = null;
-    private $type = null;
-    private $relativePath = null;
-    private $relativePathname = null;
-
-    public function __construct($param)
-    {
-        if (\is_string($param)) {
-            parent::__construct($param);
-        } elseif (\is_array($param)) {
-            $defaults = [
-                'name' => 'file.txt',
-                'contents' => null,
-                'mode' => null,
-                'type' => null,
-                'relativePath' => null,
-                'relativePathname' => null,
-            ];
-            $defaults = array_merge($defaults, $param);
-            parent::__construct($defaults['name']);
-            $this->setContents($defaults['contents']);
-            $this->setMode($defaults['mode']);
-            $this->setType($defaults['type']);
-            $this->setRelativePath($defaults['relativePath']);
-            $this->setRelativePathname($defaults['relativePathname']);
-        } else {
-            throw new \RuntimeException(sprintf('Incorrect parameter "%s"', $param));
-        }
-    }
-
-    public function isFile()
-    {
-        if (null === $this->type) {
-            return false !== strpos($this->getFilename(), 'file');
-        }
-
-        return self::TYPE_FILE === $this->type;
-    }
-
-    public function isDir()
-    {
-        if (null === $this->type) {
-            return false !== strpos($this->getFilename(), 'directory');
-        }
-
-        return self::TYPE_DIRECTORY === $this->type;
-    }
-
-    public function isReadable()
-    {
-        if (null === $this->mode) {
-            return preg_match('/r\+/', $this->getFilename());
-        }
-
-        return preg_match('/r\+/', $this->mode);
-    }
-
-    public function getContents()
-    {
-        return $this->contents;
-    }
-
-    public function setContents($contents)
-    {
-        $this->contents = $contents;
-    }
-
-    public function setMode($mode)
-    {
-        $this->mode = $mode;
-    }
-
-    public function setType($type)
-    {
-        if (\is_string($type)) {
-            switch ($type) {
-                case 'directory':
-                case 'd':
-                    $this->type = self::TYPE_DIRECTORY;
-                    break;
-                case 'file':
-                case 'f':
-                    $this->type = self::TYPE_FILE;
-                    break;
-                default:
-                    $this->type = self::TYPE_UNKNOWN;
-            }
-        } else {
-            $this->type = $type;
-        }
-    }
-
-    public function setRelativePath($relativePath)
-    {
-        $this->relativePath = $relativePath;
-    }
-
-    public function setRelativePathname($relativePathname)
-    {
-        $this->relativePathname = $relativePathname;
-    }
-
-    public function getRelativePath()
-    {
-        return $this->relativePath;
-    }
-
-    public function getRelativePathname()
-    {
-        return $this->relativePathname;
-    }
-}
diff --git a/vendor/symfony/finder/Tests/Iterator/MultiplePcreFilterIteratorTest.php b/vendor/symfony/finder/Tests/Iterator/MultiplePcreFilterIteratorTest.php
deleted file mode 100644
index 955677695ba0dcf7b7b218cf9d8e15459d114a34..0000000000000000000000000000000000000000
--- a/vendor/symfony/finder/Tests/Iterator/MultiplePcreFilterIteratorTest.php
+++ /dev/null
@@ -1,71 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Finder\Tests\Iterator;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Component\Finder\Iterator\MultiplePcreFilterIterator;
-
-class MultiplePcreFilterIteratorTest extends TestCase
-{
-    /**
-     * @dataProvider getIsRegexFixtures
-     */
-    public function testIsRegex($string, $isRegex, $message)
-    {
-        $testIterator = new TestMultiplePcreFilterIterator();
-        $this->assertEquals($isRegex, $testIterator->isRegex($string), $message);
-    }
-
-    public function getIsRegexFixtures()
-    {
-        return [
-            ['foo', false, 'string'],
-            [' foo ', false, '" " is not a valid delimiter'],
-            ['\\foo\\', false, '"\\" is not a valid delimiter'],
-            ['afooa', false, '"a" is not a valid delimiter'],
-            ['//', false, 'the pattern should contain at least 1 character'],
-            ['/a/', true, 'valid regex'],
-            ['/foo/', true, 'valid regex'],
-            ['/foo/i', true, 'valid regex with a single modifier'],
-            ['/foo/imsxu', true, 'valid regex with multiple modifiers'],
-            ['#foo#', true, '"#" is a valid delimiter'],
-            ['{foo}', true, '"{,}" is a valid delimiter pair'],
-            ['[foo]', true, '"[,]" is a valid delimiter pair'],
-            ['(foo)', true, '"(,)" is a valid delimiter pair'],
-            ['<foo>', true, '"<,>" is a valid delimiter pair'],
-            ['*foo.*', false, '"*" is not considered as a valid delimiter'],
-            ['?foo.?', false, '"?" is not considered as a valid delimiter'],
-        ];
-    }
-}
-
-class TestMultiplePcreFilterIterator extends MultiplePcreFilterIterator
-{
-    public function __construct()
-    {
-    }
-
-    public function accept()
-    {
-        throw new \BadFunctionCallException('Not implemented');
-    }
-
-    public function isRegex($str)
-    {
-        return parent::isRegex($str);
-    }
-
-    public function toRegex($str)
-    {
-        throw new \BadFunctionCallException('Not implemented');
-    }
-}
diff --git a/vendor/symfony/finder/Tests/Iterator/PathFilterIteratorTest.php b/vendor/symfony/finder/Tests/Iterator/PathFilterIteratorTest.php
deleted file mode 100644
index 9040ee04c3c7a936f266d22c7a85f2b3ef355e8c..0000000000000000000000000000000000000000
--- a/vendor/symfony/finder/Tests/Iterator/PathFilterIteratorTest.php
+++ /dev/null
@@ -1,82 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Finder\Tests\Iterator;
-
-use Symfony\Component\Finder\Iterator\PathFilterIterator;
-
-class PathFilterIteratorTest extends IteratorTestCase
-{
-    /**
-     * @dataProvider getTestFilterData
-     */
-    public function testFilter(\Iterator $inner, array $matchPatterns, array $noMatchPatterns, array $resultArray)
-    {
-        $iterator = new PathFilterIterator($inner, $matchPatterns, $noMatchPatterns);
-        $this->assertIterator($resultArray, $iterator);
-    }
-
-    public function getTestFilterData()
-    {
-        $inner = new MockFileListIterator();
-
-        //PATH:   A/B/C/abc.dat
-        $inner[] = new MockSplFileInfo([
-            'name' => 'abc.dat',
-            'relativePathname' => 'A'.\DIRECTORY_SEPARATOR.'B'.\DIRECTORY_SEPARATOR.'C'.\DIRECTORY_SEPARATOR.'abc.dat',
-        ]);
-
-        //PATH:   A/B/ab.dat
-        $inner[] = new MockSplFileInfo([
-            'name' => 'ab.dat',
-            'relativePathname' => 'A'.\DIRECTORY_SEPARATOR.'B'.\DIRECTORY_SEPARATOR.'ab.dat',
-        ]);
-
-        //PATH:   A/a.dat
-        $inner[] = new MockSplFileInfo([
-            'name' => 'a.dat',
-            'relativePathname' => 'A'.\DIRECTORY_SEPARATOR.'a.dat',
-        ]);
-
-        //PATH:   copy/A/B/C/abc.dat.copy
-        $inner[] = new MockSplFileInfo([
-            'name' => 'abc.dat.copy',
-            'relativePathname' => 'copy'.\DIRECTORY_SEPARATOR.'A'.\DIRECTORY_SEPARATOR.'B'.\DIRECTORY_SEPARATOR.'C'.\DIRECTORY_SEPARATOR.'abc.dat',
-        ]);
-
-        //PATH:   copy/A/B/ab.dat.copy
-        $inner[] = new MockSplFileInfo([
-            'name' => 'ab.dat.copy',
-            'relativePathname' => 'copy'.\DIRECTORY_SEPARATOR.'A'.\DIRECTORY_SEPARATOR.'B'.\DIRECTORY_SEPARATOR.'ab.dat',
-        ]);
-
-        //PATH:   copy/A/a.dat.copy
-        $inner[] = new MockSplFileInfo([
-            'name' => 'a.dat.copy',
-            'relativePathname' => 'copy'.\DIRECTORY_SEPARATOR.'A'.\DIRECTORY_SEPARATOR.'a.dat',
-        ]);
-
-        return [
-            [$inner, ['/^A/'],       [], ['abc.dat', 'ab.dat', 'a.dat']],
-            [$inner, ['/^A\/B/'],    [], ['abc.dat', 'ab.dat']],
-            [$inner, ['/^A\/B\/C/'], [], ['abc.dat']],
-            [$inner, ['/A\/B\/C/'], [], ['abc.dat', 'abc.dat.copy']],
-
-            [$inner, ['A'],      [], ['abc.dat', 'ab.dat', 'a.dat', 'abc.dat.copy', 'ab.dat.copy', 'a.dat.copy']],
-            [$inner, ['A/B'],    [], ['abc.dat', 'ab.dat', 'abc.dat.copy', 'ab.dat.copy']],
-            [$inner, ['A/B/C'], [], ['abc.dat', 'abc.dat.copy']],
-
-            [$inner, ['copy/A'],      [], ['abc.dat.copy', 'ab.dat.copy', 'a.dat.copy']],
-            [$inner, ['copy/A/B'],    [], ['abc.dat.copy', 'ab.dat.copy']],
-            [$inner, ['copy/A/B/C'], [], ['abc.dat.copy']],
-        ];
-    }
-}
diff --git a/vendor/symfony/finder/Tests/Iterator/RealIteratorTestCase.php b/vendor/symfony/finder/Tests/Iterator/RealIteratorTestCase.php
deleted file mode 100644
index 70048a5ea69826e316e1a431e6b0b8f7a96470f3..0000000000000000000000000000000000000000
--- a/vendor/symfony/finder/Tests/Iterator/RealIteratorTestCase.php
+++ /dev/null
@@ -1,119 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Finder\Tests\Iterator;
-
-abstract class RealIteratorTestCase extends IteratorTestCase
-{
-    protected static $tmpDir;
-    protected static $files;
-
-    public static function setUpBeforeClass()
-    {
-        self::$tmpDir = realpath(sys_get_temp_dir()).\DIRECTORY_SEPARATOR.'symfony_finder';
-
-        self::$files = [
-            '.git/',
-            '.foo/',
-            '.foo/.bar',
-            '.foo/bar',
-            '.bar',
-            'test.py',
-            'foo/',
-            'foo/bar.tmp',
-            'test.php',
-            'toto/',
-            'toto/.git/',
-            'foo bar',
-        ];
-
-        self::$files = self::toAbsolute(self::$files);
-
-        if (is_dir(self::$tmpDir)) {
-            self::tearDownAfterClass();
-        } else {
-            mkdir(self::$tmpDir);
-        }
-
-        foreach (self::$files as $file) {
-            if (\DIRECTORY_SEPARATOR === $file[\strlen($file) - 1]) {
-                mkdir($file);
-            } else {
-                touch($file);
-            }
-        }
-
-        file_put_contents(self::toAbsolute('test.php'), str_repeat(' ', 800));
-        file_put_contents(self::toAbsolute('test.py'), str_repeat(' ', 2000));
-
-        touch(self::toAbsolute('foo/bar.tmp'), strtotime('2005-10-15'));
-        touch(self::toAbsolute('test.php'), strtotime('2005-10-15'));
-    }
-
-    public static function tearDownAfterClass()
-    {
-        $paths = new \RecursiveIteratorIterator(
-             new \RecursiveDirectoryIterator(self::$tmpDir, \RecursiveDirectoryIterator::SKIP_DOTS),
-             \RecursiveIteratorIterator::CHILD_FIRST
-         );
-
-        foreach ($paths as $path) {
-            if ($path->isDir()) {
-                if ($path->isLink()) {
-                    @unlink($path);
-                } else {
-                    @rmdir($path);
-                }
-            } else {
-                @unlink($path);
-            }
-        }
-    }
-
-    protected static function toAbsolute($files = null)
-    {
-        /*
-         * Without the call to setUpBeforeClass() property can be null.
-         */
-        if (!self::$tmpDir) {
-            self::$tmpDir = realpath(sys_get_temp_dir()).\DIRECTORY_SEPARATOR.'symfony_finder';
-        }
-
-        if (\is_array($files)) {
-            $f = [];
-            foreach ($files as $file) {
-                if (\is_array($file)) {
-                    $f[] = self::toAbsolute($file);
-                } else {
-                    $f[] = self::$tmpDir.\DIRECTORY_SEPARATOR.str_replace('/', \DIRECTORY_SEPARATOR, $file);
-                }
-            }
-
-            return $f;
-        }
-
-        if (\is_string($files)) {
-            return self::$tmpDir.\DIRECTORY_SEPARATOR.str_replace('/', \DIRECTORY_SEPARATOR, $files);
-        }
-
-        return self::$tmpDir;
-    }
-
-    protected static function toAbsoluteFixtures($files)
-    {
-        $f = [];
-        foreach ($files as $file) {
-            $f[] = realpath(__DIR__.\DIRECTORY_SEPARATOR.'..'.\DIRECTORY_SEPARATOR.'Fixtures'.\DIRECTORY_SEPARATOR.$file);
-        }
-
-        return $f;
-    }
-}
diff --git a/vendor/symfony/finder/Tests/Iterator/RecursiveDirectoryIteratorTest.php b/vendor/symfony/finder/Tests/Iterator/RecursiveDirectoryIteratorTest.php
deleted file mode 100644
index 037810aea799fd930656bb8e839c184d6a784c88..0000000000000000000000000000000000000000
--- a/vendor/symfony/finder/Tests/Iterator/RecursiveDirectoryIteratorTest.php
+++ /dev/null
@@ -1,59 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Finder\Tests\Iterator;
-
-use Symfony\Component\Finder\Iterator\RecursiveDirectoryIterator;
-
-class RecursiveDirectoryIteratorTest extends IteratorTestCase
-{
-    /**
-     * @group network
-     */
-    public function testRewindOnFtp()
-    {
-        try {
-            $i = new RecursiveDirectoryIterator('ftp://speedtest.tele2.net/', \RecursiveDirectoryIterator::SKIP_DOTS);
-        } catch (\UnexpectedValueException $e) {
-            $this->markTestSkipped('Unsupported stream "ftp".');
-        }
-
-        $i->rewind();
-
-        $this->assertTrue(true);
-    }
-
-    /**
-     * @group network
-     */
-    public function testSeekOnFtp()
-    {
-        try {
-            $i = new RecursiveDirectoryIterator('ftp://speedtest.tele2.net/', \RecursiveDirectoryIterator::SKIP_DOTS);
-        } catch (\UnexpectedValueException $e) {
-            $this->markTestSkipped('Unsupported stream "ftp".');
-        }
-
-        $contains = [
-            'ftp://speedtest.tele2.net'.\DIRECTORY_SEPARATOR.'1000GB.zip',
-            'ftp://speedtest.tele2.net'.\DIRECTORY_SEPARATOR.'100GB.zip',
-        ];
-        $actual = [];
-
-        $i->seek(0);
-        $actual[] = $i->getPathname();
-
-        $i->seek(1);
-        $actual[] = $i->getPathname();
-
-        $this->assertEquals($contains, $actual);
-    }
-}
diff --git a/vendor/symfony/finder/Tests/Iterator/SizeRangeFilterIteratorTest.php b/vendor/symfony/finder/Tests/Iterator/SizeRangeFilterIteratorTest.php
deleted file mode 100644
index b1e431ba52f558f3f8c52049866dc9d1713a539c..0000000000000000000000000000000000000000
--- a/vendor/symfony/finder/Tests/Iterator/SizeRangeFilterIteratorTest.php
+++ /dev/null
@@ -1,69 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Finder\Tests\Iterator;
-
-use Symfony\Component\Finder\Comparator\NumberComparator;
-use Symfony\Component\Finder\Iterator\SizeRangeFilterIterator;
-
-class SizeRangeFilterIteratorTest extends RealIteratorTestCase
-{
-    /**
-     * @dataProvider getAcceptData
-     */
-    public function testAccept($size, $expected)
-    {
-        $inner = new InnerSizeIterator(self::$files);
-
-        $iterator = new SizeRangeFilterIterator($inner, $size);
-
-        $this->assertIterator($expected, $iterator);
-    }
-
-    public function getAcceptData()
-    {
-        $lessThan1KGreaterThan05K = [
-            '.foo',
-            '.git',
-            'foo',
-            'test.php',
-            'toto',
-            'toto/.git',
-        ];
-
-        return [
-            [[new NumberComparator('< 1K'), new NumberComparator('> 0.5K')], $this->toAbsolute($lessThan1KGreaterThan05K)],
-        ];
-    }
-}
-
-class InnerSizeIterator extends \ArrayIterator
-{
-    public function current()
-    {
-        return new \SplFileInfo(parent::current());
-    }
-
-    public function getFilename()
-    {
-        return parent::current();
-    }
-
-    public function isFile()
-    {
-        return $this->current()->isFile();
-    }
-
-    public function getSize()
-    {
-        return $this->current()->getSize();
-    }
-}
diff --git a/vendor/symfony/finder/Tests/Iterator/SortableIteratorTest.php b/vendor/symfony/finder/Tests/Iterator/SortableIteratorTest.php
deleted file mode 100644
index 57f1e096a5334c1586fd1d74d10b06188cc5d024..0000000000000000000000000000000000000000
--- a/vendor/symfony/finder/Tests/Iterator/SortableIteratorTest.php
+++ /dev/null
@@ -1,183 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Finder\Tests\Iterator;
-
-use Symfony\Component\Finder\Iterator\SortableIterator;
-
-class SortableIteratorTest extends RealIteratorTestCase
-{
-    public function testConstructor()
-    {
-        try {
-            new SortableIterator(new Iterator([]), 'foobar');
-            $this->fail('__construct() throws an \InvalidArgumentException exception if the mode is not valid');
-        } catch (\Exception $e) {
-            $this->assertInstanceOf('InvalidArgumentException', $e, '__construct() throws an \InvalidArgumentException exception if the mode is not valid');
-        }
-    }
-
-    /**
-     * @dataProvider getAcceptData
-     */
-    public function testAccept($mode, $expected)
-    {
-        if (!\is_callable($mode)) {
-            switch ($mode) {
-                case SortableIterator::SORT_BY_ACCESSED_TIME:
-                    if ('\\' === \DIRECTORY_SEPARATOR) {
-                        touch(self::toAbsolute('.git'));
-                    } else {
-                        file_get_contents(self::toAbsolute('.git'));
-                    }
-                    sleep(1);
-                    file_get_contents(self::toAbsolute('.bar'));
-                    break;
-                case SortableIterator::SORT_BY_CHANGED_TIME:
-                    file_put_contents(self::toAbsolute('test.php'), 'foo');
-                    sleep(1);
-                    file_put_contents(self::toAbsolute('test.py'), 'foo');
-                    break;
-                case SortableIterator::SORT_BY_MODIFIED_TIME:
-                    file_put_contents(self::toAbsolute('test.php'), 'foo');
-                    sleep(1);
-                    file_put_contents(self::toAbsolute('test.py'), 'foo');
-                    break;
-            }
-        }
-
-        $inner = new Iterator(self::$files);
-
-        $iterator = new SortableIterator($inner, $mode);
-
-        if (SortableIterator::SORT_BY_ACCESSED_TIME === $mode
-            || SortableIterator::SORT_BY_CHANGED_TIME === $mode
-            || SortableIterator::SORT_BY_MODIFIED_TIME === $mode
-        ) {
-            if ('\\' === \DIRECTORY_SEPARATOR && SortableIterator::SORT_BY_MODIFIED_TIME !== $mode) {
-                $this->markTestSkipped('Sorting by atime or ctime is not supported on Windows');
-            }
-            $this->assertOrderedIteratorForGroups($expected, $iterator);
-        } else {
-            $this->assertOrderedIterator($expected, $iterator);
-        }
-    }
-
-    public function getAcceptData()
-    {
-        $sortByName = [
-            '.bar',
-            '.foo',
-            '.foo/.bar',
-            '.foo/bar',
-            '.git',
-            'foo',
-            'foo bar',
-            'foo/bar.tmp',
-            'test.php',
-            'test.py',
-            'toto',
-            'toto/.git',
-        ];
-
-        $sortByType = [
-            '.foo',
-            '.git',
-            'foo',
-            'toto',
-            'toto/.git',
-            '.bar',
-            '.foo/.bar',
-            '.foo/bar',
-            'foo bar',
-            'foo/bar.tmp',
-            'test.php',
-            'test.py',
-        ];
-
-        $customComparison = [
-            '.bar',
-            '.foo',
-            '.foo/.bar',
-            '.foo/bar',
-            '.git',
-            'foo',
-            'foo bar',
-            'foo/bar.tmp',
-            'test.php',
-            'test.py',
-            'toto',
-            'toto/.git',
-        ];
-
-        $sortByAccessedTime = [
-            // For these two files the access time was set to 2005-10-15
-            ['foo/bar.tmp', 'test.php'],
-            // These files were created more or less at the same time
-            [
-                '.git',
-                '.foo',
-                '.foo/.bar',
-                '.foo/bar',
-                'test.py',
-                'foo',
-                'toto',
-                'toto/.git',
-                'foo bar',
-            ],
-            // This file was accessed after sleeping for 1 sec
-            ['.bar'],
-        ];
-
-        $sortByChangedTime = [
-            [
-                '.git',
-                '.foo',
-                '.foo/.bar',
-                '.foo/bar',
-                '.bar',
-                'foo',
-                'foo/bar.tmp',
-                'toto',
-                'toto/.git',
-                'foo bar',
-            ],
-            ['test.php'],
-            ['test.py'],
-        ];
-
-        $sortByModifiedTime = [
-            [
-                '.git',
-                '.foo',
-                '.foo/.bar',
-                '.foo/bar',
-                '.bar',
-                'foo',
-                'foo/bar.tmp',
-                'toto',
-                'toto/.git',
-                'foo bar',
-            ],
-            ['test.php'],
-            ['test.py'],
-        ];
-
-        return [
-            [SortableIterator::SORT_BY_NAME, $this->toAbsolute($sortByName)],
-            [SortableIterator::SORT_BY_TYPE, $this->toAbsolute($sortByType)],
-            [SortableIterator::SORT_BY_ACCESSED_TIME, $this->toAbsolute($sortByAccessedTime)],
-            [SortableIterator::SORT_BY_CHANGED_TIME, $this->toAbsolute($sortByChangedTime)],
-            [SortableIterator::SORT_BY_MODIFIED_TIME, $this->toAbsolute($sortByModifiedTime)],
-            [function (\SplFileInfo $a, \SplFileInfo $b) { return strcmp($a->getRealPath(), $b->getRealPath()); }, $this->toAbsolute($customComparison)],
-        ];
-    }
-}
diff --git a/vendor/symfony/finder/composer.json b/vendor/symfony/finder/composer.json
index de19826f73b311cb2add5e53faa1f62c615d82c4..7a696aa7fe6451321f8ff3ff58b8a2d30596a28d 100644
--- a/vendor/symfony/finder/composer.json
+++ b/vendor/symfony/finder/composer.json
@@ -16,7 +16,7 @@
         }
     ],
     "require": {
-        "php": "^5.5.9|>=7.0.8"
+        "php": ">=7.1.3"
     },
     "autoload": {
         "psr-4": { "Symfony\\Component\\Finder\\": "" },
@@ -24,10 +24,5 @@
             "/Tests/"
         ]
     },
-    "minimum-stability": "dev",
-    "extra": {
-        "branch-alias": {
-            "dev-master": "3.4-dev"
-        }
-    }
+    "minimum-stability": "dev"
 }
diff --git a/vendor/symfony/finder/phpunit.xml.dist b/vendor/symfony/finder/phpunit.xml.dist
deleted file mode 100644
index 078847af96add0b0afa41c11b0ac06144d0bfc82..0000000000000000000000000000000000000000
--- a/vendor/symfony/finder/phpunit.xml.dist
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/5.2/phpunit.xsd"
-         backupGlobals="false"
-         colors="true"
-         bootstrap="vendor/autoload.php"
-         failOnRisky="true"
-         failOnWarning="true"
->
-    <php>
-        <ini name="error_reporting" value="-1" />
-    </php>
-
-    <testsuites>
-        <testsuite name="Symfony Finder Component Test Suite">
-            <directory>./Tests/</directory>
-        </testsuite>
-    </testsuites>
-
-    <filter>
-        <whitelist>
-            <directory>./</directory>
-            <exclude>
-                <directory>./Tests</directory>
-                <directory>./vendor</directory>
-            </exclude>
-        </whitelist>
-    </filter>
-</phpunit>
diff --git a/vendor/symfony/var-dumper/Caster/AmqpCaster.php b/vendor/symfony/var-dumper/Caster/AmqpCaster.php
index 19bdc29525eab53212bb4cc27d5105b3ae036454..dc7a6414fca27e1ae9bef81d836917a128c67a8b 100644
--- a/vendor/symfony/var-dumper/Caster/AmqpCaster.php
+++ b/vendor/symfony/var-dumper/Caster/AmqpCaster.php
@@ -21,27 +21,27 @@
 class AmqpCaster
 {
     private static $flags = [
-        AMQP_DURABLE => 'AMQP_DURABLE',
-        AMQP_PASSIVE => 'AMQP_PASSIVE',
-        AMQP_EXCLUSIVE => 'AMQP_EXCLUSIVE',
-        AMQP_AUTODELETE => 'AMQP_AUTODELETE',
-        AMQP_INTERNAL => 'AMQP_INTERNAL',
-        AMQP_NOLOCAL => 'AMQP_NOLOCAL',
-        AMQP_AUTOACK => 'AMQP_AUTOACK',
-        AMQP_IFEMPTY => 'AMQP_IFEMPTY',
-        AMQP_IFUNUSED => 'AMQP_IFUNUSED',
-        AMQP_MANDATORY => 'AMQP_MANDATORY',
-        AMQP_IMMEDIATE => 'AMQP_IMMEDIATE',
-        AMQP_MULTIPLE => 'AMQP_MULTIPLE',
-        AMQP_NOWAIT => 'AMQP_NOWAIT',
-        AMQP_REQUEUE => 'AMQP_REQUEUE',
+        \AMQP_DURABLE => 'AMQP_DURABLE',
+        \AMQP_PASSIVE => 'AMQP_PASSIVE',
+        \AMQP_EXCLUSIVE => 'AMQP_EXCLUSIVE',
+        \AMQP_AUTODELETE => 'AMQP_AUTODELETE',
+        \AMQP_INTERNAL => 'AMQP_INTERNAL',
+        \AMQP_NOLOCAL => 'AMQP_NOLOCAL',
+        \AMQP_AUTOACK => 'AMQP_AUTOACK',
+        \AMQP_IFEMPTY => 'AMQP_IFEMPTY',
+        \AMQP_IFUNUSED => 'AMQP_IFUNUSED',
+        \AMQP_MANDATORY => 'AMQP_MANDATORY',
+        \AMQP_IMMEDIATE => 'AMQP_IMMEDIATE',
+        \AMQP_MULTIPLE => 'AMQP_MULTIPLE',
+        \AMQP_NOWAIT => 'AMQP_NOWAIT',
+        \AMQP_REQUEUE => 'AMQP_REQUEUE',
     ];
 
     private static $exchangeTypes = [
-        AMQP_EX_TYPE_DIRECT => 'AMQP_EX_TYPE_DIRECT',
-        AMQP_EX_TYPE_FANOUT => 'AMQP_EX_TYPE_FANOUT',
-        AMQP_EX_TYPE_TOPIC => 'AMQP_EX_TYPE_TOPIC',
-        AMQP_EX_TYPE_HEADERS => 'AMQP_EX_TYPE_HEADERS',
+        \AMQP_EX_TYPE_DIRECT => 'AMQP_EX_TYPE_DIRECT',
+        \AMQP_EX_TYPE_FANOUT => 'AMQP_EX_TYPE_FANOUT',
+        \AMQP_EX_TYPE_TOPIC => 'AMQP_EX_TYPE_TOPIC',
+        \AMQP_EX_TYPE_HEADERS => 'AMQP_EX_TYPE_HEADERS',
     ];
 
     public static function castConnection(\AMQPConnection $c, array $a, Stub $stub, $isNested)
diff --git a/vendor/symfony/var-dumper/Caster/Caster.php b/vendor/symfony/var-dumper/Caster/Caster.php
index 93d0ce2b41b73435ad62c6547e209f03e6dc77e0..a6ebc25bddd1ff1c5f84160043c5d1d05a347a30 100644
--- a/vendor/symfony/var-dumper/Caster/Caster.php
+++ b/vendor/symfony/var-dumper/Caster/Caster.php
@@ -46,41 +46,57 @@ class Caster
      *
      * @return array The array-cast of the object, with prefixed dynamic properties
      */
-    public static function castObject($obj, $class, $hasDebugInfo = false)
+    public static function castObject($obj, $class, $hasDebugInfo = false, $debugClass = null)
     {
         if ($class instanceof \ReflectionClass) {
-            @trigger_error(sprintf('Passing a ReflectionClass to "%s()" is deprecated since Symfony 3.3 and will be unsupported in 4.0. Pass the class name as string instead.', __METHOD__), E_USER_DEPRECATED);
+            @trigger_error(sprintf('Passing a ReflectionClass to "%s()" is deprecated since Symfony 3.3 and will be unsupported in 4.0. Pass the class name as string instead.', __METHOD__), \E_USER_DEPRECATED);
             $hasDebugInfo = $class->hasMethod('__debugInfo');
             $class = $class->name;
         }
+
         if ($hasDebugInfo) {
-            $a = $obj->__debugInfo();
-        } elseif ($obj instanceof \Closure) {
-            $a = [];
-        } else {
-            $a = (array) $obj;
+            try {
+                $debugInfo = $obj->__debugInfo();
+            } catch (\Exception $e) {
+                // ignore failing __debugInfo()
+                $hasDebugInfo = false;
+            }
         }
+
+        $a = $obj instanceof \Closure ? [] : (array) $obj;
+
         if ($obj instanceof \__PHP_Incomplete_Class) {
             return $a;
         }
 
         if ($a) {
             static $publicProperties = [];
+            if (null === $debugClass) {
+                if (\PHP_VERSION_ID >= 80000) {
+                    $debugClass = get_debug_type($obj);
+                } else {
+                    $debugClass = $class;
+
+                    if (isset($debugClass[15]) && "\0" === $debugClass[15]) {
+                        $debugClass = (get_parent_class($debugClass) ?: key(class_implements($debugClass)) ?: 'class').'@anonymous';
+                    }
+                }
+            }
 
             $i = 0;
             $prefixedKeys = [];
             foreach ($a as $k => $v) {
                 if (isset($k[0]) ? "\0" !== $k[0] : \PHP_VERSION_ID >= 70200) {
                     if (!isset($publicProperties[$class])) {
-                        foreach (get_class_vars($class) as $prop => $v) {
-                            $publicProperties[$class][$prop] = true;
+                        foreach ((new \ReflectionClass($class))->getProperties(\ReflectionProperty::IS_PUBLIC) as $prop) {
+                            $publicProperties[$class][$prop->name] = true;
                         }
                     }
                     if (!isset($publicProperties[$class][$k])) {
                         $prefixedKeys[$i] = self::PREFIX_DYNAMIC.$k;
                     }
-                } elseif (isset($k[16]) && "\0" === $k[16] && 0 === strpos($k, "\0class@anonymous\0")) {
-                    $prefixedKeys[$i] = "\0".get_parent_class($class).'@anonymous'.strrchr($k, "\0");
+                } elseif ($debugClass !== $class && 1 === strpos($k, $class)) {
+                    $prefixedKeys[$i] = "\0".$debugClass.strrchr($k, "\0");
                 }
                 ++$i;
             }
@@ -93,6 +109,20 @@ public static function castObject($obj, $class, $hasDebugInfo = false)
             }
         }
 
+        if ($hasDebugInfo && \is_array($debugInfo)) {
+            foreach ($debugInfo as $k => $v) {
+                if (!isset($k[0]) || "\0" !== $k[0]) {
+                    if (\array_key_exists(self::PREFIX_DYNAMIC.$k, $a)) {
+                        continue;
+                    }
+                    $k = self::PREFIX_VIRTUAL.$k;
+                }
+
+                unset($a[$k]);
+                $a[$k] = $v;
+            }
+        }
+
         return $a;
     }
 
diff --git a/vendor/symfony/var-dumper/Caster/DOMCaster.php b/vendor/symfony/var-dumper/Caster/DOMCaster.php
index 65151b4f4ff7498134366d0704400891adb50b34..fef3d432a7cdd07eb8c6781491831734f2879296 100644
--- a/vendor/symfony/var-dumper/Caster/DOMCaster.php
+++ b/vendor/symfony/var-dumper/Caster/DOMCaster.php
@@ -21,44 +21,44 @@
 class DOMCaster
 {
     private static $errorCodes = [
-        DOM_PHP_ERR => 'DOM_PHP_ERR',
-        DOM_INDEX_SIZE_ERR => 'DOM_INDEX_SIZE_ERR',
-        DOMSTRING_SIZE_ERR => 'DOMSTRING_SIZE_ERR',
-        DOM_HIERARCHY_REQUEST_ERR => 'DOM_HIERARCHY_REQUEST_ERR',
-        DOM_WRONG_DOCUMENT_ERR => 'DOM_WRONG_DOCUMENT_ERR',
-        DOM_INVALID_CHARACTER_ERR => 'DOM_INVALID_CHARACTER_ERR',
-        DOM_NO_DATA_ALLOWED_ERR => 'DOM_NO_DATA_ALLOWED_ERR',
-        DOM_NO_MODIFICATION_ALLOWED_ERR => 'DOM_NO_MODIFICATION_ALLOWED_ERR',
-        DOM_NOT_FOUND_ERR => 'DOM_NOT_FOUND_ERR',
-        DOM_NOT_SUPPORTED_ERR => 'DOM_NOT_SUPPORTED_ERR',
-        DOM_INUSE_ATTRIBUTE_ERR => 'DOM_INUSE_ATTRIBUTE_ERR',
-        DOM_INVALID_STATE_ERR => 'DOM_INVALID_STATE_ERR',
-        DOM_SYNTAX_ERR => 'DOM_SYNTAX_ERR',
-        DOM_INVALID_MODIFICATION_ERR => 'DOM_INVALID_MODIFICATION_ERR',
-        DOM_NAMESPACE_ERR => 'DOM_NAMESPACE_ERR',
-        DOM_INVALID_ACCESS_ERR => 'DOM_INVALID_ACCESS_ERR',
-        DOM_VALIDATION_ERR => 'DOM_VALIDATION_ERR',
+        \DOM_PHP_ERR => 'DOM_PHP_ERR',
+        \DOM_INDEX_SIZE_ERR => 'DOM_INDEX_SIZE_ERR',
+        \DOMSTRING_SIZE_ERR => 'DOMSTRING_SIZE_ERR',
+        \DOM_HIERARCHY_REQUEST_ERR => 'DOM_HIERARCHY_REQUEST_ERR',
+        \DOM_WRONG_DOCUMENT_ERR => 'DOM_WRONG_DOCUMENT_ERR',
+        \DOM_INVALID_CHARACTER_ERR => 'DOM_INVALID_CHARACTER_ERR',
+        \DOM_NO_DATA_ALLOWED_ERR => 'DOM_NO_DATA_ALLOWED_ERR',
+        \DOM_NO_MODIFICATION_ALLOWED_ERR => 'DOM_NO_MODIFICATION_ALLOWED_ERR',
+        \DOM_NOT_FOUND_ERR => 'DOM_NOT_FOUND_ERR',
+        \DOM_NOT_SUPPORTED_ERR => 'DOM_NOT_SUPPORTED_ERR',
+        \DOM_INUSE_ATTRIBUTE_ERR => 'DOM_INUSE_ATTRIBUTE_ERR',
+        \DOM_INVALID_STATE_ERR => 'DOM_INVALID_STATE_ERR',
+        \DOM_SYNTAX_ERR => 'DOM_SYNTAX_ERR',
+        \DOM_INVALID_MODIFICATION_ERR => 'DOM_INVALID_MODIFICATION_ERR',
+        \DOM_NAMESPACE_ERR => 'DOM_NAMESPACE_ERR',
+        \DOM_INVALID_ACCESS_ERR => 'DOM_INVALID_ACCESS_ERR',
+        \DOM_VALIDATION_ERR => 'DOM_VALIDATION_ERR',
     ];
 
     private static $nodeTypes = [
-        XML_ELEMENT_NODE => 'XML_ELEMENT_NODE',
-        XML_ATTRIBUTE_NODE => 'XML_ATTRIBUTE_NODE',
-        XML_TEXT_NODE => 'XML_TEXT_NODE',
-        XML_CDATA_SECTION_NODE => 'XML_CDATA_SECTION_NODE',
-        XML_ENTITY_REF_NODE => 'XML_ENTITY_REF_NODE',
-        XML_ENTITY_NODE => 'XML_ENTITY_NODE',
-        XML_PI_NODE => 'XML_PI_NODE',
-        XML_COMMENT_NODE => 'XML_COMMENT_NODE',
-        XML_DOCUMENT_NODE => 'XML_DOCUMENT_NODE',
-        XML_DOCUMENT_TYPE_NODE => 'XML_DOCUMENT_TYPE_NODE',
-        XML_DOCUMENT_FRAG_NODE => 'XML_DOCUMENT_FRAG_NODE',
-        XML_NOTATION_NODE => 'XML_NOTATION_NODE',
-        XML_HTML_DOCUMENT_NODE => 'XML_HTML_DOCUMENT_NODE',
-        XML_DTD_NODE => 'XML_DTD_NODE',
-        XML_ELEMENT_DECL_NODE => 'XML_ELEMENT_DECL_NODE',
-        XML_ATTRIBUTE_DECL_NODE => 'XML_ATTRIBUTE_DECL_NODE',
-        XML_ENTITY_DECL_NODE => 'XML_ENTITY_DECL_NODE',
-        XML_NAMESPACE_DECL_NODE => 'XML_NAMESPACE_DECL_NODE',
+        \XML_ELEMENT_NODE => 'XML_ELEMENT_NODE',
+        \XML_ATTRIBUTE_NODE => 'XML_ATTRIBUTE_NODE',
+        \XML_TEXT_NODE => 'XML_TEXT_NODE',
+        \XML_CDATA_SECTION_NODE => 'XML_CDATA_SECTION_NODE',
+        \XML_ENTITY_REF_NODE => 'XML_ENTITY_REF_NODE',
+        \XML_ENTITY_NODE => 'XML_ENTITY_NODE',
+        \XML_PI_NODE => 'XML_PI_NODE',
+        \XML_COMMENT_NODE => 'XML_COMMENT_NODE',
+        \XML_DOCUMENT_NODE => 'XML_DOCUMENT_NODE',
+        \XML_DOCUMENT_TYPE_NODE => 'XML_DOCUMENT_TYPE_NODE',
+        \XML_DOCUMENT_FRAG_NODE => 'XML_DOCUMENT_FRAG_NODE',
+        \XML_NOTATION_NODE => 'XML_NOTATION_NODE',
+        \XML_HTML_DOCUMENT_NODE => 'XML_HTML_DOCUMENT_NODE',
+        \XML_DTD_NODE => 'XML_DTD_NODE',
+        \XML_ELEMENT_DECL_NODE => 'XML_ELEMENT_DECL_NODE',
+        \XML_ATTRIBUTE_DECL_NODE => 'XML_ATTRIBUTE_DECL_NODE',
+        \XML_ENTITY_DECL_NODE => 'XML_ENTITY_DECL_NODE',
+        \XML_NAMESPACE_DECL_NODE => 'XML_NAMESPACE_DECL_NODE',
     ];
 
     public static function castException(\DOMException $e, array $a, Stub $stub, $isNested)
diff --git a/vendor/symfony/var-dumper/Caster/DateCaster.php b/vendor/symfony/var-dumper/Caster/DateCaster.php
index 3b030b734ae1ddcb2adaa19c8bd78027b231cbc8..70f229a0d8b7d9d3eacf04ddc1608b6267ab08ed 100644
--- a/vendor/symfony/var-dumper/Caster/DateCaster.php
+++ b/vendor/symfony/var-dumper/Caster/DateCaster.php
@@ -31,7 +31,11 @@ public static function castDateTime(\DateTimeInterface $d, array $a, Stub $stub,
             .($location ? ($d->format('I') ? "\nDST On" : "\nDST Off") : '')
         ;
 
-        $a = [];
+        unset(
+            $a[Caster::PREFIX_DYNAMIC.'date'],
+            $a[Caster::PREFIX_DYNAMIC.'timezone'],
+            $a[Caster::PREFIX_DYNAMIC.'timezone_type']
+        );
         $a[$prefix.'date'] = new ConstStub(self::formatDateTime($d, $location ? ' e (P)' : ' P'), $title);
 
         $stub->class .= $d->format(' @U');
@@ -85,17 +89,17 @@ public static function castTimeZone(\DateTimeZone $timeZone, array $a, Stub $stu
 
     public static function castPeriod(\DatePeriod $p, array $a, Stub $stub, $isNested, $filter)
     {
-        if (\defined('HHVM_VERSION_ID') || \PHP_VERSION_ID < 50620 || (\PHP_VERSION_ID >= 70000 && \PHP_VERSION_ID < 70005)) { // see https://bugs.php.net/bug.php?id=71635
+        if (\defined('HHVM_VERSION_ID') || \PHP_VERSION_ID < 50620 || (\PHP_VERSION_ID >= 70000 && \PHP_VERSION_ID < 70005)) { // see https://bugs.php.net/71635
             return $a;
         }
 
         $dates = [];
-        if (\PHP_VERSION_ID >= 70107) { // see https://bugs.php.net/bug.php?id=74639
+        if (\PHP_VERSION_ID >= 70107) { // see https://bugs.php.net/74639
             foreach (clone $p as $i => $d) {
                 if (3 === $i) {
                     $now = new \DateTimeImmutable();
                     $dates[] = sprintf('%s more', ($end = $p->getEndDate())
-                        ? ceil(($end->format('U.u') - $d->format('U.u')) / ($now->add($p->getDateInterval())->format('U.u') - $now->format('U.u')))
+                        ? ceil(($end->format('U.u') - $d->format('U.u')) / ((int) $now->add($p->getDateInterval())->format('U.u') - (int) $now->format('U.u')))
                         : $p->recurrences - $i
                     );
                     break;
diff --git a/vendor/symfony/var-dumper/Caster/ExceptionCaster.php b/vendor/symfony/var-dumper/Caster/ExceptionCaster.php
index e0acbe39dfe9bf6f7c992d3b553755b53303479b..62b57402f86bac753e4d237c42b7e83aaa87e9dc 100644
--- a/vendor/symfony/var-dumper/Caster/ExceptionCaster.php
+++ b/vendor/symfony/var-dumper/Caster/ExceptionCaster.php
@@ -25,21 +25,21 @@ class ExceptionCaster
     public static $srcContext = 1;
     public static $traceArgs = true;
     public static $errorTypes = [
-        E_DEPRECATED => 'E_DEPRECATED',
-        E_USER_DEPRECATED => 'E_USER_DEPRECATED',
-        E_RECOVERABLE_ERROR => 'E_RECOVERABLE_ERROR',
-        E_ERROR => 'E_ERROR',
-        E_WARNING => 'E_WARNING',
-        E_PARSE => 'E_PARSE',
-        E_NOTICE => 'E_NOTICE',
-        E_CORE_ERROR => 'E_CORE_ERROR',
-        E_CORE_WARNING => 'E_CORE_WARNING',
-        E_COMPILE_ERROR => 'E_COMPILE_ERROR',
-        E_COMPILE_WARNING => 'E_COMPILE_WARNING',
-        E_USER_ERROR => 'E_USER_ERROR',
-        E_USER_WARNING => 'E_USER_WARNING',
-        E_USER_NOTICE => 'E_USER_NOTICE',
-        E_STRICT => 'E_STRICT',
+        \E_DEPRECATED => 'E_DEPRECATED',
+        \E_USER_DEPRECATED => 'E_USER_DEPRECATED',
+        \E_RECOVERABLE_ERROR => 'E_RECOVERABLE_ERROR',
+        \E_ERROR => 'E_ERROR',
+        \E_WARNING => 'E_WARNING',
+        \E_PARSE => 'E_PARSE',
+        \E_NOTICE => 'E_NOTICE',
+        \E_CORE_ERROR => 'E_CORE_ERROR',
+        \E_CORE_WARNING => 'E_CORE_WARNING',
+        \E_COMPILE_ERROR => 'E_COMPILE_ERROR',
+        \E_COMPILE_WARNING => 'E_COMPILE_WARNING',
+        \E_USER_ERROR => 'E_USER_ERROR',
+        \E_USER_WARNING => 'E_USER_WARNING',
+        \E_USER_NOTICE => 'E_USER_NOTICE',
+        \E_STRICT => 'E_STRICT',
     ];
 
     private static $framesCache = [];
diff --git a/vendor/symfony/var-dumper/Caster/MongoCaster.php b/vendor/symfony/var-dumper/Caster/MongoCaster.php
index 3b8fb338e5bff02461dcdbb563e8e1be3f0fc430..98f1b8e25d2884eb6f6cd5027e7b4c1d42ee22f1 100644
--- a/vendor/symfony/var-dumper/Caster/MongoCaster.php
+++ b/vendor/symfony/var-dumper/Caster/MongoCaster.php
@@ -13,7 +13,7 @@
 
 use Symfony\Component\VarDumper\Cloner\Stub;
 
-@trigger_error('The '.__NAMESPACE__.'\MongoCaster class is deprecated since Symfony 3.4 and will be removed in 4.0.', E_USER_DEPRECATED);
+@trigger_error('The '.__NAMESPACE__.'\MongoCaster class is deprecated since Symfony 3.4 and will be removed in 4.0.', \E_USER_DEPRECATED);
 
 /**
  * Casts classes from the MongoDb extension to array representation.
diff --git a/vendor/symfony/var-dumper/Caster/PgSqlCaster.php b/vendor/symfony/var-dumper/Caster/PgSqlCaster.php
index cd6bf5b5fe66604a0175429c22636623e6bc31dd..fe1f0cc8d9acd10659696ae79eb6421d8115a6b0 100644
--- a/vendor/symfony/var-dumper/Caster/PgSqlCaster.php
+++ b/vendor/symfony/var-dumper/Caster/PgSqlCaster.php
@@ -34,37 +34,37 @@ class PgSqlCaster
     ];
 
     private static $transactionStatus = [
-        PGSQL_TRANSACTION_IDLE => 'PGSQL_TRANSACTION_IDLE',
-        PGSQL_TRANSACTION_ACTIVE => 'PGSQL_TRANSACTION_ACTIVE',
-        PGSQL_TRANSACTION_INTRANS => 'PGSQL_TRANSACTION_INTRANS',
-        PGSQL_TRANSACTION_INERROR => 'PGSQL_TRANSACTION_INERROR',
-        PGSQL_TRANSACTION_UNKNOWN => 'PGSQL_TRANSACTION_UNKNOWN',
+        \PGSQL_TRANSACTION_IDLE => 'PGSQL_TRANSACTION_IDLE',
+        \PGSQL_TRANSACTION_ACTIVE => 'PGSQL_TRANSACTION_ACTIVE',
+        \PGSQL_TRANSACTION_INTRANS => 'PGSQL_TRANSACTION_INTRANS',
+        \PGSQL_TRANSACTION_INERROR => 'PGSQL_TRANSACTION_INERROR',
+        \PGSQL_TRANSACTION_UNKNOWN => 'PGSQL_TRANSACTION_UNKNOWN',
     ];
 
     private static $resultStatus = [
-        PGSQL_EMPTY_QUERY => 'PGSQL_EMPTY_QUERY',
-        PGSQL_COMMAND_OK => 'PGSQL_COMMAND_OK',
-        PGSQL_TUPLES_OK => 'PGSQL_TUPLES_OK',
-        PGSQL_COPY_OUT => 'PGSQL_COPY_OUT',
-        PGSQL_COPY_IN => 'PGSQL_COPY_IN',
-        PGSQL_BAD_RESPONSE => 'PGSQL_BAD_RESPONSE',
-        PGSQL_NONFATAL_ERROR => 'PGSQL_NONFATAL_ERROR',
-        PGSQL_FATAL_ERROR => 'PGSQL_FATAL_ERROR',
+        \PGSQL_EMPTY_QUERY => 'PGSQL_EMPTY_QUERY',
+        \PGSQL_COMMAND_OK => 'PGSQL_COMMAND_OK',
+        \PGSQL_TUPLES_OK => 'PGSQL_TUPLES_OK',
+        \PGSQL_COPY_OUT => 'PGSQL_COPY_OUT',
+        \PGSQL_COPY_IN => 'PGSQL_COPY_IN',
+        \PGSQL_BAD_RESPONSE => 'PGSQL_BAD_RESPONSE',
+        \PGSQL_NONFATAL_ERROR => 'PGSQL_NONFATAL_ERROR',
+        \PGSQL_FATAL_ERROR => 'PGSQL_FATAL_ERROR',
     ];
 
     private static $diagCodes = [
-        'severity' => PGSQL_DIAG_SEVERITY,
-        'sqlstate' => PGSQL_DIAG_SQLSTATE,
-        'message' => PGSQL_DIAG_MESSAGE_PRIMARY,
-        'detail' => PGSQL_DIAG_MESSAGE_DETAIL,
-        'hint' => PGSQL_DIAG_MESSAGE_HINT,
-        'statement position' => PGSQL_DIAG_STATEMENT_POSITION,
-        'internal position' => PGSQL_DIAG_INTERNAL_POSITION,
-        'internal query' => PGSQL_DIAG_INTERNAL_QUERY,
-        'context' => PGSQL_DIAG_CONTEXT,
-        'file' => PGSQL_DIAG_SOURCE_FILE,
-        'line' => PGSQL_DIAG_SOURCE_LINE,
-        'function' => PGSQL_DIAG_SOURCE_FUNCTION,
+        'severity' => \PGSQL_DIAG_SEVERITY,
+        'sqlstate' => \PGSQL_DIAG_SQLSTATE,
+        'message' => \PGSQL_DIAG_MESSAGE_PRIMARY,
+        'detail' => \PGSQL_DIAG_MESSAGE_DETAIL,
+        'hint' => \PGSQL_DIAG_MESSAGE_HINT,
+        'statement position' => \PGSQL_DIAG_STATEMENT_POSITION,
+        'internal position' => \PGSQL_DIAG_INTERNAL_POSITION,
+        'internal query' => \PGSQL_DIAG_INTERNAL_QUERY,
+        'context' => \PGSQL_DIAG_CONTEXT,
+        'file' => \PGSQL_DIAG_SOURCE_FILE,
+        'line' => \PGSQL_DIAG_SOURCE_LINE,
+        'function' => \PGSQL_DIAG_SOURCE_FUNCTION,
     ];
 
     public static function castLargeObject($lo, array $a, Stub $stub, $isNested)
@@ -77,7 +77,7 @@ public static function castLargeObject($lo, array $a, Stub $stub, $isNested)
     public static function castLink($link, array $a, Stub $stub, $isNested)
     {
         $a['status'] = pg_connection_status($link);
-        $a['status'] = new ConstStub(PGSQL_CONNECTION_OK === $a['status'] ? 'PGSQL_CONNECTION_OK' : 'PGSQL_CONNECTION_BAD', $a['status']);
+        $a['status'] = new ConstStub(\PGSQL_CONNECTION_OK === $a['status'] ? 'PGSQL_CONNECTION_OK' : 'PGSQL_CONNECTION_BAD', $a['status']);
         $a['busy'] = pg_connection_busy($link);
 
         $a['transaction'] = pg_transaction_status($link);
@@ -113,7 +113,7 @@ public static function castResult($result, array $a, Stub $stub, $isNested)
         if (isset(self::$resultStatus[$a['status']])) {
             $a['status'] = new ConstStub(self::$resultStatus[$a['status']], $a['status']);
         }
-        $a['command-completion tag'] = pg_result_status($result, PGSQL_STATUS_STRING);
+        $a['command-completion tag'] = pg_result_status($result, \PGSQL_STATUS_STRING);
 
         if (-1 === $a['num rows']) {
             foreach (self::$diagCodes as $k => $v) {
diff --git a/vendor/symfony/var-dumper/Caster/ReflectionCaster.php b/vendor/symfony/var-dumper/Caster/ReflectionCaster.php
index 1543bbfdfa003632ded1b020357f075fb9becf9d..f19886172adbf6aafdb1e1d2e508a51d804b5f42 100644
--- a/vendor/symfony/var-dumper/Caster/ReflectionCaster.php
+++ b/vendor/symfony/var-dumper/Caster/ReflectionCaster.php
@@ -91,7 +91,7 @@ public static function castType(\ReflectionType $c, array $a, Stub $stub, $isNes
         $prefix = Caster::PREFIX_VIRTUAL;
 
         $a += [
-            $prefix.'name' => $c instanceof \ReflectionNamedType ? $c->getName() : $c->__toString(),
+            $prefix.'name' => $c instanceof \ReflectionNamedType ? $c->getName() : (string) $c,
             $prefix.'allowsNull' => $c->allowsNull(),
             $prefix.'isBuiltin' => $c->isBuiltin(),
         ];
@@ -114,7 +114,7 @@ public static function castReflectionGenerator(\ReflectionGenerator $c, array $a
             'file' => $c->getExecutingFile(),
             'line' => $c->getExecutingLine(),
         ];
-        if ($trace = $c->getTrace(DEBUG_BACKTRACE_IGNORE_ARGS)) {
+        if ($trace = $c->getTrace(\DEBUG_BACKTRACE_IGNORE_ARGS)) {
             $function = new \ReflectionGenerator($c->getExecutingGenerator());
             array_unshift($trace, [
                 'function' => 'yield',
@@ -178,7 +178,7 @@ public static function castFunctionAbstract(\ReflectionFunctionAbstract $c, arra
 
         if (isset($a[$prefix.'returnType'])) {
             $v = $a[$prefix.'returnType'];
-            $v = $v instanceof \ReflectionNamedType ? $v->getName() : $v->__toString();
+            $v = $v instanceof \ReflectionNamedType ? $v->getName() : (string) $v;
             $a[$prefix.'returnType'] = new ClassStub($a[$prefix.'returnType']->allowsNull() ? '?'.$v : $v, [class_exists($v, false) || interface_exists($v, false) || trait_exists($v, false) ? $v : '', '']);
         }
         if (isset($a[$prefix.'class'])) {
@@ -247,7 +247,7 @@ public static function castParameter(\ReflectionParameter $c, array $a, Stub $st
 
         if (method_exists($c, 'getType')) {
             if ($v = $c->getType()) {
-                $a[$prefix.'typeHint'] = $v instanceof \ReflectionNamedType ? $v->getName() : $v->__toString();
+                $a[$prefix.'typeHint'] = $v instanceof \ReflectionNamedType ? $v->getName() : (string) $v;
             }
         } elseif (preg_match('/^(?:[^ ]++ ){4}([a-zA-Z_\x7F-\xFF][^ ]++)/', $c, $v)) {
             $a[$prefix.'typeHint'] = $v[1];
@@ -333,6 +333,10 @@ private static function addExtra(&$a, \Reflector $c)
     private static function addMap(&$a, \Reflector $c, $map, $prefix = Caster::PREFIX_VIRTUAL)
     {
         foreach ($map as $k => $m) {
+            if (\PHP_VERSION_ID >= 80000 && 'isDisabled' === $k) {
+                continue;
+            }
+
             if (method_exists($c, $m) && false !== ($m = $c->$m()) && null !== $m) {
                 $a[$prefix.$k] = $m instanceof \Reflector ? $m->name : $m;
             }
diff --git a/vendor/symfony/var-dumper/Caster/ResourceCaster.php b/vendor/symfony/var-dumper/Caster/ResourceCaster.php
index 3cdb27c30879b91e261b99fbc67a4e2e0df0a34e..eb11aee1f026412ef309c5362cfd90933e16ef42 100644
--- a/vendor/symfony/var-dumper/Caster/ResourceCaster.php
+++ b/vendor/symfony/var-dumper/Caster/ResourceCaster.php
@@ -20,6 +20,11 @@
  */
 class ResourceCaster
 {
+    /**
+     * @param \CurlHandle|resource $h
+     *
+     * @return array
+     */
     public static function castCurl($h, array $a, Stub $stub, $isNested)
     {
         return curl_getinfo($h);
diff --git a/vendor/symfony/var-dumper/Caster/SplCaster.php b/vendor/symfony/var-dumper/Caster/SplCaster.php
index a223adb7f2cae34ad13a370195af6942b70f436a..360a1a416eafdb4233f01e8e4b30c0fe473fc2e7 100644
--- a/vendor/symfony/var-dumper/Caster/SplCaster.php
+++ b/vendor/symfony/var-dumper/Caster/SplCaster.php
@@ -89,6 +89,36 @@ public static function castFileInfo(\SplFileInfo $c, array $a, Stub $stub, $isNe
         ];
 
         $prefix = Caster::PREFIX_VIRTUAL;
+        unset($a["\0SplFileInfo\0fileName"]);
+        unset($a["\0SplFileInfo\0pathName"]);
+
+        if (\PHP_VERSION_ID < 80000) {
+            if (false === $c->getPathname()) {
+                $a[$prefix.'⚠'] = 'The parent constructor was not called: the object is in an invalid state';
+
+                return $a;
+            }
+        } else {
+            try {
+                $c->isReadable();
+            } catch (\RuntimeException $e) {
+                if ('Object not initialized' !== $e->getMessage()) {
+                    throw $e;
+                }
+
+                $a[$prefix.'⚠'] = 'The parent constructor was not called: the object is in an invalid state';
+
+                return $a;
+            } catch (\Error $e) {
+                if ('Object not initialized' !== $e->getMessage()) {
+                    throw $e;
+                }
+
+                $a[$prefix.'⚠'] = 'The parent constructor was not called: the object is in an invalid state';
+
+                return $a;
+            }
+        }
 
         foreach ($map as $key => $accessor) {
             try {
@@ -152,19 +182,11 @@ public static function castFileObject(\SplFileObject $c, array $a, Stub $stub, $
         return $a;
     }
 
-    public static function castFixedArray(\SplFixedArray $c, array $a, Stub $stub, $isNested)
-    {
-        $a += [
-            Caster::PREFIX_VIRTUAL.'storage' => $c->toArray(),
-        ];
-
-        return $a;
-    }
-
     public static function castObjectStorage(\SplObjectStorage $c, array $a, Stub $stub, $isNested)
     {
         $storage = [];
         unset($a[Caster::PREFIX_DYNAMIC."\0gcdata"]); // Don't hit https://bugs.php.net/65967
+        unset($a["\0SplObjectStorage\0storage"]);
 
         $clone = clone $c;
         foreach ($clone as $obj) {
@@ -191,14 +213,16 @@ public static function castOuterIterator(\OuterIterator $c, array $a, Stub $stub
     private static function castSplArray($c, array $a, Stub $stub, $isNested)
     {
         $prefix = Caster::PREFIX_VIRTUAL;
-        $class = $stub->class;
         $flags = $c->getFlags();
 
         if (!($flags & \ArrayObject::STD_PROP_LIST)) {
             $c->setFlags(\ArrayObject::STD_PROP_LIST);
-            $a = Caster::castObject($c, $class);
+            $a = Caster::castObject($c, \get_class($c), method_exists($c, '__debugInfo'), $stub->class);
             $c->setFlags($flags);
         }
+        if (\PHP_VERSION_ID < 70400) {
+            $a[$prefix.'storage'] = $c->getArrayCopy();
+        }
         $a += [
             $prefix.'flag::STD_PROP_LIST' => (bool) ($flags & \ArrayObject::STD_PROP_LIST),
             $prefix.'flag::ARRAY_AS_PROPS' => (bool) ($flags & \ArrayObject::ARRAY_AS_PROPS),
@@ -206,7 +230,6 @@ private static function castSplArray($c, array $a, Stub $stub, $isNested)
         if ($c instanceof \ArrayObject) {
             $a[$prefix.'iteratorClass'] = new ClassStub($c->getIteratorClass());
         }
-        $a[$prefix.'storage'] = $c->getArrayCopy();
 
         return $a;
     }
diff --git a/vendor/symfony/var-dumper/Caster/XmlResourceCaster.php b/vendor/symfony/var-dumper/Caster/XmlResourceCaster.php
index 117138c7848c05856b6ad671c0a9b7884e30fb60..99c1486483c074a8f2c5b24e210ea52919865bfe 100644
--- a/vendor/symfony/var-dumper/Caster/XmlResourceCaster.php
+++ b/vendor/symfony/var-dumper/Caster/XmlResourceCaster.php
@@ -21,28 +21,28 @@
 class XmlResourceCaster
 {
     private static $xmlErrors = [
-        XML_ERROR_NONE => 'XML_ERROR_NONE',
-        XML_ERROR_NO_MEMORY => 'XML_ERROR_NO_MEMORY',
-        XML_ERROR_SYNTAX => 'XML_ERROR_SYNTAX',
-        XML_ERROR_NO_ELEMENTS => 'XML_ERROR_NO_ELEMENTS',
-        XML_ERROR_INVALID_TOKEN => 'XML_ERROR_INVALID_TOKEN',
-        XML_ERROR_UNCLOSED_TOKEN => 'XML_ERROR_UNCLOSED_TOKEN',
-        XML_ERROR_PARTIAL_CHAR => 'XML_ERROR_PARTIAL_CHAR',
-        XML_ERROR_TAG_MISMATCH => 'XML_ERROR_TAG_MISMATCH',
-        XML_ERROR_DUPLICATE_ATTRIBUTE => 'XML_ERROR_DUPLICATE_ATTRIBUTE',
-        XML_ERROR_JUNK_AFTER_DOC_ELEMENT => 'XML_ERROR_JUNK_AFTER_DOC_ELEMENT',
-        XML_ERROR_PARAM_ENTITY_REF => 'XML_ERROR_PARAM_ENTITY_REF',
-        XML_ERROR_UNDEFINED_ENTITY => 'XML_ERROR_UNDEFINED_ENTITY',
-        XML_ERROR_RECURSIVE_ENTITY_REF => 'XML_ERROR_RECURSIVE_ENTITY_REF',
-        XML_ERROR_ASYNC_ENTITY => 'XML_ERROR_ASYNC_ENTITY',
-        XML_ERROR_BAD_CHAR_REF => 'XML_ERROR_BAD_CHAR_REF',
-        XML_ERROR_BINARY_ENTITY_REF => 'XML_ERROR_BINARY_ENTITY_REF',
-        XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF => 'XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF',
-        XML_ERROR_MISPLACED_XML_PI => 'XML_ERROR_MISPLACED_XML_PI',
-        XML_ERROR_UNKNOWN_ENCODING => 'XML_ERROR_UNKNOWN_ENCODING',
-        XML_ERROR_INCORRECT_ENCODING => 'XML_ERROR_INCORRECT_ENCODING',
-        XML_ERROR_UNCLOSED_CDATA_SECTION => 'XML_ERROR_UNCLOSED_CDATA_SECTION',
-        XML_ERROR_EXTERNAL_ENTITY_HANDLING => 'XML_ERROR_EXTERNAL_ENTITY_HANDLING',
+        \XML_ERROR_NONE => 'XML_ERROR_NONE',
+        \XML_ERROR_NO_MEMORY => 'XML_ERROR_NO_MEMORY',
+        \XML_ERROR_SYNTAX => 'XML_ERROR_SYNTAX',
+        \XML_ERROR_NO_ELEMENTS => 'XML_ERROR_NO_ELEMENTS',
+        \XML_ERROR_INVALID_TOKEN => 'XML_ERROR_INVALID_TOKEN',
+        \XML_ERROR_UNCLOSED_TOKEN => 'XML_ERROR_UNCLOSED_TOKEN',
+        \XML_ERROR_PARTIAL_CHAR => 'XML_ERROR_PARTIAL_CHAR',
+        \XML_ERROR_TAG_MISMATCH => 'XML_ERROR_TAG_MISMATCH',
+        \XML_ERROR_DUPLICATE_ATTRIBUTE => 'XML_ERROR_DUPLICATE_ATTRIBUTE',
+        \XML_ERROR_JUNK_AFTER_DOC_ELEMENT => 'XML_ERROR_JUNK_AFTER_DOC_ELEMENT',
+        \XML_ERROR_PARAM_ENTITY_REF => 'XML_ERROR_PARAM_ENTITY_REF',
+        \XML_ERROR_UNDEFINED_ENTITY => 'XML_ERROR_UNDEFINED_ENTITY',
+        \XML_ERROR_RECURSIVE_ENTITY_REF => 'XML_ERROR_RECURSIVE_ENTITY_REF',
+        \XML_ERROR_ASYNC_ENTITY => 'XML_ERROR_ASYNC_ENTITY',
+        \XML_ERROR_BAD_CHAR_REF => 'XML_ERROR_BAD_CHAR_REF',
+        \XML_ERROR_BINARY_ENTITY_REF => 'XML_ERROR_BINARY_ENTITY_REF',
+        \XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF => 'XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF',
+        \XML_ERROR_MISPLACED_XML_PI => 'XML_ERROR_MISPLACED_XML_PI',
+        \XML_ERROR_UNKNOWN_ENCODING => 'XML_ERROR_UNKNOWN_ENCODING',
+        \XML_ERROR_INCORRECT_ENCODING => 'XML_ERROR_INCORRECT_ENCODING',
+        \XML_ERROR_UNCLOSED_CDATA_SECTION => 'XML_ERROR_UNCLOSED_CDATA_SECTION',
+        \XML_ERROR_EXTERNAL_ENTITY_HANDLING => 'XML_ERROR_EXTERNAL_ENTITY_HANDLING',
     ];
 
     public static function castXml($h, array $a, Stub $stub, $isNested)
diff --git a/vendor/symfony/var-dumper/Cloner/AbstractCloner.php b/vendor/symfony/var-dumper/Cloner/AbstractCloner.php
index de09f1803da8575642ad738515b1f7ce87b38a32..76b55b478bf70c3ced2150143b17ebd69052ada6 100644
--- a/vendor/symfony/var-dumper/Cloner/AbstractCloner.php
+++ b/vendor/symfony/var-dumper/Cloner/AbstractCloner.php
@@ -45,6 +45,7 @@ abstract class AbstractCloner implements ClonerInterface
         'Doctrine\Common\Proxy\Proxy' => ['Symfony\Component\VarDumper\Caster\DoctrineCaster', 'castCommonProxy'],
         'Doctrine\ORM\Proxy\Proxy' => ['Symfony\Component\VarDumper\Caster\DoctrineCaster', 'castOrmProxy'],
         'Doctrine\ORM\PersistentCollection' => ['Symfony\Component\VarDumper\Caster\DoctrineCaster', 'castPersistentCollection'],
+        'Doctrine\Persistence\ObjectManager' => ['Symfony\Component\VarDumper\Caster\StubCaster', 'cutInternals'],
 
         'DOMException' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castException'],
         'DOMStringList' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castLength'],
@@ -82,6 +83,8 @@ abstract class AbstractCloner implements ClonerInterface
         'Symfony\Component\Debug\Exception\SilencedErrorContext' => ['Symfony\Component\VarDumper\Caster\ExceptionCaster', 'castSilencedErrorContext'],
 
         'PHPUnit_Framework_MockObject_MockObject' => ['Symfony\Component\VarDumper\Caster\StubCaster', 'cutInternals'],
+        'PHPUnit\Framework\MockObject\MockObject' => ['Symfony\Component\VarDumper\Caster\StubCaster', 'cutInternals'],
+        'PHPUnit\Framework\MockObject\Stub' => ['Symfony\Component\VarDumper\Caster\StubCaster', 'cutInternals'],
         'Prophecy\Prophecy\ProphecySubjectInterface' => ['Symfony\Component\VarDumper\Caster\StubCaster', 'cutInternals'],
         'Mockery\MockInterface' => ['Symfony\Component\VarDumper\Caster\StubCaster', 'cutInternals'],
 
@@ -99,7 +102,6 @@ abstract class AbstractCloner implements ClonerInterface
         'SplDoublyLinkedList' => ['Symfony\Component\VarDumper\Caster\SplCaster', 'castDoublyLinkedList'],
         'SplFileInfo' => ['Symfony\Component\VarDumper\Caster\SplCaster', 'castFileInfo'],
         'SplFileObject' => ['Symfony\Component\VarDumper\Caster\SplCaster', 'castFileObject'],
-        'SplFixedArray' => ['Symfony\Component\VarDumper\Caster\SplCaster', 'castFixedArray'],
         'SplHeap' => ['Symfony\Component\VarDumper\Caster\SplCaster', 'castHeap'],
         'SplObjectStorage' => ['Symfony\Component\VarDumper\Caster\SplCaster', 'castObjectStorage'],
         'SplPriorityQueue' => ['Symfony\Component\VarDumper\Caster\SplCaster', 'castHeap'],
@@ -115,7 +117,9 @@ abstract class AbstractCloner implements ClonerInterface
         'DateTimeZone' => ['Symfony\Component\VarDumper\Caster\DateCaster', 'castTimeZone'],
         'DatePeriod' => ['Symfony\Component\VarDumper\Caster\DateCaster', 'castPeriod'],
 
+        'CurlHandle' => ['Symfony\Component\VarDumper\Caster\ResourceCaster', 'castCurl'],
         ':curl' => ['Symfony\Component\VarDumper\Caster\ResourceCaster', 'castCurl'],
+
         ':dba' => ['Symfony\Component\VarDumper\Caster\ResourceCaster', 'castDba'],
         ':dba persistent' => ['Symfony\Component\VarDumper\Caster\ResourceCaster', 'castDba'],
         ':gd' => ['Symfony\Component\VarDumper\Caster\ResourceCaster', 'castGd'],
@@ -214,7 +218,7 @@ public function setMinDepth($minDepth)
     public function cloneVar($var, $filter = 0)
     {
         $this->prevErrorHandler = set_error_handler(function ($type, $msg, $file, $line, $context = []) {
-            if (E_RECOVERABLE_ERROR === $type || E_USER_ERROR === $type) {
+            if (\E_RECOVERABLE_ERROR === $type || \E_USER_ERROR === $type) {
                 // Cloner never dies
                 throw new \ErrorException($msg, 0, $type, $file, $line);
             }
@@ -263,8 +267,8 @@ protected function castObject(Stub $stub, $isNested)
         $obj = $stub->value;
         $class = $stub->class;
 
-        if (isset($class[15]) && "\0" === $class[15] && 0 === strpos($class, "class@anonymous\x00")) {
-            $stub->class = get_parent_class($class).'@anonymous';
+        if ((\PHP_VERSION_ID >= 80000 || (isset($class[15]) && "\0" === $class[15])) && false !== strpos($class, "@anonymous\0")) {
+            $stub->class = \PHP_VERSION_ID < 80000 ? (get_parent_class($class) ?: key(class_implements($class)) ?: 'class').'@anonymous' : get_debug_type($obj);
         }
         if (isset($this->classInfo[$class])) {
             list($i, $parents, $hasDebugInfo) = $this->classInfo[$class];
@@ -286,7 +290,7 @@ protected function castObject(Stub $stub, $isNested)
             $this->classInfo[$class] = [$i, $parents, $hasDebugInfo];
         }
 
-        $a = Caster::castObject($obj, $class, $hasDebugInfo);
+        $a = Caster::castObject($obj, $class, $hasDebugInfo, $stub->class);
 
         try {
             while ($i--) {
diff --git a/vendor/symfony/var-dumper/Cloner/Data.php b/vendor/symfony/var-dumper/Cloner/Data.php
index bb5ee94d8b43b096c75564ba28c96332d0f7edde..3973720794d94e2a9ad2c0b36348899470418002 100644
--- a/vendor/symfony/var-dumper/Cloner/Data.php
+++ b/vendor/symfony/var-dumper/Cloner/Data.php
@@ -34,7 +34,7 @@ public function __construct(array $data)
     }
 
     /**
-     * @return string The type of the value
+     * @return string|null The type of the value
      */
     public function getType()
     {
@@ -58,10 +58,12 @@ public function getType()
         if (Stub::TYPE_RESOURCE === $item->type) {
             return $item->class.' resource';
         }
+
+        return null;
     }
 
     /**
-     * @param bool $recursive Whether values should be resolved recursively or not
+     * @param array|bool $recursive Whether values should be resolved recursively or not
      *
      * @return string|int|float|bool|array|Data[]|null A native representation of the original value
      */
@@ -112,7 +114,7 @@ public function count()
     public function getIterator()
     {
         if (!\is_array($value = $this->getValue())) {
-            throw new \LogicException(sprintf('%s object holds non-iterable type "%s".', self::class, \gettype($value)));
+            throw new \LogicException(sprintf('"%s" object holds non-iterable type "%s".', self::class, \gettype($value)));
         }
 
         foreach ($value as $k => $v) {
@@ -127,6 +129,8 @@ public function __get($key)
 
             return $item instanceof Stub || [] === $item ? $data : $item;
         }
+
+        return null;
     }
 
     public function __isset($key)
@@ -182,7 +186,7 @@ public function getRawData()
      *
      * @param int $maxDepth The max dumped depth level
      *
-     * @return self A clone of $this
+     * @return static
      */
     public function withMaxDepth($maxDepth)
     {
@@ -197,7 +201,7 @@ public function withMaxDepth($maxDepth)
      *
      * @param int $maxItemsPerDepth The max number of items dumped per depth level
      *
-     * @return self A clone of $this
+     * @return static
      */
     public function withMaxItemsPerDepth($maxItemsPerDepth)
     {
@@ -212,7 +216,7 @@ public function withMaxItemsPerDepth($maxItemsPerDepth)
      *
      * @param bool $useRefHandles False to hide global ref. handles
      *
-     * @return self A clone of $this
+     * @return static
      */
     public function withRefHandles($useRefHandles)
     {
@@ -227,7 +231,7 @@ public function withRefHandles($useRefHandles)
      *
      * @param string|int $key The key to seek to
      *
-     * @return self|null A clone of $this or null if the key is not set
+     * @return static|null Null if the key is not set
      */
     public function seek($key)
     {
@@ -237,7 +241,7 @@ public function seek($key)
             $item = $item->value;
         }
         if (!($item = $this->getStub($item)) instanceof Stub || !$item->position) {
-            return;
+            return null;
         }
         $keys = [$key];
 
@@ -252,7 +256,7 @@ public function seek($key)
             case Stub::TYPE_RESOURCE:
                 break;
             default:
-                return;
+                return null;
         }
 
         $data = null;
@@ -302,7 +306,7 @@ private function dumpItem($dumper, $cursor, &$refs, $item)
             }
         } elseif (Stub::TYPE_REF === $item->type) {
             if ($item->handle) {
-                if (!isset($refs[$r = $item->handle - (PHP_INT_MAX >> 1)])) {
+                if (!isset($refs[$r = $item->handle - (\PHP_INT_MAX >> 1)])) {
                     $cursor->refIndex = $refs[$r] = $cursor->refIndex ?: ++$refs[0];
                 } else {
                     $firstSeen = false;
@@ -370,7 +374,7 @@ private function dumpItem($dumper, $cursor, &$refs, $item)
                     break;
 
                 default:
-                    throw new \RuntimeException(sprintf('Unexpected Stub type: %s', $item->type));
+                    throw new \RuntimeException(sprintf('Unexpected Stub type: "%s".', $item->type));
             }
         } elseif ('array' === $type) {
             $dumper->enterHash($cursor, Cursor::HASH_INDEXED, 0, false);
diff --git a/vendor/symfony/var-dumper/Cloner/DumperInterface.php b/vendor/symfony/var-dumper/Cloner/DumperInterface.php
index cb498ff70657c66b5889d809d49d33bc220099e6..912bb5213975936ee2cdcd258f4b3886ae54098b 100644
--- a/vendor/symfony/var-dumper/Cloner/DumperInterface.php
+++ b/vendor/symfony/var-dumper/Cloner/DumperInterface.php
@@ -40,21 +40,21 @@ public function dumpString(Cursor $cursor, $str, $bin, $cut);
     /**
      * Dumps while entering an hash.
      *
-     * @param Cursor $cursor   The Cursor position in the dump
-     * @param int    $type     A Cursor::HASH_* const for the type of hash
-     * @param string $class    The object class, resource type or array count
-     * @param bool   $hasChild When the dump of the hash has child item
+     * @param Cursor     $cursor   The Cursor position in the dump
+     * @param int        $type     A Cursor::HASH_* const for the type of hash
+     * @param string|int $class    The object class, resource type or array count
+     * @param bool       $hasChild When the dump of the hash has child item
      */
     public function enterHash(Cursor $cursor, $type, $class, $hasChild);
 
     /**
      * Dumps while leaving an hash.
      *
-     * @param Cursor $cursor   The Cursor position in the dump
-     * @param int    $type     A Cursor::HASH_* const for the type of hash
-     * @param string $class    The object class, resource type or array count
-     * @param bool   $hasChild When the dump of the hash has child item
-     * @param int    $cut      The number of items the hash has been cut by
+     * @param Cursor     $cursor   The Cursor position in the dump
+     * @param int        $type     A Cursor::HASH_* const for the type of hash
+     * @param string|int $class    The object class, resource type or array count
+     * @param bool       $hasChild When the dump of the hash has child item
+     * @param int        $cut      The number of items the hash has been cut by
      */
     public function leaveHash(Cursor $cursor, $type, $class, $hasChild, $cut);
 }
diff --git a/vendor/symfony/var-dumper/Cloner/Stub.php b/vendor/symfony/var-dumper/Cloner/Stub.php
index 27dd3ef32c4df1111fe04bc5f73874587130342e..a56120ce363112a44d8d1d48154407d2f083a5a3 100644
--- a/vendor/symfony/var-dumper/Cloner/Stub.php
+++ b/vendor/symfony/var-dumper/Cloner/Stub.php
@@ -48,7 +48,7 @@ public function __sleep()
     {
         $properties = [];
 
-        if (!isset(self::$defaultProperties[$c = \get_class($this)])) {
+        if (!isset(self::$defaultProperties[$c = static::class])) {
             self::$defaultProperties[$c] = get_class_vars($c);
 
             foreach ((new \ReflectionClass($c))->getStaticProperties() as $k => $v) {
diff --git a/vendor/symfony/var-dumper/Cloner/VarCloner.php b/vendor/symfony/var-dumper/Cloner/VarCloner.php
index f418aa089488dad392b3e5ef61ce2832d65f59c1..8c4221220ebde2bdd0297d54bb7bd6c217a4e5dc 100644
--- a/vendor/symfony/var-dumper/Cloner/VarCloner.php
+++ b/vendor/symfony/var-dumper/Cloner/VarCloner.php
@@ -42,14 +42,14 @@ protected function doClone($var)
         $currentDepth = 0;              // Current tree depth
         $currentDepthFinalIndex = 0;    // Final $queue index for current tree depth
         $minimumDepthReached = 0 === $minDepth; // Becomes true when minimum tree depth has been reached
-        $cookie = (object) [];     // Unique object used to detect hard references
+        $cookie = (object) [];          // Unique object used to detect hard references
         $a = null;                      // Array cast for nested structures
         $stub = null;                   // Stub capturing the main properties of an original item value
                                         // or null if the original value is used directly
 
         if (!self::$hashMask) {
-            self::$gid = uniqid(mt_rand(), true); // Unique string used to detect the special $GLOBALS variable
             self::initHashMask();
+            self::$gid = md5(dechex(self::$hashMask)); // Unique string used to detect the special $GLOBALS variable
         }
         $gid = self::$gid;
         $hashMask = self::$hashMask;
@@ -79,18 +79,25 @@ protected function doClone($var)
                     }
                     if ($gk !== $k) {
                         $fromObjCast = true;
-                        $refs = $vals = \array_values($queue[$i]);
+                        $refs = $vals = array_values($queue[$i]);
                         break;
                     }
                 }
             }
             foreach ($vals as $k => $v) {
                 // $v is the original value or a stub object in case of hard references
-                $refs[$k] = $cookie;
-                if ($zvalIsRef = $vals[$k] === $cookie) {
+
+                if (\PHP_VERSION_ID >= 70400) {
+                    $zvalIsRef = null !== \ReflectionReference::fromArrayElement($vals, $k);
+                } else {
+                    $refs[$k] = $cookie;
+                    $zvalIsRef = $vals[$k] === $cookie;
+                }
+
+                if ($zvalIsRef) {
                     $vals[$k] = &$stub;         // Break hard references to make $queue completely
                     unset($stub);               // independent from the original structure
-                    if ($v instanceof Stub && isset($hardRefs[\spl_object_hash($v)])) {
+                    if ($v instanceof Stub && isset($hardRefs[spl_object_hash($v)])) {
                         $vals[$k] = $refs[$k] = $v;
                         if ($v->value instanceof Stub && (Stub::TYPE_OBJECT === $v->value->type || Stub::TYPE_RESOURCE === $v->value->type)) {
                             ++$v->value->refCount;
@@ -100,7 +107,7 @@ protected function doClone($var)
                     }
                     $refs[$k] = $vals[$k] = new Stub();
                     $refs[$k]->value = $v;
-                    $h = \spl_object_hash($refs[$k]);
+                    $h = spl_object_hash($refs[$k]);
                     $hardRefs[$h] = &$refs[$k];
                     $values[$h] = $v;
                     $vals[$k]->handle = ++$refsCounter;
@@ -113,27 +120,26 @@ protected function doClone($var)
                     case \is_int($v):
                     case \is_float($v):
                         continue 2;
-
                     case \is_string($v):
                         if ('' === $v) {
                             continue 2;
                         }
-                        if (!\preg_match('//u', $v)) {
+                        if (!preg_match('//u', $v)) {
                             $stub = new Stub();
                             $stub->type = Stub::TYPE_STRING;
                             $stub->class = Stub::STRING_BINARY;
                             if (0 <= $maxString && 0 < $cut = \strlen($v) - $maxString) {
                                 $stub->cut = $cut;
-                                $stub->value = \substr($v, 0, -$cut);
+                                $stub->value = substr($v, 0, -$cut);
                             } else {
                                 $stub->value = $v;
                             }
-                        } elseif (0 <= $maxString && isset($v[1 + ($maxString >> 2)]) && 0 < $cut = \mb_strlen($v, 'UTF-8') - $maxString) {
+                        } elseif (0 <= $maxString && isset($v[1 + ($maxString >> 2)]) && 0 < $cut = mb_strlen($v, 'UTF-8') - $maxString) {
                             $stub = new Stub();
                             $stub->type = Stub::TYPE_STRING;
                             $stub->class = Stub::STRING_UTF8;
                             $stub->cut = $cut;
-                            $stub->value = \mb_substr($v, 0, $maxString, 'UTF-8');
+                            $stub->value = mb_substr($v, 0, $maxString, 'UTF-8');
                         } else {
                             continue 2;
                         }
@@ -179,7 +185,7 @@ protected function doClone($var)
 
                     case \is_object($v):
                     case $v instanceof \__PHP_Incomplete_Class:
-                        if (empty($objRefs[$h = $hashMask ^ \hexdec(\substr(\spl_object_hash($v), $hashOffset, \PHP_INT_SIZE))])) {
+                        if (empty($objRefs[$h = $hashMask ^ hexdec(substr(spl_object_hash($v), $hashOffset, \PHP_INT_SIZE))])) {
                             $stub = new Stub();
                             $stub->type = Stub::TYPE_OBJECT;
                             $stub->class = \get_class($v);
@@ -190,7 +196,7 @@ protected function doClone($var)
                                 if (Stub::TYPE_OBJECT !== $stub->type || null === $stub->value) {
                                     break;
                                 }
-                                $h = $hashMask ^ \hexdec(\substr(\spl_object_hash($stub->value), $hashOffset, \PHP_INT_SIZE));
+                                $h = $hashMask ^ hexdec(substr(spl_object_hash($stub->value), $hashOffset, \PHP_INT_SIZE));
                                 $stub->handle = $h;
                             }
                             $stub->value = null;
@@ -213,7 +219,7 @@ protected function doClone($var)
                         if (empty($resRefs[$h = (int) $v])) {
                             $stub = new Stub();
                             $stub->type = Stub::TYPE_RESOURCE;
-                            if ('Unknown' === $stub->class = @\get_resource_type($v)) {
+                            if ('Unknown' === $stub->class = @get_resource_type($v)) {
                                 $stub->class = 'Closed';
                             }
                             $stub->value = $v;
@@ -241,7 +247,7 @@ protected function doClone($var)
                         $stub->position = $len++;
                     } elseif ($pos < $maxItems) {
                         if ($maxItems < $pos += \count($a)) {
-                            $a = \array_slice($a, 0, $maxItems - $pos);
+                            $a = \array_slice($a, 0, $maxItems - $pos, true);
                             if ($stub->cut >= 0) {
                                 $stub->cut += $pos - $maxItems;
                             }
@@ -303,7 +309,7 @@ protected function doClone($var)
     private static function initHashMask()
     {
         $obj = (object) [];
-        self::$hashOffset = 16 - PHP_INT_SIZE;
+        self::$hashOffset = 16 - \PHP_INT_SIZE;
         self::$hashMask = -1;
 
         if (\defined('HHVM_VERSION')) {
@@ -311,7 +317,7 @@ private static function initHashMask()
         } else {
             // check if we are nested in an output buffering handler to prevent a fatal error with ob_start() below
             $obFuncs = ['ob_clean', 'ob_end_clean', 'ob_flush', 'ob_end_flush', 'ob_get_contents', 'ob_get_flush'];
-            foreach (debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS) as $frame) {
+            foreach (debug_backtrace(\DEBUG_BACKTRACE_IGNORE_ARGS) as $frame) {
                 if (isset($frame['function'][0]) && !isset($frame['class']) && 'o' === $frame['function'][0] && \in_array($frame['function'], $obFuncs)) {
                     $frame['line'] = 0;
                     break;
@@ -324,6 +330,6 @@ private static function initHashMask()
             }
         }
 
-        self::$hashMask ^= hexdec(substr(spl_object_hash($obj), self::$hashOffset, PHP_INT_SIZE));
+        self::$hashMask ^= hexdec(substr(spl_object_hash($obj), self::$hashOffset, \PHP_INT_SIZE));
     }
 }
diff --git a/vendor/symfony/var-dumper/Dumper/AbstractDumper.php b/vendor/symfony/var-dumper/Dumper/AbstractDumper.php
index 30cd1a1b193d1479d06f597038530a0c1effd66c..5ea6294f3d1b9b252fdc6704fb6ccb75080d81d5 100644
--- a/vendor/symfony/var-dumper/Dumper/AbstractDumper.php
+++ b/vendor/symfony/var-dumper/Dumper/AbstractDumper.php
@@ -35,7 +35,7 @@ abstract class AbstractDumper implements DataDumperInterface, DumperInterface
     protected $indentPad = '  ';
     protected $flags;
 
-    private $charset;
+    private $charset = '';
 
     /**
      * @param callable|resource|string|null $output  A line dumper callable, an opened stream or an output path, defaults to static::$defaultOutput
@@ -126,8 +126,8 @@ public function dump(Data $data, $output = null)
         $this->decimalPoint = localeconv();
         $this->decimalPoint = $this->decimalPoint['decimal_point'];
 
-        if ($locale = $this->flags & (self::DUMP_COMMA_SEPARATOR | self::DUMP_TRAILING_COMMA) ? setlocale(LC_NUMERIC, 0) : null) {
-            setlocale(LC_NUMERIC, 'C');
+        if ($locale = $this->flags & (self::DUMP_COMMA_SEPARATOR | self::DUMP_TRAILING_COMMA) ? setlocale(\LC_NUMERIC, 0) : null) {
+            setlocale(\LC_NUMERIC, 'C');
         }
 
         if ($returnDump = true === $output) {
@@ -151,9 +151,11 @@ public function dump(Data $data, $output = null)
                 $this->setOutput($prevOutput);
             }
             if ($locale) {
-                setlocale(LC_NUMERIC, $locale);
+                setlocale(\LC_NUMERIC, $locale);
             }
         }
+
+        return null;
     }
 
     /**
@@ -185,13 +187,13 @@ protected function echoLine($line, $depth, $indentPad)
     /**
      * Converts a non-UTF-8 string to UTF-8.
      *
-     * @param string $s The non-UTF-8 string to convert
+     * @param string|null $s The non-UTF-8 string to convert
      *
-     * @return string The string converted to UTF-8
+     * @return string|null The string converted to UTF-8
      */
     protected function utf8Encode($s)
     {
-        if (preg_match('//u', $s)) {
+        if (null === $s || preg_match('//u', $s)) {
             return $s;
         }
 
diff --git a/vendor/symfony/var-dumper/Dumper/CliDumper.php b/vendor/symfony/var-dumper/Dumper/CliDumper.php
index 2bd347d96a53e0ab4b40bbfaa9d1225e0b4bf96d..4c48ab7cc82abdf0e8eb965e7fd220314f6fe9c9 100644
--- a/vendor/symfony/var-dumper/Dumper/CliDumper.php
+++ b/vendor/symfony/var-dumper/Dumper/CliDumper.php
@@ -28,7 +28,7 @@ class CliDumper extends AbstractDumper
     protected $maxStringWidth = 0;
     protected $styles = [
         // See http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
-        'default' => '38;5;208',
+        'default' => '0;38;5;208',
         'num' => '1;38;5;38',
         'const' => '1;38;5;208',
         'str' => '1;38;5;113',
@@ -131,8 +131,8 @@ public function dumpScalar(Cursor $cursor, $type, $value)
                 $style = 'num';
 
                 switch (true) {
-                    case INF === $value:  $value = 'INF'; break;
-                    case -INF === $value: $value = '-INF'; break;
+                    case \INF === $value:  $value = 'INF'; break;
+                    case -\INF === $value: $value = '-INF'; break;
                     case is_nan($value):  $value = 'NAN'; break;
                     default:
                         $value = (string) $value;
@@ -255,6 +255,10 @@ public function dumpString(Cursor $cursor, $str, $bin, $cut)
      */
     public function enterHash(Cursor $cursor, $type, $class, $hasChild)
     {
+        if (null === $this->colors) {
+            $this->colors = $this->supportsColors();
+        }
+
         $this->dumpKey($cursor);
 
         if ($this->collapseNextHash) {
diff --git a/vendor/symfony/var-dumper/Dumper/HtmlDumper.php b/vendor/symfony/var-dumper/Dumper/HtmlDumper.php
index 37d50a884df0d3e41a738816586b1afa13c509a5..ccbdc96f233abae6480943e92a82f6590928ddee 100644
--- a/vendor/symfony/var-dumper/Dumper/HtmlDumper.php
+++ b/vendor/symfony/var-dumper/Dumper/HtmlDumper.php
@@ -128,7 +128,7 @@ protected function getDumpHeader()
             return $this->dumpHeader;
         }
 
-        $line = str_replace('{$options}', json_encode($this->displayOptions, JSON_FORCE_OBJECT), <<<'EOHTML'
+        $line = str_replace('{$options}', json_encode($this->displayOptions, \JSON_FORCE_OBJECT), <<<'EOHTML'
 <script>
 Sfdump = window.Sfdump || (function (doc) {
 
@@ -438,7 +438,7 @@ function xpathHasClass(className) {
                     return this.current();
                 }
                 this.idx = this.idx < (this.nodes.length - 1) ? this.idx + 1 : 0;
-        
+
                 return this.current();
             },
             previous: function () {
@@ -446,7 +446,7 @@ function xpathHasClass(className) {
                     return this.current();
                 }
                 this.idx = this.idx > 0 ? this.idx - 1 : (this.nodes.length - 1);
-        
+
                 return this.current();
             },
             isEmpty: function () {
@@ -522,11 +522,11 @@ function showCurrent(state)
                     "sf-dump-protected",
                     "sf-dump-private",
                 ].map(xpathHasClass).join(' or ');
-                
+
                 var xpathResult = doc.evaluate('.//span[' + classMatches + '][contains(translate(child::text(), ' + xpathString(searchQuery.toUpperCase()) + ', ' + xpathString(searchQuery.toLowerCase()) + '), ' + xpathString(searchQuery.toLowerCase()) + ')]', root, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null);
 
                 while (node = xpathResult.iterateNext()) state.nodes.push(node);
-                
+
                 showCurrent(state);
             }, 400);
         });
@@ -871,7 +871,7 @@ protected function dumpLine($depth, $endOfValue = false)
         if (-1 === $depth) {
             $args = ['"'.$this->dumpId.'"'];
             if ($this->extraDisplayOptions) {
-                $args[] = json_encode($this->extraDisplayOptions, JSON_FORCE_OBJECT);
+                $args[] = json_encode($this->extraDisplayOptions, \JSON_FORCE_OBJECT);
             }
             // Replace is for BC
             $this->line .= sprintf(str_replace('"%s"', '%s', $this->dumpSuffix), implode(', ', $args));
@@ -900,5 +900,5 @@ private function getSourceLink($file, $line)
 
 function esc($str)
 {
-    return htmlspecialchars($str, ENT_QUOTES, 'UTF-8');
+    return htmlspecialchars($str, \ENT_QUOTES, 'UTF-8');
 }
diff --git a/vendor/symfony/var-dumper/LICENSE b/vendor/symfony/var-dumper/LICENSE
index cf8b3ebe8714582efa61def2db2f6ba7a084e4aa..684fbf94df83c1ab0d15ccb159147c4c9d483e85 100644
--- a/vendor/symfony/var-dumper/LICENSE
+++ b/vendor/symfony/var-dumper/LICENSE
@@ -1,4 +1,4 @@
-Copyright (c) 2014-2019 Fabien Potencier
+Copyright (c) 2014-2020 Fabien Potencier
 
 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to deal
diff --git a/vendor/symfony/var-dumper/Test/VarDumperTestTrait.php b/vendor/symfony/var-dumper/Test/VarDumperTestTrait.php
index aae113b6c5f9e02743685a93d7ce70f586743c42..b8f12c5e4573ab039e9bfd41da2ecf13e6c2dbfa 100644
--- a/vendor/symfony/var-dumper/Test/VarDumperTestTrait.php
+++ b/vendor/symfony/var-dumper/Test/VarDumperTestTrait.php
@@ -22,7 +22,7 @@ trait VarDumperTestTrait
     public function assertDumpEquals($dump, $data, $filter = 0, $message = '')
     {
         if (\is_string($filter)) {
-            @trigger_error(sprintf('The $message argument of the "%s()" method at the 3rd position is deprecated since Symfony 3.4 and will be moved at the 4th position in 4.0.', __METHOD__), E_USER_DEPRECATED);
+            @trigger_error(sprintf('The $message argument of the "%s()" method at the 3rd position is deprecated since Symfony 3.4 and will be moved at the 4th position in 4.0.', __METHOD__), \E_USER_DEPRECATED);
             $message = $filter;
             $filter = 0;
         }
@@ -33,7 +33,7 @@ public function assertDumpEquals($dump, $data, $filter = 0, $message = '')
     public function assertDumpMatchesFormat($dump, $data, $filter = 0, $message = '')
     {
         if (\is_string($filter)) {
-            @trigger_error(sprintf('The $message argument of the "%s()" method at the 3rd position is deprecated since Symfony 3.4 and will be moved at the 4th position in 4.0.', __METHOD__), E_USER_DEPRECATED);
+            @trigger_error(sprintf('The $message argument of the "%s()" method at the 3rd position is deprecated since Symfony 3.4 and will be moved at the 4th position in 4.0.', __METHOD__), \E_USER_DEPRECATED);
             $message = $filter;
             $filter = 0;
         }
@@ -41,6 +41,9 @@ public function assertDumpMatchesFormat($dump, $data, $filter = 0, $message = ''
         $this->assertStringMatchesFormat(rtrim($dump), $this->getDump($data, null, $filter), $message);
     }
 
+    /**
+     * @return string|null
+     */
     protected function getDump($data, $key = null, $filter = 0)
     {
         $flags = getenv('DUMP_LIGHT_ARRAY') ? CliDumper::DUMP_LIGHT_ARRAY : 0;
@@ -52,7 +55,7 @@ protected function getDump($data, $key = null, $filter = 0)
         $dumper->setColors(false);
         $data = $cloner->cloneVar($data, $filter)->withRefHandles(false);
         if (null !== $key && null === $data = $data->seek($key)) {
-            return;
+            return null;
         }
 
         return rtrim($dumper->dump($data, true));
diff --git a/vendor/symfony/var-dumper/Tests/Caster/CasterTest.php b/vendor/symfony/var-dumper/Tests/Caster/CasterTest.php
index 728697b413c4d05c41b7ec9a8e2877743218bc31..73800e5f9dc463af7b05d71ee76387a91c3b9e4b 100644
--- a/vendor/symfony/var-dumper/Tests/Caster/CasterTest.php
+++ b/vendor/symfony/var-dumper/Tests/Caster/CasterTest.php
@@ -171,7 +171,7 @@ public function testAnonymousClass()
 
         $this->assertDumpMatchesFormat(
             <<<'EOTXT'
-@anonymous {
+class@anonymous {
   -foo: "foo"
 }
 EOTXT
diff --git a/vendor/symfony/var-dumper/Tests/Caster/DateCasterTest.php b/vendor/symfony/var-dumper/Tests/Caster/DateCasterTest.php
index da8b4d0fa5c388bea5cdfed6dab614e57358536e..8c685f6b7b3e1224a8a5060902efb1d6c2a13cd9 100644
--- a/vendor/symfony/var-dumper/Tests/Caster/DateCasterTest.php
+++ b/vendor/symfony/var-dumper/Tests/Caster/DateCasterTest.php
@@ -16,6 +16,7 @@
 use Symfony\Component\VarDumper\Caster\DateCaster;
 use Symfony\Component\VarDumper\Cloner\Stub;
 use Symfony\Component\VarDumper\Test\VarDumperTestTrait;
+use Symfony\Component\VarDumper\Tests\Fixtures\DateTimeChild;
 
 /**
  * @author Dany Maillard <danymaillard93b@gmail.com>
@@ -55,7 +56,7 @@ public function testCastDateTime($time, $timezone, $xDate, $xTimestamp, $xInfos)
 
         $stub = new Stub();
         $date = new \DateTime($time, new \DateTimeZone($timezone));
-        $cast = DateCaster::castDateTime($date, ['foo' => 'bar'], $stub, false, 0);
+        $cast = DateCaster::castDateTime($date, Caster::castObject($date, \DateTime::class), $stub, false, 0);
 
         $xDump = <<<EODUMP
 array:1 [
@@ -97,12 +98,46 @@ public function provideDateTimes()
         ];
     }
 
+    public function testCastDateTimeWithAdditionalChildProperty()
+    {
+        $stub = new Stub();
+        $date = new DateTimeChild('2020-02-13 00:00:00.123456', new \DateTimeZone('Europe/Paris'));
+        $objectCast = Caster::castObject($date, DateTimeChild::class);
+        $dateCast = DateCaster::castDateTime($date, $objectCast, $stub, false, 0);
+
+        $xDate = '2020-02-13 00:00:00.123456 Europe/Paris (+01:00)';
+        $xInfo = 'Thursday, February 13, 2020%Afrom now';
+        $xDump = <<<EODUMP
+array:2 [
+  "\\x00Symfony\Component\VarDumper\Tests\Fixtures\DateTimeChild\\x00addedProperty" => "foo"
+  "\\x00~\\x00date" => $xDate
+]
+EODUMP;
+
+        $this->assertDumpEquals($xDump, $dateCast);
+
+        $xDump = <<<EODUMP
+Symfony\Component\VarDumper\Caster\ConstStub {
+  +type: 1
+  +class: "$xDate"
+  +value: "%A$xInfo%A"
+  +cut: 0
+  +handle: 0
+  +refCount: 0
+  +position: 0
+  +attr: []
+}
+EODUMP;
+
+        $this->assertDumpMatchesFormat($xDump, $dateCast["\0~\0date"]);
+    }
+
     /**
      * @dataProvider provideIntervals
      */
     public function testDumpInterval($intervalSpec, $ms, $invert, $expected)
     {
-        if ($ms && \PHP_VERSION_ID >= 70200 && version_compare(PHP_VERSION, '7.2.0rc3', '<=')) {
+        if ($ms && \PHP_VERSION_ID >= 70200 && version_compare(\PHP_VERSION, '7.2.0rc3', '<=')) {
             $this->markTestSkipped('Skipped on 7.2 before rc4 because of php bug #75354.');
         }
 
@@ -122,7 +157,7 @@ public function testDumpInterval($intervalSpec, $ms, $invert, $expected)
      */
     public function testDumpIntervalExcludingVerbosity($intervalSpec, $ms, $invert, $expected)
     {
-        if ($ms && \PHP_VERSION_ID >= 70200 && version_compare(PHP_VERSION, '7.2.0rc3', '<=')) {
+        if ($ms && \PHP_VERSION_ID >= 70200 && version_compare(\PHP_VERSION, '7.2.0rc3', '<=')) {
             $this->markTestSkipped('Skipped on 7.2 before rc4 because of php bug #75354.');
         }
 
@@ -142,7 +177,7 @@ public function testDumpIntervalExcludingVerbosity($intervalSpec, $ms, $invert,
      */
     public function testCastInterval($intervalSpec, $ms, $invert, $xInterval, $xSeconds)
     {
-        if ($ms && \PHP_VERSION_ID >= 70200 && version_compare(PHP_VERSION, '7.2.0rc3', '<=')) {
+        if ($ms && \PHP_VERSION_ID >= 70200 && version_compare(\PHP_VERSION, '7.2.0rc3', '<=')) {
             $this->markTestSkipped('Skipped on 7.2 before rc4 because of php bug #75354.');
         }
 
diff --git a/vendor/symfony/var-dumper/Tests/Caster/ExceptionCasterTest.php b/vendor/symfony/var-dumper/Tests/Caster/ExceptionCasterTest.php
index ea83e77163d1932652b94f97a14246925bae408a..738180f5b22dc8db1d298377d0a7a69329e91a08 100644
--- a/vendor/symfony/var-dumper/Tests/Caster/ExceptionCasterTest.php
+++ b/vendor/symfony/var-dumper/Tests/Caster/ExceptionCasterTest.php
@@ -52,7 +52,6 @@ public function testDefaultSettings()
       › }
     }
     %s%eTests%eCaster%eExceptionCasterTest.php:40 { …}
-    Symfony\Component\VarDumper\Tests\Caster\ExceptionCasterTest->testDefaultSettings() {}
 %A
 EODUMP;
 
@@ -71,8 +70,7 @@ public function testSeek()
     ›     return new \Exception(''.$msg);
     › }
   }
-  %s%eTests%eCaster%eExceptionCasterTest.php:65 { …}
-  Symfony\Component\VarDumper\Tests\Caster\ExceptionCasterTest->testSeek() {}
+  %s%eTests%eCaster%eExceptionCasterTest.php:64 { …}
 %A
 EODUMP;
 
@@ -96,8 +94,7 @@ public function testNoArgs()
       ›     return new \Exception(''.$msg);
       › }
     }
-    %s%eTests%eCaster%eExceptionCasterTest.php:84 { …}
-    Symfony\Component\VarDumper\Tests\Caster\ExceptionCasterTest->testNoArgs() {}
+    %s%eTests%eCaster%eExceptionCasterTest.php:82 { …}
 %A
 EODUMP;
 
diff --git a/vendor/symfony/var-dumper/Tests/Caster/PdoCasterTest.php b/vendor/symfony/var-dumper/Tests/Caster/PdoCasterTest.php
index 19bbe0f80c43b59e497cedbfe463df4acb25930f..fca242cfc6e9f91f48b33907f8c76cc91a43d7bc 100644
--- a/vendor/symfony/var-dumper/Tests/Caster/PdoCasterTest.php
+++ b/vendor/symfony/var-dumper/Tests/Caster/PdoCasterTest.php
@@ -30,6 +30,7 @@ public function testCastPdo()
     {
         $pdo = new \PDO('sqlite::memory:');
         $pdo->setAttribute(\PDO::ATTR_STATEMENT_CLASS, ['PDOStatement', [$pdo]]);
+        $pdo->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
 
         $cast = PdoCaster::castPdo($pdo, [], new Stub(), false);
 
@@ -45,7 +46,7 @@ public function testCastPdo()
   "\x00~\x00inTransaction" => false
   "\x00~\x00attributes" => array:9 [
     "CASE" => NATURAL
-    "ERRMODE" => SILENT
+    "ERRMODE" => EXCEPTION
     "PERSISTENT" => false
     "DRIVER_NAME" => "sqlite"
     "ORACLE_NULLS" => NATURAL
diff --git a/vendor/symfony/var-dumper/Tests/Caster/ReflectionCasterTest.php b/vendor/symfony/var-dumper/Tests/Caster/ReflectionCasterTest.php
index 37e14966f4f67cd29a392260f24078978aece1cd..17ad5434beec26cdc5add898dd9e6701641feb4b 100644
--- a/vendor/symfony/var-dumper/Tests/Caster/ReflectionCasterTest.php
+++ b/vendor/symfony/var-dumper/Tests/Caster/ReflectionCasterTest.php
@@ -49,8 +49,8 @@ public function testReflectionCaster()
 %A]
   methods: array:%d [
 %A
-    "export" => ReflectionMethod {
-      +name: "export"
+    "__construct" => ReflectionMethod {
+      +name: "__construct"
       +class: "ReflectionClass"
 %A    parameters: {
         $%s: ReflectionParameter {
@@ -129,7 +129,7 @@ class: "Symfony\Component\VarDumper\Tests\Caster\ReflectionCasterTest"
 
     public function testReflectionParameter()
     {
-        $var = new \ReflectionParameter(__NAMESPACE__.'\reflectionParameterFixture', 0);
+        $var = new \ReflectionParameter(reflectionParameterFixture::class, 0);
 
         $this->assertDumpMatchesFormat(
             <<<'EOTXT'
diff --git a/vendor/symfony/var-dumper/Tests/Caster/SplCasterTest.php b/vendor/symfony/var-dumper/Tests/Caster/SplCasterTest.php
index 984b340c6d70dbb10eb8ec46044dcc1e8380d338..a8c37faf3f346830aefd5e2714a47dee393d5ddf 100644
--- a/vendor/symfony/var-dumper/Tests/Caster/SplCasterTest.php
+++ b/vendor/symfony/var-dumper/Tests/Caster/SplCasterTest.php
@@ -50,12 +50,12 @@ public function getCastFileInfoTests()
 %A}
 EOTXT
             ],
-            ['https://google.com/about', <<<'EOTXT'
+            ['https://example.com/about', <<<'EOTXT'
 SplFileInfo {
-%Apath: "https://google.com"
+%Apath: "https://example.com"
   filename: "about"
   basename: "about"
-  pathname: "https://google.com/about"
+  pathname: "https://example.com/about"
   extension: ""
   realPath: false
 %A}
@@ -175,14 +175,17 @@ public function testCastArrayObject()
         $expected = <<<EOTXT
 ArrayObject {
   +"foo": 234
+  -storage: array:1 [
+    0 => 123
+  ]
   flag::STD_PROP_LIST: false
   flag::ARRAY_AS_PROPS: false
   iteratorClass: "ArrayIterator"
-  storage: array:1 [
-    0 => 123
-  ]
 }
 EOTXT;
+        if (\PHP_VERSION_ID < 70400) {
+            $expected = str_replace('-storage:', 'storage:', $expected);
+        }
         $this->assertDumpEquals($expected, $var);
     }
 
@@ -196,11 +199,26 @@ public function testArrayIterator()
         $expected = <<<EOTXT
 Symfony\Component\VarDumper\Tests\Caster\MyArrayIterator {
   -foo: 123
-  flag::STD_PROP_LIST: false
-  flag::ARRAY_AS_PROPS: false
-  storage: array:1 [
+  -storage: array:1 [
     0 => 234
   ]
+  flag::STD_PROP_LIST: false
+  flag::ARRAY_AS_PROPS: false
+}
+EOTXT;
+        if (\PHP_VERSION_ID < 70400) {
+            $expected = str_replace('-storage:', 'storage:', $expected);
+        }
+        $this->assertDumpEquals($expected, $var);
+    }
+
+    public function testBadSplFileInfo()
+    {
+        $var = new BadSplFileInfo();
+
+        $expected = <<<EOTXT
+Symfony\Component\VarDumper\Tests\Caster\BadSplFileInfo {
+  ⚠: "The parent constructor was not called: the object is in an invalid state"
 }
 EOTXT;
         $this->assertDumpEquals($expected, $var);
@@ -211,3 +229,10 @@ class MyArrayIterator extends \ArrayIterator
 {
     private $foo = 123;
 }
+
+class BadSplFileInfo extends \SplFileInfo
+{
+    public function __construct()
+    {
+    }
+}
diff --git a/vendor/symfony/var-dumper/Tests/Cloner/DataTest.php b/vendor/symfony/var-dumper/Tests/Cloner/DataTest.php
index 7d20bced35a4f46b0b04f7f383f822374b98af5d..d4b6c24c1163f5e6c2c82c172847b2807c67395e 100644
--- a/vendor/symfony/var-dumper/Tests/Cloner/DataTest.php
+++ b/vendor/symfony/var-dumper/Tests/Cloner/DataTest.php
@@ -69,7 +69,7 @@ public function testArray()
 
         $children = $data->getValue();
 
-        $this->assertInternalType('array', $children);
+        $this->assertIsArray($children);
 
         $this->assertInstanceOf(Data::class, $children[0]);
         $this->assertInstanceOf(Data::class, $children[1]);
diff --git a/vendor/symfony/var-dumper/Tests/Cloner/VarClonerTest.php b/vendor/symfony/var-dumper/Tests/Cloner/VarClonerTest.php
index 3b180af49810dcd7cea34235e23bba9a70ab3245..e37482fca9c16608bcbe9f1bb8c345f364a853d0 100644
--- a/vendor/symfony/var-dumper/Tests/Cloner/VarClonerTest.php
+++ b/vendor/symfony/var-dumper/Tests/Cloner/VarClonerTest.php
@@ -13,6 +13,7 @@
 
 use PHPUnit\Framework\TestCase;
 use Symfony\Component\VarDumper\Cloner\VarCloner;
+use Symfony\Component\VarDumper\Tests\Fixtures\Php74;
 
 /**
  * @author Nicolas Grekas <p@tchwork.com>
@@ -21,7 +22,7 @@ class VarClonerTest extends TestCase
 {
     public function testMaxIntBoundary()
     {
-        $data = [PHP_INT_MAX => 123];
+        $data = [\PHP_INT_MAX => 123];
 
         $cloner = new VarCloner();
         $clone = $cloner->cloneVar($data);
@@ -55,7 +56,7 @@ public function testMaxIntBoundary()
 )
 
 EOTXT;
-        $this->assertSame(sprintf($expected, PHP_INT_MAX), print_r($clone, true));
+        $this->assertSame(sprintf($expected, \PHP_INT_MAX), print_r($clone, true));
     }
 
     public function testClone()
@@ -161,7 +162,7 @@ public function testLimits()
                     'Level 3 Item 3',
                 ],
                 [
-                    'Level 3 Item 4',
+                    999 => 'Level 3 Item 4',
                     'Level 3 Item 5',
                     'Level 3 Item 6',
                 ],
@@ -241,7 +242,7 @@ public function testLimits()
                     [1] => Array
                         (
                             [0] => 2
-                            [2] => 7
+                            [1] => 7
                         )
 
                     [2] => Array
@@ -298,7 +299,7 @@ public function testLimits()
 
             [7] => Array
                 (
-                    [0] => Level 3 Item 4
+                    [999] => Level 3 Item 4
                 )
 
         )
@@ -431,6 +432,73 @@ public function testCaster()
     [useRefHandles:Symfony\Component\VarDumper\Cloner\Data:private] => -1
 )
 
+EOTXT;
+        $this->assertStringMatchesFormat($expected, print_r($clone, true));
+    }
+
+    /**
+     * @requires PHP 7.4
+     */
+    public function testPhp74()
+    {
+        $data = new Php74();
+
+        $cloner = new VarCloner();
+        $clone = $cloner->cloneVar($data);
+
+        $expected = <<<'EOTXT'
+Symfony\Component\VarDumper\Cloner\Data Object
+(
+    [data:Symfony\Component\VarDumper\Cloner\Data:private] => Array
+        (
+            [0] => Array
+                (
+                    [0] => Symfony\Component\VarDumper\Cloner\Stub Object
+                        (
+                            [type] => 4
+                            [class] => Symfony\Component\VarDumper\Tests\Fixtures\Php74
+                            [value] => 
+                            [cut] => 0
+                            [handle] => %i
+                            [refCount] => 0
+                            [position] => 1
+                            [attr] => Array
+                                (
+                                )
+
+                        )
+
+                )
+
+            [1] => Array
+                (
+                    [p1] => 123
+                    [p2] => Symfony\Component\VarDumper\Cloner\Stub Object
+                        (
+                            [type] => 4
+                            [class] => stdClass
+                            [value] => 
+                            [cut] => 0
+                            [handle] => %i
+                            [refCount] => 0
+                            [position] => 0
+                            [attr] => Array
+                                (
+                                )
+
+                        )
+
+                )
+
+        )
+
+    [position:Symfony\Component\VarDumper\Cloner\Data:private] => 0
+    [key:Symfony\Component\VarDumper\Cloner\Data:private] => 0
+    [maxDepth:Symfony\Component\VarDumper\Cloner\Data:private] => 20
+    [maxItemsPerDepth:Symfony\Component\VarDumper\Cloner\Data:private] => -1
+    [useRefHandles:Symfony\Component\VarDumper\Cloner\Data:private] => -1
+)
+
 EOTXT;
         $this->assertStringMatchesFormat($expected, print_r($clone, true));
     }
diff --git a/vendor/symfony/var-dumper/Tests/Dumper/CliDumperTest.php b/vendor/symfony/var-dumper/Tests/Dumper/CliDumperTest.php
index 9520b4fe102e7edd6c6dd8ad2208eaf9e3601787..6fae0843a9d0e28f1351704d88038b2d27b920ac 100644
--- a/vendor/symfony/var-dumper/Tests/Dumper/CliDumperTest.php
+++ b/vendor/symfony/var-dumper/Tests/Dumper/CliDumperTest.php
@@ -13,6 +13,7 @@
 
 use PHPUnit\Framework\TestCase;
 use Symfony\Component\VarDumper\Cloner\VarCloner;
+use Symfony\Component\VarDumper\Dumper\AbstractDumper;
 use Symfony\Component\VarDumper\Dumper\CliDumper;
 use Symfony\Component\VarDumper\Test\VarDumperTestTrait;
 use Twig\Environment;
@@ -45,7 +46,7 @@ public function testGet()
         $dumper->dump($data);
         $out = ob_get_clean();
         $out = preg_replace('/[ \t]+$/m', '', $out);
-        $intMax = PHP_INT_MAX;
+        $intMax = \PHP_INT_MAX;
         $res = (int) $var['res'];
 
         $r = \defined('HHVM_VERSION') ? '' : '#%d';
@@ -203,6 +204,7 @@ public function provideDumpWithCommaFlagTests()
 
     /**
      * @requires extension xml
+     * @requires PHP < 8.0
      */
     public function testXmlResource()
     {
@@ -571,6 +573,57 @@ public function testIncompleteClass()
         );
     }
 
+    public function provideDumpArrayWithColor()
+    {
+        yield [
+            ['foo' => 'bar'],
+            0,
+            <<<EOTXT
+\e[0;38;5;208m\e[38;5;38marray:1\e[0;38;5;208m [\e[m
+  \e[0;38;5;208m"\e[38;5;113mfoo\e[0;38;5;208m" => "\e[1;38;5;113mbar\e[0;38;5;208m"\e[m
+\e[0;38;5;208m]\e[m
+
+EOTXT
+        ];
+
+        yield [[], AbstractDumper::DUMP_LIGHT_ARRAY, "\e[0;38;5;208m[]\e[m\n"];
+
+        yield [
+            ['foo' => 'bar'],
+            AbstractDumper::DUMP_LIGHT_ARRAY,
+            <<<EOTXT
+\e[0;38;5;208m[\e[m
+  \e[0;38;5;208m"\e[38;5;113mfoo\e[0;38;5;208m" => "\e[1;38;5;113mbar\e[0;38;5;208m"\e[m
+\e[0;38;5;208m]\e[m
+
+EOTXT
+        ];
+
+        yield [[], 0, "\e[0;38;5;208m[]\e[m\n"];
+    }
+
+    /**
+     * @dataProvider provideDumpArrayWithColor
+     */
+    public function testDumpArrayWithColor($value, $flags, $expectedOut)
+    {
+        if ('\\' === \DIRECTORY_SEPARATOR) {
+            $this->markTestSkipped('Windows console does not support coloration');
+        }
+
+        $out = '';
+        $dumper = new CliDumper(function ($line, $depth) use (&$out) {
+            if ($depth >= 0) {
+                $out .= str_repeat('  ', $depth).$line."\n";
+            }
+        }, null, $flags);
+        $dumper->setColors(true);
+        $cloner = new VarCloner();
+        $dumper->dump($cloner->cloneVar($value));
+
+        $this->assertSame($expectedOut, $out);
+    }
+
     private function getSpecialVars()
     {
         foreach (array_keys($GLOBALS) as $var) {
diff --git a/vendor/symfony/var-dumper/Tests/Dumper/FunctionsTest.php b/vendor/symfony/var-dumper/Tests/Dumper/FunctionsTest.php
index 0bd596c2adc440caa54ec18e54aff5473fc62eaf..7444d4bf58425ad4218cde0c38945710d0fd970b 100644
--- a/vendor/symfony/var-dumper/Tests/Dumper/FunctionsTest.php
+++ b/vendor/symfony/var-dumper/Tests/Dumper/FunctionsTest.php
@@ -26,7 +26,7 @@ public function testDumpReturnsFirstArg()
 
         ob_start();
         $return = dump($var1);
-        $out = ob_get_clean();
+        ob_end_clean();
 
         $this->assertEquals($var1, $return);
     }
@@ -41,7 +41,7 @@ public function testDumpReturnsAllArgsInArray()
 
         ob_start();
         $return = dump($var1, $var2, $var3);
-        $out = ob_get_clean();
+        ob_end_clean();
 
         $this->assertEquals([$var1, $var2, $var3], $return);
     }
diff --git a/vendor/symfony/var-dumper/Tests/Dumper/HtmlDumperTest.php b/vendor/symfony/var-dumper/Tests/Dumper/HtmlDumperTest.php
index 8a7e68ebf0c0ec92c56cd1b6fbab1faf6d23f563..d91fda265bc262503db25b65b27235d8f4d9e27a 100644
--- a/vendor/symfony/var-dumper/Tests/Dumper/HtmlDumperTest.php
+++ b/vendor/symfony/var-dumper/Tests/Dumper/HtmlDumperTest.php
@@ -45,8 +45,8 @@ public function testGet()
         $dumper->dump($data);
         $out = ob_get_clean();
         $out = preg_replace('/[ \t]+$/m', '', $out);
-        $var['file'] = htmlspecialchars($var['file'], ENT_QUOTES, 'UTF-8');
-        $intMax = PHP_INT_MAX;
+        $var['file'] = htmlspecialchars($var['file'], \ENT_QUOTES, 'UTF-8');
+        $intMax = \PHP_INT_MAX;
         preg_match('/sf-dump-\d+/', $out, $dumpId);
         $dumpId = $dumpId[0];
         $res = (int) $var['res'];
diff --git a/vendor/symfony/var-dumper/Tests/Fixtures/DateTimeChild.php b/vendor/symfony/var-dumper/Tests/Fixtures/DateTimeChild.php
new file mode 100644
index 0000000000000000000000000000000000000000..2ea2df6514ae0472dd2cff40a26963210372fd2c
--- /dev/null
+++ b/vendor/symfony/var-dumper/Tests/Fixtures/DateTimeChild.php
@@ -0,0 +1,8 @@
+<?php
+
+namespace Symfony\Component\VarDumper\Tests\Fixtures;
+
+class DateTimeChild extends \DateTime
+{
+    private $addedProperty = 'foo';
+}
diff --git a/vendor/symfony/var-dumper/Tests/Fixtures/Php74.php b/vendor/symfony/var-dumper/Tests/Fixtures/Php74.php
new file mode 100644
index 0000000000000000000000000000000000000000..724fbeb7bdb6e33db47f30e721e303cebfbe6840
--- /dev/null
+++ b/vendor/symfony/var-dumper/Tests/Fixtures/Php74.php
@@ -0,0 +1,14 @@
+<?php
+
+namespace Symfony\Component\VarDumper\Tests\Fixtures;
+
+class Php74
+{
+    public $p1 = 123;
+    public \stdClass $p2;
+
+    public function __construct()
+    {
+        $this->p2 = new \stdClass();
+    }
+}
diff --git a/vendor/symfony/var-dumper/composer.json b/vendor/symfony/var-dumper/composer.json
index d31e0b495abb9ccec6fcfc01fd47be2ad0e877fa..9f2352ee2569c0f21edb5b1ff9cef38dab92ba8a 100644
--- a/vendor/symfony/var-dumper/composer.json
+++ b/vendor/symfony/var-dumper/composer.json
@@ -38,10 +38,5 @@
             "/Tests/"
         ]
     },
-    "minimum-stability": "dev",
-    "extra": {
-        "branch-alias": {
-            "dev-master": "3.4-dev"
-        }
-    }
+    "minimum-stability": "dev"
 }
diff --git a/vendor/webflo/drupal-finder/.travis.yml b/vendor/webflo/drupal-finder/.travis.yml
index fa99cec6c446991f7ea7b8dd0ff7b39839d7d8fd..e54f94b5d50df0f0071eebc8ce11116eeef0ac20 100644
--- a/vendor/webflo/drupal-finder/.travis.yml
+++ b/vendor/webflo/drupal-finder/.travis.yml
@@ -1,6 +1,5 @@
 language: php
 php:
-  - 5.5
   - 5.6
   - 7.0
 
diff --git a/vendor/webflo/drupal-finder/LICENSE.txt b/vendor/webflo/drupal-finder/LICENSE.txt
new file mode 100644
index 0000000000000000000000000000000000000000..94fb84639c4b6ff359e47a124d8fb4a3aba7a386
--- /dev/null
+++ b/vendor/webflo/drupal-finder/LICENSE.txt
@@ -0,0 +1,339 @@
+        GNU GENERAL PUBLIC LICENSE
+           Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+          Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+        GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+          NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+         END OF TERMS AND CONDITIONS
+
+      How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.
diff --git a/vendor/webflo/drupal-finder/composer.json b/vendor/webflo/drupal-finder/composer.json
index fe0558892db695fca42e4d1056e7af486a3c4972..d07d9de7105896e9eff6fb5998f73691125af672 100644
--- a/vendor/webflo/drupal-finder/composer.json
+++ b/vendor/webflo/drupal-finder/composer.json
@@ -1,7 +1,7 @@
 {
     "name": "webflo/drupal-finder",
     "description": "Helper class to locate a Drupal installation from a given path.",
-    "license": "GPL-2.0+",
+    "license": "GPL-2.0-or-later",
     "type": "library",
     "authors": [
         {
@@ -9,7 +9,9 @@
             "email": "florian@webflo.org"
         }
     ],
-    "require": {},
+    "require": {
+        "ext-json": "*"
+    },
     "autoload": {
         "classmap": [
             "src/DrupalFinder.php"
@@ -22,6 +24,6 @@
     },
     "require-dev": {
         "phpunit/phpunit": "^4.8",
-        "mikey179/vfsStream": "^1.6"
+        "mikey179/vfsstream": "^1.6"
     }
 }
diff --git a/vendor/webflo/drupal-finder/src/DrupalFinder.php b/vendor/webflo/drupal-finder/src/DrupalFinder.php
index 642ea8f78ca9c0bef612e7e01f09390742d4b1db..fe62ec45d4488da932968a16349955b68a5faf5c 100644
--- a/vendor/webflo/drupal-finder/src/DrupalFinder.php
+++ b/vendor/webflo/drupal-finder/src/DrupalFinder.php
@@ -102,6 +102,11 @@ protected function isValidRoot($path)
                 file_get_contents($path . '/' . $this->getComposerFileName()),
                 true
             );
+
+            if (is_null($json)) {
+                throw new \Exception('Unable to decode ' . $path . '/' . $this->getComposerFileName());
+            }
+
             if (is_array($json)) {
                 if (isset($json['extra']['installer-paths']) && is_array($json['extra']['installer-paths'])) {
                     foreach ($json['extra']['installer-paths'] as $install_path => $items) {
@@ -110,8 +115,8 @@ protected function isValidRoot($path)
                             in_array('drupal/drupal', $items)) {
                             $this->composerRoot = $path;
                             // @todo: Remove this magic and detect the major version instead.
-                            if ($install_path == 'core') {
-                                $install_path = null;
+                            if (($install_path == 'core') || ((isset($json['name'])) && ($json['name'] == 'drupal/drupal'))) {
+                                $install_path = '';
                             } elseif (substr($install_path, -5) == '/core') {
                                 $install_path = substr($install_path, 0, -5);
                             }
diff --git a/vendor/webflo/drupal-finder/tests/Drupal8FinderTest.php b/vendor/webflo/drupal-finder/tests/Drupal8FinderTest.php
index ad8495489e51a64bf14ffd9cb68f46fdd2585ea5..87a0cca323cca500c76b339ffd0395c412dac5cc 100644
--- a/vendor/webflo/drupal-finder/tests/Drupal8FinderTest.php
+++ b/vendor/webflo/drupal-finder/tests/Drupal8FinderTest.php
@@ -30,6 +30,34 @@ class Drupal8FinderTest extends DrupalFinderTestBase
         'vendor' => [],
     ];
 
+    protected static $fileStructureDrupal_8_8_x = [
+        'autoload.php' => '',
+        'composer.json' => [
+            'name' => 'drupal/drupal',
+            'require' => [
+                'drupal/core' => 'self.version',
+            ],
+            'extra' => [
+                'installer-paths' => [
+                    'vendor/drupal/core' => [
+                        'type:drupal-core',
+                    ],
+                ],
+            ],
+        ],
+        'core' => [
+            'includes' => [
+                'common.inc' => '',
+            ],
+            'misc' => [
+                'drupal.js' => '',
+            ],
+            'core.services.yml' => '',
+        ],
+        'modules' => [],
+        'vendor' => [],
+    ];
+
     /**
      * @return array
      */
@@ -91,6 +119,34 @@ public function testDrupalDefaultStructure()
         $this->assertFalse($this->finder->getVendorDir());
     }
 
+    public function testDrupalDefaultStructure_8_8_x()
+    {
+        $root = vfsStream::setup('root', null, $this->prepareFileStructure(static::$fileStructureDrupal_8_8_x));
+
+        $this->assertTrue($this->finder->locateRoot($root->url()));
+        $this->assertSame('vfs://root', $this->finder->getDrupalRoot());
+        $this->assertSame('vfs://root', $this->finder->getComposerRoot());
+        $this->assertSame('vfs://root/vendor', $this->finder->getVendorDir());
+
+        $this->assertTrue($this->finder->locateRoot($root->url() . '/misc'));
+        $this->assertSame('vfs://root', $this->finder->getDrupalRoot());
+        $this->assertSame('vfs://root', $this->finder->getComposerRoot());
+        $this->assertSame('vfs://root/vendor', $this->finder->getVendorDir());
+
+        $root = vfsStream::setup(
+          'root',
+          null,
+          ['project' => $this->prepareFileStructure(static::$fileStructure)]
+        );
+        $this->assertFalse(
+          $this->finder->locateRoot($root->url()),
+          'Not in the scope of the project'
+        );
+        $this->assertFalse($this->finder->getDrupalRoot());
+        $this->assertFalse($this->finder->getComposerRoot());
+        $this->assertFalse($this->finder->getVendorDir());
+    }
+
     public function testDrupalComposerStructure()
     {
         $fileStructure = $this->getDrupalComposerStructure();
diff --git a/vendor/zaporylie/composer-drupal-optimizations/.gitignore b/vendor/zaporylie/composer-drupal-optimizations/.gitignore
deleted file mode 100644
index 6de133df8699783b224eeec70a2d8ef924399b01..0000000000000000000000000000000000000000
--- a/vendor/zaporylie/composer-drupal-optimizations/.gitignore
+++ /dev/null
@@ -1,4 +0,0 @@
-/vendor/
-composer.lock
-.phpunit.result.cache
-/test
diff --git a/vendor/zaporylie/composer-drupal-optimizations/.travis.yml b/vendor/zaporylie/composer-drupal-optimizations/.travis.yml
deleted file mode 100644
index addd8891069a3647d046d07943c11a0cb9e3cc8b..0000000000000000000000000000000000000000
--- a/vendor/zaporylie/composer-drupal-optimizations/.travis.yml
+++ /dev/null
@@ -1,47 +0,0 @@
-language: php
-dist: trusty
-sudo: false
-
-php:
-  - 5.6
-  - 7.0
-  - 7.1
-  - 7.2
-  - 7.3
-
-env:
-  matrix:
-    - RELEASE=stable COMPOSER_CHANNEL=stable
-    - RELEASE=dev COMPOSER_CHANNEL=stable
-    - RELEASE=stable COMPOSER_CHANNEL=snapshot
-
-matrix:
-  exclude:
-    - php: 5.6
-      env: RELEASE=dev COMPOSER_CHANNEL=stable
-    - php: 5.6
-      env: RELEASE=stable COMPOSER_CHANNEL=snapshot
-
-before_install:
-  - if [[ $TRAVIS_PHP_VERSION = 5.6 ]]; then export COMPOSER_MEMORY_LIMIT=-1; fi;
-  - composer --verbose self-update --$COMPOSER_CHANNEL
-  - composer --version
-
-install:
-  - composer --verbose validate
-
-script:
-  # Run automated tests.
-  - if [[ ${TRAVIS_PHP_VERSION:0:3} != "5.6" ]]; then composer install && ./vendor/bin/phpunit; fi
-  - cd .. && composer create-project drupal-composer/drupal-project:8.x-dev drupal-project --stability dev --no-interaction
-  - ls -lah . && cd drupal-project
-  # zaporylie/composer-drupal-optimizations has been added to drupal-composer/drupal-project and now must be removed
-  # in order to measure the performance change.
-  - composer remove zaporylie/composer-drupal-optimizations
-  - if [[ $RELEASE = dev ]]; then composer --verbose require --no-update --dev webflo/drupal-core-require-dev:8.6.x-dev; fi;
-  - if [[ $RELEASE = dev ]]; then composer --verbose require --no-update drupal/core:8.6.x-dev; fi;
-  - if [[ $RELEASE = dev ]]; then composer --verbose update; fi;
-  # Check the performance.
-  - composer update nothing --profile
-  - composer config repositories.local path "../composer-drupal-optimizations" && composer require zaporylie/composer-drupal-optimizations:@dev
-  - composer update nothing --profile
diff --git a/vendor/zaporylie/composer-drupal-optimizations/README.md b/vendor/zaporylie/composer-drupal-optimizations/README.md
deleted file mode 100644
index 182be1a5d9c8d81660a903ea093f977d9bf0deb8..0000000000000000000000000000000000000000
--- a/vendor/zaporylie/composer-drupal-optimizations/README.md
+++ /dev/null
@@ -1,68 +0,0 @@
-Optimize Composer for Drupal projects
-====
-[![Build Status](https://travis-ci.org/zaporylie/composer-drupal-optimizations.svg?branch=master)](https://travis-ci.org/zaporylie/composer-drupal-optimizations)
-![Packagist](https://img.shields.io/packagist/v/zaporylie/composer-drupal-optimizations.svg)
-
-
-# About
-
-This composer-plugin contains set of improvements that makes running heavy duty composer commands (i.e. `composer update` or `composer require`) much faster.
-
-# Installation
-
-```bash
-composer require zaporylie/composer-drupal-optimizations:^1.0
-```
-
-No configuration required 🎊
-
-# Optimizations
-
-- Reduce memory usage and CPU usage by removing legacy symfony tags
-
-# Benchmark
-
-Following numbers are for clean https://github.com/drupal-composer/drupal-project/ without and with this plugin.
-
-Before:
-
-```
-Memory usage: 323.19MB (peak: 1121.09MB), time: 13.68s
-```
-
-After:
-
-```
-Memory usage: 238.66MB (peak: 297.17MB), time: 4.84s
-```
-
-> php 7.2, macOS High Sierra, i7, 16GB RAM
-
-# Configuration
-
-If no configuration is provided this package will provide sensible defaults based on the content of project's composer.json
-file. Default configuration should cover 99% of the cases. However, in case you want to manually specify the tags
-that should be filtered out you are welcome to use the `extra` section:
-
-```json
-{
-  "extra": {
-    "composer-drupal-optimizations": {
-      "require": {
-        "symfony/symfony": ">3.4"
-      }
-    }
-  }
-}
-```
-
-***Recommendation note:***
-Use defaults (skip config above) if possible - this package will be maintained throughout the Drupal's lifecycle in order
-to optimize legacy constraints in parallel with Drupal's requirements.
-
-All you have to do is to make sure your drupal core constraint is set to `drupal/core: ^8.5` or above.
-
-# Credits
-
-- Symfony community - idea and development; Special thanks to @nicolas-grekas
-- Jakub Piasecki - port and maintenance
diff --git a/vendor/zaporylie/composer-drupal-optimizations/composer.json b/vendor/zaporylie/composer-drupal-optimizations/composer.json
deleted file mode 100644
index 415f844a3f9b2e030734c14b74e787373cc2eea8..0000000000000000000000000000000000000000
--- a/vendor/zaporylie/composer-drupal-optimizations/composer.json
+++ /dev/null
@@ -1,27 +0,0 @@
-{
-    "name": "zaporylie/composer-drupal-optimizations",
-    "description": "Composer plugin to improve composer performance for Drupal projects",
-    "type": "composer-plugin",
-    "license": "GPL-2.0-or-later",
-    "authors": [
-        {
-            "name": "Jakub Piasecki",
-            "email": "jakub@piaseccy.pl"
-        }
-    ],
-    "require": {
-        "composer-plugin-api": "^1.1"
-    },
-    "require-dev": {
-        "composer/composer": "^1.6",
-        "phpunit/phpunit": "^6"
-    },
-    "autoload": {
-        "psr-4": {
-            "zaporylie\\ComposerDrupalOptimizations\\": "src/"
-        }
-    },
-    "extra": {
-        "class": "zaporylie\\ComposerDrupalOptimizations\\Plugin"
-    }
-}
diff --git a/vendor/zaporylie/composer-drupal-optimizations/phpunit.xml.dist b/vendor/zaporylie/composer-drupal-optimizations/phpunit.xml.dist
deleted file mode 100644
index 179ca29b14e1c05dd96fb283427d7452ec5d92e7..0000000000000000000000000000000000000000
--- a/vendor/zaporylie/composer-drupal-optimizations/phpunit.xml.dist
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<phpunit backupGlobals="true"
-         backupStaticAttributes="false"
-         colors="true"
-         convertErrorsToExceptions="true"
-         convertNoticesToExceptions="true"
-         convertWarningsToExceptions="true"
-         processIsolation="false"
-         stopOnFailure="false"
->
-    <testsuites>
-        <testsuite name="Test Suite">
-            <directory>./tests</directory>
-        </testsuite>
-    </testsuites>
-
-    <php>
-        <ini name="error_reporting" value="-1" />
-    </php>
-
-    <filter>
-        <whitelist>
-            <directory>./src/</directory>
-        </whitelist>
-    </filter>
-</phpunit>
diff --git a/vendor/zaporylie/composer-drupal-optimizations/src/Cache.php b/vendor/zaporylie/composer-drupal-optimizations/src/Cache.php
deleted file mode 100644
index 815b43286ea7d5574facbe1b074183b1df080d5c..0000000000000000000000000000000000000000
--- a/vendor/zaporylie/composer-drupal-optimizations/src/Cache.php
+++ /dev/null
@@ -1,127 +0,0 @@
-<?php
-
-namespace zaporylie\ComposerDrupalOptimizations;
-
-use Composer\Cache as BaseCache;
-use Composer\Semver\Constraint\Constraint;
-use Composer\Semver\VersionParser;
-
-/**
- * Class Cache
- * @package zaporylie\ComposerDrupalOptimizations
- */
-class Cache extends BaseCache
-{
-
-    /**
-     * @var array
-     */
-    protected $packages = [];
-
-    /**
-     * @var \Composer\Semver\VersionParser
-     */
-    protected $versionParser;
-
-    /**
-     * {@inheritdoc}
-     */
-    public function read($file)
-    {
-        $content = $this->readFile($file);
-        if (!\is_array($data = json_decode($content, true))) {
-            return $content;
-        }
-        foreach (array_keys($this->packages) as $key) {
-            list($provider, ) = explode('/', $key, 2);
-            if (0 === strpos($file, "provider-$provider\$")) {
-                $data = $this->removeLegacyTags($data);
-                break;
-            }
-        }
-        return json_encode($data);
-    }
-
-    protected function readFile($file)
-    {
-        return parent::read($file);
-    }
-
-    /**
-     * Removes legacy tags from $data.
-     *
-     * @param array $data
-     * @return array
-     */
-    public function removeLegacyTags(array $data)
-    {
-        // Skip if the list of packages is empty.
-        if (!$this->packages || empty($data['packages'])) {
-            return $data;
-        }
-
-        // Skip if none of the packages was found.
-        if (!array_diff_key($data['packages'], $this->packages)) {
-            return $data;
-        }
-
-        foreach ($this->packages as $packageName => $packageVersionConstraint) {
-            if (!isset($data['packages'][$packageName])) {
-                continue;
-            }
-            $packages = [];
-            $specificPackage = $data['packages'][$packageName];
-            foreach ($specificPackage as $version => $composerJson) {
-                if ('dev-master' === $version) {
-                    $normalizedVersion = $this->versionParser->normalize($composerJson['extra']['branch-alias']['dev-master']);
-                } else {
-                    $normalizedVersion = $composerJson['version_normalized'];
-                }
-                $packageConstraint = $this->versionParser->parseConstraints($packageVersionConstraint);
-                $versionConstraint = new Constraint('==', $normalizedVersion);
-                if ($packageConstraint->matches($versionConstraint)) {
-                    $packages += isset($composerJson['replace']) ? $composerJson['replace'] : [];
-                } else {
-                    unset($specificPackage[$version]);
-                }
-            }
-
-            // Ignore requirements: their intersection with versions of the package gives empty result.
-            if (!$specificPackage) {
-                continue;
-            }
-            $data['packages'][$packageName] = $specificPackage;
-
-            unset($specificPackage['dev-master']);
-            foreach ($data['packages'] as $name => $versions) {
-                if (!isset($packages[$name]) || null === $devMasterAlias = (isset($versions['dev-master']['extra']['branch-alias']['dev-master']) ? $versions['dev-master']['extra']['branch-alias']['dev-master'] : null)) {
-                    continue;
-                }
-                $devMaster = $versions['dev-master'];
-                $versions = array_intersect_key($versions, $specificPackage);
-                $packageConstraint = $this->versionParser->parseConstraints($packageVersionConstraint);
-                $versionConstraint = new Constraint('==', $this->versionParser->normalize($devMasterAlias));
-                if ($packageConstraint->matches($versionConstraint)) {
-                    $versions['dev-master'] = $devMaster;
-                }
-                if ($versions) {
-                    $data['packages'][$name] = $versions;
-                }
-            }
-        }
-        return $data;
-
-    }
-
-    /**
-     * @param array $packages
-     *
-     * @return $this
-     */
-    public function setRequiredVersionConstraints(array $packages) {
-        $this->versionParser = new VersionParser();
-        $this->packages = $packages;
-        return $this;
-    }
-
-}
diff --git a/vendor/zaporylie/composer-drupal-optimizations/src/Plugin.php b/vendor/zaporylie/composer-drupal-optimizations/src/Plugin.php
deleted file mode 100644
index 7069aac49cfdbfbec41dc42b4c3b7af619bfb297..0000000000000000000000000000000000000000
--- a/vendor/zaporylie/composer-drupal-optimizations/src/Plugin.php
+++ /dev/null
@@ -1,71 +0,0 @@
-<?php
-
-namespace zaporylie\ComposerDrupalOptimizations;
-
-use Composer\Composer;
-use Composer\Factory;
-use Composer\IO\IOInterface;
-use Composer\Plugin\PluginInterface;
-use Composer\Repository\RepositoryFactory;
-use Composer\Repository\RepositoryManager;
-use Composer\Semver\Constraint\Constraint;
-use Composer\Semver\Constraint\ConstraintInterface;
-
-class Plugin implements PluginInterface
-{
-
-    public function activate(Composer $composer, IOInterface $io)
-    {
-        // Set default version constraints based on the composer requirements.
-        $extra = $composer->getPackage()->getExtra();
-        $packages = $composer->getPackage()->getRequires();
-        if (!isset($extra['composer-drupal-optimizations']['require']) && isset($packages['drupal/core'])) {
-            $coreConstraint = $packages['drupal/core']->getConstraint();
-            $extra['composer-drupal-optimizations']['require'] = static::getDefaultRequire($coreConstraint);
-            if (!empty($extra['composer-drupal-optimizations']['require']) && $io->isVerbose()) {
-                $io->write('Required tags were not explicitly set so the zaporylie/composer-drupal-optimizations set default based on project\'s composer.json content.');
-            }
-        }
-        if (!empty($extra['composer-drupal-optimizations']['require']) && $io->isVerbose()) {
-            foreach ($extra['composer-drupal-optimizations']['require'] as $package => $version) {
-                $io->write(sprintf('extra.commerce-drupal-optimizations.require.%s: \'%s\'', $package, $version));
-            }
-        }
-
-        $rfs = Factory::createRemoteFilesystem($io, $composer->getConfig());
-        $manager = RepositoryFactory::manager($io, $composer->getConfig(), $composer->getEventDispatcher(), $rfs);
-        $setRepositories = \Closure::bind(function (RepositoryManager $manager) use ($extra) {
-            $manager->repositoryClasses = $this->repositoryClasses;
-            $manager->setRepositoryClass('composer', TruncatedComposerRepository::class);
-            $manager->repositories = $this->repositories;
-            $i = 0;
-            foreach (RepositoryFactory::defaultRepos(null, $this->config, $manager) as $repo) {
-                $manager->repositories[$i++] = $repo;
-                if ($repo instanceof TruncatedComposerRepository && !empty($extra['composer-drupal-optimizations']['require'])) {
-                  $repo->setRequiredVersionConstraints($extra['composer-drupal-optimizations']['require']);
-                }
-            }
-            $manager->setLocalRepository($this->getLocalRepository());
-        }, $composer->getRepositoryManager(), RepositoryManager::class);
-        $setRepositories($manager);
-        $composer->setRepositoryManager($manager);
-    }
-
-    /**
-     * Negotiates default require constraint and package for given drupal/core.
-     *
-     * @param \Composer\Semver\Constraint\ConstraintInterface
-     *
-     * @return array
-     */
-    static public function getDefaultRequire(ConstraintInterface $coreConstraint)
-    {
-        if ((new Constraint('>=', '8.5.0'))->matches($coreConstraint)
-          && !(new Constraint('<', '8.5.0'))->matches($coreConstraint)) {
-            return [
-              'symfony/symfony' => '>3.4',
-            ];
-        }
-        return [];
-    }
-}
diff --git a/vendor/zaporylie/composer-drupal-optimizations/src/TruncatedComposerRepository.php b/vendor/zaporylie/composer-drupal-optimizations/src/TruncatedComposerRepository.php
deleted file mode 100644
index 23f8ecf08ba278eb906c226f062952da3e68a5fe..0000000000000000000000000000000000000000
--- a/vendor/zaporylie/composer-drupal-optimizations/src/TruncatedComposerRepository.php
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-
-namespace zaporylie\ComposerDrupalOptimizations;
-
-use Composer\Config;
-use Composer\EventDispatcher\EventDispatcher;
-use Composer\IO\IOInterface;
-use Composer\Repository\ComposerRepository as BaseComposerRepository;
-use Composer\Util\RemoteFilesystem;
-
-class TruncatedComposerRepository extends BaseComposerRepository
-{
-    public function __construct(array $repoConfig, IOInterface $io, Config $config, EventDispatcher $eventDispatcher = null, RemoteFilesystem $rfs = null)
-    {
-        parent::__construct($repoConfig, $io, $config, $eventDispatcher, $rfs);
-        $this->cache = new Cache($io, $config->get('cache-repo-dir').'/'.preg_replace('{[^a-z0-9.]}i', '-', $this->url), 'a-z0-9.$');
-    }
-    protected function fetchFile($filename, $cacheKey = null, $sha256 = null, $storeLastModifiedTime = false)
-    {
-        $data = parent::fetchFile($filename, $cacheKey, $sha256, $storeLastModifiedTime);
-        return \is_array($data) ? $this->cache->removeLegacyTags($data) : $data;
-    }
-    public function setRequiredVersionConstraints(array $packages) {
-        $this->cache->setRequiredVersionConstraints($packages);
-    }
-}
diff --git a/vendor/zaporylie/composer-drupal-optimizations/tests/CacheTest.php b/vendor/zaporylie/composer-drupal-optimizations/tests/CacheTest.php
deleted file mode 100644
index 2eb471fa9b7ddacbdcc02226e798abcbdb179079..0000000000000000000000000000000000000000
--- a/vendor/zaporylie/composer-drupal-optimizations/tests/CacheTest.php
+++ /dev/null
@@ -1,161 +0,0 @@
-<?php
-
-namespace zaporylie\ComposerDrupalOptimizations\Tests;
-
-use Composer\IO\NullIO;
-use PHPUnit\Framework\TestCase;
-use zaporylie\ComposerDrupalOptimizations\Cache;
-
-class CacheTest extends TestCase
-{
-
-    /**
-     * Tests if data is not malformed and only valid array from valid provider
-     * is processed.
-     *
-     * @param $provided
-     * @param $expected
-     *
-     * @dataProvider provideReadTest
-     * @covers \zaporylie\ComposerDrupalOptimizations\Cache::read
-     */
-    public function testRead($provided, $expected)
-    {
-        $cache = new class(new NullIO(), 'test') extends Cache {
-            protected $packages = [
-              'vendor/package' => 'version',
-            ];
-            protected function readFile($file)
-            {
-                // Remove provider - used only for tests.
-                if (0 === strpos($file, 'provider-vendor$')) {
-                    $file = substr($file, 16);
-                }
-                return $file;
-            }
-            public function removeLegacyTags(array $data)
-            {
-                $data['status'] = 'ok';
-                return $data;
-            }
-        };
-        static::assertEquals($expected, $cache->read($provided));
-    }
-
-    /**
-     * Test data.
-     */
-    function provideReadTest()
-    {
-        yield 'normal' => ['{"a":"b"}', '{"a":"b"}'];
-        yield 'falsy' => ['{"a":"b"', '{"a":"b"'];
-        yield 'empty' => ['', ''];
-        yield 'matching-incorrect-provider' => ['{"provider":"vendor"}', '{"provider":"vendor"}'];
-        yield 'matching' => ['provider-vendor${"provider":"vendor"}', '{"provider":"vendor","status":"ok"}'];
-    }
-
-    /**
-     * @dataProvider provideRemoveLegacyTags
-     * @covers \zaporylie\ComposerDrupalOptimizations\Cache::removeLegacyTags
-     */
-    public function testRemoveLegacyTags(array $expected, array $packages, array $versionConstraints)
-    {
-        /** @var Cache $cache */
-        $cache = (new \ReflectionClass(Cache::class))->newInstanceWithoutConstructor();
-        $cache->setRequiredVersionConstraints($versionConstraints);
-        $this->assertSame(['packages' => $expected], $cache->removeLegacyTags(['packages' => $packages]));
-    }
-
-    /**
-     * Test data.
-     */
-    public function provideRemoveLegacyTags()
-    {
-        yield 'no-symfony/symfony' => [[123], [123], ['symfony/symfony' => '~1']];
-        $branchAlias = function ($versionAlias) {
-            return [
-              'extra' => [
-                'branch-alias' => [
-                  'dev-master' => $versionAlias.'-dev',
-                ],
-              ],
-            ];
-        };
-        $packages = [
-          'foo/unrelated' => [
-            '1.0.0' => [],
-          ],
-          'symfony/symfony' => [
-            '3.3.0' => [
-              'version_normalized' => '3.3.0.0',
-              'replace' => ['symfony/foo' => 'self.version'],
-            ],
-            '3.4.0' => [
-              'version_normalized' => '3.4.0.0',
-              'replace' => ['symfony/foo' => 'self.version'],
-            ],
-            'dev-master' => $branchAlias('3.5') + [
-                'replace' => ['symfony/foo' => 'self.version'],
-              ],
-          ],
-          'symfony/foo' => [
-            '3.3.0' => ['version_normalized' => '3.3.0.0'],
-            '3.4.0' => ['version_normalized' => '3.4.0.0'],
-            'dev-master' => $branchAlias('3.5'),
-          ],
-        ];
-        yield 'empty-intersection-ignores' => [$packages, $packages, ['symfony/symfony' => '~2.0']];
-        yield 'empty-intersection-ignores' => [$packages, $packages, ['symfony/symfony' => '~4.0']];
-        $expected = $packages;
-        unset($expected['symfony/symfony']['3.3.0']);
-        unset($expected['symfony/foo']['3.3.0']);
-        yield 'non-empty-intersection-filters' => [$expected, $packages, ['symfony/symfony' => '~3.4']];
-        unset($expected['symfony/symfony']['3.4.0']);
-        unset($expected['symfony/foo']['3.4.0']);
-        yield 'master-only' => [$expected, $packages, ['symfony/symfony' => '~3.5']];
-        $packages = [
-          'symfony/symfony' => [
-            '2.8.0' => [
-              'version_normalized' => '2.8.0.0',
-              'replace' => [
-                'symfony/legacy' => 'self.version',
-                'symfony/foo' => 'self.version',
-              ],
-            ],
-          ],
-          'symfony/legacy' => [
-            '2.8.0' => ['version_normalized' => '2.8.0.0'],
-            'dev-master' => $branchAlias('2.8'),
-          ],
-        ];
-        yield 'legacy-are-not-filtered' => [$packages, $packages, ['symfony/symfony' => '~3.0']];
-        $packages = [
-          'symfony/symfony' => [
-            '2.8.0' => [
-              'version_normalized' => '2.8.0.0',
-              'replace' => [
-                'symfony/foo' => 'self.version',
-                'symfony/new' => 'self.version',
-              ],
-            ],
-            'dev-master' => $branchAlias('3.0') + [
-                'replace' => [
-                  'symfony/foo' => 'self.version',
-                  'symfony/new' => 'self.version',
-                ],
-              ],
-          ],
-          'symfony/foo' => [
-            '2.8.0' => ['version_normalized' => '2.8.0.0'],
-            'dev-master' => $branchAlias('3.0'),
-          ],
-          'symfony/new' => [
-            'dev-master' => $branchAlias('3.0'),
-          ],
-        ];
-        $expected = $packages;
-        unset($expected['symfony/symfony']['dev-master']);
-        unset($expected['symfony/foo']['dev-master']);
-        yield 'master-is-filtered-only-when-in-range' => [$expected, $packages, ['symfony/symfony' => '~2.8']];
-    }
-}
diff --git a/vendor/zaporylie/composer-drupal-optimizations/tests/DefaultRequireTest.php b/vendor/zaporylie/composer-drupal-optimizations/tests/DefaultRequireTest.php
deleted file mode 100644
index e3368c48ec42cd069a1689fbb246eaf0fcb61ca6..0000000000000000000000000000000000000000
--- a/vendor/zaporylie/composer-drupal-optimizations/tests/DefaultRequireTest.php
+++ /dev/null
@@ -1,40 +0,0 @@
-<?php
-
-namespace zaporylie\ComposerDrupalOptimizations\Tests;
-
-use Composer\Semver\VersionParser;
-use PHPUnit\Framework\TestCase;
-use zaporylie\ComposerDrupalOptimizations\Plugin;
-
-class DefaultRequireTest extends TestCase
-{
-
-    /**
-     * Tests default require provider.
-     *
-     * @param $provided
-     * @param $expected
-     * @dataProvider provideTestData
-     */
-    public function testDefaultRequire($provided, $expected)
-    {
-        $versionParser = new VersionParser();
-        self::assertEquals($expected, Plugin::getDefaultRequire($versionParser->parseConstraints($provided)));
-    }
-
-    /**
-     * Test data.
-     */
-    function provideTestData()
-    {
-        yield 'exact-below' => ['8.2.0', []];
-        yield 'exact-above' => ['8.6.0', ['symfony/symfony' => '>3.4']];
-        yield 'exact-min' => ['8.5.0', ['symfony/symfony' => '>3.4']];
-        yield 'range-below' => ['~8.4.0', []];
-        yield 'range-overlapping' => ['>8.4.0 <8.6.0', []];
-        yield 'range-below-above' => ['~8.2.0|~8.6.0', []];
-        yield 'range-above' => ['~8.6.0', ['symfony/symfony' => '>3.4']];
-        yield 'range-min' => ['^8.5', ['symfony/symfony' => '>3.4']];
-    }
-
-}
diff --git a/web/.csslintrc b/web/.csslintrc
new file mode 100644
index 0000000000000000000000000000000000000000..177e4fcc7e8cc613b415dcbe3706d00d0d9bc0b1
--- /dev/null
+++ b/web/.csslintrc
@@ -0,0 +1,40 @@
+--errors=box-model,
+         display-property-grouping,
+         duplicate-background-images,
+         duplicate-properties,
+         empty-rules,
+         ids,
+         import,
+         important,
+         known-properties,
+         outline-none,
+         overqualified-elements,
+         qualified-headings,
+         shorthand,
+         star-property-hack,
+         text-indent,
+         underscore-property-hack,
+         unique-headings,
+         unqualified-attributes,
+         vendor-prefix,
+         zero-units
+--ignore=adjoining-classes,
+         box-sizing,
+         bulletproof-font-face,
+         compatible-vendor-prefixes,
+         errors,
+         fallback-colors,
+         floats,
+         font-faces,
+         font-sizes,
+         gradients,
+         import-ie-limit,
+         order-alphabetical,
+         regex-selectors,
+         rules-count,
+         selector-max,
+         selector-max-approaching,
+         selector-newline,
+         universal-selector
+--exclude-list=core/assets,
+               vendor
diff --git a/web/.eslintignore b/web/.eslintignore
new file mode 100644
index 0000000000000000000000000000000000000000..9c134873d484956a9b6c87447e82b792cd27334c
--- /dev/null
+++ b/web/.eslintignore
@@ -0,0 +1,8 @@
+core/**/*
+vendor/**/*
+sites/**/files/**/*
+libraries/**/*
+sites/**/libraries/**/*
+profiles/**/libraries/**/*
+**/js_test_files/**/*
+**/node_modules/**/*
diff --git a/web/.eslintrc.json b/web/.eslintrc.json
new file mode 100644
index 0000000000000000000000000000000000000000..d4bbc92052201490a83d06dd502318ee600f07f7
--- /dev/null
+++ b/web/.eslintrc.json
@@ -0,0 +1,3 @@
+{
+  "extends": "./core/.eslintrc.json"
+}
diff --git a/web/.htaccess b/web/.htaccess
index 09b703d23f6f2192d58462b54bcb40213585e46d..6f9123d14b13f8cdff5024d7a29374ad820342be 100644
--- a/web/.htaccess
+++ b/web/.htaccess
@@ -3,7 +3,7 @@
 #
 
 # Protect files and directories from prying eyes.
-<FilesMatch "\.(engine|inc|install|make|module|profile|po|sh|.*sql|theme|twig|tpl(\.php)?|xtmpl|yml)(~|\.sw[op]|\.bak|\.orig|\.save)?$|^(\.(?!well-known).*|Entries.*|Repository|Root|Tag|Template|composer\.(json|lock))$|^#.*#$|\.php(~|\.sw[op]|\.bak|\.orig|\.save)$">
+<FilesMatch "\.(engine|inc|install|make|module|profile|po|sh|.*sql|theme|twig|tpl(\.php)?|xtmpl|yml)(~|\.sw[op]|\.bak|\.orig|\.save)?$|^(\.(?!well-known).*|Entries.*|Repository|Root|Tag|Template|composer\.(json|lock)|web\.config)$|^#.*#$|\.php(~|\.sw[op]|\.bak|\.orig|\.save)$">
   <IfModule mod_authz_core.c>
     Require all denied
   </IfModule>
@@ -27,16 +27,9 @@ AddEncoding gzip svgz
 # Drupal\Core\DrupalKernel::bootEnvironment() for settings that can be
 # changed at runtime.
 
-# PHP 5, Apache 1 and 2.
-<IfModule mod_php5.c>
+# PHP 7, Apache 1 and 2.
+<IfModule mod_php7.c>
   php_value assert.active                   0
-  php_flag session.auto_start               off
-  php_value mbstring.http_input             pass
-  php_value mbstring.http_output            pass
-  php_flag mbstring.encoding_translation    off
-  # PHP 5.6 has deprecated $HTTP_RAW_POST_DATA and produces warnings if this is
-  # not set.
-  php_value always_populate_raw_post_data   -1
 </IfModule>
 
 # Requires mod_expires to be enabled.
@@ -144,7 +137,6 @@ AddEncoding gzip svgz
   # security, you can replace '!/' with '!^/'.
   # Allow access to PHP files in /core (like authorize.php or install.php):
   RewriteCond %{REQUEST_URI} !/core/[^/]*\.php$
-  RewriteCond %{REQUEST_URI} !/simplesaml/[^/]*\.php.*$
   # Allow access to test-specific PHP files:
   RewriteCond %{REQUEST_URI} !/core/modules/system/tests/https?.php
   # Allow access to Statistics module's custom front controller.
@@ -168,9 +160,9 @@ AddEncoding gzip svgz
     RewriteCond %{REQUEST_FILENAME}\.gz -s
     RewriteRule ^(.*)\.js $1\.js\.gz [QSA]
 
-    # Serve correct content types, and prevent mod_deflate double gzip.
-    RewriteRule \.css\.gz$ - [T=text/css,E=no-gzip:1]
-    RewriteRule \.js\.gz$ - [T=text/javascript,E=no-gzip:1]
+    # Serve correct content types, and prevent double compression.
+    RewriteRule \.css\.gz$ - [T=text/css,E=no-gzip:1,E=no-brotli:1]
+    RewriteRule \.js\.gz$ - [T=text/javascript,E=no-gzip:1,E=no-brotli:1]
 
     <FilesMatch "(\.js\.gz|\.css\.gz)$">
       # Serve correct encoding type.
diff --git a/web/core/MAINTAINERS.txt b/web/core/MAINTAINERS.txt
index a0428579f52e6cb9fde032a61eb9e991ac4ac099..9383214f5664c63e764dd7d9d44e264b1bd76b1b 100644
--- a/web/core/MAINTAINERS.txt
+++ b/web/core/MAINTAINERS.txt
@@ -39,7 +39,7 @@ Release managers
 - Jess Myrbo 'xjm' https://www.drupal.org/u/xjm
 
 Committer team facilitators
-- (provisional) Pamela Barone 'pameeela' https://www.drupal.org/u/pameeela
+- Pamela Barone 'pameeela' https://www.drupal.org/u/pameeela
 
 Subsystem maintainers
 ---------------------
diff --git a/web/core/composer.json b/web/core/composer.json
index 58841177265ddbbca1fbb26fd5c925769a6404ac..fb70c051cf090d12a41df6335c619235af7112da 100644
--- a/web/core/composer.json
+++ b/web/core/composer.json
@@ -46,7 +46,7 @@
         "laminas/laminas-diactoros": "^1.8",
         "composer/semver": "^1.0",
         "asm89/stack-cors": "^1.1",
-        "pear/archive_tar": "^1.4.9",
+        "pear/archive_tar": "^1.4.11",
         "psr/log": "^1.0"
     },
     "conflict": {
diff --git a/web/core/drupalci.yml b/web/core/drupalci.yml
index 8cc5f1d4883efc069dc6a4db95809f679f7ac573..1cec41cef3d5113061a47147b7514efdb2014e8b 100644
--- a/web/core/drupalci.yml
+++ b/web/core/drupalci.yml
@@ -5,8 +5,6 @@ build:
   assessment:
     validate_codebase:
       phplint:
-      csslint:
-        halt-on-fail: false
       eslint:
         # A test must pass eslinting standards check in order to continue processing.
         halt-on-fail: false
diff --git a/web/core/includes/entity.inc b/web/core/includes/entity.inc
index 34c048b35a94e66b006ad7215b5eb5e8fb72daff..3515b6ddbb30f538285bc26567efca7aaaa39ae6 100644
--- a/web/core/includes/entity.inc
+++ b/web/core/includes/entity.inc
@@ -233,7 +233,8 @@ function entity_load_unchanged($entity_type, $id) {
  *   An array of entity IDs of the entities to delete.
  *
  * @deprecated in drupal:8.0.0 and is removed from drupal:9.0.0. Use
- *   the entity storage's delete() method to delete multiple entities:
+ *   the entity storage's \Drupal\Core\Entity\EntityStorageInterface::delete()
+ *   method to delete multiple entities:
  *   @code
  *     $storage_handler = \Drupal::entityTypeManager()->getStorage($entity_type);
  *     $entities = $storage_handler->loadMultiple($ids);
diff --git a/web/core/includes/file.inc b/web/core/includes/file.inc
index c9eec6c9d81931531183b23fb8997d17e6112c19..26ebab76191dd21905f4ea366dffef6b6853e47f 100644
--- a/web/core/includes/file.inc
+++ b/web/core/includes/file.inc
@@ -657,8 +657,8 @@ function file_unmanaged_move($source, $destination = NULL, $replace = FILE_EXIST
  * exploit.php_.pps.
  *
  * Specifically, this function adds an underscore to all extensions that are
- * between 2 and 5 characters in length, internal to the file name, and not
- * included in $extensions.
+ * between 2 and 5 characters in length, internal to the file name, and either
+ * included in the list of unsafe extensions, or not included in $extensions.
  *
  * Function behavior is also controlled by the configuration
  * 'system.file:allow_insecure_uploads'. If it evaluates to TRUE, no alterations
@@ -666,7 +666,8 @@ function file_unmanaged_move($source, $destination = NULL, $replace = FILE_EXIST
  * @param $filename
  *   File name to modify.
  * @param $extensions
- *   A space-separated list of extensions that should not be altered.
+ *   A space-separated list of extensions that should not be altered. Note that
+ *   extensions that are unsafe will be altered regardless of this parameter.
  * @param $alerts
  *   If TRUE, \Drupal::messenger()->addStatus() will be called to display
  *   a message if the file name was changed.
@@ -685,6 +686,12 @@ function file_munge_filename($filename, $extensions, $alerts = TRUE) {
 
     $allowed_extensions = array_unique(explode(' ', strtolower(trim($extensions))));
 
+    // Remove unsafe extensions from the allowed list of extensions.
+    // @todo https://www.drupal.org/project/drupal/issues/3032390 Make the list
+    //   of unsafe extensions a constant. The list is copied from
+    //   FILE_INSECURE_EXTENSION_REGEX.
+    $allowed_extensions = array_diff($allowed_extensions, explode('|', 'phar|php|pl|py|cgi|asp|js'));
+
     // Split the filename up by periods. The first part becomes the basename
     // the last part the final extension.
     $filename_parts = explode('.', $filename);
diff --git a/web/core/includes/install.core.inc b/web/core/includes/install.core.inc
index 85981876da8540cf5f9d3245190020f69e82e26e..3964fed8b9a8390cfd3456fc6b11ab2a58a40e0d 100644
--- a/web/core/includes/install.core.inc
+++ b/web/core/includes/install.core.inc
@@ -249,7 +249,7 @@ function install_state_defaults() {
     // The server URL where the interface translation files can be downloaded.
     // Tokens in the pattern will be replaced by appropriate values for the
     // required translation file.
-    'server_pattern' => 'http://ftp.drupal.org/files/translations/%core/%project/%project-%version.%language.po',
+    'server_pattern' => 'https://ftp.drupal.org/files/translations/%core/%project/%project-%version.%language.po',
     // Installation tasks can set this to TRUE to force the page request to
     // end (even if there is no themable output), in the case of an interactive
     // installation. This is needed only rarely; for example, it would be used
diff --git a/web/core/lib/Drupal.php b/web/core/lib/Drupal.php
index 2d5754aa94b1aac0efb59319541a314905cd6a86..ee860ae0ac048946e5c9c97b19f9a9a2969d2cb4 100644
--- a/web/core/lib/Drupal.php
+++ b/web/core/lib/Drupal.php
@@ -82,7 +82,7 @@ class Drupal {
   /**
    * The current system version.
    */
-  const VERSION = '8.9.6';
+  const VERSION = '8.9.10';
 
   /**
    * Core API compatibility.
diff --git a/web/core/lib/Drupal/Component/Datetime/DateTimePlus.php b/web/core/lib/Drupal/Component/Datetime/DateTimePlus.php
index ef200d19f1646ebf1086948ccd46e227744aa2a1..01c464701340b479514698f9617b4dccb31b1f5a 100644
--- a/web/core/lib/Drupal/Component/Datetime/DateTimePlus.php
+++ b/web/core/lib/Drupal/Component/Datetime/DateTimePlus.php
@@ -624,11 +624,10 @@ public static function checkArray($array) {
     $valid_date = FALSE;
     $valid_time = TRUE;
     // Check for a valid date using checkdate(). Only values that
-    // meet that test are valid.
-    if (array_key_exists('year', $array) && array_key_exists('month', $array) && array_key_exists('day', $array)) {
-      if (@checkdate($array['month'], $array['day'], $array['year'])) {
-        $valid_date = TRUE;
-      }
+    // meet that test are valid. An empty value, either a string or a 0, is not
+    // a valid value.
+    if (!empty($array['year']) && !empty($array['month']) && !empty($array['day'])) {
+      $valid_date = checkdate($array['month'], $array['day'], $array['year']);
     }
     // Testing for valid time is reversed. Missing time is OK,
     // but incorrect values are not.
diff --git a/web/core/lib/Drupal/Component/Gettext/PoStreamReader.php b/web/core/lib/Drupal/Component/Gettext/PoStreamReader.php
index a69c03ce88daf1bf0dd50b7b3e4a148e20da7b86..a92bccb1271a1366ea1f93de1ef47ee8a874bf2f 100644
--- a/web/core/lib/Drupal/Component/Gettext/PoStreamReader.php
+++ b/web/core/lib/Drupal/Component/Gettext/PoStreamReader.php
@@ -506,8 +506,6 @@ private function readLine() {
       $this->errors[] = new FormattableMarkup('The translation stream %uri ended unexpectedly at line %line.', $log_vars);
       return FALSE;
     }
-
-    return;
   }
 
   /**
diff --git a/web/core/lib/Drupal/Component/Utility/Unicode.php b/web/core/lib/Drupal/Component/Utility/Unicode.php
index 64e066d79343311f54a9764128936627ad40631a..a44b50d0e81671d8e29d537fd42b5df729039e40 100644
--- a/web/core/lib/Drupal/Component/Utility/Unicode.php
+++ b/web/core/lib/Drupal/Component/Utility/Unicode.php
@@ -537,16 +537,16 @@ public static function mimeHeaderEncode($string, $shorten = FALSE) {
    */
   public static function mimeHeaderDecode($header) {
     $callback = function ($matches) {
-      $data = ($matches[2] == 'B') ? base64_decode($matches[3]) : str_replace('_', ' ', quoted_printable_decode($matches[3]));
+      $data = (strtolower($matches[2]) == 'b') ? base64_decode($matches[3]) : str_replace('_', ' ', quoted_printable_decode($matches[3]));
       if (strtolower($matches[1]) != 'utf-8') {
         $data = static::convertToUtf8($data, $matches[1]);
       }
       return $data;
     };
     // First step: encoded chunks followed by other encoded chunks (need to collapse whitespace)
-    $header = preg_replace_callback('/=\?([^?]+)\?(Q|B)\?([^?]+|\?(?!=))\?=\s+(?==\?)/', $callback, $header);
+    $header = preg_replace_callback('/=\?([^?]+)\?([Qq]|[Bb])\?([^?]+|\?(?!=))\?=\s+(?==\?)/', $callback, $header);
     // Second step: remaining chunks (do not collapse whitespace)
-    return preg_replace_callback('/=\?([^?]+)\?(Q|B)\?([^?]+|\?(?!=))\?=/', $callback, $header);
+    return preg_replace_callback('/=\?([^?]+)\?([Qq]|[Bb])\?([^?]+|\?(?!=))\?=/', $callback, $header);
   }
 
   /**
diff --git a/web/core/lib/Drupal/Core/Asset/CssCollectionRenderer.php b/web/core/lib/Drupal/Core/Asset/CssCollectionRenderer.php
index 24ea64ea7acc6705c6f4dffc4bb4f3a1bbfe465d..13c53e24b4cf4e09bb11fc39243059de5749dc3c 100644
--- a/web/core/lib/Drupal/Core/Asset/CssCollectionRenderer.php
+++ b/web/core/lib/Drupal/Core/Asset/CssCollectionRenderer.php
@@ -72,6 +72,11 @@ public function render(array $css_assets) {
           throw new \Exception('Invalid CSS asset type.');
       }
 
+      // Merge any additional attributes.
+      if (!empty($css_asset['attributes'])) {
+        $element['#attributes'] += $css_asset['attributes'];
+      }
+
       $elements[] = $element;
     }
 
diff --git a/web/core/lib/Drupal/Core/Command/DbImportCommand.php b/web/core/lib/Drupal/Core/Command/DbImportCommand.php
index 3401ae0f8692cebed6cb0125414aefd0fd3ebe8f..4765692168f3f66b05cfe1b8ea03369054e0bbcd 100644
--- a/web/core/lib/Drupal/Core/Command/DbImportCommand.php
+++ b/web/core/lib/Drupal/Core/Command/DbImportCommand.php
@@ -12,7 +12,7 @@
 /**
  * Provides a command to import the current database from a script.
  *
- * This script runs on databases exported using using one of the database dump
+ * This script runs on databases exported using one of the database dump
  * commands and imports it into the current database connection.
  *
  * @see \Drupal\Core\Command\DbImportApplication
diff --git a/web/core/lib/Drupal/Core/Command/ServerCommand.php b/web/core/lib/Drupal/Core/Command/ServerCommand.php
index 182167a4c45eedff0e136c870744779c843be1f5..f60325e8feb6256e6a9c4f774f2a2070a6027d51 100644
--- a/web/core/lib/Drupal/Core/Command/ServerCommand.php
+++ b/web/core/lib/Drupal/Core/Command/ServerCommand.php
@@ -176,7 +176,6 @@ protected function openBrowser($url, SymfonyStyle $io) {
     $php = "<?php sleep(2); passthru(\"$cmd\"); ?>";
     $process = new PhpProcess($php);
     $process->start();
-    return;
   }
 
   /**
diff --git a/web/core/lib/Drupal/Core/Database/Connection.php b/web/core/lib/Drupal/Core/Database/Connection.php
index 00e6d6c9d0261e280597427aaf850fce06081d4c..70e0dea8744470d938b17af6fef0f7b7ef9f2edd 100644
--- a/web/core/lib/Drupal/Core/Database/Connection.php
+++ b/web/core/lib/Drupal/Core/Database/Connection.php
@@ -1501,8 +1501,8 @@ abstract public function nextId($existing_id = 0);
   /**
    * Prepares a statement for execution and returns a statement object
    *
-   * Emulated prepared statements does not communicate with the database server
-   * so this method does not check the statement.
+   * Emulated prepared statements do not communicate with the database server so
+   * this method does not check the statement.
    *
    * @param string $statement
    *   This must be a valid SQL statement for the target database server.
diff --git a/web/core/lib/Drupal/Core/Database/StatementEmpty.php b/web/core/lib/Drupal/Core/Database/StatementEmpty.php
index 8b4b38e9463fc4d89ed33003e4c72fdd28f471aa..a87bca920a86e97fc38d572dfe950d4f4be1ed5d 100644
--- a/web/core/lib/Drupal/Core/Database/StatementEmpty.php
+++ b/web/core/lib/Drupal/Core/Database/StatementEmpty.php
@@ -49,9 +49,7 @@ public function rowCount() {
   /**
    * {@inheritdoc}
    */
-  public function setFetchMode($mode, $a1 = NULL, $a2 = []) {
-    return;
-  }
+  public function setFetchMode($mode, $a1 = NULL, $a2 = []) {}
 
   /**
    * {@inheritdoc}
diff --git a/web/core/lib/Drupal/Core/Entity/EntityListBuilder.php b/web/core/lib/Drupal/Core/Entity/EntityListBuilder.php
index d07e82c3a876979f54e2391201b7765345d35432..a877ba779ce50a8694b06ab7ff40dedaf4992561 100644
--- a/web/core/lib/Drupal/Core/Entity/EntityListBuilder.php
+++ b/web/core/lib/Drupal/Core/Entity/EntityListBuilder.php
@@ -249,9 +249,7 @@ public function render() {
   /**
    * Gets the title of the page.
    */
-  protected function getTitle() {
-    return;
-  }
+  protected function getTitle() {}
 
   /**
    * Ensures that a destination is present on the given URL.
diff --git a/web/core/lib/Drupal/Core/Entity/Plugin/EntityReferenceSelection/DefaultSelection.php b/web/core/lib/Drupal/Core/Entity/Plugin/EntityReferenceSelection/DefaultSelection.php
index 426dee11d1b6f26bfd1338a5133a6ce272ea3c75..465de1d66c8e08d3abbbf799110198e23679b539 100644
--- a/web/core/lib/Drupal/Core/Entity/Plugin/EntityReferenceSelection/DefaultSelection.php
+++ b/web/core/lib/Drupal/Core/Entity/Plugin/EntityReferenceSelection/DefaultSelection.php
@@ -395,13 +395,16 @@ public function validateReferenceableEntities(array $ids) {
    */
   public function createNewEntity($entity_type_id, $bundle, $label, $uid) {
     $entity_type = $this->entityTypeManager->getDefinition($entity_type_id);
-    $bundle_key = $entity_type->getKey('bundle');
-    $label_key = $entity_type->getKey('label');
 
-    $entity = $this->entityTypeManager->getStorage($entity_type_id)->create([
-      $bundle_key => $bundle,
-      $label_key => $label,
-    ]);
+    $values = [
+      $entity_type->getKey('label') => $label,
+    ];
+
+    if ($bundle_key = $entity_type->getKey('bundle')) {
+      $values[$bundle_key] = $bundle;
+    }
+
+    $entity = $this->entityTypeManager->getStorage($entity_type_id)->create($values);
 
     if ($entity instanceof EntityOwnerInterface) {
       $entity->setOwnerId($uid);
diff --git a/web/core/lib/Drupal/Core/Field/FieldItemInterface.php b/web/core/lib/Drupal/Core/Field/FieldItemInterface.php
index 8e3e52b9f488312a89296abe8e0db3d4a022bcea..37d0cbfa1b6f8cb4533e8ee4f4198a0403c44944 100644
--- a/web/core/lib/Drupal/Core/Field/FieldItemInterface.php
+++ b/web/core/lib/Drupal/Core/Field/FieldItemInterface.php
@@ -162,7 +162,7 @@ public function __unset($property_name);
   /**
    * Returns a renderable array for a single field item.
    *
-   * @param array $display_options
+   * @param string|array $display_options
    *   Can be either the name of a view mode, or an array of display settings.
    *   See EntityViewBuilderInterface::viewField() for more information.
    *
diff --git a/web/core/lib/Drupal/Core/Field/FieldItemListInterface.php b/web/core/lib/Drupal/Core/Field/FieldItemListInterface.php
index 5367f39fb41b06e97771e442815ec111744cd2f7..d52834aace19201f755c4809146f9d3b24e29363 100644
--- a/web/core/lib/Drupal/Core/Field/FieldItemListInterface.php
+++ b/web/core/lib/Drupal/Core/Field/FieldItemListInterface.php
@@ -174,7 +174,7 @@ public function deleteRevision();
   /**
    * Returns a renderable array for the field items.
    *
-   * @param array $display_options
+   * @param string|array $display_options
    *   Can be either the name of a view mode, or an array of display settings.
    *   See EntityViewBuilderInterface::viewField() for more information.
    *
diff --git a/web/core/lib/Drupal/Core/Field/Plugin/Field/FieldWidget/EntityReferenceAutocompleteWidget.php b/web/core/lib/Drupal/Core/Field/Plugin/Field/FieldWidget/EntityReferenceAutocompleteWidget.php
index af3c80a9b061ad95f8e5cd853ef5dc5b9b3f147b..d9f5b581f389f88ccb20c1d0e6690f820bcc42cb 100644
--- a/web/core/lib/Drupal/Core/Field/Plugin/Field/FieldWidget/EntityReferenceAutocompleteWidget.php
+++ b/web/core/lib/Drupal/Core/Field/Plugin/Field/FieldWidget/EntityReferenceAutocompleteWidget.php
@@ -117,7 +117,7 @@ public function formElement(FieldItemListInterface $items, $delta, array $elemen
       '#placeholder' => $this->getSetting('placeholder'),
     ];
 
-    if ($this->getSelectionHandlerSetting('auto_create') && ($bundle = $this->getAutocreateBundle())) {
+    if ($bundle = $this->getAutocreateBundle()) {
       $element['#autocreate'] = [
         'bundle' => $bundle,
         'uid' => ($entity instanceof EntityOwnerInterface) ? $entity->getOwnerId() : \Drupal::currentUser()->id(),
@@ -154,16 +154,23 @@ public function massageFormValues(array $values, array $form, FormStateInterface
    * Returns the name of the bundle which will be used for autocreated entities.
    *
    * @return string
-   *   The bundle name.
+   *   The bundle name. If autocreate is not active, NULL will be returned.
    */
   protected function getAutocreateBundle() {
     $bundle = NULL;
-    if ($this->getSelectionHandlerSetting('auto_create') && $target_bundles = $this->getSelectionHandlerSetting('target_bundles')) {
+    if ($this->getSelectionHandlerSetting('auto_create')) {
+      $target_bundles = $this->getSelectionHandlerSetting('target_bundles');
+      // If there's no target bundle at all, use the target_type. It's the
+      // default for bundleless entity types.
+      if (empty($target_bundles)) {
+        $bundle = $this->getFieldSetting('target_type');
+      }
       // If there's only one target bundle, use it.
-      if (count($target_bundles) == 1) {
+      elseif (count($target_bundles) == 1) {
         $bundle = reset($target_bundles);
       }
-      // Otherwise use the target bundle stored in selection handler settings.
+      // If there's more than one target bundle, use the autocreate bundle
+      // stored in selection handler settings.
       elseif (!$bundle = $this->getSelectionHandlerSetting('auto_create_bundle')) {
         // If no bundle has been set as auto create target means that there is
         // an inconsistency in entity reference field settings.
diff --git a/web/core/lib/Drupal/Core/Form/FormBuilder.php b/web/core/lib/Drupal/Core/Form/FormBuilder.php
index 444753465874429456de4e051b4d31a41ef75b11..023a66151e91def2d10554abf8131c8852c1cb9e 100644
--- a/web/core/lib/Drupal/Core/Form/FormBuilder.php
+++ b/web/core/lib/Drupal/Core/Form/FormBuilder.php
@@ -643,7 +643,7 @@ public function processForm($form_id, &$form, FormStateInterface &$form_state) {
   }
 
   /**
-   * #lazy_builder callback; renders a form action URL.
+   * Renders a form action URL. It's a #lazy_builder callback.
    *
    * @return array
    *   A renderable array representing the form action.
@@ -657,7 +657,7 @@ public function renderPlaceholderFormAction() {
   }
 
   /**
-   * #lazy_builder callback; renders form CSRF token.
+   * Renders the form CSRF token. It's a #lazy_builder callback.
    *
    * @param string $placeholder
    *   A string containing a placeholder, matching the value of the form's
@@ -690,9 +690,10 @@ public function prepareForm($form_id, &$form, FormStateInterface &$form_state) {
       // Instead of setting an actual action URL, we set the placeholder, which
       // will be replaced at the very last moment. This ensures forms with
       // dynamically generated action URLs don't have poor cacheability.
-      // Use the proper API to generate the placeholder, when we have one. See
-      // https://www.drupal.org/node/2562341. The placeholder uses a fixed string
-      // that is Crypt::hashBase64('Drupal\Core\Form\FormBuilder::prepareForm');
+      // Use the proper API to generate the placeholder, when we have one.
+      // See https://www.drupal.org/node/2562341.
+      // The placeholder uses a unique string that is returned by
+      // Crypt::hashBase64('Drupal\Core\Form\FormBuilder::prepareForm').
       $placeholder = 'form_action_p_pvdeGsVG5zNF_XLGPTvYSKCf43t8qZYSwcfZl2uzM';
 
       $form['#attached']['placeholders'][$placeholder] = [
@@ -708,8 +709,6 @@ public function prepareForm($form_id, &$form, FormStateInterface &$form_state) {
 
     // GET forms should not use a CSRF token.
     if (isset($form['#method']) && $form['#method'] === 'get') {
-      // Merges in a default, this means if you've explicitly set #token to the
-      // the $form_id on a GET form, which we don't recommend, it will work.
       $form += [
         '#token' => FALSE,
       ];
@@ -729,14 +728,14 @@ public function prepareForm($form_id, &$form, FormStateInterface &$form_state) {
       '#value' => $form['#build_id'],
       '#id' => $form['#build_id'],
       '#name' => 'form_build_id',
-      // Form processing and validation requires this value, so ensure the
+      // Form processing and validation requires this value. Ensure the
       // submitted form value appears literally, regardless of custom #tree
       // and #parents being set elsewhere.
       '#parents' => ['form_build_id'],
-      // Prevent user agents from prefilling the build id with earlier values.
+      // Prevent user agents from prefilling the build ID with earlier values.
       // When the ajax command "update_build_id" is executed, the user agent
       // will assume that a user interaction changed the field. Upon a soft
-      // reload of the page, the previous build id will be restored in the
+      // reload of the page, the previous build ID will be restored in the
       // input, causing subsequent ajax callbacks to access the wrong cached
       // form build. Setting the autocomplete attribute to "off" will tell the
       // user agent to never reuse the value.
@@ -762,8 +761,7 @@ public function prepareForm($form_id, &$form, FormStateInterface &$form_state) {
     else {
       $form['#cache']['contexts'][] = 'user.roles:authenticated';
       if ($user && $user->isAuthenticated()) {
-        // Generate a public token based on the form id.
-        // Generates a placeholder based on the form ID.
+        // Generate a public token and placeholder based on the form ID.
         $placeholder = 'form_token_placeholder_' . Crypt::hashBase64($form_id);
         $form['#token'] = $placeholder;
 
@@ -771,14 +769,14 @@ public function prepareForm($form_id, &$form, FormStateInterface &$form_state) {
           '#id' => Html::getUniqueId('edit-' . $form_id . '-form-token'),
           '#type' => 'token',
           '#default_value' => $placeholder,
-          // Form processing and validation requires this value, so ensure the
+          // Form processing and validation requires this value. Ensure the
           // submitted form value appears literally, regardless of custom #tree
           // and #parents being set elsewhere.
           '#parents' => ['form_token'],
           // Instead of setting an actual CSRF token, we've set the placeholder
           // in form_token's #default_value and #placeholder. These will be
-          // replaced at the very last moment. This ensures forms with a CSRF
-          // token don't have poor cacheability.
+          // replaced at the very last moment to ensure forms with a CSRF token
+          // don't have poor cacheability.
           '#attached' => [
             'placeholders' => [
               $placeholder => [
@@ -798,7 +796,7 @@ public function prepareForm($form_id, &$form, FormStateInterface &$form_state) {
         '#type' => 'hidden',
         '#value' => $form_id,
         '#id' => Html::getUniqueId("edit-$form_id"),
-        // Form processing and validation requires this value, so ensure the
+        // Form processing and validation require this value. Ensure the
         // submitted form value appears literally, regardless of custom #tree
         // and #parents being set elsewhere.
         '#parents' => ['form_id'],
@@ -806,7 +804,7 @@ public function prepareForm($form_id, &$form, FormStateInterface &$form_state) {
     }
     if (!isset($form['#id'])) {
       $form['#id'] = Html::getUniqueId($form_id);
-      // Provide a selector usable by JavaScript. As the ID is unique, its not
+      // Provide a selector usable by JavaScript. As the ID is unique, it's not
       // possible to rely on it in JavaScript.
       $form['#attributes']['data-drupal-selector'] = Html::getId($form_id);
     }
@@ -861,7 +859,7 @@ protected function buildFormAction() {
     //   https://www.drupal.org/node/2504709.
     $parsed = UrlHelper::parse($request_uri);
     unset($parsed['query'][static::AJAX_FORM_REQUEST], $parsed['query'][MainContentViewSubscriber::WRAPPER_FORMAT]);
-    $action =  $parsed['path'] . ($parsed['query'] ? ('?' . UrlHelper::buildQuery($parsed['query'])) : '');
+    $action = $parsed['path'] . ($parsed['query'] ? ('?' . UrlHelper::buildQuery($parsed['query'])) : '');
     return UrlHelper::filterBadProtocol($action);
   }
 
@@ -983,12 +981,12 @@ public function doBuildForm($form_id, &$element, FormStateInterface &$form_state
     if (!isset($element['#id'])) {
       $unprocessed_id = 'edit-' . implode('-', $element['#parents']);
       $element['#id'] = Html::getUniqueId($unprocessed_id);
-      // Provide a selector usable by JavaScript. As the ID is unique, its not
+      // Provide a selector usable by JavaScript. As the ID is unique, it's not
       // possible to rely on it in JavaScript.
       $element['#attributes']['data-drupal-selector'] = Html::getId($unprocessed_id);
     }
     else {
-      // Provide a selector usable by JavaScript. As the ID is unique, its not
+      // Provide a selector usable by JavaScript. As the ID is unique, it's not
       // possible to rely on it in JavaScript.
       $element['#attributes']['data-drupal-selector'] = Html::getId($element['#id']);
     }
@@ -1158,12 +1156,6 @@ public function doBuildForm($form_id, &$element, FormStateInterface &$form_state
    *   otherwise.
    */
   protected function valueCallableIsSafe(callable $value_callable) {
-    // The same static class method callable may be formatted in two array and
-    // two string forms:
-    // ['\Classname', 'methodname']
-    // ['Classname', 'methodname']
-    // '\Classname::methodname'
-    // 'Classname::methodname'
     if (is_callable($value_callable, FALSE, $callable_name)) {
       // The third parameter of is_callable() is set to a string form, but we
       // still have to normalize further by stripping a leading '\'.
@@ -1410,6 +1402,7 @@ protected function getFileUploadMaxSize() {
    * Gets the current active user.
    *
    * @return \Drupal\Core\Session\AccountInterface
+   *   The current account.
    */
   protected function currentUser() {
     if (!$this->currentUser && \Drupal::hasService('current_user')) {
diff --git a/web/core/lib/Drupal/Core/Form/FormStateInterface.php b/web/core/lib/Drupal/Core/Form/FormStateInterface.php
index 9a69764f19d6994ee0154d53d8479ca3f0587615..223cc24c757c2edc0a54361e6ba462cf6b313e6e 100644
--- a/web/core/lib/Drupal/Core/Form/FormStateInterface.php
+++ b/web/core/lib/Drupal/Core/Form/FormStateInterface.php
@@ -121,12 +121,13 @@ public function getResponse();
    * @param array $route_parameters
    *   (optional) An associative array of parameter names and values.
    * @param array $options
-   *   (optional) An associative array of additional options. See
-   *   \Drupal\Core\Url for the available keys.
+   *   (optional) An associative array of additional options containing the
+   *   same values accepted from \Drupal\Core\Url::fromUri() for $options.
    *
    * @return $this
    *
    * @see \Drupal\Core\Form\FormSubmitterInterface::redirectForm()
+   * @see \Drupal\Core\Url::fromUri()
    */
   public function setRedirect($route_name, array $route_parameters = [], array $options = []);
 
diff --git a/web/core/lib/Drupal/Core/Plugin/Context/ContextProviderInterface.php b/web/core/lib/Drupal/Core/Plugin/Context/ContextProviderInterface.php
index 3083bc964c832aa37ca0c620bd59fef10b4f7ae0..2d67eb0ab1f2945b88a1026bf63ce5aede7df220 100644
--- a/web/core/lib/Drupal/Core/Plugin/Context/ContextProviderInterface.php
+++ b/web/core/lib/Drupal/Core/Plugin/Context/ContextProviderInterface.php
@@ -8,8 +8,8 @@
  * Implementations only need to deal with unqualified context IDs so they only
  * need to be unique in the context of a given service provider.
  *
- * The fully qualified context ID then includes the service ID:
- * @{service_id}:{unqualified_context_id}.
+ * The fully qualified context ID then includes the service ID, e.g.
+ * "@service_id:unqualified_context_id".
  *
  * @see \Drupal\Core\Plugin\Context\ContextRepositoryInterface
  */
diff --git a/web/core/lib/Drupal/Core/Security/PharExtensionInterceptor.php b/web/core/lib/Drupal/Core/Security/PharExtensionInterceptor.php
index 0d8e8e8304c145c5aa00bb5a1651833febe2120a..6f6e161e669d048c5f79ed9ef67eb355dce82622 100644
--- a/web/core/lib/Drupal/Core/Security/PharExtensionInterceptor.php
+++ b/web/core/lib/Drupal/Core/Security/PharExtensionInterceptor.php
@@ -60,8 +60,8 @@ private function baseFileContainsPharExtension($path) {
       return FALSE;
     }
     // If the stream wrapper is registered by invoking a phar file that does
-    // not not have .phar extension then this should be allowed. For
-    // example, some CLI tools recommend removing the extension.
+    // not have .phar extension then this should be allowed. For example, some
+    // CLI tools recommend removing the extension.
     $backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS);
     // Find the last entry in the backtrace containing a 'file' key as
     // sometimes the last caller is executed outside the scope of a file. For
diff --git a/web/core/lib/Drupal/Core/TypedData/ListInterface.php b/web/core/lib/Drupal/Core/TypedData/ListInterface.php
index 1dab39a0f71e45567a3db8a5cfb08a3b73bb84b9..7e3e616d09d1cf17da86cfe2f6274eddb5db0703 100644
--- a/web/core/lib/Drupal/Core/TypedData/ListInterface.php
+++ b/web/core/lib/Drupal/Core/TypedData/ListInterface.php
@@ -83,8 +83,8 @@ public function set($index, $value);
   /**
    * Returns the first item in this list.
    *
-   * @return \Drupal\Core\TypedData\TypedDataInterface
-   *   The first item in this list.
+   * @return \Drupal\Core\TypedData\TypedDataInterface|null
+   *   The first item in this list, or NULL if there are no items.
    *
    * @throws \Drupal\Core\TypedData\Exception\MissingDataException
    *   If the complex data structure is unset and no item can be created.
diff --git a/web/core/modules/ban/tests/src/Kernel/Migrate/d7/MigrateBlockedIPsTest.php b/web/core/modules/ban/tests/src/Kernel/Migrate/d7/MigrateBlockedIpsTest.php
similarity index 100%
rename from web/core/modules/ban/tests/src/Kernel/Migrate/d7/MigrateBlockedIPsTest.php
rename to web/core/modules/ban/tests/src/Kernel/Migrate/d7/MigrateBlockedIpsTest.php
diff --git a/web/core/modules/basic_auth/tests/src/Traits/BasicAuthTestTrait.php b/web/core/modules/basic_auth/tests/src/Traits/BasicAuthTestTrait.php
index f8482208eeedd2350fe5447d3f8390189ad375c0..b51b17138bf9842cf2d189f8c03d9e493cd09fcd 100644
--- a/web/core/modules/basic_auth/tests/src/Traits/BasicAuthTestTrait.php
+++ b/web/core/modules/basic_auth/tests/src/Traits/BasicAuthTestTrait.php
@@ -26,35 +26,6 @@ protected function basicAuthGet($path, $username, $password, array $options = []
     return $this->drupalGet($path, $options, $this->getBasicAuthHeaders($username, $password));
   }
 
-  /**
-   * Executes a form submission using basic authentication.
-   *
-   * @param string $path
-   *   Location of the post form.
-   * @param array $edit
-   *   Field data in an associative array.
-   * @param string $submit
-   *   Value of the submit button whose click is to be emulated.
-   * @param string $username
-   *   The username to use for basic authentication.
-   * @param string $password
-   *   The password to use for basic authentication.
-   * @param array $options
-   *   Options to be forwarded to the url generator.
-   * @param string $form_html_id
-   *   (optional) HTML ID of the form to be submitted.
-   * @param string $extra_post
-   *   (optional) A string of additional data to append to the POST submission.
-   *
-   * @return string
-   *   The retrieved HTML string.
-   *
-   * @see \Drupal\simpletest\WebTestBase::drupalPostForm()
-   */
-  protected function basicAuthPostForm($path, $edit, $submit, $username, $password, array $options = [], $form_html_id = NULL, $extra_post = NULL) {
-    return $this->drupalPostForm($path, $edit, $submit, $options, $this->getBasicAuthHeaders($username, $password), $form_html_id, $extra_post);
-  }
-
   /**
    * Returns HTTP headers that can be used for basic authentication in Curl.
    *
diff --git a/web/core/modules/book/src/BookManager.php b/web/core/modules/book/src/BookManager.php
index d577e1414d0feb249145f02de6e8cbb8481b66f0..c11809a4ec17e9fe5d0dd2e9a6a1cec2354984d0 100644
--- a/web/core/modules/book/src/BookManager.php
+++ b/web/core/modules/book/src/BookManager.php
@@ -121,7 +121,7 @@ protected function loadBooks() {
       // @todo: use route name for links, not system path.
       foreach ($book_links as $link) {
         $nid = $link['nid'];
-        if (isset($nodes[$nid]) && $nodes[$nid]->status) {
+        if (isset($nodes[$nid]) && $nodes[$nid]->access('view')) {
           $link['url'] = $nodes[$nid]->toUrl();
           $link['title'] = $nodes[$nid]->label();
           $link['type'] = $nodes[$nid]->bundle();
diff --git a/web/core/modules/book/src/Form/BookSettingsForm.php b/web/core/modules/book/src/Form/BookSettingsForm.php
index 3189ef519e2fe071bab997c4a01e48311e373bea..19edbad09a0d92476af57a43af3718db69668ee4 100644
--- a/web/core/modules/book/src/Form/BookSettingsForm.php
+++ b/web/core/modules/book/src/Form/BookSettingsForm.php
@@ -47,7 +47,6 @@ public function buildForm(array $form, FormStateInterface $form_state) {
       '#options' => $types,
       '#required' => TRUE,
     ];
-    $form['array_filter'] = ['#type' => 'value', '#value' => TRUE];
 
     return parent::buildForm($form, $form_state);
   }
@@ -56,7 +55,7 @@ public function buildForm(array $form, FormStateInterface $form_state) {
    * {@inheritdoc}
    */
   public function validateForm(array &$form, FormStateInterface $form_state) {
-    $child_type = $form_state->getValue('book_child_type');
+    $child_type = array_filter($form_state->getValue('book_child_type'));
     if ($form_state->isValueEmpty(['book_allowed_types', $child_type])) {
       $form_state->setErrorByName('book_child_type', $this->t('The content type for the %add-child link must be one of those selected as an allowed book outline type.', ['%add-child' => $this->t('Add child page')]));
     }
@@ -76,7 +75,7 @@ public function submitForm(array &$form, FormStateInterface $form_state) {
     $this->config('book.settings')
     // Remove unchecked types.
       ->set('allowed_types', $allowed_types)
-      ->set('child_type', $form_state->getValue('book_child_type'))
+      ->set('child_type', array_filter($form_state->getValue('book_child_type')))
       ->save();
 
     parent::submitForm($form, $form_state);
diff --git a/web/core/modules/book/tests/src/Functional/BookTest.php b/web/core/modules/book/tests/src/Functional/BookTest.php
index b57773c805500e29bc4c50ef9b91f3847af237a0..24e35e7551a25847a7a165a804792b5d777e7d6b 100644
--- a/web/core/modules/book/tests/src/Functional/BookTest.php
+++ b/web/core/modules/book/tests/src/Functional/BookTest.php
@@ -21,7 +21,13 @@ class BookTest extends BrowserTestBase {
    *
    * @var array
    */
-  public static $modules = ['book', 'block', 'node_access_test', 'book_test'];
+  public static $modules = [
+    'content_moderation',
+    'book',
+    'block',
+    'node_access_test',
+    'book_test',
+  ];
 
   /**
    * {@inheritdoc}
@@ -66,6 +72,7 @@ protected function setUp() {
       'create book content',
       'edit own book content',
       'add content to books',
+      'view own unpublished content',
     ]);
     $this->webUser = $this->drupalCreateUser([
       'access printer-friendly version',
@@ -86,6 +93,7 @@ protected function setUp() {
       'node test view',
       'administer content types',
       'administer site configuration',
+      'view any unpublished content',
     ]);
   }
 
@@ -496,16 +504,54 @@ public function testSaveBookLink() {
    * Tests the listing of all books.
    */
   public function testBookListing() {
-    // Create a new book.
-    $this->createBook();
+    // Uninstall 'node_access_test' as this interferes with the test.
+    \Drupal::service('module_installer')->uninstall(['node_access_test']);
 
-    // Must be a user with 'node test view' permission since node_access_test is installed.
-    $this->drupalLogin($this->webUser);
+    // Create a new book.
+    $nodes = $this->createBook();
 
     // Load the book page and assert the created book title is displayed.
     $this->drupalGet('book');
 
     $this->assertText($this->book->label(), 'The book title is displayed on the book listing page.');
+
+    // Unpublish the top book page and confirm that the created book title is
+    // not displayed for anonymous.
+    $this->book->setUnpublished();
+    $this->book->save();
+
+    $this->drupalGet('book');
+    $this->assertSession()->pageTextNotContains($this->book->label());
+
+    // Publish the top book page and unpublish a page in the book and confirm
+    // that the created book title is displayed for anonymous.
+    $this->book->setPublished();
+    $this->book->save();
+    $nodes[0]->setUnpublished();
+    $nodes[0]->save();
+
+    $this->drupalGet('book');
+    $this->assertSession()->pageTextContains($this->book->label());
+
+    // Unpublish the top book page and confirm that the created book title is
+    // displayed for user which has 'view own unpublished content' permission.
+    $this->drupalLogin($this->bookAuthor);
+    $this->book->setUnpublished();
+    $this->book->save();
+
+    $this->drupalGet('book');
+    $this->assertSession()->pageTextContains($this->book->label());
+
+    // Ensure the user doesn't see the book if they don't own it.
+    $this->book->setOwner($this->webUser)->save();
+    $this->drupalGet('book');
+    $this->assertSession()->pageTextNotContains($this->book->label());
+
+    // Confirm that the created book title is displayed for user which has
+    // 'view any unpublished content' permission.
+    $this->drupalLogin($this->adminUser);
+    $this->drupalGet('book');
+    $this->assertSession()->pageTextContains($this->book->label());
   }
 
   /**
diff --git a/web/core/modules/ckeditor/js/plugins/drupalimagecaption/plugin.es6.js b/web/core/modules/ckeditor/js/plugins/drupalimagecaption/plugin.es6.js
index f90a77088d274bf6619eb8ebc04359f70ea8bfcd..e415e5a661e9b0aef684f9ac680ebe55df12c550 100644
--- a/web/core/modules/ckeditor/js/plugins/drupalimagecaption/plugin.es6.js
+++ b/web/core/modules/ckeditor/js/plugins/drupalimagecaption/plugin.es6.js
@@ -215,7 +215,9 @@
                   'figcaption',
                 );
 
-                const captionFilter = new CKEDITOR.filter(widgetDefinition.editables.caption.allowedContent);
+                const captionFilter = new CKEDITOR.filter(
+                  widgetDefinition.editables.caption.allowedContent,
+                );
                 captionFilter.applyTo(caption);
 
                 // Use Drupal's data-placeholder attribute to insert a CSS-based,
diff --git a/web/core/modules/ckeditor/src/CKEditorPluginManager.php b/web/core/modules/ckeditor/src/CKEditorPluginManager.php
index 47fa80b06cbdd07ca996d63f3f3e52ebe7d84370..e3eda0d2b1b6baefaa2f2285673fd0946d52c639 100644
--- a/web/core/modules/ckeditor/src/CKEditorPluginManager.php
+++ b/web/core/modules/ckeditor/src/CKEditorPluginManager.php
@@ -122,7 +122,7 @@ public static function getEnabledButtons(Editor $editor) {
     $toolbar_rows = [];
     $settings = $editor->getSettings();
     foreach ($settings['toolbar']['rows'] as $row_number => $row) {
-      $toolbar_rows[] = array_reduce($settings['toolbar']['rows'][$row_number], function (&$result, $button_group) {
+      $toolbar_rows[] = array_reduce($settings['toolbar']['rows'][$row_number], function ($result, $button_group) {
         return array_merge($result, $button_group['items']);
       }, []);
     }
diff --git a/web/core/modules/comment/comment.module b/web/core/modules/comment/comment.module
index a7ba9da4a79986723140dc183a790688992df620..ed50876a3225ea58f44c5857c4f6ce9425d1ed5e 100644
--- a/web/core/modules/comment/comment.module
+++ b/web/core/modules/comment/comment.module
@@ -694,9 +694,8 @@ function template_preprocess_comment(&$variables) {
 
   $variables['submitted'] = t('Submitted by @username on @datetime', ['@username' => $variables['author'], '@datetime' => $variables['created']]);
 
-  if ($comment->hasParentComment()) {
+  if ($comment_parent = $comment->getParentComment()) {
     // Fetch and store the parent comment information for use in templates.
-    $comment_parent = $comment->getParentComment();
     $account_parent = $comment_parent->getOwner();
     $variables['parent_comment'] = $comment_parent;
     $username = [
diff --git a/web/core/modules/comment/src/CommentLazyBuilders.php b/web/core/modules/comment/src/CommentLazyBuilders.php
index 455bb689ea24746ba344dae288278ed0b8aa7c66..11cb097189d4522aa85322ee56bc3511ab256f68 100644
--- a/web/core/modules/comment/src/CommentLazyBuilders.php
+++ b/web/core/modules/comment/src/CommentLazyBuilders.php
@@ -144,9 +144,9 @@ public function renderLinks($comment_entity_id, $view_mode, $langcode, $is_in_pr
     if (!$is_in_preview) {
       /** @var \Drupal\comment\CommentInterface $entity */
       $entity = $this->entityTypeManager->getStorage('comment')->load($comment_entity_id);
-      $commented_entity = $entity->getCommentedEntity();
-
-      $links['comment'] = $this->buildLinks($entity, $commented_entity);
+      if ($commented_entity = $entity->getCommentedEntity()) {
+        $links['comment'] = $this->buildLinks($entity, $commented_entity);
+      }
 
       // Allow other modules to alter the comment links.
       $hook_context = [
diff --git a/web/core/modules/comment/src/CommentViewBuilder.php b/web/core/modules/comment/src/CommentViewBuilder.php
index b3fd17e59c3060749e6e4f70baeca955ff38787a..e2da95b850abc585e40717fc7565f85306e9fd5c 100644
--- a/web/core/modules/comment/src/CommentViewBuilder.php
+++ b/web/core/modules/comment/src/CommentViewBuilder.php
@@ -80,9 +80,11 @@ protected function getBuildDefaults(EntityInterface $entity, $view_mode) {
 
     /** @var \Drupal\comment\CommentInterface $entity */
     // Store a threading field setting to use later in self::buildComponents().
-    $build['#comment_threaded'] = $entity->getCommentedEntity()
-      ->getFieldDefinition($entity->getFieldName())
-      ->getSetting('default_mode') === CommentManagerInterface::COMMENT_MODE_THREADED;
+    $commented_entity = $entity->getCommentedEntity();
+    $build['#comment_threaded'] =
+      is_null($commented_entity)
+      || $commented_entity->getFieldDefinition($entity->getFieldName())
+        ->getSetting('default_mode') === CommentManagerInterface::COMMENT_MODE_THREADED;
     // If threading is enabled, don't render cache individual comments, but do
     // keep the cacheability metadata, so it can bubble up.
     if ($build['#comment_threaded']) {
@@ -140,10 +142,12 @@ public function buildComponents(array &$build, array $entities, array $displays,
 
       // Commented entities already loaded after self::getBuildDefaults().
       $commented_entity = $entity->getCommentedEntity();
+      // Set defaults if the commented_entity does not exist.
+      $bundle = $commented_entity ? $commented_entity->bundle() : '';
+      $is_node = $commented_entity ? $commented_entity->getEntityTypeId() === 'node' : NULL;
 
       $build[$id]['#entity'] = $entity;
-      $build[$id]['#theme'] = 'comment__' . $entity->getFieldName() . '__' . $commented_entity->bundle();
-
+      $build[$id]['#theme'] = 'comment__' . $entity->getFieldName() . '__' . $bundle;
       $display = $displays[$entity->bundle()];
       if ($display->getComponent('links')) {
         $build[$id]['links'] = [
@@ -164,7 +168,7 @@ public function buildComponents(array &$build, array $entities, array $displays,
         $build[$id]['#attached'] = [];
       }
       $build[$id]['#attached']['library'][] = 'comment/drupal.comment-by-viewer';
-      if ($attach_history && $commented_entity->getEntityTypeId() === 'node') {
+      if ($attach_history && $is_node) {
         $build[$id]['#attached']['library'][] = 'comment/drupal.comment-new-indicator';
 
         // Embed the metadata for the comment "new" indicators on this node.
diff --git a/web/core/modules/comment/src/Entity/Comment.php b/web/core/modules/comment/src/Entity/Comment.php
index 5618cb0dde5e274c9bda05961767b143cbbfe277..13455fd4c4964acdf536345ad737d8c143f5b700 100644
--- a/web/core/modules/comment/src/Entity/Comment.php
+++ b/web/core/modules/comment/src/Entity/Comment.php
@@ -404,7 +404,8 @@ public function setSubject($subject) {
    * {@inheritdoc}
    */
   public function getAuthorName() {
-    if ($this->get('uid')->target_id) {
+    // If their is a valid user id and the user entity exists return the label.
+    if ($this->get('uid')->target_id && $this->get('uid')->entity) {
       return $this->get('uid')->entity->label();
     }
     return $this->get('name')->value ?: \Drupal::config('user.settings')->get('anonymous');
diff --git a/web/core/modules/comment/tests/src/Kernel/CommentOrphanTest.php b/web/core/modules/comment/tests/src/Kernel/CommentOrphanTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..78b7ea6fe296277da4962db1a4518f3305919f30
--- /dev/null
+++ b/web/core/modules/comment/tests/src/Kernel/CommentOrphanTest.php
@@ -0,0 +1,134 @@
+<?php
+
+namespace Drupal\Tests\comment\Kernel;
+
+use Drupal\Core\Datetime\Entity\DateFormat;
+use Drupal\KernelTests\Core\Entity\EntityKernelTestBase;
+use Drupal\Tests\EntityViewTrait;
+use Drupal\field\Entity\FieldStorageConfig;
+
+/**
+ * Tests loading and rendering orphan comments.
+ *
+ * @group comment
+ */
+class CommentOrphanTest extends EntityKernelTestBase {
+
+  use EntityViewTrait;
+
+  /**
+   * {@inheritdoc}
+   */
+  public static $modules = ['comment', 'node'];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    parent::setUp();
+    $this->installEntitySchema('date_format');
+    $this->installEntitySchema('comment');
+    $this->installSchema('comment', ['comment_entity_statistics']);
+  }
+
+  /**
+   * Test loading/deleting/rendering orphaned comments.
+   *
+   * @dataProvider providerTestOrphan
+   */
+  public function testOrphan($property) {
+
+    DateFormat::create([
+      'id' => 'fallback',
+      'label' => 'Fallback',
+      'pattern' => 'Y-m-d',
+    ])->save();
+
+    $comment_storage = $this->entityTypeManager->getStorage('comment');
+    $node_storage = $this->entityTypeManager->getStorage('node');
+
+    // Create a page node type.
+    $this->entityTypeManager->getStorage('node_type')->create([
+      'type' => 'page',
+      'name' => 'page',
+    ])->save();
+
+    $node = $node_storage->create([
+      'type' => 'page',
+      'title' => 'test',
+    ]);
+    $node->save();
+
+    // Create comment field.
+    $this->entityTypeManager->getStorage('field_storage_config')->create([
+      'type' => 'text_long',
+      'entity_type' => 'node',
+      'field_name' => 'comment',
+    ])->save();
+
+    // Add comment field to page content.
+    $this->entityTypeManager->getStorage('field_config')->create([
+      'field_storage' => FieldStorageConfig::loadByName('node', 'comment'),
+      'entity_type' => 'node',
+      'bundle' => 'page',
+      'label' => 'Comment',
+    ])->save();
+
+    // Make two comments
+    $comment1 = $comment_storage->create([
+      'field_name' => 'comment',
+      'comment_body' => 'test',
+      'entity_id' => $node->id(),
+      'entity_type' => 'node',
+      'comment_type' => 'default',
+    ])->save();
+
+    $comment_storage->create([
+      'field_name' => 'comment',
+      'comment_body' => 'test',
+      'entity_id' => $node->id(),
+      'entity_type' => 'node',
+      'comment_type' => 'default',
+      'pid' => $comment1,
+    ])->save();
+
+    // Render the comments.
+    $renderer = \Drupal::service('renderer');
+    $comments = $comment_storage->loadMultiple();
+    foreach ($comments as $comment) {
+      $built = $this->buildEntityView($comment, 'full', NULL);
+      $renderer->renderPlain($built);
+    }
+
+    // Make comment 2 an orphan by setting the property to an invalid value.
+    \Drupal::database()->update('comment_field_data')
+      ->fields([$property => 10])
+      ->condition('cid', 2)
+      ->execute();
+    $comment_storage->resetCache();
+    $node_storage->resetCache();
+
+    // Render the comments with an orphan comment.
+    $comments = $comment_storage->loadMultiple();
+    foreach ($comments as $comment) {
+      $built = $this->buildEntityView($comment, 'full', NULL);
+      $renderer->renderPlain($built);
+    }
+
+    $node = $node_storage->load($node->id());
+    $built = $this->buildEntityView($node, 'full', NULL);
+    $renderer->renderPlain($built);
+  }
+
+  /**
+   * Provides test data for testOrphan.
+   */
+  public function providerTestOrphan() {
+    return [
+      ['entity_id'],
+      ['uid'],
+      ['pid'],
+    ];
+  }
+
+}
diff --git a/web/core/modules/config/tests/config_import_test/config_import_test.module b/web/core/modules/config/tests/config_import_test/config_import_test.module
index d77df0e99f8121a0dc999fde22e006d1279e7583..e883045a429991d1440598fcd072835d0d5bee73 100644
--- a/web/core/modules/config/tests/config_import_test/config_import_test.module
+++ b/web/core/modules/config/tests/config_import_test/config_import_test.module
@@ -29,5 +29,4 @@ function _config_import_test_config_import_steps_alter(&$context, ConfigImporter
     $config_importer->logError('_config_import_test_config_import_steps_alter ConfigImporter error');
   }
   $context['finished'] = 1;
-  return;
 }
diff --git a/web/core/modules/content_translation/tests/src/Functional/Views/TranslationLinkTest.php b/web/core/modules/content_translation/tests/src/Functional/Views/TranslationLinkTest.php
index 6370ca8391ff638e3ef175edd5163225cb69f177..3eb5de68a8787943a7530074fee79e650d27b3f7 100644
--- a/web/core/modules/content_translation/tests/src/Functional/Views/TranslationLinkTest.php
+++ b/web/core/modules/content_translation/tests/src/Functional/Views/TranslationLinkTest.php
@@ -35,7 +35,7 @@ class TranslationLinkTest extends ContentTranslationTestBase {
   protected $defaultTheme = 'stark';
 
   protected function setUp() {
-    // @todo Use entity_type once it is has multilingual Views integration.
+    // @todo Use entity_type once it has multilingual Views integration.
     $this->entityTypeId = 'user';
 
     parent::setUp();
diff --git a/web/core/modules/datetime/src/Plugin/Field/FieldFormatter/DateTimeFormatterBase.php b/web/core/modules/datetime/src/Plugin/Field/FieldFormatter/DateTimeFormatterBase.php
index 272cb9ea1ec1c033c533e5a05c7777340ad5972b..93ef2a260a28735ecc901fb35f6f678f26f5ed41 100644
--- a/web/core/modules/datetime/src/Plugin/Field/FieldFormatter/DateTimeFormatterBase.php
+++ b/web/core/modules/datetime/src/Plugin/Field/FieldFormatter/DateTimeFormatterBase.php
@@ -232,7 +232,6 @@ protected function buildDateWithIsoAttribute(DrupalDateTime $date) {
     $build = [
       '#theme' => 'time',
       '#text' => $this->formatDate($date),
-      '#html' => FALSE,
       '#attributes' => [
         'datetime' => $iso_date,
       ],
diff --git a/web/core/modules/field/src/Plugin/migrate/process/d6/FieldOptionTranslation.php b/web/core/modules/field/src/Plugin/migrate/process/d6/FieldOptionTranslation.php
index 05bb2ad0d626f7946b327b2065462d7f3ee7483c..8432c2b26256a9606eb4e0977fe19702b06c974e 100644
--- a/web/core/modules/field/src/Plugin/migrate/process/d6/FieldOptionTranslation.php
+++ b/web/core/modules/field/src/Plugin/migrate/process/d6/FieldOptionTranslation.php
@@ -40,7 +40,7 @@ public function transform($value, MigrateExecutableInterface $migrate_executable
           $i = 0;
           foreach ($list as $allowed_value) {
             // Get the key for this allowed value which may be a key|label pair
-            // or or just key.
+            // or just key.
             $value = explode("|", $allowed_value);
             if (isset($value[0]) && ($value[0] == $option)) {
               $allowed_values = ['label' => $row->getSourceProperty('translation')];
diff --git a/web/core/modules/field/tests/src/Functional/EntityReference/EntityReferenceAutoCreateTest.php b/web/core/modules/field/tests/src/Functional/EntityReference/EntityReferenceAutoCreateTest.php
index 214704289729bb8ede067bf4b6e5e0950217281e..8d590a8c6a1c163574a62e935ab1876581c6167a 100644
--- a/web/core/modules/field/tests/src/Functional/EntityReference/EntityReferenceAutoCreateTest.php
+++ b/web/core/modules/field/tests/src/Functional/EntityReference/EntityReferenceAutoCreateTest.php
@@ -19,7 +19,7 @@ class EntityReferenceAutoCreateTest extends BrowserTestBase {
 
   use EntityReferenceTestTrait;
 
-  public static $modules = ['node', 'taxonomy'];
+  public static $modules = ['node', 'taxonomy', 'entity_test'];
 
   /**
    * {@inheritdoc}
@@ -237,4 +237,51 @@ public function testMultipleTargetBundles() {
     // $this->assertErrorLogged($error_message);
   }
 
+  /**
+   * Tests autocreation for an entity that has no bundles.
+   */
+  public function testNoBundles() {
+    $account = $this->drupalCreateUser([
+      'access content',
+      "create $this->referencingType content",
+      'administer entity_test content',
+    ]);
+    $this->drupalLogin($account);
+
+    $field_name = mb_strtolower($this->randomMachineName());
+    $handler_settings = [
+      'auto_create' => TRUE,
+    ];
+    $this->createEntityReferenceField('node', $this->referencingType, $field_name, $this->randomString(), 'entity_test_no_bundle_with_label', 'default', $handler_settings);
+    \Drupal::service('entity_display.repository')
+      ->getFormDisplay('node', $this->referencingType)
+      ->setComponent($field_name, ['type' => 'entity_reference_autocomplete'])
+      ->save();
+
+    $node_title = $this->randomMachineName();
+    $name = $this->randomMachineName();
+    $edit = [
+      $field_name . '[0][target_id]' => $name,
+      'title[0][value]' => $node_title,
+    ];
+
+    $this->drupalPostForm('node/add/' . $this->referencingType, $edit, 'Save');
+
+    // Assert referenced entity was created.
+    $result = \Drupal::entityQuery('entity_test_no_bundle_with_label')
+      ->condition('name', $name)
+      ->execute();
+    $this->assertNotEmpty($result, 'Referenced entity was created.');
+    $referenced_id = key($result);
+
+    // Assert the referenced entity is associated with referencing node.
+    $result = \Drupal::entityQuery('node')
+      ->condition('type', $this->referencingType)
+      ->execute();
+    $this->assertCount(1, $result);
+    $referencing_nid = key($result);
+    $referencing_node = Node::load($referencing_nid);
+    $this->assertEqual($referenced_id, $referencing_node->$field_name->target_id, 'Newly created node is referenced from the referencing entity.');
+  }
+
 }
diff --git a/web/core/modules/field/tests/src/Functional/reEnableModuleFieldTest.php b/web/core/modules/field/tests/src/Functional/ReEnableModuleFieldTest.php
similarity index 100%
rename from web/core/modules/field/tests/src/Functional/reEnableModuleFieldTest.php
rename to web/core/modules/field/tests/src/Functional/ReEnableModuleFieldTest.php
diff --git a/web/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateFieldFormatterSettingsTest.php b/web/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateFieldFormatterSettingsTest.php
index 387a63e3cd42e40814c34b178e2fe56b4f5e29f6..4806611b74b74cee81de8c1e7a585d9ecced6dd3 100644
--- a/web/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateFieldFormatterSettingsTest.php
+++ b/web/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateFieldFormatterSettingsTest.php
@@ -128,6 +128,8 @@ public function testMigration() {
 
     $this->assertEntity('node.blog.teaser');
     $this->assertComponent('node.blog.teaser', 'body', 'text_summary_or_trimmed', 'hidden', 0);
+    $this->assertComponent('node.blog.default', 'field_termplain', 'entity_reference_label', 'above', 13);
+    $this->assertComponent('node.blog.default', 'field_termrss', 'entity_reference_label', 'above', 14);
 
     $this->assertEntity('node.book.default');
     $this->assertComponent('node.book.default', 'body', 'text_default', 'hidden', 0);
diff --git a/web/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateFieldInstanceTest.php b/web/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateFieldInstanceTest.php
index 561e16246023a181f8b9075f73b606491a2d10f4..fef7afb6c52169a8c13442566056acab931605bf 100644
--- a/web/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateFieldInstanceTest.php
+++ b/web/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateFieldInstanceTest.php
@@ -167,12 +167,8 @@ public function testFieldInstances() {
     $this->assertEntity('node.article.field_vocab_fixed', 'vocab_fixed', 'entity_reference', FALSE, TRUE);
     $this->assertEntity('node.article.field_vocab_localize', 'vocab_localize', 'entity_reference', FALSE, FALSE);
     $this->assertEntity('node.article.field_vocab_translate', 'vocab_translate', 'entity_reference', FALSE, TRUE);
-  }
 
-  /**
-   * Tests the migration of text field instances with different text processing.
-   */
-  public function testTextFieldInstances() {
+    // Test migration of text field instances with different text processing.
     // 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
diff --git a/web/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateFieldTest.php b/web/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateFieldTest.php
index 2fa3af38eff2454a3aee5f09749413d5daddc188..a346a447b75eb654a490d229d6f08b8402bc9fd5 100644
--- a/web/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateFieldTest.php
+++ b/web/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateFieldTest.php
@@ -142,12 +142,8 @@ public function testFields() {
     // have a datetime_type setting.
     $field = FieldStorageConfig::load('node.field_date_with_end_time');
     $this->assertNull($field->getSetting('datetime_type'));
-  }
 
-  /**
-   * Tests the migration of text fields with different text processing.
-   */
-  public function testTextFields() {
+    // Test the migration of text fields with different text processing.
     // 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
diff --git a/web/core/modules/file/file.module b/web/core/modules/file/file.module
index c0abe888b433a54986d3b00de96a0cc812938460..7d0bc57ccf40885c8e559ff7d6ef56074acc16d3 100644
--- a/web/core/modules/file/file.module
+++ b/web/core/modules/file/file.module
@@ -331,7 +331,17 @@ function file_validate(FileInterface $file, $validators = []) {
   }
 
   // Let other modules perform validation on the new file.
-  return array_merge($errors, \Drupal::moduleHandler()->invokeAll('file_validate', [$file]));
+  $errors = array_merge($errors, \Drupal::moduleHandler()->invokeAll('file_validate', [$file]));
+
+  // Ensure the file does not contain a malicious extension. At this point
+  // _file_save_upload_single() will have munged the file so it does not contain
+  // a malicious extension. Contributed and custom code that calls this method
+  // needs to take similar steps if they need to permit files with malicious
+  // extensions to be uploaded.
+  if (empty($errors) && !\Drupal::config('system.file')->get('allow_insecure_uploads') && preg_match(FILE_INSECURE_EXTENSION_REGEX, $file->getFilename())) {
+    $errors[] = t('For security reasons, your upload has been rejected.');
+  }
+  return $errors;
 }
 
 /**
@@ -961,18 +971,19 @@ function file_save_upload($form_field_name, $validators = [], $destination = FAL
  */
 function _file_save_upload_single(\SplFileInfo $file_info, $form_field_name, $validators = [], $destination = FALSE, $replace = FileSystemInterface::EXISTS_REPLACE) {
   $user = \Drupal::currentUser();
+  $original_file_name = trim($file_info->getClientOriginalName(), '.');
   // Check for file upload errors and return FALSE for this file if a lower
   // level system error occurred. For a complete list of errors:
   // See http://php.net/manual/features.file-upload.errors.php.
   switch ($file_info->getError()) {
     case UPLOAD_ERR_INI_SIZE:
     case UPLOAD_ERR_FORM_SIZE:
-      \Drupal::messenger()->addError(t('The file %file could not be saved because it exceeds %maxsize, the maximum allowed size for uploads.', ['%file' => $file_info->getFilename(), '%maxsize' => format_size(Environment::getUploadMaxSize())]));
+      \Drupal::messenger()->addError(t('The file %file could not be saved because it exceeds %maxsize, the maximum allowed size for uploads.', ['%file' => $original_file_name, '%maxsize' => format_size(Environment::getUploadMaxSize())]));
       return FALSE;
 
     case UPLOAD_ERR_PARTIAL:
     case UPLOAD_ERR_NO_FILE:
-      \Drupal::messenger()->addError(t('The file %file could not be saved because the upload did not complete.', ['%file' => $file_info->getFilename()]));
+      \Drupal::messenger()->addError(t('The file %file could not be saved because the upload did not complete.', ['%file' => $original_file_name]));
       return FALSE;
 
     case UPLOAD_ERR_OK:
@@ -984,7 +995,7 @@ function _file_save_upload_single(\SplFileInfo $file_info, $form_field_name, $va
 
     default:
       // Unknown error
-      \Drupal::messenger()->addError(t('The file %file could not be saved. An unknown error has occurred.', ['%file' => $file_info->getFilename()]));
+      \Drupal::messenger()->addError(t('The file %file could not be saved. An unknown error has occurred.', ['%file' => $original_file_name]));
       return FALSE;
 
   }
@@ -992,7 +1003,7 @@ function _file_save_upload_single(\SplFileInfo $file_info, $form_field_name, $va
   $values = [
     'uid' => $user->id(),
     'status' => 0,
-    'filename' => trim($file_info->getClientOriginalName(), '.'),
+    'filename' => $original_file_name,
     'uri' => $file_info->getRealPath(),
     'filesize' => $file_info->getSize(),
   ];
@@ -1020,25 +1031,36 @@ function _file_save_upload_single(\SplFileInfo $file_info, $form_field_name, $va
     $validators['file_validate_extensions'][0] = $extensions;
   }
 
-  if (!empty($extensions)) {
-    // Munge the filename to protect against possible malicious extension
-    // hiding within an unknown file type (ie: filename.html.foo).
-    $file->setFilename(file_munge_filename($file->getFilename(), $extensions));
-  }
-
-  // Rename potentially executable files, to help prevent exploits (i.e. will
-  // rename filename.php.foo and filename.php to filename.php.foo.txt and
-  // filename.php.txt, respectively). Don't rename if 'allow_insecure_uploads'
-  // evaluates to TRUE.
-  if (!\Drupal::config('system.file')->get('allow_insecure_uploads') && preg_match(FILE_INSECURE_EXTENSION_REGEX, $file->getFilename()) && (substr($file->getFilename(), -4) != '.txt')) {
-    $file->setMimeType('text/plain');
-    // The destination filename will also later be used to create the URI.
-    $file->setFilename($file->getFilename() . '.txt');
-    // The .txt extension may not be in the allowed list of extensions. We have
-    // to add it here or else the file upload will fail.
+  //  Don't rename if 'allow_insecure_uploads' evaluates to TRUE.
+  if (!\Drupal::config('system.file')->get('allow_insecure_uploads')) {
     if (!empty($extensions)) {
-      $validators['file_validate_extensions'][0] .= ' txt';
-      \Drupal::messenger()->addStatus(t('For security reasons, your upload has been renamed to %filename.', ['%filename' => $file->getFilename()]));
+      // Munge the filename to protect against possible malicious extension
+      // hiding within an unknown file type (ie: filename.html.foo).
+      $file->setFilename(file_munge_filename($file->getFilename(), $extensions));
+    }
+
+    // Rename potentially executable files, to help prevent exploits (i.e. will
+    // rename filename.php.foo and filename.php to filename.php_.foo_.txt and
+    // filename.php_.txt, respectively).
+    if (preg_match(FILE_INSECURE_EXTENSION_REGEX, $file->getFilename())) {
+      // If the file will be rejected anyway due to a disallowed extension, it
+      // should not be renamed; rather, we'll let file_validate_extensions()
+      // reject it below.
+      if (!isset($validators['file_validate_extensions']) || empty(file_validate_extensions($file, $extensions))) {
+        $file->setMimeType('text/plain');
+        $filename = $file->getFilename();
+        if (substr($filename, -4) != '.txt') {
+          // The destination filename will also later be used to create the URI.
+          $filename .= '.txt';
+        }
+        $file->setFilename(file_munge_filename($filename, $extensions));
+        \Drupal::messenger()->addStatus(t('For security reasons, your upload has been renamed to %filename.', ['%filename' => $file->getFilename()]));
+        // The .txt extension may not be in the allowed list of extensions. We
+        // have to add it here or else the file upload will fail.
+        if (!empty($validators['file_validate_extensions'][0])) {
+          $validators['file_validate_extensions'][0] .= ' txt';
+        }
+      }
     }
   }
 
diff --git a/web/core/modules/file/src/Plugin/rest/resource/FileUploadResource.php b/web/core/modules/file/src/Plugin/rest/resource/FileUploadResource.php
index 2518a22967bc8d8ce3bbd4b01b2986d6673e19aa..d7e6f12c8172403ffcb81986c040378bff495d0c 100644
--- a/web/core/modules/file/src/Plugin/rest/resource/FileUploadResource.php
+++ b/web/core/modules/file/src/Plugin/rest/resource/FileUploadResource.php
@@ -462,26 +462,42 @@ protected function validate(FileInterface $file, array $validators) {
    *   The prepared/munged filename.
    */
   protected function prepareFilename($filename, array &$validators) {
-    if (!empty($validators['file_validate_extensions'][0])) {
-      // If there is a file_validate_extensions validator and a list of
-      // valid extensions, munge the filename to protect against possible
-      // malicious extension hiding within an unknown file type. For example,
-      // "filename.html.foo".
-      $filename = file_munge_filename($filename, $validators['file_validate_extensions'][0]);
-    }
-
-    // Rename potentially executable files, to help prevent exploits (i.e. will
-    // rename filename.php.foo and filename.php to filename.php.foo.txt and
-    // filename.php.txt, respectively). Don't rename if 'allow_insecure_uploads'
-    // evaluates to TRUE.
-    if (!$this->systemFileConfig->get('allow_insecure_uploads') && preg_match(FILE_INSECURE_EXTENSION_REGEX, $filename) && (substr($filename, -4) != '.txt')) {
-      // The destination filename will also later be used to create the URI.
-      $filename .= '.txt';
-
-      // The .txt extension may not be in the allowed list of extensions. We
-      // have to add it here or else the file upload will fail.
+    // Don't rename if 'allow_insecure_uploads' evaluates to TRUE.
+    if (!$this->systemFileConfig->get('allow_insecure_uploads')) {
       if (!empty($validators['file_validate_extensions'][0])) {
-        $validators['file_validate_extensions'][0] .= ' txt';
+        // If there is a file_validate_extensions validator and a list of
+        // valid extensions, munge the filename to protect against possible
+        // malicious extension hiding within an unknown file type. For example,
+        // "filename.html.foo".
+        $filename = file_munge_filename($filename, $validators['file_validate_extensions'][0]);
+      }
+
+      // Rename potentially executable files, to help prevent exploits (i.e.
+      // will rename filename.php.foo and filename.php to filename._php._foo.txt
+      // and filename._php.txt, respectively).
+      if (preg_match(FILE_INSECURE_EXTENSION_REGEX, $filename)) {
+        // If the file will be rejected anyway due to a disallowed extension, it
+        // should not be renamed; rather, we'll let file_validate_extensions()
+        // reject it below.
+        $passes_validation = FALSE;
+        if (!empty($validators['file_validate_extensions'][0])) {
+          $file = File::create([]);
+          $file->setFilename($filename);
+          $passes_validation = empty(file_validate_extensions($file, $validators['file_validate_extensions'][0]));
+        }
+        if (empty($validators['file_validate_extensions'][0]) || $passes_validation) {
+          if ((substr($filename, -4) != '.txt')) {
+            // The destination filename will also later be used to create the URI.
+            $filename .= '.txt';
+          }
+          $filename = file_munge_filename($filename, $validators['file_validate_extensions'][0] ?? '');
+
+          // The .txt extension may not be in the allowed list of extensions. We
+          // have to add it here or else the file upload will fail.
+          if (!empty($validators['file_validate_extensions'][0])) {
+            $validators['file_validate_extensions'][0] .= ' txt';
+          }
+        }
       }
     }
 
diff --git a/web/core/modules/file/tests/file_test/src/Form/FileTestForm.php b/web/core/modules/file/tests/file_test/src/Form/FileTestForm.php
index 08c4a57ffd7a3a0c03efc103aa9bcddd7ab92b71..c9fc1f0e93111e593b87988463e3563c04ad77f4 100644
--- a/web/core/modules/file/tests/file_test/src/Form/FileTestForm.php
+++ b/web/core/modules/file/tests/file_test/src/Form/FileTestForm.php
@@ -49,9 +49,14 @@ public function buildForm(array $form, FormStateInterface $form_state) {
     ];
 
     $form['allow_all_extensions'] = [
-      '#type' => 'checkbox',
       '#title' => t('Allow all extensions?'),
-      '#default_value' => FALSE,
+      '#type' => 'radios',
+      '#options' => [
+        'false' => 'No',
+        'empty_array' => 'Empty array',
+        'empty_string' => 'Empty string',
+      ],
+      '#default_value' => 'false',
     ];
 
     $form['is_image_file'] = [
@@ -92,9 +97,13 @@ public function submitForm(array &$form, FormStateInterface $form_state) {
       $validators['file_validate_is_image'] = [];
     }
 
-    if ($form_state->getValue('allow_all_extensions')) {
+    $allow = $form_state->getValue('allow_all_extensions');
+    if ($allow === 'empty_array') {
       $validators['file_validate_extensions'] = [];
     }
+    elseif ($allow === 'empty_string') {
+      $validators['file_validate_extensions'] = [''];
+    }
     elseif (!$form_state->isValueEmpty('extensions')) {
       $validators['file_validate_extensions'] = [$form_state->getValue('extensions')];
     }
diff --git a/web/core/modules/file/tests/file_test/src/Form/FileTestSaveUploadFromForm.php b/web/core/modules/file/tests/file_test/src/Form/FileTestSaveUploadFromForm.php
index 10127dc94cfefa105d067ef28d1b4be42afe7c47..79bff3ad7b5c8a88052464049ba87bcbcecde455 100644
--- a/web/core/modules/file/tests/file_test/src/Form/FileTestSaveUploadFromForm.php
+++ b/web/core/modules/file/tests/file_test/src/Form/FileTestSaveUploadFromForm.php
@@ -90,9 +90,14 @@ public function buildForm(array $form, FormStateInterface $form_state) {
     ];
 
     $form['allow_all_extensions'] = [
-      '#type' => 'checkbox',
-      '#title' => $this->t('Allow all extensions?'),
-      '#default_value' => FALSE,
+      '#title' => t('Allow all extensions?'),
+      '#type' => 'radios',
+      '#options' => [
+        'false' => 'No',
+        'empty_array' => 'Empty array',
+        'empty_string' => 'Empty string',
+      ],
+      '#default_value' => 'false',
     ];
 
     $form['is_image_file'] = [
@@ -139,9 +144,13 @@ public function validateForm(array &$form, FormStateInterface $form_state) {
       $validators['file_validate_is_image'] = [];
     }
 
-    if ($form_state->getValue('allow_all_extensions')) {
+    $allow = $form_state->getValue('allow_all_extensions');
+    if ($allow === 'empty_array') {
       $validators['file_validate_extensions'] = [];
     }
+    elseif ($allow === 'empty_string') {
+      $validators['file_validate_extensions'] = [''];
+    }
     elseif (!$form_state->isValueEmpty('extensions')) {
       $validators['file_validate_extensions'] = [$form_state->getValue('extensions')];
     }
diff --git a/web/core/modules/file/tests/src/Functional/FilePrivateTest.php b/web/core/modules/file/tests/src/Functional/FilePrivateTest.php
index 93c7523de1f5990d6d5b9c8a44da567ba04f1583..462b7570cb62d7a2d9f9b3ae0572400635587e77 100644
--- a/web/core/modules/file/tests/src/Functional/FilePrivateTest.php
+++ b/web/core/modules/file/tests/src/Functional/FilePrivateTest.php
@@ -2,8 +2,6 @@
 
 namespace Drupal\Tests\file\Functional;
 
-use Drupal\Core\Entity\Plugin\Validation\Constraint\ReferenceAccessConstraint;
-use Drupal\Component\Render\FormattableMarkup;
 use Drupal\file\Entity\File;
 use Drupal\node\Entity\NodeType;
 use Drupal\user\RoleInterface;
diff --git a/web/core/modules/file/tests/src/Functional/SaveUploadFormTest.php b/web/core/modules/file/tests/src/Functional/SaveUploadFormTest.php
index 407b1a01c179d9b610b4ce8541176c4b10523d01..c01fe7eb0a7412174781c3ee4aff28998bd088c9 100644
--- a/web/core/modules/file/tests/src/Functional/SaveUploadFormTest.php
+++ b/web/core/modules/file/tests/src/Functional/SaveUploadFormTest.php
@@ -198,7 +198,7 @@ public function testHandleExtension() {
     $edit = [
       'file_test_replace' => FileSystemInterface::EXISTS_REPLACE,
       'files[file_test_upload][]' => $file_system->realpath($this->image->getFileUri()),
-      'allow_all_extensions' => TRUE,
+      'allow_all_extensions' => 'empty_array',
     ];
     $this->drupalPostForm('file-test/save_upload_from_form_test', $edit, t('Submit'));
     $this->assertSession()->statusCodeEquals(200);
@@ -227,7 +227,7 @@ public function testHandleDangerousFile() {
 
     $this->drupalPostForm('file-test/save_upload_from_form_test', $edit, t('Submit'));
     $this->assertSession()->statusCodeEquals(200);
-    $message = t('For security reasons, your upload has been renamed to') . ' <em class="placeholder">' . $this->phpfile->filename . '.txt' . '</em>';
+    $message = t('For security reasons, your upload has been renamed to') . ' <em class="placeholder">' . $this->phpfile->filename . '_.txt' . '</em>';
     $this->assertRaw($message, 'Dangerous file was renamed.');
     $this->assertRaw(t('File MIME type is text/plain.'), "Dangerous file's MIME type was changed.");
     $this->assertRaw(t('You WIN!'), 'Found the success message.');
@@ -262,7 +262,8 @@ public function testHandleFileMunge() {
     $file_system = \Drupal::service('file_system');
     // Ensure insecure uploads are disabled for this test.
     $this->config('system.file')->set('allow_insecure_uploads', 0)->save();
-    $this->image = file_move($this->image, $this->image->getFileUri() . '.foo.' . $this->imageExtension);
+    $original_uri = $this->image->getFileUri();
+    $this->image = file_move($this->image, $original_uri . '.foo.' . $this->imageExtension);
 
     // Reset the hook counters to get rid of the 'move' we just called.
     file_test_reset();
@@ -286,13 +287,37 @@ public function testHandleFileMunge() {
     // Check that the correct hooks were called.
     $this->assertFileHooksCalled(['validate', 'insert']);
 
+    // Test with uppercase extensions.
+    $this->image = file_move($this->image, $original_uri . '.foo2.' . $this->imageExtension);
+    // Reset the hook counters.
+    file_test_reset();
+    $extensions = $this->imageExtension;
+    $edit = [
+      'files[file_test_upload][]' => $file_system->realpath($this->image->getFileUri()),
+      'extensions' => mb_strtoupper($extensions),
+    ];
+
+    $munged_filename = $this->image->getFilename();
+    $munged_filename = substr($munged_filename, 0, strrpos($munged_filename, '.'));
+    $munged_filename .= '_.' . $this->imageExtension;
+
+    $this->drupalPostForm('file-test/save_upload_from_form_test', $edit, t('Submit'));
+    $this->assertSession()->statusCodeEquals(200);
+    $this->assertRaw(t('For security reasons, your upload has been renamed'), 'Found security message.');
+    $this->assertRaw(t('File name is @filename', ['@filename' => $munged_filename]), 'File was successfully munged.');
+    $this->assertRaw(t('You WIN!'), 'Found the success message.');
+
+    // Check that the correct hooks were called.
+    $this->assertFileHooksCalled(['validate', 'insert']);
+
     // Ensure we don't munge files if we're allowing any extension.
     // Reset the hook counters.
     file_test_reset();
 
+    // Ensure we don't munge files if we're allowing any extension.
     $edit = [
       'files[file_test_upload][]' => $file_system->realpath($this->image->getFileUri()),
-      'allow_all_extensions' => TRUE,
+      'allow_all_extensions' => 'empty_array',
     ];
 
     $this->drupalPostForm('file-test/save_upload_from_form_test', $edit, t('Submit'));
@@ -303,6 +328,24 @@ public function testHandleFileMunge() {
 
     // Check that the correct hooks were called.
     $this->assertFileHooksCalled(['validate', 'insert']);
+
+    // Ensure that setting $validators['file_validate_extensions'] = ['']
+    // rejects all files.
+    // Reset the hook counters.
+    file_test_reset();
+
+    $edit = [
+      'files[file_test_upload][]' => $file_system->realpath($this->image->getFileUri()),
+      'allow_all_extensions' => 'empty_string',
+    ];
+
+    $this->drupalPostForm('file-test/save_upload_from_form_test', $edit, t('Submit'));
+    $this->assertSession()->statusCodeEquals(200);
+    $this->assertNoRaw(t('For security reasons, your upload has been renamed'), 'Found security message.');
+    $this->assertRaw(t('Epic upload FAIL!'), 'Found the failure message.');
+
+    // Check that the correct hooks were called.
+    $this->assertFileHooksCalled(['validate']);
   }
 
   /**
@@ -467,7 +510,6 @@ public function testCombinedErrorMessages() {
     $submit_xpath = $this->assertSession()->buttonExists('Submit')->getXpath();
     $form = $client->getCrawler()->filterXPath($submit_xpath)->form();
     $edit = [
-      'allow_all_extensions' => FALSE,
       'is_image_file' => TRUE,
       'extensions' => 'jpeg',
     ];
diff --git a/web/core/modules/file/tests/src/Functional/SaveUploadTest.php b/web/core/modules/file/tests/src/Functional/SaveUploadTest.php
index 17c87e2f94c47802ceb33d883020cb93cc18d6ae..3c46988161f713d8d7962b072dbf891f2f5eb07a 100644
--- a/web/core/modules/file/tests/src/Functional/SaveUploadTest.php
+++ b/web/core/modules/file/tests/src/Functional/SaveUploadTest.php
@@ -218,7 +218,7 @@ public function testHandleExtension() {
     $edit = [
       'file_test_replace' => FileSystemInterface::EXISTS_REPLACE,
       'files[file_test_upload]' => \Drupal::service('file_system')->realpath($this->image->getFileUri()),
-      'allow_all_extensions' => TRUE,
+      'allow_all_extensions' => 'empty_array',
     ];
     $this->drupalPostForm('file-test/upload', $edit, t('Submit'));
     $this->assertSession()->statusCodeEquals(200);
@@ -227,6 +227,27 @@ public function testHandleExtension() {
 
     // Check that the correct hooks were called.
     $this->assertFileHooksCalled(['validate', 'load', 'update']);
+
+    // Reset the hook counters.
+    file_test_reset();
+
+    // Now tell file_save_upload() to allow any extension and try and upload a
+    // malicious file.
+    $edit = [
+      'file_test_replace' => FileSystemInterface::EXISTS_REPLACE,
+      'files[file_test_upload]' => \Drupal::service('file_system')->realpath($this->phpfile->uri),
+      'allow_all_extensions' => 'empty_array',
+      'is_image_file' => FALSE,
+    ];
+    $this->drupalPostForm('file-test/upload', $edit, t('Submit'));
+    $this->assertSession()->statusCodeEquals(200);
+    $message = t('For security reasons, your upload has been renamed to') . ' <em class="placeholder">' . $this->phpfile->filename . '_.txt' . '</em>';
+    $this->assertRaw($message, 'Dangerous file was renamed.');
+    $this->assertSession()->pageTextContains('File name is php-2.php_.txt.');
+    $this->assertRaw(t('File MIME type is text/plain.'), "Dangerous file's MIME type was changed.");
+    $this->assertRaw(t('You WIN!'), 'Found the success message.');
+    // Check that the correct hooks were called.
+    $this->assertFileHooksCalled(['validate', 'insert']);
   }
 
   /**
@@ -234,8 +255,8 @@ public function testHandleExtension() {
    */
   public function testHandleDangerousFile() {
     $config = $this->config('system.file');
-    // Allow the .php extension and make sure it gets renamed to .txt for
-    // safety. Also check to make sure its MIME type was changed.
+    // Allow the .php extension and make sure it gets munged and given a .txt
+    // extension for safety. Also check to make sure its MIME type was changed.
     $edit = [
       'file_test_replace' => FileSystemInterface::EXISTS_REPLACE,
       'files[file_test_upload]' => \Drupal::service('file_system')->realpath($this->phpfile->uri),
@@ -245,9 +266,9 @@ public function testHandleDangerousFile() {
 
     $this->drupalPostForm('file-test/upload', $edit, t('Submit'));
     $this->assertSession()->statusCodeEquals(200);
-    $message = t('For security reasons, your upload has been renamed to') . ' <em class="placeholder">' . $this->phpfile->filename . '.txt' . '</em>';
+    $message = t('For security reasons, your upload has been renamed to') . ' <em class="placeholder">' . $this->phpfile->filename . '_.txt' . '</em>';
     $this->assertRaw($message, 'Dangerous file was renamed.');
-    $this->assertSession()->pageTextContains('File name is php-2.php.txt.');
+    $this->assertSession()->pageTextContains('File name is php-2.php_.txt.');
     $this->assertRaw(t('File MIME type is text/plain.'), "Dangerous file's MIME type was changed.");
     $this->assertRaw(t('You WIN!'), 'Found the success message.');
 
@@ -269,8 +290,39 @@ public function testHandleDangerousFile() {
     // Check that the correct hooks were called.
     $this->assertFileHooksCalled(['validate', 'insert']);
 
-    // Turn off insecure uploads.
+    // Reset the hook counters.
+    file_test_reset();
+
+    // Even with insecure uploads allowed, the .php file should not be uploaded
+    // if it is not explicitly included in the list of allowed extensions.
+    $edit['extensions'] = 'foo';
+    $this->drupalPostForm('file-test/upload', $edit, t('Submit'));
+    $this->assertSession()->statusCodeEquals(200);
+    $message = t('Only files with the following extensions are allowed:') . ' <em class="placeholder">' . $edit['extensions'] . '</em>';
+    $this->assertRaw($message, 'Cannot upload a disallowed extension');
+    $this->assertRaw(t('Epic upload FAIL!'), 'Found the failure message.');
+
+    // Check that the correct hooks were called.
+    $this->assertFileHooksCalled(['validate']);
+
+    // Reset the hook counters.
+    file_test_reset();
+
+    // Turn off insecure uploads, then try the same thing as above (ensure that
+    // the .php file is still rejected since it's not in the list of allowed
+    // extensions).
     $config->set('allow_insecure_uploads', 0)->save();
+    $this->drupalPostForm('file-test/upload', $edit, t('Submit'));
+    $this->assertSession()->statusCodeEquals(200);
+    $message = t('Only files with the following extensions are allowed:') . ' <em class="placeholder">' . $edit['extensions'] . '</em>';
+    $this->assertRaw($message, 'Cannot upload a disallowed extension');
+    $this->assertRaw(t('Epic upload FAIL!'), 'Found the failure message.');
+
+    // Check that the correct hooks were called.
+    $this->assertFileHooksCalled(['validate']);
+
+    // Reset the hook counters.
+    file_test_reset();
   }
 
   /**
@@ -279,7 +331,8 @@ public function testHandleDangerousFile() {
   public function testHandleFileMunge() {
     // Ensure insecure uploads are disabled for this test.
     $this->config('system.file')->set('allow_insecure_uploads', 0)->save();
-    $this->image = file_move($this->image, $this->image->getFileUri() . '.foo.' . $this->imageExtension);
+    $original_image_uri = $this->image->getFileUri();
+    $this->image = file_move($this->image, $original_image_uri . '.foo.' . $this->imageExtension);
 
     // Reset the hook counters to get rid of the 'move' we just called.
     file_test_reset();
@@ -303,13 +356,34 @@ public function testHandleFileMunge() {
     // Check that the correct hooks were called.
     $this->assertFileHooksCalled(['validate', 'insert']);
 
+    // Reset the hook counters.
+    file_test_reset();
+
+    // Ensure we don't munge the .foo extension if it is in the list of allowed
+    // extensions.
+    $extensions = 'foo ' . $this->imageExtension;
+    $edit = [
+        'files[file_test_upload]' => \Drupal::service('file_system')->realpath($this->image->getFileUri()),
+        'extensions' => $extensions,
+      ];
+
+    $this->drupalPostForm('file-test/upload', $edit, t('Submit'));
+    $this->assertSession()->statusCodeEquals(200);
+    $this->assertNoRaw(t('For security reasons, your upload has been renamed'), 'Found no security message.');
+    $this->assertRaw(t('File name is @filename', ['@filename' => $this->image->getFilename()]), 'File was not munged when all extensions within it are allowed.');
+    $this->assertRaw(t('You WIN!'), 'Found the success message.');
+
+    // Check that the correct hooks were called.
+    $this->assertFileHooksCalled(['validate', 'insert']);
+
     // Ensure we don't munge files if we're allowing any extension.
+    $this->image = file_move($this->image, $original_image_uri . '.foo.txt.' . $this->imageExtension);
     // Reset the hook counters.
     file_test_reset();
 
     $edit = [
       'files[file_test_upload]' => \Drupal::service('file_system')->realpath($this->image->getFileUri()),
-      'allow_all_extensions' => TRUE,
+      'allow_all_extensions' => 'empty_array',
     ];
 
     $this->drupalPostForm('file-test/upload', $edit, t('Submit'));
@@ -320,6 +394,83 @@ public function testHandleFileMunge() {
 
     // Check that the correct hooks were called.
     $this->assertFileHooksCalled(['validate', 'insert']);
+
+    // Test that a dangerous extension such as .php is munged even if it is in
+    // the list of allowed extensions.
+    $this->image = file_move($this->image, $original_image_uri . '.php.' . $this->imageExtension);
+    // Reset the hook counters.
+    file_test_reset();
+
+    $extensions = 'php ' . $this->imageExtension;
+    $edit = [
+        'files[file_test_upload]' => \Drupal::service('file_system')->realpath($this->image->getFileUri()),
+        'extensions' => $extensions,
+      ];
+
+    $this->drupalPostForm('file-test/upload', $edit, t('Submit'));
+    $this->assertSession()->statusCodeEquals(200);
+    $this->assertRaw(t('For security reasons, your upload has been renamed'), 'Found security message.');
+    $this->assertRaw(t('File name is @filename', ['@filename' => 'image-test.png.php_.png']), 'File was successfully munged.');
+    $this->assertRaw(t('You WIN!'), 'Found the success message.');
+
+    // Check that the correct hooks were called.
+    $this->assertFileHooksCalled(['validate', 'insert']);
+
+    // Reset the hook counters.
+    file_test_reset();
+
+    // Dangerous extensions are munged even when all extensions are allowed.
+    $edit = [
+      'files[file_test_upload]' => \Drupal::service('file_system')->realpath($this->image->getFileUri()),
+      'allow_all_extensions' => 'empty_array',
+    ];
+
+    $this->drupalPostForm('file-test/upload', $edit, t('Submit'));
+    $this->assertSession()->statusCodeEquals(200);
+    $this->assertRaw(t('For security reasons, your upload has been renamed'), 'Found security message.');
+    $this->assertRaw(t('File name is @filename.', ['@filename' => 'image-test.png_.php_.png_.txt']), 'File was successfully munged.');
+    $this->assertRaw(t('You WIN!'), 'Found the success message.');
+
+    // Check that the correct hooks were called.
+    $this->assertFileHooksCalled(['validate', 'insert']);
+
+    // Dangerous extensions are munged if is renamed to end in .txt.
+    $this->image = file_move($this->image, $original_image_uri . '.cgi.' . $this->imageExtension . '.txt');
+    // Reset the hook counters.
+    file_test_reset();
+
+    // Dangerous extensions are munged even when all extensions are allowed.
+    $edit = [
+      'files[file_test_upload]' => \Drupal::service('file_system')->realpath($this->image->getFileUri()),
+      'allow_all_extensions' => 'empty_array',
+    ];
+
+    $this->drupalPostForm('file-test/upload', $edit, t('Submit'));
+    $this->assertSession()->statusCodeEquals(200);
+    $this->assertRaw(t('For security reasons, your upload has been renamed'), 'Found security message.');
+    $this->assertRaw(t('File name is @filename.', ['@filename' => 'image-test.png_.cgi_.png_.txt']), 'File was successfully munged.');
+    $this->assertRaw(t('You WIN!'), 'Found the success message.');
+
+    // Check that the correct hooks were called.
+    $this->assertFileHooksCalled(['validate', 'insert']);
+
+    // Reset the hook counters.
+    file_test_reset();
+
+    // Ensure that setting $validators['file_validate_extensions'] = ['']
+    // rejects all files without munging or renaming.
+    $edit = [
+      'files[file_test_upload][]' => \Drupal::service('file_system')->realpath($this->image->getFileUri()),
+      'allow_all_extensions' => 'empty_string',
+    ];
+
+    $this->drupalPostForm('file-test/save_upload_from_form_test', $edit, t('Submit'));
+    $this->assertSession()->statusCodeEquals(200);
+    $this->assertNoRaw(t('For security reasons, your upload has been renamed'), 'Found security message.');
+    $this->assertRaw(t('Epic upload FAIL!'), 'Found the failure message.');
+
+    // Check that the correct hooks were called.
+    $this->assertFileHooksCalled(['validate']);
   }
 
   /**
diff --git a/web/core/modules/file/tests/src/Kernel/FileModuleTest.php b/web/core/modules/file/tests/src/Kernel/FileModuleTest.php
index a1cfa2f51af4e6556a304e3279a3902bfc06ea52..a3082bb60ac259b20919b32678ca569ff914e87a 100644
--- a/web/core/modules/file/tests/src/Kernel/FileModuleTest.php
+++ b/web/core/modules/file/tests/src/Kernel/FileModuleTest.php
@@ -28,7 +28,7 @@ public function testFileSaveUploadSingleErrorFormSize() {
     $file_name = $this->randomMachineName();
     $file_info = $this->createMock(UploadedFile::class);
     $file_info->expects($this->once())->method('getError')->willReturn(UPLOAD_ERR_FORM_SIZE);
-    $file_info->expects($this->once())->method('getFileName')->willReturn($file_name);
+    $file_info->expects($this->once())->method('getClientOriginalName')->willReturn($file_name);
     $this->assertFalse(\_file_save_upload_single($file_info, 'name'));
     $expected_message = new TranslatableMarkup('The file %file could not be saved because it exceeds %maxsize, the maximum allowed size for uploads.', ['%file' => $file_name, '%maxsize' => format_size(Environment::getUploadMaxSize())]);
     $this->assertEquals($expected_message, \Drupal::messenger()->all()['error'][0]);
diff --git a/web/core/modules/file/tests/src/Kernel/Plugin/migrate/source/d7/FileTest.php b/web/core/modules/file/tests/src/Kernel/Plugin/migrate/source/d7/FileTest.php
index b588ad789ce5ad19fc99c6be45f4b8dd7b8a57d1..32a31ea0a88e059e47ba49369254dd74af981c22 100644
--- a/web/core/modules/file/tests/src/Kernel/Plugin/migrate/source/d7/FileTest.php
+++ b/web/core/modules/file/tests/src/Kernel/Plugin/migrate/source/d7/FileTest.php
@@ -117,6 +117,7 @@ public function providerSource() {
         'filesize' => '3620',
         'status' => '1',
         'timestamp' => '1421727515',
+        'filepath' => 'sites/default/files/cube.jpeg',
       ],
     ];
     // Do an automatic count.
@@ -143,6 +144,7 @@ public function providerSource() {
         'filesize' => '3620',
         'status' => '1',
         'timestamp' => '1421727515',
+        'filepath' => 'sites/default/files/cube.jpeg',
       ],
     ];
     // Do an automatic count.
diff --git a/web/core/modules/file/tests/src/Kernel/ValidateTest.php b/web/core/modules/file/tests/src/Kernel/ValidateTest.php
index 3e9eb07a8ae552019c2783626ce70bd8e92ee2dd..f1547d62efaa86414d9eb2952aadc4cd6d18036c 100644
--- a/web/core/modules/file/tests/src/Kernel/ValidateTest.php
+++ b/web/core/modules/file/tests/src/Kernel/ValidateTest.php
@@ -35,4 +35,23 @@ public function testCallerValidation() {
     $this->assertFileHooksCalled(['validate']);
   }
 
+  /**
+   * Tests hard-coded security check in file_validate().
+   */
+  public function testInsecureExtensions() {
+    $file = $this->createFile('test.php', 'Invalid PHP');
+
+    // Test that file_validate() will check for insecure extensions by default.
+    $errors = file_validate($file, []);
+    $this->assertEquals('For security reasons, your upload has been rejected.', $errors[0]);
+    $this->assertFileHooksCalled(['validate']);
+    file_test_reset();
+
+    // Test that the 'allow_insecure_uploads' is respected.
+    $this->config('system.file')->set('allow_insecure_uploads', TRUE)->save();
+    $errors = file_validate($file, []);
+    $this->assertEmpty($errors);
+    $this->assertFileHooksCalled(['validate']);
+  }
+
 }
diff --git a/web/core/modules/filter/src/Plugin/Filter/FilterCaption.php b/web/core/modules/filter/src/Plugin/Filter/FilterCaption.php
index b5a58563d3e4ea8b317f87c6ab0ac39fdbe86afc..817f73b7afb0c4097b3e380cf4ac7e80c7658342 100644
--- a/web/core/modules/filter/src/Plugin/Filter/FilterCaption.php
+++ b/web/core/modules/filter/src/Plugin/Filter/FilterCaption.php
@@ -3,7 +3,6 @@
 namespace Drupal\filter\Plugin\Filter;
 
 use Drupal\Component\Utility\Html;
-use Drupal\Component\Utility\Xss;
 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
 use Drupal\filter\FilterPluginManager;
 use Drupal\filter\FilterProcessResult;
diff --git a/web/core/modules/jsonapi/src/Controller/TemporaryJsonapiFileFieldUploader.php b/web/core/modules/jsonapi/src/Controller/TemporaryJsonapiFileFieldUploader.php
index 2847e17e53612ed106f9dd43da6e0fbcce5ba97d..432b40557daca1ec243047b06aad47b2fa304404 100644
--- a/web/core/modules/jsonapi/src/Controller/TemporaryJsonapiFileFieldUploader.php
+++ b/web/core/modules/jsonapi/src/Controller/TemporaryJsonapiFileFieldUploader.php
@@ -380,26 +380,42 @@ protected function validate(FileInterface $file, array $validators) {
    *   The prepared/munged filename.
    */
   protected function prepareFilename($filename, array &$validators) {
-    if (!empty($validators['file_validate_extensions'][0])) {
-      // If there is a file_validate_extensions validator and a list of
-      // valid extensions, munge the filename to protect against possible
-      // malicious extension hiding within an unknown file type. For example,
-      // "filename.html.foo".
-      $filename = file_munge_filename($filename, $validators['file_validate_extensions'][0]);
-    }
-
-    // Rename potentially executable files, to help prevent exploits (i.e. will
-    // rename filename.php.foo and filename.php to filename.php.foo.txt and
-    // filename.php.txt, respectively). Don't rename if 'allow_insecure_uploads'
-    // evaluates to TRUE.
-    if (!$this->systemFileConfig->get('allow_insecure_uploads') && preg_match(FILE_INSECURE_EXTENSION_REGEX, $filename) && (substr($filename, -4) != '.txt')) {
-      // The destination filename will also later be used to create the URI.
-      $filename .= '.txt';
-
-      // The .txt extension may not be in the allowed list of extensions. We
-      // have to add it here or else the file upload will fail.
+    //  Don't rename if 'allow_insecure_uploads' evaluates to TRUE.
+    if (!$this->systemFileConfig->get('allow_insecure_uploads')) {
       if (!empty($validators['file_validate_extensions'][0])) {
-        $validators['file_validate_extensions'][0] .= ' txt';
+        // If there is a file_validate_extensions validator and a list of
+        // valid extensions, munge the filename to protect against possible
+        // malicious extension hiding within an unknown file type. For example,
+        // "filename.html.foo".
+        $filename = file_munge_filename($filename, $validators['file_validate_extensions'][0]);
+      }
+
+      // Rename potentially executable files, to help prevent exploits (i.e.
+      // will rename filename.php.foo and filename.php to filename._php._foo.txt
+      // and filename._php.txt, respectively).
+      if (preg_match(FILE_INSECURE_EXTENSION_REGEX, $filename)) {
+        // If the file will be rejected anyway due to a disallowed extension, it
+        // should not be renamed; rather, we'll let file_validate_extensions()
+        // reject it below.
+        $passes_validation = FALSE;
+        if (!empty($validators['file_validate_extensions'][0])) {
+          $file = File::create([]);
+          $file->setFilename($filename);
+          $passes_validation = empty(file_validate_extensions($file, $validators['file_validate_extensions'][0]));
+        }
+        if (empty($validators['file_validate_extensions'][0]) || $passes_validation) {
+          if (substr($filename, -4) != '.txt') {
+            // The destination filename will also later be used to create the URI.
+            $filename .= '.txt';
+          }
+          $filename = file_munge_filename($filename, $validators['file_validate_extensions'][0] ?? '');
+
+          // The .txt extension may not be in the allowed list of extensions. We
+          // have to add it here or else the file upload will fail.
+          if (!empty($validators['file_validate_extensions'][0])) {
+            $validators['file_validate_extensions'][0] .= ' txt';
+          }
+        }
       }
     }
 
diff --git a/web/core/modules/jsonapi/tests/src/Functional/FileUploadTest.php b/web/core/modules/jsonapi/tests/src/Functional/FileUploadTest.php
index 47bd338addb0f5fdc51f8c970cd95963c2ef690e..6091712b6d1bed0d087b9a854e052c2e314fa32e 100644
--- a/web/core/modules/jsonapi/tests/src/Functional/FileUploadTest.php
+++ b/web/core/modules/jsonapi/tests/src/Functional/FileUploadTest.php
@@ -621,11 +621,11 @@ public function testFileUploadMaliciousExtension() {
     $response = $this->fileRequest($uri, $php_string, ['Content-Disposition' => 'filename="example.php"']);
     // The filename is not munged because .txt is added and it is a known
     // extension to apache.
-    $expected = $this->getExpectedDocument(1, 'example.php.txt', TRUE);
+    $expected = $this->getExpectedDocument(1, 'example.php_.txt', TRUE);
     // Override the expected filesize.
     $expected['data']['attributes']['filesize'] = strlen($php_string);
     $this->assertResponseData($expected, $response);
-    $this->assertFileExists('public://foobar/example.php.txt');
+    $this->assertFileExists('public://foobar/example.php_.txt');
 
     // Add php as an allowed format. Allow insecure uploads still being FALSE
     // should still not allow this. So it should still have a .txt extension
@@ -635,11 +635,11 @@ public function testFileUploadMaliciousExtension() {
     $this->rebuildAll();
 
     $response = $this->fileRequest($uri, $php_string, ['Content-Disposition' => 'filename="example_2.php"']);
-    $expected = $this->getExpectedDocument(2, 'example_2.php.txt', TRUE);
+    $expected = $this->getExpectedDocument(2, 'example_2.php_.txt', TRUE);
     // Override the expected filesize.
     $expected['data']['attributes']['filesize'] = strlen($php_string);
     $this->assertResponseData($expected, $response);
-    $this->assertFileExists('public://foobar/example_2.php.txt');
+    $this->assertFileExists('public://foobar/example_2.php_.txt');
     $this->assertFileNotExists('public://foobar/example_2.php');
 
     // Allow .doc file uploads and ensure even a mis-configured apache will not
@@ -659,6 +659,45 @@ public function testFileUploadMaliciousExtension() {
     $this->assertFileExists('public://foobar/example_3.php_.doc');
     $this->assertFileNotExists('public://foobar/example_3.php.doc');
 
+    // Test that a dangerous extension such as .php is munged even if it is in
+    // the list of allowed extensions.
+    $this->field->setSetting('file_extensions', 'doc php')->save();
+    $this->rebuildAll();
+
+    // Test using a masked exploit file.
+    $response = $this->fileRequest($uri, $php_string, ['Content-Disposition' => 'filename="example_4.php.doc"']);
+    // The filename is munged.
+    $expected = $this->getExpectedDocument(4, 'example_4.php_.doc', TRUE);
+    // Override the expected filesize.
+    $expected['data']['attributes']['filesize'] = strlen($php_string);
+    // The file mime should be 'application/msword'.
+    $expected['data']['attributes']['filemime'] = 'application/msword';
+    $this->assertResponseData($expected, $response);
+    $this->assertFileExists('public://foobar/example_4.php_.doc');
+    $this->assertFileNotExists('public://foobar/example_4.php.doc');
+
+    // Dangerous extensions are munged even when all extensions are allowed.
+    $this->field->setSetting('file_extensions', '')->save();
+    $this->rebuildAll();
+    $response = $this->fileRequest($uri, $php_string, ['Content-Disposition' => 'filename="example_5.php.png"']);
+    $expected = $this->getExpectedDocument(5, 'example_5.php_.png_.txt', TRUE);
+    // Override the expected filesize.
+    $expected['data']['attributes']['filesize'] = strlen($php_string);
+    // The file mime should also now be text.
+    $expected['data']['attributes']['filemime'] = 'text/plain';
+    $this->assertResponseData($expected, $response);
+    $this->assertFileExists('public://foobar/example_5.php_.png_.txt');
+
+    // Dangerous extensions are munged if is renamed to end in .txt.
+    $response = $this->fileRequest($uri, $php_string, ['Content-Disposition' => 'filename="example_6.cgi.png.txt"']);
+    $expected = $this->getExpectedDocument(6, 'example_6.cgi_.png_.txt', TRUE);
+    // Override the expected filesize.
+    $expected['data']['attributes']['filesize'] = strlen($php_string);
+    // The file mime should also now be text.
+    $expected['data']['attributes']['filemime'] = 'text/plain';
+    $this->assertResponseData($expected, $response);
+    $this->assertFileExists('public://foobar/example_6.cgi_.png_.txt');
+
     // Now allow insecure uploads.
     \Drupal::configFactory()
       ->getEditable('system.file')
@@ -668,14 +707,14 @@ public function testFileUploadMaliciousExtension() {
     $this->field->setSetting('file_extensions', '')->save();
     $this->rebuildAll();
 
-    $response = $this->fileRequest($uri, $php_string, ['Content-Disposition' => 'filename="example_4.php"']);
-    $expected = $this->getExpectedDocument(4, 'example_4.php', TRUE);
+    $response = $this->fileRequest($uri, $php_string, ['Content-Disposition' => 'filename="example_7.php"']);
+    $expected = $this->getExpectedDocument(7, 'example_7.php', TRUE);
     // Override the expected filesize.
     $expected['data']['attributes']['filesize'] = strlen($php_string);
     // The file mime should also now be PHP.
     $expected['data']['attributes']['filemime'] = 'application/x-httpd-php';
     $this->assertResponseData($expected, $response);
-    $this->assertFileExists('public://foobar/example_4.php');
+    $this->assertFileExists('public://foobar/example_7.php');
   }
 
   /**
diff --git a/web/core/modules/language/src/Plugin/migrate/source/d6/LanguageContentSettingsTaxonomyVocabulary.php b/web/core/modules/language/src/Plugin/migrate/source/d6/LanguageContentSettingsTaxonomyVocabulary.php
index 4cde5687f6a4a984bddc803ffd0b2f5829c12f69..7787865b61ba1dfd1ea1adfac6ac3e6fadd0f928 100644
--- a/web/core/modules/language/src/Plugin/migrate/source/d6/LanguageContentSettingsTaxonomyVocabulary.php
+++ b/web/core/modules/language/src/Plugin/migrate/source/d6/LanguageContentSettingsTaxonomyVocabulary.php
@@ -19,8 +19,14 @@ class LanguageContentSettingsTaxonomyVocabulary extends DrupalSqlBase {
    * {@inheritdoc}
    */
   public function query() {
-    return $this->select('vocabulary', 'v')
-      ->fields('v', ['vid', 'language']);
+    $query = $this->select('vocabulary', 'v')
+      ->fields('v', ['vid']);
+    if ($this->getDatabase()
+      ->schema()
+      ->fieldExists('vocabulary', 'language')) {
+      $query->addField('v', 'language');
+    }
+    return $query;
   }
 
   /**
@@ -44,9 +50,9 @@ public function prepareRow(Row $row) {
     // 2 - Predefined language for a vocabulary and its terms.
     // 3 - Per-language terms, translatable (referencing terms with different
     // languages) but not localizable.
-    $i18ntaxonomy_vocabulary = $this->variableGet('i18ntaxonomy_vocabulary', NULL);
+    $i18ntaxonomy_vocabulary = $this->variableGet('i18ntaxonomy_vocabulary', []);
     $vid = $row->getSourceProperty('vid');
-    $state = FALSE;
+    $state = 0;
     if (array_key_exists($vid, $i18ntaxonomy_vocabulary)) {
       $state = $i18ntaxonomy_vocabulary[$vid];
     }
diff --git a/web/core/modules/language/tests/src/Kernel/Plugin/migrate/source/d6/LanguageContentTaxonomyVocabularySettingsTest.php b/web/core/modules/language/tests/src/Kernel/Plugin/migrate/source/d6/LanguageContentTaxonomyVocabularySettingsTest.php
index c709859f764e42438153ebcc974ba40a2b40e4a7..e4abb3d9fe68ea41197c8156b0a4ca7b9d42cd75 100644
--- a/web/core/modules/language/tests/src/Kernel/Plugin/migrate/source/d6/LanguageContentTaxonomyVocabularySettingsTest.php
+++ b/web/core/modules/language/tests/src/Kernel/Plugin/migrate/source/d6/LanguageContentTaxonomyVocabularySettingsTest.php
@@ -75,7 +75,33 @@ public function providerSource() {
       ],
     ];
 
+    // Test without a language column in the database.
+    $tests[1] = $tests[0];
+    foreach ($tests[1]['source_data']['vocabulary'] as $key => $row) {
+      unset($tests[1]['source_data']['vocabulary'][$key]['language']);
+    }
+    $tests[1]['source_data']['variable'] = [
+      [
+        'name' => 'i18ntaxonomy_vocabulary',
+        'value' => 'a:4:{i:1;s:1:"0";i:2;s:1:"0";i:3;s:1:"3";i:5;s:1:"1";}',
+      ],
+    ];
+    $tests[1]['expected_data'] = [
+      [
+        'vid' => 1,
+        'state' => 0,
+      ],
+      [
+        'vid' => 2,
+        'state' => 0,
+      ],
+    ];
+
+    // Test without a i18ntaxonomy_vocabulary variable.
+    $tests[2] = $tests[1];
+    unset($tests[2]['source_data']['variable']);
     return $tests;
+
   }
 
 }
diff --git a/web/core/modules/link/src/Plugin/migrate/process/FieldLink.php b/web/core/modules/link/src/Plugin/migrate/process/FieldLink.php
index 143b7ea09be8ff0761bb4110746cf48fa0a956e0..14f615e3b4362caccab27c87c50b2538c4d4e3e5 100644
--- a/web/core/modules/link/src/Plugin/migrate/process/FieldLink.php
+++ b/web/core/modules/link/src/Plugin/migrate/process/FieldLink.php
@@ -60,10 +60,15 @@ public function __construct(array $configuration, $plugin_id, $plugin_definition
    */
   protected function canonicalizeUri($uri) {
     // If we already have a scheme, we're fine.
-    if (empty($uri) || parse_url($uri, PHP_URL_SCHEME)) {
+    if (parse_url($uri, PHP_URL_SCHEME)) {
       return $uri;
     }
 
+    // Empty URI and non-links are allowed.
+    if (empty($uri) || in_array($uri, ['<nolink>', '<none>'])) {
+      return 'route:<nolink>';
+    }
+
     // Remove the <front> component of the URL.
     if (strpos($uri, '<front>') === 0) {
       $uri = substr($uri, strlen('<front>'));
diff --git a/web/core/modules/link/tests/src/Unit/Plugin/migrate/process/FieldLinkTest.php b/web/core/modules/link/tests/src/Unit/Plugin/migrate/process/FieldLinkTest.php
index 18456aa86ac9d82938cdfb6275eb3e97bbd910ab..61853410584462eb760de196df3f8284623edfc4 100644
--- a/web/core/modules/link/tests/src/Unit/Plugin/migrate/process/FieldLinkTest.php
+++ b/web/core/modules/link/tests/src/Unit/Plugin/migrate/process/FieldLinkTest.php
@@ -86,6 +86,18 @@ public function canonicalizeUriDataProvider() {
         'http://www.example.com/page#links',
         'http://www.example.com/page#links',
       ],
+      'empty' => [
+        '',
+        'route:<nolink>',
+      ],
+      'No link' => [
+        '<nolink>',
+        'route:<nolink>',
+      ],
+      'none' => [
+        '<none>',
+        'route:<nolink>',
+      ],
     ];
   }
 
diff --git a/web/core/modules/media/src/OEmbed/Endpoint.php b/web/core/modules/media/src/OEmbed/Endpoint.php
index 38d265d5bd782cb353b8c27fa3bf58edb567834d..97f97e2815fc1ad4a421dde3c7c7da2147bf4240 100644
--- a/web/core/modules/media/src/OEmbed/Endpoint.php
+++ b/web/core/modules/media/src/OEmbed/Endpoint.php
@@ -162,11 +162,17 @@ public function matchUrl($url) {
   /**
    * Builds and returns the endpoint URL.
    *
+   * In most situations this function should not be used. Your are probably
+   * looking for \Drupal\media\OEmbed\UrlResolver::getResourceUrl(), because it
+   * is alterable and also cached.
+   *
    * @param string $url
    *   The canonical media URL.
    *
    * @return string
    *   URL of the oEmbed endpoint.
+   *
+   * @see \Drupal\media\OEmbed\UrlResolver::getResourceUrl()
    */
   public function buildResourceUrl($url) {
     $query = ['url' => $url];
diff --git a/web/core/modules/media/src/Plugin/Validation/Constraint/OEmbedResourceConstraintValidator.php b/web/core/modules/media/src/Plugin/Validation/Constraint/OEmbedResourceConstraintValidator.php
index 3b885cce8ffa0b4c76d3be2541551c769ee2535f..e39b2055cc7da808211ce91ec4ff26c7a0db0cac 100644
--- a/web/core/modules/media/src/Plugin/Validation/Constraint/OEmbedResourceConstraintValidator.php
+++ b/web/core/modules/media/src/Plugin/Validation/Constraint/OEmbedResourceConstraintValidator.php
@@ -113,8 +113,7 @@ public function validate($value, Constraint $constraint) {
     // Verify that resource fetching works, because some URLs might match
     // the schemes but don't support oEmbed.
     try {
-      $endpoints = $provider->getEndpoints();
-      $resource_url = reset($endpoints)->buildResourceUrl($url);
+      $resource_url = $this->urlResolver->getResourceUrl($url);
       $this->resourceFetcher->fetchResource($resource_url);
     }
     catch (ResourceException $e) {
diff --git a/web/core/modules/media/src/Plugin/media/Source/OEmbed.php b/web/core/modules/media/src/Plugin/media/Source/OEmbed.php
index 6a3621a3b5a95381db6a62bf4ebbc288f0948cef..58a819c25a7bd0f1acfbc8946f3ea1fc8aec7962 100644
--- a/web/core/modules/media/src/Plugin/media/Source/OEmbed.php
+++ b/web/core/modules/media/src/Plugin/media/Source/OEmbed.php
@@ -394,10 +394,14 @@ protected function getLocalThumbnailUri(Resource $resource) {
     }
     $remote_thumbnail_url = $remote_thumbnail_url->toString();
 
+    // Remove the query string, since we do not want to include it in the local
+    // thumbnail URI.
+    $local_thumbnail_url = parse_url($remote_thumbnail_url, PHP_URL_PATH);
+
     // Compute the local thumbnail URI, regardless of whether or not it exists.
     $configuration = $this->getConfiguration();
     $directory = $configuration['thumbnails_directory'];
-    $local_thumbnail_uri = "$directory/" . Crypt::hashBase64($remote_thumbnail_url) . '.' . pathinfo($remote_thumbnail_url, PATHINFO_EXTENSION);
+    $local_thumbnail_uri = "$directory/" . Crypt::hashBase64($local_thumbnail_url) . '.' . pathinfo($local_thumbnail_url, PATHINFO_EXTENSION);
 
     // If the local thumbnail already exists, return its URI.
     if (file_exists($local_thumbnail_uri)) {
diff --git a/web/core/modules/media/tests/src/Kernel/OEmbedResourceConstraintValidatorTest.php b/web/core/modules/media/tests/src/Kernel/OEmbedResourceConstraintValidatorTest.php
index 692c9bb6cf36a938fca36d93b019539739c282c0..e085785ab48d5a40a27e6bad3a33ede2e631df63 100644
--- a/web/core/modules/media/tests/src/Kernel/OEmbedResourceConstraintValidatorTest.php
+++ b/web/core/modules/media/tests/src/Kernel/OEmbedResourceConstraintValidatorTest.php
@@ -4,6 +4,8 @@
 
 use Drupal\KernelTests\KernelTestBase;
 use Drupal\media\Entity\Media;
+use Drupal\media\OEmbed\Provider;
+use Drupal\media\OEmbed\ResourceFetcher;
 use Drupal\media\OEmbed\UrlResolverInterface;
 use Drupal\media\Plugin\Validation\Constraint\OEmbedResourceConstraint;
 use Drupal\media\Plugin\Validation\Constraint\OEmbedResourceConstraintValidator;
@@ -37,7 +39,7 @@ protected function setUp() {
   /**
    * @covers ::validate
    */
-  public function testValidate() {
+  public function testValidateEmptySource() {
     $media = Media::create([
       'bundle' => $this->createMediaType('oembed:video')->id(),
     ]);
@@ -52,7 +54,55 @@ public function testValidate() {
     $url_resolver = $this->prophesize(UrlResolverInterface::class);
     $url_resolver->getProviderByUrl(Argument::any())->shouldNotBeCalled();
 
-    $value = new class ($media) {
+    $validator = new OEmbedResourceConstraintValidator(
+      $url_resolver->reveal(),
+      $this->container->get('media.oembed.resource_fetcher'),
+      $this->container->get('logger.factory')
+    );
+    $validator->initialize($context->reveal());
+    $validator->validate($this->getValue($media), $constraint);
+  }
+
+  /**
+   * @covers ::validate
+   */
+  public function testValidateUrlResolverInvoked() {
+    $media = Media::create([
+      'bundle' => $this->createMediaType('oembed:video')->id(),
+      'field_media_oembed_video' => 'source value',
+    ]);
+
+    $constraint = new OEmbedResourceConstraint();
+
+    $context = $this->prophesize(ExecutionContextInterface::class);
+
+    $provider = $this->prophesize(Provider::class);
+    $provider->getName()->willReturn('YouTube');
+
+    $url_resolver = $this->prophesize(UrlResolverInterface::class);
+    $url_resolver->getProviderByUrl(Argument::any())->willReturn($provider->reveal());
+    $url_resolver->getResourceUrl(Argument::any())->shouldBeCalledOnce();
+
+    $validator = new OEmbedResourceConstraintValidator(
+      $url_resolver->reveal(),
+      $this->prophesize(ResourceFetcher::class)->reveal(),
+      $this->container->get('logger.factory')
+    );
+    $validator->initialize($context->reveal());
+    $validator->validate($this->getValue($media), $constraint);
+  }
+
+  /**
+   * Wraps a media entity in an anonymous class to mock a field value.
+   *
+   * @param \Drupal\media\Entity\Media $media
+   *   The media object.
+   *
+   * @return object
+   *   The mock field value to validate.
+   */
+  protected function getValue(Media $media) {
+    return new class ($media) {
 
       public function __construct($entity) {
         $this->entity = $entity;
@@ -63,14 +113,6 @@ public function getEntity() {
       }
 
     };
-
-    $validator = new OEmbedResourceConstraintValidator(
-      $url_resolver->reveal(),
-      $this->container->get('media.oembed.resource_fetcher'),
-      $this->container->get('logger.factory')
-    );
-    $validator->initialize($context->reveal());
-    $validator->validate($value, $constraint);
   }
 
 }
diff --git a/web/core/modules/media/tests/src/Kernel/OEmbedSourceTest.php b/web/core/modules/media/tests/src/Kernel/OEmbedSourceTest.php
index 180085ae04c53140bbb4abb7a5247bfc7a765bb5..d2c2414e1243a520dcb30986ce77c8dc638edb2d 100644
--- a/web/core/modules/media/tests/src/Kernel/OEmbedSourceTest.php
+++ b/web/core/modules/media/tests/src/Kernel/OEmbedSourceTest.php
@@ -2,20 +2,23 @@
 
 namespace Drupal\Tests\media\Kernel;
 
-use Drupal\KernelTests\KernelTestBase;
+use Drupal\Component\Utility\Crypt;
+use Drupal\Core\Url;
+use Drupal\media\Entity\Media;
+use Drupal\media\OEmbed\Resource;
+use Drupal\media\OEmbed\ResourceFetcherInterface;
+use Drupal\media\OEmbed\UrlResolverInterface;
 use Drupal\media\Plugin\media\Source\OEmbed;
+use GuzzleHttp\Client;
+use GuzzleHttp\Psr7\Response;
+use Prophecy\Argument;
 
 /**
  * @coversDefaultClass \Drupal\media\Plugin\media\Source\OEmbed
  *
  * @group media
  */
-class OEmbedSourceTest extends KernelTestBase {
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $modules = ['media'];
+class OEmbedSourceTest extends MediaKernelTestBase {
 
   /**
    * @covers ::getMetadata
@@ -34,4 +37,49 @@ public function testGetMetadata() {
     $this->assertNull($plugin->getMetadata($media->reveal(), 'type'));
   }
 
+  /**
+   * @covers ::getLocalThumbnailUri
+   */
+  public function testLocalThumbnailUriQueryStringIsIgnored() {
+    // There's no need to resolve the resource URL in this test; we just need
+    // to fetch the resource.
+    $this->container->set(
+      'media.oembed.url_resolver',
+      $this->prophesize(UrlResolverInterface::class)->reveal()
+    );
+
+    $thumbnail_url = Url::fromUri('internal:/core/misc/druplicon.png?foo=bar');
+
+    // Create a mocked resource whose thumbnail URL contains a query string.
+    $resource = $this->prophesize(Resource::class);
+    $resource->getTitle()->willReturn('Test resource');
+    $resource->getThumbnailUrl()->willReturn($thumbnail_url);
+
+    // The source plugin will try to fetch the remote thumbnail, so mock the
+    // HTTP client to ensure that request returns an empty "OK" response.
+    $http_client = $this->prophesize(Client::class);
+    $http_client->get(Argument::type('string'))->willReturn(new Response());
+    $this->container->set('http_client', $http_client->reveal());
+
+    // Mock the resource fetcher so that it will return our mocked resource.
+    $resource_fetcher = $this->prophesize(ResourceFetcherInterface::class);
+    $resource_fetcher->fetchResource(NULL)->willReturn($resource->reveal());
+    $this->container->set('media.oembed.resource_fetcher', $resource_fetcher->reveal());
+
+    $media_type = $this->createMediaType('oembed:video');
+    $source = $media_type->getSource();
+
+    $media = Media::create([
+      'bundle' => $media_type->id(),
+      $source->getSourceFieldDefinition($media_type)->getName() => $this->randomString(),
+    ]);
+    $media->save();
+
+    // Get the local thumbnail URI and ensure that it does not contain any
+    // query string.
+    $local_thumbnail_uri = $media_type->getSource()->getMetadata($media, 'thumbnail_uri');
+    $expected_uri = 'public://oembed_thumbnails/' . Crypt::hashBase64('/core/misc/druplicon.png') . '.png';
+    $this->assertSame($expected_uri, $local_thumbnail_uri);
+  }
+
 }
diff --git a/web/core/modules/media_library/media_library.module b/web/core/modules/media_library/media_library.module
index 5312b8e96dbe7404aefd7a029fc79086eef6252a..5726a80a4a62d7d03eabd0100a086fde82d51785 100644
--- a/web/core/modules/media_library/media_library.module
+++ b/web/core/modules/media_library/media_library.module
@@ -84,11 +84,21 @@ function media_library_help($route_name, RouteMatchInterface $route_match) {
  * Implements hook_media_source_info_alter().
  */
 function media_library_media_source_info_alter(array &$sources) {
-  $sources['audio_file']['forms']['media_library_add'] = FileUploadForm::class;
-  $sources['file']['forms']['media_library_add'] = FileUploadForm::class;
-  $sources['image']['forms']['media_library_add'] = FileUploadForm::class;
-  $sources['video_file']['forms']['media_library_add'] = FileUploadForm::class;
-  $sources['oembed:video']['forms']['media_library_add'] = OEmbedForm::class;
+  if (empty($sources['audio_file']['forms']['media_library_add'])) {
+    $sources['audio_file']['forms']['media_library_add'] = FileUploadForm::class;
+  }
+  if (empty($sources['file']['forms']['media_library_add'])) {
+    $sources['file']['forms']['media_library_add'] = FileUploadForm::class;
+  }
+  if (empty($sources['image']['forms']['media_library_add'])) {
+    $sources['image']['forms']['media_library_add'] = FileUploadForm::class;
+  }
+  if (empty($sources['video_file']['forms']['media_library_add'])) {
+    $sources['video_file']['forms']['media_library_add'] = FileUploadForm::class;
+  }
+  if (empty($sources['oembed:video']['forms']['media_library_add'])) {
+    $sources['oembed:video']['forms']['media_library_add'] = OEmbedForm::class;
+  }
 }
 
 /**
diff --git a/web/core/modules/media_library/src/MediaLibraryFieldWidgetOpener.php b/web/core/modules/media_library/src/MediaLibraryFieldWidgetOpener.php
index 84099ed3f600f638066776a585e959f5a337d6c8..348f22f1046bcfeb7e028825a6c7d273558822c9 100644
--- a/web/core/modules/media_library/src/MediaLibraryFieldWidgetOpener.php
+++ b/web/core/modules/media_library/src/MediaLibraryFieldWidgetOpener.php
@@ -69,7 +69,11 @@ public function checkAccess(MediaLibraryState $state, AccountInterface $account)
     $storage = $this->entityTypeManager->getStorage($entity_type_id);
     $access_handler = $this->entityTypeManager->getAccessControlHandler($entity_type_id);
 
-    if ($parameters['entity_id']) {
+    if (!empty($parameters['revision_id'])) {
+      $entity = $storage->loadRevision($parameters['revision_id']);
+      $entity_access = $access_handler->access($entity, 'update', $account, TRUE);
+    }
+    elseif ($parameters['entity_id']) {
       $entity = $storage->load($parameters['entity_id']);
       $entity_access = $access_handler->access($entity, 'update', $account, TRUE);
     }
diff --git a/web/core/modules/media_library/src/Plugin/Field/FieldWidget/MediaLibraryWidget.php b/web/core/modules/media_library/src/Plugin/Field/FieldWidget/MediaLibraryWidget.php
index f957b77fddb5ca3c6f6fb28d72e877c6ebb069e2..0ab737ccf5b50a589ccd5ba744fc1d0503e66ea5 100644
--- a/web/core/modules/media_library/src/Plugin/Field/FieldWidget/MediaLibraryWidget.php
+++ b/web/core/modules/media_library/src/Plugin/Field/FieldWidget/MediaLibraryWidget.php
@@ -473,6 +473,10 @@ public function formElement(FieldItemListInterface $items, $delta, array $elemen
     // tamper-proof hash in a consistent way.
     if (!$entity->isNew()) {
       $opener_parameters['entity_id'] = (string) $entity->id();
+
+      if ($entity->getEntityType()->isRevisionable()) {
+        $opener_parameters['revision_id'] = (string) $entity->getRevisionId();
+      }
     }
     $state = MediaLibraryState::create('media_library.opener.field_widget', $allowed_media_type_ids, $selected_type_id, $remaining, $opener_parameters);
 
diff --git a/web/core/modules/media_library/tests/modules/media_library_form_overwrite_test/media_library_form_overwrite_test.info.yml b/web/core/modules/media_library/tests/modules/media_library_form_overwrite_test/media_library_form_overwrite_test.info.yml
new file mode 100644
index 0000000000000000000000000000000000000000..d2799420a8cfe07f5e9b7655a268ba7faa8f679a
--- /dev/null
+++ b/web/core/modules/media_library/tests/modules/media_library_form_overwrite_test/media_library_form_overwrite_test.info.yml
@@ -0,0 +1,10 @@
+name: 'Media Library Form Overwrite test'
+type: module
+description: 'Test module for Media Library.'
+package: Testing
+dependencies:
+  - drupal:image
+  - drupal:media_library
+  - drupal:menu_ui
+  - drupal:node
+  - drupal:path
diff --git a/web/core/modules/media_library/tests/modules/media_library_form_overwrite_test/media_library_form_overwrite_test.module b/web/core/modules/media_library/tests/modules/media_library_form_overwrite_test/media_library_form_overwrite_test.module
new file mode 100644
index 0000000000000000000000000000000000000000..f52e79dd0696dc5e0bfa85343a8c6af9c353b965
--- /dev/null
+++ b/web/core/modules/media_library/tests/modules/media_library_form_overwrite_test/media_library_form_overwrite_test.module
@@ -0,0 +1,12 @@
+<?php
+
+/**
+ * @file
+ * Contains.
+ */
+
+use Drupal\media_library_form_overwrite_test\Form\TestAddForm;
+
+function media_library_form_overwrite_test_media_source_info_alter(array &$sources) {
+  $sources['image']['forms']['media_library_add'] = TestAddForm::class;
+}
diff --git a/web/core/modules/media_library/tests/modules/media_library_form_overwrite_test/src/Form/TestAddForm.php b/web/core/modules/media_library/tests/modules/media_library_form_overwrite_test/src/Form/TestAddForm.php
new file mode 100644
index 0000000000000000000000000000000000000000..cddece17ac1f46cb4507540c693247ab76a1d4b0
--- /dev/null
+++ b/web/core/modules/media_library/tests/modules/media_library_form_overwrite_test/src/Form/TestAddForm.php
@@ -0,0 +1,27 @@
+<?php
+
+namespace Drupal\media_library_form_overwrite_test\Form;
+
+use Drupal\Core\Form\FormStateInterface;
+use Drupal\media_library\Form\AddFormBase;
+
+/**
+ * Test add form.
+ */
+class TestAddForm extends AddFormBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function buildInputElement(array $form, FormStateInterface $form_state) {
+    return [];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getFormId() {
+    return 'test_add_form';
+  }
+
+}
diff --git a/web/core/modules/media_library/tests/src/Kernel/MediaLibraryAddFormTest.php b/web/core/modules/media_library/tests/src/Kernel/MediaLibraryAddFormTest.php
index 51b70c97806381c69ff33727930ae8f529e44020..79a481eabd0ff4df4cf78bd7eba97a4d6367154e 100644
--- a/web/core/modules/media_library/tests/src/Kernel/MediaLibraryAddFormTest.php
+++ b/web/core/modules/media_library/tests/src/Kernel/MediaLibraryAddFormTest.php
@@ -7,6 +7,7 @@
 use Drupal\media_library\Form\FileUploadForm;
 use Drupal\media_library\Form\OEmbedForm;
 use Drupal\media_library\MediaLibraryState;
+use Drupal\media_library_form_overwrite_test\Form\TestAddForm;
 use Drupal\Tests\media\Traits\MediaTypeCreationTrait;
 use Drupal\Tests\user\Traits\UserCreationTrait;
 
@@ -137,4 +138,19 @@ public function testSelectedTypeValidation() {
     \Drupal::formBuilder()->buildForm(FileUploadForm::class, $form_state);
   }
 
+  /**
+   * Tests overwriting of the add form.
+   */
+  public function testDifferentAddForm() {
+    $this->enableModules(['media_library_form_overwrite_test']);
+
+    $entity_type_manager = \Drupal::entityTypeManager();
+    $image = $entity_type_manager->getStorage('media_type')->load('image');
+
+    $image_source_definition = $image->getSource()->getPluginDefinition();
+
+    // Assert the overwritten form class is set to the media source.
+    $this->assertSame(TestAddForm::class, $image_source_definition['forms']['media_library_add']);
+  }
+
 }
diff --git a/web/core/modules/media_library/tests/src/Kernel/MediaLibraryWidgetTest.php b/web/core/modules/media_library/tests/src/Kernel/MediaLibraryWidgetTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..d5ae2d0c5325fd4a876bedf59f8126bf3e24dce9
--- /dev/null
+++ b/web/core/modules/media_library/tests/src/Kernel/MediaLibraryWidgetTest.php
@@ -0,0 +1,158 @@
+<?php
+
+namespace Drupal\Tests\media_library\Kernel;
+
+use Drupal\Core\Field\BaseFieldDefinition;
+use Drupal\Core\Form\FormState;
+use Drupal\entity_test\Entity\EntityTest;
+use Drupal\entity_test\Entity\EntityTestRev;
+use Drupal\KernelTests\KernelTestBase;
+use Drupal\media\Entity\MediaType;
+use Drupal\Tests\user\Traits\UserCreationTrait;
+
+/**
+ * Tests the media library widget.
+ *
+ * @coversDefaultClass \Drupal\media_library\Plugin\Field\FieldWidget\MediaLibraryWidget
+ * @group media_library
+ */
+class MediaLibraryWidgetTest extends KernelTestBase {
+
+  use UserCreationTrait;
+
+  /**
+   * {@inheritdoc}
+   */
+  protected static $modules = [
+    'media',
+    'media_library',
+    'field',
+    'image',
+    'system',
+    'views',
+    'user',
+    'entity_test',
+  ];
+
+  /**
+   * An admin user.
+   *
+   * @var \Drupal\user\Entity\User
+   */
+  protected $adminUser;
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    parent::setUp();
+
+    $this->baseField = BaseFieldDefinition::create('entity_reference')
+      ->setName('media')
+      ->setSetting('target_type', 'media')
+      ->setSetting('handler_settings', ['target_bundles' => ['test_type' => 'test_type']]);
+    $this->container->get('state')->set('entity_test.additional_base_field_definitions', [
+      'media' => $this->baseField,
+    ]);
+    $this->container->get('state')->set('entity_test_rev.additional_base_field_definitions', [
+      'media' => $this->baseField,
+    ]);
+
+    $this->installEntitySchema('entity_test');
+    $this->installEntitySchema('entity_test_rev');
+    $this->installEntitySchema('user');
+    $this->installSchema('system', ['sequences', 'key_value_expire']);
+    $this->installConfig([
+      'system',
+      'image',
+      'media',
+      'media_library',
+    ]);
+
+    MediaType::create([
+      'id' => 'test_type',
+      'label' => 'Test type',
+      'source' => 'image',
+    ])->save();
+
+    // Create user 1 so the test user doesn't bypass access control.
+    $this->createUser();
+
+    $this->adminUser = $this->createUser([
+      'administer entity_test content',
+      'view media',
+    ]);
+  }
+
+  /**
+   * Test the media library widget access.
+   */
+  public function testWidgetAccess() {
+    $entity = EntityTest::create([
+      'name' => 'sample entity',
+    ]);
+    $entity->save();
+    $element = $this->buildWidgetForm($entity);
+    $this->assertMediaLibraryStateAccess(TRUE, $this->adminUser, $element['open_button']['#media_library_state']);
+  }
+
+  /**
+   * Test the media library widget access with a revisionable entity type.
+   */
+  public function testRevisionableWidgetAccess() {
+    $allowed_revision = EntityTestRev::create([
+      'name' => 'allowed_access',
+    ]);
+    $allowed_revision->save();
+
+    $denied_revision = clone $allowed_revision;
+    $denied_revision->setNewRevision();
+    $denied_revision->name = 'forbid_access';
+    $denied_revision->save();
+
+    $element = $this->buildWidgetForm($allowed_revision);
+    $this->assertMediaLibraryStateAccess(TRUE, $this->adminUser, $element['open_button']['#media_library_state']);
+
+    $element = $this->buildWidgetForm($denied_revision);
+    $this->assertMediaLibraryStateAccess(FALSE, $this->adminUser, $element['open_button']['#media_library_state']);
+  }
+
+  /**
+   * Assert if the given user has access to the given state.
+   *
+   * @param bool $access
+   *   The access result to assert.
+   * @param \Drupal\Core\Session\AccountInterface $user
+   *   The user account.
+   * @param \Drupal\media_library\MediaLibraryState $state
+   *   The media library state.
+   *
+   * @throws \Exception
+   */
+  protected function assertMediaLibraryStateAccess($access, $user, $state) {
+    $ui_builder = $this->container->get('media_library.ui_builder');
+    $access_result = $ui_builder->checkAccess($user, $state);
+    $this->assertEquals($access, $access_result->isAllowed());
+  }
+
+  /**
+   * Build the media library widget form.
+   *
+   * @param \Drupal\Core\Entity\EntityInterface $entity
+   *   The entity to build the form for.
+   *
+   * @return array
+   *   A built form array of the media library widget.
+   */
+  protected function buildWidgetForm($entity) {
+    $form = [
+      '#parents' => [],
+    ];
+    return $this->container->get('plugin.manager.field.widget')->createInstance('media_library_widget', [
+      'field_definition' => $this->baseField,
+      'settings' => [],
+      'third_party_settings' => [],
+    ])->formElement($entity->media, 0, ['#description' => ''], $form, new FormState());
+  }
+
+}
diff --git a/web/core/modules/migrate/src/MigrateExecutable.php b/web/core/modules/migrate/src/MigrateExecutable.php
index c3a0506419d5236cff14e781792d5d26152491a0..f15cdf69d96ba7ec4e76adb348ad5d39348a882b 100644
--- a/web/core/modules/migrate/src/MigrateExecutable.php
+++ b/web/core/modules/migrate/src/MigrateExecutable.php
@@ -189,7 +189,11 @@ public function import() {
     }
     catch (\Exception $e) {
       $this->message->display(
-        $this->t('Migration failed with source plugin exception: @e', ['@e' => $e->getMessage()]), 'error');
+        $this->t('Migration failed with source plugin exception: @e in @file line @line', [
+          '@e' => $e->getMessage(),
+          '@file' => $e->getFile(),
+          '@line' => $e->getLine(),
+        ]), 'error');
       $this->migration->setStatus(MigrationInterface::STATUS_IDLE);
       return MigrationInterface::RESULT_FAILED;
     }
@@ -269,8 +273,11 @@ public function import() {
       }
       catch (\Exception $e) {
         $this->message->display(
-          $this->t('Migration failed with source plugin exception: @e',
-            ['@e' => $e->getMessage()]), 'error');
+          $this->t('Migration failed with source plugin exception: @e in @file line @line', [
+            '@e' => $e->getMessage(),
+            '@file' => $e->getFile(),
+            '@line' => $e->getLine(),
+          ]), 'error');
         $this->migration->setStatus(MigrationInterface::STATUS_IDLE);
         return MigrationInterface::RESULT_FAILED;
       }
diff --git a/web/core/modules/migrate/src/Plugin/MigrateProcessInterface.php b/web/core/modules/migrate/src/Plugin/MigrateProcessInterface.php
index 8fef305f74f05b85c02c32f4ed33d8396b015911..09ff01e48a24fb99465504987f6bfcee9e4dc331 100644
--- a/web/core/modules/migrate/src/Plugin/MigrateProcessInterface.php
+++ b/web/core/modules/migrate/src/Plugin/MigrateProcessInterface.php
@@ -9,16 +9,9 @@
 /**
  * An interface for migrate process plugins.
  *
- * A process plugin will typically implement the transform() method to perform
- * its work. However, it is possible instead for a process plugin to use any
- * number of methods, thus offering different alternatives ways of processing.
- * In this case, the transform() method should not be implemented, and the
- * plugin configuration must provide the name of the method to be called via the
- * "method" key. Each method must have the same signature as transform().
- * The base class \Drupal\migrate\ProcessPluginBase takes care of implementing
- * transform() and calling the configured method. See
- * \Drupal\migrate\Plugin\migrate\process\SkipOnEmpty and
- * d6_field_instance_widget_settings.yml for examples.
+ * Migrate process plugins transform the input value.For example, transform a
+ * human provided name into a machine name, look up an identifier in a previous
+ * migration and so on.
  *
  * @see \Drupal\migrate\Plugin\MigratePluginManager
  * @see \Drupal\migrate\ProcessPluginBase
diff --git a/web/core/modules/migrate/src/Plugin/migrate/destination/Entity.php b/web/core/modules/migrate/src/Plugin/migrate/destination/Entity.php
index 6bd1ec4edf99c3e204d397b92a36423be2444fbe..2978842ff96b1868c4e234fa2a2eb63d06d30a2b 100644
--- a/web/core/modules/migrate/src/Plugin/migrate/destination/Entity.php
+++ b/web/core/modules/migrate/src/Plugin/migrate/destination/Entity.php
@@ -14,6 +14,10 @@
 /**
  * Provides a generic destination to import entities.
  *
+ * Available configuration keys:
+ * - default_bundle: (optional) The bundle to use for this row if 'bundle' is
+ *   not defined on the row.
+ *
  * Examples:
  *
  * @code
@@ -44,8 +48,11 @@
  *   revision_timestamp: timestamp
  * destination:
  *   plugin: entity:node
+ *   default_bundle: custom
  * @endcode
  *
+ * This will save the processed, migrated row as a node of type 'custom'.
+ *
  * @MigrateDestination(
  *   id = "entity",
  *   deriver = "Drupal\migrate\Plugin\Derivative\MigrateEntity"
diff --git a/web/core/modules/migrate/src/Plugin/migrate/destination/EntityContentBase.php b/web/core/modules/migrate/src/Plugin/migrate/destination/EntityContentBase.php
index 228caba116bc7caee255dfba547d4d65187fb137..e095c357d65b530b8a2ec9ed70e5c1c906bd5d77 100644
--- a/web/core/modules/migrate/src/Plugin/migrate/destination/EntityContentBase.php
+++ b/web/core/modules/migrate/src/Plugin/migrate/destination/EntityContentBase.php
@@ -85,6 +85,7 @@
  *   validate: true
  * @endcode
  *
+ * @see \Drupal\migrate\Plugin\migrate\destination\Entity
  * @see \Drupal\migrate\Plugin\migrate\destination\EntityRevision
  */
 class EntityContentBase extends Entity implements HighestIdInterface, MigrateValidatableEntityInterface {
diff --git a/web/core/modules/migrate/src/Plugin/migrate/source/SqlBase.php b/web/core/modules/migrate/src/Plugin/migrate/source/SqlBase.php
index ec22c3f65e8ad49c9bfbbea07b45af01c1d2fcc1..cf13b463921b8f7a145da03625732cb54c683f5d 100644
--- a/web/core/modules/migrate/src/Plugin/migrate/source/SqlBase.php
+++ b/web/core/modules/migrate/src/Plugin/migrate/source/SqlBase.php
@@ -452,7 +452,7 @@ protected function mapJoinable() {
     }
 
     foreach (['username', 'password', 'host', 'port', 'namespace', 'driver'] as $key) {
-      if (isset($source_database_options[$key])) {
+      if (isset($source_database_options[$key]) && isset($id_map_database_options[$key])) {
         if ($id_map_database_options[$key] != $source_database_options[$key]) {
           return FALSE;
         }
diff --git a/web/core/modules/migrate/src/ProcessPluginBase.php b/web/core/modules/migrate/src/ProcessPluginBase.php
index b6a0f5aaf84f915202c1af5bf6e33426b2b3396c..2aea55660ee08100acefe374b8ccc84891825b49 100644
--- a/web/core/modules/migrate/src/ProcessPluginBase.php
+++ b/web/core/modules/migrate/src/ProcessPluginBase.php
@@ -12,10 +12,18 @@
  * transform a human provided name into a machine name, look up an identifier
  * in a previous migration and so on.
  *
+ * Process plugins extending this class can use any number of methods, thus
+ * offering different alternative ways of processing. In this case, the
+ * transform() method should not be implemented, and the plugin configuration
+ * must provide the name of the method to be called via the "method" key. Each
+ * method must have the same signature as transform().
+ *
  * @see https://www.drupal.org/node/2129651
  * @see \Drupal\migrate\Plugin\MigratePluginManager
  * @see \Drupal\migrate\Plugin\MigrateProcessInterface
  * @see \Drupal\migrate\Annotation\MigrateProcessPlugin
+ * @see \Drupal\migrate\Plugin\migrate\process\SkipOnEmpty
+ * @see d7_field_formatter_settings.yml
  * @see plugin_api
  *
  * @ingroup migration
diff --git a/web/core/modules/migrate/tests/src/Unit/MigrateExecutableTest.php b/web/core/modules/migrate/tests/src/Unit/MigrateExecutableTest.php
index 5acc995666a94fd6b50d3f2431dbdb14ab7de5b1..2bcb0a6e321774353530f99eb8d919ebf5f91346 100644
--- a/web/core/modules/migrate/tests/src/Unit/MigrateExecutableTest.php
+++ b/web/core/modules/migrate/tests/src/Unit/MigrateExecutableTest.php
@@ -66,12 +66,16 @@ public function testImportWithFailingRewind() {
     $source->expects($this->once())
       ->method('rewind')
       ->will($this->throwException(new \Exception($exception_message)));
+    // The exception message contains the line number where it is thrown. Save
+    // it for the testing the exception message.
+    $line = (__LINE__) - 3;
 
     $this->migration->expects($this->any())
       ->method('getSourcePlugin')
       ->will($this->returnValue($source));
 
     // Ensure that a message with the proper message was added.
+    $exception_message .= " in " . __FILE__ . " line $line";
     $this->message->expects($this->once())
       ->method('display')
       ->with("Migration failed with source plugin exception: " . Html::escape($exception_message));
diff --git a/web/core/modules/migrate_drupal/tests/fixtures/drupal7.php b/web/core/modules/migrate_drupal/tests/fixtures/drupal7.php
index 372ffa6d0b4f81f90a9929d70c2425b4f777b95a..4398566cb7702aad3c7ba927c97103758cf86507 100644
--- a/web/core/modules/migrate_drupal/tests/fixtures/drupal7.php
+++ b/web/core/modules/migrate_drupal/tests/fixtures/drupal7.php
@@ -4512,6 +4512,36 @@
   'translatable' => '1',
   'deleted' => '0',
 ))
+->values(array(
+  'id' => '54',
+  'field_name' => 'field_termplain',
+  'type' => 'taxonomy_term_reference',
+  'module' => 'taxonomy',
+  '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:3:{s:14:"allowed_values";a:1:{i:0;a:2:{s:10:"vocabulary";s:4:"tags";s:6:"parent";s:1:"0";}}s:21:"options_list_callback";s:29:"title_taxonomy_allowed_values";s:23:"entity_translation_sync";b: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:26:"field_data_field_termplain";a:1:{s:3:"tid";s:19:"field_termplain_tid";}}s:19:"FIELD_LOAD_REVISION";a:1:{s:30:"field_revision_field_termplain";a:1:{s:3:"tid";s:19:"field_termplain_tid";}}}}}s:12:"foreign keys";a:1:{s:3:"tid";a:2:{s:5:"table";s:18:"taxonomy_term_data";s:7:"columns";a:1:{s:3:"tid";s:3:"tid";}}}s:7:"indexes";a:1:{s:3:"tid";a:1:{i:0;s:3:"tid";}}s:2:"id";s:2:"55";}',
+  'cardinality' => '1',
+  'translatable' => '1',
+  'deleted' => '0',
+))
+->values(array(
+  'id' => '55',
+  'field_name' => 'field_termrss',
+  'type' => 'taxonomy_term_reference',
+  'module' => 'taxonomy',
+  'active' => '1',
+  'storage_type' => 'field_sql_storage',
+  'storage_module' => 'field_sql_storage',
+  'storage_active' => '1',
+  'locked' => '0',
+  'data' => 'a:7:{s:12:"translatable";i:0;s:12:"entity_types";a:0:{}s:8:"settings";a:3:{s:14:"allowed_values";a:1:{i:0;a:2:{s:10:"vocabulary";s:19:"sujet_de_discussion";s:6:"parent";s:1:"0";}}s:21:"options_list_callback";s:29:"title_taxonomy_allowed_values";s:23:"entity_translation_sync";b: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:24:"field_data_field_termrss";a:1:{s:3:"tid";s:17:"field_termrss_tid";}}s:19:"FIELD_LOAD_REVISION";a:1:{s:28:"field_revision_field_termrss";a:1:{s:3:"tid";s:17:"field_termrss_tid";}}}}}s:12:"foreign keys";a:1:{s:3:"tid";a:2:{s:5:"table";s:18:"taxonomy_term_data";s:7:"columns";a:1:{s:3:"tid";s:3:"tid";}}}s:7:"indexes";a:1:{s:3:"tid";a:1:{i:0;s:3:"tid";}}s:2:"id";s:2:"56";}',
+  'cardinality' => '1',
+  'translatable' => '1',
+  'deleted' => '0',
+))
 ->execute();
 $connection->schema()->createTable('field_config_instance', array(
   'fields' => array(
@@ -5291,6 +5321,24 @@
   'data' => 'a:6:{s:5:"label";s:7:"Comment";s:8:"settings";a:2:{s:15:"text_processing";i:1;s:18:"user_register_form";b:0;}s:8:"required";b:1;s:7:"display";a:1:{s:7:"default";a:5:{s:5:"label";s:6:"hidden";s:4:"type";s:12:"text_default";s:6:"weight";i:0;s:8:"settings";a:0:{}s:6:"module";s:4:"text";}}s:6:"widget";a:4:{s:4:"type";s:13:"text_textarea";s:8:"settings";a:1:{s:4:"rows";i:5;}s:6:"weight";i:0;s:6:"module";s:4:"text";}s:11:"description";s:0:"";}',
   'deleted' => '0',
 ))
+->values(array(
+  'id' => '84',
+  'field_id' => '54',
+  'field_name' => 'field_termplain',
+  'entity_type' => 'node',
+  'bundle' => 'blog',
+  'data' => 'a:6:{s:5:"label";s:9:"termplain";s:6:"widget";a:4:{s:4:"type";s:15:"options_buttons";s:6:"weight";s:2:"15";s:8:"settings";a:0:{}s:6:"module";s:7:"options";}s:8:"settings";a:2:{s:18:"user_register_form";b:0;s:23:"entity_translation_sync";b:0;}s:7:"display";a:1:{s:7:"default";a:5:{s:5:"label";s:5:"above";s:4:"type";s:29:"taxonomy_term_reference_plain";s:6:"weight";s:2:"13";s:8:"settings";a:0:{}s:6:"module";s:8:"taxonomy";}}s:8:"required";b:0;s:11:"description";s:0:"";}',
+  'deleted' => '0',
+))
+->values(array(
+  'id' => '85',
+  'field_id' => '55',
+  'field_name' => 'field_termrss',
+  'entity_type' => 'node',
+  'bundle' => 'blog',
+  'data' => 'a:7:{s:5:"label";s:7:"termrss";s:6:"widget";a:5:{s:6:"weight";s:2:"16";s:4:"type";s:15:"options_buttons";s:6:"module";s:7:"options";s:6:"active";i:1;s:8:"settings";a:0:{}}s:8:"settings";a:2:{s:18:"user_register_form";b:0;s:23:"entity_translation_sync";b:0;}s:7:"display";a:1:{s:7:"default";a:5:{s:5:"label";s:5:"above";s:4:"type";s:36:"taxonomy_term_reference_rss_category";s:6:"weight";s:2:"14";s:8:"settings";a:0:{}s:6:"module";s:8:"taxonomy";}}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(
   'fields' => array(
@@ -8437,6 +8485,128 @@
   'field_tags_tid' => '17',
 ))
 ->execute();
+$connection->schema()->createTable('field_data_field_termplain', 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,
+    ),
+    'field_termplain_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->schema()->createTable('field_data_field_termrss', 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,
+    ),
+    'field_termrss_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->schema()->createTable('field_data_field_term_entityreference', array(
   'fields' => array(
     'entity_type' => array(
@@ -14521,6 +14691,131 @@
   'field_term_entityreference_target_id' => '15',
 ))
 ->execute();
+
+$connection->schema()->createTable('field_revision_field_termplain', 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_termplain_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->schema()->createTable('field_revision_field_termrss', 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_termrss_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->schema()->createTable('field_revision_field_term_reference', array(
   'fields' => array(
     'entity_type' => array(
diff --git a/web/core/modules/migrate_drupal/tests/src/Kernel/d7/FieldDiscoveryTest.php b/web/core/modules/migrate_drupal/tests/src/Kernel/d7/FieldDiscoveryTest.php
index bb90e06eaf85bfd639948d2e6280c925c2d6292a..cf2c3d70e7712650c1881266d92a6e1a351b5251 100644
--- a/web/core/modules/migrate_drupal/tests/src/Kernel/d7/FieldDiscoveryTest.php
+++ b/web/core/modules/migrate_drupal/tests/src/Kernel/d7/FieldDiscoveryTest.php
@@ -203,6 +203,8 @@ public function addAllFieldProcessesAltersData() {
               'map' => [
                 'taxonomy_term_reference' => [
                   'taxonomy_term_reference_link' => 'entity_reference_label',
+                  'taxonomy_term_reference_plain' => 'entity_reference_label',
+                  'taxonomy_term_reference_rss_category' => 'entity_reference_label',
                   'i18n_taxonomy_term_reference_link' => 'entity_reference_label',
                   'entityreference_entity_view' => 'entity_reference_entity_view',
                 ],
diff --git a/web/core/modules/migrate_drupal_ui/src/Controller/MigrateController.php b/web/core/modules/migrate_drupal_ui/src/Controller/MigrateController.php
index 2054766a13ab2f4c359a38feedc4c618b23cf7b6..0947004adbd17c77e235afd2bd07581111a3b8d3 100644
--- a/web/core/modules/migrate_drupal_ui/src/Controller/MigrateController.php
+++ b/web/core/modules/migrate_drupal_ui/src/Controller/MigrateController.php
@@ -16,9 +16,11 @@ class MigrateController extends ControllerBase {
    *   A redirect response object that may be returned by the controller.
    */
   public function showLog() {
+    // Sets both the session and the query parameter so that it works correctly
+    // with both the watchdog view and the fallback.
     $_SESSION['dblog_overview_filter'] = [];
     $_SESSION['dblog_overview_filter']['type'] = ['migrate_drupal_ui' => 'migrate_drupal_ui'];
-    return $this->redirect('dblog.overview');
+    return $this->redirect('dblog.overview', [], ['query' => ['type' => ['migrate_drupal_ui']]]);
   }
 
 }
diff --git a/web/core/modules/migrate_drupal_ui/src/Form/CredentialForm.php b/web/core/modules/migrate_drupal_ui/src/Form/CredentialForm.php
index 54b431f9ff41c18bb3d6997d4bec0f194aa01d17..4e8d621fe89e62eec059d3c6584fef2e62b1861a 100644
--- a/web/core/modules/migrate_drupal_ui/src/Form/CredentialForm.php
+++ b/web/core/modules/migrate_drupal_ui/src/Form/CredentialForm.php
@@ -90,11 +90,6 @@ public function buildForm(array $form, FormStateInterface $form_state) {
 
     $drivers = $this->getDatabaseTypes();
     $drivers_keys = array_keys($drivers);
-    // @todo https://www.drupal.org/node/2678510 Because this is a multi-step
-    //   form, the form is not rebuilt during submission. Ideally we would get
-    //   the chosen driver from form input, if available, in order to use
-    //   #limit_validation_errors in the same way
-    //   \Drupal\Core\Installer\Form\SiteSettingsForm does.
     $default_driver = current($drivers_keys);
 
     $default_options = [];
@@ -134,10 +129,11 @@ public function buildForm(array $form, FormStateInterface $form_state) {
       $form['database']['driver']['#options'][$key] = $driver->name();
 
       $form['database']['settings'][$key] = $driver->getFormOptions($default_options);
-      // @todo https://www.drupal.org/node/2678510 Using
-      //   #limit_validation_errors in the submit does not work so it is not
-      //   possible to require the database and username for mysql and pgsql.
-      //   This is because this is a multi-step form.
+      unset($form['database']['settings'][$key]['advanced_options']['prefix']['#description']);
+
+      // This is a multi-step form and is not rebuilt during submission so
+      // #limit_validation_errors is not used. The database and username fields
+      // for mysql and pgsql must not be required.
       $form['database']['settings'][$key]['database']['#required'] = FALSE;
       $form['database']['settings'][$key]['username']['#required'] = FALSE;
       $form['database']['settings'][$key]['#prefix'] = '<h2 class="js-hide">' . $this->t('@driver_name settings', ['@driver_name' => $driver->name()]) . '</h2>';
diff --git a/web/core/modules/migrate_drupal_ui/tests/src/Functional/MigrateControllerTest.php b/web/core/modules/migrate_drupal_ui/tests/src/Functional/MigrateControllerTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..9b0d8efdf8ca16d9f2c7a1c51386fb91dafd5c86
--- /dev/null
+++ b/web/core/modules/migrate_drupal_ui/tests/src/Functional/MigrateControllerTest.php
@@ -0,0 +1,96 @@
+<?php
+
+namespace Drupal\Tests\migrate_drupal_ui\Functional;
+
+use Drupal\views\Entity\View;
+use Drupal\Tests\BrowserTestBase;
+
+/**
+ * Tests for the MigrateController class.
+ *
+ * @group migrate_drupal_ui
+ */
+class MigrateControllerTest extends BrowserTestBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  protected static $modules = [
+    'dblog',
+    'migrate_drupal_ui',
+    'views_ui',
+  ];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected $defaultTheme = 'stark';
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    parent::setUp();
+
+    // Log in as user 1. Migrations in the UI can only be performed as user 1.
+    $this->drupalLogin($this->rootUser);
+
+    // Create a migrate message for testing purposes.
+    \Drupal::logger('migrate_drupal_ui')->notice('A test message');
+
+  }
+
+  /**
+   * Tests the upgrade report with the view enabled, disabled and uninstalled.
+   */
+  public function testUpgradeReport() {
+    $session = $this->assertSession();
+
+    $this->assertTrue(View::load('watchdog')->status(), 'Watchdog view is enabled');
+    // Tests redirection to report page when the watchdog view is enabled.
+    $this->drupalGet('admin/reports/upgrade');
+    $session->optionExists('type[]', 'migrate_drupal_ui')->isSelected();
+    $session->pageTextContainsOnce('A test message');
+
+    // Disable the watchdog view.
+    $this->drupalGet('admin/structure/views');
+    $this->assertTrue($this->clickViewsOperationsLink('Disable', '/watchdog/'));
+    $session->statusCodeEquals(200);
+
+    // Tests redirection to report page when the watchdog view is disabled.
+    $this->drupalGet('admin/reports/upgrade');
+    $session->optionExists('type[]', 'migrate_drupal_ui')->isSelected();
+    $session->pageTextContainsOnce('A test message');
+
+    \Drupal::service('module_installer')->uninstall(['views_ui', 'views']);
+    // Tests redirection to report page when views is uninstalled.
+    $this->drupalGet('admin/reports/upgrade');
+    $session->optionExists('type[]', 'migrate_drupal_ui')->isSelected();
+    $session->pageTextContainsOnce('A test message');
+  }
+
+  /**
+   * Clicks a view link to perform an operation.
+   *
+   * @param string $label
+   *   Text between the anchor tags of the link.
+   * @param string $href_part
+   *   A unique string that is expected to occur within the href of the link.
+   *
+   * @return bool
+   *   TRUE when link found and clicked, otherwise FALSE.
+   */
+  public function clickViewsOperationsLink($label, $href_part) {
+    $links = $this->xpath('//a[normalize-space(text())=:label]', [':label' => (string) $label]);
+    foreach ($links as $link_index => $link) {
+      $position = strpos($link->getAttribute('href'), $href_part);
+      if ($position !== FALSE) {
+        $index = $link_index;
+        $this->clickLink((string) $label, $index);
+        return TRUE;
+      }
+    }
+    return FALSE;
+  }
+
+}
diff --git a/web/core/modules/migrate_drupal_ui/tests/src/Functional/d7/Upgrade7Test.php b/web/core/modules/migrate_drupal_ui/tests/src/Functional/d7/Upgrade7Test.php
index 327710d15be9bc47e299706003a6959349082164..8517c5da2a2e0dc3a9e10ee9f8945e877eecc125 100644
--- a/web/core/modules/migrate_drupal_ui/tests/src/Functional/d7/Upgrade7Test.php
+++ b/web/core/modules/migrate_drupal_ui/tests/src/Functional/d7/Upgrade7Test.php
@@ -89,8 +89,8 @@ protected function getEntityCounts() {
       'contact_form' => 3,
       'contact_message' => 0,
       'editor' => 2,
-      'field_config' => 79,
-      'field_storage_config' => 60,
+      'field_config' => 81,
+      'field_storage_config' => 62,
       'file' => 3,
       'filter_format' => 7,
       'image_style' => 6,
diff --git a/web/core/modules/node/node.views.inc b/web/core/modules/node/node.views.inc
new file mode 100644
index 0000000000000000000000000000000000000000..83e2ccf02056c322af1cd5716bca156874f92593
--- /dev/null
+++ b/web/core/modules/node/node.views.inc
@@ -0,0 +1,52 @@
+<?php
+
+/**
+ * @file
+ * Provide views data for node.module.
+ */
+
+use Drupal\user\RoleInterface;
+use Drupal\views\ViewExecutable;
+use Drupal\user\Entity\Role;
+use Drupal\views\Analyzer;
+
+/**
+ * Implements hook_views_analyze().
+ */
+function node_views_analyze(ViewExecutable $view) {
+  $ret = [];
+  // Check for something other than the default display:
+  if ($view->storage->get('base_table') == 'node') {
+    foreach ($view->displayHandlers as $display) {
+      if (!$display->isDefaulted('access') || !$display->isDefaulted('filters')) {
+        // check for no access control
+        $access = $display->getOption('access');
+        if (empty($access['type']) || $access['type'] == 'none') {
+          $anonymous_role = Role::load(RoleInterface::ANONYMOUS_ID);
+          $anonymous_has_access = $anonymous_role && $anonymous_role->hasPermission('access content');
+          $authenticated_role = Role::load(RoleInterface::AUTHENTICATED_ID);
+          $authenticated_has_access = $authenticated_role && $authenticated_role->hasPermission('access content');
+          if (!$anonymous_has_access || !$authenticated_has_access) {
+            $ret[] = Analyzer::formatMessage(t('Some roles lack permission to access content, but display %display has no access control.', ['%display' => $display->display['display_title']]), 'warning');
+          }
+          $filters = $display->getOption('filters');
+          foreach ($filters as $filter) {
+            if ($filter['table'] == 'node' && ($filter['field'] == 'status' || $filter['field'] == 'status_extra')) {
+              continue 2;
+            }
+          }
+          $ret[] = Analyzer::formatMessage(t('Display %display has no access control but does not contain a filter for published nodes.', ['%display' => $display->display['display_title']]), 'warning');
+        }
+      }
+    }
+  }
+  foreach ($view->displayHandlers as $display) {
+    if ($display->getPluginId() == 'page') {
+      if ($display->getOption('path') == 'node/%') {
+        $ret[] = Analyzer::formatMessage(t('Display %display has set node/% as path. This will not produce what you want. If you want to have multiple versions of the node view, use Layout Builder.', ['%display' => $display->display['display_title']]), 'warning');
+      }
+    }
+  }
+
+  return $ret;
+}
diff --git a/web/core/modules/node/node.views_execution.inc b/web/core/modules/node/node.views_execution.inc
index 4d834a11e3556ba5e1628458faebd8a0fba2226d..f5401b17b4a123e94c6d3c82474dd08ce710005a 100644
--- a/web/core/modules/node/node.views_execution.inc
+++ b/web/core/modules/node/node.views_execution.inc
@@ -5,9 +5,7 @@
  * Provide views runtime hooks for node.module.
  */
 
-use Drupal\user\RoleInterface;
 use Drupal\views\ViewExecutable;
-use Drupal\user\Entity\Role;
 
 /**
  * Implements hook_views_query_substitutions().
@@ -20,44 +18,3 @@ function node_views_query_substitutions(ViewExecutable $view) {
     '***BYPASS_NODE_ACCESS***' => intval($account->hasPermission('bypass node access')),
   ];
 }
-
-/**
- * Implements hook_views_analyze().
- */
-function node_views_analyze(ViewExecutable $view) {
-  $ret = [];
-  // Check for something other than the default display:
-  if ($view->storage->get('base_table') == 'node') {
-    foreach ($view->displayHandlers as $display) {
-      if (!$display->isDefaulted('access') || !$display->isDefaulted('filters')) {
-        // check for no access control
-        $access = $display->getOption('access');
-        if (empty($access['type']) || $access['type'] == 'none') {
-          $anonymous_role = Role::load(RoleInterface::ANONYMOUS_ID);
-          $anonymous_has_access = $anonymous_role && $anonymous_role->hasPermission('access content');
-          $authenticated_role = Role::load(RoleInterface::AUTHENTICATED_ID);
-          $authenticated_has_access = $authenticated_role && $authenticated_role->hasPermission('access content');
-          if (!$anonymous_has_access || !$authenticated_has_access) {
-            $ret[] = Analyzer::formatMessage(t('Some roles lack permission to access content, but display %display has no access control.', ['%display' => $display->display['display_title']]), 'warning');
-          }
-          $filters = $display->getOption('filters');
-          foreach ($filters as $filter) {
-            if ($filter['table'] == 'node' && ($filter['field'] == 'status' || $filter['field'] == 'status_extra')) {
-              continue 2;
-            }
-          }
-          $ret[] = Analyzer::formatMessage(t('Display %display has no access control but does not contain a filter for published nodes.', ['%display' => $display->display['display_title']]), 'warning');
-        }
-      }
-    }
-  }
-  foreach ($view->displayHandlers as $display) {
-    if ($display->getPluginId() == 'page') {
-      if ($display->getOption('path') == 'node/%') {
-        $ret[] = Analyzer::formatMessage(t('Display %display has set node/% as path. This will not produce what you want. If you want to have multiple versions of the node view, use panels.', ['%display' => $display->display['display_title']]), 'warning');
-      }
-    }
-  }
-
-  return $ret;
-}
diff --git a/web/core/modules/node/tests/modules/node_test_views/test_views/views.view.test_node_views_analyze.yml b/web/core/modules/node/tests/modules/node_test_views/test_views/views.view.test_node_views_analyze.yml
new file mode 100644
index 0000000000000000000000000000000000000000..df2a8cb66ec3e381d62245435bfd6cc83691ad28
--- /dev/null
+++ b/web/core/modules/node/tests/modules/node_test_views/test_views/views.view.test_node_views_analyze.yml
@@ -0,0 +1,180 @@
+langcode: en
+status: true
+dependencies:
+  module:
+    - node
+    - user
+id: test_node_views_analyze
+label: test_node_views_analyze
+module: views
+description: ''
+tag: ''
+base_table: node_field_data
+base_field: nid
+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
+      row:
+        type: 'entity:node'
+        options:
+          view_mode: teaser
+      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
+      filters:
+        status:
+          value: '1'
+          table: node_field_data
+          field: status
+          plugin_id: boolean
+          entity_type: node
+          entity_field: status
+          id: status
+          expose:
+            operator: ''
+            operator_limit_selection: false
+            operator_list: {  }
+          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
+      title: test_node_views_analyze
+      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: {  }
+  page_1:
+    display_plugin: page
+    id: page_1
+    display_title: Page
+    position: 1
+    display_options:
+      display_extenders: {  }
+      path: node/%
+    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/web/core/modules/node/tests/src/Functional/Views/NodeViewsAnalyzeTest.php b/web/core/modules/node/tests/src/Functional/Views/NodeViewsAnalyzeTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..a94983a2ff3d46f3051b61edbd8c7a986134c41c
--- /dev/null
+++ b/web/core/modules/node/tests/src/Functional/Views/NodeViewsAnalyzeTest.php
@@ -0,0 +1,47 @@
+<?php
+
+namespace Drupal\Tests\node\Functional\Views;
+
+/**
+ * Tests node_views_analyze().
+ *
+ * @group node
+ */
+class NodeViewsAnalyzeTest extends NodeTestBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public static $modules = ['views_ui', 'node_test_views'];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected $defaultTheme = 'stark';
+
+  /**
+   * Views used by this test.
+   *
+   * @var array
+   */
+  public static $testViews = ['test_node_views_analyze'];
+
+  /**
+   * Tests the implementation of node_views_analyze().
+   */
+  public function testNodeViewsAnalyze() {
+    // Create user with permission to view analyze message on views_ui.
+    $admin_user = $this->createUser(['administer views']);
+
+    $this->drupalLogin($admin_user);
+
+    // Access to views analyze page.
+    $this->drupalGet('admin/structure/views/nojs/analyze/test_node_views_analyze/page_1');
+
+    // Should return 200 with correct permission.
+    $this->assertSession()->statusCodeEquals(200);
+
+    $this->assertSession()->responseContains('has set node/% as path. This will not produce what you want. If you want to have multiple versions of the node view, use Layout Builder.');
+  }
+
+}
diff --git a/web/core/modules/path_alias/tests/src/Kernel/AliasTest.php b/web/core/modules/path_alias/tests/src/Kernel/AliasTest.php
index 111f9bff35781a1febe302f1139fd1044355c240..1ae306d6f34d068507f8dfe770008060d9d855d2 100644
--- a/web/core/modules/path_alias/tests/src/Kernel/AliasTest.php
+++ b/web/core/modules/path_alias/tests/src/Kernel/AliasTest.php
@@ -179,7 +179,6 @@ public function testWhitelistCacheDeletionMidRequest() {
 
     // Create AliasManager and Path object.
     $whitelist = new AliasWhitelist('path_alias_whitelist', $memoryCounterBackend, $this->container->get('lock'), $this->container->get('state'), $this->container->get('path_alias.repository'));
-    $aliasManager = new AliasManager($this->container->get('path_alias.repository'), $whitelist, $this->container->get('language_manager'), $memoryCounterBackend);
 
     // Whitelist cache should not exist at all yet.
     $this->assertFalse($memoryCounterBackend->get('path_alias_whitelist'));
diff --git a/web/core/modules/rest/tests/src/Functional/FileUploadResourceTestBase.php b/web/core/modules/rest/tests/src/Functional/FileUploadResourceTestBase.php
index eb26456192805bf239e99ed2a4e73eb16d2e6fe2..c48e1a3b142c6b01492a374a7265b5704b2623f1 100644
--- a/web/core/modules/rest/tests/src/Functional/FileUploadResourceTestBase.php
+++ b/web/core/modules/rest/tests/src/Functional/FileUploadResourceTestBase.php
@@ -519,11 +519,11 @@ public function testFileUploadMaliciousExtension() {
     $response = $this->fileRequest($uri, $php_string, ['Content-Disposition' => 'filename="example.php"']);
     // The filename is not munged because .txt is added and it is a known
     // extension to apache.
-    $expected = $this->getExpectedNormalizedEntity(1, 'example.php.txt', TRUE);
+    $expected = $this->getExpectedNormalizedEntity(1, 'example.php_.txt', TRUE);
     // Override the expected filesize.
     $expected['filesize'][0]['value'] = strlen($php_string);
     $this->assertResponseData($expected, $response);
-    $this->assertFileExists('public://foobar/example.php.txt');
+    $this->assertFileExists('public://foobar/example.php_.txt');
 
     // Add php as an allowed format. Allow insecure uploads still being FALSE
     // should still not allow this. So it should still have a .txt extension
@@ -533,11 +533,11 @@ public function testFileUploadMaliciousExtension() {
     $this->refreshTestStateAfterRestConfigChange();
 
     $response = $this->fileRequest($uri, $php_string, ['Content-Disposition' => 'filename="example_2.php"']);
-    $expected = $this->getExpectedNormalizedEntity(2, 'example_2.php.txt', TRUE);
+    $expected = $this->getExpectedNormalizedEntity(2, 'example_2.php_.txt', TRUE);
     // Override the expected filesize.
     $expected['filesize'][0]['value'] = strlen($php_string);
     $this->assertResponseData($expected, $response);
-    $this->assertFileExists('public://foobar/example_2.php.txt');
+    $this->assertFileExists('public://foobar/example_2.php_.txt');
     $this->assertFileNotExists('public://foobar/example_2.php');
 
     // Allow .doc file uploads and ensure even a mis-configured apache will not
@@ -557,6 +557,45 @@ public function testFileUploadMaliciousExtension() {
     $this->assertFileExists('public://foobar/example_3.php_.doc');
     $this->assertFileNotExists('public://foobar/example_3.php.doc');
 
+    // Test that a dangerous extension such as .php is munged even if it is in
+    // the list of allowed extensions.
+    $this->field->setSetting('file_extensions', 'doc php')->save();
+    $this->refreshTestStateAfterRestConfigChange();
+
+    // Test using a masked exploit file.
+    $response = $this->fileRequest($uri, $php_string, ['Content-Disposition' => 'filename="example_4.php.doc"']);
+    // The filename is munged.
+    $expected = $this->getExpectedNormalizedEntity(4, 'example_4.php_.doc', TRUE);
+    // Override the expected filesize.
+    $expected['filesize'][0]['value'] = strlen($php_string);
+    // The file mime should be 'application/msword'.
+    $expected['filemime'][0]['value'] = 'application/msword';
+    $this->assertResponseData($expected, $response);
+    $this->assertFileExists('public://foobar/example_4.php_.doc');
+    $this->assertFileNotExists('public://foobar/example_4.php.doc');
+
+    // Dangerous extensions are munged even when all extensions are allowed.
+    $this->field->setSetting('file_extensions', '')->save();
+    $this->rebuildAll();
+    $response = $this->fileRequest($uri, $php_string, ['Content-Disposition' => 'filename="example_5.php.png"']);
+    $expected = $this->getExpectedNormalizedEntity(5, 'example_5.php_.png_.txt', TRUE);
+    // Override the expected filesize.
+    $expected['filesize'][0]['value'] = strlen($php_string);
+    // The file mime should also now be text.
+    $expected['filemime'][0]['value'] = 'text/plain';
+    $this->assertResponseData($expected, $response);
+    $this->assertFileExists('public://foobar/example_5.php_.png_.txt');
+
+    // Dangerous extensions are munged if is renamed to end in .txt.
+    $response = $this->fileRequest($uri, $php_string, ['Content-Disposition' => 'filename="example_6.cgi.png.txt"']);
+    $expected = $this->getExpectedNormalizedEntity(6, 'example_6.cgi_.png_.txt', TRUE);
+    // Override the expected filesize.
+    $expected['filesize'][0]['value'] = strlen($php_string);
+    // The file mime should also now be text.
+    $expected['filemime'][0]['value'] = 'text/plain';
+    $this->assertResponseData($expected, $response);
+    $this->assertFileExists('public://foobar/example_6.cgi_.png_.txt');
+
     // Now allow insecure uploads.
     \Drupal::configFactory()
       ->getEditable('system.file')
@@ -566,14 +605,14 @@ public function testFileUploadMaliciousExtension() {
     $this->field->setSetting('file_extensions', '')->save();
     $this->refreshTestStateAfterRestConfigChange();
 
-    $response = $this->fileRequest($uri, $php_string, ['Content-Disposition' => 'filename="example_4.php"']);
-    $expected = $this->getExpectedNormalizedEntity(4, 'example_4.php', TRUE);
+    $response = $this->fileRequest($uri, $php_string, ['Content-Disposition' => 'filename="example_7.php"']);
+    $expected = $this->getExpectedNormalizedEntity(7, 'example_7.php', TRUE);
     // Override the expected filesize.
     $expected['filesize'][0]['value'] = strlen($php_string);
     // The file mime should also now be PHP.
     $expected['filemime'][0]['value'] = 'application/x-httpd-php';
     $this->assertResponseData($expected, $response);
-    $this->assertFileExists('public://foobar/example_4.php');
+    $this->assertFileExists('public://foobar/example_7.php');
   }
 
   /**
diff --git a/web/core/modules/search/src/SearchQuery.php b/web/core/modules/search/src/SearchQuery.php
index 6e342ca202c168c5520345d85ffb89aca7bac882..bba7fe9c0379ba72ad234c74b2789c3b3b9d21d9 100644
--- a/web/core/modules/search/src/SearchQuery.php
+++ b/web/core/modules/search/src/SearchQuery.php
@@ -520,7 +520,7 @@ public function addScore($score, $arguments = [], $multiply = FALSE) {
     // search expression. So, use string replacement to change this to a
     // calculated query expression, counting the number of occurrences so
     // in the execute() method we can add arguments.
-    while (($pos = strpos($score, 'i.relevance')) !== FALSE) {
+    while (strpos($score, 'i.relevance') !== FALSE) {
       $pieces = explode('i.relevance', $score, 2);
       $score = implode('((ROUND(:normalization_' . $this->relevance_count . ', 4)) * i.score * t.count)', $pieces);
       $this->relevance_count++;
diff --git a/web/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestNoBundleWithLabel.php b/web/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestNoBundleWithLabel.php
new file mode 100644
index 0000000000000000000000000000000000000000..84771f84955a7d1f23b8fed23f7c8f8c1a8c4d85
--- /dev/null
+++ b/web/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestNoBundleWithLabel.php
@@ -0,0 +1,28 @@
+<?php
+
+namespace Drupal\entity_test\Entity;
+
+/**
+ * Test entity class with no bundle but with label.
+ *
+ * @ContentEntityType(
+ *   id = "entity_test_no_bundle_with_label",
+ *   label = @Translation("Entity Test without bundle but with label"),
+ *   base_table = "entity_test_no_bundle_with_label",
+ *   handlers = {
+ *     "views_data" = "Drupal\views\EntityViewsData"
+ *   },
+ *   entity_keys = {
+ *     "id" = "id",
+ *     "label" = "name",
+ *     "revision" = "revision_id",
+ *   },
+ *   admin_permission = "administer entity_test content",
+ *   links = {
+ *     "add-form" = "/entity_test_no_bundle_with_label/add",
+ *   },
+ * )
+ */
+class EntityTestNoBundleWithLabel extends EntityTest {
+
+}
diff --git a/web/core/modules/system/tests/modules/hold_test/hold_test.module b/web/core/modules/system/tests/modules/hold_test/hold_test.module
index 867eacf90612a40c8dd0b240fd337c85b0b2aa68..9dc4d72aed6c7a4e30924e78b9667be3f45666d9 100644
--- a/web/core/modules/system/tests/modules/hold_test/hold_test.module
+++ b/web/core/modules/system/tests/modules/hold_test/hold_test.module
@@ -12,7 +12,8 @@
  *   TRUE - enable hold, FALSE - disable hold.
  */
 function hold_test_request($status) {
-  file_put_contents(\Drupal::root() . '/sites/default/files/simpletest/hold_test_request.txt', $status);
+  $site_path = \Drupal::service('site.path');
+  file_put_contents($site_path . '/hold_test_request.txt', $status);
 }
 
 /**
@@ -22,5 +23,6 @@ function hold_test_request($status) {
  *   TRUE - enable hold, FALSE - disable hold.
  */
 function hold_test_response($status) {
-  file_put_contents(\Drupal::root() . '/sites/default/files/simpletest/hold_test_response.txt', $status);
+  $site_path = \Drupal::service('site.path');
+  file_put_contents($site_path . '/hold_test_response.txt', $status);
 }
diff --git a/web/core/modules/system/tests/modules/hold_test/hold_test.services.yml b/web/core/modules/system/tests/modules/hold_test/hold_test.services.yml
index 88e7babdff32adcf91dd5d4a1018572a4afe45fb..895db31be03c8dfb4d0184733fe2bcb799b7dc73 100644
--- a/web/core/modules/system/tests/modules/hold_test/hold_test.services.yml
+++ b/web/core/modules/system/tests/modules/hold_test/hold_test.services.yml
@@ -1,5 +1,6 @@
 services:
   hold_test.response:
     class: Drupal\hold_test\EventSubscriber\HoldTestSubscriber
+    arguments: ['@site.path']
     tags:
       - { name: event_subscriber }
diff --git a/web/core/modules/system/tests/modules/hold_test/src/EventSubscriber/HoldTestSubscriber.php b/web/core/modules/system/tests/modules/hold_test/src/EventSubscriber/HoldTestSubscriber.php
index 332f4c00b9a8f01b5409f44c90ca287cc564d819..a9160a46146a09e1ec7b381db469ced34b7e6c35 100644
--- a/web/core/modules/system/tests/modules/hold_test/src/EventSubscriber/HoldTestSubscriber.php
+++ b/web/core/modules/system/tests/modules/hold_test/src/EventSubscriber/HoldTestSubscriber.php
@@ -13,6 +13,23 @@ class HoldTestSubscriber implements EventSubscriberInterface {
   const HOLD_REQUEST = 'request';
   const HOLD_RESPONSE = 'response';
 
+  /**
+   * The site path.
+   *
+   * @var string
+   */
+  protected $sitePath;
+
+  /**
+   * HoldTestSubscriber constructor.
+   *
+   * @param string $site_path
+   *   The site path.
+   */
+  public function __construct(string $site_path) {
+    $this->sitePath = $site_path;
+  }
+
   /**
    * Request hold.
    */
@@ -34,7 +51,7 @@ public function onRespond() {
    *   Type of hold.
    */
   protected function hold($type) {
-    $path = \Drupal::root() . "/sites/default/files/simpletest/hold_test_$type.txt";
+    $path = "{$this->sitePath}/hold_test_$type.txt";
     do {
       $status = (bool) file_get_contents($path);
     } while ($status && (NULL === usleep(100000)));
diff --git a/web/core/modules/system/tests/src/Functional/File/ConfigTest.php b/web/core/modules/system/tests/src/Functional/File/ConfigTest.php
index cac94da53ef07e45b3e6b3cc243cb49446f3221e..d3085b3f1be8ef4f5a215bc51e5dc558b54cb029 100644
--- a/web/core/modules/system/tests/src/Functional/File/ConfigTest.php
+++ b/web/core/modules/system/tests/src/Functional/File/ConfigTest.php
@@ -32,7 +32,6 @@ public function testFileConfigurationPage() {
     // Set the file paths to non-default values.
     // The respective directories are created automatically
     // upon form submission.
-    $file_path = $this->publicFilesDirectory;
     $fields = [
       'file_default_scheme' => 'private',
     ];
diff --git a/web/core/modules/system/tests/src/Functional/FileTransfer/TestFileTransfer.php b/web/core/modules/system/tests/src/Functional/FileTransfer/TestFileTransfer.php
index 48e57845dd70b03b417b719b01027179835cff3e..a7f051966c1011aebecb5406907a3ce6bd21bc1b 100644
--- a/web/core/modules/system/tests/src/Functional/FileTransfer/TestFileTransfer.php
+++ b/web/core/modules/system/tests/src/Functional/FileTransfer/TestFileTransfer.php
@@ -60,8 +60,6 @@ public function isFile($path) {
     return FALSE;
   }
 
-  public function chmodJailed($path, $mode, $recursive) {
-    return;
-  }
+  public function chmodJailed($path, $mode, $recursive) {}
 
 }
diff --git a/web/core/modules/taxonomy/src/Plugin/migrate/field/TaxonomyTermReference.php b/web/core/modules/taxonomy/src/Plugin/migrate/field/TaxonomyTermReference.php
index 5623648c316d7b6aca95de1681c5ddc223b3dfb7..dc04e2ca7fa36e0ab40fda7e773ad830f0778292 100644
--- a/web/core/modules/taxonomy/src/Plugin/migrate/field/TaxonomyTermReference.php
+++ b/web/core/modules/taxonomy/src/Plugin/migrate/field/TaxonomyTermReference.php
@@ -24,6 +24,8 @@ class TaxonomyTermReference extends FieldPluginBase {
   public function getFieldFormatterMap() {
     return [
       'taxonomy_term_reference_link' => 'entity_reference_label',
+      'taxonomy_term_reference_plain' => 'entity_reference_label',
+      'taxonomy_term_reference_rss_category' => 'entity_reference_label',
       'i18n_taxonomy_term_reference_link' => 'entity_reference_label',
       'entityreference_entity_view' => 'entity_reference_entity_view',
     ];
diff --git a/web/core/modules/taxonomy/src/Plugin/views/relationship/NodeTermData.php b/web/core/modules/taxonomy/src/Plugin/views/relationship/NodeTermData.php
index 5a88acea4d8bdbbf7538ef9454771fe99ed07738..621f43d04e3dda6c959a2d6424976d9125c3b591 100644
--- a/web/core/modules/taxonomy/src/Plugin/views/relationship/NodeTermData.php
+++ b/web/core/modules/taxonomy/src/Plugin/views/relationship/NodeTermData.php
@@ -133,7 +133,9 @@ public function query() {
       $query = Database::getConnection()->select('taxonomy_term_field_data', 'td');
       $query->addJoin($def['type'], 'taxonomy_index', 'tn', 'tn.tid = td.tid');
       $query->condition('td.vid', array_filter($this->options['vids']), 'IN');
-      $query->addTag('taxonomy_term_access');
+      if (empty($this->query->options['disable_sql_rewrite'])) {
+        $query->addTag('taxonomy_term_access');
+      }
       $query->fields('td');
       $query->fields('tn', ['nid']);
       $def['table formula'] = $query;
diff --git a/web/core/modules/taxonomy/tests/src/Functional/Views/RelationshipNodeTermDataTest.php b/web/core/modules/taxonomy/tests/src/Functional/Views/RelationshipNodeTermDataTest.php
index c78a511b3c76e44a908296107ee69d90e6768385..5de4e0a7e174d6837aed13c27a82b2d3d5098fb6 100644
--- a/web/core/modules/taxonomy/tests/src/Functional/Views/RelationshipNodeTermDataTest.php
+++ b/web/core/modules/taxonomy/tests/src/Functional/Views/RelationshipNodeTermDataTest.php
@@ -3,6 +3,7 @@
 namespace Drupal\Tests\taxonomy\Functional\Views;
 
 use Drupal\views\Views;
+use Drupal\views\ViewExecutable;
 
 /**
  * Tests the taxonomy term on node relationship handler.
@@ -60,4 +61,52 @@ public function testViewsHandlerRelationshipNodeTermData() {
     $this->assertIdenticalResultset($view, $expected_result, $column_map);
   }
 
+  /**
+   * Tests that the 'taxonomy_term_access' tag is added to the Views query.
+   */
+  public function testTag() {
+    // Change the view to test relation limited by vocabulary.
+    $this->config('views.view.test_taxonomy_node_term_data')
+      ->set('display.default.display_options.relationships.term_node_tid.vids', ['views_testing_tags'])
+      ->save();
+    $view = Views::getView('test_taxonomy_node_term_data');
+    $this->executeView($view, [$this->term1->id()]);
+
+    // By default, view has taxonomy_term_access tag.
+    $this->assertQueriesTermAccessTag($view, TRUE);
+
+    // The term_access tag is not set if disable_sql_rewrite is set.
+    $view = Views::getView('test_taxonomy_node_term_data');
+    $display = $view->getDisplay();
+    $display_options = $display->getOption('query');
+    $display_options['options']['disable_sql_rewrite'] = TRUE;
+    $display->setOption('query', $display_options);
+    $view->save();
+    $this->executeView($view, [$this->term1->id()]);
+
+    $this->assertQueriesTermAccessTag($view, FALSE);
+  }
+
+  /**
+   * Assert views queries have taxonomy_term_access tag.
+   *
+   * @param \Drupal\views\ViewExecutable $view
+   *   The View to check for the term access tag.
+   * @param bool $hasTag
+   *   The expected existence of taxonomy_term_access tag.
+   */
+  protected function assertQueriesTermAccessTag(ViewExecutable $view, $hasTag) {
+    $main_query = $view->build_info['query'];
+    $count_query = $view->build_info['count_query'];
+
+    foreach ([$main_query, $count_query] as $query) {
+      $tables = $query->getTables();
+      foreach ($tables as $join_table) {
+        if (is_object($join_table['table'])) {
+          $this->assertSame($join_table['table']->hasTag('taxonomy_term_access'), $hasTag);
+        }
+      }
+    }
+  }
+
 }
diff --git a/web/core/modules/update/src/UpdateManagerInterface.php b/web/core/modules/update/src/UpdateManagerInterface.php
index 74dac9f67c9f171827ed1244e886b98f59d20f5f..32eb34cbba8d082a1c887fc460c9438605cad96e 100644
--- a/web/core/modules/update/src/UpdateManagerInterface.php
+++ b/web/core/modules/update/src/UpdateManagerInterface.php
@@ -82,8 +82,14 @@ public function getProjects();
   /**
    * Processes a step in batch for fetching available update data.
    *
+   * Before calling this method, call
+   * UpdateManagerInterface::refreshUpdateData() to clear existing update data
+   * and initiate re-fetching.
+   *
    * @param array $context
    *   Reference to an array used for Batch API storage.
+   *
+   * @see \Drupal\update\UpdateManagerInterface::refreshUpdateData()
    */
   public function fetchDataBatch(&$context);
 
diff --git a/web/core/modules/update/src/UpdateProcessor.php b/web/core/modules/update/src/UpdateProcessor.php
index 25dfc7a004bc90dd42e104f726e64010cdda7828..8d42dd53622abfc868e156a0b2d9f5962c83cdfd 100644
--- a/web/core/modules/update/src/UpdateProcessor.php
+++ b/web/core/modules/update/src/UpdateProcessor.php
@@ -127,6 +127,11 @@ public function createFetchTask($project) {
    */
   public function fetchData() {
     $end = time() + $this->updateSettings->get('fetch.timeout');
+    if ($this->fetchQueue->numberOfItems()) {
+      // Delete any stored project data as that needs refreshing when
+      // update_calculate_project_data() is called.
+      $this->tempStore->delete('update_project_data');
+    }
     while (time() < $end && ($item = $this->fetchQueue->claimItem())) {
       $this->processFetchTask($item->data);
       $this->fetchQueue->deleteItem($item);
diff --git a/web/core/modules/update/tests/fixtures/release-history/drupal.broken.xml b/web/core/modules/update/tests/fixtures/release-history/drupal.broken.xml
new file mode 100644
index 0000000000000000000000000000000000000000..1ba5d5e408acf5191e4c309a5cc643e69c6fc83a
--- /dev/null
+++ b/web/core/modules/update/tests/fixtures/release-history/drupal.broken.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="utf-8"?>
+<project xmlns:dc="http://purl.org/dc/elements/1.1/">
+</project>
diff --git a/web/core/modules/update/tests/src/Functional/UpdateCoreTest.php b/web/core/modules/update/tests/src/Functional/UpdateCoreTest.php
index f01e9b2dd88b4fb9df79a179c129280987fda1ed..e425d52553141b1d5847f450e8bccc14f105b553 100644
--- a/web/core/modules/update/tests/src/Functional/UpdateCoreTest.php
+++ b/web/core/modules/update/tests/src/Functional/UpdateCoreTest.php
@@ -862,6 +862,43 @@ public function testRevokedRelease() {
     }
   }
 
+  /**
+   * Checks that Drupal recovers after problems connecting to update server.
+   */
+  public function testBrokenThenFixedUpdates() {
+    $this->drupalLogin($this->drupalCreateUser([
+      'administer site configuration',
+      'access administration pages',
+    ]));
+    $this->setSystemInfo('8.0.0');
+    // Instead of using refreshUpdateStatus(), set these manually.
+    $this->config('update.settings')
+      ->set('fetch.url', Url::fromRoute('update_test.update_test')->setAbsolute()->toString())
+      ->save();
+    // Use update XML that has no information to simulate a broken response from
+    // the update server.
+    $this->config('update_test.settings')
+      ->set('xml_map', ['drupal' => 'broken'])
+      ->save();
+
+    // This will retrieve broken updates.
+    $this->cronRun();
+    $this->drupalGet('admin/reports/status');
+    $this->assertSession()->statusCodeEquals(200);
+    $this->assertSession()->pageTextContains('There was a problem checking available updates for Drupal.');
+    $this->config('update_test.settings')
+      ->set('xml_map', ['drupal' => 'sec.0.2'])
+      ->save();
+    // Simulate the update_available_releases state expiring before cron is run
+    // and the state is used by \Drupal\update\UpdateManager::getProjects().
+    \Drupal::keyValueExpirable('update_available_releases')->deleteAll();
+    // This cron run should retrieve fixed updates.
+    $this->cronRun();
+    $this->drupalGet('admin/structure');
+    $this->assertSession()->statusCodeEquals(200);
+    $this->assertSession()->pageTextContains('There is a security update available for your version of Drupal.');
+  }
+
   /**
    * Tests messages when a project release is marked unsupported.
    *
diff --git a/web/core/modules/user/tests/src/Kernel/Migrate/d6/ProfileFieldCheckRequirementsTest.php b/web/core/modules/user/tests/src/Kernel/Migrate/d6/ProfileFieldCheckRequirementsTest.php
index 7fa4eceaab3c7c4afae01a332d6a0a4d67ad015c..4be275f25dcad9439b1f93e07d3d0d1bca0b4a4d 100644
--- a/web/core/modules/user/tests/src/Kernel/Migrate/d6/ProfileFieldCheckRequirementsTest.php
+++ b/web/core/modules/user/tests/src/Kernel/Migrate/d6/ProfileFieldCheckRequirementsTest.php
@@ -21,7 +21,7 @@ public function setup() {
   }
 
   /**
-   * Tests exception in thrown when profile_fields tables does not exist.
+   * Tests exception is thrown when profile_fields tables do not exist.
    */
   public function testCheckRequirements() {
     $this->expectException(RequirementsException::class);
diff --git a/web/core/modules/user/tests/src/Kernel/Migrate/d7/ProfileFieldCheckRequirementsTest.php b/web/core/modules/user/tests/src/Kernel/Migrate/d7/ProfileFieldCheckRequirementsTest.php
index 85d163948bc79d7056b30a8148e528818365f2fa..41553288d5e8cfc0a3be8fc23f1cc925aa059a94 100644
--- a/web/core/modules/user/tests/src/Kernel/Migrate/d7/ProfileFieldCheckRequirementsTest.php
+++ b/web/core/modules/user/tests/src/Kernel/Migrate/d7/ProfileFieldCheckRequirementsTest.php
@@ -21,7 +21,7 @@ public function setup() {
   }
 
   /**
-   * Tests exception in thrown when profile_fields tables does not exist.
+   * Tests exception is thrown when profile_fields tables do not exist.
    */
   public function testCheckRequirements() {
     $this->expectException(RequirementsException::class);
diff --git a/web/core/scripts/css/compile.js b/web/core/scripts/css/compile.js
index 0fe45e8bb706abe8df5f86bfb7d7149d2740576d..1e5a68ce65f30f9b60673a9e735ee8bc86a1aecd 100644
--- a/web/core/scripts/css/compile.js
+++ b/web/core/scripts/css/compile.js
@@ -12,7 +12,24 @@ module.exports = (filePath, callback) => {
   // Transform the file.
   fs.readFile(filePath, (err, css) => {
     postcss([
-      postcssImport(),
+      postcssImport({
+        plugins: [
+          // On import, remove the comments from variables.pcss.css so they don't
+          // appear as useless comments at the top files that import these
+          // variables.
+          postcss.plugin('remove-unwanted-comments-from-variables', (options) => {
+            return css => {
+              if (css.source.input.file.indexOf('variables.pcss.css') !== -1) {
+                css.walk(node => {
+                  if (node.type === 'comment') {
+                    node.remove();
+                  }
+                });
+              }
+            };
+          }),
+        ],
+      }),
       postcssCustomProperties({
         // Remove converted properties from the generated code. This needs to be
         // set to ensure that CSS minifiers don't remove the generated values.
diff --git a/web/core/tests/Drupal/FunctionalTests/Installer/InstallerExistingBrokenDatabaseSettingsTest.php b/web/core/tests/Drupal/FunctionalTests/Installer/InstallerExistingBrokenDatabaseSettingsTest.php
index 32fe43edeba69993ae1decea534852d94cefa1b3..c6aa4eda208c17f2eef7eae5a80cedc97d287a7d 100644
--- a/web/core/tests/Drupal/FunctionalTests/Installer/InstallerExistingBrokenDatabaseSettingsTest.php
+++ b/web/core/tests/Drupal/FunctionalTests/Installer/InstallerExistingBrokenDatabaseSettingsTest.php
@@ -48,7 +48,6 @@ protected function prepareEnvironment() {
    */
   protected function setUpSettings() {
     // This form will never be reached.
-    return;
   }
 
   /**
@@ -56,7 +55,6 @@ protected function setUpSettings() {
    */
   protected function setUpSite() {
     // This form will never be reached.
-    return;
   }
 
   /**
diff --git a/web/core/tests/Drupal/FunctionalTests/Installer/InstallerExistingConfigNoConfigTest.php b/web/core/tests/Drupal/FunctionalTests/Installer/InstallerExistingConfigNoConfigTest.php
index b19ee442677f7efea9871c0ec411755ffa4903ba..da9a504012204310b804fd2c3f7466e06711bad2 100644
--- a/web/core/tests/Drupal/FunctionalTests/Installer/InstallerExistingConfigNoConfigTest.php
+++ b/web/core/tests/Drupal/FunctionalTests/Installer/InstallerExistingConfigNoConfigTest.php
@@ -21,7 +21,6 @@ class InstallerExistingConfigNoConfigTest extends InstallerExistingConfigTestBas
    */
   protected function setUpSite() {
     // There are errors therefore there is nothing to do here.
-    return;
   }
 
   /**
diff --git a/web/core/tests/Drupal/FunctionalTests/Installer/InstallerExistingConfigNoSystemSiteTest.php b/web/core/tests/Drupal/FunctionalTests/Installer/InstallerExistingConfigNoSystemSiteTest.php
index 4ac68d4e8637c48883e872b796bc3ebc819de984..138d66e3de1a84fd4defd6aa9ca6ae1bcd18102e 100644
--- a/web/core/tests/Drupal/FunctionalTests/Installer/InstallerExistingConfigNoSystemSiteTest.php
+++ b/web/core/tests/Drupal/FunctionalTests/Installer/InstallerExistingConfigNoSystemSiteTest.php
@@ -22,7 +22,7 @@ protected function prepareEnvironment() {
    * {@inheritdoc}
    */
   public function setUpSite() {
-    return;
+    // There are are errors. Therefore, there is nothing to do here.
   }
 
   /**
diff --git a/web/core/tests/Drupal/FunctionalTests/Installer/InstallerExistingConfigProfileHookInstall.php b/web/core/tests/Drupal/FunctionalTests/Installer/InstallerExistingConfigProfileHookInstall.php
index 2d9d6cdfc121c4480fecdf4e60047033456619e5..da0cb3b322739b118bc3d700fe0937be6a66f8b3 100644
--- a/web/core/tests/Drupal/FunctionalTests/Installer/InstallerExistingConfigProfileHookInstall.php
+++ b/web/core/tests/Drupal/FunctionalTests/Installer/InstallerExistingConfigProfileHookInstall.php
@@ -32,7 +32,6 @@ function config_profile_with_hook_install_install() {
    */
   protected function setUpSettings() {
     // There are errors therefore there is nothing to do here.
-    return;
   }
 
   /**
@@ -40,7 +39,6 @@ protected function setUpSettings() {
    */
   protected function setUpSite() {
     // There are errors therefore there is nothing to do here.
-    return;
   }
 
   /**
diff --git a/web/core/tests/Drupal/FunctionalTests/Installer/InstallerExistingConfigSyncDirectoryProfileHookInstall.php b/web/core/tests/Drupal/FunctionalTests/Installer/InstallerExistingConfigSyncDirectoryProfileHookInstall.php
index 38a06971fa2188acad23c75144eaf45e20ea955d..42c0a0181cdb558d58501613998caccd4cda70d4 100644
--- a/web/core/tests/Drupal/FunctionalTests/Installer/InstallerExistingConfigSyncDirectoryProfileHookInstall.php
+++ b/web/core/tests/Drupal/FunctionalTests/Installer/InstallerExistingConfigSyncDirectoryProfileHookInstall.php
@@ -46,7 +46,6 @@ function testing_config_install_multilingual_install() {
   protected function setUpProfile() {
     // This is the form we are testing so wait until the test method to do
     // assertions.
-    return;
   }
 
   /**
@@ -54,7 +53,6 @@ protected function setUpProfile() {
    */
   protected function setUpRequirementsProblem() {
     // This form will never be reached.
-    return;
   }
 
   /**
@@ -62,7 +60,6 @@ protected function setUpRequirementsProblem() {
    */
   protected function setUpSettings() {
     // This form will never be reached.
-    return;
   }
 
   /**
@@ -70,7 +67,6 @@ protected function setUpSettings() {
    */
   protected function setUpSite() {
     // This form will never be reached.
-    return;
   }
 
   /**
diff --git a/web/core/tests/Drupal/FunctionalTests/Installer/InstallerExistingConfigSyncDriectoryProfileMismatchTest.php b/web/core/tests/Drupal/FunctionalTests/Installer/InstallerExistingConfigSyncDriectoryProfileMismatchTest.php
index 80b392a72a70b87feb1fb4459529019fbe6f863f..cf8c0fab2669532a06a65997770e447251f220b5 100644
--- a/web/core/tests/Drupal/FunctionalTests/Installer/InstallerExistingConfigSyncDriectoryProfileMismatchTest.php
+++ b/web/core/tests/Drupal/FunctionalTests/Installer/InstallerExistingConfigSyncDriectoryProfileMismatchTest.php
@@ -42,7 +42,6 @@ protected function setUpSettings() {
 
   protected function setUpSite() {
     // This step will not occur because there is an error.
-    return;
   }
 
   /**
diff --git a/web/core/tests/Drupal/KernelTests/Core/Database/TransactionTest.php b/web/core/tests/Drupal/KernelTests/Core/Database/TransactionTest.php
index 3adc34c0cf37be69db3bbaf1c69c22e31f328776..d73f8af752f54c2b1033d99a0673466685dc553e 100644
--- a/web/core/tests/Drupal/KernelTests/Core/Database/TransactionTest.php
+++ b/web/core/tests/Drupal/KernelTests/Core/Database/TransactionTest.php
@@ -101,7 +101,7 @@ protected function transactionInnerLayer($suffix, $rollback = FALSE, $ddl_statem
     $txn = $this->connection->startTransaction();
 
     $depth2 = $this->connection->transactionDepth();
-    $this->assertTrue($depth < $depth2, 'Transaction depth is has increased with new transaction.');
+    $this->assertTrue($depth < $depth2, 'Transaction depth has increased with new transaction.');
 
     // Insert a single row into the testing table.
     $this->connection->insert('test')
diff --git a/web/core/tests/Drupal/KernelTests/Core/File/NameMungingTest.php b/web/core/tests/Drupal/KernelTests/Core/File/NameMungingTest.php
index 644375a02985de5c923fac8fbbd6ae0bbb8a8554..26a3e9cf36aa11ae9380e32fd4b2bdb79533e540 100644
--- a/web/core/tests/Drupal/KernelTests/Core/File/NameMungingTest.php
+++ b/web/core/tests/Drupal/KernelTests/Core/File/NameMungingTest.php
@@ -7,28 +7,51 @@
 /**
  * Tests filename munging and unmunging.
  *
+ * Checks performed, relying on 2 <= strlen('foo') <= 5.
+ *
+ * - testMunging()
+ *   - (name).foo.txt -> (name).foo_.txt when allows_insecure_uploads === 0
+ * - testMungeBullByte()
+ *   - (name).foo\0.txt -> (name).foo_.txt regardless of allows_insecure_uploads
+ * - testMungeIgnoreInsecure()
+ *   - (name).foo.txt unmodified when allows_insecure_uploads === 1
+ * - testMungeIgnoreAllowedExtensions()
+ *   - (name).FOO.txt -> (name).FOO when allowing 'foo'.
+ *   - (name).foo.txt -> (name).foo.txt when allowing 'FOO'.
+ * - testMungeUnsafe()
+ *   - (name).php.txt -> (name).php_.txt even when allowing 'php txt'
+ *   - (name).php.txt -> (name).php_.txt even when allowing 'php txt'
+ * - testUnMunge()
+ *   - (name).foo.txt -> (unchecked) -> (name).foo.txt after un-munging
+ *
  * @group File
  */
 class NameMungingTest extends FileTestBase {
 
   /**
+   * An extension to be used as forbidden during munge operations.
+   *
    * @var string
    */
   protected $badExtension;
 
   /**
+   * The name of a file with a bad extension, after munging.
+   *
    * @var string
    */
   protected $name;
 
   /**
+   * The name of a file with an upper-cased bad extension, after munging.
+   *
    * @var string
    */
   protected $nameWithUcExt;
 
   protected function setUp() {
     parent::setUp();
-    $this->badExtension = 'php';
+    $this->badExtension = 'foo';
     $this->name = $this->randomMachineName() . '.' . $this->badExtension . '.txt';
     $this->nameWithUcExt = $this->randomMachineName() . '.' . strtoupper($this->badExtension) . '.txt';
   }
@@ -78,6 +101,18 @@ public function testMungeIgnoreAllowedExtensions() {
     $this->assertSame($munged_name, $this->name);
   }
 
+  /**
+   * Tests unsafe extensions are always munged by file_munge_filename().
+   */
+  public function testMungeUnsafe() {
+    $prefix = $this->randomMachineName();
+    $name = "$prefix.php.txt";
+    // Put the php extension in the allowed list, but since it is in the unsafe
+    // extension list, it should still be munged.
+    $munged_name = file_munge_filename($name, 'php txt');
+    $this->assertSame("$prefix.php_.txt", $munged_name);
+  }
+
   /**
    * Ensure that unmunge gets your name back.
    */
diff --git a/web/core/tests/Drupal/Nightwatch/Tests/langcodeTest.js b/web/core/tests/Drupal/Nightwatch/Tests/langcodeTest.js
index 7248f2a8a3d92bd968dfb27b265ab2f94f3367df..4fbce176495c0e939b8904f078a8b1c6ce41d2b0 100644
--- a/web/core/tests/Drupal/Nightwatch/Tests/langcodeTest.js
+++ b/web/core/tests/Drupal/Nightwatch/Tests/langcodeTest.js
@@ -2,7 +2,8 @@ module.exports = {
   '@tags': ['core'],
   before(browser) {
     browser.drupalInstall({
-      setupFile: 'core/tests/Drupal/TestSite/TestSiteInstallTestScript.php',
+      setupFile:
+        'core/tests/Drupal/TestSite/TestSiteMultilingualInstallTestScript.php',
       langcode: 'fr',
     });
   },
diff --git a/web/core/tests/Drupal/Tests/Component/Datetime/DateTimePlusTest.php b/web/core/tests/Drupal/Tests/Component/Datetime/DateTimePlusTest.php
index ca280d582b0ab0f0b7ac0700087296d1f816d647..cde8dacad80fd955dc4aa1e80596a1e2560de143 100644
--- a/web/core/tests/Drupal/Tests/Component/Datetime/DateTimePlusTest.php
+++ b/web/core/tests/Drupal/Tests/Component/Datetime/DateTimePlusTest.php
@@ -112,6 +112,23 @@ public function testInvalidDateArrays($input, $timezone, $class) {
     );
   }
 
+  /**
+   * Tests DateTimePlus::checkArray().
+   *
+   * @param mixed $array
+   *   Input argument for DateTimePlus::checkArray().
+   * @param bool $expected
+   *   The expected result of DateTimePlus::checkArray().
+   *
+   * @dataProvider providerTestCheckArray
+   */
+  public function testCheckArray(array $array, $expected) {
+    $this->assertSame(
+      $expected,
+      DateTimePlus::checkArray($array)
+    );
+  }
+
   /**
    * Test creating dates from timestamps, and manipulating timezones.
    *
@@ -442,6 +459,30 @@ public function providerTestInvalidDateArrays() {
     ];
   }
 
+  /**
+   * Data provider for testCheckArray.
+   *
+   * @return array
+   *   An array of arrays, each containing:
+   *   - 'array' - Input for DateTimePlus::checkArray().
+   *   - 'expected' - Expected output for  DateTimePlus::checkArray().
+   *
+   * @see testCheckArray
+   */
+  public function providerTestCheckArray() {
+    return [
+      'Date array, date only' => [['year' => 2010, 'month' => 2, 'day' => 28], TRUE],
+      'Date array with hour' => [['year' => 2010, 'month' => 2, 'day' => 28, 'hour' => 10], TRUE],
+      'One year larger than the documented upper limit of checkdate()' => [['year' => 32768, 'month' => 1, 'day' => 8, 'hour' => 8, 'minute' => 0, 'second' => 0], FALSE],
+      'One year smaller than the documented lower limit of checkdate()' => [['year' => 0, 'month' => 1, 'day' => 8, 'hour' => 8, 'minute' => 0, 'second' => 0], FALSE],
+      'Invalid month from date array' => [['year' => 2010, 'month' => 27, 'day' => 8, 'hour' => 8, 'minute' => 0, 'second' => 0], FALSE],
+      'Invalid hour from date array' => [['year' => 2010, 'month' => 2, 'day' => 28, 'hour' => 80, 'minute' => 0, 'second' => 0], FALSE],
+      'Invalid minute from date array.' => [['year' => 2010, 'month' => 7, 'day' => 8, 'hour' => 8, 'minute' => 88, 'second' => 0], FALSE],
+      'Missing day' => [['year' => 2059, 'month' => 1, 'second' => 1], FALSE],
+      'Zero day' => [['year' => 2059, 'month' => 1, 'day' => 0], FALSE],
+    ];
+  }
+
   /**
    * Provides data for testDateTimezone.
    *
diff --git a/web/core/tests/Drupal/Tests/Component/Utility/UnicodeTest.php b/web/core/tests/Drupal/Tests/Component/Utility/UnicodeTest.php
index 5fed24ed13ef0fc364824de438853d3957e405a5..50bdc8b519917c88292aa04113041f39cac173cb 100644
--- a/web/core/tests/Drupal/Tests/Component/Utility/UnicodeTest.php
+++ b/web/core/tests/Drupal/Tests/Component/Utility/UnicodeTest.php
@@ -23,15 +23,13 @@ public function testSetStatus() {
   }
 
   /**
-   * Tests multibyte encoding and decoding.
+   * Tests multibyte encoding.
    *
    * @dataProvider providerTestMimeHeader
    * @covers ::mimeHeaderEncode
-   * @covers ::mimeHeaderDecode
    */
-  public function testMimeHeader($value, $encoded) {
+  public function testMimeHeaderEncode($value, $encoded) {
     $this->assertEquals($encoded, Unicode::mimeHeaderEncode($value));
-    $this->assertEquals($value, Unicode::mimeHeaderDecode($encoded));
   }
 
   /**
@@ -44,9 +42,49 @@ public function testMimeHeader($value, $encoded) {
    */
   public function providerTestMimeHeader() {
     return [
-      ['tést.txt', '=?UTF-8?B?dMOpc3QudHh0?='],
-      // Simple ASCII characters.
-      ['ASCII', 'ASCII'],
+      "Base64 encoding" => ['tést.txt', '=?UTF-8?B?dMOpc3QudHh0?='],
+      "ASCII characters only" => ['test.txt', 'test.txt'],
+    ];
+  }
+
+  /**
+   * Tests multibyte decoding.
+   *
+   * @dataProvider providerTestMimeHeaderDecode
+   * @covers ::mimeHeaderDecode
+   */
+  public function testMimeHeaderDecode($value, $encoded) {
+    $this->assertEquals($value, Unicode::mimeHeaderDecode($encoded));
+  }
+
+  /**
+   * Data provider for testMimeHeaderDecode().
+   *
+   * @return array
+   *   An array containing a string and its encoded value.
+   */
+  public function providerTestMimeHeaderDecode() {
+    return [
+      'Uppercase base64 encoding' => [
+        'tést.txt',
+        '=?utf-8?B?dMOpc3QudHh0?=',
+      ],
+      'Uppercase quoted-printable encoding' => [
+        'tést.txt',
+        '=?UTF-8?Q?t=C3=A9st.txt?=',
+      ],
+      'Lowercase base64 encoding' => [
+        'tést.txt',
+        '=?utf-8?b?dMOpc3QudHh0?=',
+      ],
+      'Lowercase quoted-printable encoding' => [
+        'tést.txt',
+        '=?UTF-8?q?t=C3=A9st.txt?=',
+      ],
+      'ASCII characters only' => [
+        'test.txt',
+        'test.txt',
+      ],
     ];
   }
 
diff --git a/web/core/tests/Drupal/Tests/Core/Asset/CssCollectionRendererUnitTest.php b/web/core/tests/Drupal/Tests/Core/Asset/CssCollectionRendererUnitTest.php
index d3f973dc3952b804765ec3e2c0460c8ac40a1efb..51a4a01c5a3c9e72478ec628a64d26442f6b0a76 100644
--- a/web/core/tests/Drupal/Tests/Core/Asset/CssCollectionRendererUnitTest.php
+++ b/web/core/tests/Drupal/Tests/Core/Asset/CssCollectionRendererUnitTest.php
@@ -4,6 +4,7 @@
 
 use Drupal\Core\Asset\CssCollectionRenderer;
 use Drupal\Tests\UnitTestCase;
+use Drupal\Core\State\StateInterface;
 
 /**
  * Tests the CSS asset collection renderer.
@@ -27,18 +28,13 @@ class CssCollectionRendererUnitTest extends UnitTestCase {
   protected $fileCssGroup;
 
   /**
-   * The state mock class.
-   *
-   * @var \Drupal\Core\State\StateInterface|\PHPUnit\Framework\MockObject\MockObject
+   * {@inheritdoc}
    */
-  protected $state;
-
   protected function setUp() {
     parent::setUp();
-
-    $this->state = $this->createMock('Drupal\Core\State\StateInterface');
-
-    $this->renderer = new CssCollectionRenderer($this->state);
+    $state = $this->prophesize(StateInterface::class);
+    $state->get('system.css_js_query_string', '0')->shouldBeCalledOnce()->willReturn(NULL);
+    $this->renderer = new CssCollectionRenderer($state->reveal());
     $this->fileCssGroup = [
       'group' => -100,
       'type' => 'file',
@@ -76,15 +72,16 @@ protected function setUp() {
    * @see testRender
    */
   public function providerTestRender() {
-    $create_link_element = function ($href, $media = 'all', $browsers = []) {
+    $create_link_element = function ($href, $media = 'all', $browsers = [], $custom_attributes = []) {
+      $attributes = [
+        'rel' => 'stylesheet',
+        'media' => $media,
+        'href' => $href,
+      ];
       return [
         '#type' => 'html_tag',
         '#tag' => 'link',
-        '#attributes' => [
-          'rel' => 'stylesheet',
-          'media' => $media,
-          'href' => $href,
-        ],
+        '#attributes' => array_replace($attributes, $custom_attributes),
         '#browsers' => $browsers,
       ];
     };
@@ -93,6 +90,8 @@ public function providerTestRender() {
       return ['group' => 0, 'type' => 'file', 'media' => $media, 'preprocess' => $preprocess, 'data' => $data, 'browsers' => []];
     };
 
+    $custom_attributes = ['integrity' => 'sha384-psK1OYPAYjYUhtDYW+Pj2yc', 'crossorigin' => 'anonymous', 'random-attribute' => 'test'];
+
     return [
       // Single external CSS asset.
       0 => [
@@ -106,7 +105,7 @@ public function providerTestRender() {
         ],
       ],
       // Single file CSS asset.
-      2 => [
+      1 => [
         [
           0 => ['group' => 0, 'type' => 'file', 'media' => 'all', 'preprocess' => TRUE, 'data' => 'public://css/file-all', 'browsers' => []],
         ],
@@ -114,6 +113,15 @@ public function providerTestRender() {
           0 => $create_link_element(file_url_transform_relative(file_create_url('public://css/file-all')) . '?', 'all'),
         ],
       ],
+      // Single file CSS asset with custom attributes.
+      2 => [
+        [
+          0 => ['group' => 0, 'type' => 'file', 'media' => 'all', 'preprocess' => TRUE, 'data' => 'public://css/file-all', 'browsers' => [], 'attributes' => $custom_attributes],
+        ],
+        [
+          0 => $create_link_element(file_url_transform_relative(file_create_url('public://css/file-all')) . '?', 'all', [], $custom_attributes),
+        ],
+      ],
       // 31 file CSS assets: expect 31 link elements.
       3 => [
         [
@@ -185,7 +193,7 @@ public function providerTestRender() {
       ],
       // 32 file CSS assets with the same properties, except for the 10th and
       // 20th files, they have different 'media' properties.
-      5 => [
+      4 => [
         [
           0 => $create_file_css_asset('public://css/1.css'),
           1 => $create_file_css_asset('public://css/2.css'),
@@ -264,10 +272,6 @@ public function providerTestRender() {
    * @dataProvider providerTestRender
    */
   public function testRender(array $css_assets, array $render_elements) {
-    $this->state->expects($this->once())
-      ->method('get')
-      ->with('system.css_js_query_string')
-      ->will($this->returnValue(NULL));
     $this->assertSame($render_elements, $this->renderer->render($css_assets));
   }
 
@@ -275,10 +279,6 @@ public function testRender(array $css_assets, array $render_elements) {
    * Tests a CSS asset group with the invalid 'type' => 'internal'.
    */
   public function testRenderInvalidType() {
-    $this->state->expects($this->once())
-      ->method('get')
-      ->with('system.css_js_query_string')
-      ->will($this->returnValue(NULL));
     $this->expectException('Exception');
     $this->expectExceptionMessage('Invalid CSS asset type.');
 
diff --git a/web/core/tests/Drupal/Tests/Core/Database/Stub/StubConnection.php b/web/core/tests/Drupal/Tests/Core/Database/Stub/StubConnection.php
index 4692dffb8714b061ccd099a33e004abca3aaa0e6..06f7deb164ea4c66889d40d23798869213102a37 100644
--- a/web/core/tests/Drupal/Tests/Core/Database/Stub/StubConnection.php
+++ b/web/core/tests/Drupal/Tests/Core/Database/Stub/StubConnection.php
@@ -51,9 +51,7 @@ public function databaseType() {
   /**
    * {@inheritdoc}
    */
-  public function createDatabase($database) {
-    return;
-  }
+  public function createDatabase($database) {}
 
   /**
    * {@inheritdoc}
diff --git a/web/core/tests/fixtures/database_drivers/custom/fake/Connection.php b/web/core/tests/fixtures/database_drivers/custom/fake/Connection.php
index 377b0f3679c8a02bfef666a5e89d7f7eeb36ccb0..27656f8792f0179df7b0d9a3e45f0fb6cd3a7f43 100644
--- a/web/core/tests/fixtures/database_drivers/custom/fake/Connection.php
+++ b/web/core/tests/fixtures/database_drivers/custom/fake/Connection.php
@@ -49,9 +49,7 @@ public function databaseType() {
   /**
    * {@inheritdoc}
    */
-  public function createDatabase($database) {
-    return;
-  }
+  public function createDatabase($database) {}
 
   /**
    * {@inheritdoc}
diff --git a/web/core/themes/claro/css/base/elements.css b/web/core/themes/claro/css/base/elements.css
index 9d17479b876193959a606e2c54430546d33fc11b..6caeda07fb1d0aabfece63043052e4d2d9a982b3 100644
--- a/web/core/themes/claro/css/base/elements.css
+++ b/web/core/themes/claro/css/base/elements.css
@@ -9,50 +9,6 @@
  * Generic elements.
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 html {
   font-family: BlinkMacSystemFont
 ,
diff --git a/web/core/themes/claro/css/components/accordion.css b/web/core/themes/claro/css/components/accordion.css
index 00092a224487ad84f308d0e1c808c2f2d4caed64..968e5dab837a50d95cc70ddd63d9263e3fec54db 100644
--- a/web/core/themes/claro/css/components/accordion.css
+++ b/web/core/themes/claro/css/components/accordion.css
@@ -10,50 +10,6 @@
  * Accordion styles.
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 .accordion {
   color: #222330;
   border: 1px solid rgba(216, 217, 224, 0.8);
diff --git a/web/core/themes/claro/css/components/action-link.css b/web/core/themes/claro/css/components/action-link.css
index c76e40f91446d5d4bc0c1071774d89f8302c9cc8..4eb59c835acef7b2b24098c65d77d78d3bbe6375 100644
--- a/web/core/themes/claro/css/components/action-link.css
+++ b/web/core/themes/claro/css/components/action-link.css
@@ -12,50 +12,6 @@
  * Contains Action link component and the action-links layout styles.
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 /**
  * Action links layout.
  */
diff --git a/web/core/themes/claro/css/components/ajax-progress.module.css b/web/core/themes/claro/css/components/ajax-progress.module.css
index b17d3e9ec4a337a328c0ec50ff279c59f6ece7f9..e7b098cb43c27f8f6aee76672c47efe91433e1eb 100644
--- a/web/core/themes/claro/css/components/ajax-progress.module.css
+++ b/web/core/themes/claro/css/components/ajax-progress.module.css
@@ -10,50 +10,6 @@
  * Throbber.
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 .ajax-progress {
   display: inline-block;
 }
diff --git a/web/core/themes/claro/css/components/autocomplete-loading.module.css b/web/core/themes/claro/css/components/autocomplete-loading.module.css
index 4c49059d3e1bec9be8f4d782eb73724086c43c8f..be8328ac410348892a83a85905a26026f1abba1a 100644
--- a/web/core/themes/claro/css/components/autocomplete-loading.module.css
+++ b/web/core/themes/claro/css/components/autocomplete-loading.module.css
@@ -12,50 +12,6 @@
  * @see autocomplete.js
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 /**
  * Since the autocomplete library is attached conditionally and not globally,
  * we can be 99% sure that the default icon will be used.
diff --git a/web/core/themes/claro/css/components/breadcrumb.css b/web/core/themes/claro/css/components/breadcrumb.css
index b496acca6775eca92f9f79ff1e965994d241103a..1a15aebe8bfc3f6f15c609254ffe3ff8a5dfabda 100644
--- a/web/core/themes/claro/css/components/breadcrumb.css
+++ b/web/core/themes/claro/css/components/breadcrumb.css
@@ -10,50 +10,6 @@
  * Breadcrumbs.
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 .breadcrumb {
   padding: 0;
   color: #222330;
diff --git a/web/core/themes/claro/css/components/button.css b/web/core/themes/claro/css/components/button.css
index 8594ae4390c9f72833c71d5c91307d55e3763f96..cfb6a50d02842ab5e3c3b3e34a77fcaf05b21c3e 100644
--- a/web/core/themes/claro/css/components/button.css
+++ b/web/core/themes/claro/css/components/button.css
@@ -12,50 +12,6 @@
  * Apply these classes to button elements (<button>, <input type="button" />).
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 /**
  * Buttons.
  *
diff --git a/web/core/themes/claro/css/components/card.css b/web/core/themes/claro/css/components/card.css
index 533f019841687d1a59b261a3829903334079a07f..e859249008a5407d7e1d8ad76eabedd4f75e615c 100644
--- a/web/core/themes/claro/css/components/card.css
+++ b/web/core/themes/claro/css/components/card.css
@@ -10,50 +10,6 @@
  * Card.
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 .card {
   display: flex;
   flex-direction: column;
diff --git a/web/core/themes/claro/css/components/content-header.css b/web/core/themes/claro/css/components/content-header.css
index 47ae19d73fbcddf71f589472128848ec018e61a8..05f31281e97a43febf5f2c7b17b18978fd5a69d9 100644
--- a/web/core/themes/claro/css/components/content-header.css
+++ b/web/core/themes/claro/css/components/content-header.css
@@ -9,50 +9,6 @@
  * Content header.
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 .content-header {
   overflow: hidden;
   margin-bottom: 0.75rem;
diff --git a/web/core/themes/claro/css/components/details.css b/web/core/themes/claro/css/components/details.css
index a36ce5dd2a162b8374d0403acc89fd3e6887cac1..556c25c728f34e682430412b9079d24b4610c610 100644
--- a/web/core/themes/claro/css/components/details.css
+++ b/web/core/themes/claro/css/components/details.css
@@ -12,50 +12,6 @@
  * @see collapse.js
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 /**
  * Available modifiers are:
  *  - .claro-details--accordion
diff --git a/web/core/themes/claro/css/components/divider.css b/web/core/themes/claro/css/components/divider.css
index 2bd585d19026e06b0f69a7fc1eca56fbc2df64c2..247e6ab34ef50328f301f88d7dfb675b3a06ce78 100644
--- a/web/core/themes/claro/css/components/divider.css
+++ b/web/core/themes/claro/css/components/divider.css
@@ -9,50 +9,6 @@
  * Divider.
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 .divider {
   height: 1px;
   background-color: rgba(142, 146, 156, 0.5);
diff --git a/web/core/themes/claro/css/components/dropbutton.css b/web/core/themes/claro/css/components/dropbutton.css
index 6c1c90aa790f02f80e3fb6e6505324be52e8a8d2..05a22b046860e5dea6d973d2700795985050001d 100644
--- a/web/core/themes/claro/css/components/dropbutton.css
+++ b/web/core/themes/claro/css/components/dropbutton.css
@@ -14,50 +14,6 @@
  *    contrast mode Firefox.
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 :root {
   /**
   * Dropbutton
diff --git a/web/core/themes/claro/css/components/entity-meta.css b/web/core/themes/claro/css/components/entity-meta.css
index 6245dea4db96f2ff77ad0c8205ab1c1738fe72a4..eb5bee4553829887e0ba948d8491bfb0aab885b9 100644
--- a/web/core/themes/claro/css/components/entity-meta.css
+++ b/web/core/themes/claro/css/components/entity-meta.css
@@ -10,50 +10,6 @@
  * Entity meta.
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 .entity-meta__header {
   padding: 0.5rem 1rem 1rem;
   color: #222330;
diff --git a/web/core/themes/claro/css/components/fieldset.css b/web/core/themes/claro/css/components/fieldset.css
index 06329f359349e4dfc7c61bc1937e377e7e3faebd..e228680ed7f1fbbcdfae987ae56ea2c8aa5ae6d0 100644
--- a/web/core/themes/claro/css/components/fieldset.css
+++ b/web/core/themes/claro/css/components/fieldset.css
@@ -10,50 +10,6 @@
  * Fieldset styles.
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 .fieldset {
   min-width: 0;
   margin: 1rem 0;
diff --git a/web/core/themes/claro/css/components/file.css b/web/core/themes/claro/css/components/file.css
index 30d5f44cf173a318155e74d6391d82748d260d72..0311964cdf017996bb1fdc7ab9eee047de337b21 100644
--- a/web/core/themes/claro/css/components/file.css
+++ b/web/core/themes/claro/css/components/file.css
@@ -10,50 +10,6 @@
  * Extends styles of the file link.
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 .file {
   min-height: 1.0625rem;
   padding-left: 1.5rem; /* LTR */
diff --git a/web/core/themes/claro/css/components/form--checkbox-radio--ie.css b/web/core/themes/claro/css/components/form--checkbox-radio--ie.css
index 77aa8b72411d3bee22657040cd5118cf66f08f5a..a516e5a5829d700fcdd4c048a6185a48e498669a 100644
--- a/web/core/themes/claro/css/components/form--checkbox-radio--ie.css
+++ b/web/core/themes/claro/css/components/form--checkbox-radio--ie.css
@@ -10,50 +10,6 @@
  * Checkbox and radio input elements styles for IE11 and below.
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 .form-boolean::-ms-check {
   display: inline-block;
   box-sizing: border-box;
diff --git a/web/core/themes/claro/css/components/form--checkbox-radio.css b/web/core/themes/claro/css/components/form--checkbox-radio.css
index ff7aa40edabcb2d429ec081e0bb440262cba16ef..8ee90532b64b73948e683ba64e051fba078afce8 100644
--- a/web/core/themes/claro/css/components/form--checkbox-radio.css
+++ b/web/core/themes/claro/css/components/form--checkbox-radio.css
@@ -10,50 +10,6 @@
  * Checkbox and radio input elements.
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 /**
  * Form item modifiers.
  */
diff --git a/web/core/themes/claro/css/components/form--field-multiple.css b/web/core/themes/claro/css/components/form--field-multiple.css
index 67f9110a576d581b8bec0fe4dcbf1f841a2c6ece..8502d6ec4c525c29dd90348b375151b37e74c189 100644
--- a/web/core/themes/claro/css/components/form--field-multiple.css
+++ b/web/core/themes/claro/css/components/form--field-multiple.css
@@ -10,50 +10,6 @@
  * Styles for multiple field tables.
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 .field-multiple-table {
   margin-top: 1rem;
   margin-bottom: 1rem;
diff --git a/web/core/themes/claro/css/components/form--managed-file.css b/web/core/themes/claro/css/components/form--managed-file.css
index 4fa4b2ea4118325629be78bb98986a19f565acd1..e846d16fcf399a0265825aa1eac84b4fe157a9e1 100644
--- a/web/core/themes/claro/css/components/form--managed-file.css
+++ b/web/core/themes/claro/css/components/form--managed-file.css
@@ -12,50 +12,6 @@
  * This includes the styles for the file widgets and the image widgets.
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 /**
  * The root element of the file/image widget.
  */
diff --git a/web/core/themes/claro/css/components/form--password-confirm.css b/web/core/themes/claro/css/components/form--password-confirm.css
index 304b1b702ef3bccc978c8ccde7b75e93aed6273c..5caa69a07ab09632347ec93057c841d56a4d48bf 100644
--- a/web/core/themes/claro/css/components/form--password-confirm.css
+++ b/web/core/themes/claro/css/components/form--password-confirm.css
@@ -10,50 +10,6 @@
  * Visual styles for the Password widgets.
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 :root {
   /* Weak */
   /* Fair */
diff --git a/web/core/themes/claro/css/components/form--select.css b/web/core/themes/claro/css/components/form--select.css
index 989ed67d32c1198ef4b5bc653c77c7e1e38f271e..bb1036155f55a6eb755cf9778aefe12d2ca330c4 100644
--- a/web/core/themes/claro/css/components/form--select.css
+++ b/web/core/themes/claro/css/components/form--select.css
@@ -10,50 +10,6 @@
  * Select input elements.
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 .form-element--type-select {
   padding-right: calc(2rem - 1px);
   background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 14 9'%3E%3Cpath fill='none' stroke-width='1.5' d='M1 1L7 7L13 1' stroke='%23545560'/%3E%3C/svg%3E%0A");
diff --git a/web/core/themes/claro/css/components/form--text.css b/web/core/themes/claro/css/components/form--text.css
index f7c7923296c3b14fdcf924ea136b055ca966bfca..86948a5d07ca11ffd60c06f6bafba4526f2ca6fb 100644
--- a/web/core/themes/claro/css/components/form--text.css
+++ b/web/core/themes/claro/css/components/form--text.css
@@ -10,50 +10,6 @@
  * Text and textarea input elements.
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 .form-element {
   box-sizing: border-box;
   max-width: 100%;
diff --git a/web/core/themes/claro/css/components/form.css b/web/core/themes/claro/css/components/form.css
index ac3f76feab3d4f3dc008604c931ac9a03ee32675..82c4619368d5f6f664cadde65ad06461262d532f 100644
--- a/web/core/themes/claro/css/components/form.css
+++ b/web/core/themes/claro/css/components/form.css
@@ -10,50 +10,6 @@
  * Main form and form item styles.
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 :-ms-input-placeholder {
   color: #8e929c;
 }
diff --git a/web/core/themes/claro/css/components/image-preview.css b/web/core/themes/claro/css/components/image-preview.css
index 3d1a03f53c8df0d6403a4806480aa3a94af72f02..965c02e3ddb19090928f37adfe42ec291fabd367 100644
--- a/web/core/themes/claro/css/components/image-preview.css
+++ b/web/core/themes/claro/css/components/image-preview.css
@@ -10,50 +10,6 @@
  * Image preview component.
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 /**
  * Image preview.
  */
diff --git a/web/core/themes/claro/css/components/jquery.ui/theme.css b/web/core/themes/claro/css/components/jquery.ui/theme.css
index a24a1af1ed6adeaf0522a965e9f7e28564733614..abb365dc914f2a6abf49796b3831c7f7a3eb61a8 100644
--- a/web/core/themes/claro/css/components/jquery.ui/theme.css
+++ b/web/core/themes/claro/css/components/jquery.ui/theme.css
@@ -11,50 +11,6 @@
  * Overrides /core/assets/vendor/jquery.ui/themes/base/theme.css.
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 /**
  * Component containers
  */
diff --git a/web/core/themes/claro/css/components/messages.css b/web/core/themes/claro/css/components/messages.css
index 76985ea47415f249993bc14f9a628e0ac3d115bb..f02aecb611fb95c4572743d3651b742bc751674e 100644
--- a/web/core/themes/claro/css/components/messages.css
+++ b/web/core/themes/claro/css/components/messages.css
@@ -12,50 +12,6 @@
  *   has been resolved.
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 .messages-list {
   margin-top: 2.5rem;
   margin-bottom: 2.5rem;
diff --git a/web/core/themes/claro/css/components/page-title.css b/web/core/themes/claro/css/components/page-title.css
index 959a33edcaf3b1e0f1de2891fce665258f819b9b..590d0fa2e36901929f296c8a1241249bc4eaa56e 100644
--- a/web/core/themes/claro/css/components/page-title.css
+++ b/web/core/themes/claro/css/components/page-title.css
@@ -10,50 +10,6 @@
  * Page title.
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 .block-page-title-block {
   margin-bottom: 0.75rem;
 }
diff --git a/web/core/themes/claro/css/components/pager.css b/web/core/themes/claro/css/components/pager.css
index 8af345573b84a8bada636cacc3fd47d4e0299c74..23225581f43191cf88b57987c11fca2e82338566 100644
--- a/web/core/themes/claro/css/components/pager.css
+++ b/web/core/themes/claro/css/components/pager.css
@@ -10,50 +10,6 @@
  * Styles for Claro's Pagination.
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 :root {
   /**
   * Pager.
diff --git a/web/core/themes/claro/css/components/progress.css b/web/core/themes/claro/css/components/progress.css
index 4e86569a9d8266418d4b9c123e672bbf968470ba..69f23f382f9cc54e11c07b9d0d8d9b5323474f97 100644
--- a/web/core/themes/claro/css/components/progress.css
+++ b/web/core/themes/claro/css/components/progress.css
@@ -12,50 +12,6 @@
  * @see progress.js
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 .progress::after {
   display: table;
   clear: both;
diff --git a/web/core/themes/claro/css/components/shortcut.css b/web/core/themes/claro/css/components/shortcut.css
index a77f8697d483b6ceab62d6f66e62c07df05bb7b2..811c6e813dd03a1bd7a6ffc170fdc7d095b15f77 100644
--- a/web/core/themes/claro/css/components/shortcut.css
+++ b/web/core/themes/claro/css/components/shortcut.css
@@ -10,50 +10,6 @@
  * Styling for the shortcut module.
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 :root {
   /**
   * Shortcut action.
diff --git a/web/core/themes/claro/css/components/system-admin--admin-list.css b/web/core/themes/claro/css/components/system-admin--admin-list.css
index 1a8b935fedda2cec3b6678f5af2275a15a2af63c..4bce6e4b9c821bdd0adb88f6021feb7d61f5b1b4 100644
--- a/web/core/themes/claro/css/components/system-admin--admin-list.css
+++ b/web/core/themes/claro/css/components/system-admin--admin-list.css
@@ -10,50 +10,6 @@
  * Admin list and admin item modules.
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 /**
  * Admin list (wrapper of admin items).
  */
diff --git a/web/core/themes/claro/css/components/system-admin--panel.css b/web/core/themes/claro/css/components/system-admin--panel.css
index 5fee5d9361af8383913cfa45947822c87f3ab145..025c5810a3ddff9f6615c53fcb107cd52072a18d 100644
--- a/web/core/themes/claro/css/components/system-admin--panel.css
+++ b/web/core/themes/claro/css/components/system-admin--panel.css
@@ -10,50 +10,6 @@
  * System admin module: Panel styling.
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 .panel {
   margin-top: 1em;
   margin-bottom: 3em;
diff --git a/web/core/themes/claro/css/components/table--file-multiple-widget.css b/web/core/themes/claro/css/components/table--file-multiple-widget.css
index 4f3f3558b6fcbaef49579b3504c23e39c3e7bbac..38cc7234093084ac60b5e15f42707afb2571192a 100644
--- a/web/core/themes/claro/css/components/table--file-multiple-widget.css
+++ b/web/core/themes/claro/css/components/table--file-multiple-widget.css
@@ -10,50 +10,6 @@
  * Styles for multiple file widget table.
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 .table-file-multiple-widget tbody {
   vertical-align: top;
 }
diff --git a/web/core/themes/claro/css/components/tabledrag.css b/web/core/themes/claro/css/components/tabledrag.css
index bf968f446a16b22a600b85327e8acb29fdd1632e..e3d01f24ee13d2990f2d2edf1c55f3fa35a6a56e 100644
--- a/web/core/themes/claro/css/components/tabledrag.css
+++ b/web/core/themes/claro/css/components/tabledrag.css
@@ -15,50 +15,6 @@
  * @see tabledrag.js
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 body.drag {
   cursor: move;
 }
diff --git a/web/core/themes/claro/css/components/tables.css b/web/core/themes/claro/css/components/tables.css
index 8996753aff64ca216add53930e71582728bb23d7..e7c8dd62321af6b5e6ec442d05126ded203b452d 100644
--- a/web/core/themes/claro/css/components/tables.css
+++ b/web/core/themes/claro/css/components/tables.css
@@ -10,50 +10,6 @@
  * Claro styles for Tables.
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 table {
   width: 100%;
   margin-top: 1.5rem;
diff --git a/web/core/themes/claro/css/components/tableselect.css b/web/core/themes/claro/css/components/tableselect.css
index 0f6bf1e402544a59848922abccf62fa62acafb06..9fed12185a6982595919da8c9e9de69cd25a139a 100644
--- a/web/core/themes/claro/css/components/tableselect.css
+++ b/web/core/themes/claro/css/components/tableselect.css
@@ -12,50 +12,6 @@
  * @see tableselect.js
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 td.checkbox,
 th.checkbox {
   text-align: center;
diff --git a/web/core/themes/claro/css/components/tabs.css b/web/core/themes/claro/css/components/tabs.css
index 969feff8594191562e708890cdb0345076659a85..14b26b1d03a0892ae48f2da30887a937dec6b26b 100644
--- a/web/core/themes/claro/css/components/tabs.css
+++ b/web/core/themes/claro/css/components/tabs.css
@@ -9,50 +9,6 @@
  * Tabs.
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 :root {
   /**
   * Tabs.
diff --git a/web/core/themes/claro/css/components/vertical-tabs.css b/web/core/themes/claro/css/components/vertical-tabs.css
index 9ef276898513d7ff642b0e5d1337845be3d90343..b55f177a0e1b02a236b384705e3db903359b99d1 100644
--- a/web/core/themes/claro/css/components/vertical-tabs.css
+++ b/web/core/themes/claro/css/components/vertical-tabs.css
@@ -12,50 +12,6 @@
  * Replaces /core/misc/vertical-tabs.css.
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 /**
  * Main wrapper of vertical tabs.
  * This wrapper div is added by JavaScript.
diff --git a/web/core/themes/claro/css/components/views-exposed-form.css b/web/core/themes/claro/css/components/views-exposed-form.css
index 1ba2cc82a0f1ddd6a1ebb65581a1eb545d560d57..4aace8f7527a45f43c9ec3f4bdfe2ec89800edc9 100644
--- a/web/core/themes/claro/css/components/views-exposed-form.css
+++ b/web/core/themes/claro/css/components/views-exposed-form.css
@@ -10,50 +10,6 @@
  * Visual styles for views exposed form.
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 /**
  * Use flexbox and some margin resets to make the fields + actions go inline.
  *
diff --git a/web/core/themes/claro/css/layout/breadcrumb.css b/web/core/themes/claro/css/layout/breadcrumb.css
index d87cb095b781f0cc4eb605e6e561f992b78e1d66..f2dc4c79a21d8d3e8977d3bde5818676cda3e382 100644
--- a/web/core/themes/claro/css/layout/breadcrumb.css
+++ b/web/core/themes/claro/css/layout/breadcrumb.css
@@ -10,50 +10,6 @@
  * Breadcrumb region.
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 .region-breadcrumb {
   min-height: 1.25rem;
 }
diff --git a/web/core/themes/claro/css/layout/card-list.css b/web/core/themes/claro/css/layout/card-list.css
index 5e67aadb3d937deea4205d92246fac9ebd4755ae..40eeba401f2ff164059db8769900d0c02296a665 100644
--- a/web/core/themes/claro/css/layout/card-list.css
+++ b/web/core/themes/claro/css/layout/card-list.css
@@ -10,50 +10,6 @@
  * Cards list.
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 :root {
   /* Using 100% as base causes issues in IE11. */
 }
diff --git a/web/core/themes/claro/css/layout/local-actions.css b/web/core/themes/claro/css/layout/local-actions.css
index 38786c74a4d2955c0ab6b89affb83957a04292bd..2b7eb3ef85357d2ac0e28f584cae3db2c6239be5 100644
--- a/web/core/themes/claro/css/layout/local-actions.css
+++ b/web/core/themes/claro/css/layout/local-actions.css
@@ -10,50 +10,6 @@
  * Layout styles for local actions.
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 /**
  * Action link layout styles.
  */
diff --git a/web/core/themes/claro/css/layout/node-add.css b/web/core/themes/claro/css/layout/node-add.css
index b92d66f7fbbdcaa759e0717e68e647004e6a648c..13d3003a199731eccc95b7e136748010a6e1b8ab 100644
--- a/web/core/themes/claro/css/layout/node-add.css
+++ b/web/core/themes/claro/css/layout/node-add.css
@@ -9,50 +9,6 @@
  * Layout overrides for node add/edit form.
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 .layout-region-node-footer__content {
   margin-top: 1.5em;
 }
diff --git a/web/core/themes/claro/css/theme/ckeditor-dialog.css b/web/core/themes/claro/css/theme/ckeditor-dialog.css
index 7772914c29ff0f12ce13bfe891e7da19c70681eb..12c71ab0d79a9d68a49fddc9a3e764b98a59ee25 100644
--- a/web/core/themes/claro/css/theme/ckeditor-dialog.css
+++ b/web/core/themes/claro/css/theme/ckeditor-dialog.css
@@ -10,50 +10,6 @@
  * CKEditor-native dialogs theming.
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 .cke_dialog_background_cover {
   display: none;
 }
diff --git a/web/core/themes/claro/css/theme/ckeditor-editor.css b/web/core/themes/claro/css/theme/ckeditor-editor.css
index 8fad4a5f7d9b2893d4fd64a2b79082cd6dc3d0f7..815c03d90089eca89bfe50459753b13bb1b6012e 100644
--- a/web/core/themes/claro/css/theme/ckeditor-editor.css
+++ b/web/core/themes/claro/css/theme/ckeditor-editor.css
@@ -8,49 +8,6 @@
  * @file
  * CKEditor appearance overrides.
  */
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
 :root { /* 1px */
   /* Inner border size must be based on chrome border size. */ /* 1px */
   /* Inner border radius must be based on chrome border radius and size. */
diff --git a/web/core/themes/claro/css/theme/ckeditor-frame.css b/web/core/themes/claro/css/theme/ckeditor-frame.css
index d31034199232c667ac85cd0904afa23d98ca883d..cc0c24930c0e3ffeda24b18d9540cf44a8ffebd5 100644
--- a/web/core/themes/claro/css/theme/ckeditor-frame.css
+++ b/web/core/themes/claro/css/theme/ckeditor-frame.css
@@ -10,50 +10,6 @@
  * CKEditor frame styles.
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 .cke_editable:not(.cke_editable_inline) {
   margin: 1em calc(1em - 2px);
 }
diff --git a/web/core/themes/claro/css/theme/field-ui.admin.css b/web/core/themes/claro/css/theme/field-ui.admin.css
index 9ab712aa5b5185b4d4285fd15b986d6aa4ad4408..848eed52d0c0529e829d99c60cc73ca7f3cae74e 100644
--- a/web/core/themes/claro/css/theme/field-ui.admin.css
+++ b/web/core/themes/claro/css/theme/field-ui.admin.css
@@ -10,50 +10,6 @@
  * Replacement styles for Field UI admin.
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 /* 'Manage fields' and 'Manage display' overviews */
 
 .field-ui-overview .region-title td {
diff --git a/web/core/themes/claro/css/theme/filter.theme.css b/web/core/themes/claro/css/theme/filter.theme.css
index 1b1f503c869b5779517b01ecd43734dbb4f6ab46..7ad0b201ddd4ca8b7ac0f20ab56876795b3298a6 100644
--- a/web/core/themes/claro/css/theme/filter.theme.css
+++ b/web/core/themes/claro/css/theme/filter.theme.css
@@ -10,50 +10,6 @@
  * Styling for the Filter module.
  */
 
-:root {
-  /*
-   * Color Palette.
-   */
-  /* Secondary. */
-  /* Variations. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 10% darker than base. */ /* 20% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */ /* 5% darker than base. */ /* 10% darker than base. */
-  /*
-   * Base.
-   */
-  /*
-   * Typography.
-   */ /* 1rem = 16px if font root is 100% ands browser defaults are used. */ /* ~32px */ /* ~29px */ /* ~26px */ /* ~23px */ /* ~20px */ /* 18px */ /* ~14px */ /* ~13px */ /* ~11px */
-  /**
-   * Spaces.
-   */ /* 3 * 16px = 48px */ /* 1.5 * 16px = 24px */ /* 1 * 16px = 16px */ /* 0.75 * 16px = 12px */ /* 0.5 * 16px = 8px */
-  /*
-   * Common.
-   */
-  /*
-   * Inputs.
-   */ /* Absolute zero with opacity. */ /* Davy's grey with 0.6 opacity. */ /* Light gray with 0.3 opacity on white bg. */ /* Old silver with 0.5 opacity on white bg. */ /* (1/8)em ~ 2px */ /* (1/16)em ~ 1px */ /* Font size is too big to use 1rem for extrasmall line-height */ /* 7px inside the form element label. */ /* 8px with the checkbox width of 19px */
-  /*
-   * Details.
-   */
-  /**
-   * Buttons.
-   */
-  /**
-   * jQuery.UI dropdown.
-   */ /* Light gray with 0.8 opacity. */ /* Text color with 0.1 opacity. */
-  /**
-   * Progress bar.
-   */
-  /**
-   * Tabledrag icon size.
-   */ /* 17px */
-  /**
-   * Ajax progress.
-   */
-  /**
-   * Breadcrumb.
-   */
-}
-
 /**
  * Filter information under field.
  */
diff --git a/web/core/themes/claro/css/theme/media-library.css b/web/core/themes/claro/css/theme/media-library.css
index b41f78eac044bc8a43868cec4f5d250ffac541d4..9659f503b7d44ec5a6af88582bace2b43375fb7a 100644
--- a/web/core/themes/claro/css/theme/media-library.css
+++ b/web/core/themes/claro/css/theme/media-library.css
@@ -658,9 +658,9 @@
 /**
  * Style the added media item container.
  *
- * The added media container receives screen reader focus since it is has the
- * role 'listitem'. Since it is not an interactive element, it does not need
- * an outline.
+ * The added media container receives screen reader focus since it has the role
+ * 'listitem'. Since it is not an interactive element, it does not need an
+ * outline.
  */
 
 .media-library-add-form__media {
diff --git a/web/core/themes/claro/css/theme/media-library.pcss.css b/web/core/themes/claro/css/theme/media-library.pcss.css
index 78970b4dcda9c3cc1a6e81f79d5792efa9195dca..5d623270b9798a2b19685ecfaede89e17a3dbf9a 100644
--- a/web/core/themes/claro/css/theme/media-library.pcss.css
+++ b/web/core/themes/claro/css/theme/media-library.pcss.css
@@ -609,9 +609,9 @@
 /**
  * Style the added media item container.
  *
- * The added media container receives screen reader focus since it is has the
- * role 'listitem'. Since it is not an interactive element, it does not need
- * an outline.
+ * The added media container receives screen reader focus since it has the role
+ * 'listitem'. Since it is not an interactive element, it does not need an
+ * outline.
  */
 .media-library-add-form__media {
   position: relative;
diff --git a/web/core/themes/seven/css/theme/media-library.css b/web/core/themes/seven/css/theme/media-library.css
index 80217a64bcf29a221a494c8aa87c14a7415e00e5..be85589c2e11324f70ef7a6cfbec0c842e94c369 100644
--- a/web/core/themes/seven/css/theme/media-library.css
+++ b/web/core/themes/seven/css/theme/media-library.css
@@ -625,9 +625,9 @@
 /**
  * Style the added media item container.
  *
- * The added media container receives screen reader focus since it is has the
- * role 'listitem'. Since it is not an interactive element, it does not need
- * an outline.
+ * The added media container receives screen reader focus since it has the role
+ * 'listitem'. Since it is not an interactive element, it does not need an
+ * outline.
  */
 .media-library-add-form__media {
   position: relative;
diff --git a/web/modules/custom/asc_courses/asc_courses.install b/web/modules/custom/asc_courses/asc_courses.install
index 0ed65d066bb15dee7088d36744f9efadd9ef9267..917af32f97b6775fff76a886afc24e66bc6d3029 100644
--- a/web/modules/custom/asc_courses/asc_courses.install
+++ b/web/modules/custom/asc_courses/asc_courses.install
@@ -204,7 +204,7 @@ function asc_courses_schema() {
     //     'default' => 0,
     //   ],
     ],
-    'primary key' => ['id'],
+    'primary key' => ['asc_courses_api_data_id'],
   ];
 
   /*
diff --git a/web/modules/libraries/CHANGELOG.txt b/web/modules/libraries/CHANGELOG.txt
index 6d1daa8351781ca92e24b008ece84bc2a2e27539..e0785a691d43621b75f2434513e4b01ef8e47058 100644
--- a/web/modules/libraries/CHANGELOG.txt
+++ b/web/modules/libraries/CHANGELOG.txt
@@ -1,6 +1,7 @@
 
 Libraries 8.x-3.x, xxxx-xx-xx
 -----------------------------
+#2882709 by Kingdutch: Fix "LibraryIdAccessorInterface" name
 #2833756 by 20th: Check that public://library-definitions directory does not exist
 #2825940 by tstoeckler, rjacobs: Remove LibrariesServiceProvider
 #2816115 by rjacobs: Remove ExtensionHandler service
diff --git a/web/modules/libraries/libraries.drush.inc b/web/modules/libraries/libraries.drush.inc
index 22b7d62da06a06d4e827d689126d42c61a5e25f1..3d9f7cd429584aee94f5843f5311fa9408ca87c7 100644
--- a/web/modules/libraries/libraries.drush.inc
+++ b/web/modules/libraries/libraries.drush.inc
@@ -62,8 +62,8 @@ function libraries_drush_invalidate_cache() {
  */
 function libraries_drush_list() {
   $libraries = array();
-  foreach (libraries_info() as $name => $info) {
-    $libraries[$name] = libraries_detect($name);
+  foreach (\Drupal::service('libraries.manager')->info() as $name => $info) {
+    $libraries[$name] = \Drupal::service('libraries.manager')->getLibrary($name);
   }
   ksort($libraries);
 
diff --git a/web/modules/libraries/libraries.info.yml b/web/modules/libraries/libraries.info.yml
index 02136222c77638e32a78040d0087cc6853c16d30..68ea958a3ffe6b11eabfa45db73c68f393b68355 100644
--- a/web/modules/libraries/libraries.info.yml
+++ b/web/modules/libraries/libraries.info.yml
@@ -1,10 +1,10 @@
 name: Libraries
 type: module
 description: Allows version-dependent and shared usage of external libraries.
-# core: 8.x
+core: 8.x
+core_version_requirement: ^8 || ^9
 
-# Information added by Drupal.org packaging script on 2018-01-27
-version: '8.x-3.0-alpha1'
-core: '8.x'
+# Information added by Drupal.org packaging script on 2020-12-16
+version: '8.x-3.0-alpha6'
 project: 'libraries'
-datestamp: 1517046488
+datestamp: 1608099126
diff --git a/web/modules/libraries/libraries.install b/web/modules/libraries/libraries.install
index a2edea4928282ff1d92f9450917fe12d6f584911..666f84ecea70285d621e3e36dd7d245ab7d3b5db 100644
--- a/web/modules/libraries/libraries.install
+++ b/web/modules/libraries/libraries.install
@@ -23,6 +23,6 @@ function libraries_install() {
  */
 function libraries_uninstall() {
   if (is_dir('public://library-definitions')) {
-    file_unmanaged_delete_recursive('public://library-definitions');
+    \Drupal::service('file_system')->deleteRecursive('public://library-definitions');
   }
 }
diff --git a/web/modules/libraries/libraries.module b/web/modules/libraries/libraries.module
index 3006c345ceb1716bce03c98045f108430fb6a39f..7028d2f9777d097f0814f2a75730a931c5b145db 100644
--- a/web/modules/libraries/libraries.module
+++ b/web/modules/libraries/libraries.module
@@ -11,6 +11,7 @@
 use Drupal\libraries\ExternalLibrary\Utility\LibraryAccessorInterface;
 use Drupal\libraries\ExternalLibrary\Utility\LibraryIdAccessorInterface;
 use Symfony\Component\Yaml\Parser;
+use Drupal\Core\Extension\Dependency;
 
 /**
  * Implements hook_library_info_build().
@@ -115,7 +116,7 @@ function libraries_get_libraries() {
   // Similar to 'modules' and 'themes' directories inside an installation
   // profile, installation profiles may want to place libraries into a
   // 'libraries' directory.
-  if ($profile = drupal_get_profile()) {
+  if ($profile = \Drupal::installProfile()) {
     $profile_path = drupal_get_path('profile', $profile);
     $searchdir[] = "$profile_path/libraries";
   };
@@ -167,7 +168,7 @@ function libraries_get_libraries() {
  * https://www.drupal.org/node/2170763
  */
 function libraries_scan_info_files() {
-  $profile = drupal_get_path('profile', drupal_get_profile());
+  $profile = drupal_get_path('profile', \Drupal::installProfile());
   $config = DrupalKernel::findSitePath(\Drupal::request());
 
   // Build a list of directories.
@@ -181,7 +182,7 @@ function libraries_scan_info_files() {
   $files = array();
   foreach ($directories as $dir) {
     if (file_exists($dir)) {
-      $files = array_merge($files, file_scan_directory($dir, '@^[a-z0-9._-]+\.libraries\.info\.yml$@', array(
+      $files = array_merge($files, \Drupal::service('file_system')->scanDirectory($dir, '@^[a-z0-9._-]+\.libraries\.info\.yml$@', array(
         'key' => 'name',
         'recurse' => FALSE,
       )));
@@ -345,9 +346,9 @@ function libraries_prepare_files(&$library, $version = NULL, $variant = NULL) {
 function libraries_detect_dependencies(&$library, $version = NULL, $variant = NULL) {
   if (isset($library['dependencies'])) {
     foreach ($library['dependencies'] as &$dependency_string) {
-      $dependency_info = ModuleHandler::parseDependency($dependency_string);
-      $dependency = libraries_detect($dependency_info['name']);
-      if (!$dependency['installed']) {
+      $dependency = Dependency::createFromString($dependency_string);
+      $info = libraries_detect($dependency->getName());
+      if (!$info['installed']) {
         $library['installed'] = FALSE;
         $library['error'] = 'missing dependency';
         $library['error message'] = t('The %dependency library, which the %library library depends on, is not installed.', array(
@@ -355,19 +356,19 @@ function libraries_detect_dependencies(&$library, $version = NULL, $variant = NU
           '%library' => $library['name'],
         ));
       }
-      elseif (drupal_check_incompatibility($dependency_info, $dependency['version'])) {
+      elseif (!$dependency->isCompatible($info['version'])) {
         $library['installed'] = FALSE;
         $library['error'] = 'incompatible dependency';
         $library['error message'] = t('The version %dependency_version of the %dependency library is not compatible with the %library library.', array(
-          '%dependency_version' => $dependency['version'],
-          '%dependency' => $dependency['name'],
+          '%dependency_version' => $info['version'],
+          '%dependency' => $info['name'],
           '%library' => $library['name'],
         ));
       }
 
       // Remove the version string from the dependency, so libraries_load() can
       // load the libraries directly.
-      $dependency_string = $dependency_info['name'];
+      $dependency_string = $info['name'];
     }
   }
 }
diff --git a/web/modules/libraries/src/ExternalLibrary/Exception/LibraryTypeNotFoundException.php b/web/modules/libraries/src/ExternalLibrary/Exception/LibraryTypeNotFoundException.php
index b5655bba09a626a1d7b73a60b2971a1fc19c5a83..4b382837f0ca308a3557b445d762b37a76776155 100644
--- a/web/modules/libraries/src/ExternalLibrary/Exception/LibraryTypeNotFoundException.php
+++ b/web/modules/libraries/src/ExternalLibrary/Exception/LibraryTypeNotFoundException.php
@@ -8,7 +8,7 @@
 /**
  * Provides an exception for a library definition without a type declaration.
  */
-class LibraryTypeNotFoundException extends \RuntimeException implements LibraryAccessorInterface {
+class LibraryTypeNotFoundException extends \RuntimeException implements LibraryIdAccessorInterface {
 
   use LibraryIdAccessorTrait;
 
diff --git a/web/modules/libraries/src/ExternalLibrary/LibraryManager.php b/web/modules/libraries/src/ExternalLibrary/LibraryManager.php
index 17a62236e292b2ddf0b2a71e3914bf97c080bb9e..6b92d9dc9c1d01ab62f6784214c99102515db4b9 100644
--- a/web/modules/libraries/src/ExternalLibrary/LibraryManager.php
+++ b/web/modules/libraries/src/ExternalLibrary/LibraryManager.php
@@ -61,7 +61,9 @@ public function getLibrary($id) {
   public function getRequiredLibraryIds() {
     $library_ids = [];
     foreach (['module', 'theme'] as $type) {
-      foreach (system_get_info($type) as $info) {
+      $service_id = 'extension.list.' . $type;
+      $extension_list = \Drupal::service($service_id);
+      foreach ($extension_list->getAllInstalledInfo() as $info) {
         if (isset($info['library_dependencies'])) {
           $library_ids = array_merge($library_ids, $info['library_dependencies']);
         }
diff --git a/web/modules/libraries/src/ExternalLibrary/Utility/LibraryIdAccessorInterface.php b/web/modules/libraries/src/ExternalLibrary/Utility/LibraryIdAccessorInterface.php
index 98928e9deccd67a28b7734199456885bf43087c0..1634382bce9605f1ba2ebaca29d1b50406da9ea9 100644
--- a/web/modules/libraries/src/ExternalLibrary/Utility/LibraryIdAccessorInterface.php
+++ b/web/modules/libraries/src/ExternalLibrary/Utility/LibraryIdAccessorInterface.php
@@ -5,7 +5,7 @@
 /**
  * Provides an interface for classes giving access to a library ID.
  */
-interface LibraryAccessorIdInterface {
+interface LibraryIdAccessorInterface {
 
   /**
    * Returns the ID of the library.
diff --git a/web/modules/libraries/tests/example/example_info_file.libraries.info.yml b/web/modules/libraries/tests/example/example_info_file.libraries.info.yml
index 529af045cf3d5cfce7fb74a9ce74dc98aaec9c88..d0ffc711a33096f3b68c6c0e2de3bf1186e9be38 100644
--- a/web/modules/libraries/tests/example/example_info_file.libraries.info.yml
+++ b/web/modules/libraries/tests/example/example_info_file.libraries.info.yml
@@ -1,8 +1,7 @@
 # This is an example info file of a library used for testing purposes.
 name: Example info file
 
-# Information added by Drupal.org packaging script on 2018-01-27
-version: '8.x-3.0-alpha1'
-core: '8.x'
+# Information added by Drupal.org packaging script on 2020-12-16
+version: '8.x-3.0-alpha6'
 project: 'libraries'
-datestamp: 1517046488
+datestamp: 1608099126
diff --git a/web/modules/libraries/tests/modules/libraries_test/libraries_test.info.yml b/web/modules/libraries/tests/modules/libraries_test/libraries_test.info.yml
index be54ba548ffeeb66d574293940fbcbdb06524972..f2bb897e8a092fcafba1d595314f8f8a9a62c0c5 100644
--- a/web/modules/libraries/tests/modules/libraries_test/libraries_test.info.yml
+++ b/web/modules/libraries/tests/modules/libraries_test/libraries_test.info.yml
@@ -1,7 +1,7 @@
 name: Libraries test module
 type: module
 description: Tests library detection and loading.
-# core: 8.x
+core: 8.x
 dependencies:
   - libraries
 hidden: TRUE
@@ -9,8 +9,7 @@ library_dependencies:
   - test_asset_library
   - test_asset_multiple_library
 
-# Information added by Drupal.org packaging script on 2018-01-27
-version: '8.x-3.0-alpha1'
-core: '8.x'
+# Information added by Drupal.org packaging script on 2020-12-16
+version: '8.x-3.0-alpha6'
 project: 'libraries'
-datestamp: 1517046488
+datestamp: 1608099126
diff --git a/web/modules/libraries/tests/modules/libraries_test/libraries_test.module b/web/modules/libraries/tests/modules/libraries_test/libraries_test.module
index 1a30ebc1c3c78ffab668b0b0a848bb370a2307cd..af1a4ac39a4c01a76cd561e1362c11d76af49e02 100644
--- a/web/modules/libraries/tests/modules/libraries_test/libraries_test.module
+++ b/web/modules/libraries/tests/modules/libraries_test/libraries_test.module
@@ -6,6 +6,7 @@
  */
 
 use Drupal\Component\Utility\SafeMarkup;
+use Drupal\Core\Messenger\MessengerTrait;
 
 /**
  * Implements hook_libraries_info().
@@ -461,7 +462,7 @@ function _libraries_test_callback(&$library, $version, $variant, $group) {
   // Only set the message for the top-level library to prevent confusing,
   // duplicate messages.
   if (!isset($version) && !isset($variant) && \Drupal::state()->get('libraries_test.cache', FALSE)) {
-    drupal_set_message(SafeMarkup::set("The <em>$group</em> callback group was invoked."));
+    \Drupal::messenger()->addMessage(SafeMarkup::set("The <em>$group</em> callback group was invoked."));
   }
 }
 
diff --git a/web/modules/libraries/tests/modules/libraries_test/src/Controller/ExampleController.php b/web/modules/libraries/tests/modules/libraries_test/src/Controller/ExampleController.php
index 217ebf2f8ab4028aff545bd7560818355f602957..522967c50bd11e170e77043a471b3d8f56833516 100644
--- a/web/modules/libraries/tests/modules/libraries_test/src/Controller/ExampleController.php
+++ b/web/modules/libraries/tests/modules/libraries_test/src/Controller/ExampleController.php
@@ -23,7 +23,7 @@ public static function create(ContainerInterface $container) {
    * more information.
    */
   private function buildPage($library, $variant = NULL) {
-    libraries_load($library, $variant);
+    \Drupal::service('libraries.manager')->load($library, $variant);
     // JavaScript and CSS files can be checked directly by SimpleTest, so we only
     // need to manually check for PHP files.
     $output = '';
diff --git a/web/modules/views_ajax_history/PATCHES.txt b/web/modules/views_ajax_history/PATCHES.txt
new file mode 100644
index 0000000000000000000000000000000000000000..6cf9ea80dbd3833eff94c6626100a9c18567c0b9
--- /dev/null
+++ b/web/modules/views_ajax_history/PATCHES.txt
@@ -0,0 +1,7 @@
+This file was automatically generated by Composer Patches (https://github.com/cweagans/composer-patches)
+Patches applied to this directory:
+
+3028400
+Source: https://www.drupal.org/files/issues/2019-05-16/wrong-url-with-infinit-scroll-3028400-1.patch
+
+
diff --git a/web/modules/views_ajax_history/js/views_ajax_history.js b/web/modules/views_ajax_history/js/views_ajax_history.js
index d9e4e22b875c8f7885709cfd51cf02598704d347..a061f9d9e9eace4fcff9f4ed1f9e57882bc21d87 100644
--- a/web/modules/views_ajax_history/js/views_ajax_history.js
+++ b/web/modules/views_ajax_history/js/views_ajax_history.js
@@ -204,7 +204,7 @@
   Drupal.Ajax.prototype.beforeSerialize = function (element, options) {
     // Check that we handle a click on a link, not a form submission.
     if (options.data.view_name && element && $(element).is('a')) {
-      addState(options, $(element).attr('href'));
+      addState(options, window.location.href);
     }
 
     // Call the original Drupal method with the right context.
diff --git a/web/themes/asc_bootstrap/asc_bootstrap.libraries.yml b/web/themes/asc_bootstrap/asc_bootstrap.libraries.yml
index c613638a92fc484ea63eca59e496c4bb9adb8273..ed9e1a5842784dc49c61e4d159af61f7ff6b313a 100755
--- a/web/themes/asc_bootstrap/asc_bootstrap.libraries.yml
+++ b/web/themes/asc_bootstrap/asc_bootstrap.libraries.yml
@@ -52,14 +52,14 @@ bootstrap-scripts:
 
 
 osu-webfonts:
-        remote: https://www.osu.edu/assets/fonts/webfonts.css
-        version: 1.0
+        remote: https://www.osu.edu/assets/fonts/extended/webfonts.css?ver=5.4.4
+        version: 5.4.4
         license:
           name: Hoftype
           url: http://www.fontspring.com/fflicense/hoftype
         css:
           theme:
-            https://www.osu.edu/assets/fonts/webfonts.css: { type: external, minified: false }
+            https://www.osu.edu/assets/fonts/extended/webfonts.css?ver=5.4.4: { type: external, minified: false }
 
 font-awesome:
   remote: https://fortawesome.github.io/Font-Awesome/
diff --git a/web/themes/asc_bootstrap/asc_bootstrap.theme b/web/themes/asc_bootstrap/asc_bootstrap.theme
index 481fdb8e9548aa3555293e9c8ddb45b00c33744b..a8751a64c9da1dba6585e71d344a14ef3b9106c5 100755
--- a/web/themes/asc_bootstrap/asc_bootstrap.theme
+++ b/web/themes/asc_bootstrap/asc_bootstrap.theme
@@ -115,8 +115,6 @@ function asc_bootstrap_form_alter(&$form, \Drupal\Core\Form\FormStateInterface $
          ($form['#id'] == 'views-exposed-form-research-project-directory-page-1')
       || ($form['#id'] == 'views-exposed-form-research-project-gallery-page-1')
       || ($form['#id'] == 'views-exposed-form-research-project-directory-mobile-page-1')
-      || ($form['#id'] == 'views-exposed-form-courses-page-2')
-      || ($form['#id'] == 'views-exposed-form-courses-page-3')
       || ($form['#id'] == 'views-exposed-form-research-project-directory-block-1')
       || ($form['#id'] == 'views-exposed-form-research-project-gallery-block-1')
       || ($form['#id'] == 'views-exposed-form-research-project-directory-mobile-block-1')
@@ -150,6 +148,32 @@ function asc_bootstrap_form_alter(&$form, \Drupal\Core\Form\FormStateInterface $
 
   //courses
   if ($form['#id'] == 'views-exposed-form-courses-page-2') {
+    /*
+    * add new HTML content to filters (headers and spacer)
+    * and setting weights for where they should appear in the form hierarchy
+    */
+    if((count($form['field_course_term_1_target_id']['#options']) > 1)
+    || (count($form['field_course_term_2_target_id']['#options']) > 1)) {
+      $form['filter_heading'] = array(
+        '#markup' => '<h2 class="filter-heading">Filter</h2>',
+        '#weight' => -10,
+      );
+    }
+    $form['filter_search_heading'] = array(
+      '#markup' => '<h2 class="filter-heading search-heading">Search</h2>',
+      '#weight' => 4,
+    );
+    $form['spacer'] = array(
+      '#markup' => '<div class="filter-spacer"></div>',
+      '#weight' => 1.5,
+    );
+    /*
+    * setting up weights for form elements
+    */
+    $form['title']['#weight'] = 5;
+    $form['title']['#attributes']['placeholder'] = t('Search Keywords');
+
+
     if(count($form['field_course_term_1_target_id']['#options']) == 1) {
       $form['field_course_term_1_target_id']['#access'] = FALSE;
     }
@@ -190,6 +214,27 @@ function asc_bootstrap_form_alter(&$form, \Drupal\Core\Form\FormStateInterface $
 
   //courses mobile
   if ($form['#id'] == 'views-exposed-form-courses-page-3') {
+    if((count($form['field_course_term_1_target_id']['#options']) > 1)
+    || (count($form['field_course_term_2_target_id']['#options']) > 1)) {
+      $form['filter_heading'] = array(
+        '#markup' => '<h2 class="filter-heading">Filter</h2>',
+        '#weight' => -10,
+      );
+    }
+    $form['filter_search_heading'] = array(
+      '#markup' => '<h2 class="filter-heading search-heading">Search</h2>',
+      '#weight' => 4,
+    );
+    $form['spacer'] = array(
+      '#markup' => '<div class="filter-spacer"></div>',
+      '#weight' => 1.5,
+    );
+    /*
+    * setting up weights for form elements
+    */
+    $form['title']['#weight'] = 5;
+    $form['title']['#attributes']['placeholder'] = t('Search Keywords');
+
     if(count($form['field_course_term_1_target_id']['#options']) == 1) {
       $form['field_course_term_1_target_id']['#access'] = FALSE;
     }
@@ -554,11 +599,35 @@ function asc_bootstrap_form_alter(&$form, \Drupal\Core\Form\FormStateInterface $
   * people filters
   */
   if($form['#id'] == 'views-exposed-form-people-directory-page-1') {
+    /*
+    * add new HTML content to filters (headers and spacer)
+    * and setting weights for where they should appear in the form hierarchy
+    */
+    $form['filter_heading'] = array(
+      '#markup' => '<h2 class="filter-heading">Filter</h2>',
+      '#weight' => -10,
+    );
+    $form['filter_search_heading'] = array(
+      '#markup' => '<div class="filter-linebreak"></div>',
+      '#weight' => 4,
+    );
+    $form['spacer'] = array(
+      '#markup' => '<div class="filter-spacer"></div>',
+      '#weight' => 1.5,
+    );
+    /*
+    * setting up weights for form elements
+    */
+    $form['field_appointment_target_id']['#weight'] = 1;
+    $form['field_research_interests_target_id']['#weight'] = 2;
+    $form['field_other_target_id']['#weight'] = 3;
+    $form['combine']['#weight'] = 5;
+    $form['keys']['#attributes']['placeholder'] = t('Search Keywords');
     /*
     * checking if taxonomy has vocabulary - if not, don't display field
     */
     if(count($form['field_appointment_target_id']['#options']) == 0) {
-      $form['field_appointment_target_id']['#access'] = FALSE;
+      $form['field_appointment_target_id_collapsible']['#access'] = FALSE;
     }
     else {
       $tid = array_shift(array_keys($form['field_appointment_target_id']['#options']));
@@ -568,13 +637,13 @@ function asc_bootstrap_form_alter(&$form, \Drupal\Core\Form\FormStateInterface $
         if(!empty($vid)) {
           $vocab = Vocabulary::load($vid);
           $vocab_label = $vocab->get('name');
-          $form['#info']['filter-field_appointment_target_id']['label'] = $vocab_label;
+          $form['field_appointment_target_id_collapsible']['#title'] = $vocab_label;
         }
       }
     }
 
     if(count($form['field_research_interests_target_id']['#options']) == 0) {
-      $form['field_research_interests_target_id']['#access'] = FALSE;
+      $form['field_research_interests_target_id_collapsible']['#access'] = FALSE;
     }
     else {
       $tid = array_shift(array_keys($form['field_research_interests_target_id']['#options']));
@@ -584,14 +653,14 @@ function asc_bootstrap_form_alter(&$form, \Drupal\Core\Form\FormStateInterface $
         if(!empty($vid)) {
           $vocab = Vocabulary::load($vid);
           $vocab_label = $vocab->get('name');
-          $form['#info']['filter-field_research_interests_target_id']['label'] = $vocab_label;
+          $form['field_research_interests_target_id_collapsible']['#title'] = $vocab_label;
         }
       }
     }
 
 
     if(count($form['field_other_target_id']['#options']) == 0) {
-      $form['field_other_target_id']['#access'] = FALSE;
+      $form['field_other_target_id_collapsible']['#access'] = FALSE;
     }
     else {
       $tid = array_shift(array_keys($form['field_other_target_id']['#options']));
@@ -601,7 +670,7 @@ function asc_bootstrap_form_alter(&$form, \Drupal\Core\Form\FormStateInterface $
         if(!empty($vid)) {
           $vocab = Vocabulary::load($vid);
           $vocab_label = $vocab->get('name');
-          $form['#info']['filter-field_other_target_id']['label'] = $vocab_label;
+          $form['field_other_target_id_collapsible']['#title'] = $vocab_label;
         }
       }
     }
@@ -700,3 +769,11 @@ function asc_bootstrap_views_pre_render(\Drupal\views\ViewExecutable $view) {
       $view->field['field_research_other']->options['label'] = $vocab_other_label;
   }
 }
+
+/*
+* views
+*/
+function asc_bootstrap_preprocess_views_view(&$vars) {
+  //adds view name variable which is used to identify which view directory user is on (based off view id)
+  $vars['view_name'] = $vars['id'];
+}
diff --git a/web/themes/asc_bootstrap/assets/sass/components/_filters.scss b/web/themes/asc_bootstrap/assets/sass/components/_filters.scss
index 35301c7700ed8edb84ee8ca30c9aa81192597639..64a4ca56d683b324ed38f885af81dabc1958e023 100644
--- a/web/themes/asc_bootstrap/assets/sass/components/_filters.scss
+++ b/web/themes/asc_bootstrap/assets/sass/components/_filters.scss
@@ -223,7 +223,15 @@
 // --------------------------------------------------
 //## Events.
 
+.path-events {
+  .page-header {
+    margin: 44px 0 0;
+    border-bottom: none;
+  }
+}
+
 .view-events {
+
   .view-filters {
     background: #D8D8D8;
     padding: 10px 20px;
@@ -234,6 +242,14 @@
     width: 100%;
   }
 
+  .filter-linebreak {
+    padding: 8px;
+
+    @media (max-width: 1200px) {
+      display: none;
+    }
+  }
+
   .filter-spacer {
     display: none;
 
@@ -283,8 +299,19 @@
 
   .form-actions {
 
+    .button {
+      text-transform: uppercase;
+      border-radius: 0;
+    }
+
     .form-submit {
       float: right;
+
+      @media (max-width: 768px) {
+        width: 100%;
+        margin: 10px 0;
+        float: none;
+      }
     }
 
     .btn-primary {
@@ -297,9 +324,9 @@
       }
     }
 
-    .button {
-      text-transform: uppercase;
-      border-radius: 0;
+    @media (max-width: 768px) {
+      display: flex;
+      flex-direction: column-reverse;
     }
   }
 
@@ -309,7 +336,15 @@
 // --------------------------------------------------
 //## Gallery filters.
 
+.path-gallery {
+  .page-header {
+    margin: 44px 0 0;
+    border-bottom: none;
+  }
+}
+
 .view-gallery-directory {
+
   .control-label {
     display: none;
   }
@@ -324,6 +359,14 @@
     width: 100%;
   }
 
+  .filter-linebreak {
+    padding: 8px;
+
+    @media (max-width: 1200px) {
+      display: none;
+    }
+  }
+
   .filter-spacer {
     width: 100%;
     margin-top: 15px;
@@ -370,8 +413,19 @@
 
   .form-actions {
 
+    .button {
+      text-transform: uppercase;
+      border-radius: 0;
+    }
+
     .form-submit {
       float: right;
+
+      @media (max-width: 768px) {
+        width: 100%;
+        margin: 10px 0;
+        float: none;
+      }
     }
 
     .btn-primary {
@@ -384,9 +438,9 @@
       }
     }
 
-    .button {
-      text-transform: uppercase;
-      border-radius: 0;
+    @media (max-width: 768px) {
+      display: flex;
+      flex-direction: column-reverse;
     }
   }
 
@@ -396,7 +450,15 @@
 // --------------------------------------------------
 //## News story.
 
+.path-news {
+  .page-header {
+    margin: 44px 0 0;
+    border-bottom: none;
+  }
+}
+
 .view-news {
+
   .view-filters {
     background: #D8D8D8;
     padding: 10px;
@@ -407,6 +469,14 @@
     width: 100%;
   }
 
+  .filter-linebreak {
+    padding: 8px;
+
+    @media (max-width: 1200px) {
+      display: none;
+    }
+  }
+
   .filter-spacer {
     display: none;
 
@@ -456,8 +526,19 @@
 
   .form-actions {
 
+    .button {
+      text-transform: uppercase;
+      border-radius: 0;
+    }
+
     .form-submit {
       float: right;
+
+      @media (max-width: 768px) {
+        width: 100%;
+        margin: 10px 0;
+        float: none;
+      }
     }
 
     .btn-primary {
@@ -470,16 +551,219 @@
       }
     }
 
+    @media (max-width: 768px) {
+      display: flex;
+      flex-direction: column-reverse;
+    }
+  }
+}
+
+
+// --------------------------------------------------
+//## People Directory.
+
+.path-people {
+  .page-header {
+    margin: 44px 0 0;
+    border-bottom: none;
+  }
+}
+
+.view-people-directory {
+
+  .view-filters {
+    background: #D8D8D8;
+    padding: 10px;
+  }
+
+  .filter-heading {
+    color: #225D62;
+    width: 100%;
+  }
+
+  .filter-linebreak {
+
+    @media (max-width: 1200px) {
+      display: none;
+    }
+  }
+
+  .filter-spacer {
+    display: none;
+
+    @media (max-width: 1200px) {
+      display: block;
+    }
+  }
+
+  .select-wrapper {
+    margin-right: 10px;
+
+    select {
+      min-width: 250px;
+
+      @media (max-width: 1200px) {
+        margin-top: 10px;
+        min-width: 273px;
+      }
+
+      @media (max-width: 768px) {
+        margin-top: 0;
+        min-width: 0;
+      }
+    }
+
+    &:after {
+      color: #555555;
+      font-size: 12px;
+    }
+
+    @media (max-width: 768px) {
+      width: 100%;
+    }
+  }
+
+  .form-type-textfield {
+    margin-right: 10px;
+
+    input {
+      min-width: 250px;
+    }
+
+    @media (max-width: 768px) {
+      width: 100%;
+    }
+  }
+
+}
+
+#views-exposed-form-people-directory-page-1 {
+  .form-item {
+    margin-right: 20px;
+
+    .panel-heading {
+      padding: 0 15px;
+
+      .panel-title {
+
+        .fa {
+          float: right;
+          margin-top: 5px;
+        }
+      }
+    }
+
+    @media (max-width: 768px) {
+      width: 100%;
+    }
+  }
+
+  .form-checkbox {
+    -webkit-appearance: none;
+    -moz-appearance: none;
+    -ie-appearance: none;
+    background-color: #fafafa;
+    border: 1px solid #cacece;
+    box-shadow: 0 1px 2px rgba(0,0,0,0.05);
+    padding: 9px;
+    border-radius: 3px;
+    display: inline-block;
+    position: relative;
+    top: 4px;
+    margin-right: 10px;
+
+    &:active, &:checked:active {
+      box-shadow: 0 1px 2px rgba(0,0,0,0.05), inset 0px 1px 3px rgba(0,0,0,0.1);
+    }
+
+    &:checked {
+      background-color: #442369;
+      border: 1px solid #adb8c0;
+      box-shadow: 0 1px 2px rgba(0,0,0,0.05), inset 0px -15px 10px -12px rgba(0,0,0,0.05), inset 15px 10px -12px rgba(255,255,255,0.1);
+      color: #99a1a7;
+    }
+
+    &:checked:after {
+      content: '\2713';
+      font-size: 14px;
+      position: absolute;
+      top: 0px;
+      left: 3px;
+      color: $white;
+    }
+  }
+
+  .form-item-combine {
+
+    @media (max-width: 768px) {
+      width: 100%;
+    }
+  }
+
+  .form-actions {
+
     .button {
       text-transform: uppercase;
       border-radius: 0;
     }
+
+    .form-submit {
+      float: right;
+
+      @media (max-width: 768px) {
+        width: 100%;
+        margin: 10px 0;
+        float: none;
+      }
+    }
+
+    .btn-primary {
+      background-color: #26686d;
+      border-color: #225d62;
+
+      &:hover {
+        background-color: #1b494c;
+        border-color: #1e5357;
+      }
+    }
+
+    @media (max-width: 768px) {
+      display: flex;
+      flex-direction: column-reverse;
+    }
+  }
+
+}
+
+.block-views-exposed-filter-blockpeople-directory-page-1 {
+  padding: 20px 0px;
+
+  .form-wrapper {
+    margin-top: 20px;
+
+    legend {
+      text-transform: uppercase;
+      color: #4A4A4A;
+      font-weight: bold;
+      font-size: 18px;
+      border-bottom: none;
+      margin-bottom: 5px;
+    }
   }
 }
 
+
+
 // --------------------------------------------------
 //## Research Directory.
 
+.path-research-project-directory{
+  .page-header {
+    margin: 44px 0 0;
+    border-bottom: none;
+  }
+}
+
 .view-research-project-directory {
 
   .view-filters {
@@ -492,6 +776,14 @@
     width: 100%;
   }
 
+  .filter-linebreak {
+    padding: 8px;
+
+    @media (max-width: 1200px) {
+      display: none;
+    }
+  }
+
   .form-type-textfield {
     margin-right: 10px;
 
@@ -514,8 +806,19 @@
 
   .form-actions {
 
+    .button {
+      text-transform: uppercase;
+      border-radius: 0;
+    }
+
     .form-submit {
       float: right;
+
+      @media (max-width: 768px) {
+        width: 100%;
+        margin: 10px 0;
+        float: none;
+      }
     }
 
     .btn-primary {
@@ -528,9 +831,9 @@
       }
     }
 
-    .button {
-      text-transform: uppercase;
-      border-radius: 0;
+    @media (max-width: 768px) {
+      display: flex;
+      flex-direction: column-reverse;
     }
   }
 
@@ -540,7 +843,15 @@
 // --------------------------------------------------
 //## Research Directory Mobile.
 
+.path-research-project-directory-mobile{
+  .page-header {
+    margin: 44px 0 0;
+    border-bottom: none;
+  }
+}
+
 .view-research-project-directory-mobile {
+
   .view-filters {
       background: #D8D8D8;
       padding: 10px;
@@ -551,6 +862,14 @@
     width: 100%;
   }
 
+  .filter-linebreak {
+    padding: 8px;
+
+    @media (max-width: 1200px) {
+      display: none;
+    }
+  }
+
   .form-item {
     background: $white;
     padding: 5px 10px;
@@ -595,8 +914,19 @@
 
   .form-actions {
 
+    .button {
+      text-transform: uppercase;
+      border-radius: 0;
+    }
+
     .form-submit {
       float: right;
+
+      @media (max-width: 768px) {
+        width: 100%;
+        margin: 10px 0;
+        float: none;
+      }
     }
 
     .btn-primary {
@@ -609,9 +939,9 @@
       }
     }
 
-    .button {
-      text-transform: uppercase;
-      border-radius: 0;
+    @media (max-width: 768px) {
+      display: flex;
+      flex-direction: column-reverse;
     }
   }
 
@@ -642,7 +972,15 @@
 // --------------------------------------------------
 //## Research Gallery filters.
 
+.path-research-project-gallery{
+  .page-header {
+    margin: 44px 0 0;
+    border-bottom: none;
+  }
+}
+
 .view-research-project-gallery {
+
   .control-label {
     display: none;
   }
@@ -657,6 +995,14 @@
     width: 100%;
   }
 
+  .filter-linebreak {
+    padding: 8px;
+
+    @media (max-width: 1200px) {
+      display: none;
+    }
+  }
+
   .filter-spacer {
     width: 100%;
     margin-top: 15px;
@@ -703,8 +1049,19 @@
 
   .form-actions {
 
+    .button {
+      text-transform: uppercase;
+      border-radius: 0;
+    }
+
     .form-submit {
       float: right;
+
+      @media (max-width: 768px) {
+        width: 100%;
+        margin: 10px 0;
+        float: none;
+      }
     }
 
     .btn-primary {
@@ -717,10 +1074,13 @@
       }
     }
 
-    .button {
-      text-transform: uppercase;
-      border-radius: 0;
+    @media (max-width: 768px) {
+      display: flex;
+      flex-direction: column-reverse;
     }
   }
 
 }
+
+
+
diff --git a/web/themes/asc_bootstrap/assets/sass/components/_paragraphs.scss b/web/themes/asc_bootstrap/assets/sass/components/_paragraphs.scss
index dbd471379fa9ba2b3e0f6c7d0599e0a74cb9bd9f..ff18046df10011cf1b24a526a9d16646364f24e4 100644
--- a/web/themes/asc_bootstrap/assets/sass/components/_paragraphs.scss
+++ b/web/themes/asc_bootstrap/assets/sass/components/_paragraphs.scss
@@ -21,11 +21,15 @@
   margin-top: 30px;
 }
 
+.paragraph--type--columns-4 {
+  margin-top: 30px;
+}
+
 .paragraph--type--accordion .field, .paragraph--type--tabs .field {
   padding: 20px;
 }
 
-.para_2_col, .para_3_col {
+.para_2_col, .para_3_col, .para_4_col {
   h2, h3, h4, h5, h6 {
     margin-top: 0;
     line-height: 20px;
diff --git a/web/themes/asc_bootstrap/assets/sass/components/_people.scss b/web/themes/asc_bootstrap/assets/sass/components/_people.scss
index 44964aae1412648a646afc677d49af158b5e33a3..45d520a1b236b0958c8af2e939955516a89c9cef 100644
--- a/web/themes/asc_bootstrap/assets/sass/components/_people.scss
+++ b/web/themes/asc_bootstrap/assets/sass/components/_people.scss
@@ -7,7 +7,6 @@
 
 //## People grid.
 .view-people-directory {
-  margin-bottom: 40px;
 
   h3 {
     text-transform: uppercase;
@@ -71,180 +70,38 @@
       }
     }
   }
-
-  .square-opic {
-    max-width: 220px;
-    max-height: 220px;
-    overflow: hidden;
-    position: relative;
-
-    &:after {
-      content: "";
-      display: block;
-      padding-bottom: 100%;
-    }
-
-    @media (max-width: 768px) {
-      max-width: 100%;
-      max-height: 630px;
-    }
-  }
-
-  .square-opic-content {
-      position: absolute;
-      width: 100%;
-      height: 100%;
-  }
 }
 
-
-
-// --------------------------------------------------
-
-//## Siderbar and Filters form.
-
-
-.block-views-exposed-filter-blockpeople-directory-page-1 {
-  padding: 20px 0px;
-
+.view-display-id-page_1 {
+  margin-bottom: 40px;
 }
 
-#views-exposed-form-people-directory-page-1 {
-  .form-item {
-      width: 100%;
-  }
-
-  .form-checkbox {
-    -webkit-appearance: none;
-    -moz-appearance: none;
-    -ie-appearance: none;
-    background-color: #fafafa;
-    border: 1px solid #cacece;
-    box-shadow: 0 1px 2px rgba(0,0,0,0.05);
-    padding: 9px;
-    border-radius: 3px;
-    display: inline-block;
-    position: relative;
-    top: 4px;
-
-    &:active, &:checked:active {
-      box-shadow: 0 1px 2px rgba(0,0,0,0.05), inset 0px 1px 3px rgba(0,0,0,0.1);
-    }
-
-    &:checked {
-      background-color: #442369;
-      border: 1px solid #adb8c0;
-      box-shadow: 0 1px 2px rgba(0,0,0,0.05), inset 0px -15px 10px -12px rgba(0,0,0,0.05), inset 15px 10px -12px rgba(255,255,255,0.1);
-      color: #99a1a7;
-    }
+.square-opic {
+  max-width: 220px;
+  max-height: 220px;
+  overflow: hidden;
+  position: relative;
 
-    &:checked:after {
-      content: '\2713';
-      font-size: 14px;
-      position: absolute;
-      top: 0px;
-      left: 3px;
-      color: $white;
-    }
+  &:after {
+    content: "";
+    display: block;
+    padding-bottom: 100%;
   }
 
-  .form-wrapper {
-    margin-top: 20px;
-
-    legend {
-      text-transform: uppercase;
-      color: #4A4A4A;
-      font-weight: bold;
-      font-size: 18px;
-      border-bottom: none;
-      margin-bottom: 5px;
-    }
-  }
-
-  label {
-    width: 90%;
-    margin-left: 28px;
-
-    input {
-      margin-left: -28px;
-      margin-right: 8px;
-    }
+  @media (max-width: 768px) {
+    max-width: 100%;
+    max-height: 630px;
   }
 }
 
-
-
-// --------------------------------------------------
-
-//## Mobile View.
-
-#views-exposed-form-people-directory-page-2 {
-  background: #D8D8D8;
-  padding: 10px;
-
-  details {
-    background: #ffffff;
-    padding: 5px 10px;
-    border-radius: 8px;
-    margin: 10px 0;
-  }
-
-  .ppl-filter-heading {
-    color: #225D62;
-    margin: 5px 0;
-    text-transform: capitalize;
-  }
-
-  .ppl-taxon-heading {
-    margin-top: 20px;
-  }
-
-  .form-checkbox {
-    -webkit-appearance: none;
-    -moz-appearance: none;
-    -ie-appearance: none;
-    background-color: #fafafa;
-    border: 1px solid #cacece;
-    box-shadow: 0 1px 2px rgba(0,0,0,0.05), inset 0px -15px 10px -12px rgba(0,0,0,0.05);
-    padding: 9px;
-    border-radius: 3px;
-    display: inline-block;
-    position: relative;
-    top: 4px;
-    margin-right: 5px;
-
-    &:active, &:checked:active {
-      box-shadow: 0 1px 2px rgba(0,0,0,0.05), inset 0px 1px 3px rgba(0,0,0,0.1);
-    }
-
-    &:checked {
-      background-color: #442369;
-      border: 1px solid #adb8c0;
-      box-shadow: 0 1px 2px rgba(0,0,0,0.05), inset 0px -15px 10px -12px rgba(0,0,0,0.05), inset 15px 10px -12px rgba(255,255,255,0.1);
-      color: #99a1a7;
-    }
-
-    &:checked:after {
-      content: '\2713';
-      font-size: 14px;
-      position: absolute;
-      top: 0px;
-      left: 3px;
-      color: $white;
-    }
-  }
-
-  #edit-submit-people-directory {
-    text-transform: uppercase;
-  }
-
-  #edit-reset {
-    text-transform: uppercase;
-  }
-
+.square-opic-content {
+    position: absolute;
+    width: 100%;
+    height: 100%;
 }
 
 
+
 // --------------------------------------------------
 
 //## Bio.
@@ -280,11 +137,6 @@
     h1 {
       margin-bottom: 0;
     }
-
-    .bio-pronoun {
-      font-size: 14px;
-      font-style: italic;
-    }
   }
 
 }
diff --git a/web/themes/asc_bootstrap/assets/sass/components/_research.scss b/web/themes/asc_bootstrap/assets/sass/components/_research.scss
index 1874422aa45c8e07873768af66ad8dc145091d18..bee094e30c78e78965c463e700cce9866f53e251 100644
--- a/web/themes/asc_bootstrap/assets/sass/components/_research.scss
+++ b/web/themes/asc_bootstrap/assets/sass/components/_research.scss
@@ -7,11 +7,6 @@
 
 //## Research Directory.
 
-.view-research-project-gallery .row {
-    display: flex;
-    margin-bottom: 40px;
-}
-
 .page-node-type-research-landing-page {
 
   #views-exposed-form-research-project-directory-block-1 {
@@ -31,6 +26,10 @@
     .row {
       display: flex;
       margin-bottom: 40px;
+
+      @media (max-width: 768px) {
+        display: block;
+      }
     }
   }
 }
diff --git a/web/themes/asc_bootstrap/assets/sass/components/_sidebar-menu.scss b/web/themes/asc_bootstrap/assets/sass/components/_sidebar-menu.scss
index 405ee6df6f1cd5dc10265cece156aaa04eb4bf6d..6301e0b32d55c31605d12edacbd25dcd1ec441a3 100644
--- a/web/themes/asc_bootstrap/assets/sass/components/_sidebar-menu.scss
+++ b/web/themes/asc_bootstrap/assets/sass/components/_sidebar-menu.scss
@@ -116,6 +116,12 @@ aside {
       }
     }
 
+    .active-link-li {
+      ul {
+        display: block;
+      }
+    }
+
     i {
       float: right;
       padding: 2px 10px;
diff --git a/web/themes/asc_bootstrap/css/style.css b/web/themes/asc_bootstrap/css/style.css
index c8449a78ddab878c637becdd0ada3c8ed091cdb2..a8e1f0c0b165cd839207768f77f97c6f8f00099f 100644
--- a/web/themes/asc_bootstrap/css/style.css
+++ b/web/themes/asc_bootstrap/css/style.css
@@ -10570,484 +10570,863 @@ article .field--name-body {
 }
 
 /* line 227, ../assets/sass/components/_filters.scss */
+.path-events .page-header {
+  margin: 44px 0 0;
+  border-bottom: none;
+}
+
+/* line 235, ../assets/sass/components/_filters.scss */
 .view-events .view-filters {
   background: #D8D8D8;
   padding: 10px 20px;
 }
-/* line 232, ../assets/sass/components/_filters.scss */
+/* line 240, ../assets/sass/components/_filters.scss */
 .view-events .filter-heading {
   color: #225D62;
   width: 100%;
 }
-/* line 237, ../assets/sass/components/_filters.scss */
+/* line 245, ../assets/sass/components/_filters.scss */
+.view-events .filter-linebreak {
+  padding: 8px;
+}
+@media (max-width: 1200px) {
+  /* line 245, ../assets/sass/components/_filters.scss */
+  .view-events .filter-linebreak {
+    display: none;
+  }
+}
+/* line 253, ../assets/sass/components/_filters.scss */
 .view-events .filter-spacer {
   display: none;
 }
 @media (max-width: 1200px) {
-  /* line 237, ../assets/sass/components/_filters.scss */
+  /* line 253, ../assets/sass/components/_filters.scss */
   .view-events .filter-spacer {
     display: block;
   }
 }
-/* line 245, ../assets/sass/components/_filters.scss */
+/* line 261, ../assets/sass/components/_filters.scss */
 .view-events .select-wrapper {
   margin-right: 10px;
 }
-/* line 248, ../assets/sass/components/_filters.scss */
+/* line 264, ../assets/sass/components/_filters.scss */
 .view-events .select-wrapper select {
   min-width: 250px;
 }
 @media (max-width: 1200px) {
-  /* line 248, ../assets/sass/components/_filters.scss */
+  /* line 264, ../assets/sass/components/_filters.scss */
   .view-events .select-wrapper select {
     margin-top: 10px;
     min-width: 273px;
   }
 }
 @media (max-width: 768px) {
-  /* line 248, ../assets/sass/components/_filters.scss */
+  /* line 264, ../assets/sass/components/_filters.scss */
   .view-events .select-wrapper select {
     margin-top: 0;
     min-width: 0;
   }
 }
-/* line 262, ../assets/sass/components/_filters.scss */
+/* line 278, ../assets/sass/components/_filters.scss */
 .view-events .select-wrapper:after {
   color: #555555;
   font-size: 12px;
 }
 @media (max-width: 768px) {
-  /* line 245, ../assets/sass/components/_filters.scss */
+  /* line 261, ../assets/sass/components/_filters.scss */
   .view-events .select-wrapper {
     width: 100%;
   }
 }
-/* line 272, ../assets/sass/components/_filters.scss */
+/* line 288, ../assets/sass/components/_filters.scss */
 .view-events .form-type-textfield {
   margin-right: 10px;
 }
-/* line 275, ../assets/sass/components/_filters.scss */
+/* line 291, ../assets/sass/components/_filters.scss */
 .view-events .form-type-textfield input {
   min-width: 250px;
 }
 @media (max-width: 768px) {
-  /* line 272, ../assets/sass/components/_filters.scss */
+  /* line 288, ../assets/sass/components/_filters.scss */
   .view-events .form-type-textfield {
     width: 100%;
   }
 }
-/* line 286, ../assets/sass/components/_filters.scss */
+/* line 302, ../assets/sass/components/_filters.scss */
+.view-events .form-actions .button {
+  text-transform: uppercase;
+  border-radius: 0;
+}
+/* line 307, ../assets/sass/components/_filters.scss */
 .view-events .form-actions .form-submit {
   float: right;
 }
-/* line 290, ../assets/sass/components/_filters.scss */
+@media (max-width: 768px) {
+  /* line 307, ../assets/sass/components/_filters.scss */
+  .view-events .form-actions .form-submit {
+    width: 100%;
+    margin: 10px 0;
+    float: none;
+  }
+}
+/* line 317, ../assets/sass/components/_filters.scss */
 .view-events .form-actions .btn-primary {
   background-color: #26686d;
   border-color: #225d62;
 }
-/* line 294, ../assets/sass/components/_filters.scss */
+/* line 321, ../assets/sass/components/_filters.scss */
 .view-events .form-actions .btn-primary:hover {
   background-color: #1b494c;
   border-color: #1e5357;
 }
-/* line 300, ../assets/sass/components/_filters.scss */
-.view-events .form-actions .button {
-  text-transform: uppercase;
-  border-radius: 0;
+@media (max-width: 768px) {
+  /* line 300, ../assets/sass/components/_filters.scss */
+  .view-events .form-actions {
+    display: flex;
+    flex-direction: column-reverse;
+  }
 }
 
-/* line 313, ../assets/sass/components/_filters.scss */
+/* line 340, ../assets/sass/components/_filters.scss */
+.path-gallery .page-header {
+  margin: 44px 0 0;
+  border-bottom: none;
+}
+
+/* line 348, ../assets/sass/components/_filters.scss */
 .view-gallery-directory .control-label {
   display: none;
 }
-/* line 317, ../assets/sass/components/_filters.scss */
+/* line 352, ../assets/sass/components/_filters.scss */
 .view-gallery-directory .view-filters {
   background: #D8D8D8;
   padding: 20px 15px 15px;
 }
-/* line 322, ../assets/sass/components/_filters.scss */
+/* line 357, ../assets/sass/components/_filters.scss */
 .view-gallery-directory .filter-heading {
   color: #225D62;
   width: 100%;
 }
-/* line 327, ../assets/sass/components/_filters.scss */
+/* line 362, ../assets/sass/components/_filters.scss */
+.view-gallery-directory .filter-linebreak {
+  padding: 8px;
+}
+@media (max-width: 1200px) {
+  /* line 362, ../assets/sass/components/_filters.scss */
+  .view-gallery-directory .filter-linebreak {
+    display: none;
+  }
+}
+/* line 370, ../assets/sass/components/_filters.scss */
 .view-gallery-directory .filter-spacer {
   width: 100%;
   margin-top: 15px;
 }
-/* line 332, ../assets/sass/components/_filters.scss */
+/* line 375, ../assets/sass/components/_filters.scss */
 .view-gallery-directory .select-wrapper {
   margin-right: 10px;
 }
-/* line 335, ../assets/sass/components/_filters.scss */
+/* line 378, ../assets/sass/components/_filters.scss */
 .view-gallery-directory .select-wrapper select {
   min-width: 250px;
 }
 @media (max-width: 1200px) {
-  /* line 335, ../assets/sass/components/_filters.scss */
+  /* line 378, ../assets/sass/components/_filters.scss */
   .view-gallery-directory .select-wrapper select {
     margin-top: 10px;
     min-width: 273px;
   }
 }
 @media (max-width: 768px) {
-  /* line 335, ../assets/sass/components/_filters.scss */
+  /* line 378, ../assets/sass/components/_filters.scss */
   .view-gallery-directory .select-wrapper select {
     margin-top: 0;
     min-width: 0;
   }
 }
-/* line 349, ../assets/sass/components/_filters.scss */
+/* line 392, ../assets/sass/components/_filters.scss */
 .view-gallery-directory .select-wrapper:after {
   color: #555555;
   font-size: 12px;
 }
 @media (max-width: 768px) {
-  /* line 332, ../assets/sass/components/_filters.scss */
+  /* line 375, ../assets/sass/components/_filters.scss */
   .view-gallery-directory .select-wrapper {
     width: 100%;
   }
 }
-/* line 359, ../assets/sass/components/_filters.scss */
+/* line 402, ../assets/sass/components/_filters.scss */
 .view-gallery-directory .form-type-textfield {
   margin-right: 10px;
 }
-/* line 362, ../assets/sass/components/_filters.scss */
+/* line 405, ../assets/sass/components/_filters.scss */
 .view-gallery-directory .form-type-textfield input {
   min-width: 250px;
 }
 @media (max-width: 768px) {
-  /* line 359, ../assets/sass/components/_filters.scss */
+  /* line 402, ../assets/sass/components/_filters.scss */
   .view-gallery-directory .form-type-textfield {
     width: 100%;
   }
 }
-/* line 373, ../assets/sass/components/_filters.scss */
+/* line 416, ../assets/sass/components/_filters.scss */
+.view-gallery-directory .form-actions .button {
+  text-transform: uppercase;
+  border-radius: 0;
+}
+/* line 421, ../assets/sass/components/_filters.scss */
 .view-gallery-directory .form-actions .form-submit {
   float: right;
 }
-/* line 377, ../assets/sass/components/_filters.scss */
+@media (max-width: 768px) {
+  /* line 421, ../assets/sass/components/_filters.scss */
+  .view-gallery-directory .form-actions .form-submit {
+    width: 100%;
+    margin: 10px 0;
+    float: none;
+  }
+}
+/* line 431, ../assets/sass/components/_filters.scss */
 .view-gallery-directory .form-actions .btn-primary {
   background-color: #26686d;
   border-color: #225d62;
 }
-/* line 381, ../assets/sass/components/_filters.scss */
+/* line 435, ../assets/sass/components/_filters.scss */
 .view-gallery-directory .form-actions .btn-primary:hover {
   background-color: #1b494c;
   border-color: #1e5357;
 }
-/* line 387, ../assets/sass/components/_filters.scss */
-.view-gallery-directory .form-actions .button {
-  text-transform: uppercase;
-  border-radius: 0;
+@media (max-width: 768px) {
+  /* line 414, ../assets/sass/components/_filters.scss */
+  .view-gallery-directory .form-actions {
+    display: flex;
+    flex-direction: column-reverse;
+  }
+}
+
+/* line 454, ../assets/sass/components/_filters.scss */
+.path-news .page-header {
+  margin: 44px 0 0;
+  border-bottom: none;
 }
 
-/* line 400, ../assets/sass/components/_filters.scss */
+/* line 462, ../assets/sass/components/_filters.scss */
 .view-news .view-filters {
   background: #D8D8D8;
   padding: 10px;
 }
-/* line 405, ../assets/sass/components/_filters.scss */
+/* line 467, ../assets/sass/components/_filters.scss */
 .view-news .filter-heading {
   color: #225D62;
   width: 100%;
 }
-/* line 410, ../assets/sass/components/_filters.scss */
+/* line 472, ../assets/sass/components/_filters.scss */
+.view-news .filter-linebreak {
+  padding: 8px;
+}
+@media (max-width: 1200px) {
+  /* line 472, ../assets/sass/components/_filters.scss */
+  .view-news .filter-linebreak {
+    display: none;
+  }
+}
+/* line 480, ../assets/sass/components/_filters.scss */
 .view-news .filter-spacer {
   display: none;
 }
 @media (max-width: 1200px) {
-  /* line 410, ../assets/sass/components/_filters.scss */
+  /* line 480, ../assets/sass/components/_filters.scss */
   .view-news .filter-spacer {
     display: block;
   }
 }
-/* line 418, ../assets/sass/components/_filters.scss */
+/* line 488, ../assets/sass/components/_filters.scss */
 .view-news .select-wrapper {
   margin-right: 10px;
 }
-/* line 421, ../assets/sass/components/_filters.scss */
+/* line 491, ../assets/sass/components/_filters.scss */
 .view-news .select-wrapper select {
   min-width: 250px;
 }
 @media (max-width: 1200px) {
-  /* line 421, ../assets/sass/components/_filters.scss */
+  /* line 491, ../assets/sass/components/_filters.scss */
   .view-news .select-wrapper select {
     margin-top: 10px;
     min-width: 273px;
   }
 }
 @media (max-width: 768px) {
-  /* line 421, ../assets/sass/components/_filters.scss */
+  /* line 491, ../assets/sass/components/_filters.scss */
   .view-news .select-wrapper select {
     margin-top: 0;
     min-width: 0;
   }
 }
-/* line 435, ../assets/sass/components/_filters.scss */
+/* line 505, ../assets/sass/components/_filters.scss */
 .view-news .select-wrapper:after {
   color: #555555;
   font-size: 12px;
 }
 @media (max-width: 768px) {
-  /* line 418, ../assets/sass/components/_filters.scss */
+  /* line 488, ../assets/sass/components/_filters.scss */
   .view-news .select-wrapper {
     width: 100%;
   }
 }
-/* line 445, ../assets/sass/components/_filters.scss */
+/* line 515, ../assets/sass/components/_filters.scss */
 .view-news .form-type-textfield {
   margin-right: 10px;
 }
-/* line 448, ../assets/sass/components/_filters.scss */
+/* line 518, ../assets/sass/components/_filters.scss */
 .view-news .form-type-textfield input {
   min-width: 250px;
 }
 @media (max-width: 768px) {
-  /* line 445, ../assets/sass/components/_filters.scss */
+  /* line 515, ../assets/sass/components/_filters.scss */
   .view-news .form-type-textfield {
     width: 100%;
   }
 }
-/* line 459, ../assets/sass/components/_filters.scss */
+/* line 529, ../assets/sass/components/_filters.scss */
+.view-news .form-actions .button {
+  text-transform: uppercase;
+  border-radius: 0;
+}
+/* line 534, ../assets/sass/components/_filters.scss */
 .view-news .form-actions .form-submit {
   float: right;
 }
-/* line 463, ../assets/sass/components/_filters.scss */
+@media (max-width: 768px) {
+  /* line 534, ../assets/sass/components/_filters.scss */
+  .view-news .form-actions .form-submit {
+    width: 100%;
+    margin: 10px 0;
+    float: none;
+  }
+}
+/* line 544, ../assets/sass/components/_filters.scss */
 .view-news .form-actions .btn-primary {
   background-color: #26686d;
   border-color: #225d62;
 }
-/* line 467, ../assets/sass/components/_filters.scss */
+/* line 548, ../assets/sass/components/_filters.scss */
 .view-news .form-actions .btn-primary:hover {
   background-color: #1b494c;
   border-color: #1e5357;
 }
-/* line 473, ../assets/sass/components/_filters.scss */
-.view-news .form-actions .button {
+@media (max-width: 768px) {
+  /* line 527, ../assets/sass/components/_filters.scss */
+  .view-news .form-actions {
+    display: flex;
+    flex-direction: column-reverse;
+  }
+}
+
+/* line 566, ../assets/sass/components/_filters.scss */
+.path-people .page-header {
+  margin: 44px 0 0;
+  border-bottom: none;
+}
+
+/* line 574, ../assets/sass/components/_filters.scss */
+.view-people-directory .view-filters {
+  background: #D8D8D8;
+  padding: 10px;
+}
+/* line 579, ../assets/sass/components/_filters.scss */
+.view-people-directory .filter-heading {
+  color: #225D62;
+  width: 100%;
+}
+@media (max-width: 1200px) {
+  /* line 584, ../assets/sass/components/_filters.scss */
+  .view-people-directory .filter-linebreak {
+    display: none;
+  }
+}
+/* line 591, ../assets/sass/components/_filters.scss */
+.view-people-directory .filter-spacer {
+  display: none;
+}
+@media (max-width: 1200px) {
+  /* line 591, ../assets/sass/components/_filters.scss */
+  .view-people-directory .filter-spacer {
+    display: block;
+  }
+}
+/* line 599, ../assets/sass/components/_filters.scss */
+.view-people-directory .select-wrapper {
+  margin-right: 10px;
+}
+/* line 602, ../assets/sass/components/_filters.scss */
+.view-people-directory .select-wrapper select {
+  min-width: 250px;
+}
+@media (max-width: 1200px) {
+  /* line 602, ../assets/sass/components/_filters.scss */
+  .view-people-directory .select-wrapper select {
+    margin-top: 10px;
+    min-width: 273px;
+  }
+}
+@media (max-width: 768px) {
+  /* line 602, ../assets/sass/components/_filters.scss */
+  .view-people-directory .select-wrapper select {
+    margin-top: 0;
+    min-width: 0;
+  }
+}
+/* line 616, ../assets/sass/components/_filters.scss */
+.view-people-directory .select-wrapper:after {
+  color: #555555;
+  font-size: 12px;
+}
+@media (max-width: 768px) {
+  /* line 599, ../assets/sass/components/_filters.scss */
+  .view-people-directory .select-wrapper {
+    width: 100%;
+  }
+}
+/* line 626, ../assets/sass/components/_filters.scss */
+.view-people-directory .form-type-textfield {
+  margin-right: 10px;
+}
+/* line 629, ../assets/sass/components/_filters.scss */
+.view-people-directory .form-type-textfield input {
+  min-width: 250px;
+}
+@media (max-width: 768px) {
+  /* line 626, ../assets/sass/components/_filters.scss */
+  .view-people-directory .form-type-textfield {
+    width: 100%;
+  }
+}
+
+/* line 641, ../assets/sass/components/_filters.scss */
+#views-exposed-form-people-directory-page-1 .form-item {
+  margin-right: 20px;
+}
+/* line 644, ../assets/sass/components/_filters.scss */
+#views-exposed-form-people-directory-page-1 .form-item .panel-heading {
+  padding: 0 15px;
+}
+/* line 649, ../assets/sass/components/_filters.scss */
+#views-exposed-form-people-directory-page-1 .form-item .panel-heading .panel-title .fa {
+  float: right;
+  margin-top: 5px;
+}
+@media (max-width: 768px) {
+  /* line 641, ../assets/sass/components/_filters.scss */
+  #views-exposed-form-people-directory-page-1 .form-item {
+    width: 100%;
+  }
+}
+/* line 661, ../assets/sass/components/_filters.scss */
+#views-exposed-form-people-directory-page-1 .form-checkbox {
+  -webkit-appearance: none;
+  -moz-appearance: none;
+  -ie-appearance: none;
+  background-color: #fafafa;
+  border: 1px solid #cacece;
+  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
+  padding: 9px;
+  border-radius: 3px;
+  display: inline-block;
+  position: relative;
+  top: 4px;
+  margin-right: 10px;
+}
+/* line 675, ../assets/sass/components/_filters.scss */
+#views-exposed-form-people-directory-page-1 .form-checkbox:active, #views-exposed-form-people-directory-page-1 .form-checkbox:checked:active {
+  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05), inset 0px 1px 3px rgba(0, 0, 0, 0.1);
+}
+/* line 679, ../assets/sass/components/_filters.scss */
+#views-exposed-form-people-directory-page-1 .form-checkbox:checked {
+  background-color: #442369;
+  border: 1px solid #adb8c0;
+  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05), inset 0px -15px 10px -12px rgba(0, 0, 0, 0.05), inset 15px 10px -12px rgba(255, 255, 255, 0.1);
+  color: #99a1a7;
+}
+/* line 686, ../assets/sass/components/_filters.scss */
+#views-exposed-form-people-directory-page-1 .form-checkbox:checked:after {
+  content: '\2713';
+  font-size: 14px;
+  position: absolute;
+  top: 0px;
+  left: 3px;
+  color: #ffffff;
+}
+@media (max-width: 768px) {
+  /* line 696, ../assets/sass/components/_filters.scss */
+  #views-exposed-form-people-directory-page-1 .form-item-combine {
+    width: 100%;
+  }
+}
+/* line 705, ../assets/sass/components/_filters.scss */
+#views-exposed-form-people-directory-page-1 .form-actions .button {
   text-transform: uppercase;
   border-radius: 0;
 }
+/* line 710, ../assets/sass/components/_filters.scss */
+#views-exposed-form-people-directory-page-1 .form-actions .form-submit {
+  float: right;
+}
+@media (max-width: 768px) {
+  /* line 710, ../assets/sass/components/_filters.scss */
+  #views-exposed-form-people-directory-page-1 .form-actions .form-submit {
+    width: 100%;
+    margin: 10px 0;
+    float: none;
+  }
+}
+/* line 720, ../assets/sass/components/_filters.scss */
+#views-exposed-form-people-directory-page-1 .form-actions .btn-primary {
+  background-color: #26686d;
+  border-color: #225d62;
+}
+/* line 724, ../assets/sass/components/_filters.scss */
+#views-exposed-form-people-directory-page-1 .form-actions .btn-primary:hover {
+  background-color: #1b494c;
+  border-color: #1e5357;
+}
+@media (max-width: 768px) {
+  /* line 703, ../assets/sass/components/_filters.scss */
+  #views-exposed-form-people-directory-page-1 .form-actions {
+    display: flex;
+    flex-direction: column-reverse;
+  }
+}
+
+/* line 738, ../assets/sass/components/_filters.scss */
+.block-views-exposed-filter-blockpeople-directory-page-1 {
+  padding: 20px 0px;
+}
+/* line 741, ../assets/sass/components/_filters.scss */
+.block-views-exposed-filter-blockpeople-directory-page-1 .form-wrapper {
+  margin-top: 20px;
+}
+/* line 744, ../assets/sass/components/_filters.scss */
+.block-views-exposed-filter-blockpeople-directory-page-1 .form-wrapper legend {
+  text-transform: uppercase;
+  color: #4A4A4A;
+  font-weight: bold;
+  font-size: 18px;
+  border-bottom: none;
+  margin-bottom: 5px;
+}
 
-/* line 485, ../assets/sass/components/_filters.scss */
+/* line 761, ../assets/sass/components/_filters.scss */
+.path-research-project-directory .page-header {
+  margin: 44px 0 0;
+  border-bottom: none;
+}
+
+/* line 769, ../assets/sass/components/_filters.scss */
 .view-research-project-directory .view-filters {
   background: #D8D8D8;
   padding: 10px;
 }
-/* line 490, ../assets/sass/components/_filters.scss */
+/* line 774, ../assets/sass/components/_filters.scss */
 .view-research-project-directory .filter-heading {
   color: #225D62;
   width: 100%;
 }
-/* line 495, ../assets/sass/components/_filters.scss */
+/* line 779, ../assets/sass/components/_filters.scss */
+.view-research-project-directory .filter-linebreak {
+  padding: 8px;
+}
+@media (max-width: 1200px) {
+  /* line 779, ../assets/sass/components/_filters.scss */
+  .view-research-project-directory .filter-linebreak {
+    display: none;
+  }
+}
+/* line 787, ../assets/sass/components/_filters.scss */
 .view-research-project-directory .form-type-textfield {
   margin-right: 10px;
 }
-/* line 498, ../assets/sass/components/_filters.scss */
+/* line 790, ../assets/sass/components/_filters.scss */
 .view-research-project-directory .form-type-textfield input {
   min-width: 250px;
 }
-/* line 505, ../assets/sass/components/_filters.scss */
+/* line 797, ../assets/sass/components/_filters.scss */
 .view-research-project-directory .select-wrapper select {
   min-width: 250px;
 }
-/* line 509, ../assets/sass/components/_filters.scss */
+/* line 801, ../assets/sass/components/_filters.scss */
 .view-research-project-directory .select-wrapper:after {
   color: #555555;
   font-size: 12px;
 }
-/* line 517, ../assets/sass/components/_filters.scss */
+/* line 809, ../assets/sass/components/_filters.scss */
+.view-research-project-directory .form-actions .button {
+  text-transform: uppercase;
+  border-radius: 0;
+}
+/* line 814, ../assets/sass/components/_filters.scss */
 .view-research-project-directory .form-actions .form-submit {
   float: right;
 }
-/* line 521, ../assets/sass/components/_filters.scss */
+@media (max-width: 768px) {
+  /* line 814, ../assets/sass/components/_filters.scss */
+  .view-research-project-directory .form-actions .form-submit {
+    width: 100%;
+    margin: 10px 0;
+    float: none;
+  }
+}
+/* line 824, ../assets/sass/components/_filters.scss */
 .view-research-project-directory .form-actions .btn-primary {
   background-color: #26686d;
   border-color: #225d62;
 }
-/* line 525, ../assets/sass/components/_filters.scss */
+/* line 828, ../assets/sass/components/_filters.scss */
 .view-research-project-directory .form-actions .btn-primary:hover {
   background-color: #1b494c;
   border-color: #1e5357;
 }
-/* line 531, ../assets/sass/components/_filters.scss */
-.view-research-project-directory .form-actions .button {
-  text-transform: uppercase;
-  border-radius: 0;
+@media (max-width: 768px) {
+  /* line 807, ../assets/sass/components/_filters.scss */
+  .view-research-project-directory .form-actions {
+    display: flex;
+    flex-direction: column-reverse;
+  }
 }
 
-/* line 544, ../assets/sass/components/_filters.scss */
+/* line 847, ../assets/sass/components/_filters.scss */
+.path-research-project-directory-mobile .page-header {
+  margin: 44px 0 0;
+  border-bottom: none;
+}
+
+/* line 855, ../assets/sass/components/_filters.scss */
 .view-research-project-directory-mobile .view-filters {
   background: #D8D8D8;
   padding: 10px;
 }
-/* line 549, ../assets/sass/components/_filters.scss */
+/* line 860, ../assets/sass/components/_filters.scss */
 .view-research-project-directory-mobile .filter-heading {
   color: #225D62;
   width: 100%;
 }
-/* line 554, ../assets/sass/components/_filters.scss */
+/* line 865, ../assets/sass/components/_filters.scss */
+.view-research-project-directory-mobile .filter-linebreak {
+  padding: 8px;
+}
+@media (max-width: 1200px) {
+  /* line 865, ../assets/sass/components/_filters.scss */
+  .view-research-project-directory-mobile .filter-linebreak {
+    display: none;
+  }
+}
+/* line 873, ../assets/sass/components/_filters.scss */
 .view-research-project-directory-mobile .form-item {
   background: #ffffff;
   padding: 5px 10px;
   border-radius: 8px;
   margin: 10px 0;
 }
-/* line 561, ../assets/sass/components/_filters.scss */
+/* line 880, ../assets/sass/components/_filters.scss */
 .view-research-project-directory-mobile .form-type-textfield {
   width: 100%;
   background: transparent;
   padding: 0;
 }
-/* line 566, ../assets/sass/components/_filters.scss */
+/* line 885, ../assets/sass/components/_filters.scss */
 .view-research-project-directory-mobile .form-type-textfield label {
   display: none;
 }
-/* line 570, ../assets/sass/components/_filters.scss */
+/* line 889, ../assets/sass/components/_filters.scss */
 .view-research-project-directory-mobile .form-type-textfield .form-control {
   width: 100%;
   border-radius: 0;
 }
-/* line 576, ../assets/sass/components/_filters.scss */
+/* line 895, ../assets/sass/components/_filters.scss */
 .view-research-project-directory-mobile .form-type-textfield {
   margin-right: 10px;
 }
-/* line 579, ../assets/sass/components/_filters.scss */
+/* line 898, ../assets/sass/components/_filters.scss */
 .view-research-project-directory-mobile .form-type-textfield input {
   min-width: 250px;
 }
-/* line 586, ../assets/sass/components/_filters.scss */
+/* line 905, ../assets/sass/components/_filters.scss */
 .view-research-project-directory-mobile .select-wrapper select {
   min-width: 250px;
 }
-/* line 590, ../assets/sass/components/_filters.scss */
+/* line 909, ../assets/sass/components/_filters.scss */
 .view-research-project-directory-mobile .select-wrapper:after {
   color: #555555;
   font-size: 12px;
 }
-/* line 598, ../assets/sass/components/_filters.scss */
+/* line 917, ../assets/sass/components/_filters.scss */
+.view-research-project-directory-mobile .form-actions .button {
+  text-transform: uppercase;
+  border-radius: 0;
+}
+/* line 922, ../assets/sass/components/_filters.scss */
 .view-research-project-directory-mobile .form-actions .form-submit {
   float: right;
 }
-/* line 602, ../assets/sass/components/_filters.scss */
+@media (max-width: 768px) {
+  /* line 922, ../assets/sass/components/_filters.scss */
+  .view-research-project-directory-mobile .form-actions .form-submit {
+    width: 100%;
+    margin: 10px 0;
+    float: none;
+  }
+}
+/* line 932, ../assets/sass/components/_filters.scss */
 .view-research-project-directory-mobile .form-actions .btn-primary {
   background-color: #26686d;
   border-color: #225d62;
 }
-/* line 606, ../assets/sass/components/_filters.scss */
+/* line 936, ../assets/sass/components/_filters.scss */
 .view-research-project-directory-mobile .form-actions .btn-primary:hover {
   background-color: #1b494c;
   border-color: #1e5357;
 }
-/* line 612, ../assets/sass/components/_filters.scss */
-.view-research-project-directory-mobile .form-actions .button {
-  text-transform: uppercase;
-  border-radius: 0;
+@media (max-width: 768px) {
+  /* line 915, ../assets/sass/components/_filters.scss */
+  .view-research-project-directory-mobile .form-actions {
+    display: flex;
+    flex-direction: column-reverse;
+  }
 }
-/* line 619, ../assets/sass/components/_filters.scss */
+/* line 949, ../assets/sass/components/_filters.scss */
 .view-research-project-directory-mobile .views-row .views-col {
   background: #F9F9F9;
   border: #DDD solid 1px;
   padding: 20px;
   margin-bottom: 15px;
 }
-/* line 627, ../assets/sass/components/_filters.scss */
+/* line 957, ../assets/sass/components/_filters.scss */
 .view-research-project-directory-mobile .form-item-field-research-departments-target-id-all {
   display: none;
 }
-/* line 631, ../assets/sass/components/_filters.scss */
+/* line 961, ../assets/sass/components/_filters.scss */
 .view-research-project-directory-mobile .form-item-field-research-other-target-id-all {
   display: none;
 }
-/* line 635, ../assets/sass/components/_filters.scss */
+/* line 965, ../assets/sass/components/_filters.scss */
 .view-research-project-directory-mobile .form-item-field-research-year-target-id-all {
   display: none;
 }
 
-/* line 646, ../assets/sass/components/_filters.scss */
+/* line 976, ../assets/sass/components/_filters.scss */
+.path-research-project-gallery .page-header {
+  margin: 44px 0 0;
+  border-bottom: none;
+}
+
+/* line 984, ../assets/sass/components/_filters.scss */
 .view-research-project-gallery .control-label {
   display: none;
 }
-/* line 650, ../assets/sass/components/_filters.scss */
+/* line 988, ../assets/sass/components/_filters.scss */
 .view-research-project-gallery .view-filters {
   background: #D8D8D8;
   padding: 20px 15px 15px;
 }
-/* line 655, ../assets/sass/components/_filters.scss */
+/* line 993, ../assets/sass/components/_filters.scss */
 .view-research-project-gallery .filter-heading {
   color: #225D62;
   width: 100%;
 }
-/* line 660, ../assets/sass/components/_filters.scss */
+/* line 998, ../assets/sass/components/_filters.scss */
+.view-research-project-gallery .filter-linebreak {
+  padding: 8px;
+}
+@media (max-width: 1200px) {
+  /* line 998, ../assets/sass/components/_filters.scss */
+  .view-research-project-gallery .filter-linebreak {
+    display: none;
+  }
+}
+/* line 1006, ../assets/sass/components/_filters.scss */
 .view-research-project-gallery .filter-spacer {
   width: 100%;
   margin-top: 15px;
 }
-/* line 665, ../assets/sass/components/_filters.scss */
+/* line 1011, ../assets/sass/components/_filters.scss */
 .view-research-project-gallery .select-wrapper {
   margin-right: 10px;
 }
-/* line 668, ../assets/sass/components/_filters.scss */
+/* line 1014, ../assets/sass/components/_filters.scss */
 .view-research-project-gallery .select-wrapper select {
   min-width: 250px;
 }
 @media (max-width: 1200px) {
-  /* line 668, ../assets/sass/components/_filters.scss */
+  /* line 1014, ../assets/sass/components/_filters.scss */
   .view-research-project-gallery .select-wrapper select {
     margin-top: 10px;
     min-width: 273px;
   }
 }
 @media (max-width: 768px) {
-  /* line 668, ../assets/sass/components/_filters.scss */
+  /* line 1014, ../assets/sass/components/_filters.scss */
   .view-research-project-gallery .select-wrapper select {
     margin-top: 0;
     min-width: 0;
   }
 }
-/* line 682, ../assets/sass/components/_filters.scss */
+/* line 1028, ../assets/sass/components/_filters.scss */
 .view-research-project-gallery .select-wrapper:after {
   color: #555555;
   font-size: 12px;
 }
 @media (max-width: 768px) {
-  /* line 665, ../assets/sass/components/_filters.scss */
+  /* line 1011, ../assets/sass/components/_filters.scss */
   .view-research-project-gallery .select-wrapper {
     width: 100%;
   }
 }
-/* line 692, ../assets/sass/components/_filters.scss */
+/* line 1038, ../assets/sass/components/_filters.scss */
 .view-research-project-gallery .form-type-textfield {
   margin-right: 10px;
 }
-/* line 695, ../assets/sass/components/_filters.scss */
+/* line 1041, ../assets/sass/components/_filters.scss */
 .view-research-project-gallery .form-type-textfield input {
   min-width: 250px;
 }
 @media (max-width: 768px) {
-  /* line 692, ../assets/sass/components/_filters.scss */
+  /* line 1038, ../assets/sass/components/_filters.scss */
   .view-research-project-gallery .form-type-textfield {
     width: 100%;
   }
 }
-/* line 706, ../assets/sass/components/_filters.scss */
+/* line 1052, ../assets/sass/components/_filters.scss */
+.view-research-project-gallery .form-actions .button {
+  text-transform: uppercase;
+  border-radius: 0;
+}
+/* line 1057, ../assets/sass/components/_filters.scss */
 .view-research-project-gallery .form-actions .form-submit {
   float: right;
 }
-/* line 710, ../assets/sass/components/_filters.scss */
+@media (max-width: 768px) {
+  /* line 1057, ../assets/sass/components/_filters.scss */
+  .view-research-project-gallery .form-actions .form-submit {
+    width: 100%;
+    margin: 10px 0;
+    float: none;
+  }
+}
+/* line 1067, ../assets/sass/components/_filters.scss */
 .view-research-project-gallery .form-actions .btn-primary {
   background-color: #26686d;
   border-color: #225d62;
 }
-/* line 714, ../assets/sass/components/_filters.scss */
+/* line 1071, ../assets/sass/components/_filters.scss */
 .view-research-project-gallery .form-actions .btn-primary:hover {
   background-color: #1b494c;
   border-color: #1e5357;
 }
-/* line 720, ../assets/sass/components/_filters.scss */
-.view-research-project-gallery .form-actions .button {
-  text-transform: uppercase;
-  border-radius: 0;
+@media (max-width: 768px) {
+  /* line 1050, ../assets/sass/components/_filters.scss */
+  .view-research-project-gallery .form-actions {
+    display: flex;
+    flex-direction: column-reverse;
+  }
 }
 
 /* line 10, ../assets/sass/components/_gallery.scss */
@@ -11857,108 +12236,113 @@ article.news-story {
 }
 
 /* line 24, ../assets/sass/components/_paragraphs.scss */
+.paragraph--type--columns-4 {
+  margin-top: 30px;
+}
+
+/* line 28, ../assets/sass/components/_paragraphs.scss */
 .paragraph--type--accordion .field, .paragraph--type--tabs .field {
   padding: 20px;
 }
 
-/* line 29, ../assets/sass/components/_paragraphs.scss */
-.para_2_col h2, .para_2_col h3, .para_2_col h4, .para_2_col h5, .para_2_col h6, .para_3_col h2, .para_3_col h3, .para_3_col h4, .para_3_col h5, .para_3_col h6 {
+/* line 33, ../assets/sass/components/_paragraphs.scss */
+.para_2_col h2, .para_2_col h3, .para_2_col h4, .para_2_col h5, .para_2_col h6, .para_3_col h2, .para_3_col h3, .para_3_col h4, .para_3_col h5, .para_3_col h6, .para_4_col h2, .para_4_col h3, .para_4_col h4, .para_4_col h5, .para_4_col h6 {
   margin-top: 0;
   line-height: 20px;
 }
 
-/* line 35, ../assets/sass/components/_paragraphs.scss */
+/* line 39, ../assets/sass/components/_paragraphs.scss */
 .paragraph__column {
   width: 100%;
   float: left;
 }
-/* line 39, ../assets/sass/components/_paragraphs.scss */
+/* line 43, ../assets/sass/components/_paragraphs.scss */
 .paragraph__column .col-l {
   padding-left: 0;
   padding-right: 15px;
 }
 @media (max-width: 768px) {
-  /* line 39, ../assets/sass/components/_paragraphs.scss */
+  /* line 43, ../assets/sass/components/_paragraphs.scss */
   .paragraph__column .col-l {
     padding-right: 0;
     padding-left: 0;
   }
 }
-/* line 49, ../assets/sass/components/_paragraphs.scss */
+/* line 53, ../assets/sass/components/_paragraphs.scss */
 .paragraph__column .col-m {
   padding-right: 7.5px;
   padding-left: 7.5px;
 }
 @media (max-width: 768px) {
-  /* line 49, ../assets/sass/components/_paragraphs.scss */
+  /* line 53, ../assets/sass/components/_paragraphs.scss */
   .paragraph__column .col-m {
     padding-right: 0;
     padding-left: 0;
   }
 }
-/* line 59, ../assets/sass/components/_paragraphs.scss */
+/* line 63, ../assets/sass/components/_paragraphs.scss */
 .paragraph__column .col-r {
   padding-right: 0;
   padding-left: 15px;
 }
 @media (max-width: 768px) {
-  /* line 59, ../assets/sass/components/_paragraphs.scss */
+  /* line 63, ../assets/sass/components/_paragraphs.scss */
   .paragraph__column .col-r {
     padding-right: 0;
     padding-left: 0;
   }
 }
-/* line 69, ../assets/sass/components/_paragraphs.scss */
+/* line 73, ../assets/sass/components/_paragraphs.scss */
 .paragraph__column .col-f {
   padding-right: 0;
   padding-left: 0;
 }
 @media (max-width: 768px) {
-  /* line 74, ../assets/sass/components/_paragraphs.scss */
+  /* line 78, ../assets/sass/components/_paragraphs.scss */
   .paragraph__column .container {
     padding: 0;
   }
-  /* line 79, ../assets/sass/components/_paragraphs.scss */
+  /* line 83, ../assets/sass/components/_paragraphs.scss */
   .paragraph__column .container .call-out-container {
     margin: 15px 0;
   }
 }
 @media (max-width: 768px) {
-  /* line 85, ../assets/sass/components/_paragraphs.scss */
+  /* line 89, ../assets/sass/components/_paragraphs.scss */
   .paragraph__column .col-xs-12 {
     margin-bottom: 20px;
   }
 }
 
-/* line 99, ../assets/sass/components/_paragraphs.scss */
+/* line 103, ../assets/sass/components/_paragraphs.scss */
 .paragraph--type--accordion .field {
   padding: 20px;
 }
-/* line 102, ../assets/sass/components/_paragraphs.scss */
+/* line 106, ../assets/sass/components/_paragraphs.scss */
 .paragraph--type--accordion .field p {
   margin: 0 0 16px;
 }
-/* line 107, ../assets/sass/components/_paragraphs.scss */
+/* line 111, ../assets/sass/components/_paragraphs.scss */
 .paragraph--type--accordion .field--name-field-media-file {
   padding: 0;
   margin-bottom: 15px;
 }
-/* line 112, ../assets/sass/components/_paragraphs.scss */
+/* line 116, ../assets/sass/components/_paragraphs.scss */
 .paragraph--type--accordion .panel-default {
   border: none;
 }
-/* line 116, ../assets/sass/components/_paragraphs.scss */
+/* line 120, ../assets/sass/components/_paragraphs.scss */
 .paragraph--type--accordion .panel-heading {
   border: none;
   padding: 0;
   border-top-right-radius: 0;
   border-top-left-radius: 0;
 }
-/* line 123, ../assets/sass/components/_paragraphs.scss */
+/* line 127, ../assets/sass/components/_paragraphs.scss */
 .paragraph--type--accordion .card-header {
   margin: 0 0 10px;
 }
-/* line 126, ../assets/sass/components/_paragraphs.scss */
+/* line 130, ../assets/sass/components/_paragraphs.scss */
 .paragraph--type--accordion .card-header .panel-title {
   color: #b00;
   margin: 0;
@@ -11973,34 +12357,34 @@ article.news-story {
   border-top-right-radius: 3px;
   border-top-left-radius: 3px;
 }
-/* line 141, ../assets/sass/components/_paragraphs.scss */
+/* line 145, ../assets/sass/components/_paragraphs.scss */
 .paragraph--type--accordion .card-header svg, .paragraph--type--accordion .card-header i {
   float: right;
   margin-top: 5px;
   color: #787878;
 }
 
-/* line 149, ../assets/sass/components/_paragraphs.scss */
+/* line 153, ../assets/sass/components/_paragraphs.scss */
 .paragraph--type--accordion .panel div:nth-last-child(2) {
   margin-bottom: 0 !important;
 }
 
-/* line 158, ../assets/sass/components/_paragraphs.scss */
+/* line 162, ../assets/sass/components/_paragraphs.scss */
 .btn-par {
   font-weight: 600;
   text-transform: uppercase;
 }
-/* line 162, ../assets/sass/components/_paragraphs.scss */
+/* line 166, ../assets/sass/components/_paragraphs.scss */
 .btn-par .fa-angle-right {
   margin-left: 10px;
 }
 
-/* line 167, ../assets/sass/components/_paragraphs.scss */
+/* line 171, ../assets/sass/components/_paragraphs.scss */
 .btn-fullw-wrapper {
   color: #4A4A4A;
 }
 
-/* line 171, ../assets/sass/components/_paragraphs.scss */
+/* line 175, ../assets/sass/components/_paragraphs.scss */
 .btn-fullw {
   width: 100%;
   text-align: center;
@@ -12011,53 +12395,53 @@ article.news-story {
   -ms-border-radius: 5px;
   border-radius: 5px;
 }
-/* line 181, ../assets/sass/components/_paragraphs.scss */
+/* line 185, ../assets/sass/components/_paragraphs.scss */
 .btn-fullw:hover {
   text-decoration: underline;
   background-color: #efefef;
 }
 
-/* line 194, ../assets/sass/components/_paragraphs.scss */
+/* line 198, ../assets/sass/components/_paragraphs.scss */
 .call-out-container .img-link-wrapper:hover + .field--type-link a {
   color: #BB0000;
   text-decoration: underline;
 }
-/* line 199, ../assets/sass/components/_paragraphs.scss */
+/* line 203, ../assets/sass/components/_paragraphs.scss */
 .call-out-container .field--item:hover > a {
   color: #BB0000;
   text-decoration: underline;
 }
-/* line 204, ../assets/sass/components/_paragraphs.scss */
+/* line 208, ../assets/sass/components/_paragraphs.scss */
 .call-out-container a {
   color: #444444;
   font-size: 20px;
   padding-top: 5px;
   font-weight: 500;
 }
-/* line 210, ../assets/sass/components/_paragraphs.scss */
+/* line 214, ../assets/sass/components/_paragraphs.scss */
 .call-out-container a:hover {
   color: #BB0000;
   text-decoration: underline;
 }
-/* line 216, ../assets/sass/components/_paragraphs.scss */
+/* line 220, ../assets/sass/components/_paragraphs.scss */
 .call-out-container .field--type-link {
   width: 100%;
   border-bottom: #BB0000 solid 5px;
   margin-bottom: 15px;
 }
-/* line 221, ../assets/sass/components/_paragraphs.scss */
+/* line 225, ../assets/sass/components/_paragraphs.scss */
 .call-out-container .field--type-link .field--item {
   padding: 15px;
   background: #F5F5F5;
 }
 @media (max-width: 768px) {
-  /* line 216, ../assets/sass/components/_paragraphs.scss */
+  /* line 220, ../assets/sass/components/_paragraphs.scss */
   .call-out-container .field--type-link {
     margin-bottom: 0;
   }
 }
 
-/* line 242, ../assets/sass/components/_paragraphs.scss */
+/* line 246, ../assets/sass/components/_paragraphs.scss */
 .dgray-bg .call-out-container a,
 .dscarlet-bg .call-out-container a,
 .dviolet-bg .call-out-container a,
@@ -12067,7 +12451,7 @@ article.news-story {
 .dorange-bg .call-out-container a {
   text-decoration: none;
 }
-/* line 245, ../assets/sass/components/_paragraphs.scss */
+/* line 249, ../assets/sass/components/_paragraphs.scss */
 .dgray-bg .call-out-container a:hover,
 .dscarlet-bg .call-out-container a:hover,
 .dviolet-bg .call-out-container a:hover,
@@ -12078,20 +12462,20 @@ article.news-story {
   text-decoration: underline;
 }
 
-/* line 260, ../assets/sass/components/_paragraphs.scss */
+/* line 264, ../assets/sass/components/_paragraphs.scss */
 .file .file-icon span {
   color: #bb0000;
 }
-/* line 267, ../assets/sass/components/_paragraphs.scss */
+/* line 271, ../assets/sass/components/_paragraphs.scss */
 .file .file-link a {
   color: #bb0000;
 }
-/* line 272, ../assets/sass/components/_paragraphs.scss */
+/* line 276, ../assets/sass/components/_paragraphs.scss */
 .file .file-size {
   color: #bb0000;
 }
 
-/* line 282, ../assets/sass/components/_paragraphs.scss */
+/* line 286, ../assets/sass/components/_paragraphs.scss */
 .slide-txt-container {
   width: 100%;
   position: absolute;
@@ -12101,7 +12485,7 @@ article.news-story {
   height: 100%;
   max-height: 550px;
 }
-/* line 291, ../assets/sass/components/_paragraphs.scss */
+/* line 295, ../assets/sass/components/_paragraphs.scss */
 .slide-txt-container .slide-txt {
   background-color: rgba(255, 255, 255, 0.9);
   padding: 20px;
@@ -12113,7 +12497,7 @@ article.news-story {
   transform: perspective(1px) translateY(-50%);
 }
 @media (max-width: 768px) {
-  /* line 291, ../assets/sass/components/_paragraphs.scss */
+  /* line 295, ../assets/sass/components/_paragraphs.scss */
   .slide-txt-container .slide-txt {
     width: 80%;
     top: 45%;
@@ -12123,11 +12507,11 @@ article.news-story {
     justify-content: center;
   }
 }
-/* line 310, ../assets/sass/components/_paragraphs.scss */
+/* line 314, ../assets/sass/components/_paragraphs.scss */
 .slide-txt-container .slide-txt .slide-txt-wrapper {
   width: 100%;
 }
-/* line 313, ../assets/sass/components/_paragraphs.scss */
+/* line 317, ../assets/sass/components/_paragraphs.scss */
 .slide-txt-container .slide-txt .slide-txt-wrapper h2 {
   font-size: 36px;
   text-transform: uppercase;
@@ -12136,36 +12520,36 @@ article.news-story {
   line-height: 1.1;
 }
 @media (max-width: 768px) {
-  /* line 313, ../assets/sass/components/_paragraphs.scss */
+  /* line 317, ../assets/sass/components/_paragraphs.scss */
   .slide-txt-container .slide-txt .slide-txt-wrapper h2 {
     font-size: 15px;
     margin-top: 0;
   }
 }
-/* line 326, ../assets/sass/components/_paragraphs.scss */
+/* line 330, ../assets/sass/components/_paragraphs.scss */
 .slide-txt-container .slide-txt .slide-txt-wrapper p {
   font-size: 18px;
   margin: 25px 0;
   color: #333333;
 }
 @media (max-width: 768px) {
-  /* line 326, ../assets/sass/components/_paragraphs.scss */
+  /* line 330, ../assets/sass/components/_paragraphs.scss */
   .slide-txt-container .slide-txt .slide-txt-wrapper p {
     font-size: 14px;
     margin-top: 0;
   }
 }
-/* line 337, ../assets/sass/components/_paragraphs.scss */
+/* line 341, ../assets/sass/components/_paragraphs.scss */
 .slide-txt-container .slide-txt .slide-txt-wrapper .btn {
   white-space: normal;
 }
-/* line 341, ../assets/sass/components/_paragraphs.scss */
+/* line 345, ../assets/sass/components/_paragraphs.scss */
 .slide-txt-container .slide-txt .slide-txt-wrapper .btn-links-20 {
   width: 100%;
   margin: 0 auto;
   font-size: 18px;
 }
-/* line 346, ../assets/sass/components/_paragraphs.scss */
+/* line 350, ../assets/sass/components/_paragraphs.scss */
 .slide-txt-container .slide-txt .slide-txt-wrapper .btn-links-20 .btn-wrapper {
   min-width: 25%;
   margin: 10px;
@@ -12175,23 +12559,23 @@ article.news-story {
   text-transform: uppercase;
   padding: 5px;
 }
-/* line 355, ../assets/sass/components/_paragraphs.scss */
+/* line 359, ../assets/sass/components/_paragraphs.scss */
 .slide-txt-container .slide-txt .slide-txt-wrapper .btn-links-20 .btn-wrapper .btn-primary {
   background-color: transparent;
   border-color: transparent;
   border: 0;
   border-radius: 0;
 }
-/* line 362, ../assets/sass/components/_paragraphs.scss */
+/* line 366, ../assets/sass/components/_paragraphs.scss */
 .slide-txt-container .slide-txt .slide-txt-wrapper .btn-links-20 .btn-wrapper svg, .slide-txt-container .slide-txt .slide-txt-wrapper .btn-links-20 .btn-wrapper i {
   padding-top: 1px;
 }
-/* line 366, ../assets/sass/components/_paragraphs.scss */
+/* line 370, ../assets/sass/components/_paragraphs.scss */
 .slide-txt-container .slide-txt .slide-txt-wrapper .btn-links-20 .btn-wrapper:hover {
   background: #8E0101;
 }
 @media (max-width: 768px) {
-  /* line 346, ../assets/sass/components/_paragraphs.scss */
+  /* line 350, ../assets/sass/components/_paragraphs.scss */
   .slide-txt-container .slide-txt .slide-txt-wrapper .btn-links-20 .btn-wrapper {
     display: block;
     width: 100%;
@@ -12199,22 +12583,22 @@ article.news-story {
     font-weight: 700;
   }
 }
-/* line 378, ../assets/sass/components/_paragraphs.scss */
+/* line 382, ../assets/sass/components/_paragraphs.scss */
 .slide-txt-container .slide-txt .slide-txt-wrapper .btn-links-20 .btn-fullw-wrapper {
   background: transparent;
   color: #4A4A4A;
 }
-/* line 382, ../assets/sass/components/_paragraphs.scss */
+/* line 386, ../assets/sass/components/_paragraphs.scss */
 .slide-txt-container .slide-txt .slide-txt-wrapper .btn-links-20 .btn-fullw-wrapper:hover {
   background: transparent;
 }
-/* line 388, ../assets/sass/components/_paragraphs.scss */
+/* line 392, ../assets/sass/components/_paragraphs.scss */
 .slide-txt-container .slide-txt .slide-txt-wrapper .btn-links-19 {
   width: 100%;
   margin: 0 auto;
   font-size: 18px;
 }
-/* line 393, ../assets/sass/components/_paragraphs.scss */
+/* line 397, ../assets/sass/components/_paragraphs.scss */
 .slide-txt-container .slide-txt .slide-txt-wrapper .btn-links-19 .btn-wrapper {
   min-width: 40%;
   margin: 10px;
@@ -12224,23 +12608,23 @@ article.news-story {
   text-transform: uppercase;
   padding: 5px;
 }
-/* line 402, ../assets/sass/components/_paragraphs.scss */
+/* line 406, ../assets/sass/components/_paragraphs.scss */
 .slide-txt-container .slide-txt .slide-txt-wrapper .btn-links-19 .btn-wrapper .btn-primary {
   background-color: transparent;
   border-color: transparent;
   border: 0;
   border-radius: 0;
 }
-/* line 409, ../assets/sass/components/_paragraphs.scss */
+/* line 413, ../assets/sass/components/_paragraphs.scss */
 .slide-txt-container .slide-txt .slide-txt-wrapper .btn-links-19 .btn-wrapper svg, .slide-txt-container .slide-txt .slide-txt-wrapper .btn-links-19 .btn-wrapper i {
   padding-top: 1px;
 }
-/* line 413, ../assets/sass/components/_paragraphs.scss */
+/* line 417, ../assets/sass/components/_paragraphs.scss */
 .slide-txt-container .slide-txt .slide-txt-wrapper .btn-links-19 .btn-wrapper:hover {
   background: #8E0101;
 }
 @media (max-width: 768px) {
-  /* line 393, ../assets/sass/components/_paragraphs.scss */
+  /* line 397, ../assets/sass/components/_paragraphs.scss */
   .slide-txt-container .slide-txt .slide-txt-wrapper .btn-links-19 .btn-wrapper {
     display: block;
     width: 100%;
@@ -12248,22 +12632,22 @@ article.news-story {
     font-weight: 700;
   }
 }
-/* line 425, ../assets/sass/components/_paragraphs.scss */
+/* line 429, ../assets/sass/components/_paragraphs.scss */
 .slide-txt-container .slide-txt .slide-txt-wrapper .btn-links-19 .btn-fullw-wrapper {
   background: transparent;
   color: #4A4A4A;
 }
-/* line 429, ../assets/sass/components/_paragraphs.scss */
+/* line 433, ../assets/sass/components/_paragraphs.scss */
 .slide-txt-container .slide-txt .slide-txt-wrapper .btn-links-19 .btn-fullw-wrapper:hover {
   background: transparent;
 }
-/* line 435, ../assets/sass/components/_paragraphs.scss */
+/* line 439, ../assets/sass/components/_paragraphs.scss */
 .slide-txt-container .slide-txt .slide-txt-wrapper .btn-links-18 {
   width: 100%;
   margin: 0 auto;
   font-size: 18px;
 }
-/* line 440, ../assets/sass/components/_paragraphs.scss */
+/* line 444, ../assets/sass/components/_paragraphs.scss */
 .slide-txt-container .slide-txt .slide-txt-wrapper .btn-links-18 .btn-wrapper {
   min-width: 50%;
   margin: 10px;
@@ -12273,23 +12657,23 @@ article.news-story {
   text-transform: uppercase;
   padding: 5px;
 }
-/* line 449, ../assets/sass/components/_paragraphs.scss */
+/* line 453, ../assets/sass/components/_paragraphs.scss */
 .slide-txt-container .slide-txt .slide-txt-wrapper .btn-links-18 .btn-wrapper .btn-primary {
   background-color: transparent;
   border-color: transparent;
   border: 0;
   border-radius: 0;
 }
-/* line 456, ../assets/sass/components/_paragraphs.scss */
+/* line 460, ../assets/sass/components/_paragraphs.scss */
 .slide-txt-container .slide-txt .slide-txt-wrapper .btn-links-18 .btn-wrapper svg, .slide-txt-container .slide-txt .slide-txt-wrapper .btn-links-18 .btn-wrapper i {
   padding-top: 1px;
 }
-/* line 460, ../assets/sass/components/_paragraphs.scss */
+/* line 464, ../assets/sass/components/_paragraphs.scss */
 .slide-txt-container .slide-txt .slide-txt-wrapper .btn-links-18 .btn-wrapper:hover {
   background: #8E0101;
 }
 @media (max-width: 768px) {
-  /* line 440, ../assets/sass/components/_paragraphs.scss */
+  /* line 444, ../assets/sass/components/_paragraphs.scss */
   .slide-txt-container .slide-txt .slide-txt-wrapper .btn-links-18 .btn-wrapper {
     display: block;
     width: 100%;
@@ -12297,87 +12681,83 @@ article.news-story {
     font-weight: 700;
   }
 }
-/* line 472, ../assets/sass/components/_paragraphs.scss */
+/* line 476, ../assets/sass/components/_paragraphs.scss */
 .slide-txt-container .slide-txt .slide-txt-wrapper .btn-links-18 .btn-fullw-wrapper {
   background: transparent;
   color: #4A4A4A;
 }
-/* line 476, ../assets/sass/components/_paragraphs.scss */
+/* line 480, ../assets/sass/components/_paragraphs.scss */
 .slide-txt-container .slide-txt .slide-txt-wrapper .btn-links-18 .btn-fullw-wrapper:hover {
   background: transparent;
 }
 
-/* line 493, ../assets/sass/components/_paragraphs.scss */
+/* line 497, ../assets/sass/components/_paragraphs.scss */
 .paragraph--type--tagline {
   margin: 20px 0;
   float: left;
 }
 
-/* line 504, ../assets/sass/components/_paragraphs.scss */
+/* line 508, ../assets/sass/components/_paragraphs.scss */
 .paragraph--type--tabs .field {
   padding: 20px;
 }
-/* line 508, ../assets/sass/components/_paragraphs.scss */
+/* line 512, ../assets/sass/components/_paragraphs.scss */
 .paragraph--type--tabs .field--name-field-media-file {
   padding: 0;
 }
-/* line 512, ../assets/sass/components/_paragraphs.scss */
+/* line 516, ../assets/sass/components/_paragraphs.scss */
 .paragraph--type--tabs .field--name-field-media-image {
   padding: 20px 0;
 }
 
-/* line 523, ../assets/sass/components/_paragraphs.scss */
+/* line 527, ../assets/sass/components/_paragraphs.scss */
 .para_1_col .field--name-field-media-twitter {
   margin: 0 auto;
   width: 60%;
 }
-/* line 527, ../assets/sass/components/_paragraphs.scss */
+/* line 531, ../assets/sass/components/_paragraphs.scss */
 .para_1_col .field--name-field-media-twitter .col-xs-12 {
   padding: 0;
 }
 
-/* line 537, ../assets/sass/components/_paragraphs.scss */
+/* line 541, ../assets/sass/components/_paragraphs.scss */
 .paragraph--type--video iframe {
   width: 100% !important;
 }
 
-/* line 9, ../assets/sass/components/_people.scss */
-.view-people-directory {
-  margin-bottom: 40px;
-}
-/* line 12, ../assets/sass/components/_people.scss */
+/* line 11, ../assets/sass/components/_people.scss */
 .view-people-directory h3 {
   text-transform: uppercase;
 }
-/* line 16, ../assets/sass/components/_people.scss */
+/* line 15, ../assets/sass/components/_people.scss */
 .view-people-directory .row {
   display: flex;
 }
 @media (max-width: 768px) {
-  /* line 16, ../assets/sass/components/_people.scss */
+  /* line 15, ../assets/sass/components/_people.scss */
   .view-people-directory .row {
     display: block;
   }
 }
-/* line 24, ../assets/sass/components/_people.scss */
+/* line 23, ../assets/sass/components/_people.scss */
 .view-people-directory .view-header {
   margin-bottom: 20px;
   padding-bottom: 20px;
   border-bottom: solid #979797 3px;
 }
-/* line 30, ../assets/sass/components/_people.scss */
+/* line 29, ../assets/sass/components/_people.scss */
 .view-people-directory .people-row {
   font-size: 14px;
   line-height: 1.6;
   display: flex;
 }
 @media (max-width: 768px) {
-  /* line 30, ../assets/sass/components/_people.scss */
+  /* line 29, ../assets/sass/components/_people.scss */
   .view-people-directory .people-row {
     display: block;
   }
 }
-/* line 39, ../assets/sass/components/_people.scss */
+/* line 38, ../assets/sass/components/_people.scss */
 .view-people-directory .people-row .inner-people-grid {
   flex: 1;
   background: #F9F9F9;
@@ -12385,286 +12765,149 @@ article.news-story {
   margin-bottom: 30px;
 }
 @media (max-width: 768px) {
-  /* line 39, ../assets/sass/components/_people.scss */
+  /* line 38, ../assets/sass/components/_people.scss */
   .view-people-directory .people-row .inner-people-grid {
     flex: none;
   }
 }
-/* line 49, ../assets/sass/components/_people.scss */
+/* line 48, ../assets/sass/components/_people.scss */
 .view-people-directory .people-row .inner-people-grid .views-field-user-picture {
   margin-bottom: 10px;
 }
-/* line 55, ../assets/sass/components/_people.scss */
+/* line 54, ../assets/sass/components/_people.scss */
 .view-people-directory .people-row .inner-people-grid .views-field-nothing-1 img {
   width: 100%;
 }
-/* line 60, ../assets/sass/components/_people.scss */
+/* line 59, ../assets/sass/components/_people.scss */
 .view-people-directory .people-row .inner-people-grid .views-field-field-first-name,
 .view-people-directory .people-row .inner-people-grid .views-field-field-last-name {
   font-weight: bold;
   font-size: 16px;
 }
-/* line 67, ../assets/sass/components/_people.scss */
+/* line 66, ../assets/sass/components/_people.scss */
 .view-people-directory .people-row .inner-people-grid .views-field-field-first-name a:hover,
 .view-people-directory .people-row .inner-people-grid .views-field-field-last-name a:hover {
   color: #bb0000;
 }
+
 /* line 75, ../assets/sass/components/_people.scss */
-.view-people-directory .square-opic {
+.view-display-id-page_1 {
+  margin-bottom: 40px;
+}
+
+/* line 79, ../assets/sass/components/_people.scss */
+.square-opic {
   max-width: 220px;
   max-height: 220px;
   overflow: hidden;
   position: relative;
 }
-/* line 81, ../assets/sass/components/_people.scss */
-.view-people-directory .square-opic:after {
+/* line 85, ../assets/sass/components/_people.scss */
+.square-opic:after {
   content: "";
   display: block;
   padding-bottom: 100%;
 }
 @media (max-width: 768px) {
-  /* line 75, ../assets/sass/components/_people.scss */
-  .view-people-directory .square-opic {
+  /* line 79, ../assets/sass/components/_people.scss */
+  .square-opic {
     max-width: 100%;
     max-height: 630px;
   }
 }
-/* line 93, ../assets/sass/components/_people.scss */
-.view-people-directory .square-opic-content {
+
+/* line 97, ../assets/sass/components/_people.scss */
+.square-opic-content {
   position: absolute;
   width: 100%;
   height: 100%;
 }
 
-/* line 107, ../assets/sass/components/_people.scss */
-.block-views-exposed-filter-blockpeople-directory-page-1 {
-  padding: 20px 0px;
-}
-
-/* line 113, ../assets/sass/components/_people.scss */
-#views-exposed-form-people-directory-page-1 .form-item {
-  width: 100%;
-}
-/* line 117, ../assets/sass/components/_people.scss */
-#views-exposed-form-people-directory-page-1 .form-checkbox {
-  -webkit-appearance: none;
-  -moz-appearance: none;
-  -ie-appearance: none;
-  background-color: #fafafa;
-  border: 1px solid #cacece;
-  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
-  padding: 9px;
-  border-radius: 3px;
-  display: inline-block;
-  position: relative;
-  top: 4px;
-}
-/* line 130, ../assets/sass/components/_people.scss */
-#views-exposed-form-people-directory-page-1 .form-checkbox:active, #views-exposed-form-people-directory-page-1 .form-checkbox:checked:active {
-  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05), inset 0px 1px 3px rgba(0, 0, 0, 0.1);
-}
-/* line 134, ../assets/sass/components/_people.scss */
-#views-exposed-form-people-directory-page-1 .form-checkbox:checked {
-  background-color: #442369;
-  border: 1px solid #adb8c0;
-  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05), inset 0px -15px 10px -12px rgba(0, 0, 0, 0.05), inset 15px 10px -12px rgba(255, 255, 255, 0.1);
-  color: #99a1a7;
-}
-/* line 141, ../assets/sass/components/_people.scss */
-#views-exposed-form-people-directory-page-1 .form-checkbox:checked:after {
-  content: '\2713';
-  font-size: 14px;
-  position: absolute;
-  top: 0px;
-  left: 3px;
-  color: #ffffff;
-}
-/* line 151, ../assets/sass/components/_people.scss */
-#views-exposed-form-people-directory-page-1 .form-wrapper {
-  margin-top: 20px;
-}
-/* line 154, ../assets/sass/components/_people.scss */
-#views-exposed-form-people-directory-page-1 .form-wrapper legend {
-  text-transform: uppercase;
-  color: #4A4A4A;
-  font-weight: bold;
-  font-size: 18px;
-  border-bottom: none;
-  margin-bottom: 5px;
-}
-/* line 164, ../assets/sass/components/_people.scss */
-#views-exposed-form-people-directory-page-1 label {
-  width: 90%;
-  margin-left: 28px;
-}
-/* line 168, ../assets/sass/components/_people.scss */
-#views-exposed-form-people-directory-page-1 label input {
-  margin-left: -28px;
-  margin-right: 8px;
-}
-
-/* line 181, ../assets/sass/components/_people.scss */
-#views-exposed-form-people-directory-page-2 {
-  background: #D8D8D8;
-  padding: 10px;
-}
-/* line 185, ../assets/sass/components/_people.scss */
-#views-exposed-form-people-directory-page-2 details {
-  background: #ffffff;
-  padding: 5px 10px;
-  border-radius: 8px;
-  margin: 10px 0;
-}
-/* line 192, ../assets/sass/components/_people.scss */
-#views-exposed-form-people-directory-page-2 .ppl-filter-heading {
-  color: #225D62;
-  margin: 5px 0;
-  text-transform: capitalize;
-}
-/* line 198, ../assets/sass/components/_people.scss */
-#views-exposed-form-people-directory-page-2 .ppl-taxon-heading {
-  margin-top: 20px;
-}
-/* line 202, ../assets/sass/components/_people.scss */
-#views-exposed-form-people-directory-page-2 .form-checkbox {
-  -webkit-appearance: none;
-  -moz-appearance: none;
-  -ie-appearance: none;
-  background-color: #fafafa;
-  border: 1px solid #cacece;
-  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05), inset 0px -15px 10px -12px rgba(0, 0, 0, 0.05);
-  padding: 9px;
-  border-radius: 3px;
-  display: inline-block;
-  position: relative;
-  top: 4px;
-  margin-right: 5px;
-}
-/* line 216, ../assets/sass/components/_people.scss */
-#views-exposed-form-people-directory-page-2 .form-checkbox:active, #views-exposed-form-people-directory-page-2 .form-checkbox:checked:active {
-  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05), inset 0px 1px 3px rgba(0, 0, 0, 0.1);
-}
-/* line 220, ../assets/sass/components/_people.scss */
-#views-exposed-form-people-directory-page-2 .form-checkbox:checked {
-  background-color: #442369;
-  border: 1px solid #adb8c0;
-  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05), inset 0px -15px 10px -12px rgba(0, 0, 0, 0.05), inset 15px 10px -12px rgba(255, 255, 255, 0.1);
-  color: #99a1a7;
-}
-/* line 227, ../assets/sass/components/_people.scss */
-#views-exposed-form-people-directory-page-2 .form-checkbox:checked:after {
-  content: '\2713';
-  font-size: 14px;
-  position: absolute;
-  top: 0px;
-  left: 3px;
-  color: #ffffff;
-}
-/* line 237, ../assets/sass/components/_people.scss */
-#views-exposed-form-people-directory-page-2 #edit-submit-people-directory {
-  text-transform: uppercase;
-}
-/* line 241, ../assets/sass/components/_people.scss */
-#views-exposed-form-people-directory-page-2 #edit-reset {
-  text-transform: uppercase;
-}
-
-/* line 252, ../assets/sass/components/_people.scss */
+/* line 109, ../assets/sass/components/_people.scss */
 .path-user .page-header {
   display: none;
 }
 
-/* line 256, ../assets/sass/components/_people.scss */
+/* line 113, ../assets/sass/components/_people.scss */
 .bio-header-top {
   background: #F9F9F9;
 }
-/* line 261, ../assets/sass/components/_people.scss */
+/* line 118, ../assets/sass/components/_people.scss */
 .bio-header-top .bio-top-right img {
   padding: 15px 0;
   width: 100%;
 }
-/* line 269, ../assets/sass/components/_people.scss */
+/* line 126, ../assets/sass/components/_people.scss */
 .bio-header-top .field--name-field-google-map-location .field--item {
   padding: 20px 0;
 }
-/* line 272, ../assets/sass/components/_people.scss */
+/* line 129, ../assets/sass/components/_people.scss */
 .bio-header-top .field--name-field-google-map-location .field--item .geolocation-formatter-map-wrapper {
   border: solid 2px #979797;
 }
-/* line 280, ../assets/sass/components/_people.scss */
+/* line 137, ../assets/sass/components/_people.scss */
 .bio-header-top .bio-top-left h1 {
   margin-bottom: 0;
 }
-/* line 284, ../assets/sass/components/_people.scss */
-.bio-header-top .bio-top-left .bio-pronoun {
-  font-size: 14px;
-  font-style: italic;
-}
 
-/* line 292, ../assets/sass/components/_people.scss */
+/* line 144, ../assets/sass/components/_people.scss */
 .bio-header {
   width: 100%;
   float: left;
   margin: 0 0 20px;
 }
 
-/* line 298, ../assets/sass/components/_people.scss */
+/* line 150, ../assets/sass/components/_people.scss */
 .bio-btm-left {
   margin-bottom: 40px;
 }
-/* line 301, ../assets/sass/components/_people.scss */
+/* line 153, ../assets/sass/components/_people.scss */
 .bio-btm-left h2 {
   font-size: 22px;
 }
-/* line 305, ../assets/sass/components/_people.scss */
+/* line 157, ../assets/sass/components/_people.scss */
 .bio-btm-left .carousel {
   height: auto;
   overflow: hidden;
   width: 100%;
 }
-/* line 310, ../assets/sass/components/_people.scss */
+/* line 162, ../assets/sass/components/_people.scss */
 .bio-btm-left .carousel .field--name-field-media-image {
   padding-bottom: 0;
 }
-/* line 313, ../assets/sass/components/_people.scss */
+/* line 165, ../assets/sass/components/_people.scss */
 .bio-btm-left .carousel .field--name-field-media-image .img-responsive {
   width: 100%;
 }
 @media (max-width: 1030px) {
-  /* line 305, ../assets/sass/components/_people.scss */
+  /* line 157, ../assets/sass/components/_people.scss */
   .bio-btm-left .carousel {
     height: auto;
   }
 }
-/* line 323, ../assets/sass/components/_people.scss */
+/* line 175, ../assets/sass/components/_people.scss */
 .bio-btm-left .bio-exp {
   padding-left: 0;
 }
-/* line 327, ../assets/sass/components/_people.scss */
+/* line 179, ../assets/sass/components/_people.scss */
 .bio-btm-left .taxonomy-people-heading {
   float: left;
   width: 100%;
   padding-top: 15px;
 }
-/* line 332, ../assets/sass/components/_people.scss */
+/* line 184, ../assets/sass/components/_people.scss */
 .bio-btm-left .taxonomy-people-heading h2 {
   line-height: 0;
   font-size: 18px;
 }
 
-/* line 340, ../assets/sass/components/_people.scss */
+/* line 192, ../assets/sass/components/_people.scss */
 .bio-btm-right h3 {
   font-size: 18px;
   padding-top: 20px;
 }
 
-/* line 10, ../assets/sass/components/_research.scss */
-.view-research-project-gallery .row {
-  display: flex;
-  margin-bottom: 40px;
-}
-
-/* line 18, ../assets/sass/components/_research.scss */
+/* line 13, ../assets/sass/components/_research.scss */
 .page-node-type-research-landing-page #views-exposed-form-research-project-directory-block-1 .form-inline .control-label {
   position: absolute;
   left: -10000px;
@@ -12673,121 +12916,127 @@ article.news-story {
   height: 1px;
   overflow: hidden;
 }
-/* line 28, ../assets/sass/components/_research.scss */
+/* line 23, ../assets/sass/components/_research.scss */
 .page-node-type-research-landing-page .view-research-project-gallery {
   margin-bottom: 80px;
 }
-/* line 31, ../assets/sass/components/_research.scss */
+/* line 26, ../assets/sass/components/_research.scss */
 .page-node-type-research-landing-page .view-research-project-gallery .row {
   display: flex;
   margin-bottom: 40px;
 }
+@media (max-width: 768px) {
+  /* line 26, ../assets/sass/components/_research.scss */
+  .page-node-type-research-landing-page .view-research-project-gallery .row {
+    display: block;
+  }
+}
 
-/* line 42, ../assets/sass/components/_research.scss */
+/* line 41, ../assets/sass/components/_research.scss */
 .view-research-project-directory table .views-field-title {
   width: 35%;
 }
-/* line 46, ../assets/sass/components/_research.scss */
+/* line 45, ../assets/sass/components/_research.scss */
 .view-research-project-directory table .views-field-field-research-year {
   width: 10%;
 }
 @media (max-width: 992px) {
-  /* line 46, ../assets/sass/components/_research.scss */
+  /* line 45, ../assets/sass/components/_research.scss */
   .view-research-project-directory table .views-field-field-research-year {
     width: 15%;
   }
 }
 
-/* line 63, ../assets/sass/components/_research.scss */
+/* line 62, ../assets/sass/components/_research.scss */
 .page-node-type-research article {
   margin-bottom: 16px;
 }
-/* line 67, ../assets/sass/components/_research.scss */
+/* line 66, ../assets/sass/components/_research.scss */
 .page-node-type-research .page-header {
   display: none;
 }
-/* line 71, ../assets/sass/components/_research.scss */
+/* line 70, ../assets/sass/components/_research.scss */
 .page-node-type-research .research-title-wrapper {
   padding-left: 0;
 }
-/* line 75, ../assets/sass/components/_research.scss */
+/* line 74, ../assets/sass/components/_research.scss */
 .page-node-type-research .research-cont {
   padding-left: 0;
 }
-/* line 78, ../assets/sass/components/_research.scss */
+/* line 77, ../assets/sass/components/_research.scss */
 .page-node-type-research .research-cont .field--name-field-research-body {
   margin: 20px 0 40px;
 }
-/* line 83, ../assets/sass/components/_research.scss */
+/* line 82, ../assets/sass/components/_research.scss */
 .page-node-type-research .research-users {
   margin-bottom: 15px;
 }
-/* line 86, ../assets/sass/components/_research.scss */
+/* line 85, ../assets/sass/components/_research.scss */
 .page-node-type-research .research-users h2 {
   line-height: 0;
   font-size: 18px;
 }
-/* line 92, ../assets/sass/components/_research.scss */
+/* line 91, ../assets/sass/components/_research.scss */
 .page-node-type-research .taxonomy-research-wrapper {
   width: 100%;
   display: inline-block;
 }
-/* line 96, ../assets/sass/components/_research.scss */
+/* line 95, ../assets/sass/components/_research.scss */
 .page-node-type-research .taxonomy-research-wrapper .taxonomy-research-heading {
   width: 100%;
   padding-top: 15px;
 }
-/* line 100, ../assets/sass/components/_research.scss */
+/* line 99, ../assets/sass/components/_research.scss */
 .page-node-type-research .taxonomy-research-wrapper .taxonomy-research-heading h3 {
   line-height: 0;
   font-size: 18px;
 }
 
-/* line 111, ../assets/sass/components/_research.scss */
+/* line 110, ../assets/sass/components/_research.scss */
 .research .field--name-field-research-body {
   margin-bottom: 20px;
 }
 
-/* line 124, ../assets/sass/components/_research.scss */
+/* line 123, ../assets/sass/components/_research.scss */
 .page-node-type-research-project-gallery article {
   margin-bottom: 16px;
 }
-/* line 128, ../assets/sass/components/_research.scss */
+/* line 127, ../assets/sass/components/_research.scss */
 .page-node-type-research-project-gallery .page-header {
   display: none;
 }
-/* line 132, ../assets/sass/components/_research.scss */
+/* line 131, ../assets/sass/components/_research.scss */
 .page-node-type-research-project-gallery .rgall-title-wrapper {
   padding-left: 0;
 }
-/* line 136, ../assets/sass/components/_research.scss */
+/* line 135, ../assets/sass/components/_research.scss */
 .page-node-type-research-project-gallery .rgall-cont {
   padding-left: 0;
 }
-/* line 139, ../assets/sass/components/_research.scss */
+/* line 138, ../assets/sass/components/_research.scss */
 .page-node-type-research-project-gallery .rgall-cont .field--name-body {
   margin: 20px 0 40px;
 }
 
-/* line 151, ../assets/sass/components/_research.scss */
+/* line 150, ../assets/sass/components/_research.scss */
 .taxonomy-rgall-heading {
   float: left;
   width: 100%;
   padding-top: 15px;
 }
-/* line 156, ../assets/sass/components/_research.scss */
+/* line 155, ../assets/sass/components/_research.scss */
 .taxonomy-rgall-heading h2 {
   line-height: 0;
   font-size: 18px;
 }
 
-/* line 162, ../assets/sass/components/_research.scss */
+/* line 161, ../assets/sass/components/_research.scss */
 .taxonomy-research-heading {
   float: left;
   width: 100%;
   padding-top: 15px;
 }
-/* line 167, ../assets/sass/components/_research.scss */
+/* line 166, ../assets/sass/components/_research.scss */
 .taxonomy-research-heading h2 {
   line-height: 0;
   font-size: 18px;
@@ -13018,54 +13267,58 @@ aside .sidebar-nav .active-trail .active-link-li ul {
 aside .sidebar-nav .active-trail .active-link-li ul ul {
   display: none;
 }
-/* line 119, ../assets/sass/components/_sidebar-menu.scss */
+/* line 120, ../assets/sass/components/_sidebar-menu.scss */
+aside .sidebar-nav .active-link-li ul {
+  display: block;
+}
+/* line 125, ../assets/sass/components/_sidebar-menu.scss */
 aside .sidebar-nav i {
   float: right;
   padding: 2px 10px;
   cursor: pointer;
 }
-/* line 125, ../assets/sass/components/_sidebar-menu.scss */
+/* line 131, ../assets/sass/components/_sidebar-menu.scss */
 aside .sidebar-nav:nth-last-child(1) {
   border-top: none;
 }
-/* line 131, ../assets/sass/components/_sidebar-menu.scss */
+/* line 137, ../assets/sass/components/_sidebar-menu.scss */
 aside .dropdown-menu {
   z-index: 20;
 }
-/* line 135, ../assets/sass/components/_sidebar-menu.scss */
+/* line 141, ../assets/sass/components/_sidebar-menu.scss */
 aside .nav > li > a:hover, aside .nav > li > a:focus {
   background-color: transparent;
 }
-/* line 139, ../assets/sass/components/_sidebar-menu.scss */
+/* line 145, ../assets/sass/components/_sidebar-menu.scss */
 aside .active-link {
   background-color: #ffffff;
   border-left: solid #D0021B 3px;
   padding-left: 5px;
   margin-left: -8px;
 }
-/* line 147, ../assets/sass/components/_sidebar-menu.scss */
+/* line 153, ../assets/sass/components/_sidebar-menu.scss */
 aside ul .active-link {
   margin-left: -5px;
 }
-/* line 152, ../assets/sass/components/_sidebar-menu.scss */
+/* line 158, ../assets/sass/components/_sidebar-menu.scss */
 aside ul ul .active-link {
   margin-left: -2px;
 }
-/* line 157, ../assets/sass/components/_sidebar-menu.scss */
+/* line 163, ../assets/sass/components/_sidebar-menu.scss */
 aside ul ul ul .active-link {
   margin-left: 0;
 }
-/* line 165, ../assets/sass/components/_sidebar-menu.scss */
+/* line 171, ../assets/sass/components/_sidebar-menu.scss */
 aside h2.active-link {
   background-color: transparent;
   border-left: none;
   padding-left: 0;
 }
-/* line 173, ../assets/sass/components/_sidebar-menu.scss */
+/* line 179, ../assets/sass/components/_sidebar-menu.scss */
 aside h2 a {
   color: #000000;
 }
-/* line 178, ../assets/sass/components/_sidebar-menu.scss */
+/* line 184, ../assets/sass/components/_sidebar-menu.scss */
 aside .nav {
   border-bottom: 1px #979797 dotted;
 }
@@ -13077,7 +13330,7 @@ aside .nav {
 }
 
 @media (max-width: 768px) {
-  /* line 188, ../assets/sass/components/_sidebar-menu.scss */
+  /* line 194, ../assets/sass/components/_sidebar-menu.scss */
   .region-sidebar-menu {
     display: none;
   }
diff --git a/web/themes/asc_bootstrap/js/scripts.js b/web/themes/asc_bootstrap/js/scripts.js
index ab34ced0ce2962539804db3808e11825c55ec388..00b6ed699b16f24fec1277cb76b3bb34b5b895e8 100644
--- a/web/themes/asc_bootstrap/js/scripts.js
+++ b/web/themes/asc_bootstrap/js/scripts.js
@@ -1,3 +1,9 @@
+jQuery(window).bind("pageshow", function(event) {
+  if (event.originalEvent.persisted) {
+      window.location.reload()
+  }
+});
+
 jQuery(document).ready(function(){
 
   //activates lightbox effect on gallery content type
@@ -79,6 +85,11 @@ jQuery(document).ready(function(){
     });
   }
 
+  //add arrow to people filter taxonomy
+  if(jQuery("#views-exposed-form-people-directory-page-1").length) {
+    jQuery(".panel-title").append("<i class='fa fa-angle-down' aria-hidden='true'></i>");
+  }
+
   //accordions change fontawesome character
   jQuery(".panel-title").click(function(){
     //jQuery(this).find("svg").toggleClass('fa-angle-up', addOrRemove);
@@ -130,9 +141,9 @@ jQuery(document).ready(function(){
   }*/
 
   //redirect if mobile for people directory main page
-  if(((window.location.pathname == '/people')||(window.location.pathname == '/directory')) && (jQuery(window).width() <= 740)) {
-      document.location = "people-mobile";
-  }
+  // if(((window.location.pathname == '/people')||(window.location.pathname == '/directory')) && (jQuery(window).width() <= 740)) {
+  //     document.location = "people-mobile";
+  // }
   //redirect if mobile for research directory main page
   if((window.location.pathname == '/research-project-directory') && (jQuery(window).width() <= 740)) {
       document.location = "research-project-directory-mobile";
@@ -166,6 +177,10 @@ jQuery(document).ready(function(){
   }
 
 
+  if (jQuery(".sidebar-nav .active-link-li").length) {
+    jQuery(".sidebar-nav .active-link-li").find("i:first").removeClass('fa-angle-right').addClass( 'fa-angle-down' );
+  }
+
 
   if(jQuery("#views-exposed-form-events-page-1").length) {
 
diff --git a/web/themes/asc_bootstrap/templates/paragraph/paragraph--columns_four.html.twig b/web/themes/asc_bootstrap/templates/paragraph/paragraph--columns_four.html.twig
new file mode 100644
index 0000000000000000000000000000000000000000..b27300e85a16622699a2b52ae6cb93a6d5bdee5c
--- /dev/null
+++ b/web/themes/asc_bootstrap/templates/paragraph/paragraph--columns_four.html.twig
@@ -0,0 +1,92 @@
+{#
+/**
+ * @file
+ * Custom Paragraphs template for displaying a Three Column layout.
+ *
+ * Available variables:
+ * - paragraph: Full paragraph entity.
+ *   - id: The paragraph ID.
+ *   - bundle: The type of the paragraph, for example, "image" or "text".
+ *   - authorid: The user ID of the paragraph author.
+ *   - createdtime: Formatted creation date. Preprocess functions can
+ *     reformat it by calling format_date() with the desired parameters on
+ *     $variables['paragraph']->getCreatedTime().
+ * - content: All paragraph items. Use {{ content }} to print them all,
+ *   or print a subset such as {{ content.field_example }}. Use
+ *   {{ content|without('field_example') }} to temporarily suppress the printing
+ *   of a given child element.
+ * - attributes: HTML attributes for the containing element.
+ *   The attributes.class element may contain one or more of the following
+ *   classes:
+ *   - paragraphs: The current template type (also known as a "theming hook").
+ *   - paragraphs--type-[type]: The current paragraphs type. For example, if the paragraph is an
+ *     "Image" it would result in "paragraphs--type--image". Note that the machine
+ *     name will often be in a short form of the human readable label.
+ *   - paragraphs--view-mode--[view_mode]: The View Mode of the paragraph; for example, a
+ *     preview would result in: "paragraphs--view-mode--preview", and
+ *     default: "paragraphs--view-mode--default".
+ * - view_mode: View mode; for example, "preview" or "full".
+ * - logged_in: Flag for authenticated user status. Will be true when the
+ *   current user is a logged-in member.
+ * - is_admin: Flag for admin user status. Will be true when the current user
+ *   is an administrator.
+ *
+ * @see template_preprocess_paragraph()
+ *
+ */
+#}
+
+{# Setting up variables that determines the width for left, middle and right columns #}
+{% if content.field_column_style_3['#items'].getString() == "paragraph--style--25-25-25-25" %}
+
+        {% set leftwidth, mleftwidth, mrightwidth, rightwidth = 'col-xs-12 col-md-3', 'col-xs-12 col-md-3', 'col-xs-12 col-md-3', 'col-xs-12 col-md-3' %}
+
+{% else %}
+
+        {% set leftwidth, mleftwidth, mrightwidth, rightwidth = 'col-xs-12 col-md-3', 'col-xs-12 col-md-3', 'col-xs-12 col-md-3', 'col-xs-12 col-md-3' %}
+
+{% endif %}
+
+
+{# Setting up variable that determines the background color for section #}
+{% set bgcolor = content.field_background_color['#items'].getString() %}
+
+{% if bgcolor == ''%}
+  {% set bgcolor = 'transparent-bg' %}
+{% endif %}
+
+{# Prints div with classes, and content without Width and Background. #}
+<div{{ attributes.addClass(classes) }}>
+  <div class="paragraph__column {{ bgcolor }} para_4_col">
+
+{% if page_content_type == 'landing_page' %}
+        <div class="container">
+    {% endif %}
+
+{% set thecont = [] %}
+  {% for item in content|without('field_column_style_4')|without('field_background_color') %}
+    {% set thecont = thecont|merge(item) %}
+  {% endfor %}
+
+    <div class="{{ leftwidth }} col-l">
+      {{ thecont[0] }}
+    </div>
+
+    <div class="{{ mleftwidth }} col-m">
+      {{ thecont[1] }}
+    </div>
+
+    <div class="{{ mrightwidth }} col-m">
+      {{ thecont[2] }}
+    </div>
+
+    <div class="{{ rightwidth }} col-r">
+      {{ thecont[3] }}
+    </div>
+
+    {% if page_content_type == 'landing_page' %}
+        </div>
+    {% endif %}
+
+  </div>
+</div>
diff --git a/web/themes/asc_bootstrap/templates/system/includes/_footer.twig b/web/themes/asc_bootstrap/templates/system/includes/_footer.twig
index 274eed466e610d3dcf6a46ee5a8b7e59008f09e9..38450b2d7c214fd43549b940ab8fd23224ea1199 100644
--- a/web/themes/asc_bootstrap/templates/system/includes/_footer.twig
+++ b/web/themes/asc_bootstrap/templates/system/includes/_footer.twig
@@ -44,7 +44,7 @@
           If you have a disability and experience difficulty accessing this site, please contact us for assistance via email at <a href="mailto:asc-accessibility@osu.edu" class="email-link" title="Email for accessibility assistance">asc-accessibility@osu.edu</a>.
         </li>
         <li>
-          <a href="https://artsandsciences.osu.edu/privacy-policy">
+          <a href="https://go.osu.edu/privacy">
             Privacy Policy
           </a>
         </li>
diff --git a/web/themes/asc_bootstrap/templates/views/views-view.html.twig b/web/themes/asc_bootstrap/templates/views/views-view.html.twig
new file mode 100644
index 0000000000000000000000000000000000000000..ba59444dd0dd045a596738f05c1d5977b182e0e4
--- /dev/null
+++ b/web/themes/asc_bootstrap/templates/views/views-view.html.twig
@@ -0,0 +1,113 @@
+{#
+/**
+ * @file
+ * Default theme implementation for main view template.
+ *
+ * Available variables:
+ * - attributes: Remaining HTML attributes for the element.
+ * - css_name: A css-safe version of the view name.
+ * - css_class: The user-specified classes names, if any.
+ * - header: The optional header.
+ * - footer: The optional footer.
+ * - rows: The results of the view query, if any.
+ * - empty: The content to display if there are no rows.
+ * - pager: The optional pager next/prev links to display.
+ * - exposed: Exposed widget form/info to display.
+ * - feed_icons: Optional feed icons to display.
+ * - more: An optional link to the next page of results.
+ * - title: Title of the view, only used when displaying in the admin preview.
+ * - title_prefix: Additional output populated by modules, intended to be
+ *   displayed in front of the view title.
+ * - title_suffix: Additional output populated by modules, intended to be
+ *   displayed after the view title.
+ * - attachment_before: An optional attachment view to be displayed before the
+ *   view content.
+ * - attachment_after: An optional attachment view to be displayed after the
+ *   view content.
+ * - dom_id: Unique id for every view being printed to give unique class for
+ *   JavaScript.
+ *
+ * @ingroup templates
+ *
+ * @see template_preprocess_views_view()
+ */
+#}
+{%
+  set classes = [
+    'view',
+    'view-' ~ id|clean_class,
+    'view-id-' ~ id,
+    'view-display-id-' ~ display_id,
+    dom_id ? 'js-view-dom-id-' ~ dom_id,
+  ]
+%}
+<div{{ attributes.addClass(classes) }}>
+  {{ title_prefix }}
+  {% if title %}
+    {{ title }}
+  {% endif %}
+  {{ title_suffix }}
+
+  {% if view_name == 'people_directory'%}
+    {% if exposed %}
+      <div class="view-filters form-group">
+        {{ exposed }}
+      </div>
+    {% endif %}
+    {% if header %}
+      <div class="view-header">
+        {{ header }}
+      </div>
+    {% endif %}
+
+  {% else %}
+
+    {% if header %}
+      <div class="view-header">
+        {{ header }}
+      </div>
+    {% endif %}
+    {% if exposed %}
+      <div class="view-filters form-group">
+        {{ exposed }}
+      </div>
+    {% endif %}
+  {% endif %}
+  {% if attachment_before %}
+    <div class="attachment attachment-before">
+      {{ attachment_before }}
+    </div>
+  {% endif %}
+
+  {% if rows %}
+    <div class="view-content">
+      {{ rows }}
+    </div>
+  {% elseif empty %}
+    <div class="view-empty">
+      {{ empty }}
+    </div>
+  {% endif %}
+
+  {% if pager %}
+    {{ pager }}
+  {% endif %}
+  {% if attachment_after %}
+    <div class="attachment attachment-after">
+      {{ attachment_after }}
+    </div>
+  {% endif %}
+  {% if more %}
+    {{ more }}
+  {% endif %}
+  {% if footer %}
+    <div class="view-footer">
+      {{ footer }}
+    </div>
+  {% endif %}
+  {% if feed_icons %}
+    <div class="feed-icons">
+      {{ feed_icons }}
+    </div>
+  {% endif %}
+</div>
diff --git a/web/themes/asc_gateway/templates/system/page--front.html.twig b/web/themes/asc_gateway/templates/system/page--front.html.twig
index bbb8a6c6decec3813ebb041779710ddf9dea176a..aafe43bfe4791f0e938eb89c63f45c25ad1a79f8 100644
--- a/web/themes/asc_gateway/templates/system/page--front.html.twig
+++ b/web/themes/asc_gateway/templates/system/page--front.html.twig
@@ -143,12 +143,12 @@
             <div class="col-xs-12 col-md-6 sf-col2">
               <ul>
                 <li>
-                  <a href="#">
+                  <a href="/form/contact-us">
                     Questions, Feedback, Accessibility
                   </a>
                 </li>
                 <li>
-                  <a href="#">
+                  <a href="https://go.osu.edu/privacy">
                     Privacy Policy
                   </a>
                 </li>
diff --git a/web/themes/asc_gateway/templates/system/page.html.twig b/web/themes/asc_gateway/templates/system/page.html.twig
index 4bb2f1065c66225d1433c732c051e2d3ca16cb63..f89866e042c1db7b927307454e7df68264bc5d68 100644
--- a/web/themes/asc_gateway/templates/system/page.html.twig
+++ b/web/themes/asc_gateway/templates/system/page.html.twig
@@ -150,12 +150,12 @@
             <div class="col-xs-12 col-md-6 sf-col2">
               <ul>
                 <li>
-                  <a href="#">
+                  <a href="/form/contact-us">
                     Questions, Feedback, Accessibility
                   </a>
                 </li>
                 <li>
-                  <a href="#">
+                  <a href="https://go.osu.edu/privacy">
                     Privacy Policy
                   </a>
                 </li>
diff --git a/web/themes/asc_seven/asc_seven.info.yml b/web/themes/asc_seven/asc_seven.info.yml
new file mode 100644
index 0000000000000000000000000000000000000000..8d15068c3c3ea7da3e8bc020d21645b2afe65506
--- /dev/null
+++ b/web/themes/asc_seven/asc_seven.info.yml
@@ -0,0 +1,32 @@
+# This theme is marked as @internal. It is intended to evolve and change over
+# minor releases.
+# Change record https://www.drupal.org/node/2582945.
+# As the UI of Drupal improves between minor versions, the mark up and assets
+# in the Seven theme will change. The Seven theme is not backwards
+# compatible. If you wish to modify the output or assets of Seven you can:
+# 1. Copy the whole of Seven and rename it as your own administration theme. You
+# will need to manually manage your own updates if you want to stay up to
+# date with Seven's bug fixes and feature support.
+#
+# 2. Sub-theme Seven. This is only recommended if you want to make minor
+# tweaks and understand that Seven could break your modifications as it
+# changes.
+name: 'asc_seven'
+type: theme
+base theme: seven
+description: 'Adds custom CSS to default administration theme for Drupal 8.'
+alt text: 'Default administration theme for Drupal 8 with simple blocks, clean lines, and custom CSS.'
+package: Core
+version: VERSION
+core: 8.x
+
+regions:
+  header: 'Header'
+  pre_content: 'Pre-content'
+  breadcrumb: 'Breadcrumb'
+  highlighted: 'Highlighted'
+  help: 'Help'
+  content: 'Content'
+
+libraries:
+ - 'asc_seven/global-styling'
diff --git a/web/themes/asc_seven/asc_seven.libraries.yml b/web/themes/asc_seven/asc_seven.libraries.yml
new file mode 100644
index 0000000000000000000000000000000000000000..52f4220a868b69484a1db04097355cbde2a8eab8
--- /dev/null
+++ b/web/themes/asc_seven/asc_seven.libraries.yml
@@ -0,0 +1,4 @@
+global-styling:
+  css:
+    theme:
+      css/customstyle.css: {}
diff --git a/web/themes/asc_seven/asc_seven.theme b/web/themes/asc_seven/asc_seven.theme
new file mode 100644
index 0000000000000000000000000000000000000000..68fe7328905e38cd1cd5351f6a8c46940865840d
--- /dev/null
+++ b/web/themes/asc_seven/asc_seven.theme
@@ -0,0 +1,18 @@
+<?php
+use \Drupal\Core\Form\FormStateInterface;
+
+function asc_seven_form_user_cancel_form_alter(&$form, FormStateInterface $form_state, $form_id) {
+  // Don't allow delet users or content when disabling an account
+  unset($form['user_cancel_method']['#options']['user_cancel_block_unpublish']);
+  unset($form['user_cancel_method']['#options']['user_cancel_reassign']);
+  unset($form['user_cancel_method']['#options']['user_cancel_delete']);
+  unset($form['user_cancel_confirm']);
+}
+
+function asc_seven_form_user_multiple_cancel_confirm_alter(&$form, FormStateInterface $form_state, $form_id) {
+  // Don't allow delet users or content when disabling an account
+  unset($form['user_cancel_method']['#options']['user_cancel_block_unpublish']);
+  unset($form['user_cancel_method']['#options']['user_cancel_reassign']);
+  unset($form['user_cancel_method']['#options']['user_cancel_delete']);
+  unset($form['user_cancel_confirm']);
+}
diff --git a/web/themes/asc_seven/css/customstyle.css b/web/themes/asc_seven/css/customstyle.css
new file mode 100644
index 0000000000000000000000000000000000000000..42c1f96ba892f7d86c4f27dd2017f1d55ad639ab
--- /dev/null
+++ b/web/themes/asc_seven/css/customstyle.css
@@ -0,0 +1,39 @@
+/*
+// Landing Page Slideshow Labels
+// --------------------------------------------------
+*/
+#field-slides2-values .form-type-checkbox label {
+  font-size: 16px;
+}
+
+
+/*
+// Background Color Selection Box
+// --------------------------------------------------
+*/
+
+.field--name-field-background-color .form-select option[value="lgray-bg"]{
+  background-color: red !important;
+}
+/*select option {
+  margin: 40px;
+  background: rgba(0, 0, 0, 0.3);
+  color: #fff;
+  text-shadow: 0 1px 0 rgba(0, 0, 0, 0.4);
+}
+
+select option[value="1"] {
+  background: rgba(100, 100, 100, 0.3);
+}
+
+select option[value="2"] {
+  background: rgba(150, 150, 150, 0.3);
+}
+
+select option[value="3"] {
+  background: rgba(200, 200, 200, 0.3);
+}
+
+select option[value="4"] {
+  background: rgba(250, 250, 250, 0.3);
+}*/